pioneers-14.1/0000755000175000017500000000000011760646036010275 500000000000000pioneers-14.1/client/0000755000175000017500000000000011760646033011550 500000000000000pioneers-14.1/client/ai/0000755000175000017500000000000011760646035012143 500000000000000pioneers-14.1/client/ai/Makefile.am0000644000175000017500000000236411572674023014123 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA bin_PROGRAMS += pioneersai pioneersai_CPPFLAGS = -I$(top_srcdir)/client -I$(top_srcdir)/client/common $(console_cflags) $(GOBJECT2_CFLAGS) pioneersai_SOURCES = \ client/callback.h \ client/ai/ai.h \ client/ai/ai.c \ client/ai/greedy.c \ client/ai/lobbybot.c pioneersai_LDADD = libpioneersclient.a $(console_libs) $(GOBJECT2_LIBS) config_DATA += \ client/ai/computer_names pioneers-14.1/client/ai/ai.h0000644000175000017500000000210211572674023012617 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _ai_h #define _ai_h #include #include "callback.h" void ai_panic(const char *message); void ai_wait(void); void ai_chat(const char *message); void greedy_init(void); void lobbybot_init(void); #endif pioneers-14.1/client/ai/ai.c0000644000175000017500000001342111664746065012630 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003,2006 Bas Wijnen * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "version.h" #include "game.h" #include "ai.h" #include "client.h" #include #include #include #include #include static char *server = NULL; static char *port = NULL; static char *name = NULL; static char *ai; static int waittime = 1000; static gboolean silent = FALSE; static gboolean enable_debug = FALSE; static gboolean show_version = FALSE; static Map *map = NULL; static void logbot_init(void); static const struct algorithm_info { /** Name of the algorithm (for commandline) */ const gchar *name; /** Init function */ void (*init_func) (void); /** Request to be a player? */ gboolean request_player; /** Quit if request not honoured */ gboolean quit_if_not_request; } algorithms[] = { /* *INDENT-OFF* */ { "greedy", &greedy_init, TRUE, TRUE}, { "lobbybot", &lobbybot_init, FALSE, TRUE}, { "logbot", &logbot_init, FALSE, TRUE}, /* *INDENT-ON* */ }; static int active_algorithm = 0; UIDriver Glib_Driver; static GOptionEntry commandline_entries[] = { {"server", 's', 0, G_OPTION_ARG_STRING, &server, /* Commandline pioneersai: server */ N_("Server Host"), PIONEERS_DEFAULT_GAME_HOST}, {"port", 'p', 0, G_OPTION_ARG_STRING, &port, /* Commandline pioneersai: port */ N_("Server Port"), PIONEERS_DEFAULT_GAME_PORT}, {"name", 'n', 0, G_OPTION_ARG_STRING, &name, /* Commandline pioneersai: name */ N_("Computer name (mandatory)"), NULL}, {"time", 't', 0, G_OPTION_ARG_INT, &waittime, /* Commandline pioneersai: time */ N_("Time to wait between turns (in milliseconds)"), "1000"}, {"chat-free", 'c', 0, G_OPTION_ARG_NONE, &silent, /* Commandline pioneersai: chat-free */ N_("Stop computer player from talking"), NULL}, {"algorithm", 'a', 0, G_OPTION_ARG_STRING, &ai, /* Commandline pioneersai: algorithm */ N_("Type of computer player"), "greedy"}, {"debug", '\0', 0, G_OPTION_ARG_NONE, &enable_debug, /* Commandline option of ai: enable debug logging */ N_("Enable debug messages"), NULL}, {"version", '\0', 0, G_OPTION_ARG_NONE, &show_version, /* Commandline option of ai: version */ N_("Show version information"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; static void ai_init_glib_et_al(int argc, char **argv) { GOptionContext *context; GError *error = NULL; context = /* Long description in the commandline for pioneersai: help */ g_option_context_new(_("- Computer player for Pioneers")); g_option_context_add_main_entries(context, commandline_entries, PACKAGE); g_option_context_parse(context, &argc, &argv, &error); g_option_context_free(context); if (error != NULL) { g_print("%s\n", error->message); g_error_free(error); exit(1); } if (show_version) { g_print(_("Pioneers version:")); g_print(" "); g_print(FULL_VERSION); g_print("\n"); exit(0); } g_type_init(); set_ui_driver(&Glib_Driver); log_set_func_default(); } static void ai_init(void) { set_enable_debug(enable_debug); if (server == NULL) server = g_strdup(PIONEERS_DEFAULT_GAME_HOST); if (port == NULL) port = g_strdup(PIONEERS_DEFAULT_GAME_PORT); g_random_set_seed(time(NULL) + getpid()); if (!name) { /* ai commandline error */ g_print(_("A name must be provided.\n")); exit(0); } if (ai != NULL) { gint i; for (i = 0; i < G_N_ELEMENTS(algorithms); i++) { if (!strcmp(algorithms[i].name, ai)) active_algorithm = i; } } log_message(MSG_INFO, _("Type of computer player: %s\n"), algorithms[active_algorithm].name); algorithms[active_algorithm].init_func(); } void ai_panic(const char *message) { cb_chat(message); callbacks.quit(); } static void ai_offline(void) { gchar *style; callbacks.offline = callbacks.quit; notifying_string_set(requested_name, name); style = g_strdup_printf("ai %s", algorithms[active_algorithm].name); notifying_string_set(requested_style, style); cb_connect(server, port, !algorithms[active_algorithm].request_player); g_free(style); g_free(name); } static void ai_start_game(void) { if (algorithms[active_algorithm].request_player == my_player_spectator() && algorithms[active_algorithm].quit_if_not_request) { ai_panic(N_("The game is already full. I'm leaving.")); } } void ai_wait(void) { g_usleep(waittime * 1000); } void ai_chat(const char *message) { if (!silent) cb_chat(message); } static Map *ai_get_map(void) { return map; } static void ai_set_map(Map * new_map) { map = new_map; } void frontend_set_callbacks(void) { callbacks.init_glib_et_al = &ai_init_glib_et_al; callbacks.init = &ai_init; callbacks.offline = &ai_offline; callbacks.start_game = &ai_start_game; callbacks.get_map = &ai_get_map; callbacks.set_map = &ai_set_map; } /* The logbot is intended to be used as a spectator in a game, and to collect * a transcript of the game in human readable form, which can be analysed * using external tools. */ void logbot_init(void) { } pioneers-14.1/client/ai/greedy.c0000644000175000017500000012671511653247721013522 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2005,2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "ai.h" #include "cost.h" #include #include /* * This is a rudimentary AI for Pioneers. * * What it does _NOT_ do: * * -Make roads explicitly to get the longest road card * -Initiate trade with other players * -Do anything seafarers * */ typedef struct resource_values_s { float value[NO_RESOURCE]; MaritimeInfo info; gint ports[NO_RESOURCE]; } resource_values_t; static int quote_num; /* used to avoid multiple chat messages when more than one other player * must discard resources */ static gboolean discard_starting; /* things we can buy, in the order that we want them. */ typedef enum { BUY_CITY, BUY_SETTLEMENT, BUY_ROAD, BUY_DEVEL_CARD, BUY_LAST } BuyType; /* * Forward declarations */ static Edge *best_road_to_road_spot(Node * n, float *score, const resource_values_t * resval); static Edge *best_road_to_road(const resource_values_t * resval); static Edge *best_road_spot(const resource_values_t * resval); static Node *best_city_spot(const resource_values_t * resval); static Node *best_settlement_spot(gboolean during_setup, const resource_values_t * resval); static int places_can_build_settlement(void); static gint determine_monopoly_resource(void); /* * Functions to keep track of what nodes we've visited */ typedef struct node_seen_set_s { Node *seen[MAP_SIZE * MAP_SIZE]; int size; } node_seen_set_t; static void nodeset_reset(node_seen_set_t * set) { set->size = 0; } static void nodeset_set(node_seen_set_t * set, Node * n) { int i; for (i = 0; i < set->size; i++) if (set->seen[i] == n) return; set->seen[set->size] = n; set->size++; } static int nodeset_isset(node_seen_set_t * set, Node * n) { int i; for (i = 0; i < set->size; i++) if (set->seen[i] == n) return 1; return 0; } typedef void iterate_node_func_t(Node * n, void *rock); /* * Iterate over all the nodes on the map calling func() with 'rock' * */ static void for_each_node(iterate_node_func_t * func, void *rock) { Map *map; int i, j, k; map = callbacks.get_map(); for (i = 0; i < map->x_size; i++) { for (j = 0; j < map->y_size; j++) { for (k = 0; k < 6; k++) { Node *n = map_node(map, i, j, k); if (n) func(n, rock); } } } } /** Determine the required resources. * @param assets The resources that are available * @param cost The cost to buy something * @retval need The additional resources required to buy this * @return TRUE if the assets are enough */ static gboolean can_pay_for(const gint assets[NO_RESOURCE], const gint cost[NO_RESOURCE], gint need[NO_RESOURCE]) { gint i; gboolean have_enough; have_enough = TRUE; for (i = 0; i < NO_RESOURCE; i++) { if (assets[i] >= cost[i]) need[i] = 0; else { need[i] = cost[i] - assets[i]; have_enough = FALSE; } } return have_enough; } /* How much does this cost to build? */ static const gint *cost_of(BuyType bt) { switch (bt) { case BUY_CITY: return cost_upgrade_settlement(); case BUY_SETTLEMENT: return cost_settlement(); case BUY_ROAD: return cost_road(); case BUY_DEVEL_CARD: return cost_development(); default: g_assert(0); return NULL; } } /* * Do I have the resources to buy this, is it available, and do I want it? */ static gboolean should_buy(const gint assets[NO_RESOURCE], BuyType bt, const resource_values_t * resval, gint need[NO_RESOURCE]) { if (!can_pay_for(assets, cost_of(bt), need)) return FALSE; switch (bt) { case BUY_CITY: return (stock_num_cities() > 0 && best_city_spot(resval) != NULL); case BUY_SETTLEMENT: return (stock_num_settlements() > 0 && best_settlement_spot(FALSE, resval) != NULL); case BUY_ROAD: /* don't sprawl :) */ return (stock_num_roads() > 0 && places_can_build_settlement() <= 2 && (best_road_spot(resval) != NULL || best_road_to_road(resval) != NULL)); case BUY_DEVEL_CARD: return (stock_num_develop() > 0 && can_buy_develop()); default: /* xxx bridge, ship */ return FALSE; } } /* * If I buy this, what will I have left? Note that some values in need[] * can be negative if I can't afford it. */ static void leftover_resources(const gint assets[NO_RESOURCE], BuyType bt, gint need[NO_RESOURCE]) { gint i; const gint *cost = cost_of(bt); for (i = 0; i < NO_RESOURCE; i++) need[i] = assets[i] - cost[i]; } /* * Probability of a dice roll */ static float dice_prob(int roll) { switch (roll) { case 2: case 12: return 3; case 3: case 11: return 6; case 4: case 10: return 8; case 5: case 9: return 11; case 6: case 8: return 14; default: return 0; } } /* * By default how valuable is this resource? */ static float default_score_resource(Resource resource) { float score; switch (resource) { case GOLD_TERRAIN: /* gold */ score = 1.25; break; case HILL_TERRAIN: /* brick */ score = 1.1; break; case FIELD_TERRAIN: /* grain */ score = 1.0; break; case MOUNTAIN_TERRAIN: /* rock */ score = 1.05; break; case PASTURE_TERRAIN: /* sheep */ score = 1.0; break; case FOREST_TERRAIN: /* wood */ score = 1.1; break; case DESERT_TERRAIN: case SEA_TERRAIN: default: score = 0; break; } return score; } /* For each node I own see how much i produce with it. keep a * tally with 'produce' */ static void reevaluate_iterator(Node * n, void *rock) { float *produce = (float *) rock; /* if i own this node */ if ((n) && (n->owner == my_player_num())) { int l; for (l = 0; l < 3; l++) { Hex *h = n->hexes[l]; float mult = 1.0; if (n->type == BUILD_CITY) mult = 2.0; if (h && h->terrain < DESERT_TERRAIN) { produce[h->terrain] += mult * default_score_resource(h->terrain) * dice_prob(h->roll); } } } } /* * Reevaluate the value of all the resources to us */ static void reevaluate_resources(resource_values_t * outval) { float produce[NO_RESOURCE]; int i; for (i = 0; i < NO_RESOURCE; i++) { produce[i] = 0; } for_each_node(&reevaluate_iterator, (void *) produce); /* Now invert all the positive numbers and give any zeros a weight of 2 * */ for (i = 0; i < NO_RESOURCE; i++) { if (produce[i] == 0) { outval->value[i] = default_score_resource(i); } else { outval->value[i] = 1.0 / produce[i]; } } /* * Save the maritime info too so we know if we can do port trades */ map_maritime_info(callbacks.get_map(), &outval->info, my_player_num()); for (i = 0; i < NO_RESOURCE; i++) { if (outval->info.specific_resource[i]) outval->ports[i] = 2; else if (outval->info.any_resource) outval->ports[i] = 3; else outval->ports[i] = 4; } } /* * */ static float resource_value(Resource resource, const resource_values_t * resval) { if (resource < NO_RESOURCE) return resval->value[resource]; else if (resource == GOLD_RESOURCE) return default_score_resource(resource); else return 0.0; } /* * How valuable is this hex to me? */ static float score_hex(Hex * hex, const resource_values_t * resval) { float score; if (hex == NULL) return 0; /* multiple resource value by dice probability */ score = resource_value(hex->terrain, resval) * dice_prob(hex->roll); /* if we don't have a 3 for 1 port yet and this is one it's valuable! */ if (!resval->info.any_resource) { if (hex->resource == ANY_RESOURCE) score += 0.5; } return score; } /* * How valuable is this hex to others */ static float default_score_hex(Hex * hex) { int score; if (hex == NULL) return 0; /* multiple resource value by dice probability */ score = default_score_resource(hex->terrain) * dice_prob(hex->roll); return score; } /* * Give a numerical score to how valuable putting a settlement/city on this spot is * */ static float score_node(Node * node, int city, const resource_values_t * resval) { int i; float score = 0; /* if not a node, how did this happen? */ g_assert(node != NULL); /* if already occupied, in water, or too close to others give a score of -1 */ if (is_node_on_land(node) == FALSE) return -1; if (is_node_spacing_ok(node) == FALSE) return -1; if (city == 0) { if (node->owner != -1) return -1; } for (i = 0; i < 3; i++) { score += score_hex(node->hexes[i], resval); } return score; } /* * Road connects here */ static int road_connects(Node * n) { int i; if (n == NULL) return 0; for (i = 0; i < 3; i++) { Edge *e = n->edges[i]; if ((e) && (e->owner == my_player_num())) return 1; } return 0; } /** Find the best spot for a settlement * @param during_setup Build a settlement during the setup phase? * During setup: no connected road is required, * and the no_setup must be taken into account * Normal play: settlement must be next to a road we own. */ static Node *best_settlement_spot(gboolean during_setup, const resource_values_t * resval) { int i, j, k; Node *best = NULL; float bestscore = -1.0; float score; Map *map = callbacks.get_map(); for (i = 0; i < map->x_size; i++) { for (j = 0; j < map->y_size; j++) { for (k = 0; k < 6; k++) { Node *n = map_node(map, i, j, k); if (!n) continue; if (during_setup) { if (n->no_setup) continue; } else { if (!road_connects(n)) continue; } score = score_node(n, 0, resval); if (score > bestscore) { best = n; bestscore = score; } } } } return best; } /* * What is the best settlement to upgrade to a city? * */ static Node *best_city_spot(const resource_values_t * resval) { int i, j, k; Node *best = NULL; float bestscore = -1.0; Map *map = callbacks.get_map(); for (i = 0; i < map->x_size; i++) { for (j = 0; j < map->y_size; j++) { for (k = 0; k < 6; k++) { Node *n = map_node(map, i, j, k); if (!n) continue; if ((n->owner == my_player_num()) && (n->type == BUILD_SETTLEMENT)) { float score = score_node(n, 1, resval); if (score > bestscore) { best = n; bestscore = score; } } } } } return best; } /* * Return the opposite end of this node, edge * */ static Node *other_node(Edge * e, Node * n) { if (e->nodes[0] == n) return e->nodes[1]; else return e->nodes[0]; } /* * * */ static Edge *traverse_out(Node * n, node_seen_set_t * set, float *score, const resource_values_t * resval) { float bscore = 0.0; Edge *best = NULL; int i; /* mark this node as seen */ nodeset_set(set, n); for (i = 0; i < 3; i++) { Edge *e = n->edges[i]; Edge *cur_e = NULL; Node *othernode; float cur_score; if (!e) continue; othernode = other_node(e, n); g_assert(othernode != NULL); /* if our road traverse it */ if (e->owner == my_player_num()) { if (!nodeset_isset(set, othernode)) cur_e = traverse_out(othernode, set, &cur_score, resval); } else if (can_road_be_built(e, my_player_num())) { /* no owner, how good is the other node ? */ cur_e = e; cur_score = score_node(othernode, 0, resval); /* umm.. can we build here? */ /*if (!can_settlement_be_built(othernode, my_player_num ())) cur_e = NULL; */ } /* is this the best edge we've seen? */ if ((cur_e != NULL) && (cur_score > bscore)) { best = cur_e; bscore = cur_score; } } *score = bscore; return best; } /* * Best road to a road * */ static Edge *best_road_to_road_spot(Node * n, float *score, const resource_values_t * resval) { float bscore = -1.0; Edge *best = NULL; int i, j; for (i = 0; i < 3; i++) { Edge *e = n->edges[i]; if (e) { Node *othernode = other_node(e, n); if (can_road_be_built(e, my_player_num())) { for (j = 0; j < 3; j++) { Edge *e2 = othernode->edges[j]; if (e2 == NULL) continue; /* We need to look further, temporarily mark this edge as having our road on it. */ e->owner = my_player_num(); e->type = BUILD_ROAD; if (can_road_be_built (e2, my_player_num())) { float nscore = score_node(other_node (e2, othernode), 0, resval); if (nscore > bscore) { bscore = nscore; best = e; } } /* restore map to its real state */ e->owner = -1; e->type = BUILD_NONE; } } } } *score = bscore; return best; } /* * Best road to road on whole map * */ static Edge *best_road_to_road(const resource_values_t * resval) { int i, j, k; Edge *best = NULL; float bestscore = -1.0; Map *map = callbacks.get_map(); for (i = 0; i < map->x_size; i++) { for (j = 0; j < map->y_size; j++) { for (k = 0; k < 6; k++) { Node *n = map_node(map, i, j, k); Edge *e; float score; if ((n) && (n->owner == my_player_num())) { e = best_road_to_road_spot(n, &score, resval); if (score > bestscore) { best = e; bestscore = score; } } } } } return best; } /* * Best road spot * */ static Edge *best_road_spot(const resource_values_t * resval) { int i, j, k; Edge *best = NULL; float bestscore = -1.0; node_seen_set_t nodeseen; Map *map = callbacks.get_map(); /* * For every node that we're the owner of traverse out to find the best * node we're one road away from and build that road * * * xxx loops */ for (i = 0; i < map->x_size; i++) { for (j = 0; j < map->y_size; j++) { for (k = 0; k < 6; k++) { Node *n = map_node(map, i, j, k); if ((n != NULL) && (n->owner == my_player_num())) { float score = -1.0; Edge *e; nodeset_reset(&nodeseen); e = traverse_out(n, &nodeseen, &score, resval); if (score > bestscore) { best = e; bestscore = score; } } } } } return best; } /* * Any road at all that's valid for us to build */ static void rand_road_iterator(Node * n, void *rock) { int i; Edge **out = (Edge **) rock; if (n == NULL) return; for (i = 0; i < 3; i++) { Edge *e = n->edges[i]; if ((e) && (can_road_be_built(e, my_player_num()))) *out = e; } } /* * Find any road we can legally build * */ static Edge *find_random_road(void) { Edge *e = NULL; for_each_node(&rand_road_iterator, &e); return e; } static void places_can_build_iterator(Node * n, void *rock) { int *count = (int *) rock; if (can_settlement_be_built(n, my_player_num())) (*count)++; } static int places_can_build_settlement(void) { int count = 0; for_each_node(&places_can_build_iterator, (void *) &count); return count; } /* * How many resource cards does player have? * */ static int num_assets(gint assets[NO_RESOURCE]) { int i; int count = 0; for (i = 0; i < NO_RESOURCE; i++) { count += assets[i]; } return count; } static int player_get_num_resource(int player) { return player_get(player)->statistics[STAT_RESOURCES]; } /* * Does this resource list contain one element? If so return it * otherwise return NO_RESOURCE */ static int which_one(gint assets[NO_RESOURCE]) { int i; int res = NO_RESOURCE; int tot = 0; for (i = 0; i < NO_RESOURCE; i++) { if (assets[i] > 0) { tot += assets[i]; res = i; } } if (tot == 1) return res; return NO_RESOURCE; } /* * Does this resource list contain just one kind of element? If so return it * otherwise return NO_RESOURCE */ static int which_resource(gint assets[NO_RESOURCE]) { int i; int res = NO_RESOURCE; int n_nonzero = 0; for (i = 0; i < NO_RESOURCE; i++) { if (assets[i] > 0) { n_nonzero++; res = i; } } if (n_nonzero == 1) return res; return NO_RESOURCE; } /* * What resource do we want the most? * * NOTE: If a resource is not available (players or bank), the * resval->value[resource] should be zero. */ static int resource_desire(gint assets[NO_RESOURCE], const resource_values_t * resval) { int i; BuyType bt; int res = NO_RESOURCE; float value = 0.0; gint need[NO_RESOURCE]; /* do i need just 1 more for something? */ for (bt = 0; bt < BUY_LAST; bt++) { if (should_buy(assets, bt, resval, need)) continue; res = which_one(need); if (res == NO_RESOURCE || resval->value[res] == 0) continue; return res; } /* desire the one we don't produce the most */ res = NO_RESOURCE; for (i = 0; i < NO_RESOURCE; i++) { if ((resval->value[i] > value) && (assets[i] < 2)) { res = i; value = resval->value[i]; } } return res; } static void findit_iterator(Node * n, void *rock) { Node **node = (Node **) rock; int i; if (!n) return; if (n->owner != my_player_num()) return; /* if i own this node */ for (i = 0; i < 3; i++) { if (n->edges[i] == NULL) continue; if (n->edges[i]->owner == my_player_num()) return; } *node = n; } /* Find the settlement with no roads yet * */ static Node *void_settlement(void) { Node *ret = NULL; for_each_node(&findit_iterator, (void *) &ret); return ret; } /* * Game setup * Build one house and one road */ static void greedy_setup_house(void) { Node *node; resource_values_t resval; reevaluate_resources(&resval); if (stock_num_settlements() == 0) { ai_panic(N_("No settlements in stock to use for setup")); return; } node = best_settlement_spot(TRUE, &resval); if (node == NULL) { ai_panic(N_("There is no place to setup a settlement")); return; } /*node_add(player, BUILD_SETTLEMENT, node->x, node->y, node->pos, FALSE); */ cb_build_settlement(node); } /* * Game setup * Build one house and one road */ static void greedy_setup_road(void) { Node *node; Edge *e = NULL; int i; resource_values_t resval; float tmp; reevaluate_resources(&resval); if (stock_num_roads() == 0) { ai_panic(N_("No roads in stock to use for setup")); return; } node = void_settlement(); e = best_road_to_road_spot(node, &tmp, &resval); /* if didn't find one just pick one randomly */ if (e == NULL) { for (i = 0; i < G_N_ELEMENTS(node->edges); i++) { if (is_edge_on_land(node->edges[i])) { e = node->edges[i]; break; } } if (e == NULL) { ai_panic(N_("There is no place to setup a road")); return; } } cb_build_road(e); } /* * Determine if there are any trades that I can do which will give me * enough to buy something. */ static gboolean find_optimal_trade(gint assets[NO_RESOURCE], const resource_values_t * resval, gint * amount, Resource * trade_away, Resource * want_resource) { Resource res = NO_RESOURCE; Resource temp; gint need[NO_RESOURCE]; BuyType bt; for (bt = 0; bt < BUY_LAST; bt++) { /* If we should buy something, why haven't we bought it? */ if (should_buy(assets, bt, resval, need)) continue; /* See what we need, and if we can get it. */ res = which_one(need); if (res == NO_RESOURCE || get_bank()[res] == 0) continue; /* See what we have left after we buy this (one value * will be negative), and whether we have enough of something * to trade for what's missing. */ leftover_resources(assets, bt, need); for (temp = 0; temp < NO_RESOURCE; temp++) { if (temp == res) continue; if (need[temp] > resval->ports[temp]) { *amount = resval->ports[temp]; *trade_away = temp; *want_resource = res; return TRUE; } } } return FALSE; } /** I am allowed to do a maritime trade, but will I do it? * @param assets The resources I already have * @param resval The value of the resources * @retval amount The amount to trade * @retval trade_away The resource to trade away * @retval want_resource The resource I want to have * @return TRUE if I want to do the trade */ static gboolean will_do_maritime_trade(gint assets[NO_RESOURCE], const resource_values_t * resval, gint * amount, Resource * trade_away, Resource * want_resource) { Resource res, want, discard; /* See if we can trade at all. */ for (res = 0; res < NO_RESOURCE; res++) { if (assets[res] >= resval->ports[res]) break; } if (res == NO_RESOURCE) return FALSE; /* See if we can do a single trade that allows us to buy something. */ if (find_optimal_trade(assets, resval, amount, trade_away, want_resource)) return TRUE; /* * We can trade, but we won't be able to buy anything. * * Try a simple heuristic - if there's a resource we can trade away * and still have at least 1 left, and we need something (and we can * get it), do the trade. Try to use the best port for this. */ want = resource_desire(assets, resval); if (want == NO_RESOURCE || get_bank()[want] == 0) return FALSE; discard = NO_RESOURCE; for (res = 0; res < NO_RESOURCE; res++) { if (res == want) continue; if (assets[res] > resval->ports[res] && (discard == NO_RESOURCE || resval->ports[discard] > resval->ports[res])) discard = res; } if (discard != NO_RESOURCE) { *trade_away = discard; *want_resource = want; *amount = resval->ports[discard]; return TRUE; } return FALSE; } /** I can play the card, but will I do it? * @param cardtype The type of card to consider * @return TRUE if the card is to be played */ static gboolean will_play_development_card(DevelType cardtype) { gint amount, i; if (is_victory_card(cardtype)) { return TRUE; } switch (cardtype) { case DEVEL_SOLDIER: return TRUE; case DEVEL_YEAR_OF_PLENTY: /* only when the bank is full enough */ amount = 0; for (i = 0; i < NO_RESOURCE; i++) amount += get_bank()[i]; if (amount >= 2) { return TRUE; } break; case DEVEL_ROAD_BUILDING: /* don't if don't have two roads left */ if (stock_num_roads() < 2) break; return TRUE; case DEVEL_MONOPOLY: return determine_monopoly_resource() != NO_RESOURCE; default: break; } return FALSE; } /* * What to do? what to do? * */ static void greedy_turn(void) { resource_values_t resval; int i; gint need[NO_RESOURCE], assets[NO_RESOURCE]; /* play soldier card before the turn when an own resource is blocked */ Hex *hex = map_robber_hex(callbacks.get_map()); if (hex && !have_rolled_dice() && can_play_any_develop()) { const DevelDeck *deck = get_devel_deck(); for (i = 0; i < deck->num_cards; i++) { DevelType cardtype = deck_card_type(deck, i); if (cardtype == DEVEL_SOLDIER && can_play_develop(i)) { int j; for (j = 0; j < 6; j++) { if ((hex->nodes[j]->owner == my_player_num())) { cb_play_develop(i); return; } } } } } if (!have_rolled_dice()) { cb_roll(); return; } /* Don't wait before the dice roll, that will take too long */ ai_wait(); for (i = 0; i < NO_RESOURCE; ++i) assets[i] = resource_asset(i); reevaluate_resources(&resval); /* if can then buy city */ if (should_buy(assets, BUY_CITY, &resval, need)) { Node *n = best_city_spot(&resval); if (n != NULL) { cb_build_city(n); return; } } /* if can then buy settlement */ if (should_buy(assets, BUY_SETTLEMENT, &resval, need)) { Node *n = best_settlement_spot(FALSE, &resval); if (n != NULL) { cb_build_settlement(n); return; } } if (should_buy(assets, BUY_ROAD, &resval, need)) { Edge *e = best_road_spot(&resval); if (e == NULL) { e = best_road_to_road(&resval); } if (e != NULL) { cb_build_road(e); return; } } /* if we can buy a development card and there are some left */ if (should_buy(assets, BUY_DEVEL_CARD, &resval, need)) { cb_buy_develop(); return; } /* if we have a lot of cards see if we can trade anything */ if (num_assets(assets) >= 3) { if (can_trade_maritime()) { gint amount; Resource trade_away, want_resource; if (will_do_maritime_trade (assets, &resval, &amount, &trade_away, &want_resource)) { cb_maritime(amount, trade_away, want_resource); return; } } } /* play development cards */ if (can_play_any_develop()) { const DevelDeck *deck = get_devel_deck(); gint num_victory_cards = 0; gint victory_point_target, my_points; for (i = 0; i < deck->num_cards; i++) { DevelType cardtype = deck_card_type(deck, i); /* if it's a vp card, note this for later */ if (is_victory_card(cardtype)) { num_victory_cards++; continue; } /* can't play card we just bought */ if (can_play_develop(i)) { if (will_play_development_card(cardtype)) { cb_play_develop(i); return; } } } /* if we have enough victory cards to win, then play them */ victory_point_target = game_victory_points(); my_points = player_get_score(my_player_num()); if (num_victory_cards + my_points >= victory_point_target) { for (i = 0; i < deck->num_cards; i++) { DevelType cardtype = deck_card_type(deck, i); if (is_victory_card(cardtype)) { cb_play_develop(i); return; } } } } cb_end_turn(); } #define randchat(array,nochat_percent) \ do { \ int p = (G_N_ELEMENTS(array)*1000/nochat_percent); \ int n = (rand() % p) / 10; \ if (n < G_N_ELEMENTS(array) ) \ ai_chat (array[n]); \ } while(0) static const char *chat_turn_start[] = { /* AI chat at the start of the turn */ N_("Ok, let's go!"), /* AI chat at the start of the turn */ N_("I'll beat you all now! ;)"), /* AI chat at the start of the turn */ N_("Now for another try..."), }; static const char *chat_receive_one[] = { /* AI chat when one resource is received */ N_("At least I get something..."), /* AI chat when one resource is received */ N_("One is better than none..."), }; static const char *chat_receive_many[] = { /* AI chat when more than one resource is received */ N_("Wow!"), /* AI chat when more than one resource is received */ N_("Ey, I'm becoming rich ;)"), /* AI chat when more than one resource is received */ N_("This is really a good year!"), }; static const char *chat_other_receive_many[] = { /* AI chat when other players receive more than one resource */ N_("You really don't deserve that much!"), /* AI chat when other players receive more than one resource */ N_("You don't know what to do with that many resources ;)"), /* AI chat when other players receive more than one resource */ N_("Ey, wait for my robber and lose all this again!"), }; static const char *chat_self_moved_robber[] = { /* AI chat when it moves the robber */ N_("Hehe!"), /* AI chat when it moves the robber */ N_("Go, robber, go!"), }; static const char *chat_moved_robber_to_me[] = { /* AI chat when the robber is moved to it */ N_("You bastard!"), /* AI chat when the robber is moved to it */ N_("Can't you move that robber somewhere else?!"), /* AI chat when the robber is moved to it */ N_("Why always me??"), }; static const char *chat_discard_self[] = { /* AI chat when it must discard resources */ N_("Oh no!"), /* AI chat when it must discard resources */ N_("Grrr!"), /* AI chat when it must discard resources */ N_("Who the hell rolled that 7??"), /* AI chat when it must discard resources */ N_("Why always me?!?"), }; static const char *chat_discard_other[] = { /* AI chat when other players must discard */ N_("Say good bye to your cards... :)"), /* AI chat when other players must discard */ N_("*evilgrin*"), /* AI chat when other players must discard */ N_("/me says farewell to your cards ;)"), /* AI chat when other players must discard */ N_("That's the price for being rich... :)"), }; static const char *chat_stole_from_me[] = { /* AI chat when someone steals from it */ N_("Ey! Where's that card gone?"), /* AI chat when someone steals from it */ N_("Thieves! Thieves!!"), /* AI chat when someone steals from it */ N_("Wait for my revenge..."), }; static const char *chat_monopoly_other[] = { /* AI chat when someone plays the monopoly card */ N_("Oh no :("), /* AI chat when someone plays the monopoly card */ N_("Must this happen NOW??"), /* AI chat when someone plays the monopoly card */ N_("Args"), }; static const char *chat_largestarmy_self[] = { /* AI chat when it has the largest army */ N_("Hehe, my soldiers rule!"), }; static const char *chat_largestarmy_other[] = { /* AI chat when another player that the largest army */ N_("First robbing us, then grabbing the points..."), }; static const char *chat_longestroad_self[] = { /* AI chat when it has the longest road */ N_("See that road!"), }; static const char *chat_longestroad_other[] = { /* AI chat when another player has the longest road */ N_("Pf, you won't win with roads alone..."), }; static float score_node_hurt_opponents(Node * node) { /* no building there */ if (node->owner == -1) return 0; /* do I have a house there? */ if (my_player_num() == node->owner) { if (node->type == BUILD_SETTLEMENT) { return -2.0; } else { return -3.5; } } /* opponent has house there */ if (node->type == BUILD_SETTLEMENT) { return 1.5; } else { return 2.5; } } /* * How much does putting the robber here hurt my opponents? */ static float score_hex_hurt_opponents(Hex * hex) { int i; float score = 0; if (hex == NULL) return -1000; /* don't move the pirate. */ if (!can_robber_or_pirate_be_moved(hex) || hex->terrain == SEA_TERRAIN) return -1000; for (i = 0; i < 6; i++) { score += score_node_hurt_opponents(hex->nodes[i]); } /* multiply by resource/roll value */ score *= default_score_hex(hex); return score; } /* * Find the best (worst for opponents) place to put the robber * */ static void greedy_place_robber(void) { int i, j; float bestscore = -1000; Hex *besthex = NULL; Map *map = callbacks.get_map(); ai_wait(); for (i = 0; i < map->x_size; i++) { for (j = 0; j < map->y_size; j++) { Hex *hex = map_hex(map, i, j); float score = score_hex_hurt_opponents(hex); if (score > bestscore) { bestscore = score; besthex = hex; } } } cb_place_robber(besthex); } static void greedy_steal_building(void) { int i; int victim = -1; int victim_resources = -1; Hex *hex = map_robber_hex(callbacks.get_map()); /* which opponent to steal from */ for (i = 0; i < 6; i++) { int numres = 0; /* if has owner (and isn't me) */ if ((hex->nodes[i]->owner != -1) && (hex->nodes[i]->owner != my_player_num())) { numres = player_get_num_resource(hex->nodes[i]->owner); } if (numres > victim_resources) { victim = hex->nodes[i]->owner; victim_resources = numres; } } cb_rob(victim); randchat(chat_self_moved_robber, 15); } /* * A devel card game us two free roads. let's build them * */ static void greedy_free_road(void) { Edge *e; resource_values_t resval; reevaluate_resources(&resval); e = best_road_spot(&resval); if (e == NULL) { e = best_road_to_road(&resval); } if (e == NULL) { e = find_random_road(); } if (e != NULL) { cb_build_road(e); return; } else { log_message(MSG_ERROR, "unable to find spot to build free road\n"); cb_disconnect(); } } /* * We played a year of plenty card. pick the two resources we most need */ static void greedy_year_of_plenty(const gint bank[NO_RESOURCE]) { gint want[NO_RESOURCE]; gint assets[NO_RESOURCE]; int i; int r1, r2; resource_values_t resval; ai_wait(); for (i = 0; i < NO_RESOURCE; i++) { want[i] = 0; assets[i] = resource_asset(i); } /* what two resources do we desire most */ reevaluate_resources(&resval); r1 = resource_desire(assets, &resval); /* If we don't desire anything anymore, ask for a road. * This happens if we have at least 2 of each resource */ if (r1 == NO_RESOURCE) r1 = BRICK_RESOURCE; assets[r1]++; reevaluate_resources(&resval); r2 = resource_desire(assets, &resval); if (r2 == NO_RESOURCE) r2 = LUMBER_RESOURCE; assets[r1]--; /* If we want something that is not in the bank, request something else */ /* WARNING: This code can cause a lockup if the bank is empty, but * then the year of plenty must not have been playable */ while (bank[r1] < 1) r1 = (r1 + 1) % NO_RESOURCE; while (bank[r2] < (r1 == r2 ? 2 : 1)) r2 = (r2 + 1) % NO_RESOURCE; want[r1]++; want[r2]++; cb_choose_plenty(want); } /* * We played a monopoly card. Pick a resource */ static gint other_players_have(Resource res) { return game_resources() - get_bank()[res] - resource_asset(res); } static float monopoly_wildcard_value(const resource_values_t * resval, const gint assets[NO_RESOURCE], gint resource) { return (float) (other_players_have(resource) + assets[resource]) / resval->ports[resource]; } /** Determine the best resource to get with a monopoly card. * @return the resource */ static gint determine_monopoly_resource(void) { gint assets[NO_RESOURCE]; int i; gint most_desired; gint most_wildcards; resource_values_t resval; for (i = 0; i < NO_RESOURCE; i++) assets[i] = resource_asset(i); /* order resources by preference */ reevaluate_resources(&resval); /* try to get something we need */ most_desired = resource_desire(assets, &resval); /* try to get the optimal maritime trade. */ most_wildcards = 0; for (i = 1; i < NO_RESOURCE; i++) { if (monopoly_wildcard_value(&resval, assets, i) > monopoly_wildcard_value(&resval, assets, most_wildcards)) most_wildcards = i; } /* choose the best */ if (most_desired != NO_RESOURCE && other_players_have(most_desired) > monopoly_wildcard_value(&resval, assets, most_wildcards)) { return most_desired; } else if (monopoly_wildcard_value(&resval, assets, most_wildcards) >= 1.0) { return most_wildcards; } else { return NO_RESOURCE; } } static void greedy_monopoly(void) { ai_wait(); cb_choose_monopoly(determine_monopoly_resource()); } /* * Of these resources which is least valuable to us * * Get rid of the one we have the most of * if there's a tie let resource_values_t settle it */ static int least_valuable(gint assets[NO_RESOURCE], resource_values_t * resval) { int ret = NO_RESOURCE; int res; int most = 0; float mostval = -1; for (res = 0; res < NO_RESOURCE; res++) { if (assets[res] > most) { if (resval->value[res] > mostval) { ret = res; most = assets[res]; mostval = resval->value[res]; } } } return ret; } /* * Which resource do we desire the least? */ static int resource_desire_least(gint my_assets[NO_RESOURCE], resource_values_t * resval) { BuyType bt; int res; gint assets[NO_RESOURCE]; gint need[NO_RESOURCE]; int leastval; /* make copy of what we got */ for (res = 0; res != NO_RESOURCE; res++) { assets[res] = my_assets[res]; } /* eliminate things we need to build stuff */ for (bt = 0; bt < BUY_LAST; bt++) { if (should_buy(assets, bt, resval, need)) { cost_buy(cost_of(bt), assets); } } /* of what's left what do do we care for least */ leastval = least_valuable(assets, resval); if (leastval != NO_RESOURCE) return leastval; /* otherwise least valuable of what we have in total */ leastval = least_valuable(my_assets, resval); if (leastval != NO_RESOURCE) return leastval; /* last resort just pick something */ for (res = 0; res < NO_RESOURCE; res++) { if (my_assets[res] > 0) return res; } /* Should never get here */ g_assert_not_reached(); return 0; } /* * A seven was rolled. we need to discard some resources :( * */ static void greedy_discard(int num) { int res; gint todiscard[NO_RESOURCE]; int i; resource_values_t resval; gint assets[NO_RESOURCE]; /* zero out */ for (res = 0; res != NO_RESOURCE; res++) { todiscard[res] = 0; assets[res] = resource_asset(res); } for (i = 0; i < num; i++) { reevaluate_resources(&resval); res = resource_desire_least(assets, &resval); todiscard[res]++; assets[res]--; } cb_discard(todiscard); } /* * Domestic Trade * */ static int quote_next_num(void) { return quote_num++; } static void greedy_quote_start(void) { quote_num = 0; } static int trade_desired(gint assets[NO_RESOURCE], gint give, gint take, gboolean free_offer) { int i, n; int res = NO_RESOURCE; resource_values_t resval; float value = 0.0; gint need[NO_RESOURCE]; if (!free_offer) { /* don't give away cards we have only once */ if (assets[give] <= 1) { return 0; } /* make it as if we don't have what we're trading away */ assets[give] -= 1; } for (n = 1; n <= 3; ++n) { /* do i need something more for something? */ if (!should_buy(assets, BUY_CITY, &resval, need)) { if ((res = which_resource(need)) == take && need[res] == n) break; } if (!should_buy(assets, BUY_SETTLEMENT, &resval, need)) { if ((res = which_resource(need)) == take && need[res] == n) break; } if (!should_buy(assets, BUY_ROAD, &resval, need)) { if ((res = which_resource(need)) == take && need[res] == n) break; } if (!should_buy(assets, BUY_DEVEL_CARD, &resval, need)) { if ((res = which_resource(need)) == take && need[res] == n) break; } } if (!free_offer) assets[give] += 1; if (n <= 3) return n; /* desire the one we don't produce the most */ reevaluate_resources(&resval); for (i = 0; i < NO_RESOURCE; i++) { if ((resval.value[i] > value) && (assets[i] < 2)) { res = i; value = resval.value[i]; } } if (res == take && assets[give] > 2) { return 1; } return 0; } static void greedy_consider_quote(G_GNUC_UNUSED gint partner, gint we_receive[NO_RESOURCE], gint we_supply[NO_RESOURCE]) { gint give, take, ntake; gint give_res[NO_RESOURCE], take_res[NO_RESOURCE], my_assets[NO_RESOURCE]; gint i; gboolean free_offer; free_offer = TRUE; for (i = 0; i < NO_RESOURCE; ++i) { my_assets[i] = resource_asset(i); free_offer &= we_supply[i] == 0; } for (give = 0; give < NO_RESOURCE; give++) { /* A free offer is always accepted */ if (!free_offer) { if (we_supply[give] == 0) continue; if (my_assets[give] == 0) continue; } for (take = 0; take < NO_RESOURCE; take++) { /* Don't do stupid offers */ if (!free_offer && take == give) continue; if (we_receive[take] == 0) continue; if ((ntake = trade_desired(my_assets, give, take, free_offer)) > 0) goto doquote; } } /* Do not decline anything for free, just take it all */ if (free_offer) { cb_quote(quote_next_num(), we_supply, we_receive); log_message(MSG_INFO, "Taking the whole free offer.\n"); return; } log_message(MSG_INFO, _("Rejecting trade.\n")); cb_end_quote(); return; doquote: for (i = 0; i < NO_RESOURCE; ++i) { give_res[i] = (give == i && !free_offer) ? 1 : 0; take_res[i] = take == i ? ntake : 0; } cb_quote(quote_next_num(), give_res, take_res); log_message(MSG_INFO, "Quoting.\n"); } static void greedy_setup(unsigned num_settlements, unsigned num_roads) { ai_wait(); if (num_settlements > 0) greedy_setup_house(); else if (num_roads > 0) greedy_setup_road(); else cb_end_turn(); } static void greedy_roadbuilding(gint num_roads) { ai_wait(); if (num_roads > 0) greedy_free_road(); else cb_end_turn(); } static void greedy_discard_start(void) { discard_starting = TRUE; } static void greedy_discard_add(gint player_num, gint discard_num) { if (player_num == my_player_num()) { randchat(chat_discard_self, 10); ai_wait(); greedy_discard(discard_num); } else { if (discard_starting) { discard_starting = FALSE; randchat(chat_discard_other, 10); } } } static void greedy_gold_choose(gint gold_num, const gint * bank) { resource_values_t resval; gint assets[NO_RESOURCE]; gint want[NO_RESOURCE]; gint my_bank[NO_RESOURCE]; gint i; int r1; for (i = 0; i < NO_RESOURCE; i++) { want[i] = 0; assets[i] = resource_asset(i); my_bank[i] = bank[i]; } for (i = 0; i < gold_num; i++) { reevaluate_resources(&resval); /* If the bank has been emptied, don't desire it */ gint j; for (j = 0; j < NO_RESOURCE; j++) { if (my_bank[j] == 0) { resval.value[j] = 0; } } r1 = resource_desire(assets, &resval); /* If we don't want anything, start emptying the bank */ if (r1 == NO_RESOURCE) { r1 = 0; /* Potential deadlock, but bank is always full enough */ while (my_bank[r1] == 0) r1++; } want[r1]++; assets[r1]++; my_bank[r1]--; } cb_choose_gold(want); } static void greedy_error(const gchar * message) { gchar *buffer; buffer = g_strdup_printf(_("" "Received error from server: %s. Quitting\n"), message); cb_chat(buffer); g_free(buffer); cb_disconnect(); } static void greedy_game_over(gint player_num, G_GNUC_UNUSED gint points) { if (player_num == my_player_num()) { /* AI chat when it wins */ ai_chat(N_("Yippie!")); } else { /* AI chat when another player wins */ ai_chat(N_("My congratulations")); } cb_disconnect(); } /* functions for chatting follow */ static void greedy_player_turn(gint player) { if (player == my_player_num()) randchat(chat_turn_start, 70); } static void greedy_robber_moved(G_GNUC_UNUSED Hex * old, Hex * new) { int idx; gboolean iam_affected = FALSE; for (idx = 0; idx < G_N_ELEMENTS(new->nodes); idx++) { if (new->nodes[idx]->owner == my_player_num()) iam_affected = TRUE; } if (iam_affected) randchat(chat_moved_robber_to_me, 20); } static void greedy_player_robbed(G_GNUC_UNUSED gint robber_num, gint victim_num, G_GNUC_UNUSED Resource resource) { if (victim_num == my_player_num()) randchat(chat_stole_from_me, 15); } static void greedy_get_rolled_resources(gint player_num, const gint * resources, G_GNUC_UNUSED const gint * wanted) { gint total = 0, i; for (i = 0; i < NO_RESOURCE; ++i) total += resources[i]; if (player_num == my_player_num()) { if (total == 1) randchat(chat_receive_one, 60); else if (total >= 3) randchat(chat_receive_many, 20); } else if (total >= 3) randchat(chat_other_receive_many, 30); } static void greedy_played_develop(gint player_num, G_GNUC_UNUSED gint card_idx, DevelType type) { if (player_num != my_player_num() && type == DEVEL_MONOPOLY) randchat(chat_monopoly_other, 20); } static void greedy_new_statistics(gint player_num, StatisticType type, gint num) { if (num != 1) return; if (type == STAT_LONGEST_ROAD) { if (player_num == my_player_num()) randchat(chat_longestroad_self, 10); else randchat(chat_longestroad_other, 10); } else if (type == STAT_LARGEST_ARMY) { if (player_num == my_player_num()) randchat(chat_largestarmy_self, 10); else randchat(chat_largestarmy_other, 10); } } void greedy_init(void) { callbacks.setup = &greedy_setup; callbacks.turn = &greedy_turn; callbacks.robber = &greedy_place_robber; callbacks.steal_building = &greedy_steal_building; callbacks.roadbuilding = &greedy_roadbuilding; callbacks.plenty = &greedy_year_of_plenty; callbacks.monopoly = &greedy_monopoly; callbacks.discard_add = &greedy_discard_add; callbacks.quote_start = &greedy_quote_start; callbacks.quote = &greedy_consider_quote; callbacks.game_over = &greedy_game_over; callbacks.error = &greedy_error; /* chatting */ callbacks.player_turn = &greedy_player_turn; callbacks.robber_moved = &greedy_robber_moved; callbacks.discard = &greedy_discard_start; callbacks.gold_choose = &greedy_gold_choose; callbacks.player_robbed = &greedy_player_robbed; callbacks.get_rolled_resources = &greedy_get_rolled_resources; callbacks.played_develop = &greedy_played_develop; callbacks.new_statistics = &greedy_new_statistics; } pioneers-14.1/client/ai/lobbybot.c0000644000175000017500000001153711760645213014047 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "ai.h" #include "cost.h" #include #include /* * This is a chatty AI for Pioneers. * * It is intended to populate the lobby and to give help to new players. * When used in other games, it will leave the game when it starts. */ static GHashTable *players = NULL; static gboolean chatting = FALSE; struct _PlayerInfo { /** Name of the player */ gchar *name; }; typedef struct _PlayerInfo PlayerInfo; static PlayerInfo *player_info_new(const gchar * name) { PlayerInfo *object = g_malloc(sizeof(PlayerInfo)); object->name = g_strdup(name); return object; } static void player_info_free(PlayerInfo * player_info) { g_return_if_fail(player_info != NULL); g_free(player_info->name); g_free(player_info); } static void player_info_set_name(PlayerInfo * player_info, const gchar * name) { g_return_if_fail(player_info != NULL); if (player_info->name != NULL) g_free(player_info->name); player_info->name = g_strdup(name); } static void lobbybot_player_name_changed(gint player_num, const gchar * name) { PlayerInfo *info = g_hash_table_lookup(players, GINT_TO_POINTER(player_num)); if (info) { player_info_set_name(info, name); } else { info = player_info_new(name); g_hash_table_insert(players, GINT_TO_POINTER(player_num), info); if (my_player_num() != player_num && chatting) /* Translators: don't translate '/help' */ ai_chat(N_("Hello, welcome to the lobby. I am a " "simple robot. Type '/help' in the chat " "to see the list of commands I know.")); } } static void lobbybot_player_quit(gint player_num) { gboolean did_remove = g_hash_table_remove(players, GINT_TO_POINTER(player_num)); g_return_if_fail(did_remove); } static void lobbybot_chat_parser(gint player_num, const gchar * chat) { PlayerInfo *info; if (player_num == my_player_num()) { /* Don't log own responses */ return; } info = g_hash_table_lookup(players, GINT_TO_POINTER(player_num)); g_assert(info != NULL); if (!strncmp(chat, "/help", 5)) { /* Translators: don't translate '/help' */ ai_chat(N_("'/help' shows this message again")); /* Translators: don't translate '/why' */ ai_chat(N_("'/why' explains the purpose of this strange " "board layout")); /* Translators: don't translate '/news' */ ai_chat(N_("'/news' tells the last released version")); return; } if (!strncmp(chat, "/why", 4)) { /* AI chat that explains '/why' */ ai_chat(N_("This board is not intended to be a game that " "can be played. Instead, players can find " "eachother here, and decide which board they " "want to play. Then, one of the players will " "host the proposed game by starting a server, " "and registers it at the metaserver. The other " "players can subsequently disconnect from the " "lobby, and enter that game.")); return; } if (!strncmp(chat, "/news", 5)) { ai_chat(N_("The last released version of Pioneers is")); /* Update this string when releasing a new version */ ai_chat("0.14.1"); return; } } static void hash_data_free(gpointer data) { player_info_free((PlayerInfo *) data); } static void lobbybot_turn(G_GNUC_UNUSED gint player_num) { ai_chat( /* The lobbybot leaves when a game is starting */ N_("" "The game is starting. I'm not needed anymore. Goodbye.")); cb_disconnect(); } static void lobbybot_start_game(void) { /* The rules are known, enable chat */ chatting = TRUE; } void lobbybot_init(void) { g_assert(players == NULL); players = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, hash_data_free); /* Don't chat before the rules are known */ chatting = FALSE; callbacks.spectator_name = &lobbybot_player_name_changed; callbacks.player_name = &lobbybot_player_name_changed; callbacks.spectator_quit = &lobbybot_player_quit; callbacks.player_quit = &lobbybot_player_quit; callbacks.incoming_chat = &lobbybot_chat_parser; callbacks.player_turn = &lobbybot_turn; callbacks.start_game = &lobbybot_start_game; } pioneers-14.1/client/ai/computer_names0000644000175000017500000000046110650727022015021 00000000000000Computer Dude Napoleon Gorbachev Bob Dole Abraham Lincoln Joan of Arc Gödel Escher Bach Pikachu Richard Nixon Checkers Saddam Hussein Kermit the Frog Ernie and Bert Jesse 'The Body' Ventura Winston Churchill Attila the Hun Chairman Mao Richard Stallman Coolio Rupert Murdoch Commander Taco Godzilla Jaws pioneers-14.1/client/common/0000755000175000017500000000000011760646034013041 500000000000000pioneers-14.1/client/common/Makefile.am0000644000175000017500000000252110771471222015011 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA noinst_LIBRARIES += libpioneersclient.a libpioneersclient_a_CPPFLAGS = -I$(top_srcdir)/client $(console_cflags) libpioneersclient_a_SOURCES = \ client/callback.h \ client/common/build.c \ client/common/callback.c \ client/common/client.c \ client/common/client.h \ client/common/develop.c \ client/common/main.c \ client/common/player.c \ client/common/resource.c \ client/common/robber.c \ client/common/setup.c \ client/common/stock.c \ client/common/turn.c pioneers-14.1/client/common/build.c0000644000175000017500000001145010745450110014213 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "cards.h" #include "map.h" #include "client.h" #include "log.h" #include "buildrec.h" static GList *build_list; static gboolean built; /* have we buld road / settlement / city? */ static gint num_edges, num_settlements; void build_clear(void) { build_list = buildrec_free(build_list); num_edges = num_settlements = 0; } void build_new_turn(void) { build_list = buildrec_free(build_list); built = FALSE; } void build_remove(BuildType type, gint x, gint y, gint pos) { GList *list; BuildRec *rec; g_assert(build_list != NULL); list = g_list_last(build_list); rec = list->data; build_list = g_list_remove(build_list, rec); g_assert(rec->type == type && rec->x == x && rec->y == y && rec->pos == pos); g_free(rec); switch (type) { case BUILD_SETTLEMENT: --num_settlements; break; case BUILD_ROAD: case BUILD_SHIP: case BUILD_BRIDGE: --num_edges; break; default: break; } /* If the build_list is now empty (no more items to undo), clear built flag so trading is reallowed with strict-trade */ if (build_list == NULL) built = FALSE; player_build_remove(my_player_num(), type, x, y, pos); } /* Move a ship */ void build_move(gint sx, gint sy, gint spos, gint dx, gint dy, gint dpos, gint isundo) { GList *list; BuildRec *rec; if (isundo) { callbacks.get_map()->has_moved_ship = FALSE; list = g_list_last(build_list); rec = list->data; if (rec->type != BUILD_MOVE_SHIP && rec->x != sx && rec->y != sy && rec->pos != spos) { log_message(MSG_ERROR, "undo ship move mismatch: %d<->%d %d<->%d %d<->%d %d<->%d\n", BUILD_MOVE_SHIP, rec->type, sx, rec->x, sy, rec->y, spos, rec->pos); } build_list = g_list_remove(build_list, rec); g_free(rec); /* If the build_list is now empty (no more items to undo), * clear built flag so trading is reallowed with * strict-trade */ if (build_list == NULL) built = FALSE; } else { rec = buildrec_new(BUILD_MOVE_SHIP, sx, sy, spos); build_list = g_list_append(build_list, rec); built = TRUE; callbacks.get_map()->has_moved_ship = TRUE; } player_build_move(my_player_num(), sx, sy, spos, dx, dy, dpos, isundo); } void build_add(BuildType type, gint x, gint y, gint pos, gboolean newbuild) { BuildRec *rec = buildrec_new(type, x, y, pos); build_list = g_list_append(build_list, rec); built = TRUE; switch (type) { case BUILD_SETTLEMENT: ++num_settlements; break; case BUILD_ROAD: case BUILD_SHIP: case BUILD_BRIDGE: ++num_edges; break; default: break; } if (newbuild) { player_build_add(my_player_num(), type, x, y, pos, TRUE); } } gint build_count_edges(void) { return num_edges; } gint build_count_settlements(void) { return num_settlements; } gint build_count(BuildType type) { return buildrec_count_type(build_list, type); } gboolean build_is_valid(void) { return buildrec_is_valid(build_list, callbacks.get_map(), my_player_num()); } gboolean build_can_undo(void) { return build_list != NULL; } gboolean have_built(void) { return built; } /* Place some restrictions on road placement during setup phase */ gboolean build_can_setup_road(const Edge * edge, gboolean double_setup) { return buildrec_can_setup_road(build_list, edge, double_setup); } /* Place some restrictions on ship placement during setup phase */ gboolean build_can_setup_ship(const Edge * edge, gboolean double_setup) { return buildrec_can_setup_ship(build_list, edge, double_setup); } /* Place some restrictions on bridge placement during setup phase */ gboolean build_can_setup_bridge(const Edge * edge, gboolean double_setup) { return buildrec_can_setup_bridge(build_list, edge, double_setup); } /* Place some restrictions on road placement during setup phase */ gboolean build_can_setup_settlement(const Node * node, gboolean double_setup) { return buildrec_can_setup_settlement(build_list, node, double_setup); } pioneers-14.1/client/common/callback.c0000644000175000017500000003567611575444700014702 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003,2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "callback.h" #include "state.h" #include "client.h" #include "cost.h" /* callbacks is a pointer to an array of function pointers. * It is filled in by the front end. */ struct callbacks callbacks; /* current callback mode */ enum callback_mode callback_mode; /* is chat currently colourful? */ gboolean color_chat_enabled; void cb_connect(const gchar * server, const gchar * port, gboolean spectator) { /* connect to a server */ g_assert(callback_mode == MODE_INIT); requested_spectator = spectator; if (sm_connect(SM(), server, port)) { if (sm_is_connected(SM())) { sm_goto(SM(), mode_start); } else { sm_goto(SM(), mode_connecting); } } else { callbacks.offline(); } } void cb_disconnect(void) { sm_close(SM()); callback_mode = MODE_INIT; callbacks.offline(); } void cb_roll(void) { /* roll dice */ g_assert(callback_mode == MODE_TURN && !have_rolled_dice()); sm_send(SM(), "roll\n"); /* This should really be sm_push, but on return it should be * sm_pop_noenter; sm_goto_noenter; sm_push, and since sm_pop_noenter * doesn't exist, the combination is changed into * sm_goto here and sm_goto_noenter; sm_push later. */ sm_goto(SM(), mode_roll_response); } void cb_build_road(const Edge * edge) { /* build road */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_ROAD_BUILD || callback_mode == MODE_SETUP); sm_send(SM(), "build road %d %d %d\n", edge->x, edge->y, edge->pos); sm_push(SM(), mode_build_response); } void cb_build_ship(const Edge * edge) { /* build ship */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_ROAD_BUILD || callback_mode == MODE_SETUP); sm_send(SM(), "build ship %d %d %d\n", edge->x, edge->y, edge->pos); sm_push(SM(), mode_build_response); } void cb_build_bridge(const Edge * edge) { /* build bridge */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_ROAD_BUILD || callback_mode == MODE_SETUP); sm_send(SM(), "build bridge %d %d %d\n", edge->x, edge->y, edge->pos); sm_push(SM(), mode_build_response); } void cb_move_ship(const Edge * from, const Edge * to) { /* move ship */ g_assert(callback_mode == MODE_TURN); sm_send(SM(), "move %d %d %d %d %d %d\n", from->x, from->y, from->pos, to->x, to->y, to->pos); sm_push(SM(), mode_move_response); } void cb_build_settlement(const Node * node) { /* build settlement */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_SETUP); sm_send(SM(), "build settlement %d %d %d\n", node->x, node->y, node->pos); sm_push(SM(), mode_build_response); } void cb_build_city(const Node * node) { /* build city */ g_assert(callback_mode == MODE_TURN); sm_send(SM(), "build city %d %d %d\n", node->x, node->y, node->pos); sm_push(SM(), mode_build_response); } void cb_build_city_wall(const Node * node) { /* build city */ g_assert(callback_mode == MODE_TURN); sm_send(SM(), "build city_wall %d %d %d\n", node->x, node->y, node->pos); sm_push(SM(), mode_build_response); } void cb_buy_develop(void) { /* buy development card */ g_assert(callback_mode == MODE_TURN && can_buy_develop()); sm_send(SM(), "buy-develop\n"); sm_push(SM(), mode_buy_develop_response); } void cb_play_develop(int card) { /* play development card */ g_assert(callback_mode == MODE_TURN && can_play_develop(card)); sm_send(SM(), "play-develop %d\n", card); sm_push(SM(), mode_play_develop_response); } void cb_undo(void) { /* undo a move */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_ROAD_BUILD || callback_mode == MODE_SETUP || callback_mode == MODE_ROB); sm_send(SM(), "undo\n"); sm_push(SM(), mode_undo_response); } void cb_maritime(gint ratio, Resource supply, Resource receive) { /* trade with the bank */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_DOMESTIC); sm_send(SM(), "maritime-trade %d supply %r receive %r\n", ratio, supply, receive); sm_push(SM(), mode_trade_maritime_response); } void cb_domestic(const gint * supply, const gint * receive) { /* call for quotes */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_DOMESTIC); sm_send(SM(), "domestic-trade call supply %R receive %R\n", supply, receive); if (callback_mode == MODE_DOMESTIC) { sm_push(SM(), mode_trade_call_again_response); } else { sm_push(SM(), mode_trade_call_response); } } void cb_end_turn(void) { /* end turn or road building or setup */ g_assert(callback_mode == MODE_TURN || callback_mode == MODE_ROAD_BUILD || callback_mode == MODE_SETUP); sm_send(SM(), "done\n"); sm_push(SM(), mode_done_response); } void cb_place_robber(const Hex * hex) { /* place robber */ g_assert(callback_mode == MODE_ROBBER); sm_send(SM(), "move-robber %d %d\n", hex->x, hex->y); sm_push(SM(), mode_robber_move_response); } void cb_rob(gint victim_num) { /* after placing the robber, rob someone */ g_assert(callback_mode == MODE_ROB); sm_send(SM(), "rob %d\n", victim_num); sm_push(SM(), mode_robber_response); } void cb_choose_monopoly(gint resource) { /* choose a monopoly resource */ g_assert(callback_mode == MODE_MONOPOLY); sm_send(SM(), "monopoly %r\n", resource); sm_push(SM(), mode_monopoly_response); } void cb_choose_plenty(gint * resources) { /* choose year of plenty resources */ g_assert(callback_mode == MODE_PLENTY); sm_send(SM(), "plenty %R\n", resources); sm_push(SM(), mode_year_of_plenty_response); } void cb_trade(gint player, gint quote, const gint * supply, const gint * receive) { /* accept a domestic trade */ g_assert(callback_mode == MODE_DOMESTIC); sm_send(SM(), "domestic-trade accept player %d quote %d supply %R receive %R\n", player, quote, supply, receive); sm_push(SM(), mode_trade_domestic_response); } void cb_end_trade(void) { /* stop trading */ g_assert(callback_mode == MODE_DOMESTIC); sm_send(SM(), "domestic-trade finish\n"); sm_push(SM(), mode_domestic_finish_response); } void cb_quote(gint num, const gint * supply, const gint * receive) { /* make a quote */ g_assert(callback_mode == MODE_QUOTE); sm_send(SM(), "domestic-quote quote %d supply %R receive %R\n", num, supply, receive); sm_push(SM(), mode_quote_submit_response); } void cb_delete_quote(gint num) { /* revoke a quote */ g_assert(callback_mode == MODE_QUOTE); sm_send(SM(), "domestic-quote delete %d\n", num); sm_push(SM(), mode_quote_delete_response); } void cb_end_quote(void) { /* stop trading */ g_assert(callback_mode == MODE_QUOTE); sm_send(SM(), "domestic-quote finish\n"); sm_push(SM(), mode_quote_finish_response); } void cb_chat(const gchar * text) { /* chat a message */ g_assert(callback_mode != MODE_INIT); sm_send(SM(), "chat %s\n", text); } void cb_name_change(const gchar * name) { /* change your name */ g_assert(callback_mode != MODE_INIT); sm_send(SM(), "name %s\n", name); } void cb_style_change(const gchar * style) { /* change your style */ g_assert(callback_mode != MODE_INIT); sm_send(SM(), "style %s\n", style); } void cb_discard(const gint * resources) { /* discard resources */ g_assert(callback_mode == MODE_DISCARD); callback_mode = MODE_DISCARD_WAIT; sm_send(SM(), "discard %R\n", resources); } void cb_choose_gold(const gint * resources) { /* choose gold */ g_assert(callback_mode == MODE_GOLD); callback_mode = MODE_GOLD_WAIT; sm_send(SM(), "chose-gold %R\n", resources); } gboolean have_ships(void) { return game_params == NULL || game_params->num_build_type[BUILD_SHIP] > 0; } gboolean have_bridges(void) { return game_params == NULL || game_params->num_build_type[BUILD_BRIDGE] > 0; } gboolean have_city_walls(void) { return game_params == NULL || game_params->num_build_type[BUILD_CITY_WALL] > 0; } const GameParams *get_game_params(void) { return game_params; } gint game_resources(void) { return game_params->resource_count; } gint game_victory_points(void) { return game_params->victory_points; } gint stat_get_vp_value(StatisticType type) { /* victory point values of all the statistic types */ static gint stat_vp_values[] = { 1, /* settlement */ 2, /* city */ 0, /* city wall */ 2, /* largest army */ 2, /* longest road */ 1, /* chapel */ 1, /* pioneer university */ 1, /* governor's house */ 1, /* library */ 1, /* market */ 0, /* soldier */ 0, /* resource card */ 0, /* development card */ }; return stat_vp_values[type]; } gboolean can_undo(void) { return build_can_undo(); } gboolean road_building_can_build_road(void) { return build_count_edges() < 2 && stock_num_roads() > 0 && map_can_place_road(callbacks.get_map(), my_player_num()); } gboolean road_building_can_build_ship(void) { return build_count_edges() < 2 && stock_num_ships() > 0 && map_can_place_ship(callbacks.get_map(), my_player_num()); } gboolean road_building_can_build_bridge(void) { return build_count_edges() < 2 && stock_num_bridges() > 0 && map_can_place_bridge(callbacks.get_map(), my_player_num()); } gboolean road_building_can_finish(void) { return !road_building_can_build_road() && !road_building_can_build_ship() && !road_building_can_build_bridge() && build_is_valid(); } gboolean turn_can_build_road(void) { return have_rolled_dice() && stock_num_roads() > 0 && can_afford(cost_road()) && map_can_place_road(callbacks.get_map(), my_player_num()); } gboolean turn_can_build_ship(void) { return have_rolled_dice() && stock_num_ships() > 0 && can_afford(cost_ship()) && map_can_place_ship(callbacks.get_map(), my_player_num()); } gboolean turn_can_build_bridge(void) { return have_rolled_dice() && stock_num_bridges() > 0 && can_afford(cost_bridge()) && map_can_place_bridge(callbacks.get_map(), my_player_num()); } gboolean turn_can_build_settlement(void) { return have_rolled_dice() && stock_num_settlements() > 0 && can_afford(cost_settlement()) && map_can_place_settlement(callbacks.get_map(), my_player_num()); } gboolean turn_can_build_city(void) { return have_rolled_dice() && stock_num_cities() > 0 && can_afford(cost_upgrade_settlement()) && map_can_upgrade_settlement(callbacks.get_map(), my_player_num()); } gboolean turn_can_build_city_wall(void) { return have_rolled_dice() && stock_num_city_walls() > 0 && can_afford(cost_city_wall()) && map_can_place_city_wall(callbacks.get_map(), my_player_num()); } gboolean turn_can_trade(void) { /* We are not allowed to trade before we have rolled the dice, * or after we have done built a settlement / city, or after * buying a development card. */ if (!have_rolled_dice()) return FALSE; if (game_params->strict_trade && (have_built() || have_bought_develop())) return FALSE; return can_trade_maritime() || can_trade_domestic(); } static gboolean really_try_move_ship(const Hex * hex, gpointer closure) { gint idx; const Edge *from = closure; for (idx = 0; idx < G_N_ELEMENTS(hex->edges); ++idx) { const Edge *edge; edge = hex->edges[idx]; if (edge->x != hex->x || edge->y != hex->y) continue; if (can_move_ship(from, edge)) return TRUE; } return FALSE; } gboolean can_move_ship(const Edge * from, const Edge * to) { gboolean retval; gint owner; Edge *ship_sailed_from_here; if (to == from) return FALSE; g_assert(from->type == BUILD_SHIP); owner = from->owner; if (!can_ship_be_moved(from, owner)) return FALSE; ship_sailed_from_here = map_edge(callbacks.get_map(), from->x, from->y, from->pos); /* Copy to non-const pointer */ ship_sailed_from_here->owner = -1; ship_sailed_from_here->type = BUILD_NONE; retval = can_ship_be_built(to, owner); ship_sailed_from_here->owner = owner; ship_sailed_from_here->type = BUILD_SHIP; return retval; } static gboolean try_move_ship(const Hex * hex, G_GNUC_UNUSED gpointer closure) { gint idx; for (idx = 0; idx < G_N_ELEMENTS(hex->edges); ++idx) { Edge *edge; /* Huh? Can non-const be taken from const Hex ? */ edge = hex->edges[idx]; if (edge->x != hex->x || edge->y != hex->y) continue; if (edge->owner != my_player_num() || edge->type != BUILD_SHIP) continue; if (map_traverse_const (callbacks.get_map(), really_try_move_ship, edge)) return TRUE; } return FALSE; } gboolean turn_can_move_ship(void) { if (!have_rolled_dice() || callbacks.get_map()->has_moved_ship) return FALSE; return map_traverse_const(callbacks.get_map(), try_move_ship, NULL); } int robber_count_victims(const Hex * hex, gint * victim_list) { gint idx; gint node_idx; gint num_victims; /* If there is no-one to steal from, or the players have no * resources, we do not go into steal_resource. */ for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) victim_list[idx] = -1; num_victims = 0; for (node_idx = 0; node_idx < G_N_ELEMENTS(hex->nodes); node_idx++) { Node *node = hex->nodes[node_idx]; Player *owner; if (node->type == BUILD_NONE || node->owner == my_player_num()) /* Can't steal from myself */ continue; /* Check if the node owner has any resources */ owner = player_get(node->owner); if (owner->statistics[STAT_RESOURCES] > 0) { /* Has resources - we can steal */ for (idx = 0; idx < num_victims; idx++) if (victim_list[idx] == node->owner) break; if (idx == num_victims) victim_list[num_victims++] = node->owner; } } return num_victims; } int pirate_count_victims(const Hex * hex, gint * victim_list) { gint idx; gint edge_idx; gint num_victims; /* If there is no-one to steal from, or the players have no * resources, we do not go into steal_resource. */ for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) victim_list[idx] = -1; num_victims = 0; for (edge_idx = 0; edge_idx < G_N_ELEMENTS(hex->edges); edge_idx++) { Edge *edge = hex->edges[edge_idx]; Player *owner; if (edge->type != BUILD_SHIP || edge->owner == my_player_num()) /* Can't steal from myself */ continue; /* Check if the node owner has any resources */ owner = player_get(edge->owner); if (owner->statistics[STAT_RESOURCES] > 0) { /* Has resources - we can steal */ for (idx = 0; idx < num_victims; idx++) if (victim_list[idx] == edge->owner) break; if (idx == num_victims) victim_list[num_victims++] = edge->owner; } } return num_victims; } pioneers-14.1/client/common/client.c0000644000175000017500000020641511760640326014411 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003-2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "cards.h" #include "map.h" #include "network.h" #include "log.h" #include "cost.h" #include "client.h" #include "state.h" #include "callback.h" #include "buildrec.h" #include "quoteinfo.h" #include "notifying-string.h" static enum callback_mode previous_mode; GameParams *game_params; static struct recovery_info_t { gchar *prevstate; gint turnnum; gint playerturn; gint numdiscards; gboolean rolled_dice; gint die1, die2; gboolean played_develop; gboolean bought_develop; GList *build_list; gboolean ship_moved; } recovery_info; NotifyingString *requested_name = NULL; NotifyingString *requested_style = NULL; gboolean requested_spectator; static gboolean global_unhandled(StateMachine * sm, gint event); static gboolean global_filter(StateMachine * sm, gint event); static gboolean mode_offline(StateMachine * sm, gint event); static gboolean mode_players(StateMachine * sm, gint event); static gboolean mode_player_list(StateMachine * sm, gint event); static gboolean mode_load_game(StateMachine * sm, gint event); static gboolean mode_load_gameinfo(StateMachine * sm, gint event); static gboolean mode_setup(StateMachine * sm, gint event); static gboolean mode_idle(StateMachine * sm, gint event); static gboolean mode_wait_for_robber(StateMachine * sm, gint event); static gboolean mode_road_building(StateMachine * sm, gint event); static gboolean mode_monopoly(StateMachine * sm, gint event); static gboolean mode_year_of_plenty(StateMachine * sm, gint event); static gboolean mode_robber(StateMachine * sm, gint event); static gboolean mode_discard(StateMachine * sm, gint event); static gboolean mode_turn(StateMachine * sm, gint event); static gboolean mode_turn_rolled(StateMachine * sm, gint event); static gboolean mode_domestic_trade(StateMachine * sm, gint event); static gboolean mode_domestic_quote(StateMachine * sm, gint event); static gboolean mode_domestic_monitor(StateMachine * sm, gint event); static gboolean mode_game_over(StateMachine * sm, gint event); static gboolean mode_wait_resources(StateMachine * sm, gint event); static gboolean mode_recovery_wait_start_response(StateMachine * sm, gint event); static void recover_from_disconnect(StateMachine * sm, struct recovery_info_t *rinfo); /* Create and/or return the client state machine. */ StateMachine *SM(void) { static StateMachine *state_machine; if (state_machine == NULL) { state_machine = sm_new(NULL); sm_global_set(state_machine, global_filter); sm_unhandled_set(state_machine, global_unhandled); } return state_machine; } /* When commands are sent to the server, front ends may want to update * the status bar or something to indicate the the game is currently * waiting for server respose. * Since the GUI may get disabled while waiting, it is good to let the * user know why all controls are unresponsive. */ static void waiting_for_network(gboolean is_waiting) { if (is_waiting) { callbacks.network_status(_("Waiting")); } else { callbacks.network_status(_("Idle")); } callbacks.network_wait(is_waiting); } /* Dummy callback functions. They do nothing */ static void dummy_init_glib_et_al(G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv) {; } static void dummy_init(void) {; } static void dummy_network_status(G_GNUC_UNUSED const gchar * description) {; } static void dummy_instructions(G_GNUC_UNUSED const gchar * message) {; } static void dummy_network_wait(G_GNUC_UNUSED gboolean is_waiting) {; } static void dummy_offline(void) {; } static void dummy_discard(void) {; } static void dummy_discard_add(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint discard_num) {; } static void dummy_discard_remove(G_GNUC_UNUSED gint player_num) {; } static void dummy_discard_done(void) {; } static void dummy_gold(void) {; } static void dummy_gold_add(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint gold_num) {; } static void dummy_gold_remove(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint * resources) {; } static void dummy_gold_choose(G_GNUC_UNUSED gint gold_num, G_GNUC_UNUSED const gint * bank) {; } static void dummy_gold_done(void) {; } static void dummy_game_over(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint points) {; } static void dummy_init_game(void) {; } static void dummy_start_game(void) {; } static void dummy_setup(G_GNUC_UNUSED unsigned num_settlements, G_GNUC_UNUSED unsigned num_roads) {; } static void dummy_quote(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint * they_supply, G_GNUC_UNUSED gint * they_receive) {; } static void dummy_roadbuilding(G_GNUC_UNUSED gint num_roads) {; } static void dummy_monopoly(void) {; } static void dummy_plenty(G_GNUC_UNUSED const gint * bank) {; } static void dummy_turn(void) {; } static void dummy_player_turn(G_GNUC_UNUSED gint player_num) {; } static void dummy_trade(void) {; } static void dummy_trade_player_end(G_GNUC_UNUSED gint player_num) {; } static void dummy_trade_add_quote(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint quote_num, G_GNUC_UNUSED const gint * they_supply, G_GNUC_UNUSED const gint * they_receive) {; } static void dummy_trade_remove_quote(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint quote_num) {; } static void dummy_trade_domestic(G_GNUC_UNUSED gint partner_num, G_GNUC_UNUSED gint quote_num, G_GNUC_UNUSED const gint * we_supply, G_GNUC_UNUSED const gint * we_receive) {; } static void dummy_trade_maritime(G_GNUC_UNUSED gint ratio, G_GNUC_UNUSED Resource we_supply, G_GNUC_UNUSED Resource we_receive) {; } static void dummy_quote_player_end(G_GNUC_UNUSED gint player_num) {; } static void dummy_quote_add(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint quote_num, G_GNUC_UNUSED const gint * they_supply, G_GNUC_UNUSED const gint * they_receive) {; } static void dummy_quote_remove(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint quote_num) {; } static void dummy_quote_start(void) {; } static void dummy_quote_end(void) {; } static void dummy_quote_monitor(void) {; } static void dummy_quote_trade(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint partner_num, G_GNUC_UNUSED gint quote_num, G_GNUC_UNUSED const gint * they_supply, G_GNUC_UNUSED const gint * they_receive) {; } static void dummy_rolled_dice(G_GNUC_UNUSED gint die1, G_GNUC_UNUSED gint die2, G_GNUC_UNUSED gint player_num) {; } static void dummy_draw_edge(G_GNUC_UNUSED Edge * edge) {; } static void dummy_draw_node(G_GNUC_UNUSED Node * node) {; } static void dummy_bought_develop(G_GNUC_UNUSED DevelType type) {; } static void dummy_played_develop(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED gint card_idx, G_GNUC_UNUSED DevelType type) {; } static void dummy_resource_change(G_GNUC_UNUSED Resource type, G_GNUC_UNUSED gint num) {; } static void dummy_draw_hex(G_GNUC_UNUSED Hex * hex) {; } static void dummy_update_stock(void) {; } static void dummy_robber(void) {; } static void dummy_robber_moved(G_GNUC_UNUSED Hex * old, G_GNUC_UNUSED Hex * new) { }; static void dummy_steal_building(void) {; } static void dummy_steal_ship(void) {; } static void dummy_robber_done(void) {; } static void dummy_player_robbed(G_GNUC_UNUSED gint robber_num, G_GNUC_UNUSED gint victim_num, G_GNUC_UNUSED Resource resource) {; } static void dummy_get_rolled_resources(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED const gint * resources, G_GNUC_UNUSED const gint * wanted) {; } static void dummy_new_statistics(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED StatisticType type, G_GNUC_UNUSED gint num) {; } static void dummy_new_points(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED Points * points, G_GNUC_UNUSED gboolean added) { } static void dummy_spectator_name(G_GNUC_UNUSED gint spectator_num, G_GNUC_UNUSED const gchar * name) {; } static void dummy_player_name(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED const gchar * name) {; } static void dummy_player_style(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED const gchar * style) {; } static void dummy_player_quit(G_GNUC_UNUSED gint player_num) {; } static void dummy_spectator_quit(G_GNUC_UNUSED gint player_num) {; } static void dummy_incoming_chat(G_GNUC_UNUSED gint player_num, G_GNUC_UNUSED const gchar * chat) {; } static void dummy_new_bank(G_GNUC_UNUSED const gint * new_bank) {; } static void dummy_error(G_GNUC_UNUSED const gchar * message) {; } static Map *dummy_get_map(void) { return NULL; } static void dummy_set_map(G_GNUC_UNUSED Map * map) {; } /*---------------------------------------------------------------------- * Entry point for the client state machine */ void client_init(void) { /* first set everything to 0, so we are sure it segfaults if * someone forgets to update this when adding a new callback */ memset(&callbacks, 0, sizeof(callbacks)); /* set all callbacks to their default value: doing nothing */ callbacks.init_glib_et_al = &dummy_init_glib_et_al; callbacks.init = &dummy_init; callbacks.network_status = &dummy_network_status; callbacks.instructions = &dummy_instructions; callbacks.network_wait = &dummy_network_wait; callbacks.offline = &dummy_offline; callbacks.discard = &dummy_discard; callbacks.discard_add = &dummy_discard_add; callbacks.discard_remove = &dummy_discard_remove; callbacks.discard_done = &dummy_discard_done; callbacks.gold = &dummy_gold; callbacks.gold_add = &dummy_gold_add; callbacks.gold_remove = &dummy_gold_remove; callbacks.gold_choose = &dummy_gold_choose; callbacks.gold_done = &dummy_gold_done; callbacks.game_over = &dummy_game_over; callbacks.init_game = &dummy_init_game; callbacks.start_game = &dummy_start_game; callbacks.setup = &dummy_setup; callbacks.quote = &dummy_quote; callbacks.roadbuilding = &dummy_roadbuilding; callbacks.monopoly = &dummy_monopoly; callbacks.plenty = &dummy_plenty; callbacks.turn = &dummy_turn; callbacks.player_turn = &dummy_player_turn; callbacks.trade = &dummy_trade; callbacks.trade_player_end = &dummy_trade_player_end; callbacks.trade_add_quote = &dummy_trade_add_quote; callbacks.trade_remove_quote = &dummy_trade_remove_quote; callbacks.trade_domestic = &dummy_trade_domestic; callbacks.trade_maritime = &dummy_trade_maritime; callbacks.quote_player_end = &dummy_quote_player_end; callbacks.quote_add = &dummy_quote_add; callbacks.quote_remove = &dummy_quote_remove; callbacks.quote_start = &dummy_quote_start; callbacks.quote_end = &dummy_quote_end; callbacks.quote_monitor = &dummy_quote_monitor; callbacks.quote_trade = &dummy_quote_trade; callbacks.rolled_dice = &dummy_rolled_dice; callbacks.draw_edge = &dummy_draw_edge; callbacks.draw_node = &dummy_draw_node; callbacks.bought_develop = &dummy_bought_develop; callbacks.played_develop = &dummy_played_develop; callbacks.resource_change = &dummy_resource_change; callbacks.draw_hex = &dummy_draw_hex; callbacks.update_stock = &dummy_update_stock; callbacks.robber = &dummy_robber; callbacks.robber_moved = &dummy_robber_moved; callbacks.steal_building = &dummy_steal_building; callbacks.steal_ship = &dummy_steal_ship; callbacks.robber_done = &dummy_robber_done; callbacks.player_robbed = &dummy_player_robbed; callbacks.get_rolled_resources = &dummy_get_rolled_resources; callbacks.new_statistics = &dummy_new_statistics; callbacks.new_points = &dummy_new_points; callbacks.spectator_name = &dummy_spectator_name; callbacks.player_name = &dummy_player_name; callbacks.player_style = &dummy_player_style; callbacks.player_quit = &dummy_player_quit; callbacks.spectator_quit = &dummy_spectator_quit; callbacks.incoming_chat = &dummy_incoming_chat; callbacks.new_bank = &dummy_new_bank; callbacks.error = &dummy_error; callbacks.get_map = &dummy_get_map; callbacks.set_map = &dummy_set_map; /* mainloop and quit are not set here */ resource_init(); } void client_start(int argc, char **argv) { callbacks.init_glib_et_al(argc, argv); requested_name = NOTIFYING_STRING(notifying_string_new()); requested_style = NOTIFYING_STRING(notifying_string_new()); callbacks.init(); sm_goto(SM(), mode_offline); } /*---------------------------------------------------------------------- * The state machine API supports two global event handling callbacks. * * All events are sent to the global event handler before they are * sent to the current state function. If the global event handler * handles the event and returns TRUE, the event will not be sent to * the current state function. is which allow unhandled events to be * processed via a callback. * * If an event is not handled by either the global event handler, or * the current state function, then it will be sent to the unhandled * event handler. Using this, the client code implements some of the * error handling globally. */ /* Global event handler - this get first crack at events. If we * return TRUE, the event will not be passed to the current state * function. */ static gboolean global_filter(StateMachine * sm, gint event) { switch (event) { case SM_NET_CLOSE: log_message(MSG_ERROR, _("We have been kicked out of the game.\n")); waiting_for_network(FALSE); sm_pop_all_and_goto(sm, mode_offline); callbacks.network_status(_("Offline")); return TRUE; default: break; } return FALSE; } /* Global unhandled event handler - this get called for events that * fall through the state machine without being handled. */ static gboolean global_unhandled(StateMachine * sm, gint event) { gchar *str; switch (event) { case SM_NET_CLOSE: g_error("SM_NET_CLOSE not caught by global_filter"); case SM_RECV: /* all errors start with ERR */ if (sm_recv(sm, "ERR %S", &str)) { log_message(MSG_ERROR, _("Error (%s): %s\n"), sm_current_name(sm), str); callbacks.error(str); g_free(str); return TRUE; } /* notices which are not errors should appear in the message * window */ if (sm_recv(sm, "NOTE %S", &str)) { log_message(MSG_ERROR, _("Notice: %s\n"), _(str)); g_free(str); return TRUE; } /* A notice with 1 argument */ if (sm_recv(sm, "NOTE1 %S", &str)) { gchar *message; gchar **parts; parts = g_strsplit(str, "|", 2); message = g_strdup_printf(_(parts[1]), parts[0]); log_message(MSG_ERROR, _("Notice: %s\n"), message); g_strfreev(parts); g_free(message); g_free(str); return TRUE; } /* protocol extensions which may be ignored have this prefix * before the next protocol changing version of the game is * released. Notify the client about it anyway. */ if (sm_recv(sm, "extension %S", &str)) { log_message(MSG_INFO, "Ignoring extension used by server: %s\n", str); g_free(str); return TRUE; } /* we're receiving strange things */ if (sm_recv(sm, "%S", &str)) { log_message(MSG_ERROR, "Unknown message in %s: %s\n", sm_current_name(sm), str); g_free(str); return TRUE; } /* this is never reached: everything matches "%S" */ g_error ("This should not be possible, please report this bug.\n"); default: break; } /* this may happen, for example when a hotkey is used for a function * which cannot be activated */ return FALSE; } /*---------------------------------------------------------------------- * Server notifcations about player name changes and chat messages. * These can happen in any state (maybe this should be moved to * global_filter()?). */ static gboolean check_chat_or_name(StateMachine * sm) { gint player_num; gchar *str; if (sm_recv(sm, "player %d chat %S", &player_num, &str)) { callbacks.incoming_chat(player_num, str); g_free(str); return TRUE; } if (sm_recv(sm, "player %d is %S", &player_num, &str)) { player_change_name(player_num, str); g_free(str); return TRUE; } if (sm_recv(sm, "player %d style %S", &player_num, &str)) { player_change_style(player_num, str); g_free(str); return TRUE; } return FALSE; } /*---------------------------------------------------------------------- * Server notifcations about other players name changes and chat * messages. These can happen in almost any state in which the game * is running. */ static gboolean check_other_players(StateMachine * sm) { BuildType build_type; DevelType devel_type; Resource resource_type, supply_type, receive_type; gint player_num, victim_num, card_idx, backwards; gint discard_num, num, ratio, die1, die2, x, y, pos; gint id; gint resource_list[NO_RESOURCE], wanted_list[NO_RESOURCE]; gint sx, sy, spos, dx, dy, dpos; gchar *str; if (check_chat_or_name(sm)) return TRUE; if (!sm_recv_prefix(sm, "player %d ", &player_num)) return FALSE; if (sm_recv(sm, "built %B %d %d %d", &build_type, &x, &y, &pos)) { player_build_add(player_num, build_type, x, y, pos, TRUE); return TRUE; } if (sm_recv (sm, "move %d %d %d %d %d %d", &sx, &sy, &spos, &dx, &dy, &dpos)) { player_build_move(player_num, sx, sy, spos, dx, dy, dpos, FALSE); return TRUE; } if (sm_recv (sm, "move-back %d %d %d %d %d %d", &sx, &sy, &spos, &dx, &dy, &dpos)) { player_build_move(player_num, sx, sy, spos, dx, dy, dpos, TRUE); return TRUE; } if (sm_recv(sm, "remove %B %d %d %d", &build_type, &x, &y, &pos)) { player_build_remove(player_num, build_type, x, y, pos); return TRUE; } if (sm_recv(sm, "receives %R %R", resource_list, wanted_list)) { gint i; for (i = 0; i < NO_RESOURCE; ++i) { if (resource_list[i] == wanted_list[i]) continue; if (resource_list[i] == 0) { log_message(MSG_RESOURCE, _("" "%s does not receive any %s, because the bank is empty.\n"), player_name(player_num, TRUE), resource_name(i, FALSE)); } else { gint j, list[NO_RESOURCE]; gchar *buff; for (j = 0; j < NO_RESOURCE; ++j) list[j] = 0; list[i] = resource_list[i]; resource_list[i] = 0; buff = resource_format_num(list); log_message(MSG_RESOURCE, _("" "%s only receives %s, because the bank didn't have any more.\n"), player_name(player_num, TRUE), buff); g_free(buff); resource_apply_list(player_num, list, 1); } } if (resource_count(resource_list) != 0) player_resource_action(player_num, _("%s receives %s.\n"), resource_list, 1); callbacks.get_rolled_resources(player_num, resource_list, wanted_list); return TRUE; } if (sm_recv(sm, "plenty %R", resource_list)) { /* Year of Plenty */ player_resource_action(player_num, _("%s takes %s.\n"), resource_list, 1); return TRUE; } if (sm_recv(sm, "spent %R", resource_list)) { player_resource_action(player_num, _("%s spent %s.\n"), resource_list, -1); return TRUE; } if (sm_recv(sm, "refund %R", resource_list)) { player_resource_action(player_num, _("%s is refunded %s.\n"), resource_list, 1); return TRUE; } if (sm_recv(sm, "bought-develop")) { develop_bought(player_num); return TRUE; } if (sm_recv(sm, "play-develop %d %D", &card_idx, &devel_type)) { develop_played(player_num, card_idx, devel_type); return TRUE; } if (sm_recv(sm, "turn %d", &num)) { turn_begin(player_num, num); return TRUE; } if (sm_recv(sm, "rolled %d %d", &die1, &die2)) { turn_rolled_dice(player_num, die1, die2); if (die1 + die2 != 7) sm_push(sm, mode_wait_resources); return TRUE; } if (sm_recv(sm, "must-discard %d", &discard_num)) { waiting_for_network(FALSE); sm_push(sm, mode_discard); if (player_num == my_player_num()) callback_mode = MODE_DISCARD; callbacks.discard_add(player_num, discard_num); return TRUE; } if (sm_recv(sm, "discarded %R", resource_list)) { player_resource_action(player_num, _("%s discarded %s.\n"), resource_list, -1); callbacks.discard_remove(player_num); return TRUE; } if (sm_recv(sm, "is-robber")) { robber_begin_move(player_num); return TRUE; } if (sm_recv(sm, "moved-robber %d %d", &x, &y)) { robber_moved(player_num, x, y, FALSE); return TRUE; } if (sm_recv(sm, "moved-pirate %d %d", &x, &y)) { pirate_moved(player_num, x, y, FALSE); return TRUE; } if (sm_recv(sm, "unmoved-robber %d %d", &x, &y)) { robber_moved(player_num, x, y, TRUE); return TRUE; } if (sm_recv(sm, "unmoved-pirate %d %d", &x, &y)) { pirate_moved(player_num, x, y, TRUE); return TRUE; } if (sm_recv(sm, "stole from %d", &victim_num)) { player_stole_from(player_num, victim_num, NO_RESOURCE); return TRUE; } if (sm_recv(sm, "stole %r from %d", &resource_type, &victim_num)) { player_stole_from(player_num, victim_num, resource_type); return TRUE; } if (sm_recv (sm, "monopoly %d %r from %d", &num, &resource_type, &victim_num)) { monopoly_player(player_num, victim_num, num, resource_type); return TRUE; } if (sm_recv(sm, "largest-army")) { player_largest_army(player_num); return TRUE; } if (sm_recv(sm, "longest-road")) { player_longest_road(player_num); return TRUE; } if (sm_recv(sm, "get-point %d %d %S", &id, &num, &str)) { player_get_point(player_num, id, str, num); g_free(str); return TRUE; } if (sm_recv(sm, "lose-point %d", &id)) { player_lose_point(player_num, id); return TRUE; } if (sm_recv(sm, "take-point %d %d", &id, &victim_num)) { player_take_point(player_num, id, victim_num); return TRUE; } if (sm_recv(sm, "setup %d", &backwards)) { setup_begin(player_num); if (backwards) sm_push(sm, mode_wait_resources); return TRUE; } if (sm_recv(sm, "setup-double")) { setup_begin_double(player_num); sm_push(sm, mode_wait_resources); return TRUE; } if (sm_recv(sm, "won with %d", &num)) { callbacks.game_over(player_num, num); log_message(MSG_DICE, _("%s has won the game with %d " "victory points!\n"), player_name(player_num, TRUE), num); sm_pop_all_and_goto(sm, mode_game_over); return TRUE; } if (sm_recv(sm, "has quit")) { player_has_quit(player_num); return TRUE; } if (sm_recv(sm, "maritime-trade %d supply %r receive %r", &ratio, &supply_type, &receive_type)) { player_maritime_trade(player_num, ratio, supply_type, receive_type); return TRUE; } sm_cancel_prefix(sm); return FALSE; } /*---------------------------------------------------------------------- * State machine state functions. * * The state machine API works like this: * * SM_ENTER: * When a state is entered the new state function is called with the * SM_ENTER event. This allows the client to perform state * initialisation. * * SM_INIT: * When a state is entered, and every time an event is handled, the * state machine code calls the current state function with an * SM_INIT event. * * SM_RECV: * Indicates that a message has been received from the server. * * SM_NET_*: * These are network connection related events. * * To change current state function, use sm_goto(). * * The state machine API also implements a state stack. This allows * us to reuse parts of the state machine by pushing the current * state, and then returning to it when the nested processing is * complete. * * The state machine nesting can be used via sm_push() and sm_pop(). */ /*---------------------------------------------------------------------- * Game startup and offline handling */ static gboolean mode_offline(StateMachine * sm, gint event) { sm_state_name(sm, "mode_offline"); switch (event) { case SM_ENTER: callback_mode = MODE_INIT; callbacks.offline(); break; default: break; } return FALSE; } /* Waiting for connect to complete */ gboolean mode_connecting(StateMachine * sm, gint event) { sm_state_name(sm, "mode_connecting"); switch (event) { case SM_NET_CONNECT: sm_goto(sm, mode_start); return TRUE; case SM_NET_CONNECT_FAIL: sm_goto(sm, mode_offline); return TRUE; default: break; } return FALSE; } /* Handle initial signon message */ gboolean mode_start(StateMachine * sm, gint event) { gint player_num, total_num; gchar *version; sm_state_name(sm, "mode_start"); if (event == SM_ENTER) { callbacks.network_status(_("Loading")); player_reset(); callbacks.init_game(); } if (event != SM_RECV) return FALSE; if (sm_recv(sm, "version report")) { sm_send(sm, "version %s\n", PROTOCOL_VERSION); return TRUE; } if (sm_recv(sm, "status report")) { gchar *name = notifying_string_get(requested_name); if (requested_spectator) { if (name && name[0] != '\0') { sm_send(sm, "status viewer %s\n", name); } else { sm_send(sm, "status newviewer\n"); } } else { if (name && name[0] != '\0') { sm_send(sm, "status reconnect %s\n", name); } else { sm_send(sm, "status newplayer\n"); } } g_free(name); return TRUE; } if (sm_recv(sm, "player %d of %d, welcome to pioneers server %S", &player_num, &total_num, &version)) { gchar *style = notifying_string_get(requested_style); g_free(version); player_set_my_num(player_num); player_set_total_num(total_num); sm_send(sm, "style %s\n", style); sm_send(sm, "players\n"); sm_goto(sm, mode_players); g_free(style); return TRUE; } if (sm_recv(sm, "ERR sorry, version conflict")) { sm_pop_all_and_goto(sm, mode_offline); callbacks.network_status(_("Offline")); callbacks.instructions(_("Version mismatch.")); log_message(MSG_ERROR, _("Version mismatch. Please make sure client " "and server are up to date.\n")); return TRUE; } return check_chat_or_name(sm); } /* Response to "players" command */ static gboolean mode_players(StateMachine * sm, gint event) { sm_state_name(sm, "mode_players"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "players follow")) { sm_goto(sm, mode_player_list); return TRUE; } return check_other_players(sm); } /* Handle list of players */ static gboolean mode_player_list(StateMachine * sm, gint event) { sm_state_name(sm, "mode_player_list"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, ".")) { sm_send(sm, "game\n"); sm_goto(sm, mode_load_game); return TRUE; } return check_other_players(sm); } /* Response to "game" command */ static gboolean mode_load_game(StateMachine * sm, gint event) { gchar *str; sm_state_name(sm, "mode_load_game"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "game")) { if (game_params != NULL) params_free(game_params); game_params = params_new(); return TRUE; } if (sm_recv(sm, "end")) { params_load_finish(game_params); callbacks.set_map(game_params->map); stock_init(); develop_init(); /* initialize global recovery info struct */ recovery_info.prevstate = NULL; recovery_info.turnnum = -1; recovery_info.playerturn = -1; recovery_info.numdiscards = -1; recovery_info.rolled_dice = FALSE; recovery_info.die1 = -1; recovery_info.die2 = -1; recovery_info.played_develop = FALSE; recovery_info.bought_develop = FALSE; recovery_info.build_list = NULL; recovery_info.ship_moved = FALSE; sm_send(sm, "gameinfo\n"); sm_goto(sm, mode_load_gameinfo); return TRUE; } if (check_other_players(sm)) return TRUE; if (sm_recv(sm, "%S", &str)) { params_load_line(game_params, str); g_free(str); return TRUE; } return FALSE; } /* Response to "gameinfo" command */ static gboolean mode_load_gameinfo(StateMachine * sm, gint event) { gint x, y, pos, owner; static gboolean have_bank = FALSE; static gint devcardidx = -1; static gint numdevcards = -1; gint num_roads, num_bridges, num_ships, num_settlements, num_cities, num_soldiers; gint opnum, opnassets, opncards, opnsoldiers; gboolean pchapel, puniv, pgov, plibr, pmarket, plongestroad, plargestarmy; gint point_id, point_points; gchar *point_name; DevelType devcard; gint devcardturnbought; BuildType btype; gint resources[NO_RESOURCE]; gint tmp_bank[NO_RESOURCE]; gint devbought; sm_state_name(sm, "mode_load_gameinfo"); if (event == SM_ENTER) { gint idx; have_bank = FALSE; for (idx = 0; idx < NO_RESOURCE; ++idx) tmp_bank[idx] = game_params->resource_count; set_bank(tmp_bank); } if (event != SM_RECV) return FALSE; if (sm_recv(sm, "gameinfo")) { return TRUE; } if (sm_recv(sm, ".")) { return TRUE; } if (sm_recv(sm, "end")) { callback_mode = MODE_WAIT_TURN; /* allow chatting */ callbacks.start_game(); sm_goto(sm, mode_recovery_wait_start_response); return TRUE; } if (sm_recv(sm, "bank %R", tmp_bank)) { set_bank(tmp_bank); have_bank = TRUE; return TRUE; } if (sm_recv(sm, "development-bought %d", &devbought)) { gint i; for (i = 0; i < devbought; i++) stock_use_develop(); return TRUE; } if (sm_recv(sm, "turn num %d", &recovery_info.turnnum)) { return TRUE; } if (sm_recv(sm, "player turn: %d", &recovery_info.playerturn)) { return TRUE; } if (sm_recv (sm, "dice rolled: %d %d", &recovery_info.die1, &recovery_info.die2)) { recovery_info.rolled_dice = TRUE; return TRUE; } if (sm_recv (sm, "dice value: %d %d", &recovery_info.die1, &recovery_info.die2)) { return TRUE; } if (sm_recv(sm, "played develop")) { recovery_info.played_develop = TRUE; return TRUE; } if (sm_recv(sm, "moved ship")) { recovery_info.ship_moved = TRUE; return TRUE; } if (sm_recv(sm, "bought develop")) { recovery_info.bought_develop = TRUE; return TRUE; } if (sm_recv(sm, "state %S", &recovery_info.prevstate)) { return TRUE; } if (sm_recv(sm, "playerinfo: resources: %R", resources)) { resource_init(); resource_apply_list(my_player_num(), resources, 1); /* If the bank was copied from the server, it should not be * compensated for my own resources, because it was already * correct. So we compensate it back. */ if (have_bank) modify_bank(resources); return TRUE; } if (sm_recv(sm, "playerinfo: numdevcards: %d", &numdevcards)) { devcardidx = 0; return TRUE; } if (sm_recv (sm, "playerinfo: devcard: %d %d", &devcard, &devcardturnbought)) { if (devcardidx >= numdevcards) { return FALSE; } develop_bought_card_turn(devcard, devcardturnbought); devcardidx++; if (devcardidx >= numdevcards) { devcardidx = numdevcards = -1; } return TRUE; } if (sm_recv (sm, "playerinfo: %d %d %d %d %d %d %d %d %d %d %d %d %d", &num_roads, &num_bridges, &num_ships, &num_settlements, &num_cities, &num_soldiers, &pchapel, &puniv, &pgov, &plibr, &pmarket, &plongestroad, &plargestarmy)) { if (num_soldiers) { player_modify_statistic(my_player_num(), STAT_SOLDIERS, num_soldiers); } if (pchapel) { player_modify_statistic(my_player_num(), STAT_CHAPEL, 1); } if (puniv) { player_modify_statistic(my_player_num(), STAT_UNIVERSITY, 1); } if (pgov) { player_modify_statistic(my_player_num(), STAT_GOVERNORS_HOUSE, 1); } if (plibr) { player_modify_statistic(my_player_num(), STAT_LIBRARY, 1); } if (pmarket) { player_modify_statistic(my_player_num(), STAT_MARKET, 1); } if (plongestroad) { player_modify_statistic(my_player_num(), STAT_LONGEST_ROAD, 1); } if (plargestarmy) { player_modify_statistic(my_player_num(), STAT_LARGEST_ARMY, 1); } return TRUE; } if (sm_recv (sm, "get-point %d %d %d %S", &opnum, &point_id, &point_points, &point_name)) { Points *points = points_new(point_id, point_name, point_points); player_modify_points(opnum, points, TRUE); /* Added */ return TRUE; } if (sm_recv (sm, "otherplayerinfo: %d %d %d %d %d %d %d %d %d %d %d", &opnum, &opnassets, &opncards, &opnsoldiers, &pchapel, &puniv, &pgov, &plibr, &pmarket, &plongestroad, &plargestarmy)) { player_modify_statistic(opnum, STAT_RESOURCES, opnassets); player_modify_statistic(opnum, STAT_DEVELOPMENT, opncards); player_modify_statistic(opnum, STAT_SOLDIERS, opnsoldiers); if (opnassets != 0) g_assert(have_bank); if (pchapel) { player_modify_statistic(opnum, STAT_CHAPEL, 1); } if (puniv) { player_modify_statistic(opnum, STAT_UNIVERSITY, 1); } if (pgov) { player_modify_statistic(opnum, STAT_GOVERNORS_HOUSE, 1); } if (plibr) { player_modify_statistic(opnum, STAT_LIBRARY, 1); } if (pmarket) { player_modify_statistic(opnum, STAT_MARKET, 1); } if (plongestroad) { player_modify_statistic(opnum, STAT_LONGEST_ROAD, 1); } if (plargestarmy) { player_modify_statistic(opnum, STAT_LARGEST_ARMY, 1); } return TRUE; } if (sm_recv(sm, "buildinfo: %B %d %d %d", &btype, &x, &y, &pos)) { BuildRec *rec; rec = g_malloc0(sizeof(*rec)); rec->type = btype; rec->x = x; rec->y = y; rec->pos = pos; recovery_info.build_list = g_list_append(recovery_info.build_list, rec); return TRUE; } if (sm_recv(sm, "RO%d,%d", &x, &y)) { robber_move_on_map(x, y); return TRUE; } if (sm_recv(sm, "P%d,%d", &x, &y)) { pirate_move_on_map(x, y); return TRUE; } if (sm_recv(sm, "S%d,%d,%d,%d", &x, &y, &pos, &owner)) { player_build_add(owner, BUILD_SETTLEMENT, x, y, pos, FALSE); return TRUE; } if (sm_recv(sm, "C%d,%d,%d,%d", &x, &y, &pos, &owner)) { player_build_add(owner, BUILD_CITY, x, y, pos, FALSE); return TRUE; } if (sm_recv(sm, "W%d,%d,%d,%d", &x, &y, &pos, &owner)) { player_build_add(owner, BUILD_CITY_WALL, x, y, pos, FALSE); return TRUE; } if (sm_recv(sm, "R%d,%d,%d,%d", &x, &y, &pos, &owner)) { player_build_add(owner, BUILD_ROAD, x, y, pos, FALSE); return TRUE; } if (sm_recv(sm, "SH%d,%d,%d,%d", &x, &y, &pos, &owner)) { player_build_add(owner, BUILD_SHIP, x, y, pos, FALSE); return TRUE; } if (sm_recv(sm, "B%d,%d,%d,%d", &x, &y, &pos, &owner)) { player_build_add(owner, BUILD_BRIDGE, x, y, pos, FALSE); return TRUE; } return FALSE; } /*---------------------------------------------------------------------- * Build command processing */ /* Handle response to build command */ gboolean mode_build_response(StateMachine * sm, gint event) { BuildType build_type; gint x, y, pos; sm_state_name(sm, "mode_build_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "built %B %d %d %d", &build_type, &x, &y, &pos)) { build_add(build_type, x, y, pos, TRUE); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to move ship command */ gboolean mode_move_response(StateMachine * sm, gint event) { gint sx, sy, spos, dx, dy, dpos; sm_state_name(sm, "mode_move_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "move %d %d %d %d %d %d", &sx, &sy, &spos, &dx, &dy, &dpos)) { build_move(sx, sy, spos, dx, dy, dpos, FALSE); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } /*---------------------------------------------------------------------- * Setup phase handling */ /* Response to a "done" */ gboolean mode_done_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_done_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "OK")) { build_clear(); waiting_for_network(FALSE); /* pop back to parent's parent if "done" worked */ sm_multipop(sm, 2); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } static char *setup_msg(void) { gchar *msg; gchar *old; const gchar *parts[3]; int num_parts; int idx; if (is_setup_double()) msg = g_strdup(_("Build two settlements, " "each with a connecting")); else msg = g_strdup(_("Build a settlement with a connecting")); num_parts = 0; if (setup_can_build_road()) parts[num_parts++] = _("road"); if (setup_can_build_bridge()) parts[num_parts++] = _("bridge"); if (setup_can_build_ship()) parts[num_parts++] = _("ship"); for (idx = 0; idx < num_parts; idx++) { if (idx > 0) { if (idx == num_parts - 1) { old = msg; msg = g_strdup_printf("%s%s", msg, _(" or")); g_free(old); } else { old = msg; msg = g_strdup_printf("%s,", msg); g_free(old); } } old = msg; msg = g_strdup_printf("%s %s", msg, parts[idx]); g_free(old); } old = msg; msg = g_strdup_printf("%s.", msg); g_free(old); return msg; } static gboolean mode_setup(StateMachine * sm, gint event) { unsigned total; sm_state_name(sm, "mode_setup"); switch (event) { case SM_ENTER: callback_mode = MODE_SETUP; callbacks.instructions(setup_msg()); total = is_setup_double()? 2 : 1; callbacks.setup(total - build_count_settlements(), total - build_count_edges()); break; case SM_RECV: /* When a line of text comes in from the network, the * state machine will call us with SM_RECV. */ if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Game is up and running - waiting for our turn */ /* Waiting for your turn to come around */ static gboolean mode_idle(StateMachine * sm, gint event) { gint num, player_num, backwards; gint they_supply[NO_RESOURCE]; gint they_receive[NO_RESOURCE]; sm_state_name(sm, "mode_idle"); switch (event) { case SM_ENTER: callback_mode = MODE_WAIT_TURN; if (player_is_spectator(my_player_num())) callbacks.instructions(""); else callbacks.instructions(_ ("Waiting for your turn.")); break; case SM_RECV: if (sm_recv(sm, "setup %d", &backwards)) { setup_begin(my_player_num()); if (backwards) sm_push_noenter(sm, mode_wait_resources); sm_push(sm, mode_setup); return TRUE; } if (sm_recv(sm, "setup-double")) { setup_begin_double(my_player_num()); sm_push_noenter(sm, mode_wait_resources); sm_push(sm, mode_setup); return TRUE; } if (sm_recv(sm, "turn %d", &num)) { turn_begin(my_player_num(), num); sm_push(sm, mode_turn); return TRUE; } if (sm_recv (sm, "player %d domestic-trade call supply %R receive %R", &player_num, they_supply, they_receive)) { sm_push(sm, mode_domestic_quote); callbacks.quote(player_num, they_supply, they_receive); return TRUE; } if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Nested state machine for robber handling */ /* Get user to steal from a building */ static gboolean mode_robber_steal_building(StateMachine * sm, gint event) { sm_state_name(sm, "mode_robber_steal_building"); switch (event) { case SM_ENTER: callback_mode = MODE_ROB; callbacks.instructions(_ ("Select the building to steal from.")); callbacks.steal_building(); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /* Get user to steal from a ship */ static gboolean mode_robber_steal_ship(StateMachine * sm, gint event) { sm_state_name(sm, "mode_robber_steal_ship"); switch (event) { case SM_ENTER: callback_mode = MODE_ROB; callbacks.instructions(_ ("Select the ship to steal from.")); callbacks.steal_ship(); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /* Handle response to move robber */ gboolean mode_robber_move_response(StateMachine * sm, gint event) { gint x, y; sm_state_name(sm, "mode_robber_move_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "robber-done")) { waiting_for_network(FALSE); sm_multipop(sm, 2); callbacks.robber_done(); return TRUE; } if (sm_recv(sm, "rob %d %d", &x, &y)) { const Hex *hex; waiting_for_network(FALSE); hex = map_hex_const(callbacks.get_map(), x, y); if (hex->terrain == SEA_TERRAIN) sm_push(sm, mode_robber_steal_ship); else sm_push(sm, mode_robber_steal_building); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } /* Wait for server to say robber-done */ gboolean mode_robber_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_robber_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "robber-done")) { waiting_for_network(FALSE); /* current state is response * parent is steal * parent is move_response * parent is mode_robber * all four must be popped. */ sm_multipop(sm, 4); callbacks.robber_done(); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } /* Get user to place robber */ static gboolean mode_robber(StateMachine * sm, gint event) { sm_state_name(sm, "mode_robber"); switch (event) { case SM_ENTER: callback_mode = MODE_ROBBER; callbacks.instructions(_("Place the robber.")); robber_begin_move(my_player_num()); callbacks.robber(); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /* We rolled a 7, or played a soldier card - any time now the server * is going to tell us to place the robber. Going into this state as * soon as we roll a 7 stops a race condition where the user presses a * GUI control in the window between receiving the die roll result and * the command to enter robber mode. */ static gboolean mode_wait_for_robber(StateMachine * sm, gint event) { sm_state_name(sm, "mode_wait_for_robber"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "you-are-robber")) { waiting_for_network(FALSE); sm_goto(sm, mode_robber); return TRUE; } if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Road building */ const gchar *road_building_message(gint build_amount) { switch (build_amount) { case 0: return _("Finish the road building action."); case 1: return _("Build one road segment."); case 2: return _("Build two road segments."); default: g_error("Unknown road building amount"); return ""; }; } static gboolean mode_road_building(StateMachine * sm, gint event) { gint build_amount; /* The amount of available 'roads' */ sm_state_name(sm, "mode_road_building"); switch (event) { case SM_ENTER: callback_mode = MODE_ROAD_BUILD; /* Determine the possible amount of road segments */ build_amount = 0; if (road_building_can_build_road()) build_amount += stock_num_roads(); if (road_building_can_build_ship()) build_amount += stock_num_ships(); if (road_building_can_build_bridge()) build_amount += stock_num_bridges(); /* Now determine the amount of segments left to play */ build_amount = MIN(build_amount, 2 - build_count_edges()); callbacks.roadbuilding(build_amount); callbacks.instructions(road_building_message (build_amount)); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Monopoly development card */ /* Response to "monopoly" */ gboolean mode_monopoly_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_monopoly_response"); switch (event) { case SM_ENTER: callback_mode = MODE_MONOPOLY_RESPONSE; waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "OK")) { waiting_for_network(FALSE); /* pop to parent's parent if it worked */ sm_multipop(sm, 2); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } static gboolean mode_monopoly(StateMachine * sm, gint event) { sm_state_name(sm, "mode_monopoly"); switch (event) { case SM_ENTER: callback_mode = MODE_MONOPOLY; callbacks.monopoly(); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Year of Plenty development card */ /* Response to "plenty" */ gboolean mode_year_of_plenty_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_year_of_plenty_response"); switch (event) { case SM_ENTER: callback_mode = MODE_PLENTY_RESPONSE; waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "OK")) { waiting_for_network(FALSE); /* action is done, go to parent's parent */ sm_multipop(sm, 2); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } static gboolean mode_year_of_plenty(StateMachine * sm, gint event) { gint plenty[NO_RESOURCE]; sm_state_name(sm, "mode_year_of_plenty"); switch (event) { case SM_RECV: if (sm_recv(sm, "plenty %R", plenty)) { callback_mode = MODE_PLENTY; callbacks.plenty(plenty); return TRUE; } if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Nested state machine for handling development card play response */ /* Handle response to play develop card */ gboolean mode_play_develop_response(StateMachine * sm, gint event) { gint card_idx; DevelType card_type; sm_state_name(sm, "mode_play_develop_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv (sm, "play-develop %d %D", &card_idx, &card_type)) { build_clear(); waiting_for_network(FALSE); develop_played(my_player_num(), card_idx, card_type); /* This mode should be popped off after the response * has been handled. However, for the development * card, a new mode must be pushed immediately. Due * to the lack of sm_pop_noenter this is combined as * sm_goto */ switch (card_type) { case DEVEL_ROAD_BUILDING: sm_goto(sm, mode_road_building); break; case DEVEL_MONOPOLY: sm_goto(sm, mode_monopoly); break; case DEVEL_YEAR_OF_PLENTY: sm_goto(sm, mode_year_of_plenty); break; case DEVEL_SOLDIER: sm_goto(sm, mode_wait_for_robber); break; default: sm_pop(sm); break; } return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } /*---------------------------------------------------------------------- * Nested state machine for handling resource card discards. We enter * discard mode whenever any player has to discard resources. * * When in discard mode, a section of the GUI changes to list all * players who must discard resources. This is important because if * during our turn we roll 7, but have less than 7 resources, we do * not have to discard. The list tells us which players have still * not discarded resources. */ static gboolean mode_discard(StateMachine * sm, gint event) { gint player_num, discard_num; sm_state_name(sm, "mode_discard"); switch (event) { case SM_ENTER: if (callback_mode != MODE_DISCARD && callback_mode != MODE_DISCARD_WAIT) { previous_mode = callback_mode; callback_mode = MODE_DISCARD_WAIT; } callbacks.discard(); break; case SM_RECV: if (sm_recv(sm, "player %d must-discard %d", &player_num, &discard_num)) { if (player_num == my_player_num()) callback_mode = MODE_DISCARD; callbacks.discard_add(player_num, discard_num); return TRUE; } if (sm_recv(sm, "discard-done")) { callback_mode = previous_mode; callbacks.discard_done(); sm_pop(sm); return TRUE; } if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Turn mode processing - before dice have been rolled */ /* Handle response to "roll dice" */ gboolean mode_roll_response(StateMachine * sm, gint event) { gint die1, die2; sm_state_name(sm, "mode_roll_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "rolled %d %d", &die1, &die2)) { turn_rolled_dice(my_player_num(), die1, die2); waiting_for_network(FALSE); sm_goto_noenter(sm, mode_turn_rolled); if (die1 + die2 == 7) { sm_push(sm, mode_wait_for_robber); } else sm_push(sm, mode_wait_resources); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } static gboolean mode_turn(StateMachine * sm, gint event) { sm_state_name(sm, "mode_turn"); switch (event) { case SM_ENTER: callback_mode = MODE_TURN; callbacks.instructions(_("It is your turn.")); callbacks.turn(); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Turn mode processing - after dice have been rolled */ /* Handle response to buy development card */ gboolean mode_buy_develop_response(StateMachine * sm, gint event) { DevelType card_type; sm_state_name(sm, "mode_buy_develop_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "bought-develop %D", &card_type)) { develop_bought_card(card_type); sm_pop(sm); waiting_for_network(FALSE); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } /* Response to "undo" */ gboolean mode_undo_response(StateMachine * sm, gint event) { BuildType build_type; gint x, y, pos; gint sx, sy, spos, dx, dy, dpos; sm_state_name(sm, "mode_undo_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "remove %B %d %d %d", &build_type, &x, &y, &pos)) { build_remove(build_type, x, y, pos); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (sm_recv(sm, "move-back %d %d %d %d %d %d", &sx, &sy, &spos, &dx, &dy, &dpos)) { build_move(sx, sy, spos, dx, dy, dpos, TRUE); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (sm_recv(sm, "undo-robber")) { waiting_for_network(FALSE); /* current state is undo-response * parent is steal * parent is move_response * parent is mode_robber * the first three must be popped. */ sm_multipop(sm, 3); return TRUE; } if (check_other_players(sm)) return TRUE; break; } return FALSE; } static gboolean mode_turn_rolled(StateMachine * sm, gint event) { sm_state_name(sm, "mode_turn_rolled"); switch (event) { case SM_ENTER: callback_mode = MODE_TURN; callbacks.instructions(_("It is your turn.")); callbacks.turn(); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Trade processing - all trading done inside a nested state machine * to allow trading to be invoked from multiple states. */ static gboolean check_trading(StateMachine * sm) { gint player_num, quote_num; gint they_supply[NO_RESOURCE]; gint they_receive[NO_RESOURCE]; if (!sm_recv_prefix(sm, "player %d ", &player_num)) return FALSE; if (sm_recv(sm, "domestic-quote finish")) { callbacks.trade_player_end(player_num); return TRUE; } if (sm_recv(sm, "domestic-quote quote %d supply %R receive %R", "e_num, they_supply, they_receive)) { callbacks.trade_add_quote(player_num, quote_num, they_supply, they_receive); return TRUE; } if (sm_recv(sm, "domestic-quote delete %d", "e_num)) { callbacks.trade_remove_quote(player_num, quote_num); return TRUE; } sm_cancel_prefix(sm); return FALSE; } /* Handle response to call for domestic trade quotes */ gboolean mode_trade_call_response(StateMachine * sm, gint event) { gint we_supply[NO_RESOURCE]; gint we_receive[NO_RESOURCE]; sm_state_name(sm, "mode_trade_call_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "domestic-trade call supply %R receive %R", we_supply, we_receive)) { waiting_for_network(FALSE); /* pop response state + push trade state == goto */ sm_goto(sm, mode_domestic_trade); return TRUE; } if (check_trading(sm) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to maritime trade */ gboolean mode_trade_maritime_response(StateMachine * sm, gint event) { gint ratio; Resource we_supply; Resource we_receive; Resource no_receive; sm_state_name(sm, "mode_trade_maritime_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: /* Handle out-of-resource-cards */ if (sm_recv(sm, "ERR no-cards %r", &no_receive)) { gchar *buf_receive; buf_receive = resource_cards(0, no_receive); log_message(MSG_TRADE, _("Sorry, %s available.\n"), buf_receive); g_free(buf_receive); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (sm_recv(sm, "maritime-trade %d supply %r receive %r", &ratio, &we_supply, &we_receive)) { player_maritime_trade(my_player_num(), ratio, we_supply, we_receive); waiting_for_network(FALSE); sm_pop(sm); callbacks.trade_maritime(ratio, we_supply, we_receive); return TRUE; } if (check_trading(sm) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to call for quotes during domestic trade */ gboolean mode_trade_call_again_response(StateMachine * sm, gint event) { gint we_supply[NO_RESOURCE]; gint we_receive[NO_RESOURCE]; sm_state_name(sm, "mode_trade_call_again_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "domestic-trade call supply %R receive %R", we_supply, we_receive)) { waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (check_trading(sm) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to domestic trade */ gboolean mode_trade_domestic_response(StateMachine * sm, gint event) { gint partner_num; gint quote_num; gint they_supply[NO_RESOURCE]; gint they_receive[NO_RESOURCE]; sm_state_name(sm, "mode_trade_domestic_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv (sm, "domestic-trade accept player %d quote %d supply %R receive %R", &partner_num, "e_num, &they_supply, &they_receive)) { player_domestic_trade(my_player_num(), partner_num, they_supply, they_receive); waiting_for_network(FALSE); callbacks.trade_domestic(partner_num, quote_num, they_receive, they_supply); sm_pop(sm); return TRUE; } if (check_trading(sm) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to domestic trade finish */ gboolean mode_domestic_finish_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_domestic_finish_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "domestic-trade finish")) { callback_mode = MODE_TURN; waiting_for_network(FALSE); /* pop to parent's parent on finish */ sm_multipop(sm, 2); return TRUE; } if (check_trading(sm) || check_other_players(sm)) return TRUE; break; } return FALSE; } static gboolean mode_domestic_trade(StateMachine * sm, gint event) { sm_state_name(sm, "mode_domestic_trade"); switch (event) { case SM_ENTER: if (callback_mode != MODE_DOMESTIC) { callback_mode = MODE_DOMESTIC; } callbacks.trade(); break; case SM_RECV: if (check_trading(sm) || check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * Quote processing - all quoting done inside a nested state machine. */ static gboolean check_quoting(StateMachine * sm, gint exitdepth, gboolean monitor) { gint player_num, partner_num, quote_num; gint they_supply[NO_RESOURCE]; gint they_receive[NO_RESOURCE]; if (!sm_recv_prefix(sm, "player %d ", &player_num)) return FALSE; if (sm_recv(sm, "domestic-quote finish")) { callbacks.quote_player_end(player_num); return TRUE; } if (sm_recv(sm, "domestic-quote quote %d supply %R receive %R", "e_num, they_supply, they_receive)) { callbacks.quote_add(player_num, quote_num, they_supply, they_receive); return TRUE; } if (sm_recv(sm, "domestic-quote delete %d", "e_num)) { callbacks.quote_remove(player_num, quote_num); return TRUE; } if (sm_recv(sm, "domestic-trade call supply %R receive %R", they_supply, they_receive)) { if (monitor) sm_pop(sm); callbacks.quote(player_num, they_supply, they_receive); return TRUE; } if (sm_recv (sm, "domestic-trade accept player %d quote %d supply %R receive %R", &partner_num, "e_num, they_supply, they_receive)) { player_domestic_trade(player_num, partner_num, they_supply, they_receive); callbacks.quote_trade(player_num, partner_num, quote_num, they_supply, they_receive); return TRUE; } if (sm_recv(sm, "domestic-trade finish")) { callback_mode = previous_mode; callbacks.quote_end(); sm_multipop(sm, exitdepth); return TRUE; } sm_cancel_prefix(sm); return FALSE; } /* Handle response to domestic quote finish */ gboolean mode_quote_finish_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_quote_finish_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "domestic-quote finish")) { waiting_for_network(FALSE); /* pop response + push monitor == goto */ sm_goto(sm, mode_domestic_monitor); callbacks.quote_monitor(); return TRUE; } if (check_quoting(sm, 2, FALSE) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to domestic quote submit */ gboolean mode_quote_submit_response(StateMachine * sm, gint event) { gint quote_num; gint we_supply[NO_RESOURCE]; gint we_receive[NO_RESOURCE]; sm_state_name(sm, "mode_quote_submit_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv (sm, "domestic-quote quote %d supply %R receive %R", "e_num, we_supply, we_receive)) { callbacks.quote_add(my_player_num(), quote_num, we_supply, we_receive); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (check_quoting(sm, 2, FALSE) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Handle response to domestic quote delete */ gboolean mode_quote_delete_response(StateMachine * sm, gint event) { gint quote_num; sm_state_name(sm, "mode_quote_delete_response"); switch (event) { case SM_ENTER: waiting_for_network(TRUE); break; case SM_RECV: if (sm_recv(sm, "domestic-quote delete %d", "e_num)) { callbacks.quote_remove(my_player_num(), quote_num); waiting_for_network(FALSE); sm_pop(sm); return TRUE; } if (check_quoting(sm, 2, FALSE) || check_other_players(sm)) return TRUE; break; } return FALSE; } /* Another player has called for quotes for domestic trade */ static gboolean mode_domestic_quote(StateMachine * sm, gint event) { sm_state_name(sm, "mode_domestic_quote"); switch (event) { case SM_ENTER: if (callback_mode != MODE_QUOTE) { previous_mode = callback_mode; callback_mode = MODE_QUOTE; callbacks.quote_start(); } break; case SM_RECV: if (check_quoting(sm, 1, FALSE) || check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /* We have rejected domestic trade, now just monitor */ static gboolean mode_domestic_monitor(StateMachine * sm, gint event) { sm_state_name(sm, "mode_domestic_monitor"); switch (event) { case SM_RECV: if (check_quoting(sm, 2, TRUE) || check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } /*---------------------------------------------------------------------- * The game is over */ static gboolean mode_game_over(StateMachine * sm, gint event) { sm_state_name(sm, "mode_game_over"); switch (event) { case SM_ENTER: callback_mode = MODE_GAME_OVER; callbacks.instructions(_("The game is over.")); break; case SM_RECV: if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } static gboolean mode_recovery_wait_start_response(StateMachine * sm, gint event) { sm_state_name(sm, "mode_recovery_wait_start_response"); switch (event) { case SM_ENTER: sm_send(sm, "start\n"); break; case SM_RECV: if (sm_recv(sm, "OK")) { recover_from_disconnect(sm, &recovery_info); return TRUE; } return check_other_players(sm); default: break; } return FALSE; } static void recover_from_disconnect(StateMachine * sm, struct recovery_info_t *rinfo) { StateFunc modeturn; GList *next; callbacks.start_game(); if (rinfo->turnnum > 0) turn_begin(rinfo->playerturn, rinfo->turnnum); if (rinfo->rolled_dice) { turn_rolled_dice(rinfo->playerturn, rinfo->die1, rinfo->die2); } else if (rinfo->die1 + rinfo->die2 > 1) { callbacks.rolled_dice(rinfo->die1, rinfo->die2, rinfo->playerturn); } if (rinfo->rolled_dice) modeturn = mode_turn_rolled; else modeturn = mode_turn; if (rinfo->played_develop || rinfo->bought_develop) { develop_reset_have_played_bought(rinfo->played_develop, rinfo->bought_develop); } /* setup_begin must be called before the build list is created, * because it contains a call to build_clear() */ if (strcmp(rinfo->prevstate, "SETUP") == 0 || strcmp(rinfo->prevstate, "RSETUP") == 0 || strcmp(rinfo->prevstate, "SETUPDOUBLE") == 0) { if (strcmp(rinfo->prevstate, "SETUPDOUBLE") == 0) { setup_begin_double(my_player_num()); } else { setup_begin(my_player_num()); } } /* The build list must be created before the state is entered, * because when the state is entered the frontend is called and * it will want to have the build list present. */ if (rinfo->build_list) { for (next = rinfo->build_list; next != NULL; next = g_list_next(next)) { BuildRec *build = (BuildRec *) next->data; build_add(build->type, build->x, build->y, build->pos, FALSE); } rinfo->build_list = buildrec_free(rinfo->build_list); } if (strcmp(rinfo->prevstate, "PREGAME") == 0) { sm_goto(sm, mode_idle); } else if (strcmp(rinfo->prevstate, "IDLE") == 0) { sm_goto(sm, mode_idle); } else if (strcmp(rinfo->prevstate, "SETUP") == 0 || strcmp(rinfo->prevstate, "RSETUP") == 0 || strcmp(rinfo->prevstate, "SETUPDOUBLE") == 0) { sm_goto_noenter(sm, mode_idle); if (strcmp(rinfo->prevstate, "SETUP") != 0) { sm_push_noenter(sm, mode_wait_resources); } sm_push(sm, mode_setup); } else if (strcmp(rinfo->prevstate, "TURN") == 0) { sm_goto_noenter(sm, mode_idle); sm_push(sm, modeturn); } else if (strcmp(rinfo->prevstate, "YOUAREROBBER") == 0) { sm_goto_noenter(sm, mode_idle); sm_push_noenter(sm, modeturn); sm_push(sm, mode_robber); } else if (strcmp(rinfo->prevstate, "DISCARD") == 0) { sm_goto_noenter(sm, mode_idle); if (my_player_num() == rinfo->playerturn) { sm_push_noenter(sm, mode_turn_rolled); sm_push_noenter(sm, mode_wait_for_robber); } /* Allow gui to fill previous_state when entering * mode_discard. */ callbacks.turn(); sm_push(sm, mode_discard); } else if (strcmp(rinfo->prevstate, "MONOPOLY") == 0) { sm_goto_noenter(sm, mode_idle); sm_push_noenter(sm, modeturn); callback_mode = MODE_TURN; sm_push(sm, mode_monopoly); } else if (strcmp(rinfo->prevstate, "PLENTY") == 0) { sm_goto_noenter(sm, mode_idle); sm_push_noenter(sm, modeturn); callback_mode = MODE_TURN; sm_push(sm, mode_year_of_plenty); } else if (strcmp(rinfo->prevstate, "GOLD") == 0) { sm_goto_noenter(sm, mode_idle); sm_push_noenter(sm, modeturn); callback_mode = MODE_TURN; sm_push(sm, mode_wait_resources); } else if (strcmp(rinfo->prevstate, "ROADBUILDING") == 0) { sm_goto_noenter(sm, mode_idle); sm_push_noenter(sm, modeturn); callback_mode = MODE_TURN; sm_push(sm, mode_road_building); } else g_warning("Not entering any state after reconnect, " "please report this as a bug. " "Should enter state \"%s\"", rinfo->prevstate); g_free(rinfo->prevstate); } /*---------------------------------------------------------------------- * Nested state machine for handling resource card distribution. We enter * here whenever resources might be distributed. * * This also includes choosing gold. Gold-choose mode is entered the first * time prepare-gold is received. * * When in gold-choose mode, as in discard mode, a section of the GUI * changes to list all players who must choose resources. This is * important because if during our turn we do not receive gold, but others * do, the list tells us which players have still not chosen resources. * Only the top player in the list can actually choose, the rest is waiting * for their turn. */ static gboolean mode_wait_resources(StateMachine * sm, gint event) { gint resource_list[NO_RESOURCE], bank[NO_RESOURCE]; gint player_num, gold_num; sm_state_name(sm, "mode_wait_resources"); switch (event) { case SM_RECV: if (sm_recv(sm, "player %d prepare-gold %d", &player_num, &gold_num)) { if (callback_mode != MODE_GOLD && callback_mode != MODE_GOLD_WAIT) { previous_mode = callback_mode; callback_mode = MODE_GOLD_WAIT; callbacks.gold(); } callbacks.gold_add(player_num, gold_num); return TRUE; } if (sm_recv(sm, "choose-gold %d %R", &gold_num, &bank)) { callback_mode = MODE_GOLD; callbacks.gold_choose(gold_num, bank); return TRUE; } if (sm_recv(sm, "player %d receive-gold %R", &player_num, resource_list)) { player_resource_action(player_num, _("%s takes %s.\n"), resource_list, 1); callbacks.gold_remove(player_num, resource_list); return TRUE; } if (sm_recv(sm, "done-resources")) { if (callback_mode == MODE_GOLD || callback_mode == MODE_GOLD_WAIT) { callback_mode = previous_mode; callbacks.gold_done(); } sm_pop(sm); return TRUE; } if (check_other_players(sm)) return TRUE; break; default: break; } return FALSE; } gboolean can_trade_domestic(void) { return game_params->domestic_trade; } gboolean can_trade_maritime(void) { MaritimeInfo info; gint idx; gboolean can_trade; /* We are not allowed to trade before we have rolled the dice, * or after we have done built a settlement / city, or after * buying a development card. */ if (!have_rolled_dice() || (game_params->strict_trade && (have_built() || have_bought_develop()))) return FALSE; can_trade = FALSE; /* Check if we can do a maritime trade */ map_maritime_info(callbacks.get_map(), &info, my_player_num()); for (idx = 0; idx < NO_RESOURCE; idx++) if (info.specific_resource[idx] && resource_asset(idx) >= 2) { can_trade = TRUE; break; } else if (info.any_resource && resource_asset(idx) >= 3) { can_trade = TRUE; break; } else if (resource_asset(idx) >= 4) { can_trade = TRUE; break; } return can_trade; } pioneers-14.1/client/common/client.h0000644000175000017500000001600711575444700014414 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003,2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _client_h #define _client_h #include "state.h" #include "game.h" #include "map.h" #include "callback.h" #include "notifying-string.h" /* variables */ extern GameParams *game_params; extern NotifyingString *requested_name; extern NotifyingString *requested_style; extern gboolean requested_spectator; /********* client.c ***********/ /* client initialization */ void client_init(void); /* before frontend initialization */ void client_start(int argc, char **argv); /* after frontend initialization */ /* access the state machine (a client has only one state machine) */ StateMachine *SM(void); /* state machine modes */ gboolean mode_connecting(StateMachine * sm, gint event); gboolean mode_start(StateMachine * sm, gint event); gboolean mode_build_response(StateMachine * sm, gint event); gboolean mode_move_response(StateMachine * sm, gint event); gboolean mode_done_response(StateMachine * sm, gint event); gboolean mode_robber_response(StateMachine * sm, gint event); gboolean mode_robber_move_response(StateMachine * sm, gint event); gboolean mode_monopoly_response(StateMachine * sm, gint event); gboolean mode_year_of_plenty_response(StateMachine * sm, gint event); gboolean mode_play_develop_response(StateMachine * sm, gint event); gboolean mode_roll_response(StateMachine * sm, gint event); gboolean mode_buy_develop_response(StateMachine * sm, gint event); gboolean mode_undo_response(StateMachine * sm, gint event); gboolean mode_trade_call_response(StateMachine * sm, gint event); gboolean mode_trade_maritime_response(StateMachine * sm, gint event); gboolean mode_trade_call_again_response(StateMachine * sm, gint event); gboolean mode_trade_domestic_response(StateMachine * sm, gint event); gboolean mode_domestic_finish_response(StateMachine * sm, gint event); gboolean mode_quote_finish_response(StateMachine * sm, gint event); gboolean mode_quote_submit_response(StateMachine * sm, gint event); gboolean mode_quote_delete_response(StateMachine * sm, gint event); /******* player.c **********/ void player_reset(void); void player_set_my_num(gint player_num); void player_modify_statistic(gint player_num, StatisticType type, gint num); void player_modify_points(gint player_num, Points * points, gboolean added); void player_change_name(gint player_num, const gchar * name); void player_has_quit(gint player_num); void player_largest_army(gint player_num); void player_longest_road(gint player_num); void player_set_current(gint player_num); void player_set_total_num(gint num); void player_stole_from(gint player_num, gint victim_num, Resource resource); void player_domestic_trade(gint player_num, gint partner_num, gint * supply, gint * receive); void player_maritime_trade(gint player_num, gint ratio, Resource supply, Resource receive); void player_build_add(gint player_num, BuildType type, gint x, gint y, gint pos, gboolean log_changes); void player_build_remove(gint player_num, BuildType type, gint x, gint y, gint pos); void player_build_move(gint player_num, gint sx, gint sy, gint spos, gint dx, gint dy, gint dpos, gint isundo); void player_resource_action(gint player_num, const gchar * action, const gint * resource_list, gint mult); void player_get_point(gint player_num, gint id, const gchar * str, gint num); void player_lose_point(gint player_num, gint id); void player_take_point(gint player_num, gint id, gint old_owner); void player_change_style(gint player_num, const gchar * style); gint find_spectator_by_name(const gchar * name); /********* build.c **********/ void build_clear(void); void build_new_turn(void); void build_remove(BuildType build_type, gint x, gint y, gint pos); void build_move(gint sx, gint sy, gint spos, gint dx, gint dy, gint dpos, gint isundo); void build_add(BuildType type, gint x, gint y, gint pos, gboolean newbuild); gboolean build_can_undo(void); gboolean build_is_valid(void); gboolean have_built(void); gboolean build_can_setup_road(const Edge * edge, gboolean double_setup); gboolean build_can_setup_ship(const Edge * edge, gboolean double_setup); gboolean build_can_setup_bridge(const Edge * edge, gboolean double_setup); gboolean build_can_setup_settlement(const Node * node, gboolean double_setup); /********** develop.c **********/ void develop_init(void); void develop_bought_card_turn(DevelType type, gint turnbought); void develop_bought_card(DevelType type); void develop_reset_have_played_bought(gboolean played_develop, gboolean bought_develop); void develop_bought(gint player_num); void develop_played(gint player_num, gint card_idx, DevelType type); void monopoly_player(gint player_num, gint victim_num, gint num, Resource type); void develop_begin_turn(void); gboolean have_bought_develop(void); /********** stock.c **********/ void stock_init(void); void stock_use_road(void); void stock_replace_road(void); void stock_use_ship(void); void stock_replace_ship(void); void stock_use_bridge(void); void stock_replace_bridge(void); void stock_use_settlement(void); void stock_replace_settlement(void); void stock_use_city(void); void stock_replace_city(void); void stock_use_city_wall(void); void stock_replace_city_wall(void); void stock_use_develop(void); /********** resource.c **********/ void resource_init(void); void resource_apply_list(gint player_num, const gint * resources, gint multiplier); gchar *resource_cards(gint num, Resource which); gchar *resource_format_num(const gint * resources); void resource_log_list(gint player_num, const gchar * action, const gint * resources); void resource_modify(Resource type, gint num); void set_bank(const gint * new_bank); void modify_bank(const gint * bank_change); /********** robber.c **********/ void robber_move_on_map(gint x, gint y); void pirate_move_on_map(gint x, gint y); void robber_moved(gint player_num, gint x, gint y, gboolean is_undo); void pirate_moved(gint player_num, gint x, gint y, gboolean is_undo); void robber_begin_move(gint player_num); /********* setup.c *********/ void setup_begin(gint player_num); void setup_begin_double(gint player_num); /********* turn.c *********/ void turn_rolled_dice(gint player_num, gint die1, gint die2); void turn_begin(gint player_num, gint turn_num); #endif pioneers-14.1/client/common/develop.c0000644000175000017500000001443711461571231014566 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "cards.h" #include "map.h" #include "client.h" #include "cost.h" #include "log.h" #include "state.h" #include "callback.h" static gboolean played_develop; /* already played a non-victory card? */ static gboolean bought_develop; /* have we bought a development card? */ static gboolean is_unique[NUM_DEVEL_TYPES]; /* is each card unique? */ static DevelDeck *develop_deck; /* our deck of development cards */ void develop_init(void) { int idx; if (develop_deck != NULL) deck_free(develop_deck); develop_deck = deck_new(game_params); for (idx = 0; idx < NUM_DEVEL_TYPES; idx++) is_unique[idx] = game_params->num_develop_type[idx] == 1; } void develop_bought_card_turn(DevelType type, gint turnbought) { deck_card_add(develop_deck, type, turnbought); if (turnbought == turn_num()) { /* Cannot undo build after buying a development card */ build_clear(); bought_develop = TRUE; /* Only log if the cards is bought in the current turn. * This function is also called during reconnect */ if (is_unique[type]) log_message(MSG_DEVCARD, /* This development card is unique */ _("" "You bought the %s development card.\n"), get_devel_name(type)); else log_message(MSG_DEVCARD, /* This development card is not unique */ _("" "You bought a %s development card.\n"), get_devel_name(type)); }; player_modify_statistic(my_player_num(), STAT_DEVELOPMENT, 1); stock_use_develop(); callbacks.bought_develop(type); } void develop_bought_card(DevelType type) { develop_bought_card_turn(type, turn_num()); } void develop_reset_have_played_bought(gboolean have_played, gboolean have_bought) { played_develop = have_played; bought_develop = have_bought; } void develop_bought(gint player_num) { log_message(MSG_DEVCARD, _("%s bought a development card.\n"), player_name(player_num, TRUE)); player_modify_statistic(player_num, STAT_DEVELOPMENT, 1); stock_use_develop(); } void develop_played(gint player_num, gint card_idx, DevelType type) { if (player_num == my_player_num()) { deck_card_play(develop_deck, played_develop, card_idx, turn_num()); if (!is_victory_card(type)) played_develop = TRUE; } callbacks.played_develop(player_num, card_idx, type); if (is_unique[type]) log_message(MSG_DEVCARD, _("%s played the %s development card.\n"), player_name(player_num, TRUE), get_devel_name(type)); else log_message(MSG_DEVCARD, _("%s played a %s development card.\n"), player_name(player_num, TRUE), get_devel_name(type)); player_modify_statistic(player_num, STAT_DEVELOPMENT, -1); switch (type) { case DEVEL_ROAD_BUILDING: if (player_num == my_player_num()) { if (stock_num_roads() == 0 && stock_num_ships() == 0 && stock_num_bridges() == 0) log_message(MSG_INFO, _("" "You have run out of road segments.\n")); } break; case DEVEL_CHAPEL: player_modify_statistic(player_num, STAT_CHAPEL, 1); break; case DEVEL_UNIVERSITY: player_modify_statistic(player_num, STAT_UNIVERSITY, 1); break; case DEVEL_GOVERNORS_HOUSE: player_modify_statistic(player_num, STAT_GOVERNORS_HOUSE, 1); break; case DEVEL_LIBRARY: player_modify_statistic(player_num, STAT_LIBRARY, 1); break; case DEVEL_MARKET: player_modify_statistic(player_num, STAT_MARKET, 1); break; case DEVEL_SOLDIER: player_modify_statistic(player_num, STAT_SOLDIERS, 1); break; default: break; } } void monopoly_player(gint player_num, gint victim_num, gint num, Resource type) { gchar *buf; gchar *tmp; player_modify_statistic(player_num, STAT_RESOURCES, num); player_modify_statistic(victim_num, STAT_RESOURCES, -num); buf = resource_cards(num, type); if (player_num == my_player_num()) { /* I get the cards */ /* $1=resources, $2=player that loses resources */ log_message(MSG_STEAL, _("You get %s from %s.\n"), buf, player_name(victim_num, FALSE)); resource_modify(type, num); } else if (victim_num == my_player_num()) { /* I lose the cards */ /* $1=player that steals, $2=resources */ log_message(MSG_STEAL, _("%s took %s from you.\n"), player_name(player_num, TRUE), buf); resource_modify(type, -num); } else { /* I'm a bystander */ /* $1=player that steals, $2=resources, $3=player that loses resources */ tmp = g_strdup(player_name(player_num, TRUE)); log_message(MSG_STEAL, _("%s took %s from %s.\n"), tmp, buf, player_name(victim_num, FALSE)); g_free(tmp); } g_free(buf); } void develop_begin_turn(void) { played_develop = FALSE; bought_develop = FALSE; } gboolean can_play_develop(gint card) { if (card < 0 || !deck_card_playable(develop_deck, played_develop, card, turn_num())) return FALSE; if (deck_card_type(develop_deck, card) == DEVEL_ROAD_BUILDING && !road_building_can_build_road() && !road_building_can_build_ship() && !road_building_can_build_bridge()) return FALSE; return TRUE; } gboolean can_play_any_develop(void) { int i; for (i = 0; i < develop_deck->num_cards; ++i) if (can_play_develop(i)) return TRUE; return FALSE; } gboolean can_buy_develop(void) { return have_rolled_dice() && stock_num_develop() > 0 && can_afford(cost_development()); } gboolean have_bought_develop(void) { return bought_develop; } const DevelDeck *get_devel_deck(void) { return develop_deck; } pioneers-14.1/client/common/main.c0000644000175000017500000000334110771471222014046 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "client.h" #include "callback.h" #include static GMainLoop *loop; static void run_main(void) { loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(loop); g_main_loop_unref(loop); } static void quit(void) { g_main_loop_quit(loop); } int main(int argc, char *argv[]) { net_init(); client_init(); callbacks.mainloop = &run_main; callbacks.quit = &quit; #if ENABLE_NLS setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); /* have gettext return strings in UTF-8 */ bind_textdomain_codeset(PACKAGE, "UTF-8"); #endif frontend_set_callbacks(); /* this must come after the frontend_set_callbacks, because it sets the * mode to offline, which means a callback is called. */ client_start(argc, argv); callbacks.mainloop(); net_finish(); return 0; } pioneers-14.1/client/common/player.c0000644000175000017500000005412211575447467014442 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003,2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "map.h" #include "client.h" #include "cost.h" #include "log.h" #include "callback.h" static Player players[MAX_PLAYERS]; static GList *spectators; static gint turn_player = -1; /* whose turn is it */ static gint my_player_id = -1; /* what is my player number */ static gint num_total_players = 4; /* total number of players in the game */ /* this function is called when the game starts, to clean up from the * previous game. */ void player_reset(void) { gint i, idx; /* remove all spectators */ while (spectators != NULL) { Spectator *spectator = spectators->data; g_free(spectator->name); g_free(spectator->style); spectators = g_list_remove(spectators, spectator); } /* free player's memory */ for (i = 0; i < MAX_PLAYERS; ++i) { if (players[i].name != NULL) { g_free(players[i].name); players[i].name = NULL; } if (players[i].style != NULL) { g_free(players[i].style); players[i].style = NULL; } while (players[i].points != NULL) { Points *points = players[i].points->data; players[i].points = g_list_remove(players[i].points, points); points_free(points); g_free(points); } for (idx = 0; idx < G_N_ELEMENTS(players[i].statistics); ++idx) players[i].statistics[idx] = 0; } } Player *player_get(gint num) { return &players[num]; } gboolean player_is_spectator(gint num) { return num < 0 || num >= num_total_players; } Spectator *spectator_get(gint num) { GList *list; for (list = spectators; list != NULL; list = g_list_next(list)) { Spectator *spectator = list->data; if (spectator->num == num) break; } if (list) return list->data; return NULL; } /** Find a spectator with the given name. * @param name The name to find * @return -1 if the name is not found */ gint find_spectator_by_name(const gchar * name) { GList *list; for (list = spectators; list != NULL; list = g_list_next(list)) { Spectator *spectator = list->data; if (!strcmp(spectator->name, name)) return spectator->num; } return -1; } const gchar *player_name(gint player_num, gboolean word_caps) { static gchar buff[256]; if (player_num >= num_total_players) { /* this is about a spectator */ Spectator *spectator = spectator_get(player_num); if (spectator != NULL) return spectator->name; else { if (word_caps) sprintf(buff, _("Spectator %d"), player_num); else sprintf(buff, _("spectator %d"), player_num); return buff; } } else if (player_num >= 0) { Player *player = player_get(player_num); return player->name; } if (word_caps) sprintf(buff, _("Player %d"), player_num); else sprintf(buff, _("player %d"), player_num); return buff; } gint player_get_score(gint player_num) { Player *player = player_get(player_num); GList *list; gint i, score; for (i = 0, score = 0; i < G_N_ELEMENTS(player->statistics); i++) { score += stat_get_vp_value(i) * player->statistics[i]; } list = player->points; while (list) { Points *points = list->data; score += points->points; list = g_list_next(list); } return score; } gint my_player_num(void) { return my_player_id; } gint num_players(void) { return num_total_players; } void player_set_my_num(gint player_num) { my_player_id = player_num; } void player_modify_statistic(gint player_num, StatisticType type, gint num) { Player *player = player_get(player_num); player->statistics[type] += num; callbacks.new_statistics(player_num, type, num); } void player_modify_points(gint player_num, Points * points, gboolean added) { Player *player = player_get(player_num); /* if !added -> is already removed */ if (added) player->points = g_list_append(player->points, points); callbacks.new_points(player_num, points, added); } void player_change_name(gint player_num, const gchar * name) { Player *player; gchar *old_name; if (player_num < 0) return; if (player_num >= num_total_players) { /* this is about a spectator */ Spectator *spectator = spectator_get(player_num); if (spectator == NULL) { /* there is a new spectator */ spectator = g_malloc0(sizeof(*spectator)); spectators = g_list_prepend(spectators, spectator); spectator->num = player_num; spectator->name = NULL; spectator->style = g_strdup(default_player_style); old_name = NULL; } else { old_name = spectator->name; } if (old_name == NULL) log_message(MSG_INFO, _("New spectator: %s.\n"), name); else log_message(MSG_INFO, _("%s is now %s.\n"), old_name, name); spectator->name = g_strdup(name); if (old_name != NULL) g_free(old_name); callbacks.spectator_name(player_num, name); return; } player = player_get(player_num); old_name = player->name; player->name = g_strdup(name); if (old_name == NULL) log_message(MSG_INFO, _("Player %d is now %s.\n"), player_num, name); else if (strcmp(old_name, name)) log_message(MSG_INFO, _("%s is now %s.\n"), old_name, name); if (old_name != NULL) g_free(old_name); callbacks.player_name(player_num, name); } void player_change_style(gint player_num, const gchar * style) { player_set_style(player_num, style); callbacks.player_style(player_num, style); } void player_has_quit(gint player_num) { Spectator *spectator; if (player_num < 0) return; /* usually callbacks are called after the event has been handled. * Here it is called before, so the frontend can access the * information about the quitting player/spectator */ if (player_num >= num_total_players) { /* a spectator has quit */ callbacks.spectator_quit(player_num); spectator = spectator_get(player_num); g_free(spectator->name); g_free(spectator->style); spectators = g_list_remove(spectators, spectator); return; } callbacks.player_quit(player_num); log_message(MSG_INFO, _("%s has quit.\n"), player_name(player_num, TRUE)); } void player_largest_army(gint player_num) { gint idx; if (player_num < 0) log_message(MSG_LARGESTARMY, _("There is no largest army.\n")); else log_message(MSG_LARGESTARMY, _("%s has the largest army.\n"), player_name(player_num, TRUE)); for (idx = 0; idx < num_total_players; idx++) { Player *player = player_get(idx); if (player->statistics[STAT_LARGEST_ARMY] != 0 && idx != player_num) player_modify_statistic(idx, STAT_LARGEST_ARMY, -1); if (player->statistics[STAT_LARGEST_ARMY] == 0 && idx == player_num) player_modify_statistic(idx, STAT_LARGEST_ARMY, 1); } } void player_longest_road(gint player_num) { gint idx; if (player_num < 0) log_message(MSG_LONGESTROAD, _("There is no longest road.\n")); else log_message(MSG_LONGESTROAD, _("%s has the longest road.\n"), player_name(player_num, TRUE)); for (idx = 0; idx < num_total_players; idx++) { Player *player = player_get(idx); if (player->statistics[STAT_LONGEST_ROAD] != 0 && idx != player_num) player_modify_statistic(idx, STAT_LONGEST_ROAD, -1); if (player->statistics[STAT_LONGEST_ROAD] == 0 && idx == player_num) player_modify_statistic(idx, STAT_LONGEST_ROAD, 1); } } void player_set_current(gint player_num) { turn_player = player_num; if (player_num != my_player_num()) { gchar *buffer; buffer = g_strdup_printf(_("Waiting for %s."), player_name(player_num, FALSE)); callbacks.instructions(buffer); g_free(buffer); return; } build_new_turn(); } void player_set_total_num(gint num) { num_total_players = num; } void player_stole_from(gint player_num, gint victim_num, Resource resource) { player_modify_statistic(player_num, STAT_RESOURCES, 1); player_modify_statistic(victim_num, STAT_RESOURCES, -1); if (resource == NO_RESOURCE) { /* CHECK THIS: Since anonymous players (NULL) no longer exist, * player_name doesn't use its static buffer anymore, and * two calls can be safely combined. If not: ai/player.c should also be fixed */ /* FIXME: in the client, anonymous players can exist. * I prefer changing that instead of this function */ log_message(MSG_STEAL, /* We are not in on the action someone stole a resource from someone else */ _("%s stole a resource from %s.\n"), player_name(player_num, TRUE), player_name(victim_num, FALSE)); } else { gchar *buf; buf = resource_cards(1, resource); if (player_num == my_player_num()) { /* We stole a card :-) */ log_message(MSG_STEAL, /* $1=resource, $2=player name */ _("You stole %s from %s.\n"), buf, player_name(victim_num, FALSE)); resource_modify(resource, 1); } else { /* Someone stole our card :-( */ log_message(MSG_STEAL, /* $1=player name, $2=resource */ _("%s stole %s from you.\n"), player_name(player_num, TRUE), buf); resource_modify(resource, -1); } g_free(buf); } callbacks.player_robbed(player_num, victim_num, resource); } void player_domestic_trade(gint player_num, gint partner_num, gint * supply, gint * receive) { gchar *supply_desc; gchar *receive_desc; gint diff; gint idx; diff = resource_count(receive) - resource_count(supply); player_modify_statistic(player_num, STAT_RESOURCES, -diff); player_modify_statistic(partner_num, STAT_RESOURCES, diff); if (player_num == my_player_num()) { for (idx = 0; idx < NO_RESOURCE; idx++) { resource_modify(idx, supply[idx]); resource_modify(idx, -receive[idx]); } } else if (partner_num == my_player_num()) { for (idx = 0; idx < NO_RESOURCE; idx++) { resource_modify(idx, -supply[idx]); resource_modify(idx, receive[idx]); } } if (!resource_count(supply)) { if (!resource_count(receive)) { log_message(MSG_TRADE, _("%s gave %s nothing!?\n"), player_name(player_num, TRUE), player_name(partner_num, FALSE)); } else { receive_desc = resource_format_num(receive); log_message(MSG_TRADE, /* $1=giving player, $2=receiving player, $3=resources */ _("%s gave %s %s for free.\n"), player_name(player_num, TRUE), player_name(partner_num, FALSE), receive_desc); g_free(receive_desc); } } else if (!resource_count(receive)) { supply_desc = resource_format_num(supply); log_message(MSG_TRADE, /* $1=giving player, $2=receiving player, $3=resources */ _("%s gave %s %s for free.\n"), player_name(partner_num, TRUE), player_name(player_num, FALSE), supply_desc); g_free(supply_desc); } else { supply_desc = resource_format_num(supply); receive_desc = resource_format_num(receive); log_message(MSG_TRADE, _("%s gave %s %s in exchange for %s.\n"), player_name(player_num, TRUE), player_name(partner_num, FALSE), receive_desc, supply_desc); g_free(supply_desc); g_free(receive_desc); } } void player_maritime_trade(gint player_num, gint ratio, Resource supply, Resource receive) { gchar *buf_give; gchar *buf_receive; gint resources[NO_RESOURCE]; gint idx; for (idx = 0; idx < NO_RESOURCE; ++idx) resources[idx] = 0; resources[supply] = ratio; resources[receive] = -1; modify_bank(resources); player_modify_statistic(player_num, STAT_RESOURCES, 1 - ratio); if (player_num == my_player_num()) { resource_modify(supply, -ratio); resource_modify(receive, 1); } buf_give = resource_cards(ratio, supply); buf_receive = resource_cards(1, receive); log_message(MSG_TRADE, _("%s exchanged %s for %s.\n"), player_name(player_num, TRUE), buf_give, buf_receive); g_free(buf_give); g_free(buf_receive); } void player_build_add(gint player_num, BuildType type, gint x, gint y, gint pos, gboolean log_changes) { Edge *edge; Node *node; switch (type) { case BUILD_ROAD: edge = map_edge(callbacks.get_map(), x, y, pos); edge->owner = player_num; edge->type = BUILD_ROAD; callbacks.draw_edge(edge); if (log_changes) { log_message(MSG_BUILD, _("%s built a road.\n"), player_name(player_num, TRUE)); } if (player_num == my_player_num()) stock_use_road(); break; case BUILD_SHIP: edge = map_edge(callbacks.get_map(), x, y, pos); edge->owner = player_num; edge->type = BUILD_SHIP; callbacks.draw_edge(edge); if (log_changes) { log_message(MSG_BUILD, _("%s built a ship.\n"), player_name(player_num, TRUE)); } if (player_num == my_player_num()) stock_use_ship(); break; case BUILD_SETTLEMENT: node = map_node(callbacks.get_map(), x, y, pos); node->type = BUILD_SETTLEMENT; node->owner = player_num; callbacks.draw_node(node); if (log_changes) { log_message(MSG_BUILD, _("%s built a settlement.\n"), player_name(player_num, TRUE)); } player_modify_statistic(player_num, STAT_SETTLEMENTS, 1); if (player_num == my_player_num()) stock_use_settlement(); break; case BUILD_CITY: node = map_node(callbacks.get_map(), x, y, pos); if (node->type == BUILD_SETTLEMENT) { player_modify_statistic(player_num, STAT_SETTLEMENTS, -1); if (player_num == my_player_num()) stock_replace_settlement(); } node->type = BUILD_CITY; node->owner = player_num; callbacks.draw_node(node); if (log_changes) { log_message(MSG_BUILD, _("%s built a city.\n"), player_name(player_num, TRUE)); } player_modify_statistic(player_num, STAT_CITIES, 1); if (player_num == my_player_num()) stock_use_city(); break; case BUILD_CITY_WALL: node = map_node(callbacks.get_map(), x, y, pos); node->city_wall = TRUE; node->owner = player_num; callbacks.draw_node(node); if (log_changes) { log_message(MSG_BUILD, _("%s built a city wall.\n"), player_name(player_num, TRUE)); } player_modify_statistic(player_num, STAT_CITY_WALLS, 1); if (player_num == my_player_num()) stock_use_city_wall(); break; case BUILD_NONE: log_message(MSG_ERROR, /* Error message */ _("" "player_build_add called with BUILD_NONE for user %s\n"), player_name(player_num, TRUE)); break; case BUILD_BRIDGE: edge = map_edge(callbacks.get_map(), x, y, pos); edge->owner = player_num; edge->type = BUILD_BRIDGE; callbacks.draw_edge(edge); if (log_changes) { log_message(MSG_BUILD, _("%s built a bridge.\n"), player_name(player_num, TRUE)); } if (player_num == my_player_num()) stock_use_bridge(); break; case BUILD_MOVE_SHIP: /* This clause here to remove a compiler warning. It should not be possible to reach this code. */ g_error("Bug: unreachable code reached"); break; } } void player_build_remove(gint player_num, BuildType type, gint x, gint y, gint pos) { Edge *edge; Node *node; switch (type) { case BUILD_ROAD: edge = map_edge(callbacks.get_map(), x, y, pos); edge->owner = -1; callbacks.draw_edge(edge); edge->type = BUILD_NONE; log_message(MSG_BUILD, _("%s removed a road.\n"), player_name(player_num, TRUE)); if (player_num == my_player_num()) stock_replace_road(); break; case BUILD_SHIP: edge = map_edge(callbacks.get_map(), x, y, pos); edge->owner = -1; callbacks.draw_edge(edge); edge->type = BUILD_NONE; log_message(MSG_BUILD, _("%s removed a ship.\n"), player_name(player_num, TRUE)); if (player_num == my_player_num()) stock_replace_ship(); break; case BUILD_SETTLEMENT: node = map_node(callbacks.get_map(), x, y, pos); node->type = BUILD_NONE; node->owner = -1; callbacks.draw_node(node); log_message(MSG_BUILD, _("%s removed a settlement.\n"), player_name(player_num, TRUE)); player_modify_statistic(player_num, STAT_SETTLEMENTS, -1); if (player_num == my_player_num()) stock_replace_settlement(); break; case BUILD_CITY: node = map_node(callbacks.get_map(), x, y, pos); node->type = BUILD_SETTLEMENT; node->owner = player_num; callbacks.draw_node(node); log_message(MSG_BUILD, _("%s removed a city.\n"), player_name(player_num, TRUE)); player_modify_statistic(player_num, STAT_SETTLEMENTS, 1); player_modify_statistic(player_num, STAT_CITIES, -1); if (player_num == my_player_num()) { stock_use_settlement(); stock_replace_city(); } break; case BUILD_CITY_WALL: node = map_node(callbacks.get_map(), x, y, pos); node->city_wall = FALSE; node->owner = player_num; callbacks.draw_node(node); log_message(MSG_BUILD, _("%s removed a city wall.\n"), player_name(player_num, TRUE)); player_modify_statistic(player_num, STAT_CITY_WALLS, -1); if (player_num == my_player_num()) stock_replace_city_wall(); break; case BUILD_NONE: log_message(MSG_ERROR, /* Error message */ _("" "player_build_remove called with BUILD_NONE for user %s\n"), player_name(player_num, TRUE)); break; case BUILD_BRIDGE: edge = map_edge(callbacks.get_map(), x, y, pos); edge->owner = -1; callbacks.draw_edge(edge); edge->type = BUILD_NONE; log_message(MSG_BUILD, _("%s removed a bridge.\n"), player_name(player_num, TRUE)); if (player_num == my_player_num()) stock_replace_bridge(); break; case BUILD_MOVE_SHIP: /* This clause here to remove a compiler warning. It should not be possible to reach this case. */ g_error("Bug: unreachable code reached"); break; } } void player_build_move(gint player_num, gint sx, gint sy, gint spos, gint dx, gint dy, gint dpos, gint isundo) { Edge *from = map_edge(callbacks.get_map(), sx, sy, spos), *to = map_edge(callbacks.get_map(), dx, dy, dpos); if (isundo) { Edge *tmp = from; from = to; to = tmp; } from->owner = -1; callbacks.draw_edge(from); from->type = BUILD_NONE; to->owner = player_num; to->type = BUILD_SHIP; callbacks.draw_edge(to); if (isundo) log_message(MSG_BUILD, _("%s has canceled a ship's movement.\n"), player_name(player_num, TRUE)); else log_message(MSG_BUILD, _("%s moved a ship.\n"), player_name(player_num, TRUE)); } void player_resource_action(gint player_num, const gchar * action, const gint * resource_list, gint mult) { resource_log_list(player_num, action, resource_list); resource_apply_list(player_num, resource_list, mult); } /* get a new point */ void player_get_point(gint player_num, gint id, const gchar * str, gint num) { Player *player = player_get(player_num); /* create the point */ Points *point = points_new(id, str, num); player_modify_points(player_num, point, TRUE); /* tell the user that someone got something */ log_message(MSG_INFO, _("%s received %s.\n"), player->name, _(str)); } /* lose a point: noone gets it */ void player_lose_point(gint player_num, gint id) { Player *player = player_get(player_num); Points *point; GList *list; /* look up the point in the list */ for (list = player->points; list != NULL; list = g_list_next(list)) { point = list->data; if (point->id == id) break; } /* communication error: the point doesn't exist */ if (list == NULL) { log_message(MSG_ERROR, _("server asks to lose invalid point.\n")); return; } player->points = g_list_remove(player->points, point); player_modify_points(player_num, point, FALSE); /* tell the user the point is lost */ log_message(MSG_INFO, _("%s lost %s.\n"), player->name, _(point->name)); /* free the memory */ points_free(point); g_free(point); } /* take a point from an other player */ void player_take_point(gint player_num, gint id, gint old_owner) { Player *player = player_get(player_num); Player *victim = player_get(old_owner); Points *point; GList *list; /* look up the point in the list */ for (list = victim->points; list != NULL; list = g_list_next(list)) { point = list->data; if (point->id == id) break; } /* communication error: the point doesn't exist */ if (list == NULL) { log_message(MSG_ERROR, _("server asks to move invalid point.\n")); return; } /* move the point in memory */ victim->points = g_list_remove(victim->points, point); player->points = g_list_append(player->points, point); /* tell the user someone (1) lost something (2) to someone else (3) */ log_message(MSG_INFO, _("%s lost %s to %s.\n"), victim->name, _(point->name), player->name); } void player_set_style(gint player_num, const gchar * style) { if (player_num >= num_total_players) { Spectator *spectator = spectator_get(player_num); if (spectator->style) g_free(spectator->style); spectator->style = g_strdup(style); } else if (player_num >= 0) { Player *player = player_get(player_num); if (player->style) g_free(player->style); player->style = g_strdup(style); } } const gchar *player_get_style(gint player_num) { const gchar *style = NULL; if (player_num >= num_total_players) { Spectator *spectator = spectator_get(player_num); style = spectator->style; } else if (player_num >= 0) { Player *player = player_get(player_num); style = player->style; } return style == NULL ? default_player_style : style; } gint current_player(void) { return turn_player; } const gchar *my_player_name(void) { return player_name(my_player_num(), TRUE); } gboolean my_player_spectator(void) { return player_is_spectator(my_player_num()); } const gchar *my_player_style(void) { return player_get_style(my_player_num()); } gint find_player_by_name(const gchar * name) { gint i; GList *list; for (i = 0; i < num_total_players; i++) { Player *player = player_get(i); if (player->name && !strcmp(player->name, name)) return i; } for (list = spectators; list != NULL; list = g_list_next(list)) { Spectator *spectator = list->data; if (!strcmp(spectator->name, name)) return spectator->num; } return -1; } pioneers-14.1/client/common/resource.c0000644000175000017500000001361110464636736014766 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "cost.h" #include "log.h" #include "client.h" #include "game.h" #include "map.h" static gint bank[NO_RESOURCE]; static const gchar *resource_names[][2] = { {N_("brick"), N_("Brick")}, {N_("grain"), N_("Grain")}, {N_("ore"), N_("Ore")}, {N_("wool"), N_("Wool")}, {N_("lumber"), N_("Lumber")}, {N_("no resource (bug)"), N_("No resource (bug)")}, {N_("any resource (bug)"), N_("Any resource (bug)")}, {N_("gold"), N_("Gold")} }; static const gchar *resource_lists[][2] = { {N_("a brick card"), N_("%d brick cards")}, {N_("a grain card"), N_("%d grain cards")}, {N_("an ore card"), N_("%d ore cards")}, {N_("a wool card"), N_("%d wool cards")}, {N_("a lumber card"), N_("%d lumber cards")} }; typedef enum { RESOURCE_SINGLECARD = 0, RESOURCE_MULTICARD } ResourceListType; static gint my_assets[NO_RESOURCE]; /* my resources */ static const gchar *resource_list(Resource type, ResourceListType grammar) { return _(resource_lists[type][grammar]); } /* Clear all */ void resource_init(void) { gint idx; for (idx = 0; idx < NO_RESOURCE; idx++) { my_assets[idx] = 0; resource_modify(idx, 0); }; } void resource_apply_list(gint player_num, const gint * resources, gint mult) { gint idx; gint bank_change[NO_RESOURCE]; for (idx = 0; idx < NO_RESOURCE; idx++) { gint num = resources[idx] * mult; bank_change[idx] = -num; if (num == 0) continue; player_modify_statistic(player_num, STAT_RESOURCES, num); if (player_num == my_player_num()) resource_modify(idx, num); } modify_bank(bank_change); } gchar *resource_cards(gint num, Resource type) { /* FIXME: this should be touched up to take advantage of the GNU ngettext API */ if (num != 1) return g_strdup_printf(resource_list (type, RESOURCE_MULTICARD), num); else return g_strdup(resource_list(type, RESOURCE_SINGLECARD)); } gint resource_count(const gint * resources) { gint num; gint idx; num = 0; for (idx = 0; idx < NO_RESOURCE; idx++) num += resources[idx]; return num; } gint resource_total(void) { return resource_count(my_assets); } gchar *resource_format_num(const gint * resources) { gint idx; gint num_types; gchar *str; /* Count how many different resources in list */ num_types = 0; for (idx = 0; idx < NO_RESOURCE; idx++) if (resources[idx] != 0) num_types++; if (num_types == 0) { return g_strdup(_("nothing")); } if (num_types == 1) { for (idx = 0; idx < NO_RESOURCE; idx++) { gint num = resources[idx]; if (num == 0) continue; return g_strdup(resource_cards(num, idx)); } } str = NULL; for (idx = 0; idx < NO_RESOURCE; idx++) { gchar *old; gint num = resources[idx]; if (num == 0) continue; if (str == NULL) { str = g_strdup(resource_cards(num, idx)); num_types--; continue; } old = str; if (num_types == 1) { /* Construct "A, B and C" for resources */ str = g_strdup_printf(_("%s and %s"), str, resource_cards(num, idx)); } else { /* Construct "A, B and C" for resources */ str = g_strdup_printf(_("%s, %s"), str, resource_cards(num, idx)); } g_free(old); num_types--; } return str; } void resource_log_list(gint player_num, const gchar * action, const gint * resources) { gchar *buff; buff = resource_format_num(resources); log_message(MSG_RESOURCE, action, player_name(player_num, TRUE), buff); g_free(buff); } void resource_modify(Resource type, gint num) { my_assets[type] += num; callbacks.resource_change(type, my_assets[type]); } gboolean can_afford(const gint * cost) { return cost_can_afford(cost, my_assets); } gint resource_asset(Resource type) { return my_assets[type]; } const gchar *resource_name(Resource type, gboolean word_caps) { return _(resource_names[type][word_caps ? 1 : 0]); } void resource_format_type(gchar * str, const gint * resources) { gint idx; gint num_types; gboolean add_comma; /* Count how many different resources in list */ num_types = 0; for (idx = 0; idx < NO_RESOURCE; idx++) if (resources[idx] != 0) num_types++; if (num_types == 0) { strcpy(str, _("nothing")); return; } if (num_types == 1) { for (idx = 0; idx < NO_RESOURCE; idx++) { gint num = resources[idx]; if (num == 0) continue; strcpy(str, resource_name(idx, FALSE)); } return; } add_comma = FALSE; for (idx = 0; idx < NO_RESOURCE; idx++) { gint num = resources[idx]; if (num == 0) continue; if (add_comma) { strcpy(str, " + "); str += strlen(str); } if (num > 1) sprintf(str, "%d %s", num, resource_name(idx, FALSE)); else sprintf(str, "%s", resource_name(idx, FALSE)); add_comma = TRUE; str += strlen(str); } } const gint *get_bank(void) { return bank; } void set_bank(const gint * new_bank) { gint idx; for (idx = 0; idx < NO_RESOURCE; ++idx) bank[idx] = new_bank[idx]; callbacks.new_bank(bank); } void modify_bank(const gint * bank_change) { gint idx; for (idx = 0; idx < NO_RESOURCE; ++idx) bank[idx] += bank_change[idx]; callbacks.new_bank(bank); } pioneers-14.1/client/common/robber.c0000644000175000017500000000463710745450110014400 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "game.h" #include "map.h" #include "client.h" #include "log.h" #include "callback.h" void robber_move_on_map(gint x, gint y) { Map *map = callbacks.get_map(); Hex *hex = map_hex(map, x, y); Hex *old_robber = map_robber_hex(map); map_move_robber(map, x, y); callbacks.draw_hex(old_robber); callbacks.draw_hex(hex); callbacks.robber_moved(old_robber, hex); } void pirate_move_on_map(gint x, gint y) { Map *map = callbacks.get_map(); Hex *hex = map_hex(map, x, y); Hex *old_pirate = map_pirate_hex(map); map_move_pirate(map, x, y); callbacks.draw_hex(old_pirate); callbacks.draw_hex(hex); callbacks.robber_moved(old_pirate, hex); } void robber_moved(gint player_num, gint x, gint y, gboolean is_undo) { robber_move_on_map(x, y); if (is_undo) log_message(MSG_STEAL, _("%s has undone the robber movement.\n"), player_name(player_num, TRUE)); else log_message(MSG_STEAL, _("%s moved the robber.\n"), player_name(player_num, TRUE)); } void pirate_moved(gint player_num, gint x, gint y, gboolean is_undo) { pirate_move_on_map(x, y); if (is_undo) log_message(MSG_STEAL, _("%s has undone the pirate movement.\n"), player_name(player_num, TRUE)); else log_message(MSG_STEAL, _("%s moved the pirate.\n"), player_name(player_num, TRUE)); } void robber_begin_move(gint player_num) { gchar *buffer; buffer = g_strdup_printf(_("%s must move the robber."), player_name(player_num, TRUE)); callbacks.instructions(buffer); g_free(buffer); } pioneers-14.1/client/common/setup.c0000644000175000017500000001020010745450110014244 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "game.h" #include "cards.h" #include "map.h" #include "network.h" #include "log.h" #include "client.h" static gboolean double_setup; gboolean is_setup_double(void) { return double_setup; } gboolean setup_can_build_road(void) { if (game_params->num_build_type[BUILD_ROAD] == 0) return FALSE; if (double_setup) { if (build_count_edges() == 2) return FALSE; return build_count_settlements() < 2 || map_can_place_road(callbacks.get_map(), my_player_num()); } else { if (build_count_edges() == 1) return FALSE; return build_count_settlements() < 1 || map_can_place_road(callbacks.get_map(), my_player_num()); } } gboolean setup_can_build_ship(void) { if (game_params->num_build_type[BUILD_SHIP] == 0) return FALSE; if (double_setup) { if (build_count_edges() == 2) return FALSE; return build_count_settlements() < 2 || map_can_place_ship(callbacks.get_map(), my_player_num()); } else { if (build_count_edges() == 1) return FALSE; return build_count_settlements() < 1 || map_can_place_ship(callbacks.get_map(), my_player_num()); } } gboolean setup_can_build_bridge(void) { if (game_params->num_build_type[BUILD_BRIDGE] == 0) return FALSE; if (double_setup) { if (build_count_edges() == 2) return FALSE; return build_count_settlements() < 2 || map_can_place_bridge(callbacks.get_map(), my_player_num()); } else { if (build_count_edges() == 1) return FALSE; return build_count_settlements() < 1 || map_can_place_bridge(callbacks.get_map(), my_player_num()); } } gboolean setup_can_build_settlement(void) { if (game_params->num_build_type[BUILD_SETTLEMENT] == 0) return FALSE; if (double_setup) return build_count_settlements() < 2; else return build_count_settlements() < 1; } gboolean setup_can_finish(void) { if (double_setup) return build_count_edges() == 2 && build_count_settlements() == 2 && build_is_valid(); else return build_count_edges() == 1 && build_count_settlements() == 1 && build_is_valid(); } /* Place some restrictions on road placement during setup phase */ gboolean setup_check_road(const Edge * edge) { return build_can_setup_road(edge, double_setup); } /* Place some restrictions on ship placement during setup phase */ gboolean setup_check_ship(const Edge * edge) { return build_can_setup_ship(edge, double_setup); } /* Place some restrictions on bridge placement during setup phase */ gboolean setup_check_bridge(const Edge * edge) { return build_can_setup_bridge(edge, double_setup); } /* Place some restrictions on settlement placement during setup phase */ gboolean setup_check_settlement(const Node * node) { return build_can_setup_settlement(node, double_setup); } void setup_begin(gint player_num) { log_message(MSG_INFO, _("Setup for %s.\n"), player_name(player_num, FALSE)); player_set_current(player_num); if (player_num != my_player_num()) return; double_setup = FALSE; build_clear(); } void setup_begin_double(gint player_num) { log_message(MSG_INFO, _("Double setup for %s.\n"), player_name(player_num, FALSE)); player_set_current(player_num); if (player_num != my_player_num()) return; double_setup = TRUE; build_clear(); } pioneers-14.1/client/common/stock.c0000644000175000017500000000642210621674212014246 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "map.h" #include "client.h" #include "callback.h" static gint num_roads; /* number of roads available */ static gint num_ships; /* number of ships available */ static gint num_bridges; /* number of bridges available */ static gint num_settlements; /* settlements available */ static gint num_cities; /* cities available */ static gint num_city_walls; /* city walls available */ static gint num_develop; /* development cards left */ void stock_init(void) { int idx; num_roads = game_params->num_build_type[BUILD_ROAD]; num_ships = game_params->num_build_type[BUILD_SHIP]; num_bridges = game_params->num_build_type[BUILD_BRIDGE]; num_settlements = game_params->num_build_type[BUILD_SETTLEMENT]; num_cities = game_params->num_build_type[BUILD_CITY]; num_city_walls = game_params->num_build_type[BUILD_CITY_WALL]; num_develop = 0; for (idx = 0; idx < G_N_ELEMENTS(game_params->num_develop_type); idx++) num_develop += game_params->num_develop_type[idx]; } gint stock_num_roads(void) { return num_roads; } void stock_use_road(void) { num_roads--; callbacks.update_stock(); } void stock_replace_road(void) { num_roads++; callbacks.update_stock(); } gint stock_num_ships(void) { return num_ships; } void stock_use_ship(void) { num_ships--; callbacks.update_stock(); } void stock_replace_ship(void) { num_ships++; callbacks.update_stock(); } gint stock_num_bridges(void) { return num_bridges; } void stock_use_bridge(void) { num_bridges--; callbacks.update_stock(); } void stock_replace_bridge(void) { num_bridges++; callbacks.update_stock(); } gint stock_num_settlements(void) { return num_settlements; } void stock_use_settlement(void) { num_settlements--; callbacks.update_stock(); } void stock_replace_settlement(void) { num_settlements++; callbacks.update_stock(); } gint stock_num_cities(void) { return num_cities; } void stock_use_city(void) { num_cities--; callbacks.update_stock(); } void stock_replace_city(void) { num_cities++; callbacks.update_stock(); } gint stock_num_city_walls(void) { return num_city_walls; } void stock_use_city_wall(void) { num_city_walls--; callbacks.update_stock(); } void stock_replace_city_wall(void) { num_city_walls++; callbacks.update_stock(); } gint stock_num_develop(void) { return num_develop; } void stock_use_develop(void) { num_develop--; } pioneers-14.1/client/common/turn.c0000644000175000017500000000345510745450110014112 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "log.h" #include "client.h" #include "callback.h" static gboolean rolled_dice; /* have we rolled the dice? */ static gint current_turn; void turn_rolled_dice(gint player_num, gint die1, gint die2) { int roll; roll = die1 + die2; log_message(MSG_DICE, _("%s rolled %d.\n"), player_name(player_num, TRUE), roll); if (player_num == my_player_num()) { rolled_dice = TRUE; callbacks.get_map()->has_moved_ship = FALSE; } callbacks.rolled_dice(die1, die2, player_num); } void turn_begin(gint player_num, gint num) { current_turn = num; log_message(MSG_DICE, _("Begin turn %d for %s.\n"), num, player_name(player_num, FALSE)); rolled_dice = FALSE; player_set_current(player_num); develop_begin_turn(); build_clear(); callbacks.player_turn(player_num); } gint turn_num(void) { return current_turn; } gboolean have_rolled_dice(void) { return rolled_dice; } pioneers-14.1/client/gtk/0000755000175000017500000000000011760646035012337 500000000000000pioneers-14.1/client/gtk/data/0000755000175000017500000000000011760646036013251 500000000000000pioneers-14.1/client/gtk/data/themes/0000755000175000017500000000000011760646033014533 500000000000000pioneers-14.1/client/gtk/data/themes/ccFlickr/0000755000175000017500000000000011760646034016254 500000000000000pioneers-14.1/client/gtk/data/themes/ccFlickr/Makefile.am0000644000175000017500000000323311517053252020223 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ccflickrthemedir = $(pioneers_themedir)/ccFlickr ccflickrtheme_DATA = \ client/gtk/data/themes/ccFlickr/ATTRIB \ client/gtk/data/themes/ccFlickr/board.png \ client/gtk/data/themes/ccFlickr/brick.png \ client/gtk/data/themes/ccFlickr/desert.png \ client/gtk/data/themes/ccFlickr/gold.png \ client/gtk/data/themes/ccFlickr/grain.png \ client/gtk/data/themes/ccFlickr/lumber.png \ client/gtk/data/themes/ccFlickr/ore.png \ client/gtk/data/themes/ccFlickr/port-brick.png \ client/gtk/data/themes/ccFlickr/port-gold.png \ client/gtk/data/themes/ccFlickr/port-grain.png \ client/gtk/data/themes/ccFlickr/port-lumber.png \ client/gtk/data/themes/ccFlickr/port-ore.png \ client/gtk/data/themes/ccFlickr/port-wool.png \ client/gtk/data/themes/ccFlickr/sea.png \ client/gtk/data/themes/ccFlickr/theme.cfg \ client/gtk/data/themes/ccFlickr/wool.png EXTRA_DIST += $(ccflickrtheme_DATA) pioneers-14.1/client/gtk/data/themes/ccFlickr/ATTRIB0000644000175000017500000000213111346241564017100 00000000000000ccFlickr theme by Aaron Williamson The ccFlickr theme incorporates the following images, all of which are licensed under the Creative Commons BY-SA (Attribution-Share Alike) License: # "Catch the Sun" by estaticist (http://www.flickr.com/photos/ecstaticist/1048502108/) * # "Cool textures" by MaxPower (http://flickr.com/photos/maxpower/27757115/) # "IMG_1833.JPG" by mtoz (http://www.flickr.com/photos/mtoz/541984160/) # "obscured by clouds" by vsz (http://flickr.com/photos/vs/186075406/) # "Oh my gold !" by Tater1982 (http://flickr.com/photos/tator82/451998879/) # "Sand Dunes in Gran Canaria" by szeke (http://flickr.com/photos/pedrosz/2254534211/) * # "Swirly rock" by bcostin (http://www.flickr.com/photos/bcostin/57023380/) # "There are 4 mln people in NZ... and 40 mln sheep!" by Alles Photos (http://flickr.com/photos/41433660@N00/296832420/) * Though these photos are marked as BY-SA-NC (Attribution-Share Alike-Noncommercial) on Flickr, the authors gave their express permission to distribute them with this theme under the BY-SA license. pioneers-14.1/client/gtk/data/themes/ccFlickr/board.png0000644000175000017500000050265011346241564020000 00000000000000PNG  IHDR X' pHYs  tIME% l IDATxіJ$s)"3olsvmfA" p""+OM^B""",!A}6+'&ß�8~(MTD;E}/ >o\Wsi;U6z{ |'? n;"s`rGf3y185¹n@}IᶆfG3[^YW'Y^HtR{,q@ wCk?,8]k669/irҝsmEGl.i~ey?| sM<E|>ox_xǁc,)fro`k¦̑V4q$=p#9\ (0^j%İ +~1tiX]5"@EEDekC:Qɲ/9A_m{Gd99ZmN/U6tTmG; ro݁ :1cmiD}\4 v 0|Qr6di0;Q "'cph1Q p|̘}T٢5 *ra P[d_z,l u@Gakm ?}ێIxw7DX}z)[ "!ڔ}(c +A F?R8uvUb:%H|G}E)#N3hWmI+.*DDzx:J/lkZPF;,bn5Wm/]ȿotDcg MrZ\ !KPgPu#'z8na 2_䈂-WD#>#.~q7#.|ԓz)Nbn!n1.H#?Ճw b;riAF3p3Q5W-#6޳? CWuBǾaf*sQ|~;3ԡ+B(!I/D+|n]p|Xw>dLb뙎Y"|dL­% 3 jR-'1eZq݆l§s zH\?`Յ@ YHV`T;% ^!_:^]\(=&ƶb~QKNO6uakAᷣ^ڈ}7b#eqZ{ ?1 B"2k㐬U臢oD^d>.x}.O~UusomU/#= wD ($)3Zn5dJ6w:ML!;j+@"$AbxKz# HuƆеOv)s^}X.șe, xaJ =ӎ/ru۾Ah$@I⑒Vt{}w! D=>x<y*b>3xև3,qby@zA>?IxR"Tc+aM|!ryCC!!,k-=z{3N P?4,jlTHYfFl7G!tlBE$W/o+[]aUbP40Jfjc` ڛϠP2j/|ezSC LށȱzcnSp'8GD ,ʨ{QpT"֒3t N|O?louŷLN CyJcGSy)e5 X7r ! jp鲗3OjL\]fdj nUl!1]{[~;ħ;%r ঢ়t'i_! uBX7|` 1}VӇF1%׭ |},P3%$#\?#8^z<3}XbF1Ei2`6dmf1[u+HE9+WI@| e3n`c6qG;O޵=?=Tډ{e=- B%$WWt|tܜL@r6 ÝJF[5dGƂIػ'=]oGbj.d0zGgv~-$N7ƞ5I1=iѧT1ma^+6TDP2,/Z)tR2tH +\5Iݒ<ƺ1Сt$u@ХٝA +.sb~I:~Hڭa.`#SY^ZrW2 TabL(eRݻX_;pO4m篸b I=FΎm^<{^oG5@ooMޚ\:g^vK l%ؠ*3i->38!-/ŸBbOxM` 9;WrHP ut@mR)氒<}bٞ3|+S27M󱰜A?ܠG0JaԬsI6C10#M4e@((yպ 2[`SA=&ƾK88:Z.Іk8#6$>yV,;?epoWRG,HIJGTjmyc4G\8)Z(@A :1#B֝0 5h8$ЇJS;ߎbT(iAl tT!ޡ)"@y96DzoF?7&9kwL_ź(Ք$_4r&.93 KF&, HBw']M tQEH5SÓ^ߌ )L8xbEwb7\V7yõIb~e~~ڢ"Өy#}\Hjj4Kk룄w!3C2cʣ"*D9E 4\WS گ56Tiu$<m. ze dQ:.:t]<^ۭ54S<(LE8HWo!xM f X"|s15XG!,2m- SSTi` C_U6R6H,>拾 C Z$ekg`@較quEXhu0- '͙Ɍ\ڧiWd8Br+>g'*7yUoM!We  omqq'XXz ,wsՅzKmV"Y?')OE~s~%}^K 1YdM?C$;xa^lĝF' iwX"کՋ~}ũ3 :4&PJ Z6c VrGQ?YAx)~`ȡ8 3"&1U)`r>gd K1kxoxjڡx.'?=z;ޅ'TNvdNDv&"2T!$d|#9.A{Ч NP&$TvG)ȅ&F%'jzx әΜXu7e.zʦ3?j~Oy'ZO1ǂgЙ{Ë\+╏P={ 䭵&UaA< - u䔩 μ]ҾV:>v𵾑\btnL'1/t(O'(+}Soj ϕM/XW8xٛS%rp}zp hoo#x|bԀHvzfOI4ȵAiAgAiUWmgt .DEM]$3'wF% OlqdGW~˟g)?"8ҸW/uL*FbAZӔ#`Vg[:IV+ `VgTH~Cq68k&k5ɑOv*4K3p!60.ÄCIY0O5*lAv;*)ЮORMP̀`'j>t!3%.nda!v]kMw6K,z頻O.bc#GiL>%]pXQދzKwphmrigwL9T"k/]bQ@nO0rA@k2DhQ { jqSz3RĽsHV„ϴ({=y}7z ,lDa( â7s1<4R-KDlSFtv=i0u0S ~qLҤ_s(`ڃTaJRŒq֧WXdC8B:GnvX1|."Xl!BZڶ,Lű NEq@5iGNSt.i12Xܫ};Y rJ` @!15` ?] zFt ,a hmA>;M $ AbEք+(klj M#y(x7~IO-Jd ,yH?Cc*:â]6c}\e2eG_m>[iRGơդ1qN]IEe'bF\n#k.zCQ:n{ 2V#ٳ@Ҩ\}+i1~}zܐNaebԂީw. L eG`BWLP,BM.gُqF+ g,j6 1ۘ~T9T'~pIhۂ{E?\k늇 :``]"7>pMfTu3~vrClC$pnIiyԤFOes BΩtzV@.h[3ƨx1A H>.9e JGo$`KDnЊ˯#cRs5'"rjYhX6]&!MOXȘNѿ|WmBoI d2nrHj^#uNc>ƨry 1 9.7˒lMwve.0LD*ҨVD̀>+KR+ӁB-+ tK`c[NB=CϹNG Hh($O=uT,``G 2n K"`M݇ TDRUa2CM5UexTd /={zɧ|Ipt%I ԩ8;uqsG+ZyoްUn: gPVB3+U "4/Ӓ=͔gX,iwF~8yRu`%T9 Wƞ_عaF K;~88wof̀krKpQSx:Ȩ . Wm; 2tP:`Cba~5Bxq'9l,Ȋ|坕erU/[kW@UߢkDTݣ4V! MTKt;isz٨>iGW N/\Ejn78(=W$"=$FAN "RX^eGiBq @9E_']d8Vt!"󇥾t>EW|~Q2y:/~rDO1vzɟ )mOizޢ"t>=yWF6jn3jV=x+&NXr:Ole ӑGߺp!]"WV5Jet60tc{TMNHĒ: {f!iCL+ܴz"ЊW缍ePLD""99iS$tIN=d1t.{s=jIqW}x!bqTkI@PXMˇ'tOpY}vMa)FjdzGg=K`ֹ_ja1`Ƿ3#6*$Ms3m<龜 m͝nd-;EK}O9dFg&:mjF̐Mջ;S"ΡL]2g#]X(@==IC80>G1GVjhHAӹ-q>v=_xAB[/\/|=q5<=${I$wEJo'A[6\vjg wAyGNmJ bp縧oVv+O~"!#1֓D"ExW \&_lg+3ck %YncaҴEHS^cԟi, Ve#JHxxϟlO\nLꆫD-\Z6:+#­/p)i Q yU-YA4Lzrf|UDTڥ:;tbJ#v1-.]Xީiog{aKVtQ}JtuTSHv9P^׏5ܰ4R/F/3O(OhRxC|c \'B 4 9tMǴj~wR*qBZ<#3ko !]7Eз֮BO(gBB( ayܧᶴð+Fg,tvhU 9鿼|(,Л:5)LbBÖEdc9]QSVAn PO$HB@e*_Z1L {q(#!{2mPcfDʂI^d23+=\`Dxv<viv^ R5qVzw+n?YQhަaM%ԻHİKW&vj7&VQ%'6П blpsЕǀȡZSgPV'4];ťΘOAnz&.OALu_˳ܧ>e2 '1*`\*Uy+:\x9n[gt7=<< O|YK{ebW+iNN$Y5=ni7Pd"C>z tgwDql#ׄorƉjL]+dYʉyJ;r,nLX{T[ }>i@ns3XPv4jyP娘$ >Gbu4LjdZX=.YHY,LI YU x?* u;?—edskޮ 6ljv5FT`nswI>qiȥܼ BzU\c6yV 0)1xkS [ѕ!,5F-]> NH;kESJ0]*2+ [eOi-E;&`Φ`Cug+@)#;APF;XQp[ ++)Ӫe|k}fnJs;Wᰔm2QiAXY?WTvn v~io 7eyM:K(ցkhh}QBrim>"I*iG6I Y!ksQ|g N4Yx qY5zmQFb0۞ = 'ib0[`jܢN,Z.^-B$Bi;/b35p|q>N?OUrͺb'ΦO"x5c4.š)N¢o}حȅKT`B厮&d5ڤ}(k8z܎Y] ݈weUL㕥l(OY#{FID.)R}GE"6&G^.fLq8qۥz|k@ dX]^Z;@h gң'CN!!{-q? qFeTinMKC'SilCSKDNDoXKFv?vsj_7i-( 9!{{H}U0펮NE>:>ޙG= ?uU,puF'z80EDݭVL»0VШ"zzN/!Wxcua}+: Vsz\qC>WeȔёjܳ-4>t]NM$RE73TeV7ɭe[Y]h1d;CK%_w軇v_|v@*ݕK:E1O\1]:}".XEI)7Xd)Z1Y,-=c~9%`!<"qf1 o+pţC! LQ(GZ-F8"5CMnt䮷M[WVb[ 19tj6ӧѵy*IZRc|x9cm"zq10YPUoL 9Ձ2,IRJB1nC ^yF1HFM7RWGjc/~nȇYFU"DSJʤ{N?fC`?a6ݯ] "O>͘jƽvp;|# v30u<> 8u)dӁwiI :Y*}tKpZ@TQ+4u'\XG)F!?,D.H\Aq Jshy>W)IĽٰ#VT^aJL/ѕ>I§(Y\wGMFE( 䳟 5q@ ~B\(&Hhx1"{ 8|yphFkx.seW,42=)lrt;dP"؆'IVfHz5@`DMhD#dϷVN''x>=t=TH78ٽ"3-NLvT懊gn4F{S'sv #c> !A:%a'%&aQJP˓djYr1 ݠDkc0_]/M.mGnUFa\W$Q$ 'he2;5a!-%?:ȱdrABPG:W=x2+BOO+s+03 rpvn/3]+*)3:3RĻx=xހKvu5%dEW4h>CQں`*EZ-2\9KkpoaDxxy ))uLἚQa4ۧɦqI1)ftRҾ_ۚbw]Gs٭YPg2nsWG1lMtجS7ꠀ%ҟQ1d3" LN|V R76H5 ‘'µ#Ji_6QDھtֲ25u|l"zWqu.YKI><1,SLVq3#賀kvmo 7X,}ڤ?Q:XZ(hZЊKP&Z Q?+R?/5+Y%WRё"[ϿqOL$P['O:ȂHqɋ+f'W# U}u^l;CҡrdsA/=I[*pg-wE>8VUIҹ9zhifN(A;'"H`K,o䲐ȟAOkFDs$d^`^ m&iڊ@%.Ks? 'QMU7$CB]xYYE/oxmӦ.>L8誋fI@[Fj}F v }l mS~+Ez-YO$%"hw|NN%lp?oVb } x7X6OO3wS"&#S$}B+c+lrPD#PzN SI@? m6CegɁOcZԺ.' _Ǭ"ጶsulܲ_=te;` |E+.W837:AN,6&K!{:U9W\sOä}-є@5 &ȱ1}^~+vU],{Q}N"g IDAT(x DT YM>bVWZ(As`x?gn~̨ʼ\8X$mUh}{i( ⰂߺA7ۢuNF[A2/F'4={eCN(΂L H8یuT;4iig>:9E/ՓB7y^_۷?M*-+״]pSv z=ί(qt$0 N_{u >e0_[{w_۷KvA4XKsHJ[:aQ˱bɲ'hySz |3E<- H l_2 7 _܈94G)+æCꂲ)BGZܹƵG"Qx$?%`sNImeb6Hy!h6r^O?O)xYIZ{m֒W ;꣙y{&4b&YG_|:j| ՚_.?nz:I']y , +VNINY^-5TنZ~bt{1ZO4*%J;OG'}ߋ.u7vu~3`S xv\FQ:sP8O]  cwP|sS,dw X<X`-<Rc4s [\swN#+%=j C !od#_B8B φepb"ГWDE3C_Yc63ϔ|(XȟKÏ˷KkZ|V٥6w+t)}z̖r*~r&O:_faCkxh{Az}Xoݸ7vzRtUk 8c]y,vAylLՊjixpKb,FUL,[́^z]\@b 5,BSBd> 0J l6aŞ B;[;7'+{`c=>ZBAj9#eSMWg">qr#zi?5Y:u dty]!{B͕ ]ěx[\ d 妷t|6$&A剽Ѧ3 bSݵ2w BJԊCWZq 4uT' N$ZH顬C)(v3W-C!X&djDMr)PWXMJ38`Dw!r,r \˜ٝU?,*ǘۉƩ+ueoR1[squB~4RjZ\30$tuiv~ik"9I磴ꑨ!i^AQP<&ѓiUиUЫdf'R7 :i72('K{&Fs#FZA*bDĂM;xOfgb%rL^I8#WG%LY Ոwa7E"}˂" IHp(T_BL^  `'KPM9L2N`,'=*9JX P- k=6sQ?0U?(GhkyĮ<c?&~\/M;e"a[+ q*-A[(=d!MK-]Z"fdv5[dP]x/1U/2Q!MT@N0gv zC-OM bv~>xV^YdKqH[гAzlw OjVdS}%RJOr&/ ?uKmS+հzmI%gfCeܢx,h{݂Z;XXp4?xcmq2mOCb5geuy"jģ`}xmRPQ F2owېFyNY kNk`{W2j'ѿEH6Ez[~o't ~i unMl7'jpkGYt3Y?PHJ: 0]83oC\t% ϔ3 =â4]鳾ͪaF϶Jl^c7ծ:jbz؋"u<z3q ḞAj588~[+3{.p&5zh6}F[;&ػ(9PGVu!_P>/'bZַ;ck:G%fc얧8OHŃ*|/CCmQJd;frڒ`$d&2u_r%XFAa:5¦*)0/ g g.Vk.7N}dpb^q"~ ,t?i1$2A&c &RꨰvTh;5uy_.9)b[M0EhҠWYVB՞s\Av :b`Mu z$춀7԰S}gdd]h|#,׫W]*,Tǡ:o6pӴHV5i$UG?~,}K6#:#٠"נkÏUs>&{ܢHgjclI2sH[W CwE?t&ȢU~ݴ G+m{~ :Y'+|F ܎(8Zs=xGd|Ǫ0 +@ :Bp( K ds˜G,1 'S7ZBlbppEXJܣ,, OC3#bwr,ֱqK%vŤXt,THH=jUG!tBArPz@,{$*``k0}%͒ &at 1跛 M)ns2,C1ŠCP Lǭv) MU!*H# (xJcZGxio82wIbˏ`y⩈":9'Q`iM~]_obV$uxp[yvpmnǼݴ&\d &[4@/*"zD,m`l;ԳG =7'HI2^;ahuOe|a x'\ȝ5*.6}G/H&O&;ٯ^U f6ڽ5`]b6j8-L4G]~+]#F*3&1ݖ(7"sN⍋~@C9kÙ%edNJZձ(TsŞ=3X_~\/>o 8{1b3 p fߙ'/3جFK sIB%#bEil$%ì/ .$YJ"Jccm#Θ{8fZ]!q9Z1)y+^tIum 4g՗}5]Wxy右(v8;c/M3m$ p<`" ?|T (L;*Eo$gv!;jhF:;y2z^V6R˄vA!g`l-*Df~%ca諽'dŪ[ vW4w) tj+!%P ta۔9-'d6!t5vqbbчr0;oHb aڛH З8d4FVnUH0bW8"QԦW{= 1& 0J3䜥5pd8z=e*:Nz#LĊwR6 #fA8X/RXϕ/22mQɷK{B{"Vٟ d@ <CUJrttx#JWpZWHH`Tzlup{Tmus-_:SLmaG]ZF̦*I7=" #ń}2 LK_aN OʦH׏Rt%֥=Mcl1T5oBֻ˜?zctla]HS؜SVd6d^Cv; 6 rua]`Hv7FG1:KvB~jR鴢'nx0cbκxuaUʩe_Bpwǰ0PzT-T|: %ny̞J dg", =b:=Z0ߎA06u 2J>,;YǦ=ʶ%hiWpkq r#E@\1&菞Ӻ&T?>_L\pizqm{jJs;ݻSV_TJ|4]~W7[X2hX4 3&9ZZ<:Kc=tx\ou[pF$H=ZB!`دU1.TLiCK -4Μїp}j~ ?]t%.T!0XSlEWwn[Ele iS$IWQ{/VjɎ2;H[} jZ؆+sMX44DИj}u}AMѺZu;+z YK_oo+K6_1>HꎔF& ;M:FLX^h〨d2N.(SȠb*F3^viҜj $C}SLR= =K ]EV&Ću`Z` C)6(VE݌KZ-A;62ߕt8X.jc 1&v n(0ncٹqr^Q*J鮾OE^U6M(A7&ZvGdC|**I YMf+pOEW@ʭ۪n>l^n&v=UG4z~:c,:̀Ty|QZ~"h݁L[6hktx!9;+ n/+@4"Y*CA晋ZK?= 5H .s~qho"1Ie͔Q=` @1x߃2tVPvm1!{tz9)1M8 UGQMie;1cg#~6yǍiSr:-ScBtJAN۵v$E~NEm3HaN^7_ XTXh' b؏yoQis񂎩j1Vêy{#Ҩb{%TCAl +1JikYSiLVaY_C 0IywO b >WR~6,WJ( S#mo%{~kRɳ|)uLgB,|(!(*8gӡ|K1K81U->P j4߱Hvnش:,iSt`uJ0%+|EXqlj[]/ -bAדT[g 3i7/۬fڮ z%x^ӑcH=ꮦu<֥pWrI IDATkLRq4FASOHm5U$@m=PIy雇_Myz4^u8(y7:iq"b8['wI\ K**"YMnCfT\/?- ] gJţrVvU&ߩLUA"_1sg_@Vl0 +B7(׉\)BAOKp)z2RF0J7 .tKLD8QicfbrPY|V0Xpv)H<3`21~+F $urZ8uc,myj?c4 .)N$PEtRK$AI[cPtuEapo{J_&YW~d4c.p`TBo8J[D1r<t0!Q+XZ6mj[3%=--;l{ it$kF«}t|V KȌ,s%.͔*fU1-qz{M]] ,t-܃y^*K퇶_eȖnrQ5q}M =fht5 i $@=rJAn;:Q^d=3rl=jҍ$ÕУfW1 Cl0~x(& 5Wԗv0+znW)3ͯ6َ!YpmS",D_;7G_nƟ5.ݳMcEw !%azf1E'DԊS <*h;֋Y@IyLqi UcL) ҔgZViHc`D(P 4Wf&A$-XXJ0H#RӴp q&V0'q8/6r0{ܠj da貐ӊsNY&<&i/k¸ ԟDĚD\edw`_qFͮGwiȹπFoYhy :̺q6^ϟ. -%I5{i<Hf9t=N6HIa:1bP.\-eN'Ws<]%i|TX˥?YmݸTU҃/s j4%ۑubAҟO 3 I_?m2hkϒp`0^s`?D*JoV!%tCf4TT-8>z@爡5A pˡ¯65ıaŰ(p95wc?]Al~VaM/j,dMVq'Q#O[ Q\\~"G>Ng)ȓf_G6rPLF{JcJfp {J 9IXe?Ae1*SSrs+72 'q.?{JYDSj9gz fHZ0:7 ;5m+"sKxixb$wziҋIk4 Z[*Aw$ukL$ ;}ܥRbB)>0`܃gU?m>7%}7ܭBxT_o{k\2Gxe/a 4N2…4HQ as;ui9ű֘f< 3TNqF{9v Mpz9UMPΒPhUq^t9׳C`$ӽ3-5&#r0Y·JB1J19;^Uw=0ͥ=3i 0! {l50NOo$rܣB*tFRS :1X#ݦd\jN7ME(S___ۏk@WG04&DvK.֔Z4CXoL\ )!ݏ٣' Q)(/+=H%!`N{F5NfdUչꦓ](z6)MHگ6Եj ]?/o鑠9qZ4 纶]z.Jn\o;`M.0zMYXWM?|_8d`t(GooCn)A'vl& X^ 3`+XG-'j#[e&1q"V#>AC  0pۓ?ю$QX`-0)hS1S1\t_ahQ'b<:)@"g_׿_:B6in77m?ˠ>uc0`kt1T*b@,Ǻ I6RjX-}7YޞgEe.&kH߈4'L:AjlĆ})`zAss3~͒M`#CW,W:yql#.BOb,h3Ծ"B jFl|A8aֶ'4PiRl8t6?[< HFMkR >ħDzkoW\&B%TLåC{0̧:g;|^0$XtC7-EF2v*'g\WKkY8, 1ӶYcsZ(D ] i%sW=L߮S e7ԗ z"vGr1suIÛBKG^$tXL-^"+[MEHv NMf<N&@~-lp`Bod'gT^ wW $iO?\O$d,m3jz3e DGG@"{-LۻRJv;6Kte&Q 7yOs߄"y og!B|DS&&zsΩ=*L6PޕYrwץŶ\}?!??n ⫃N礡&#v:c֣\[!:<ZȂV{P04 N2kI$|NTVEm*Wj?Qmrˊ#'4ʧ :+MuAc]{93y؄E\A'e:}ܽC iVv-AJ*i\ SG*`o]"u&쑌:e؏>-o7BI0-oG9ղW:I,gU*ztoh_ ;_LU?*]GU;Z;> *ի! %2$[+Ͼ_?"Sڈ?q4|Å015p5zm%]l=mV7^_/vr'Xlg nc+^TrզZ-z0?vhE``}fDeya"uG!4+XJ@B%ba?lԭ^4MU2O`1ǒcAT ]`*8p pG4`0T `UQT~QO;gDNp%Yv$3:Z#b%'aEr&ZKɱ",['a?.ߛ%Iv򻼃~̋1zN,t$=o9b 2!ʣK-T FMp\]z_"{r :mx'14MVK) )J L1+jSq0G@<4)C]n(~+v<;H.v':cНpl!vKpXLܘDh,n c"AÛ} Ed9<7} t>qfO.|k彡m̐Gи^I5ҭg^uaZW.6WجWu?x^r˩^whEiAk}Y)fjn*X$qD>禵̟qTMSFCR/GJfupD>A"\!,)>Nt.f_@yp~~+_cl4*S0ă-L+dE]s;U ٹG4s-s2L9*[2\,턵;S~m?-e$LCLyB*ZDx,ctlrd2]@*h"×S!$*,q&ң6egO%R24{v "oO+įNoW^e :+lUDlR/?4baa~ Ξ]d)clzݰrj% {$I {feU%-f8iШ|T婪ᑕ3E=w{0yҫln9h|k@X&%3TR%2HXzcYq{H5 8о~W(5!. wOvo;vX;w@ڴ918q"钻b+`"6RZ'7Al8 d=,|k*M2!]c[?ptC|"&0%#tnـC$Ge-X/~(4Ex)Tۜ |= HyrIqUڔiX)4PH=J9/VA@.F3oDfC1q;|<ζ #%RW.0Ş(F R+ 3ZYp7wwR?lܷC%m(6]5ͤV෫]|kY%E@ YąR W5PGW%1Zκk,j*)TъRrWz?Rw1l@Li\s@:8tm(r|P}`7sRw^⒓GݼH1둉`j@˺N }t̩q}K-52;چ>~D+ΘS o~]cJ1{5dc58Ei1̈́ ;dטԈ֝A0ǪF)EvVYFe+z6ǹ53]!= qDW oiZ˩l0J"l@8S0T*Pvy xceqd̟cN$xvJݔ)ˬC h 8 9(#.IiPq}]m; ?ogU4d2&JĨzqԌ-v2FFVTU=|U[ë̕c{߰5A6gj$>3yf}~XmZ4qXn SD2GAbsoYI;zyq@TM& &0&bx6α 2L8 {oޚjԝ6C 8' ۵p xCӋu۬qa7U:o 6)羮WN* ӾZq(txo|۾hg#ʋ4Cxt\g軟NsZ]gP:\g _eZt8M ibb0S=wFBUEo;n(.Sa,UB >Mم>35l;bYL)!Jv0b]lR)LOJkoޛ6~$1jEph62#=K*I\zi j#@Gi|@2m(Z g]ԀEl܏o|o|~v[>:ژb2l'/SsKɍŔrt3\S~6NU 9Sc!*P^Ը OH]zr4F` j`Lju1f#[cgG&E o5k`S&2O lYW裻-_Jk*@2J`hN"+qd!"O:\,~x(Vϱ(j֡.Xdj0_+a&-#yFWaWլ:mQ%j$Ф}ƮGNTՎ;fO#MFypOodOtk yczhqBQh;N|v- QNI X3sgT=A=C@W 7sYѷ ċAvap#Cv\h5< @XWh<|?Q\%PE5j.2ӧ.!^y1\X /CU~P2nJsW8 pFGw"C,hwOp6Z  m=tȦ\HphJqt]PԈ>ʘnv>GpȀ6g;,bMY6'iW[Qr2 ~oC=hЫ5gqwzAAv;EEe=Ac}o>-=1۸wԫM=F~jʾu$qO7&Ɏk-dy/'aUp"yHBi1`u}r&4ONVL|A qŵKF}ӯOMZRgdA>E"qV ? f_D3yW/\˔WJGW1:6HDM{q)79hzRldpwb0Cܸ؍q8BsөYaZj5`l:*5kqFexZrz׏ }CɁ",fx[Z YiRH03b DӬ,i, 7KAM??*ZA}T07NisEH^C^vвv=1 _a"0[W^rpi4I%DNpL-#DgVMǡ(. fNV-"Tlzb{LrAN~< IDAT=ZQ-PDŽ:G@IDV #:h v2`UHZ o %.8,r-E@2=Tg$Un,|msE:nS9ͦ\+&E>pvʏ@6~QuO8c 8g,6Wӣ~uRqK,Ok; a˝҂&j+H At1/ayA- Ɯ8x+-N/MsJ3j$W?\99ᝎQBW%mR#g>yh~qľ,,y,8Md(j,\>Qg9(Θ0 \?!Os"xFNqk5躍^K L#ԭ)VRo|w]Hl,]oݷ[A/Ӏܕ89f9۠nR% `|1 mԿ` ,K6, Z,a9FqD)&s6Gt$X\>7F9!ҧ]dwHkyAISUbH*{+ݙf[&@2vG3xI&c|}vEFw·kK77f&pxW]A'tnPR MH4 lԧcRNMpK2;Q[/0%Z.dpwFK)~o6 IVm.֒ϣĈg树kfAR\`>@7駦LxN3׬X49v0SyZ9 ١H@;>-\̜EQX5t>|DaH7+dO8|`pBiNQ$t)ĺ"B_$DyGu%797q`Q.fh&WBJo;oaf 5"/{o$ \1-%V$J+wX+cO-1B>:Hgsl*{mav٣wׄb /wlHHpi<ʎ;Lvtv+UG.2Kq$k7"_<Y=S`5rQ W*(}>ۮ#ջB2TwF䅲xsW+~˽!XȺڴHax<!et{Wqe-?+קo8ʺMلsjb[_ UN`w-ab^az{3ޤrDmy +i@zi!@O6 8Ks[Bv#C NKŁQGlm+Hl6tPxi;DT 89ZY3񣽫m>sM yֽB f9^0xJ%?utwC"pG|~,k(>a;afh kEqb=oAz×zi\y2Fnj,]> f1Y ̞Nt#RWxoJiN6N*Cזw)vK xtU02A0\<:%TktECvop%'7šD/Az91č6f=!Jc a;&jOi:R)O-ӟ`=Yjz^ f9_( 2?W<'}y= ۡ[$Ůfxm+ +V;>} QүBVgݣRmgZRv,OccS/dbE".[NG} ҩgpz]uracq)Ds- tJXP.%{6q`Vx<.rfo4?(0̋]y1E&Y \,lg ^ioZxt['H:Ժu9衸!pdVb[0jF҄/Kd TV1`lYv0vCh9P-Y9ƌRϧ_a8&*n`W=PP{xh<Π:Ycc>o|~kv2GpׇƐ@ֈkk:ّUzeףԳa}FCV+IͼX+RW>o ?zfن_ya/Bb+nf243? \`oRR.k Pzba/cK<W4sٛɩSdƔ LEm|~%Y. 7q.X=?i*4|b< t:L#R LX ̈́?\ py^d.QuQp:1Wg<=8쒧Ï^R ^?cK,E%-Yهck/%H[E-,wC/jO/`,.Vg/oČ,˴%x,z17e%ݻpfLJM '6ٔcKahD 6R~i~jJ}S'"&9 |.uf+06כYʵE8)ۈjfIs%/t]J{)vq3to $7/ۻGU: c󩇇}hŚ ,}5&W, M„Lĥ#8zP?qqo?>~dRӲ5ex>B 29I 3V+&wyhx ӈA9[u#\v=!<̺̈U TiUR;4ݑ%1t4e& 0@>Ldps%|]!LҸZ 2GL),LrdU~d]sf4jyB\pHـj[k~˗iX`29&wYvjVdQq8}cߌ,PCgOEaTiA5潀r&kL$^ŒQ_C&pKP2kxL b/HhL :^&,c͑?nnC.\Y0,9{aM~yP4 Dzi\3ٺ[?O.bh5qF .EV[ΌӂKIu;f8F,R ޒϏqHtPQXȂ"qʊj~=)S::BTPm{ӕMgx4ZC ~'Jɼ|8NW[RwX%W\9B 7Ҥu2Mm<^/UvLJo^l|WϬzKg/x8R3Eִ.&tҜט]~ڷG#2&_5QsfLtM8nƂ!6[>Rb*K*!6$;\3nRt7ÿU(-XDwB\Vcml jMw~~dFFy9# ᗛBrܠNTD"Ibٙ7o{jG)<+1Y,-B*`srxp(dtheC)څX(3jr̀*EdRlmY[Im]t~oSčO}؊S8Œf!jMJ'dˠY(|$zozO׎GËUJKRו:heZFiZ[$;BWZUV:@:gyzw"&l!RYTQIƺ} -$YB/'(zċZHBB~DiHfIv˶3Tf穳Y< 5NZvQ+0U;pdyTVf F3l:zC\yDb,E:"x`R SgpS#>qkLP_qGnPڟ~nNs~ްv `g#gyeeb}yEYj:;:;.,.{7%MQKV.:]Ģ~~JqVw(DY8v9F [%a8"Vw,:'oMЃݖ%{=XN>%I/^8t4Qiؘ #"ɟ_gV*0GZ5O&灩b0L~h#0E}/۷΂HhVAut4I!K_ 65$k헎E0Kj <Ԍkk{ǫ_,]7x=^÷m=ڭJ&Ly4~n"Mى]<\ԩΦnL+{BDji?#$d͋bLjI.`2VH9jg>Ͱ`BaQ0w<S@0 ɤvVRe2U^se~۬91u?(e1w! C .}@ObbDhO<cTw eY/oG 5`U|x*R8dM* ;VLOU=Mu3%,+H0bLTmWBi SLy13ռUZ۹̇W^Ku.Ó)c޳b*< &+'~ Afa $kYEKEwXZ¥ AF^T/[^` h;LE$ ^pPzԃZi띉7mO7ƘJa7 ߶׻!xz}hPa4r)qGG`ɲSNES6}WH dؔ Kcf.[v01hkrZެJڜ,iYܾW/0<&zב*s;/9۶ +PpsC/e66ŹFj7wfOJuMA װΏY=, 洪jOp#6ks!YϠ f^5 0 ،F`&E@n~p\aw?q{Vk>1M!]*BAQ/vbIrQl_^,IB5O9v5ǬYKFI4;+ojv(2D F1:b`ZE,XbssAp++Ac|Èǡe .Flg^)}3g#-Y}e>g?0W7(uyh+k{H`U漎/i`NJ"1KAcqbSyӳ1?oDH#Q׬0 U¤|ͽ),|iKE g~#D;?H@`gS/J}~"?K3 ߜ5gZ$uQ 'cĦǮo8)bܬ|.R쳯D J?mf׋k0MCU/i-b":ӬV:iفb\Ъ›++-H)|PEA>fD 1 V;m'فVUnHXx>7[.N 4<yqNPW/2 .cU6MuVcuc=FX"\GU*"dZ!C!-FntTָ?O'ijECbmnT#Pї@ٯ)+pW-9>iۢGI\V(X.[HJnrD/2[bܣ H{_\8;_gfx]hð 2A 5;u5g.M^'&~>W[1K v(5#]|F@-Bo|Q7}!DhN+\ۢ|KpC<Eӥ42d3ww>IղnH DU^`/ꍏ9Hz7krU\Y^aܢ)GiF+=pzRπfB6ʧG_Ι'`^ʦi(AAQy"k=aVQk23;{Ȅpst7.l.2Ʌ*ʹ?P}7q.ﻺ5]zs6g6]!EɊe+A9\(LX{s=1'RUn.9'?(vgܗJm<*sq."oV,L-9%u{ZD(oȵċ?Kl)g_kX|vճ@"8#s$%qUE!]]ADn ZT!`l>oAwB䓼:*ҏV](RDY ф *W1SfF?b# ߔ/\{jo#ʎ2Zk7/Kp4=i?Z(a _Ԝ%۲kw*B% !okmЕ8dFnH5 ml:O_ĕUT\T Yv }a5s[̒y;@ɼ:_k% ͕[+!-n(!=)>wOH:V~p\;TÓ˹ 3=x0mlKqZ`6<(a%h>_;xv}fk$eZ'R;_b2grajb .\|¹3) Gpvv^(.o>V>(`,^}MU5 H;~rkf4VBmσ7"HRvO+"(?` lMInx6ҮjZ xn[ڟhP6{bͶų*TêRɀ: 䅶, Ӭ+*͎=͑||-No̩SCbBk%_["L`6,}LSLC:@b'Es5 s~JҡRJWkd Y<)oU$&qp;dw+M2_zm&r<,*r GEIսb-nս^'\ 2ЋnOW-O|V DClt>`C |;y.3˂ĊDUA)z@-ag't yckZžcBm?DL ߾QW47,Un-$}=FX"@)s:nJPǙ:. u)m=9`-uUYwd٘,yC ^ZG`d9ͅe0_?lO(']$ӦUloX#,*uVM'ṟ`Y9#Ԑ'qn8gk@L4MckD$SYP(}He-q=`9E!F6vcRUn@Qu Id ҽƷ v `\ieP٤t@gMl]; Sp^ލRC׊R^M_rn#:©m:d8 TiEjFkZWyjhFc#%!f(z6tMuaΡ:;.~a~F$u~^tb'}o."7֝oHU;OzfC{8{㕐[)?VP-K e2kKN]LKpRqUCb0_|V_3|]H'ec^4u>r䊗JmZz%d0z] !0@(2[ m>._E>bBE V<,wD7Q^ ԙ 8`uh:Ԃ2 'F! (a"9ha=N% EMc%7eq{5Шt4?F ^*?Z:!3]_ f-''mR:LV.ZTq?Scޭ/t( ᶻЮK4kwaf xk8qRWMի%;$ryQr52gr\]|i#B82qEʄ0Gu(nǶ/P2< DDdҫrc@eSpKw`: cjocO@#*wYȝl:V2 #mأCO^&F?Y3%07LtS.#qƉyvK-G{6F&дse6c!)ﻄ@BbkOP$3PlII'cLz@*YcTQwJM%~Xf)So>~~ N8J:.qPdhW-ħ(^¡F<~Qԡa=q!P&e7ra7rXi\E^0d+͗ vt1d;O>jVeJx qCZux<|~#{Oz|}N{-1ʒ%{S{D7w?4wnLcZ؎i9 [EmBY3*^0S5jPJ`1pip(5,\K8ZM䆍&bqMͭ d&ݶе[%m{ECQӕEsMA%Eq䟂V {^vjHn}!ܚ)}&u5r(gulf4hu13D~ Bz0°F>т{IiP8oۧnJҨB|w$ucúž<9]E VzA 9 0{AVIق;[~s d5C)ݩ"w ,_/DɡvkFB0#1[g1RcOND,f'[FW]=T6ĕ@˗EȂX1[~W灘ZYɖTB^&=Yw(ע%vh0Bj2SJyM˼.Һp/-=(43.=ۇmM]V%=]sAafj1)U٩LEq-L Wo0tya^:),دNv z#Pdz "Y#Ԍ0qAzvڬ LG^NcAYC鏉w%g3 V*ED7/@dI2Y-J f%dixa r0i糍aK%Dyx.2e oA@>$\%ҘwdS`P-FA (eɤP#;}DD~dp 8l=X%kN/~n>ʪy\ht 8G-|0#)-"Cx21鰃,N"T쑡D kWAuPRqNW{zcߺ}x#_$&B1Se&_H\)j%SekXC? 2PXkq^݋!Yn[`p(Y\D_ >ڣ!Il'KV(`ۼ*<\fC+!u҂sM DISDxxY6p qb,-#ۆOۧ@חLHq[١D[}6Jn4GmvVWtčj gU)b4'Qҁ L)X9Pjfyݷ?^pבd'""ieO-vA[GR*mGc70*f]U,O Y 窮e5q7g+P1ΟQ+_-* T @FCW;s9ҧa|? >֣y@ip,$["{XcVUF!}|},??Ɣ\( efu+]R$\?3pٴ$fsx] ' DYg"K\~~-(e6T~b0^! fJoc63s ޽Ar(:+ 6)14&Z5Z0LʍFJkVӕWg}GC'i.C!)"H&Qa+ y桹8%qo( ?wMaw=*ƚx_,~k M)|1Bj6ϛf%:o}ȊWn*ԧ]0]ՠ4l qOs]U_[OLnm@5! $Xwa0H<,[PɫMr7Ź6%BWip_ahϖ8X8 2ݓv34oY[9ìbl 4RbYyq!Q* YɷQF3$ ? ym-HGpB>c|#IO:y\z ] "uJF?(_st{ph }mߒ8!Mæ hC${&Kc- `ӊ*&'OazKsCs7WvtX Mi@/z, ;k,|X.JmM ,FSo:XOPHafړ(RU 1κ?]j& #{UoοOZ!; +6[cE&ٕ?wQ.q\lɏ_ "BOʗv +˴L%0*r ]u~Q#[&H~RJ~ K(9B2_z1< X{y0M6S5.-P`Ш0DOY.Z-L~ySl^s tFfꔘxВӫ 9gwǺ`5+{ˁd9 2[vt$|.d`x 6'&Y]w#]9~+FiV_MLv.pefQj t|axbzD)fVΥu\u'AT8~Z|A;K1Xclw9\S|6|h]4e5~z{Ɋ7'H6yuC,Nv稃|j_S sdF#`M*;v}<]^>CKȖOO-lX݀QXKqdw )A'W%> < $vx. eu4vpg. @=q]d! M,H;'{Lc\{͗gd2,\T!>a𙘩 ѕ ʟoyɣWqAp#EMS#Q XWW@UәiKV ,Zxa ?ܶO7-=].܀D6Ȇ2k1k@DdgVI/fJ],TڐH%C)|hMfj_EQsb_gB-f t嘶 ?.t!Q%o> EjSkW du|xb5Y9pl[(gAD:7!Dvg;oD9d1]3sʯ҃lZ2eWalMOWD_>9ߒ~$,3!, (Rq}oOFT$>p7)(qJ4gA.?O[KD`T)羏2CuCMxB_547hY,}6SK瑌b'N3> ƍa"4-d6*49ghCi0 IDAT2{6"JW qNY աqWQW=H3CâA~G~",ՌoB35YS`Bϻڳ0Mos 'Z \;m_@{&F]}d*Uk7QaCqǨ[BMުR3qi)lΤY}VZIwW|ǧt 6 *Y ,TB_-NJ1R4г aZP]O_$v JstX71i(vORPQ֤Kd/0~nkk\SmpΨv(_?qGfɟ~=(T$֟L&IeN<5rTi*xvQ) מplUmDɉUs/= ӚiX"n#ifo릧2V(§{ :Gb_~O5fC&'0 Qry`jKJ )7h㘋}P8mMwL7fTHEK;j5M tmIAgtP)ԳtZ+]iE~( ŤK݇5 `M| ˯U[Ncs.D,D%tYQcKaޓ}cǂxTe%NUE/%Q("no7oe67;m& 2稕?XZaQ='9$U#\TזTn IMlb+4rZ ҙk2rH\ pU*ʞ\5*r<*~c2@\nxm) -D UNN~xMxe\H-yL aʎX892ur0̐⚞QduR"p13jS-)s<1Xg+5³pXQgIïMwp67܎DqvW~E8n{XuI2IW6FKy79\Al'kxLc}>W$F1e*L鵻/) ]V4rO *`Y^LT{a[:ec?٩<@㢗崳}qCQ&0g%]Yu3oHk< h)/?.η MΘ]W/shb\% 0)\tl Xe6Wa\G6K8P^°pp1W(6o(5Npc=kEL\ۏMs!*;U$ ~;1g61BpspP иSDNA%ʭVUBfe?&'z4+'CSl~7|xL6>Pw}[py/0LhC}P|A_* M}LܝFA!<shPg?f@&"V0>EBtx` 7r}/7 րpʼ?:JhHP4P>:߫s#MMӶ"0Cx`!YV VHofiU0ѵ^9Տ=QY/6odkgwXØ r0sд:xf ^n;$ISB2|gvۧo'*kɭODTUYfU(/XUHV٩+- AP^P%}L5HI\U'Vkk}PEoT+J'"(A/;V:RSIk4b7u"'J߅l.4Ic7{DK JfiqG^pPJʢ Gʀma2 !wͻX'vEDsgIg 9d͑FmnqIDW0×g߉a+_rِ#=Rj,eמڦmWlOATGno=U7w^]"J\Hq Q~#sucT7uJ ї'0a\;=zdR[WշPt,# wx5d@IoUtEݫʎhZIr ݍ2 1gv:n,ڃQֲ|wf?z=FybTᑎyO9Z&F [RM@\<Գ [?9a= K0_4} jPQa0z&@-5WW׶mLtkD~4:ђQѬle'al0CCc,DMTb&.YՓ- efoԟIDD>nWd?f% V 㒫~wRIC)sb͕)OWbIyKR:+aæRup_ |a Vv=[>Y&8U̅؈ϾMWu YV(kDhPO 4r˛3ZKf|OQσLaTW|j2T<¨.9YC ƑPN]+zfj<5aeO,*S|!lnl=>&Lg:bɒu.|lV>ێoDW&8=ʂaZh=YL{Ur r髢ѡ^a4ORMr(1Kt DS0z\XM$A Y><]qmug%W(#cilȧr7xV4i8TQFo1e#`cZ$aݵw/?hz2*b.OT+Fh,obwJw.ya.>h7=-2g!s۹iU@=0 O٢/'Aj{# 4-PfoLJ;J\͘D v 肥p|&E7%NSUN0P#zlxVp]tWtN{@,($cqn=y9|}.NT zW4.Iϝ|Ǥo=yyןxt?@%ϫwǝNb,'FOHY'˛OWCn"wd_SLݸwの&bm" GZ>DDQy.v L{ܮh{oDwQ54\F])y4izysfWهͥ3g+bT}M-sgfͲ<>*[8^i4|Lx^&C:"tn~";]$omN9HB /m痾"SOaJ}ndf|G瀹2j \ާw D$PZ?Ns~ds1}yv$n;na$m pjB9+Kxu:c+L쐍""*Tkn`9ƺTԨYWś^qSCm*HB%`J3a{fq gL6}xˌTz!ƀj~;"_ܷܠZB;5tŨ]˥Zu4ۇ9b[pB;Pf?w }'غa8<̅`0}^ @*bJdomJ@ )IM?18J[mFWrfK)m~jg{က*6+ "w._F{iPt,(> e!g8=3}..DT4tIQe'EL)wh A4ZX11R?Ť{[9ۀoajׂrlB5yy;>M R3`skMwP"oCg7 *)mhG'̊}l5DDlki+h D${(U3tw8L|߽X,.-(©"wosV1X JՒ2!(} 2ԣob`^lOoB@Eiƪl@uH+\I`oU~; q%oSDTԁ;nK WHM ͜, jB?KIҢe߰ޓ/%:5:p,#[e'C3yZV} q;yP EnVA'xN%iTd. XSAcD6ʝa" "$&ۣgٰ $(\MnFK !OGq,4o[p_Iϫz 8PYJ+!E*RMguPd!?O;̲U&eҎaRo%HXZMPLS~§/Ͽgo dO΃ǁOiqHǒNA/ZI'Aۃm pg!DjswKAY.)>641I5 T|8_e:xZ)ebJaN$|N/bJ]ΌyF$+$&,8G8}K)/RQ|OFvRg rfXdb;m.TϫKѲeQGd'3>Pν( r+7JEWa62y5Q4y1j4q_S5A 38OVL t4zxut5~|}Lgbpq] w*ٱiL?,LeT_NvVcv4> TMJz"ԣAJ&{hb h՝VA]t n)41lJ(aҽλ.^@-RfDi|UVԩ˥tU f9.#Պ, vFGg_b!hEqK\Æ YwRʀ$];؇̄ $,hʕ{)JU'8'\F E`4qkuV4n(l'6#VP-fL 2taDt3(F3u0t2C]pf` ,Cj'miD<>[i2poaP/{;*T8)T L 1Ӱ2̔f,YH ݧK:0gu%ȖkHF5jbmI`s|`Ԑ C*02_x8⠁}>NP63 ->Lr"`2LwVƧ ;w4JdE6l'_@W!JJq*(}^J81@5XvYEk\=wȤgyB <F;Ukon>08Mg&SR*8*N.uL=PEZ6~7c'=w_nG`"p<%;{zةl^|OczTrSNucSDvHb$48kE&D0LGÎfTXKT<q 0v>0!6mwZ@ҩ@Iw@[gzPGq8ܿ/ }-SK] 3]˾xD#Ozo2>oڀӚ=6=5V$y$B c(Du> q@y|1bfrO9<4ZAխ:7b|C'qfE =];Z{eС(ƜW~Hw``IhnһMÅm 0|jOT"̬$M1L+ @1Nj!G٘>5钀1kP<cXmКy}k% hlAwδ|U;<5B߫JK'j/)쩴2iǞ6W^&誅y YI W R=3Q!bH}Zvk߁p8X}0g.wvČ+T0lMTq [:L^a]IT%v87IRS;kp9'f:A<_xyBe= jU)…Ϻ`KXuY~ d<ـ-:wyDvZa# ̢ @P.A#eKVbкn vD5qV1􊓥&]il1HFOkH =L1=n@: 2uGR>,K =, Y agO*x+ 纩[[A×Q'p H]+=5AϞf`K iRV ~7+9}E-q,DX% ۨ0鱁ve'Ęՠ>+㏩@}vU@ox@$Ӏhjǂ'腦 ;- uNWYA0*  Ԭc'T-Hz~$MhC6sx&Jun ^'ְ<ҽҀN=KXF  /WkwmYWu4ėD "kKѬCJ8K;䉣4Z(V\t` 6גaK+SɋVZxkR-:wҸbnݲBYנڿ"T3W(} SWOۥB2^4uk:k"g;©d/̅@@8`v>)o47 JA_QLX(Z<_ieǎS.DDAt01d!Px`> W> *=`H,94ؓM鿇3"bF{䰾1Ϊ(ĿKgr6qi_z`"wV /"i4YH3Z9[Lu$Ч/2Q>GY̊7fy+$ nY8s4$4QmGܺO3ڔ Mʂ(0KaJf7 $*#9 0?=638k\a]dgh6IWR&$و#|1IJWO9pʞMYIMyv(Tj[T9Zt4P1ؑ~+I\"=-~'X=Q(qgh}*݋ Ugއb!?cM bq} hKcH!H˝(Čpz.UuX*o2ix[Va%TMMy\^ Qɠrh+̊yH=|#ޓJ4xۮBCY9giڳ ЁZRGO\a}JygJtVPrQ9z,h'3f]u 9a:$Gh $IyOe͐VIGM [U@;0i۞08 caX# vbsC@)lQZ4Xd 30z,cE GgAAg [>y%!QGD><. 0*vDkMt"0`NkODuUg<0OZSD9U-6(*H  =i Ibˬd{+5ޱ75,[^fG /֖Ox`v9;k`"g6ےOC[Ʌ KMyԡ`Zq<. گ\N;½tb~+Iё}Qdә, EIl#E`96d`(NVG9e‘.$ "T(hXiTW2n'Is`:GHVE:+ŗv╸DqՊut{^m^EH 'Ȋ ݖz ~Mw §xK $&Bv}cE?',)JL`Uۿ;4"Ibd-KzJּ<'(-41>-6׷Aq伆4zrF/(O)ޟC$4h T,(e@QN̽ќ Qܛ ` Ǣ(}ɋ%L _w^c _!ɋ>PUNL(#B+Y~pOn$=e7D/ VIAa_ od٩'pImA̷͡j/@ ko@~j<@}aW0l+&Oq74 C%tUV;wHb=qrR[ėljR*0B h -Zk`,΂s(E^],FHm2_P|lՇq#w~dgHfZ~fAUy ЃE4k1bʊ+{  _4Υk;0g1: H5Ʈgt{$#IrWzm{{Yk'Ο&rt=sOrk2ϳt+L5UG͙,Zgaޅ#VtrC1GADDVC(׿/}oYnͦ/=@ZSۢg)PaB++Bce75J N۳n[ѽvhF^ܺO?)?v?QOgY``PALm@ޖ ...]r hE5oed;D}eARL̉ƀGf=o/S1U:M+[-9j0]!u߸n̟Wj2 3b*OkA% ".@-iTt|b%̴?<6KF5%l̟+:'#mq(.=jHbh$ҧgmKeL MsA0{6VL(S&sd>vsgtʌk 8Ρz[v^B'0̌͡cެ;(ZDBAn"KTuZB[f$ӝA\£0-'8ʾ;ֆ`_JIb6~յ~Ӹf1dmm ih.G@~ΖpvLRL8H͋4bÕ)x3.$t6@9GQV?D~<gTMfuLVOTNzDTZǷ:gLXJa9+8љ VĻ9ߺʏEH{R lא_(!rTfpM܌G%v52Ufa0ڇhF_bcofVBcv Α<2kԚ,%[fF m]&_=Ak*$B1ZߺMOƏ:|UػHAk&ZFUe}g w_l҉-}3J3]᭢l<5ұB~rj ]fW2@u3}Hd|YŸIg0"+yqWA޾[ ΕjmFEmm<9 LZZ$t٪@CZFY{~֭)r f[r7 &<z+N誨F\57Qȝd"e;ٮR(j\BW1"px+\ AIIړ3:X˄m& 餗O~ʵl*O8|'=&0lҼǡuzjtze6mpLF^(^VsZZ7 xSYU`֑ ;/e$K 348@֪pA銪oG),°8Y`SM鈫U$E>VqzͧhM6M. <0X_ڱBlnhW, 1Z3sӓiHgs JtQ;첊ˠԭ7MY@cvW3fA`DF/(*&iQfO8+}yâQ2I#Xsi]O9,C aU)I}|!\koz]YzB.4 Op/N?K㉤fyT'$>8!k?D@ݦ4FݾWS,c~W=>=ZLYQ$?W"O_g.fgSwt3;aD$dxnsxه z*.Y0*ـ'nao5!5K+wϰlZ2 Zua\D< ò,PnOzZI|kN_"Jk܀Jyՠ5of_ [!fzΗPrm^atJQ20ٙ'$҃@/>z $G? z?q= !3P-$1]<ܤ ,Ffk1MOJ'Cd 1Q,,kctHpD.[1B dQVD-Ns+NiΑҼe (B+}T,T7\4{#2Pc*1AL' Nd:V_I":Jyg(ș&t QEL81={d J"KGy&Wᝤ G<1 o $3KLpջ~)N/>zdѡ%’:ψOd( V ,w*T9M˜|$5PS$Qǐb4U@fu /噠s[0i$2c(;cn;lr>M‚#cGfBtrvN@z zƴ=0j2 9mNL7 FP-.Dcl8t$Z:,$(47AHp᧙EZP2|D]]n@h lRqj9ؚ\%@}b9 U f#<3b"iǃzrKZn+p^u]&9iCrR{j߆c6Xē2ìi \*0ֿCObRTQg8,d`F_?NHGqT/F=UMFq/ -s -i8lL晇]m4 ,ˠ|{kk־Xك:YgEV;:]\$( <:LQJ!1ڦ+wUL?xpKs^_p#LKXg/F2jOHgB3a6u pC[ ÉItS s=fv֙|߈.R P z !GWK%cr!3 m`u 귮AMlF"8ʧ;⩈nX`GLC"^nE9]Ø OI`ߊM9׌3/ASI:yu W+ܵ?̢WDv ;(e6o ~GR+]:ghM6BϭLtS,]݊;/-<lGI4U<<M[U)3!e07L7>e|kQvQ`>i 8_g*}MwrNzUEKy%ψ^_`cYdI(ˀc°SN!JlB8Y,n$ȄKt'ɱ|pMzF!G!7qS,܆{-4bXED6ƏmlS{Y^00 혾?n֫Lw Ѿcpe+VۑRE]OU~@ ɷ7\v JK@wp7x1$(M;›njEJȫA7MvH% ǁBtql0R4d^:5Rr֐TdYt{8}I@O0X!bc4$\L?u(R2B Y(OC xL Y2g4(۾#GV:*y.!'׏8.j+t0Yfr!*3E**jԅ%s6( (NbqH5Sx`28*y(856lu}t!-bvB$!ezXڮjʐ#%FL9j̬c1=vIIJ(ob4O&ոE(-|HGM3nNE@! l 0d9)a*k:pfa̜kkMouϫΈGa#A""n>%*M=(Aâi^yY^LKutYkv-=dZM5 -1{hIZAS ѡ]0~FCMIrŖ U d֦ v<(a<=N@?18sPH>vU1W^QY{IlHOt-lf> bv$ښ1WʎC@GdCq`TOVxǜވ-ւjS PZv!4{F5i Wa)qa"⹏LjNYgT1]?vbF @L1)-.!4pu Oyƀ5w7{_jBnylY7l2h(f2Z0LtaK9Q,A  J4vG:&Z&ʏSH\ 0-rpQ<'@%ZWYE֪&O8 8pXE] IDATz(g"w|5Uw=3a  T1/)~&쬉`'ǼQv l&I4b@#'jq,QNE3''^Ov;w?& GKQW᪠R{>FSM6${;T%Kt m*]}p蔉keG+ǥZ 98Nާ:la}C,BYA&K!sASg] l*̏]` yY;^_?WSXH 0r@"1a! Qq}!xO&DԹ%_C$ _f;)m8@Lw`B;"Y.ĶX)W'z%s{i 1CL`V;|DD-`V8HvkbܡBH"k^hԥGkG+"#D4 gT͠jVByO/ތZ}Ҝ"a %3AVAIq V9!gCA5G,b:͘|:zd]^mxU,KkaSGVw϶Lra]sfņ Cg| K;K0i83捜%ӥ́Tf`-"_"^ƻs2c-h a: xZ0vD|00S\z2"P2 .݂Qо54GM,t'=J;֗GR. C&!%2'gLKWY3 ؉4y_q/R \1J\GtA9<\,&9SxvN I6ΠTb.+A :L)k3k]xţY@As;_K875IwKspx4k_Lmԙ4"߸滂/30ӈ~%O~蠬]_zAc0Ͻax&Gkc Jc(kݰ0.(kA+jAvJgsj7]=9E8u:݅c+F"_4Z(DSzuKE5pIB* -H+J:L&ޓ~ 29A#ʬ9xwSKG<_*$st+fGS4UG[<_eBQlzyryKԥCy& DŽ 吢Pc)k3Sp 9Tc? njAd C|@c?svI8 QȠr6W`Ѻ`ࡖ8Ds`)sm@!"Œ& 'SPVV<aJxoq΁p;CiԸmʋ`:Vr^eNX2P> O31qqZǺ~[prhsreЪGgC]jUeHuػEbmu|)OY*#-bcJ%>n DN5B}eKSJ+I 2潀j1j]w?B5}E"aQsX6PI9"&8K&rzܟ62!yMɧ=؛ws*%~I]TBgd@V]g_'xi遇_^"+.nS5[A z ml -LpLpTl}uQ6Ši.Ziz 3tj(l>3[ Ʈ?7$&L͒&%:_|MvɈLHc 9:UUb0bTk?ÊB 6u (lSzNQ2@?3F5R&j{X2 mvޜlZEI/NJd2΢E g3L yCS`RVJ)<XAY> )GB(D22;[q?R@r-`^Jo|Ċ ~+ /+YBSa6^Ly z,ث$^E0 $},-QPAe#O v-R(`q'tCvx*.\XU]@ xsH&m16+h5BFalp]I5-4 ő=XgwS9?N].Z"(3M1dʂ;MsGeVIae+W#m*ȵ5%}dJ8#|]+&|+Z0q읎 ;!f^քug 3zS sK1_.L3+nxÔU'nAId(zmíOIxA $=PD. IBpT9{1Ua?;9$ ;y3[h#߮A8A]/O{佻+ܜPSYDz/u~`v tK鑄lwZ$) #G6WgIVz YLzU8CoXk'{'GY:eQuZm EI,6lKЄV V .*cV.({կqnycX8' UM 3:N >&w rDcqa|d=dQE34{<ֹa+n%#@ng[PHE!$쌁B<ґBaSZb쎴Hދ~\!=`HMTyäb\ }C]r?1;'M]es$@ԍV)BI4ͥo>CoN=ڌ)OjfWH [le;U5ftc[ (t[z#^ejA9=' cÚ|z/no ѵ0`o@0.e٩s8o85[[;'pcl`oÝ ʾr#ee:@rTb)8ZNj ~盺RVu]!HDLɘR)jxPi:,p6_?v=?ݳ鱗o6Ɂonx[^hrwؘ4] )UbԱ*6л]&;F%0>2l]9+9խ &L"Ww p/ /f`9#Gv=[uysHű\M?k{6ð0ܭ$0}̵g14{Đ6  %3+y￸d{w+|H; <dJ{lD]M?BТRc"BW)עi=D{c"gpՕ~jdT H/>0u5 &.띝zD( C~s= LS,FrC 8 y 1qvrɥ :d=)C60El^-Gm]:0gޭU[c( [u* ]5U-戱d讞lhJslY*YnU Of3%Y'_4D܇V%m >ՆRxy>WBE.^|yAѱKf㖶<ݞH3f2TBbmu|TnD7ڸ=u4Ô@,JL2,B[kCI;Q@p-b!/:QWn/%_pIޠq&_" zh*2RL@9ؘ ]cR])T kI?aѾ }3ĠO)jٴ{Qλ"~#-*䜬;GR)2){n,$ci -$usrR@ZI.̃zƕtU-Ѐ):(|!Cggo%O0V?AOU~hHqfO-2' I wPE;LsO08ĨIB<#dr^XS6q}${=~A{V99QWdy)PJ™Yl3%^<>|eyq?%W-r~36jZR%<6W/Yd2>y}$R2R ŠSgBh}jX16?.U^[{c:z?F{Ff?6 !.^Ogu2pYn+ p4Cp=̺ʺ N[տԔl@L(O=%j#4 Suu$ʫ*~YΚ9"$To.⺦ ҄G 3s-mQ"Bԣ3@_8 l1j9( 0)QW ee6pwr*YɁG\a3UN>}Lע񜯭3veVQ?&E]hW?mPw=6^9ziOZ!^ z-Ig笠7c>ob7{'oAO!<죁/TG~mC;U۵RV*(wpZ?y-ayN)TR{/^z2Jf[aݲ|^V*w)B|kll1oP>L 2315'c"/q1\uFCpƱPX=FA1blb&D @ 6os,&e(hwEQ2)XCNQm,pq'@'ϱxyF[3 N\2oݭlޯI ZE^D3%׬Uy-)!譸hT|Fi1F'af!@bc129͙ c)}/:+Εb`؆ )o$ŤЙs9B \WCS yv3T?'N(4Ah5Pde@!{FCs$:>1jU;Ԟ)2Q+QYfX)n:zI\{;`:v!=t d8VR渢ε U/v+jT3Qv[e%qU(szZ|$1S iHeG=&c+3&3=l f@ *Čr,y`qňd[!(X#fUn5)Z9gc#+L}]w}Y$d%TG+Oޔ)LOYXv ѬH鳖OǢ|Y^lQLNlf6X'C7˼k&@jزݸi(7|s7A qWcR:A*X\x% IDATEl"Wd &0Vf̓eE(^0Y.FYNnweEyr1/ccq$ES)+|"R^A7he>R ݕ7+4UNntDW!*B*bR94!E #{Ķqti~RgrH:;O {uY6%J ]uAD>onL3(veęH$ %g5Pd #S`R$# 7{ϼ<  ?qRs8?IyN)Kikp5lL:x!:}TEϪ%j@{/åcI OȰR*<'&ݼ'E0fXw[ Q%-ZTd:Mv}H($e f N Z=uO!_G•&´FQǃ.(i {u]9$EH:X@2GHY-ad{1AWyP080>Gb)k:jNUHRc\ufQHvtU6MIJJÓ.3b0 "F M5E+!@ǁNrۙ]=A:&gSg3j]͎MK1}fNp~Tp}DTqmfd>ADoLC}Toh[~o5Y8Y\vL6sq߾lyM1ٴ6 `ֈ|nEeL=3Y3ßg+fGVyLEbU 2d?_+U@83Χ X5jcI=b^ȶ A.>}e?!iF/AΦ9K%FcpN+fO4KD+hqUY~4܊,L'$=yz:wF?dց9iȲ/TR&NۓV- d>E'zk0c+<~F*=+Uo?2S>&m$ E5ѨUMOV9mmlʽߍ:ze5ȼ"Ӊ哘c8|-aˬ؞1K)Je^@nޠ"ַ!;՞=Y=']X zē* LPT2Om>+&qF_ ,x/ Voo?vaj) `;v-,;;6ɥ<'g,!Q,éU1,S!)~4zѼf㍳j2EϻKqh=C7B+ K]XOC(I0㔓CG(v00P huz S",%dj&>D!ڏ 1e66UECئB>ȦC;: ; d]CSV4R:k+H͸NK/)b ,nrkE{)!1s鴚Ow{CYیX_u䀜 ͒Q t-/xVEQE~D+_9mo$iBXLéq4Y OeuƋcf-Ǔ= Umh d L=ZvɷE/I܅r.nYw)X+C="vCZe°@oپ޵w@;eHq2̒\8|ZviRd.|b$ οhopQ /|1B ̊PfhFg} E'17;ϾJ9-*H;J3,CNڄxE 'K{$hQ"hrV) k2ʿ"SC(V,aBd u;hpC-mƏe`c06VX,.?g2CLPbjPsϷ5v19GfPGE21kӂrG>zXˏ1FJ&( 7|Wn?:&b,tytff jF<' :~aÓRQWJ]ڎ gk30hQB:I?7[l̄#y=FKI$I) "!AkCLJ(i=}>+wzLR:t[W-` NO; 7 QVw:(H٬- 7Q:2us&7牆,ewZ 3m&qV>RԑHn㜱/W|gbb3fʃ(A$0^9ZXI^{}M cI G~ ԮJÑ7'*&QMIbSxExʍIt$^D1, q|=`yArV'&acsd֧K=aDpϿSVR9fQ)jH8pj]^bc2%:`RZ].6;h#jdVTO0S=/D7Dz:W,= C奟0%WF2*V._7J3خ@ 1.*VL\x:[մp*ue]c7UʇzMdV^19⌼ ފc6Ȟ"Ul쎜ObqZQU#oZKWz1'"ϵ`PFav)MYHOU(~!ʨq$ boD"n<; -ftxJdQ:;0ޅ@o\S +̸dT8xL&HX x?G#nE:=| /a#LEswi"`D"nK)Ibsȯ@Pe$_xǗF1ac&IfoQ$+c3g-Q&=" ⁷A u ޹~PVT%&ֹRF)8]:v&e;+/&~E"璋L ˥0)RTryl9Lח@5N9 _ _>`D|e(I5!:IֱP%;(26D2wݦ.@6" dIQǚdS}l#'i5uc cKZf\C g0R|+o!'0:|2"R!q(9?Č P:[W:d +&'gsASp](x6A~ni dWTgA eY+"A.4<} 08 խ3KPc1bX^:&5e?< CEnS}`ЧSiwɊo,kBeu/`'"[diCQRpEƝO+8^ADWEx4p[C"3(*YڐSي(q?phː&MF`;s'&FB~}&e䴵B2r uЄpjɔѳC'z7!i.h8x3Bn i'7[XX,0jn}P-mrjǪ}H#˦he꣇@~OAB[Nڍc w0|+&^9U!p$[dP3i/@8>N#SK/veLBќGh Z0tb: cFtXĖCdza Su Μga/(bkaԿ};x >yZU{4od?8:} ނZ՘yh 53DEOߵ xCrh Ns9UwheEؕUY?zK װ?t |)3%}cFܧ[Y'>813Fsa_ fc!6$Q?Jq9R0~\oW2Sd7IVG'/*!-1Cqs62isڇeBCJ}eXщuL@mPm[we0(s@zRu3U6i.p)\EVT,_c҅>劊7Z#QLLiiٌ**[jklj-nji ugvbdUkj\WHx\ۛ e#z),{[u+SQy^&(c'T˙aS\5PG~Q).`w!os `)Ztfkc1ϴY jLs'jou^oӲ0AE [έFW6CraӌCGř-e(g%1t^KOLm$%,:zcM0wGHKip*wSEWqO_LNVCxq$٘ W$WPX[\Kmh090Ǻ0(XF끮i9fe̦ր ""d"P.fOASX~jzL D!lĝm*!\mQR; U .ϹD  KS4EҔ2#Dz; OG `d]]]NAEkU̬Ei# vrI AJZ*@Nf)C `FH(xE~ 3u5s} O.ZL*2X+UtFz}%TxQL>%AHt:f(ҙRcveVkШ(#!7u74fh1vVՙhD_Dvb SuuE⋮)L͛ g=- Ρ^<ΪND&J?VZJnہW鯧f l LP{H!9i@ ݑ]a3襚(#0Ty<1'04Av\z~d.l䧏r F3P؛VFR{;ѝɃ-f+ GBSmiWQfȣP LEL"ix[LHT>B^+nݔa, 3["Yur 3MZgvm\Ч8RZ-08>(pHy_׏ w4I [TޗDٽѢasmR.$HhhìC%b҆ZֲP6=q!fZ86f Wbn5u7םO D&"l7g֊QQҋ0jUwXL[6RH^Z&PHMцFQ-#hV  -&QFH˰Lzbe|W\Z^d@{Zo.H>ZM斕!1*lqƏu}׌eР$`u\x9/4)P×Jp-)J>]Jf쬑fJʀD TLbG42*Q*4&oR[z "289W M$b )YŀQe=MtUPUQ&XŴ|.| @;m\AWU#-πa %/>G>)L54u})ƦvHb#MxH*)xsLj@+x;cL΂A w+2|FRk6̂аzJQt57L9ӆ^-d-3]0pԼ.JΌ-Π0d1ikAۺ"`i,m#.(J e1X uMWa؄d_n|rD%39>Og^S$$S+[:f?Duh}M\{G/c< uA˗^3,؀s8`k`t94S [mZ?M,te_HV$ލ Ҽ AT.:r],"䡝c)uA[%W6ٛ! Ir>-Fbo;+Hqrxej?K ;P^D{YLX#3 %.tMfTvDqhh0,2Y"Be*g#SD˓GNz9ǒ&7(:Rc}rca])va5 E?͑;sh$ɱӝ.wG#A_׹u@![(6>& ցҪavv̴!}VJ*I#Yf9&t 6-7LcOp=aq]rF_lj3 eaF 2TrτjA I񦧉"߯G~ xe\)]GۙNk"D  B" Ln{h3  IDAT5قW#H; %9`grN$]ZxلզXtCכAHP(,.I~_/0NOaE䃂m[װab7uwvR WX.|O(3( 9O^ T*%ݢ&s .QL"_IU8t2x‰sRc&$e,!*zi~vªԔo-GX)hUR<ֱUHN2t=b}FK&s!-'w[.hb=aiuDR )V/61.WѱJ8CO {?cy^Aɷ˛OMJPp0I{m(HdlD4.kc4s J,JN3]_[S^\V./L$P#^!g+r#E@FP?nTF#ZDзh 6HjKAȢwN2 Dc8Y0L:@P82NeDQ2(۔ L}R`Qp!oB]fTz!]_@n7 Hl"2 %tip]k֨0֕$׫ʇѳ_#TEAzZjR>Z‰月2/W2XOSqB1J ktz^*Q}઎JP6}~+-ZNVKՉWc{ൌE3)̭۫Pmɫ_j]F*oeGESG׃z,U\⏥lD2(4U/sX5s'_R_7[xn`;2OV*˸+.{01YY+P~*M[dQ|BͼT-6Z$RwG.|W_4~; ᪐+7"{u\o(JA"+ D6՛-c)q;kVIEmtT% P^ڀ j/M buO"gdCB2KHrk gE}gF!\[[)BGE#:.1lgOUN+_~-DU7-e KJF`nU8x:wZf %i={-n2[H<2-ei,t~ -SQR1tAXi܊9c#jK K%n}6%EŸ_q_8S&*SykYڡޓ;^Jg$Z쯬Et4QC0n\]AEXL"=!4"ü{">5&51'b̟-)ƒ0C7Rbzj䠾WM&x);dTO/MȔOΨ1A_鏶Q-J8I7Q=Wj9̀`t32X\?zIzgc hFA~8߹OO])ZqwDlVUgvY~\E~ӍrW&˻b;b|غA3Ybmpq\ۏζ7&HOW)B>3%;j. Hf嚯;1ˆ!ώ\^9e;4%\ '2\߂hj.#6R)'5PvTt18oE0Q1-G&wj [ #֩Kt' OL @xN8sǃâ {t ,f gS NNڭ~\%O3p.wJ롺H'3<>rף9UDQjE) 2RP]{pU;׏z,\Gi_YDN(pQhg|?zgsCsySR;)&>#x/θ hOAE+O SL7~] w;_9GBEcO=QS gJ:q mQLCx\dQ롕`\soh;&Ca7${T@XOV] 'S$ʽ=)FzɛS[箲? :oi3ڢߩB22{UO,pYL_yANI~gOjó;wh0(bˮ~]*mVs.hv)mzMT%Hojِ~P\ sgRh000ڢvz+g~ыå_%{SE1E00hXLERct17NzFo rz8.| AHqRG ;zmĎ=#O' 5^J|mJL>Ugǽ2X5o"0`CyMo? Mde=OAQƸU}9MseQQBK؆CBo84c:D'k2[& a94],j5}跞H> r]ZˆJDs=:SR2s8j2[1g8ʄcdHCKۛrcw>cޭL#q*HtOuM ٖe\8+bKoHe+zκ։L!؞`Tmaia7ƎhceQF`<9PKm Û$^- %%SvA'hqØ2E6mzE:~Iza.`'SY-y>"2aA cH;G@9l}tt5̡eER#@[(knf[rS4S'2 k gآ:9hc~g=wGР1 &S)jqӡ25ԇd2 & ָu%) 61QjYs=@9% $QeZL-׳i達kzkTt{s6ȦDT*T?mIo x^!UdlY'zg; G@T XjsHō ^k!8k Lc[=9_ 1iao#Z旵Rݕ;x14%cʳWT$EWUo n8c 9r/\(XGarҊ[XLJ `[T9*'7Py*Flq: unj]aR&gp%wܑ`Op`ΈZ@oUd꓾N}ĥ5 4'1> CXun&w(. itf I"h@{AW֕ 7 #gŒaM @ɰ^Ņm#̽:yU[ uS+֟PpO}>p85tX! u(~,QY:XlRVYYr!5^hDIDf*_ƙڄ3x^?JC.8<|jq5{vLbӀF%D?>fqԈՂ=MŮ`ŴegUW6da;И|(*%2髰/{'sX'¨ο-xX7Zx0-ui/UW(3y Ƃ8Y0/կzg-@ xˡ5^Y?.^XЄ;r^+r%zKzFa#Rl{y7:SHJ\u* c̟×\?6|_Cyο R|j/יNcIg,r[ L <~]qGn% ʛ$+3$ywu\rr>\[,*FyDx1S7" -j*,U׿___:~򙇯6T곇K^ӡ | 7`Injg}$%zeべ_xff"bu&6h=nG&,X|پTJL?g #P2__auJU/%gKOڸjQASܖ;TyӬg߇fr^ :/0ѝ[ARYݚo5L"<<8׺R7ɣK֣yI6-L-8űΛ(\H{Vgv~Ǧ$矨JE2kW6^;zxb#?cd0lsʕ868u|q,t栱6Vgwtv?e5(.{I#2VQ?߹gר7 ^;΢s+lxN70Xw`F9c^yi?̂-.5¿ j_ޱȖq%i}Ed;R5|MoηA3ϡrUp{zX! C PVj}֐n"BR]CiR뢍i,!G> EW}`>Un/$A>Dn۟9`2VPJqqY%zbI_%yN*_l3cДa[ 5\;L8JIX#lD<)^dg}0qx=| %|+}lB`I]^ȉ+ @鐃ԟ[b66(f;ۂpSSA; }'w~Q@F(O76Cy +яÿ}6C 3`~-\9B6c%AR7PեUFE *A@m, Jo'*~aovE$!T{˫82riEJ-iX$77Z]mME} IXP,` )gÖl2鸝|mMTHV-:ηxLP<_MaB@":1G_,5% #Z" #yD ,mDT^g Y H5Ǚv ~hp%(A-=+?C[ e2JZŒu/*ڍI$BϺ,[1|}]"v@! -h34.Ae8<Ƨ4.۲ P> ?.;IGfk 3)p=ZJ-{G/eic=` >ۥ3(jؐauh a.X]$K07}foQv>++o&m(QuQmD{R:IRK3#vcߵ"9{ uhO.qJ;PqoS,h }%:?ҏېgâG67QQJC[c!YU'9%_`n 5^PT5L y1۵Li IDAT%}K4Ar,QNfm)i蕕7~s.mIKG ^  Js`E{nG`E&வpswa@ YiJI,:[XVfKkeT.+J؈i@SP]c\L3rT<ԩ |9oS\{ԓ֮A($ZɆM>eTiJzmߤu@:9 HGaA>_ʌaPK9͘y3j=Z7SlÖ<˯cZks#Cߗ{ ?y=!vwn) Ka R,Mm?W#Sp] lxhq=L|f|/͞ʹ<)ZSG=nWRtcNKuS9G l9$tb 3zGw4fղS0I냦;h0w;B4aQ[?2U@]P 례 Cv;I0UTlaqTg<ʹmͫv*a^`WV5%z%5$227eJk΂ ߖ lbdJ]g>)7DWz|Cjt{{aLp#҈MFЬ44UÀybeAOX ?߽wT'\R@hۡ;A\(yK;Ѿ9m,vŬ34Mq.*Fߓߤ_Ct/biHf(ZR}"ZHYTwoi=J[Cp/;{FfTG%U7-Y8+m@B^35INMYNi\au̻ыz8ÃTph83~(bn|FXH+؎.gV5Oƥ @r~)rO2)?;mQ+Uw'|uW+$G}뒕"+ Jw)~`]O) ߖort%'.j}HBqDziϑyз_iI^ B`Z: p?S3tx_xU5gObg+a(}Ɠ>p K#MvȩOF0[L5>$JN8YrJgre{9S󈧿a))5Z5^@ͫ ~vF8Z"Od|Yu7,9xjVkzp ^Z㣙|8i K:?-'LctsʗsH!]#[]R1XFylc]1MRrR r[&(` a2؟reqVHtew5j8‚v[(˷F!Ĺ#wx>36X.g&nԗ|ّ g, ><=kpx_>,HH_DsGWeZ%ttZ+&t|h&Q!dV#^PblS m׾Ζޙ?#vDBf'qf!j^=F08ʮγ>%sJ<Һ$fzbl>m{Y? 4ȟ k0_OZ",Uv2U᛾ .{{o\x)4o._#Bu$/.0OK<~lײu7¢9?>",N4r"&j'Am9بt0ϸFWg1G;jz)tõ_/7΋X$&|Eݒ_?Sl`Ec/w \*-l%4xmy-clTMXSW%;b>҆ޱOuzz*Gq/̀3V9/F-I/JP|fN=)~VH!~dc2Pi+O}c $rL۞p|YW&|Bl Xe{X r_p[pP;0̨wNf&kH=ƙ K׿t(0 wqׂ>qnۄuJjJ!k\>zQAM}NROӬWgGkWZaVѷde,13q- y22AK NƔZdL̷X>%i(f"ݘ8j:'pp-S4z7>u}-+cӏ*V=&] oܖgA~. -f7)8BWD5YsBwYv;0}{*-$1S'@0nsmLB܈`+iz,jPtK)p w̨*}%a]y2^3ZLeDW)Z #W=U)u5vU29|,GpkHek>Z:I m g -֪lcTpKWKs@þ[)_~ +jtZQ<ʈqv̥~.酳SMr(U_(s˃fElUԚ)߻=+}6.`O 3/(ô x88߅i~ʊDVE|ޗ;2%% ݋E~n{Ǧ!)je98R)1ϻMa ^jk.1bҰ]^T$- ,cXK[rg2Pa_;!0Z Q N -aVʨȿVfSd`,qCN>k8d YUBkO"j5򾺖ЪkZU-z16saY&uݨaj^[dyE"1o`b2x"G&?iȭ 2q4W߉3J^~95# oL( K12PA׀mrLΚJn(_SA9Ibm^ tőWSPPR'e (>w !xW`EVЙL]ekxsǦ/",/[>R[ܖʹL_%sq|ܗྨ8`#S]pbYCQ\y"pcW_aBt!0%(owKSxOKq+}/Սa%lvYf<0`f\T͔YȦǕm1s}ȑg_Ofhbdb'i y>4-,I?QLIX Pjǿ~/o EtWvԖRt~"XrYStۣM{%%W\)ZE[d1]^ ;ںG6%]j {Hys%Nc_++ޏRrq{-Theښw =X?,fs81Mmʬ^XcD˘+s)$nGQ14'/@]kE!2`m44Vs)fo)}yFa}p~gP^  DITlTc yXj{ W}qћE͎-y&cH/bmDu?.UpCZ5ӂX6D0I8u KQQsbefG;*8S^gXR4'i>}R5gCy ;Wh7N^ !fyl`Fpղd 7~EVm8!5Kɯ+Ro=˶ :OH[oxrエ)狖7z~I :+}f5[;ް<㢲~`%}*dž`9ՠR57Fe\!P{=$!=0㭣u9-CPz- C'6Ƞ?=rOA5= Y\ 4o&u^tKCoc9|"C:`l1Kzf t5n=rȯL6GNJ[]H%/QlJr$QS2t3Rչ&)[=1 gw+ %9kePA{aa`N[JP}UK$XaBTŭ 7UUzCZ<p9&>{gT y昮"m2S%01eH)F>א|܅d5]'N# [-{4?F8 ~bLTÃ+ƒz'XO`iƨ 7fUCr:;d@^(GN{U E)h+*e mUxrU VLvCXuΕTϽ|;Ixil ؎9=S[+Bgm&ꮨ)ZvF͸nػ]K6G|•wz0 Vh> \Nv'Vi /DUѤ/^3_7!Euѐ`d]BG԰q/ŦVpj+IS)f OH/k %`C-$:o,*x5vDdcD L R7Ϡ;s?i"V':}3 ^sy/XB/6]Vʐ33 ̄+}0J ײEJq?;od* ƋZ]d9"dtBo}5֌%4_]痛٫cwY}anjib8p&ƅpr]Wՙf aYvF:ײEф ̛: >`A03dʔ͢|N#KF+5,V渤;1hfum~_>]QQR^"%8Q`&S6PgXGnêO OϪX$2AS'$eB}mgK0=hOvTx3f!]2!sUhB\3U%uxt_CS<q:Xzj֕[w3<NcؑCm4AItZ rɗl/ǂ HN _ģsNӵ84-whŰZO.j\˟tL@9()jHd7Z57dXLjS0VeCVmTޏ■ :qKu ӏr2aR'|X6l:&G bi&*ZaJAn~H`ĵ Y1dO܃wkFT]2 ŵˑR IDATbXGFf3ȩk*c:g U+s&": Θ/~_?ס1Lcx&ùF ./ۜ.1<bMFoo*=k_ 6gP"=]/q_>q_6b+s X>6O3l4v B.Һ?6)nZ yB ?3"$l9 pWt iOcEÀ:k<`Ȱm0Bӱ4AY6dpoigauہ؝֪pU&{ zf?0nr(-) ̚&.=FOoN^g|&%`D΂sM9eQ@363&3iX p~c=hr.^5)ɗ>gY?|4&pˬ){[ggC?<.t|%s0T'1 چ] UZ`D$8mߝFL_PRYl9jO! }[\H,PfD #)9T*ZQ9cgϣRBj8#5ur^=i^߾ߗo~7D@n ztpEK:c!0E& e8jT6>bGdصʮ 4ќALRI8*_;(l&2 Aig#`(+u'`w::Gq7-)88C1C|0~Wa\~pd~as ? gBL˕4h3,PV~.G I>zd(FvM<Գ`h|~nsFY=_4y%XSGKM=~YKt1[Ztt?V`JkS81Z:ͥ0 uQgq^/W$ j }ΉzN0 ,CBH˖%W{$A:^܁݊t/)1NY`h8dB{ŎA~!ʂI6`3 ꓯM'ET*A`*B&P=LJq]j*fs5q]8^`Io?uLIxeOy)Q;p?5pHF;h ܏r0i0kdƈ嬳W=Ven]yPxO}8^ GK3 { ֬R,Ȧ.8TΖOb.:E!Xuj|=MR{ 3//Yb(aeJӟ'P_֒FWF^[_yny Ց[3:3;B:f z]1r_YmvJeknx?%l p.ţcEr7h!Qz x1搰g#F}Âa/s@+bjɈę6 sh8]͈*> ^kOn)4FA/#)?Nh@AXao%!нVt7˔{/( $!;O4n UNo٦bG!rw DAthvȌG'12Y5{/cYv՗^),mhnҺkU8{TX@ԂJ\A3! U^CIǘ,v@Wr*Tl z(uLH/jLW{[b\oASu㡎ӔHܪ)4snOr.2UYYc[E~`߫V_f)jVC@NPhfą'x*KnÁ}Nhn\(}-+\&riC5FE@W~CQjBL՗~XaU`Qs:]/: {E%N,>s$l P=S@h~u d-Zsn!b  c92rJu.U4ѽ#AK""!'՝İ/ΈCYW7_oE|調*r ::QLrJ0R oxE0;c!}FI)1ӎ_͌ x{Mix26/cKI?n|c/spR6<a2U 3*N`''ZAn"\?'Fl*K 7R<;BYcrep(0 mv_o~F ra ¸` i T^ZDۙG5p 6>nIEōCFG6|QGvo\_P)!pT:U.08hYaf#Χړ͖= d\l`ۈVZPI[e9TE ^ݪ ;@b}Y5o^SYNKǸd#hI)/#T c\̀{?SbuŇ_w\.p^E0ߓ} B R{VfPKCA{6J̟ۂ?>nn˲ճdZ ]>yvd)xKMMqr&<Cj#u4a.-Xt 9fQ2"D_YNgKw,հT}ÀujIzH9u20I2dPdW˥٦X4W޽jf/[ -09De9ؘ~Up$-E~,Pqah$6Gܒ+GRᔩ)y‡#ȯ-މ' ĥ+Ŭ-V1? < amaS*?uq_G-m|.lD<=pQPKe:HGzDq5 hP@2ң}bRt&s;դhb@`I10+߰OЇͅ,9yEz+0 ցZ"VˣRLSj)4y pNYxfV}R+[DVC6jFmz, bP{qYPZZSɎ%Y*w.^9`RdAV&fkEUHÊkegyW F/W6> fX\OЌs'wN"tu[lu@=;eu DlA%nN'dMChq.ŵ?}~[yYJ_l_aɀb`TZ ٍPkH15T-3Z\_ ܍SsiIʱVȘ'&_!: KKy6X8R&1 C}xv0^yD1 t_c5i k8*yA1_Q< gC!7p᠚p%m/S N x;0m9N]<3"]Lr`Al)]4a`W' R>z訶Z[ 6rQ̤i.Ѩmo w戇q.nx[!2b &0u@7/c 4X(<ޟ#FVZG4~L<_|PdUpCvU>i7cMjQcA"`Dv˥%2̿ 3C]!!묉Y@P NnLuJutz*Tsz Nx2Un8C>;oyV r2c=-bѓ']0\bEQe.MRmpH89agOq@ aà2EFQ(HN#w:;$`hh{#BS"2AE 3x{exY䏏C̊;ѓJwr`s{,UGAHpv6&g^z85* -ꗀY&Hi2p0uQ'a;l-(Ίk2Hi&EJ&=3%w K) MWNm\YO"s,U?\fv#;)&: pTe* fL OH( 3_z/ dKa3]",%0 (B3|X>JM rdZLT}gbu22T@l0rHpJ0"r ɭINDΊZQ; O6WN:F 9vZUVcf(xI<]uTMu/ scgKfrTɨmK]D=3izbMZrnY0(J2i2D"sf,0Z!Eg0,/`sY)/'wY|ޗ??-1 a:(z2̡;bMȎ0$=bUϚݠjA~a]N|O=Kd3sCLĨ?*?\|Ci&WoS*Nq" NxW3{y̤U=~]{WHERǝmSdzVN`P {۹fRkFPeLҿ,3 ]"di+0I[52:v||tWGdȪSiYoG Ie˛M"S-|, s QqVBy_S^#\ȥ^(+քskkA$(~Cqyʊn2l!! 9C Vyi0D.dr͖eWW;$rrej 1}PPǍUXyq ܐM{]1o?5=iYs deY'UX(ig y”MjՄSyhؙQ|_eoª@q?*ܛC۝zNpl$.Y3kD!^\|x_\iI4$}EɹC[dGؖ4dD0sj Db gYHe٣jw:P`P=Xp!3eA[%aQ'WeAlkk\RP{VHW`3T1GKm܃vHk{: 58#d1=#YPu 4cXbvb6?s_SF!IK&ވ6E]=~gXEE\,뷢RgCѱʅ476汨!oZczS&ϵC%(ksT) IDATa8 CYSF `*bj*HɌݗ}ܗ(h*t9ˠQ6mL2<ΪܓvSrE ʤ'Qi;zV ú~:хj'ȹ<T8RMiM["ޖEh Zm-E6)Q|^ʹSFkgx.Gī>&㕁6[cˁvXM1*A5 (RsŸMuxqV<{4Eت(eq2%_CWI]'+@s ]I=տL*H Tl:%g}+>bY83k:m ̉$W`m3p^>0*KS"I$<I5 ه*S(RΨ~!kk!b;nm "%B 8q_ߖC*cPnK]ػ?cYqI얂4ʾy~ %ӳ5,b"Trj ZйƼKjR_mS<·(-"( gTř=Z7$޴]O9IG`}Rz:C^+w#tGW!֧u}4w4.`iqM/\[tj@i1 p]z0+_p J b'ps h&#*(EYJPK`_:c|ɷsdobgЬ|$yX?`VZ' $ge H[ 3{? aȦД1d5"MZ0P\rzmZDcChDM_-fSB*3F YP PY>@v W%0B`y5?(iB1/aе(tHza=./ͧBvXD8\v;(ԑ‡kUi|t? y*h(u)2J>b:RtΊ)y>j_QP+vUp0ВRnd 2v)! {r FAnĉ?G4 d̗-mOd3Ry 8{vx\ ?C~r>, y>^]P:F:OʳJT/8[61fK{…[Ny /,jκqA uI>L(MQ!?A!BTJ ?fw12m*}Yr]+= \cz %圓S-AB,Z`|j(9QmjMeJSs_&-m F ,BI 3h[dÊ,F0bnR9S6N}6(VWid4CuQYo C.@OMz1tְFShO$UI#m!;!ȁxvVݧU*JU(9mƪc9-~᧪+;MBc4+:-ߖ叭G:6E{\EUM.t X>\62NcQdq LDqBkb1̉T빤^g# ]6tD3߾ $ %ZWFp*h|0ڞ/*(o(o}pu RtDy10\C7sh1Q1?x%ur:ϙ4y=`nqF3e/uE*Y| ń4m,`l?=x8>kMI:.Q۱*5yt}w٦uyPr 4v}~_/0UQ>,\eTs U0fVZ4&7 M6 ٻ4 UoG Nf4+]kw-O͎Ln\(z~NL؉#)V I1I<_gf}Q[tgrݴ݇(r`GH^~B̢N! zr^Hnga\"[SMڼTM "&PmԣB>2? amHd]gS{' iQX`ۢ#Y % )3&㿤o^j}s<燛HǯvԵiݗ}>#%^m('YJڝ Gk7\rxψ֫f?~YY)IF̙ON/LV #%C@,]Q)KG5eƒsTaۭ$6<5ޑҡ.L7@mF.E\xK\ɸ-rgR)_"٧ !9a*= &[oՔ*=tPDԦȇk C4#/R~IPZ0!w/ev1AN4}JNoR}wֺ-u~tdz;)i$i }?|CP]\K-'(_XM (xm8#ⵣL kye$焚bOyR2-OQXN>lKA<}G|ߞ 9’FWC%)o}Chs 2X<"8褘95x1WtyxWrN:)'Su0h0=)RkH)3$˷,z`.i>_j~;gg|atBe>^/3yB+}`W\iR2fW`9yy@\U9])2Rb~h-}2PT*KsZzOOr-HUWlWDcd9ɮÊ^;4-(ޮ/QW&20驤YINv"m )?!dJx$09 7!} *|Kj޵׷|GdkZƬ!JeyjA%#u:ou *CߐH6T/X")wE 'EqvG9%g>^4qdZjAD"APdM=gMHvV^@3t9ML#u!`Sd7y)=KbFG@MtJ7 # oBϸprK'xL̕LPiI*GbRl~C1v%3U܅ _@-y2G)Dlf4aB";ZFf76S\@YӍ<^}cKO&ǏPrJc~O18J6eӸVk2'NTɄ,1ƎZ92'F_n2iF^]VR*q!2.4C̎ >v@O ~ؘ?*xX*i#s-eE~#f QYKNx5rcAr/eg-aU5sdاI)#Ӫ~(WޘOibHq Dg<|!L;V?Ȳ'6 L61ś0st8Ń%1Q|3ߎ r eo eF7"6:h9Q@F24NO|XQMb6..E)*19`޲&ƦA" :*S{ag|{   "/,iU+gQv@)a?J T*HBއLS*ƂdD|Ih=G&,;kvY r֜5)hw7`i LnRېny\ &ЅCJw;{VSѴ'=Wk}[BZdmۚ?Q%w V[L`M_44p|J2A#= /g(QNC)wV2 ئ״{85A2ѡriNdմD6:=e9;ٿPB.oRY/#XQIh )S\R ?`I6H fw|?.X Xju6|UbRTklf C5܍k<5%S v$T#^&P9 r#ƬoWBĕx-eSzg t~wivĔ?eLr.j`Yި(>??"ՒzKvͤV!֢-"XECOᬧRp6 zQ/z Z?kc*5w#jWjkF:fO g%P`52c{ G`62򇹣EPLX= /"-oD_cѥ5i qMU%7jbGW4d68q{SMj6@FWM&S iL-:#8a|*uS'dpZ<4`C bjHP8 FҠ:#}+*:$d7}oc4GgT!5Vek;htX)f=2 U/i]|Su̩ƾ5x-mwJ>bd$Z1:<#rI8;=r['i|m\\"ued(,"!+ӂC__F[RLdFԟ <6̬%2SXtv7LͭtPX}Zd6w&?8c6〨>R"M&U{LxǴ_WȶqnsgELO>X8x=P:́}Z퀆Lf`5)MbT3,PߢD/J*ǹe0Tܬ*r un^`̌a /I ۳tas:CVIfq (T}u `Y@6{fNeDňK,jl <jumSC(;69rgd+Tv_+|N^_TUo;kn](Y)3=W`E>P Ƴ6ƾ$K=Pv)\Eπ!KϮ7 r_W+'X}QG͑i_q8t7TFᷳ9ysIaϻ^Kμasw?k v _Ӕ!]ʩA$VΒjhɝYtLSEc zPp4Bee$5m'A+k8z{M]XNHХib $)=x-vbvqMa54c"yct *P&C3veCvZOhTwci>B&p:BU5( 8__<ܞ-Q*ws2РMk.99nG$BrgH4-sS%6%5~֨Y> B:g3:2d&~U"V'8tv)CdflNtP]I+jD8A ]yT6Dpe?R2,ugBgd*"ב㥔7nOAp*RoGHgyo"a_";L򠲚e~?>oUdFKBہ{ɜ/W1^Ρ5)31>wFU9Ԯ-kkuۄ-2UEJe/^sɆIP¼B{2僻PE9jHǓ]h풦SH"HJ2P"]@~9HTȿu^|UEpLXl|0L[i E\ʢơͤ(FvS8A_H"mSNʶpֲ~ӟT2a0 ¯aJ5\XL[sBXۆ 됦ˌ,"LgbJ/)DՒ9M_yZ"I(-BF }x ?mykKc*DR^Fg IDAT?˧1ǧ&x ,NQ)֞#(.ZQZI"Y&Sx vSϪ@njB \C54 uf"wD\`. yL/k{U; >!2aU坆ڼWYKB8s5 =wcŝ8/gʈUVGv?:uk/{ 5*k)٘L<atUXRF2ARmJ&oNlcTonK~_vǷr0S !Iw==Ì~rmBzo(@ٳ7GswKƯs <ۧ|]vN+Y_ bض1Vqk1hakLJ3+qr;ȜmPPi)8^^0<~;bbk`iCkڵ@b+ a\)&1aKgV# ӳ5$de.5Rg;29/Uח8*d!x3h%M)p}Y<Ʋf=C< *N3f“!bƲ=^pUwaƇ̨"o{/GvtL*xEC2D,c۫gdg)hP*d~|9BmY,ޞM@qm.gkfQb|:4G%[Y'\Z)yf(C탗#sJ@=+k@/m yAa,\BC38:,))j^bXPY3j@Lgdy`O;z!0_*y-$ _2ᗧteC&Lؖ棕)\PKmX|*C/'}Q 6Q, h2QSͶZ8 Et:燮J5G+ ]dF!Hq Jmm RdW]7 @3/0KpTHFf[PluXt8q8]W|ӽH DOR O?0( ?8 i{1qu]w(5Cc1G ,ߓ10֛^_";nt5'MW0p][j {P! 3v ++ݝV}OG\@>EL =V6E,7~W"|[Q7öapI W2̓~ZG&WnP+kC2etyc/2JsrChh+/mbjQ(Yt9umc˩&oR ץ_`~=jz=O?a1؋-l1x+=} $Ů˷΀~dK7s ;f}ǂ(9j*%W"$q0!N*Q8KgW)vK ytU022Hч ڡ+j -MAh2H 643!TC+POq( be3= )Ibs ?VzL['qXݵLC[ D]^"0ֵu܎+)|x}b&&Jq6"wlnɫsJ.7Ͻ[NXJR)?yo?,,%|Bʾ7T!MwUEVPL$S.VTZErP-Yy}dz>MYu2TE O9{UT&d{xh*T3־XNm;oPLX|z"_~V p˲Ϗ^֜R0)'{7&=mDa-<;#y:3AkУe"JbМMdqf#=_(381%Jss_)d%7 Pƒ… ׯn/Eyo>X6\ƒ;h3ŎEpxdr`ðgYqCMMΓxF:*L#Osܓٍ:r}`Űf5+S*5Y9;"p厮Lw^yvè>i4 XԔ0f Eb&ĕ6q|1JJ/Rz rqDƑ9%}$th[bN}%ݒ4t{iD蒀෡XgU‹3A,oM?$hRY'&5S6]I0^PA\96ۥYK _i]"앉cFe1ӞG }lAO`әB[CvGߦH}]M0 ?R@%QW\MU',c{A$!hQ+6ZwKH_Rnk;Ü~h;5݋5>$gb9/?cM̋Fq x@h֍@&űOhwMqFMןu~ /vEjkP2O<5Ybx)ޭ5=c;\mp&mT>[]ǘALl6燇Q/^G3Ied ̌AV%e-6<]mi㡈w$sA7gN+ a:ժa10Y*$ndsf $E*YY'k4l1cgM%C\׎ oޱȲ:E+%e 8aIfbԇA5|գ-+dɾõ*E+ c>Fs/UcY6"K8Gk{-HPR|``щ)+i6Tt35ʅ}lқƾf 3apY57PYM0}L2кsZG&1e թPTQ7qF;YSdE+fIEfI% : ^B6WbYi|:\Ÿ N&L{+Sٺ+ sMnE1@RkS~x5>ۼYz[dMiV>h1þ983`Q7<u$@^1نrb뜃]ohׇVzwgËqJ5War'Q?JHheZækZ[$h4Y 6zYwϢ=lR@Uł$cݞ I6{ŋ9CѨ<.p'utB2YÐ.tc6=R]1k{ű>t\=z3G)\CM~7T\л)o(8МB~mxqHK?P-Oi'>e_~'( .hc_B,A0JS5N o_7 uh}y;z~łg,秙d7 =L)WWq/K;E/̿? p|g1FL// ;HT>h%7O"KjUu1 wʨBh+ n Ls0|?aK(.E9[A3T=4'yGNŔ*W* t*Y8Z\|=iwl>}M']'u 2r (~/OAhk^?QYTDz> nAq;Vgqp'RS͓٬gX;<c-ﱳb Ch|p؃te`lLgn}fsUdoɄv09*]}, 5֪ &iV2fFfFx4@~+"nWRT[^'Ҋ5xNn12МM6_q~HDWW[ ͈,&DǗ\۲HY@S\oyk7O@)9*{IIip@^A@=jObFS A[luХ_0gDHq__/L^q>yu>5 3 hSb7双"Y'UC9Oilrrۥ1v24>N&NN{MP+Oy'#!ºA9|8 2k-ӏB0R{h3̈;7eU!AčoWS [((~;w +6O,8]+^Q]T `=*MH7k>7U5bdFLy&!7=񨂈oo|9`H!Sl%*f;n]l :="B+l!T:I[N~$dWwê#Lu<ة>%d-qi$jA8y},}]t$;+ˎL70f@Z<]fU ]42\ΫW  Kdgݎ7{\Ojԓ$d4*BBCA;:bVXN*aR~{Wx,PiKE {~Q0J[$oorTe0:9kΜ{AM*ᮆbzQX;]gDŁrN]}YANؖP7f8l~2$s6$囥8ELeI͝!no`~!f4B/ FÏ\Te<)@J* b/Dm[\N!P fiƄ*ڦW[d XVū % YX/,z\k rDhJ;O𽱌k$X%kUmhnQro. ky߅c^!phUdh$3Q8 "!yk̲֦y(R I@:H~z(qZtiۢg ,Ͷ(X7f![p{J/.ȭr2UI>y Pj+5 dqv~YT}@uaUT┢ɤNJեՑ;^rCCqF%}fQ=y얿abzPߋz^=^A7ccAjWU>[1Oeue72rbhh$;Ft( EӥbͯT`SVZQDtK%+th?gցP *;#JDKjZDP\VfZ0ߊ˓E3 IDAT UV9֩< C#O,bccӏ ]v܋ǎ {aLю1jgPoL3li X0n~W!7CWPum7V+&%g0 =vx<Ƅ dᯆ iB.m  A z1߲p, u%HΦ@!++G5Z)CK&9퐿y yr)뼎\KODղpf{GR}*/!MOTfT=Pvf7`W%㏛'U- aڶ>?Ŷ:ϗEƌ?kHI]=a:jݔWI,(7 /ϸ:V;пN"?ռqدM2f*r\6ٔY/[^u˜ώ5`!C31KnGLHna-"BQpA; FWW;e:}nHصQ?ÀC6loo'!gJ^Csi"XX+ҮT>mhPQ0Ϊ&me+A 9\ N홖j~Z$*iξ 0[4WOwqP;+7YZM~1:dzL]5i"BP@' k? .I}0Y҇ͿlΘLkz=9h\BBHVBkU6Ȓfg//5|30D/ĄRG\-D'<@ڐ5:*m;P`'aj 8|=1([΢na6!U*fsplGV dU~ZBp$q]v,1V6Znܵ?e7T'WA@QjDFU6%> Jԭg3Oyˏnz?8*~]'F 6f΃F츲Xlabs/JۑFgu~*5z[˄B솢/Jsgb :XCYE,Da˦ԇdC}ہ/ 1S< Eq.I*\UӀ4SDM:ott0u4ۘH+ml:O+\_݉K/MĂ K o(Y3/̣<^9Pyc ᰔGVhC\Nq2U{C 9jU)@ґ M>p x $If('I[ 4ttkJ~qBvɾVNJY* Tgsrbd?[0roWTnF_8H?%lPMctf|+( |y7i2RL'쇁m&r,*rWLT'UcE|FI^{Gb{r_c'ɍ[#G/w!%R hXm 3%4SL@v.]NbGB\o4JJ?Os$tA(i-)N'DK9*``5E1Ơ sD&qӸFyXX+LǛ~(BdaSTmxB.~nPg8l@SpH\e}G-\ '՞WJpF {ط"n, ^8/&d=^d(u?ڴ H5}Ǫ)g%i̬'~mRudzgzOE d uY k7ݽ;f B>YHC+y&󉸊op7vZjW=. ZMP/ ;rU PYɳYTVUB?E~L̑j?ct^-R|D+t3nb(@S742zhZtM'YZQGUbUlHkh Eώ>Gs(,(ޅ_fe݂JGk7 :9VL< ہo"Qr=a"5~ڢƛY~y} SdAiȓ6h:35s8'M+1)T{T*Jh RuAt S F"# 3 " f IW{oAD[6P\ Z`jsch+2O;L/H;5+h9wD0`zWd ~Wx[ 4Vl(C|S$D-Qv1}[?VS]PD~hL&,-t5?F WڍC 7g~=lKҌ1䎔‚G d /e@Rx|=QŠkOA^s PX]9 A[RA?VPh>cDn5D:Ty\A0!( N]YMt#3߄NЖg3W=Br1նzJss z%b0z!!^`lPT&ؚȷ'Psxv<QrVi20ك Em M[5!;UN}I82oRczȅ7pOZvVUʐ۰:GU67dUI`B^A\.LtA%(QFK/ RN) b@J 7-vjuJZ4|JteɈ0k#:,F.-?敤3{kڄx(mcW܂Vi_~7D,[ $|@PW+ ZVW}TN~->ށY-C~cBuA;|irA+J-"0 JabTV̆8YMc26̨oVz. 2A4EK^j>tU3r3K `UH"af).g?/$7bCL1 Ĕt\BOv.D?KT6Q$eMQ!u>PZrad")1*q\ M&~ XȺ&Ō+DW.x[WHD}9$Uhh%""^K R#Ogi CWhN8nQ"̽>XKP#LjRZ Xo?ϊRjKPw̓l"kX\B (ԔP32Hiwdd4to|[&7u@4˘4Vl'I)u!ގ/G@Xv.03bsFf3s̠^qS2R9>$^©|Y<~Qd&vx883'7 fiCGSMZ5X gm\' m رwj.3g_3ELkjnV 3f22-Dt(L=*}ե\'4tOA.q F >';G>X✮T~:O(a=9mHfFNn {+\ k暁D9 !: s4Nyu#e9O ?Ǫ $I=v{@=P#RDfeG'USg6tY;~p(v#cSmIӿ.m8xW{ΠlOqJPz @;Bj*# SK8g>叓MJ_ HoL"SU_0VFM; esZS܂LOGcj r(jt W4l {:ظl24`㾣ģhEoP8sn4ǁ³&{8KĂKS"F+iTZKÐ7 T#}f^)bY),دEyX`( ={}fWWog#C t4)1뼃iXgRYPc"uzKnyh30J]^odI2#Ozpn|ynpIL4 /:/lbvje+8o_D2B Jkeu JQi3=jc4K:kbmwq㷇@p֗}LHR'v=-n 񰒐h|?ŜEҸ1d'OD܁faOFh︽/`B,o*HYkR?1jjb9pyxmԦx$,5Ғ%Ʋ#hC_ 2qz@[Uau7O m7 #яqivyeqn-E2uƞuV$c7|!4b{QoD nb߿x;-{rchtdw~&:v4@Hb6dC0CyhssZ1;) A8@MLn;v6 & bŋMXxJ7K'V{G✘z{wS78$uY2eUsXP H1k<9 Wu3c4J犀OJmy#qLLe(wc@ջzm׼A˒e=s`]N/3ۋ b~({YqoC%EZE:ZxRPlX4%(B=,ʚM\:"(c6Fjq3yFI|oBX֌ -1<¯)vsdLA|BBd ­ nW &Z׽Wݎ/_fYeDR0}.o?݈mlY2R69" Oǽ!g4z)֗d| n&ٿІ>o>RCr =>x =H$(kL!FW7WqR$]@}_]qXqi" PdRR06A̗G_n a^)q/Ǻg|U ݗ3oqI ~ ret̉dJqFp:+4ע"ctEg'+68_Xd!I,OPحE&#[TV0GV9Oooצ)Gx`}6/-/6Oo2I+>nGܪ;uC'],d-ɞtl5aNVYJ\0tIPN+mo5.l7\.+۹ck6wR1K!?OZW_WΥu\ 'AT8OtDsEpWMDmژ.s>\5kO,bO1x76Zo/5rFL1ӯaҞH"'3^ (B9,Y#-GB_"^6:opBj=wA[٤0^];<7Z kRzE B4$wXA;imr4|K}9+ KmYj\7̎R~~3ecˬG>L"ӑLNJr^ uy<{nRw2{?| s[la-1aeaSd޷706{Ro6U*wc|Z|whcY~+g=-^N%b 0#boptAAC;]o2ǚjJ^ u\4+q+U]lkU8\XP@p7^o["þikW dubhO7ܫȼ=|bunvC#b?""Z_k~%hiﺬ=5s֒ zhS+RWŽc0fDᆢ*Ljc;9|z13z;-H IDATaǑuh@?ִC,ڀaXp^"ںO !;Ise!Iiɹj3tn')(=˩(>Kbku(wfQno"jtHo~K?VP`¸?68w]o}#d`ҌhA'?!Ktأ"eTۙ5ubJuם/z^VpX;/ap(xGIwom9@1$s=TW{zkȰ%.TT54@( bMPjJH4Ea\@ODlʿmNq,¼sUxml]H;[Y_QhoN9,M- $ ޫa-Xy`겼3=5ٶ p9Bw ʃ2;%RVOa֭`VE*LZh~ydV Eh)e=iaJrzݽb[K=ŵ`rk {_QORbx`UgD.UȝkA핤JV#5WʪhH {6 "El\eRU,w*pu6I/⍝J;k \RTG5&:k oBDm*YV&wƗi%!']{63\λI[U`Nw`|T)${B*|k9U^ܛ}Na jQa#70rH\MȒ`QԨHATxrq8obnzy3G]"Vliۢe67Vᷚ8)?o"U(wry?XUѤ)iBr=SE8|DՑ@u֤= hGW,1YyV:%Mٝy#/ @>&g0-W%`fVbAj=2"TA%x{I'rʈsf,ǻ#ۇ@/򅻈0jĝlrD&w>jU%dfD`SSЖt fo F'C}[`q/0FsEy:y|f:խ M'ˣ1;( W44M:F]w+_róͤ̈pU>  j(/M4}va⯌Q&c6]]Dcď+ Kk9}~REV~~/'Ȗaeh`0L JN3t[;KE|k#Z~5Vww€1FǦYvϨքڎ7de:B=gXxo*Uul 98 t]ٛ% Gs7V46y06o83F6 `rGS ):@Y3 + xWdvwF-lIq:{T 珫{'l` c&M%OF')%UeQ #/!¶Y6M.V(®ȀH?G;7n=Y&mk&d8!$\t)]RT*78@%E)􀼰 iܔG#;ut2 JOG ԘSnH'pq.Hh5 ɧU))nr߂KB( x# cݟEIۑPptJ/HB! XMewZMQJĭuY9<&.X<8D<6[oѸOP~QzMyi: ձQOJ;]c$ہ7{ MˎgV1ݍ2J*H?cu I"k˽id$~LԒBBFF~eb7)p5L{wYbAe u%U[廤DAZ͊[,kKK n%llJ{ds5"?rfRɻJ {$ɘ1.% (b ?']fU[$y;1Lz2^6Qvh8gPLm9_uĉ2}mVK\'/yz1F\ÎHl8-fm_i盻Qg%qP.!${4*s(/øqX+ y™ ,kJLa2?`xYRZKV|36+ F{ngf,W6]YP0%XFvS3)2J,\2o>$ܢrA•ꠊfO58eS7T~?' (EHV^ePE{4'A(Z wF D9b_d1*Jk]fuZ04"hV6=?ca7``<6l ÛpE_v0aZ]^i=ez=U]N.}L nKJXF_OB/{&AjgzK[{)lh= Tt tL d}z~]:ɟ[,,P`Iz5%_~bgܺjMd_;,,]У{`s0Nºk"ʈ{cA!?7-OO`CPEQٷ5Fߪ2|t r(霥""*Tkn:ǥ5<r]qV#3ѫᝂKWNX%3Y9ΈiʳT0,ʶ jðLy,T>'PܯDd;̀!:h7w{nYƋgT9~}oً.!owHPJn {b1a|xk@smԔ6q~,ev A*TlG!1 C^bI!"Lӌ=n+ "H:h\NT$uL$^,#p?>U=vKMpf>Y&3RBDC`TB r,BXHՕW;`q-a<"VnGwl<ߪtlLNȻ>&OH92LD1N>/]z.{Sf篋m2t8 _ۛ**;޸;}<yS3Y>?s*U% %tR#`I %~)K'iPIF}W:WZl4r\scU022^ kܙn Hܭ;;ih㦄DL5?iTŝ(Nu3RBmdxՑî$Cu:~#?nJcZ>?=f{Rc Os&*ζwE{PͮwЯ?򚒇ǜ1b]ica&[,åx=ی!Fy9Uq;ӂ1YB{Xd:ZDOR k!NI1''n&}7~ [}٫bQw+8S ۪۬'+s<iVa?Qg`H]30[o63<e7d$𭤌5:,TRoQ둡İ6;{C\( R92\Lw4|ԘlvL)`MAyf9(o/O+`89f_CgɉmaAHP>UԣtY '\d"r;1+2=c rvs"~+Íųx@,w©0pV1X^RK1hqchD"ԣob`/~:3F<5&l@! V\YC&qeNuPY\: TӨǑhdaPat,%IhnQ9`1tR&`Gk2c^<~Ȉn(S#0im$Iym<ˢ\d+j7ݾպPD!U!{АU8찪+q5^ r*V"cMQ @L)/R%쒂FNFv&̮u=.gޱ_U&MEORZ Rj9 B% yb/tE=s/o-Z;M()HF[LOr[Յv09=r+LV2iڿS':g15@(1y*A$&.֭fK N!MQWL;l jP`jRA5Uw4u|Rhb\ٔ@Q„~}^RmF+nURVWnr QV+rdFl+P5B-"l}I ҏ :m[ISet5 A! ؚWE'aj4q_K5A >XU Z1-0U1)?~ ϸ9{!%t3򇅩^+O N,2 ;P Wl vvf0t*jbexi`2Էl@L/.L^n7Wc^e3ca5tXN;. ^ aug虤Knia{ }4 h +Tk%QO Jo3$xCmSM^#޵6g1.hY vO5XeJÞoAc4KW-ZV|&1GNA@eȲ{zq=yN"? ]i ]̮(Zfa9dva8\TXJkO4҉*x|37VhBwzXQɧ*HvLS"`45Yceh[q2S}6)Yn㳼.ƛ FAA-%cB}Q݄>[YsmCaFWmLONvFZgvz7>:QNάȀaix%6rdWlF]/ $`zd$3wM9Fo\qY/) UΕ5_Cv]8}r<8%wtօ萋_3hUkoZ-tpɔbi/VঋIذ05LCMq@Gh%^ [BkQӲ~5d3gW>ULPnjžQGC-qQc= IDAT3K X7mM>>YWs04n|݈0]Cr"_.&'.5B\-q` lt5|wB0e(з?wJbsK*Ǡ+Ҕb Y)y|/@ca|hXH8 =J,U#ѻ=&bĴɅqz5UB[XmW-S{ipnOu v^o+L=6Y@-̀ndӚ'Cۇ"Ý] ե + )lX80IJ6J Y_^ÆmY>Nqy@+oDߕ,_A9 ^Y u7@_ƹ#PH 'K w'h"]il3HM'VV{\]0o4zB!+E D7,hj_ESgk,W[W+5Eb?zD*iE^7r"lS'y7߯ js _ Sq8+0VP4 \%"?o.~^&5m3Lj׊P,4׼3t[1:%z0p-@ ,ZܠUv1|P/GR?? PKZi2]4.CƎCKb4G 򫬠vN?/qTi]X5g. K"A"!)>Yp湪nC~.VPQ[=+8!h$+jx:P)@`-p*CZ0kQڴ 瀑,?I8І;X1Ȅm?QAaIuY;ʆvפx!>^abxo%ow]7uk˕#tpH0S+9cUn;XlС0=$hU}}'*6w`Ю 7wFU³nZ0 N$~ uy\6d?>jƛCuB6ႃ|dItV`q4jSi S]ha[VyV#-J#)2~_rRBX]rb@t/ᅂT˘ ȫJo!"JvH1D}M]gm':_69ug"!a4щW4Wx r>Д3=C} c_t6a**I(MEIG%*.zTHI.UOHRa!|W%ĴC"&9\gl&w38Z 'biV_~䊪q3^}9ȸ zeωD63.p߁Ϩ^bpy:S8P*i~74gXCrs%ݦqiwRUl(ou363ݬBIͱ%H@{v ꡷3G(GGirF5CARjO"&NDKH7e]@46Na`8 @?Eoҍad\5ev6䫒)-2ҡ`UwA:T;e$öJ24Pi(JJw^ t5"i;Ê`2!=6a 2{Ej7\zfƫeɛ[ ȧTDPM*&>R5 2{"Nh_Bv@:!f;ՓJ *I#>@Q՝Ks Жv{WەZvm.I#ꠒrPKT -LiR)<3xb;;@t"9$7ҟClb3D=lЗyźG#uLoP BN8x~i3ֺV'/ʏR 5kU( ? YAo*ɢHⅣ~TT|楢cil(-u+ lA]6iId ^(wEDjJ5 myP~bzFI$-u髠]] sv"VzՊuY=xeXِpJ +Vkޞv̗ &IBKVe-!6+vW7Q!$ iQ6HZXn!'C[?yՙ"2w5ŕgY ^jm)7 PIvL"]$G-J^MAilA' on} ~HVzc5RUl`/d َ 2 ̘ MO>R.U p Θ_HsZ |zRҭDVMͺ{b+NHzE"{yQXM9:5 <-d&{6 &7FUǺ6D$K{'晠%nZla}$& ˗8:зώ LO Wn{H1 g2RBjnUqb%bE61έ 9ɓO 54_wE{)BAa)z&(n.arſt F I3$2sl ;ǎlzƢOoPd Qҏ|8iBN0 ň2 HE ! 50GV' *ѽ:zbUo?_M^; Ǫŧ2|ϳX~+U\: ;JOMֳ #N`bSKvǡ#IP70U9]ت _XCRSt[,ʗrZ)*0]G6 iԲ}o$iUgq܃G"FgZ?૴w !"?e_8g~d])a xW $[z@p9[)nrϋ('+rxcy#'uh}l$493N^絡)1{r4ј**NꭖQ޿JLې'R~ޞ7UЩap=h,c\^BwRDK6:w :?IFeڒrc`j'>ibFF&r/:*nL8/( [v܈#'@޾wQmH;t 3sQV?(G\x<­3(2* jG-P%k4Uj[޺6;0H1E91!_(7y(M7țQ3UW-3sriMI0n.+p5@sX^-^OnsN&KؒRC;0J263ݠ:))Cfoh ll;e묦OYSW ÝUٸE^#-8悢4`p=rIKr ooA.\XgEnU4*Ӌ=dHkoy 왤SJ՟K15JsDT{ ~Fi7q-::Tw%w&I(DZUHd֘-&v+&gE.G>aKރnU:QBUńOdBfO۳f3sT-+_6h,R=BA֗Z #|>αwm0^g06K{=a(VM?!IDys utFMOUl]ϑ+> \Ig0EV UpF=^23,Bܕ5ܵۿ(W+ ^yt>+뉹GɋTMm>mWw}Ak:PS1Z:IPo6~ܫ\T@*?pzcE,5q9x{ SɩZ]>7O}wlG,wg¬OxMh| WAXh/7qp7<1v3:*lI,el;͝Je|%:Dڦ1Rw溣Rq|ڈfvy pLg^@1X<,]: g,vꝟJj8&oFuI"cj4F|d oqw 比";u>u/w(VN Kc72Ys7u=Vsa]!%Ew8juj_Duw)>&/h*bb~bU1GING:99fo͏5cJ? V7928|ǒ1Z݆̹Ɏ;ۘI1As⹪Fo@궷L9iU +fsw8p.7(?Inn0m^UǸ{S ߎDכKX$ N4{&97>w\实LeBQ)G)wウS4sq"7~e>5 >:KZ,.?C7Iu3DPߟ3*c-}ܗ*yi-w 1Y-$)]l׉}93f/70KBQKt o #}f}M=Yq!nE$j-}WS~ 0KpUi~!]x䯏X{(ieJ$7+->7A&>WX Un7A1+ l"2xtCWe9@M!r$ehOT)=d\PBϸۅe rKӁ/K{az2,E:cɪi9VDA3ݦ+7 31ߛ< KżJ5eEFL?|K9u71ج"?{"3@-wy[|GJDŽ!r12~,.yTu915's+N)db:9u22h%?auY5Tw: P bm9,7oヸ`)0(iaJ~12a ߗFfsbwg|8/9=&Vۛ]BQ$`F .V3J_ϓ߄? ?~o@cDm߄paS7R-]b~*ړ5}xP 7]-fr ?'ى1O?h!{§$p5"TichLm1ᙠx-VT[$1L;ɱW6^&)2.0GW)C;2c+5KG qQiKf`#Eyg#l5owm4~IA_!iܖI gLYcRN҆ŵa=ᭁde) WP at>^4 XjY 2-?"5ic fτ%`mzVc!QNT:}@{^)_Άx+8ɖlKO@-'zeSj)Hcf1|3jFoX*AJw֬}9HƳ7u|Y# [<{ḍJfh/qD關^U@".YI I.#}7xU-}#U?D~f'`]NT4jx Z 7Ow1uxu銓Ew 飂V:Vr!+9~CLɑ4&$yH>d ּ1X ᏻq` )afXgl4;N-'Bd_دjVLhN=̊*q߇c(B|b+ʍ6u(J9 m6`}gqu:).^{ezh}SC%05|Cnաi,&> Ȥn9ءNaER h GgNV~ly hK,3N5V(WJW`@j:5R46?:vB5"E#ib!M=)k˧^$$EgݶR8s1tR ! b1v8ii kHgC֌ +n.E@!H8%Z0{V1ɡi:ڞWTlj1s%E_^-WL|Sgvshe- &AO+ /u(E@5Ce^VG=$DyB''t-3ĭe}k. M0؅<3gqm4GTR,r>dLB`u khdXQU=zk-&12z un8RMLFrwQY41F; aRGޤ_#Ul#=lp]s{5])ʠ7QC|0(\p$!:ֻ0pjjL CUx{)P?Q%{4\(ISSf-GDcURp2::<}5*0h'fRä́σ:6b0fB׃}%a}]Y C%'}x'}4zZN]"B4&ǼY9g*M Dd4t髹 IDATǭTAӗF(E}U֬saCtR@s?8h'囜hRwmQ~E]OծB)TC,fy.`>jez[B(k{jUL̀.lv2́;q洚!oϫohwv}ΆZڈhѥψ[G߉q#bxBUʩ:l]'ڠ{|msИb&(vُ|iH)ED+]o'##2)FBZ47"T _ @yq.U%W^ȶѲ|`AGX޶ C܀ٳlBMU=oDzJAT\xFuQcWFdPbN6DK'M(no{v_OpJI+=sn5Pv i?{AΝ"*aw7Jaӏ1v`jDqkI¬[犐J*gbͤw=3B ƝJqdo֪Ry)XkNi)NV:Xo:hnQdUijD_|t]9ΤSWh5ç|MֱzV:9_]72|_%Tf7 %7Q0)D6T0ZI(U&Qnv߅3ę!M>HXE~Y u1#~3)3\YQ‹I6Ox>neqƮFtCdL{sh9Ng{<|F̭ zj")?@*w*ns'O[y2+cp>֯y@OZXZ% [/ľe]<,WGѲȬWAR`FԷOTx7{O'F%m֙E.mw$6fN5%s+ijG)?73i1[ Cz)Ʉ'&5ǜ (2ݰ@uo#PHqdv˕0{;.YP?2Z=Co0ua82c)4J{:Q Aob}y&`2dDIBE0d~.g1 o8]Q drQȒsp6DL"!Kb!iXKTSşY'NnT$ʗ3RoB& E]zk ͸"T 0BFpEՄ:ENt;~3M7)7g%a9BT [vj3pWXdwSlYEpcA2n 0a[RFuЄVuAS ~nYߊc\. :jNBߔ6p(/'06)CvB (cjlJA`A,?;j,(vR(pȎ9z&taڍJh+{}GRm7ӗ Q=5F!CX>Ǜ=n~PX+K;ŠH`nK%,վ\TSRY97Hǿ.F dxKhdV<:aT"Whe`zq'Xу S A Fj6l|Tq;j y&KϢlˉ{$v*"ϳ B@ dXUI&ip 4;\w.K&J)W- geUf_q)j1t#;(C]p,0#5s5+݉Y,@F˙ĸCC ܪژg$ e VϭNnm^ENID/OHde(=jQEI%V<#%ptaR8E۸ qG{Cq/ģm{EGۑ~j0[3wGb#긷uA72 i'EvK$)!V-.y桳;~5Վc{b{lǽu^O9Mh{cMe6^s>8ԌdZPG[ h':h8ֵE*ntd|>a{V/w>7U^n'V /&U8v z0c_V9M9XGZZuܴt  ӛ{ A9ϤEYE I mԔȊE{&#Ȃ$Ψ <þ,ħ1NXvh|8m&VؑRd>夫f8]}FϘ%v.J&3BQ弸Is uUhn*GMbx\@ Үӥf\KѨlT* d(o<[s%XN/^ҭH88 *887S䓪8{*ȽOю> GOs"N.MNI˦~vLN c>wyyRW{{ቃǏ_R:Ѽ,Mu(&sidmk̆,#zR޵) 9{t^q^2USǘegH\IwZV14uqi"+<ԘnoGi[ ^<+1śf Cuvw`ݚ|K*xUoA1 o($A@yeB>(u39) JWa o 3M_w&E2z.Z73Q;<:(;3~FЦA iLjˎw+PB]eTqVJUy(oRU:n"V0൪ҢWx4fU2ڠ^]"J09ZPʻ(DSxӃρF2Y tG(7r9ѧgTĨҠG CT\kK*Ǿ$!I" 9Bial~\ɄIh5U%tS=ݑ,ݕjb9_]Lye5T&^* 9UK>8 8c*)B8 &ώe\ZX2IɪC}1 18JlYqr jF,ev]ydq\Æ%_@^ELƲ>l 8̉ ۳-rSuw-ĥ*F:W}-n5(͒|'V:8St<45kٕjFGM$K$걱Ov Fx&Ӥgu-лkbrOjxJ U>7wJAjS4a8Hr0׷t3*sUk9"4.JA -˔XX%(AxIwNܹݱChLPifX{K^gS>l߹尋gwh"dB̓Y1SgDYN7{&e^+Pxa0e~J[iR(UlhPx4eŠgvw#1s8gN`-8ฒ϶Mr{QOUҠ4 Bu<Ž\ڊVƇ|ډ* j=D7X`\r)%"SuL_ͲaفY55ٙ!x:#Q>#hPsz/8u{G"䣹 =FuO֔ϊQa6K{ ƹe`%*1Y_ed_h뛺[g @#Q2.kXW ;#|u `exEp+J"ܟs?uݖ/QNʹXF؅ե];*BLm P5#GV,ᄐXu\L']b}h(7'ppi1*#œ[yg42l+Kښ t&#Rs(̝@I}7&md)xcfa{Z;^_im܄F}E qu0{ l1WOeUiMž#j gRSoS ሮ0^}5YX*Z`m|֏"M'\6iɽbfX{lGqh~4u" :e0sSJGK05Zm/]YgYq{<Cfx0NGͩE (!*|&@Ʈ>1OW_Z)SpR?DA,CZfR/h%CjV!o/4zvU)>EO]o~|AQu(}NƜC=]qx!if٣wXy3ּ,?/ʇ/s{S a-i"Jd53^ 9FRZ 5gsL>r-=#V=XƜaw@) R3}׃),Uv{- *TFhlq}lb7}rkΘë#VRfp*_,Q\/cPù¢6U|Y'%gO&k{7:Pԕ&"c7ѕ5.'?=g]eV i=w80Xl4B<@!33Pu \54::SN4 EX>RKK)JCʘ:ײY )qruC7x"/8VF%a d463 d,&wH"=" J)w/T7'vL*p v3rƧ"˸[? }} /-XZVr+HICH&K|՝%#.>s#$RyM#m׼SHY4SZ ] 0cVI(vD)UA+ 'ZYTjZКYnKP. ݃T+!vcE.] t=&8 Lx0{8)N׏plJD?2gSE(t歺RJ #/]ۗ/JpeQ!ɻCQWъ _z)EGJ)2ig >A^l.鈖P$bQZfԡ[\,N-eӷHN40aly=I9s$o8q}H/$6氉?:;3"vहA<98>$wAsO0:ĜvJݏipi#9Q u|8r^X+27}]|%*:F!dm|PVȑ`^TA_rF4y{)q {YBe38?y r%L2ohR~ -L?Xab oDr}6bYWLXc|iI)%ayFuNٲf꣢mksUrp>sϬȇ).PWd}%*tʴxIvR՜q:?28e/[$D>Rї_GaLNfv5ř^J^ Cb)1OڹBՅN0XO1Y4Q̈́AqT{XI#+A8@fNk; dx׎SRHش-u9p7_C)Շ6ٶS_JGտw옐$m=XߎgLǟ}cc|OM ٝa0ͻ+M飻f~XJ$ )nn&38903֧$ً7ȕfw, dRU S8a5f7PVpVCI~ۅRٿq՟~WSO0fbtK}t?ZV>vz`a֍@E;iz@|&8jc=ޓn{)\܋/RSUc4\/?)i0HN~\ÃJB%Pb0B5_6gIY}s͐vk/-uwQߏ4S& 'dQMl,j<fgPC{QhNLقoI8Pݚgn.&"YF,Zzn2BFp]鑞8~{spN مI`60O!5gN 8 gxE*Źx^ IDAT}5*yDW[2Nu5-&@h2ްt1ZE<9iРEPKn:N%*WVEHC ZIQzOd=,D~bzVgZHhn6 ą0K IZJD+5{!0Uϲ:L~)eoƺ}tXZ2R2H"}a{]q5ƢLiS{D8wxƣKFu4\g߃Vɡѡ_0s9嬀H#= },QQBHSq~T /ƈ}㐊^<#ZV*2f_ ,ƮavЀe. %{d*m1QBʺ/|mq όEl7IEDgNFYIeU ڸ= uVXyC(evҺP^HuOEpWu@a `S(֜jNv=ZcFd2KtD _&PD|V?Bg^nJD+pEf{RԴ"-9bݟIrO*sKMi9kBdpձc \L'刚eqob_CŃ yC=O#p)Ne::e6<x!$UtDH9 4_mRb Px~v48E؆Ǭs* aOQ!*gk bݞA#5: (UiYa#eŖoCT֫Ӣ53g݊#dYU0C `h6U1R@A4SNk/ uM4TEMǴ|٤)}SYAf9+!]"8+d*b%KJ"LU!V"l$-W\Bwzo#i^&р# 2 1y`X^U0YC,(7VQ|C#ŠAQ,MX0 _U"{K 5K7UmlY +嫨GTM1Jq*8}\5Wan45:}u(;=?S?UfaN UǹߙȨNb;^\h{/ Z:r}SMʅ lpU}\,dS;bw]{kqSRwL`p*HIĢQWF< tY s UV ?AUdDHrNfD}&~_u^V-Rׄt%m`6zQAYO.WBL$r7P_n;C> }>(rmՆO\4%H:fkm_&jv[W {4(PjGʆ J,EN(-Ӥlm 8\^,sN,ٓ5Qpiq ^, g7ӡ8@`3 fx,ɻH'oUieTX od,tM,g֭3)KM!lwnb]+(8<+Χ 8~$ bTPtгo{0KlElϿ g R~n*5D`/Y}=l&זUx3']4^i@dO%MUQgMý]սv%CSmϿg;LEG= , cp?n2ٯr}"t32ϳ,TpzUn a#v:nª/BV]M]ZJDw pePB^yBۏ5* *.ټsGW?1DSxBD7fx;Snfm{V2\Yi!wށ"Lf82 Y;4x|*vաKX,0LxkUXEM_dO{0qΧ꠻ںi´ }MxF/M kTXԻ B㭗mt$n3fo/= +(TMjcDZ<0`&wdI45*\8KFV(4)y` ZCgy-{lzi yƻh:BDu)frzACf7p|6G=[n;X]a~|ש;աX99zAG (bV<]X":5|De[ՐiW:6PsiyJ3K; MGĥ)ח3`+V*v%sL[d5w*8ՊBb`\n->y՜W,i鞘lMʋ<} ֓YR /[9nMHւK,6ltNѳޖ}X-!gжVlR_NO7d!'mBk4OM;E˟\wMJ'50s)BN잇,+VTeQBtSw4|dRz=B3`صi i6.u8wml6 _&kka-Ef5TK~`JʶSxO0mfX<0ی}㲞[.$(^_ՙۑ:N5cqVރlg'x?2m''(⛴inSr%2f(՜vZ`,ԨNM訔G%{ 뢢̀(R==l6=[b>c_[}{mh +\!{G21,ւvW׳6mVh3nQC Xqٷ-S٪5CBQ'l8*۟C*OZ*7WcK5 ָGϕ1zWOt#W}kl@k"WכY* W 8rpgv3!hBCM5fH~~/=`H6CΦZ 8,p,ui[MwB(U^;eݸ{mՑEMx:GҸO^ÉCv+->]ptuº<ۋvĵ0np[ RMKrkT^[V[`apTqPJVM:5'ʪ: mG\J]}#cˍ3Tov0o2:Qi`&aɸ<0 {)]xn#i?/XAt\o%i}dpI$+ե1AY}JHJW@JsnpiݾB,'@Ҹ+zoѳRsWYi_'v P<$?u}dsd ]a<=jX/(w4ۛw),=в l'OaR&Ph:AIs4H=w~EmnI:bph}u+X5򦻸jH3vM׍櫞?lvzU Kֳs!'TєUW3\mKJ-0RO D ZtO|雹z6?5WYC:LЖZ[XU}MW+󑮦Ņd2}/AY<ř " Rp<)i8U{UD]zӂ͂b.;I''i9> )TFŪ\'Pch˪ѯ 0HJ/Â`_z%Bd<0NJ8<])\(M\]?R25Kg02\}э-嶛qaf6u|MvdGoMsIO;'sϋ.'N*C}^-QgGW/ f*=Cˋ`X%"0Mk*zK6 4%jx?嫨Ċ@Wc6X 7#_qZ=% <䊿g籃 %>a,S9u+Ke̞۱~q "yxKPVHW}Г(LJ-LFJt5\ƿap Im۽(C^lf5]ti%wL5-@Xn>\Vpjb!(b[kQ#hE^ߙ3:Ks@%ki}f Gxw ):u]om3ڔIsZ+Ʃ5ո#(6xSYP?h>:Yx⒘o̸2ĉG{0jOXBvYKk:"lg:/j_[Jjx+a:"m[r" $: -$[<~ůiv6LY!Ɓ!wQ7QG$ 3N=Ӯ{3ȅbO pO].?8Cq%IcaZ",єn%#N%3#M؃I~{dcR!ᮝi1@*E/ҫ] S٘cx^:MQXISu)'{PtSo^':yf3ċ;sAlmZ 4J<\&T5G,vZIee०pW%7a54a,"ՙur+3]ih+P] gJED%Zx>[^U>t~6PfX5`%0"Gu)O]2"E=2AVMg&y~GcC#AE4ZxRw/5'_eI%렑 U#ٲPiɫՑ7+"` PAPU$Μdd':Kޭ⻊NG[G 흄#E0:w>,@cݼMO޸5QC%)d@^Vr#F|cL-W=IUơQeUĞ7[Nү3語;J4{/G5,}a\UBeQ9 K:ss# X-]9ro^lG5GFTnS 0;z誷*5^q Mi]@VlyN!49 :iIEY7 _A,cDKP܊k-YPݫp JNfIe?S-Q]Mx4 dSY⪊4ӑaAMcH>JI[Ot{ˏ]n=g100oyڎК-d;3/Xb~Kqg20T~ 긡]$$;<ul~S,`Dߎz{ǂsn0A֠ Kum?A|yX kFYJӄ4[:MXĴv,MG8g$@,nxAaȖSq-~ jȪY:&qՁr}kU/ŽӴ9s`Vx' mTPrKiGsS0x:>qqsNرNAR3l۷ TQ>/[fr6%cv \Fj!һwkȋEJS jNi Kd L-qDbUՏ ?`!+aAdm0eO+BȺV ?ıJRJt^7spr4 H$IU$ )0.[bF=rѶkr'Rp |[uZ=֪uT B*̥fծ[~}dEq!!*D-ġV'D:P6['(:pfD>NamL/*k|:ВO1R[q(M2i(Ծa+3"]X;oi \*.qvT[ İt6u]=]ywOiŝ_ A.i"m9ՉrS뽛}>CGKi'@>6W}${ӭ/tl2)#տOH|f[&wy幭T<{oN ֭1sMQҟiibߣ C!mtzNSWQACn鋇r,^S9s󻋖@dQXwP" 4b×%ril7h{ю瓮LIomDкlk.AJ]&%+5`IENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/brick.png0000644000175000017500000030513411346241564020001 00000000000000PNG  IHDRaUbKGD pHYs  d_tIMEp IDATx.}wm}v齼^sP YDQEQ9dK[Vhɒq'Ɖl$db'##Q$H JOlLP/{?}Ͻ|_ ~BAo\_\kτe2"H"݃:#8c9~_ >z,J'#l!N$NL = ~ӱm67'-.!Bŀ $)Z㬎xorXhcJbD9{~P̉UUTDG-8J ߯Ҩ58?=ٱ wB1! ŐT*.!ϓͥ{C+P rPV9eQȤ$klXeIԏj,:xdd:.I]G%DEUsPȟ= }j6%F/qr;h7_S{$h(կ~gأBZ<[B7b6CD,0n50Sye^?&x_];Xſ# z:'OAu|G$QEد0;;K:^=Dz62SYbqZtJ*¥s2ڝ!/2t|NExsyؚb{=\~=`Vcim X%M!w2eꢄIFef/\`h:B@"qt4"MA< ]#>{_B#jrᡋ(T*eJEBE_2M>gQqFmn}o,19"+;?n?K3,-wNs勏vL_e86'SDcIr{,Hhq"So)Jܾ{NH4hjb.ΜժHI:3Gt4_g{{jbiVwƉ1j4w9p}ϐN&Z\}{"s ,H㌏aN?8/F,J2bujlwэ$`0r-6:2]~#iq5G-}Fqf ,~o@*W^olY9r\zB?q`τjTepԢv0t\҅^3gɦs ; Qf{~"IXYYbmF$ĸNX$ =tl]ͷYXav'H3([Uf(́(!bT)6, - >ǙϣW3[[ڣ6W}ms=bTlD4o >XzCVW b:o(NkQIrKd+ 8GM^7Y,H1^ƷYY\b)Qdal.F&~Z)h w#8c9s~8zD<<K,}兏+o|8c9O?ٟsKsGDS+$bbDz3{}FCcvL hr+%0*{(~H0Hňh, r:_yXW_BUDj,w_yXqV`@ӳ@IhZ۴%N}I0-nwظΣ?0ncwzm(/!( b1UEC_f^%TDc J5 d}uMbyYlsH!UB9BE\NDQQIo05pf8HR||ۛ[,\ ߦ0>oad|OM4 Y^\;=BQo+'ȐbߺKXqFz*e;FY̮,!s u12BK0tkb f %upϲ& I!%'[(j:+`$)LS{unl6C@"/~U dDrLԘFIN\xh^Ƥ@AuƂƴgttDZ%LPcqz}>gׅc9ޥS Ak26MN.eu%pF*j(2x'C|)"c7Dd!ˈ谆#dxȂH8LX=ˣӬ&dFSX<̓61%ϓˁ3‹4qoэ,!w咤VXSiAD]go*%rYQFa#'ON\67[\xB d2tMA10} WO}{Z6/SӫȡϐZdHvөZ^F%uDT-^yUYD04"l7MLBLX6!ZJIe:3##GD񐈑DU4=]=ޘA!fgr.>KR@ST|?@Je.0=Ã&g\ mS]ԉ3 6 0:JNqY<5Z{w^$HY[]iQXLc4Qɥ4}Z\.C=["L1 vZ󈇯\JЪG }u~X`χ鳗[_`mSE}iNM$AV#lAz6|s|У"Ao8$=3CTaRm,#xGӢlN$WhQhizo2YD:^Mrwc$Sˀ3tZQݠyJg>&gOT0 ϰ}@A ha-"4DQBevUWS5t]'O!dtmUSP$?J\Rv3o̧YG_ʰ icis̮s]V) ěZ.Tܻ H4uQbQ (́~Nm#_JO].|~9TBC_38="8f +G6TL޸ =h#+1rs99zc;KLѸp$<:H6>L !z0( z>{n1-D 5ɔP׸Op<qH0`(:. ôMMD  I|~okǕϑ?τR&]hL8GBrd21!~+cO _}J[$,<~^-BT B1!NC ZWo&@:"[wx ^b^#:G`c +="2/Do o3XXߩG?3L19{//mk2?ԛlВEyipإ}Pc=" Y/d{>I}R+S%QBȗ~[t:ؓr9ܹƩO%*L'e1L3՗n Ǖ߃|'sxS' À*Re%08=& <QARuNdc}f89p8S9,{||=ܗ|X\pirFB&K4bQuL6ͣ#ƖIfʔKYt#{{{LcVQS{5,΀l69غǕWdD1Od"Ntxs9qEbzrl1O9W&F5CCtY˝ij$:@Dɦt4`18hI0 >N`H24m6wvihFl>ʼU"Hqn 0!tdG#z$zQo"A\ bDDY5p}H4B,ѨmPxԅ({O&aiiR`0,F!rFDs\ ir=}~fqre/}򩰐S;hZZ\gdY]c-T]7°sMxAQI%tg=fOIVh W$/Ycq.K4piD<8,14h=]$k0z#1$}d 5Bd:wvqSJ"֝;4{H@Db@dBqg2t:=24lRq -Qz_BT=cOJyVy6o0R /m9U"lIQ5nxG%v`c$G8l@Y0d4itapYR,F"{x*%K@#5^yworφb~[vw,yÌ"Lf %4>>i]'HҪ)gr- lo^E 1aKRQEHG&NSǜ?3%Wq)+t=J!͛}n#(4 6v&Frm:#:{U2| O Aw4Bء&A}cg #&d-hd"Om4f͗X:w\'9;0y7u.A"Dyl+iv[(\4Ϸ"K),/-ՙ9$ n\Fi8Al(1msIJ sb$C@kvI&h IDAT} 6v:tpb|.I"$fk5~`/z2>*RH%p]vϤ0DyH~9If3(ZgbXeȰC5|MTΑVe&&pzt#I1ePƌHdQBDIAJg j@>7RQwȹ !alJ*QB |%#Ob6^seԬGf\$Ko^ࣗ/Q^YEl޿G*0Sbm@G8O;O<ѐK3|oS*QVDmqwsYGu ν#.\8*xCGn9O%"jhFclh;8#}2!q]]}3( m&mT=Ak|TVV1N#}ocxސxD~n9ix}꛻TuN^#mQk4)/̡/`cVڥq`)zAu@2rRyvpO^a&"c q3d<|E%]( Pbll1B p6{}WWX\]7 iuh4H +B=}bUI*'"L9EDjSX^^j2"8dq7 OcLۻ;(L{Pg9 )iVl։pHęn~gxM APdlTg42wkoa0 1JCuo]VIfd,,‘46b9.㩉넊 ";׮S]DV!L&-YL?`0"S̾*3lmJb3k,kW}怉}Ν9A*Y`E6bwFIWȖX(A%nyaP9!{j+os2b{.3q9G_Q#ɰ3d<Hi B*p,"2™+kdJg7(fᓟe 1 ViED %,%. V[Ԛn0!BQO%yW@Y];c5Zdf)tJ8L"<L- 2?ã_zYx 0[Y#{Ylm{{:uvw3+\Y>k =ajI%d ɄNG)? ZM)֝LQdċiE6Elo {[<! {;;YםPVp|);>⭯ @r ]<ǵkWqd"ˍp ER ؾJh6t}tYei~zUR{i1+d# F3S71|esw(qd|Q+-)dRH8М2"q&z WHt&10=4j#M4ҕt}\7`eg$1&G5<1H&ȲHTɤȕLl Ӛ㵿L苋)/}`!`'(%~as P.'blol?$z,mx> 43%),'dַE$Iak{^B,,S;x0`o@.qdY<[OSZ1*D4X"iDQЈNh,Dݑ@6 |-t=B(FcQz#>M;E""3٥YΔezFT*ijGg*dy4mqmLޠT,=jKsXvahxLTotd%H!hp7_ur|GO/c²$RqbDFA.S_-+x#pq; N! w޸NoQpsO=.;wp.LhH9Y'v!7"Ci{j2ۨ4!*v<&*L5 I$`ػvݍ{hNLVgaqܾ3!2R]7˗Q$ٹ;PUkb"T!(v{D*NT?SmɗK\~1Ea2 jb3^.Ʉk'X1LNydH*blyAhr\0x,;=L>uS9 𨃛*ɦF$Ҫ׈H2RSx(B$}G4' \|<aSKȞ#QkK`CO/2|~lP%[ {6ƣ= ?=@T46R EC#\~u>QEzd-8=e:˧)V(mtW""a`Gdb ` (ÑT R$n`y7]'aDDɦx.K!8pj9CLQPD)rtdvit=BI&>dH*JF,{[xN@<`<#+!QDs6nQk6d|!.,XB!pfSpEB Y 爢VM(#f"K۷xHiĜ7 챍`d41јN"Z(1tZsVU}Uh`# f*[o 1 JrUFrzz%EtG?bNEVWd=IWJ|. 7V\d &H9O=_&L?)L""q+۷iLF]!+"J>ymvgT*U\.ؼvdAu!ˑ/"m{t+(J&!2-JC"3hwF"4.*59XX<-sԆGOb2ӱ@&b43M2(BȲrC8=9YIJtVWsTs5T*d2"WS(\!.i~ulB 1LX<熘F ISC}P2ugȘjxB녘V-b"*"o}sp?KN/P 30 IU+!|aP$L Zg P=a%FcB!5FE̥8TB#4wMF*Q&nŨ]Nf!Gȟr׸svn\G5aw~_'t]+O=[j<~A)X/( VL1O<@עCjK$%b4jm.uNX"beLF ۷GR&KKskb)Etu4eQvQCW 4MtSC !5`b;Xa!kQ 3ɔε+h7sXeYXa䇼TQ'.cZ~ǙSH+Tf ZYq|^l2&a34d/uT:K{1G6GV@]Z*daYq칇㔐Oz桏(ģ ZI.L)7BW__Z֟۬xp BlnP4+t]_|q޳>'_(2wlye.Ű؞lX)Dՠ\)3i5xOn!S)SgeD"bS{JEEd2sFd { 677}QƠg>vhv<{<1Sܝs66JTwW E+[sEbD S#T#7/l6ˤR)/N9==e4(o`'?彟G:ϤjIBGﲱD*C3VɧDuNCgc:ap,_η51RQ񂐕5K|N,j~uɼY)IC;70 &W0O9=8BEb3bp{(7ַ,8z=ɦћ#Ii2 \1|ih./HG3VȁM]ay)Gykk/-#w)Tמ/ g%*U)拷I6P;:G/(eK}h W Iwóǟc^y%V׊Vlmmn69::bkk Cx1'lcF#*真:&r_njllmdo]7B򒳓c0M^ýg8Sn{@3`iiuT]ŊȜ IDAT)Nr~zA2["ϱ!t{t}$KhhE<M#$d2d*J,eii (Hb.dt{w5S1!2Aܣvt&G"yP(txX13\t)E82鴹DM`֟A͊""$I@@6簼Tb:sx|Y{5y_$ o6eylHdW|)￿˛w^dmi{u"E4>A b8<{ ! ؾrTkxaH{h'b*r/"b"xbuyW_ dCI|@yLgSl37j46zĖsV JD#ks&(Lf}Ɗ->}ʽ5j.s.goyea\'% -J*5 `2t: AT8*iThN&-,]a6Q3F2%OSZ,k$LG}I \/YDa~ TU%DH$B5=tCf<2ꏰ6^)I% lG ET4-DQFl|\}GHkϙ-4E YJL0Tllorm*?F$%Ώ<;Q 9X!x]$a- XZD%)]ER jUD|x8{;FUR.1 \cay,RT Yb*IȪt2&bjdI.2p-[\OCqh,,<'".S8[c.\18k;̜L9?>'pn]3&W9"`iNß.'OXCh-ck2H!G uTE#r:׿Eİ kL1pp&CMl"b>CU)Ɉ7kN{HTɦ#agF-lcdz~€!P(HbHJMKl iԛ$bqtQa!JdlI|b7cHĠC3d\9JA$Fs&j2qʐ c{DQevwwse?T/.\0iuӨ0 w(X̯pc yY2&B+2y-hKU FnKhƠBAQ6"QX]-` ^bL:A|FRH"`l/پ*R)K,jixD.M*J2$='Vܢl "Uu{^b.xl>Ba NH|VI$Pot{,"w) ll$\44X\9tx"M~ed̰7`hEްCxP(eٸNzOdחyo!.SJiB3"Ry`ΘX@G4#!0ON&L0bQ~ /u!"0 _/.QS2X]\D}:fv>d[^AOU'XD"s<:>Or^:WIA,3Ll'ܐ~5`FrB,/-a({]wpvReIY_[Wnl]ȡLӊHgظzY>뛛Ĭ(.# IAD,%@Uehuz|E<-^׆ec:k[(H:d:qYkdKR̝3{,y+SZ.HE|f#]RqGc./hEL63hZ'wMH  .;e:+&Ɍh"Iiigt:T.P hb:8f4Z-|J+̜ɘA(l4oO)l1Iǽ-Zad6?9[R <-u}Qo^ !fMXY]$N,..H.G{DQ4{O?Skq~|B̨?r$"p4+%=|@И63'WH&udA! `c}Mzri p\i!nT&-tՄPP,6io`'~BԈ:x(Hd 4Ml+KY yhFӧ찐_$pycӧ C@_~dgs}`@Q6g!w)gq_/H$RiߝSt.qJų"(jHq n4i4[Ds,]yMF! I\Mƨ(U1t#t4>g +y(~I0L^bE-uRn݋slO`01p) l*rbL3 HFSTU|D1Q`d;tFL=u1Rid]ǞOwg6h/*HnmOuUp=v^͛8fY$Sq|\ҭ_bOF8 .-kBXbyuťU%dEVPɬ{peӓj\T/^tɤ""V>볲2vcq63.OWQU`ēGgMgiqEU<߻Ǩ?bmq*q~9oy\OףQ*\ZC2dJdENY*-l4]& (@SuTU$3'My6.32"_-֛;Sތw9/xQR!ɘFQPqlIV%,<ߦ\>#Y$ .lz{I9`5LM"O⺠&f 45X$ gl^WI+1'e|Ĭ8'e0d TC <$Me.,,H峜U+_ Kˋ=6r~Vfs&dbamb~\abAE=@\ps ! H1eD"Qn޼N>@Z-fs}EV6Byq*X;_R(.-rvqF ̧S$_ \Z:NuR :Hn tEb6.z4芌"K覎a:Wn찺ȋw^wPIa#"i 9/3zkĢ?R$*%DR1ݓ=р!I:JdOy3%$Q!v'X[-[%I>'',q ɜι(P9[8ӋC ǝ"49=>}jKjmϪȒJ6!WHaDΜ`Yͫ/-SmԸz}o|m"@ fi#NN|]%ZN6@ƛoBlgyieVٺ~r_}!J`V#z!ިOЄ"(*HXDcqb1Et\&Creuy/0|J?qq~lnnIepsLda:mg dYߪz$jn,HS9ϥ7 )2 bB @0n7Hh<ݫ0?jaŹFdD'=~ 8`Ϧh>>+l~/O)&3BZh=sY nmU-"(`dMCK*)ѤoV/Na ?bssuEeaFY%#[i~_+ 姄,"z*Hԡ[`46X^j8>>$g&vg.`QD%B$bi}V~3CPqAo ap4#yDq,3t:njܸ͓,dY,e8X,BFq*;7𓻤9GgX,/u f\r&s~x"C2fxF?w(&ND#9l]/` c4OB|DaL$cs+kFSHIic1ֲidYI^3)s>Mv;Q/F"T/Hڔ T*m23`F3\)WP䀈f>D'%boz Ygq@*/>y>q6*ۥ[qESf ? O+aRtUv~e_|~BV9=bz!MǬtlk}mcɌXD^ˠ\W^~SM)(`cJ l\K8ݣ|tꋌ=IqK`exͯb*KKYjSj5 9J\* R,Zc3'#T-^|mH:k5)=ƍmbF_:s1ѨV}sl+ukT!Wo#(VT.Qև}~w~;,sz^脅t QHM'st\cd Q=/3tB3f#\#EEDIEQt\ŗnSUHG-@e؟1's6M,[ĝq[xΜ+D3BR/.F}՛(Dx˔ iR,(_)**|Ĩݤrc4@7qkK }l{No#VLfE7q]P |=!1s9'[Q\)1s4uᘨ$Bd2F1BSd*zԐTIQ݈tJ8{U+2DM#"LT1+AD6 '4m6VVE=H,l~T@ټ~sN)3瘹!kWv0n8>?!b$rb(Q{sظz[S=$]p{xBH{Aђ|]=;ʝ`=>`<`u)똦I4cO_'2I'^)jM$ >.+z4^}Uqm>Yp8"M'hˌXI^Cu b,'3$S&Et d0vIm- I ~L*1N(eS`SuPcDE <3 /ώx^sg'gg|}vܹxP像~e=3[7M&\\Ql,2gbH&%~Jw?1zE93gNX S*R~vt{d39NONes,.&O}[{Dx{FUwW{`0$ENA72]u9$3MLt@H!`l=]ݵW}q9Q IDATz$ L=QJ.fk{BŷO.72N) XD("")硅u%7ν{OI!Ku QǛ7F D tg'Z}.N.eb>D"G$pa6J8BgbYlvb #r |:R=}J0A$kwal:Nri=!G%IM}k:/aMlR /|tҠzq!HH$Kpy$- ޢ?X!qIH4mWט{x4:-~ѯ΃obF`PB\;ٸ, 8lIfiywGTD$a?Tzhd6ŚIg b1$sR^kQ։sll^g)GTeQdg'4޻t4ً9RmTѠXDYflZ,.jQJ׹s6c!.xH>F~gVOvvu ۗȺ>*L9?`fdqѸA:#rYSh"{؎O$!Wω W6u8IDz6n #!WV'dR).8mO Č`'$lbH*8`4b&3qrqMt#Fp]B`ʛK!lʭcCB$L"E6] 11{Wob:lr5~It>(;O~B^%k]śd~= b x??S^<Jfc6Y&owOBaR.Qmh &l\pog?g{{x6ư7fp!Vb21/Hb, ʋ 3 PBT IViČ8JHe4S*p\ӜbY.T9f6JWLcVX^_D\Ɲ;\Tٺx1YExxPۜѨH5n_#R57P*G# Lsp0&]̑f ET6oP*LzXSz.p"*t5.L{(ش]Q]בY !_&^5zpHD,-ѣ$+SŨF%fȜ\0,JbDo«f (tCƓ 3sql͈!u]Ó%&7V&ݱoq\5/ϩm.7LQ)q Ώ.ƢHj#F4J`O y6ܥpyJ?{~3(U4Sȣ#L+g|s:K$b)e/ًcf3MT݊7BaS|ON.ۯ?#SZ#U^/El{i>|ta5<|=~!s훗,d6x-k%CLiմ+$A3DQ nI%SVi֪dsyJK̬9^nX*/]\P,"` BQS2O"b0YYZlM$ y~#^E#à%3(o|*oq~VSm#'$n .o"" k P=>bh@QU\#" 2oxw=Vq-djUpT!p1(oY֭ -9ϟx׮4A5Z٤J9ɨ$D8g G]KwIHqtDT"MȒdsfs²*;mǫ4F& >sD w#Kv@n ɬu 6b9<=gJ*ckpkSI&XGnlCZLeJiwB>_Tΐev6 Lj}fJNG2FuEhas)j!w?) *jkTUgm9AL9;ai0opdqǏ<;ekc-&W^~W@<{CV(.m1Y9FIHJ`KܺM>gmM,#k$ ڍ&tiaf!F4+Si#s9ܾC.+~b)Gu&*\xڍ۴}&}ڕ3r,˫e ~m9C9=?#jY,<"͢ s< NOhH(Qkճ=C M?=0'%5fjFo8D *&h#KK+zA8>{KTD GPTjX"M(d'$R9%xB\ sp|`o{7Yyk)q8oV1(f9r8LHVFÑdJW Cq/ᗻ=/Z6Y_|в<ª%=Q\)vdhg21EHeMXp^mw4kO Wo6`oD> }.MVR|HeҸ$Lf.*Dt1OiqX:K@<$]Ȓ/0umU\N4EàH<#\%F%$$Z,'mYX.%Y*.S,/299=Qvȕ2D a[sTMň'0Q ˢ VvKu=!ш|N2]Fuf|6ݬѮ]`C.5{pM3:KDu{GGX1t#\jɌH"8:bvg8ވf}HLfcBHѫ]`F916\T<l.+A@:! ?Y}`F^]q(./`3T Ay!FTA\d`!w̒У8!;7fod*Kfh{J9IJ0}F̱0F#-,D@J 3$'\'\ciqՍkWxѐ^#PF2" F]ĐO,APdM"Kd#Ee Et`tww-wxC<"uY#-Ìc3ZHsFbknUIgW9[oNĈ MWd#qFIAlۦޝ`dmz3&"1lnIET4Pm~ wQ,c5xVP"6P8MRdHDc"j6$^~㏨ygL,/2jll# '>)D9 QJY*ydzXCoy-JV(O~D,ClmssՍu|%Dդi\VN{DG +ln2跩D:CGR$#V5R4.ώ$5ap^0v( k:biq|>G5&\6j Q*TN)S]...)ˬuԉƒD8%ub>ܥݩ39|WK7$QpN|氵}D&+($E$AHD f3OT@q qyzL!gLFtUauqBjt6v_A4F6+ e|ߡ9^>#qai$Ee8.?? )ޘL,б[=q}.jL%tx5e&cL&qWcnܾλpZۿ&ZT+hbTq}@PeSt1B2.L*M,"QLt 4~#"J8Js8b<,͝-N '73sg|Ir=TFI6\^{xfL"0 xs~N&&O~: Dwb1:)p^@""#i67SqsŲQsz6ˋ+OuIB\ScFTSI$`f<顇#Ȳ{@"d6u9\SVeݷol6KmJl)M E^fl6!rp|=%j&pUTStL8Gg($|"Y̓_ZCc>{o|ʽF:^X)_|9$eR5ŲmNYޟ?o~_tlbf1_r~zJ;q}̙Nh7}xm&$dӗo3 6xB9RDR X7qu燜rK9Gh {LVr)$aOOwY)f%їɦ 0L4#d>d# Jsۙ3&L NdD~DX 'HCr29׾D}|I~x1$R(ɖM$%ϳsڗ<{apD C*.x.b>_G=>_ ! 3dn9X>5o\rxqZA@e:"s28sgau;ضE^ǽƙC{6{ Ql& 3Ef昩=3$1@ %ϒ+fXXE k4[ ܹMDp YFTfs=]3MPŀT&Gf9x>&Rkm_]kSVW#҅eZ 'RT̢*f"NFhlOĜcSQ./~6LϿ蠁htl(XƲZM<r<^wV5{薃{osg?0}oNqmS.'x5ud65Ǩ^v&C'ܓQ"RȧȲ@ܦj0Č$/9fX"/2,vm޾N4&qqY ׷h&dʥ_} F#Rd2I$8|+=|C,?gu* س_~ _WŸ4SH4T~~PdKbe `b:#"7jxO8"N| Wpp VۤWWΈEȲ֭ 6b -fPVe.0z<$ Ͱ!gİS"!GG )֗I_>!JvQwH1_$L(*zOҟ;w\&BxfJ/\͵d |.-ьD,lhE"+D~|dFc(W>:E7DdF/?{O)FX6.デHw{a04'pŤd02%^]O1& ٸA'_!* q^1Qڃ ~1gR nla6'WTʛkL\NN@Vnݻ3>L#*:K2 *g #>5P9gS9d8Y(Y\[QDFM"fXc&,5n{'~wswݠҾ'v2 2|d" pH&"(!Ml;O>g؛P.i>,!O;fjNAŒA8]BQֵ1 4ӨRdK ,//_AehJe8 _(y*DA{( 1u\ԛ$J(`jH, #>Ɯf:rQT%#٘vmxjLeI%`6;G|lgkϩ_aDQœhF}cedbbdV& \~? ZHfsc-ƳS8*2 \^^7oަXDݯb6=A$OdH}Rթq~vsk&шvz=ہCvvvFcTߣrzNXY\^=qq2q&L1;[Lڠ+,1J^Wafc 欭,`;RHݮv%=L<%0Ȕ EvM\',/b81J4E3TZ NM9 CeZ J "&c!gخg߹bnAoD"v?k'D0Ȗdj^5y#hIp.}9a'>㜞W!YdIJOw)0m P3ʫܽI]Olj}}=tJ&"H"V,֠GbWуۜU|#ʁAXV(T/&s:>|A פQ/((X #Akc.,ސ/}uuM;"z.buyNNν+%I$l,1wLc>p VYdr %J:)5CR5yt9sb3ÙYH4#\8Z.1N*Y(#|cola[cOQ"O58|'?zH%Lr)g33a&{|p8ʵ5}F!!Y48Ue>F|C삤%Cظ9fgεucVVh蚌)O,b;m|&PQ ߹Uq cqppAl 9 O#$ȺskXr؛(K963YQ-&^LsxrDe}mcBSk6 z(,0BeHdpklN(|BiQ8ӷU$i1Hd!3Ĉ*h(}=Cdv_R*B,UH >ᘁ k!$g꒎Pe^<x4GqF_N(A&>g>KYa3֗782O*W?e2yw~}0[4g"j;9`Ƅ֯>MGɦ3lnsxO4+bYsz>+eWp1n5) Px"˸0ёIa>m V\{Y(eL W c! it[.Feq!`NXfP?R?aii|)|2%MALs̋ψRF##nDQ #2cut9D* ǰ&&,.v kUY٬/dY4}\C9OiwIr$RqtCfq)x:t\t&C?F5R0>'GG_2&H|jsz@Cȝ[޼/ǐEqpOk"q^=7GD"KI3mgMΎZ![G! kKA벍䩸s% ܸ.z!K<7l24\c҆q_~)-,%|k:bHD88eLaN$(j1LJDT]ٺC$%S:bHDNxDtD:tsF:Wdy}|)iQc RF/? IPu #aO')dvG;0=wwi]{?սBX* @L~'p|TܴX_e-'SL[dcyt*"fxH%"I78X. vdgz1Cߢ`>Deud8%r tU%𝫗[RytLVyO~ Y !!/)^ $bkN^V1 ݍ:&Eh87FUOc.\&5.52M0" #yqK"٨Q#Ύ EI9bsk "vbĶ1R bb6g"Hekא4??)woa2IdS8\Bl -W%\nF?ӟHU00ctX-XsL6OOO"{L &4KE4e1LMf(z:{;;DAHRSG.(Te `0ER`B5d4Z02y eiwCK^[XׄQ^-f4\0H:I]ei.YK^|˳&|+F\&CݦiO"l.HW h!ķ]O:tN9yY~WOww6Oh" . R{wYZ srt:֒jm!z.G}o[i/hܼE;ߦĴys|H b}k-g5Y`f>8@EP(r F۲#$ * A0Ls u&{;̗ :aptr琐5-nݾER+V%oOپv{\0u^'J n#M,K"gi~"D@@B2)ld>޻$WR'Yp $9U$ \|?`:[FNi,}"BO*&wzd>l&7Lzxʬ-#ûzsHb*q>1i]{(Z٭oBS)l*FDc!Dd&M]\ gk23NHl1cZ+,; WٻMd+VNzC,X,3j5X7=/zBȱ'$836tNj&X;ͳ?õl6MJF|Ȝ3wQ-e9>?Aԓ6Xa w|]>DB?Z̉-nDKz_a6grs)d28|MEw8bm.H1 2,:>#p\UU \ |.]ۍLZs' l E!\faNm4(U$j?~{Pi6IdRqL:= XE:g$V+yAU-~&tk99=G惛L ?hLOX-TH&Zb H.P͍,s٘z42?]ʵ*:sq%r9=.Z;n sŽw!J rě_W"') -ZSfyBµ}D|RQqֺ Hp-u-u}#EeE8 1ynݻ,%b$+z @MN X7o_+fXMBHެqyM,h\7O8~9Hi)67 g|~1|5!PWt@PS_=X.soj +"E'S~ߣ0q`?o06n#z@D9&P7P9L_˦Fe,3sz+CO(,&F /w=9R>I(eYN)FUe;Fj4![~?B5>s<N̄%.(bsP2g\f ߏ7\ /_iϿQ-%Yyj*E 9#@K؃f-Gnw$bH $be{9n>I#śCoIfJK֊xLT\"&rW(9BB9貀- ?I9m޾9q_Q\Uvq]Mt]7"Iq,KpadY)"9MSF>yXLl3ld0I2c*zڠ=]lDx{Xϴ7`Yg0QSi\D2/ .[-2zaK%7+>ggH._fBeglƋϟeʹ,ZW%rͤO %(W d %vȏ(5vdN)ydMDQ$.|My:eqJ*EcY(Q5'ysr&'Y/MyjmQM'lՙxK=d4}V./ZNQ4 QUz{E:?#%dJM:}*_ fLrKw}O?9O•GyDEO10hь MГ8CsCJM"I 2HePl.'ggڔ7IR]\7ٜQEԓ9륇,2L)&!u&9;[fs(z|e+1 G,9g'ȉB/1g 4-k{  bm豏Vb .:hz oh\g6N'2x|"7b5%{P +6i6(z=_?'fI"Z8xyț']uSin6]N_ &@uX-{H, ISoaMmb;MqWR IJ$R"AB"1r2m"k nܾb[u2z8f-@PCU̹oJËƛr]|7W˔+d>H(IjD&oP,˼|W>.m7<U]wwy(bj)#EaFT@kܾ㏾EYӯ{K/yn0\ Fu눒L}|k}l?>[O8n:9]n%4 BI0KQ!ˋKRHd iuY!=_ .b8!:lX@K$k4j&F]RL:Dff^YOy>be TçS ^ai/QS>)^tK* ]I:`>dNOO8+{csWgD}nomӟR,23:kʵ{gȦsѭ2,a^ELklm18?dEsۏlo32B"d<S8(D%Tk5~ߥn1L[1tfc _stvE6!͒Dqj>:34_x˓/XK쵅IUd&[7Hf5>!bbŠ}Gڍ}PeMGRDX+J"I,SRd\u ٜd63]rA.MO"* "Q`iyf3\x)bMRM+N^Pu@"/aZkb1{ܹBUdP{_! ln ǵ1zFMӜa-^y.FN r?rQ1[ZfS$`-Mz>[ؾC&!aj2%%h2rAT5ZR!ǸœϹlx6TQwF4*ɀQHLeCXȐ*(l &~`$rp:W*gB@I$N"oF,K03.X:1*uEB_U$eҙl:(Ĭ+K&sQ߽ ֠bij֖GCUPT "LzNe.r=AFt.f3ߞId73Ē)A eY":F&K ]Idk{,szr5]Qu՚9# "*cd87ߜEp> &քL' 2"H!є::'''DAH腤dǶ1kJEM/Cȵ{i39?ų(JI=scBmm i:ǜ! 1b-O)8F\LqJՒxEE:|PCh^.V+ )i ̐RE$31#2Ql.Dس%bǾdY0S*M ,"k![MI H L8>}̥˓o)bX؄95 =A(>LJo^`Y&*oߦ\(r5Jr@ >;cecNQ%EvX-_ݽ Ԫd%jnPlv,!M$iloܤ\ɓJf/,f5fR TJ1c>s9F$Q4JfuVK4 vW=KR`Dsc9Y#>G:a1 "H%g3T UVYc9n졦2LsDGĎ第%0;?U7h4ܿyi--=G6_AIܽb;oQ($9|aT&N1i$uɓ/h_i2Y#KN\qy~gTJuIg8^B\sMJKs= a˴7R*Q7ġˠ}JRB=~\ Hqt6g2_HF  ]g(03%;|)O6!+"qL83&RnҾlI2#O*Wdyjq)D\ ,<׿`'i%I'։5"0 HsVzA*[ O.#+(G!,bG^|q~rznHe 463,Ũ5rʳY̆SzqlœL.{~J>iLXL /O"m.>V;M$I])D+OMPTPU!H$ :=# ߽Foxj3HHD$ѯ.Z>B.KBWvWYFdYZ>뵏m[ yҩ$6j Yѕ}W \i,,9?^蚆0Kv6wELpmvwvIy=|b& #V+ȋh6e̳\=c0 'v] %pz|Rɗ I,32${ynlm!k\NՊ<|pk{۬R(W$ɗ?h48פtYS X\y>^`Mg2DQ[6UP='ˠ 1lcjwsBwm66Tv$.oDYpssT=Edn9TUbeڨ+Ühl*<m+R&_2Hu&!Q0M5paDތ5Ƚi'$5y5#G.AK&jiAc!qL>lYC3*q#3g Q89wܦl]T COL(dD83[,6eTJbDC~y:!D>oY(R^p(&u3gFt_Y5^9|"]<{Eb@c&d,+0)T) TU @K9F `6qzv$A>_D#qle聬c/~OvvIItr,m'RW6I4td"B7 !i^HEhh,JFD$z,}~re#MA'aV%4!ՋRhF>Y?3: $Z:E2;3w:\߭0He t`\b&cVnD"mE0_4wٽ~oRLeȢD1y>"Ō˖Pbv9~1OO~ÏG1jRFR̒-X- t:jb4R(x{4Œ`@T"G&]vBn\Is-zZ P$|)gs&}8f,QT9Y/)7(tT5Z/YPd"%J1 #T1/Pd1m/g,4MT(Ǥ39޼>a<\M%dXS!鈢H^Q/S/乸xd5CMy '$in=G t[gȁ Z6Ʉhĸ?AE)sy٦R3 8KQK̦3J ,c.M hdبU(ܠ7_p~򖴜 vB !d>-)AB8b GL&s'8KҚH,+dY@ =V ɔ{a45) vMVs|B@c4.Ssepc^0[/Y.咂B @`*P1Z,%VJ2Nxوn$15%LG}!ea,x%6"߉55T*b<ϡqY[9.nLJZй|bqXRx͗b*'I9Y;3|Iak@5$oPVCRسWK?~?׿TF`Gytqv Ͽ Y߼?F*/)HqJ"qD|2yJN:qlV%l6o'EhJBQ4xt:AVdr9l69o/߲Wܻmn߼N6a{obQαs}Yp|l!O*g7WŔwol?#ƓZj#*x>atƿ~JI9z/YF =z.ΐ?{mTdbJ6oPÐWo%J(D".='Idb_eJnګUBCۥRLГeNCs;~H$9֖t6%j\vȒ;'Qvq;(N._$cs(&ԈCrHt{c+w\Ȧ 3s-P!(F2-#JBܨ'?q>oRgbUQ=(QTb1O*j [4vh7 ŐrQFġKBi__Y/WC{Mo{D^@!2bNdاMqOZaXb.t7vHuf9rz.0rid% k"\&C*dnNek{l67z+f[;4u4MCPD[5aʥ)KWk;t-^b2gu  J9|$mOREO OI`;_~}ʏZ i&sx[[Kr*`2ipV\ dz9}%OgcuHH";;|{ﲵ٨|L.S$"rF IPdY&&Ăd&%ʵa! k#D 4A`. بv,a#)TMGY"k) QYI<ӹtUKLc\TE!19QSÈL!p>H=|Y;n,XɈ poԨ֫ } x{zB"K"|T+>lm|g[~D. loARDF$p<0 /"$$֮z[K4IdARPky J2Ϟqrt{Uqm0FE@mCi|W9=J&KZEN4m0Ķ-Z!q/rPR"Ka0qxM6th].\BJG"s0ȇͦJsJqb$ b|G2:ɤ"~)1P4wђIE61)Vwӷ<0BxKVT)K,hzhBsgcsr~F5]гq  Bώy[?aҴXV,+"J.^ mvwHLB˲NOv}zDwb$(J,I`P(񣐷'ۗ,MbsgtI%  4=>CDMNS2q"\1'oе4t@e.j,ق>oOBo&?-&4Q吿/ #;C||@:+1]| ,zO %[ZP$REֱ] KDtZd<&Q=.Vi@FU1V{{{[t[/YRX9'PV-.޼UԦRR@\׉)% dQFct=[KËϘGYd:b4gm;+:d Q1gjBWr̦DLA* ʰECL؋1hy>x%x >EsKdE$ D1dQP$#jXw9]p~~OR,9Q4I($I ZCV EQ(4+d:aј{nݏ>@J~?>8#CdEBRD#1gLш3̅$0q]Uh$9 V5" <:QԚ5X`0KidYV\ػqQȑjI0JxKM;0_Nx29}o(ZMO!Iiz dB@c9[߸ΔńK,/+7>옔Sb"_njcb>slmMB-=|BwoIW)T 0/k'),+:mbkSQumz=d19Sp!y;`{H<9m`>B Y,\ψQ)UTE+7BOwtKloF׃FJu$fe W14+p3L?vbmw!i"pÏnQk=+{@ LVsV+磫eڝRlT ˆr/ 1? " |4 ן1F]yT[pyuBH>K{v3)Yxz! ˥ʽC9Db{>@fZ.k WzǗ<%wqO*GKo.(Z߹Z3N0sp˗Ϲ]!P(e:f[ӌB, NOO{"F =0$RV{%EMOIwP(#|Aʛ&LD\_G, `'ǧ ,3,]N/UnoxQ0֙Mo%3-[mspO %nn%Ff2]CS޽'`Abi(KW?qB" H2JM&A[$]vW٬!:rj8 M0H]{oWWW=z NX83y>Ujg FM3#I9ٜox%DA||xUy TɈrc$Y/_r-[&VAdzd5 A0CYoHl$Xt*9noojb; F%V3, `FяI%?Mi3f,C$3L" <k>c^|ϿĴLZb~? ΚN6F[Tm;wn#', 8e1s'7#2wtc.OQrɘu'Tz+7YpǴ,B0IHqV[lmo!"׽kALrl gY9wd!1NZV+Xyzdŋ7T+u$AUU S#]0"DAb2՘ vg8 J/;l7IPD͛s-*bMF@T޾r9?3]b) (X 02" Yf*6@Qj9~{Jnd& BTɤ\,S[wm#IY2Sj()$iƝ;w]H) 8kNM9`4 bƓ9U软qYS!2=GFxQ"MR1%B6;DQ{Ÿ~r]Ea,l2[ӟ7%-RQٖKI7aMȗjH"@'=&EU T1-0Eg+U6d.%ZwQˑOd"9goQe!O_X(2lwZT:;'C|/#dZ[VߠPls|~La Ir9 M-4(XLcA6YLy 4iGICN?9 )fܿ Q5$gZ cvwwiou{Ww$!abӧQUf#n;mJ%B`:pJrby+`MuTã#Z$nDD/iZȚ ,lnzA %0u!HҌЏq<IIȐ2Iɡha0)? _ʋk'|]vY\=?i6699>ϟ.RRܦ`}%$>eؿs;fwbZT;[juT=GPYď} @wx^MY*G3x5'o<;qw~* 6ݍ&d1YѨuhlmȄ!oOzf 2tdzCdYa!,3hfsJ?'ę($YuٺuDo2RD,Rqf:X (%r'41U7{ $ /*hOŴjU,ˢ 2O0M(u|Ix9RfE3,ѐ=vmi`Z:gTxFbZqtpD ɈQMJH.Q/ӳZ K7^nEY;:* =#  F[. lDJHL,$L 7L|@ffؽ" ZFloIcM4**up䒐rbz%EY.[Q͍ njϗL\֮c% ѩA%NO/7yG=fj}Oxÿ#AyM4 bTIu$J3/1" ٚNJQ_vW|_ݨA0B nD/N < ]R(TgOboj9KD)(v̽A7Q)XHyj!GݦnPyg,gst%'5C! 8&,bD#d?N {1 V+JryzB%_! :r0nJotZ|W>xc=`r}No0`Dҩԛ5[mn.;[EQXXG>nR(Y|ǵgy%g9"i2L%]PUYQ5Y0sEYcrD/\_Gt&ߡ.>E,%1$P,(Y;1B /9(yzrV{^.רVE4q%N#H4Aß1vǍebRUpW>dbjOy-wBcO[w,#KdAbDJ۹ҤAf?D4tvt5W/8:&H\# 9Cv"k45d!^ﲳO&JٸOD[gI:ܽ{ Aʰ/ZgL'Wh%aer׏x# Mcsqr,I@U 45|EY4UI x3~$%KYM,S 2&n^JRd(jLfcQ)U5Ĵ3rc Kl'\pr GwޡP(no.[uA7,ah\y׌+dΈ+ٚۻ C rV+oG+9F!qwX>UhT_>W4rY-dIɢGɌi|'D1b4)U ->''=$!'HlJF|NPPϧL.{(]c G9;& LAn3rzēOٮQa\FnȆƫ+J95iP)Z̧c"_>}F(hk |%E""I2%,# >H"bI՚\77XN Ϗ*{->>\G.2 _p|coo" Mo&n6ϾCr2|ߺM"Ll q=7*lbYP=0tFǯOKlu7IT6T1IS 8=]74P" rK8l7"1_ۤV ݀4(up>B.^M\O(X+v98N,$)nq!(KSifZq}}(A(L&Ԣ.Oiot U(twkhIZLp{"ͦck|Aiȟ\qs&  v)HHIUcI:-WϞXO9!"x~HZg0t\4"EwԺdIF, )j2G|Y)ftaIehzL5 CQL0-QU p JyKSW&I|pE<}Aex.{!{zo}cF366ZY\__QmVO>a6sxügooYF:5b7ep jFbD,c$aggjI$)$ɬk./YaU!A|U Q>ZQ ?XX,JhlR5\]P+iZLKW+ OOYM礎Oe.pByr+uXVJ%vvvzzCeVxsw|;cF9IqxG>_ٳ -.SJ6 軧'@*N|YV2^>e1\ŧ?c=ﱈ1kgFEedID\(4U0E"/d<sCXxtR> oLs>CZqjzxvh0$#9+TUn;= 4(W66ut #g_\Oq%$)p_À$Kyy|E5f]HJjOD&Ct"'@u]L`4D1aᦐ1%]ag`E%p,j{HAT $ \v6; %r1aPW޽V縜Ѫ>f^PU1ywDiQ{1g~䏾x$El4b\i f<9;邼!r2J9YxbVT5Ǵv˴%,D$,(V^˧ω3 (Q,0re^|sSd3 DbDA5tDQL@$8a<9qy>FSڝQdzrܿ'8Q@d6;\qEi4tۨ9XIDFjߧṚ "g9;?-e "vj^3[Lxj5R 痘Ic4%I"ʕ2v\ w}ӷk,+5Y"MLbT:&qsvbXA2b^f,fKTrflFd4Zq3e*h[]87P6.&bȺLu2п`*` R8Ř+ZS d+;k!r8ِ+'!oϧġKFŬ/_?ɘ0nP/k9̊QF:d@ 0sj;wO~RcFܨnݺk C^zx$<2LX/4+%ί xbѢְ2.qS+xo1E\^yaksO(f0Lgrǎv"q"1"Q [?c^#2JMӨayLfV3 Fd,b^Qȩ̖+\!c\7di ? LD'^-IFk!7 lק1ar |H#D10dAR$ R*Qvd4 Q+APL( 0.IK,2$LwCtY\4X(qJ\a@ qc%,0Q, шQDH2 C DD bBQA2@%`: x)h9O^GF ~{rYc\a*Ib\_0_r=׋lnO8{{{e1$ָъLqlfڢALA{wfk˓K9Vr(dY ÐvME^^bib GQ_ IDAT O_iVPT+Z`Tڔ7imlk&>eX:l*'LKXFY z_]M5`$CFtm~O9@adL\P3?j`!a("q`w?b`g˧̧SR5CNߞ"$7' ]ΟnSt4$v<8(?{^n푙+ Z~-o1Y:!N2:`p%)~%f>`F dQ$BUĘ;$  T]HVt4d nb¤?YLO=& CvX̧llS{Y.g=V5_H@,|t|=r_SVh7l6r|I*U^>?s9v.ku <)P)7)`ET@RT?f2SThry@ RUFWl#0l֑~sGȡK^'j|Yh} M/Ycvȏ(:4ZlA/,vXDQs)u?z@9o >}k,6_~4?\\$ /S.Еէ 3Z-zgd97Ab."κh .?_gT$yB}@C@ ^nmRY0U/I ]#j9]N=66j|/Y.fTKezKj2g}/Nh,D\{[(1jF̣kyʅ&[ɛϘD)Ocz|dXa&M֫t/Sʫt5 S3A'˥rrEIMI݄T+:o_0 *=M ALy? _}; CIof6qu<`nC"!e `g d8}.!* <J۷ocozwQ7 ~'gsa ":O=q< N2MlZS/X/W45b`zܠPFjLkԚmn 7j$g'3߼/GbKx ʨE^Yr ǏYT:BП) )S zo`:9X2p^QV->SCܹK>_ywr3sG .! H".,MtwQW8y%ՑcKn%ld25o@1T2FBseT 4U`eJu $(L(D)]ne{ =feRARΗ%3לh!,+!5.!芌f\>b%ñO`-)IYOGD7ng?b9 [*eCǍ]e=_2@dW/ ~3CЬ-&јL&"T ][*_661 f#}ry|ق| bFR2!ޮ9N I> ObY_ X gXF^&r09;#ZK37( PmTt ]%nߡjx'~BkâBdRjLsdE; UFD\$/یG=rVN#ࠛ j\R1eL]Ʊg~SU>ŊR@!#)An71tsiLTd9fr=B7L*ӋK&c޻CSTYESMN'Y"j빌&1o'oH>|vl:fۥ@3ty9b YɰE^yu' b*IT@D,?0_ebD72Ժȹ0a8DTD:]H1+tQتbj: 2L֫5K$9Tp|U4Bap}6w'40Um𯟼j~qFw47ڄiJhl@T!r i4T*HB]F5\BD)oW.Fzb>Y"w>ܤZQnPjHjD{n, Y-GV1O^e\S*n2Yx()TKE67RJ1)$2Ag;oQylv6crb]+,ɯmikio̪͌ #Y.bG Y}SZ}>yr~o`(V7: ,Gc]$Q99d BuUfqsWxKӴ%QfɃ9>>( v9`t8mWINȒ<0 a*xK7ٖ٦m]MȲp=)q2Qn6k{6ܐ #*5,0_,o6ywz+޼hă{Ij XE&>~q#$ڥ4"fi[5I#I(nUx $}.ϸuIQuIغkhq~zfy&f%A>\'պt:dxL\ {E͇3VscuUItn!k*icTtC`z|n-a2<(fдȒFU eDن:6TLa\E lv~xC*B4Abq[{{mZj&$,EK4 zwhɻȂ[y{#;MNYo ƔYLy?D-N޾`" ",nbhoH4WW7f3lFUZ IG(Ll>Qsx4tL>G#no$Y(@Az6c~5%.nvt 8kp|O>Պi |$hѨ Nz˗?K#Z bj04-|>%"v;E3pITm6(aE C`] =AfIsur[ha)X'?*~hfضM,ԌIk89?_fqFgj1 IPd&  "?PS4fMG(*u htZ{?+"^1]qEtZm?̣'w9<ާ+"I*]P<{ow05~8I"l޾xގ8( ?.*Y='H|[⠠2ʩ n!M UUH6B%Q`2EZSd2錷/4UGDʼ I!^^@ 4%Db4:D+,7,#™Kc iv:HV%?EFEm;!p,E4a 6.jwks c,cj"ɟ;./.0LY7؍&E^n;ĊnCE8הU2I9·`o8v(zK^ImU,3=WeEńA xqqtZjcY]O~ƤENR$~j wmFt: AW__"F5*MtMh/zlC5ӄjTIV ]W?_ k އm!P*c.ί>NKq;tI'zH4{{!"e^!!nm X/7IۥD`zTΐyG?ސ[vc̫/θpɓ'ϘnA!/R$^E(L'`6" @%(;/O.…3 fCR3v;O>5n@f"S9ۼ 4Z#rQ4Ny8"{)=NN?PO>#JR>~dqM'؝[ ejwM^PU%DB5dE'{CI\36Oģd\R#(sY PZ[W?/~mazy9faE +-MF3ޞmQPkxr⿞AwfW&ѳorLNPIqLG׹w YmnvS doآadjvki|1ڌc^|[dYep`>o 2zmưcLgۑ'@YB$/CFM$R<! ^l DFGȝbS gVT# |1?Ǜ]AQzQV@0h 7oA& 4Qhbv^c*~>ޱ^/owW*! 5*ULW)$"uU?CxdvɾlbD$,btol v!ns̿;)^~w1ay"'ƋEξ~zF0_P$ʲѷ?"JyIz7 1k>}NK\cfzNi"*cM&'gf+ҢhC9/ku4gs [Jy)rtpIV"Ls.\CM \w K* Tc(6vkKׂ?Y8KLPZ@ʛV$ʜ]P^² |E4:EV>I1XoqIٴnencCn>yIv;G@( *4 ].-oN9<:I26YprrE, U#A)J/Y`X䢈m[M٪فVQ!e -YZTF\\V~ls~§t iZW5 &&/+4UFUjtd$ibMQyް)SvcYω AHIӂ{i};_/ Zi! [06u,j9bUD)vQ5חԲoQfI]/ lw!~T- 8 u{{mg1XmMwF{(څn] Iѵ%ev5&!:Y2lFYUxzr9fŻwSƣ>mEQb:[rrrn9f>q=2(jv|Pc:UsB;9f?z_ϥQ?l!"cY6GcvYF`0DS5D4EERev˶|*r?±lmL昦Ml=9mz*A]QAPd/0lmKc:ƣ3{(bET7,Vjc&ep'w ?;dC4àJllfK\7SUiy.i\5F4YC)y1&r [t2͂*O6UFB$:E1zЏX|V8͒Qmnܘ*uNiYe@]P%}*d!W9@U,B^~oG$aHZh"Nӣ=4IA{zm8g?":Yg%ѳu\&K,p̗,s7SM~GYiehA^Ԝ]! >iCKv\pEUqlIYowHH{uVÆZf2Y)ƟK Cjt^nȲ$)VMYNC7Vb&lPB( ) ~ Q a\%b-A4X,\B/$3Thn.eqxpYw䨆Ag8@RUVj:yQ~\O޳p>5qPUqBH4iwzubN] ʼbd;>!J"Mozlݐ Ox$P۟I5c:7K7. ȨJQMUWD IPd%+!@K24FU\z% z|rNZd|\:v@7˜`9gYpG?b MC1 >|8C%ݹmlv: M" E& \dEA5m$di!H"Tivf1 e9˛rɜHųQH⟟/>}!GޖS4M*$L4-0BuQ]"m4+Sb)K5 KS EUIFI'/KDjTߑs-|y!RPT wh:ȲHg\C&eZHL\~jR Nza,݌usqo=y*dx$HJDEA],k,pxCJQ ׋l"솅j}./ۏ/ ѤL(MWY,"6ۜYye^fS:\e2HʒCG(Ҋ(IMWPdQ(jG{]$B@ CndEW'l>2l?n&a a+t)JoQ5( PU%(3t)Y%%)l?X[Xl\06 vbW'\O_.7uY,C%Wz6w=.aQK*qZqrzzEVE0,>^:h+tbqy%I{ =,@QTH(ݬpZPݎr&BMP) ZFl+,Fq$6q9y\b*MA(* F9Vf@I%RdI.+tݢ2IJ,>YMȗs h9;}̣1_jo}:ɘM+r7B(j:1s[67[s..|87'4A-\ܮ< (eÌ,C*e:q}}nYҍ{wQ%J6 zHKٕ?lr5eN;6) 0 ILD漽!@|E^`[wJɓ'ǨLDIY($+jJ F,E[_w-fdyN^(Й~IDaDdQD'"hFܞn֥Hr4A@* Y.kPi`: Tq4clJ8AM!N͓O.S5%v%ŊJ]Je[zN4vQ HwIQE%/^|>|XEQlB!U Q1D J32%JR!JJt(!2`e̽IpZUq.ʒj_'\]B eY^K8t ۲ii;mw_\1<:Ŕ wqrqwHݜ+^|]?'4bQ%(!+ eYW$5a"cP m8˨^"ސyKcZo1&b?heԵBfT,Hbhv7bN ]osrzŕmGfo`2M֋-fѰ5R9!Ǐc,no$UBd#$f~M]mYSu0D6,[D&bN zC%hJPPVx"KJD,tC'M3bKmhE&hI´m(b2ٰYyxA"ˌGwr?% 2mJi6^l:N[aAVdeFb8.zCE4ߏAl6͖($2pw.I#gWoL=zJV!.n6+.޿g~ufv ~7'|=?Ķ4$WyίondUr3e1Fr~W?_kwT{rFP -BW ΗޜϹ\p=q+4i5u˔uTsNȓ?MHU{ z}CEYc(",bUUFAtIe8J@(pH?Yl/q,覅 HnP ~LvtzM-IT*$~ho@"J[7z㑔 XJM%E'b.NI$*4::],$"<&+ 5D!05tfoL ߣXjE-U}r+_*]#f< 8yG$|8ᨋ6ߜдE*b&dJ֋ Yn98j6HR4U%2Z5_R\Vk} aT~#jm3(3&e[W_-υO~$* ꜡)a*5AXqHD, fӐK| o P)n2Ï:-ޜ,JbB #f5I ɑդ-_zLmrףi _~3%TjjQB)*TAL.TY^MX,4[nGUUuMMt.&+J`oGI)wӰGt4E$}%'f)N}A,Of+%X\d`K"Nz#tKc46gg J4[|Ot(|ر*YA׀; lM[nvyva2cZ*!ZQn "KDiMV+hM,.1EIr0]Hƽ ݈~{L;CR_n:<|HW'h\ dYF tA*貄&"C$ޟ#N'C4^| ɄIYHVMɔ}5:M(j.V.. TW } =tЋ"*~qC#Ioan U`&P#:5$!j%N+fYE,)Bn z@fz9$he@U,ۘR˜$ 9<:bǸq%-' |T$dԎCC:6^ڹ5d-Z+hI -,c lCF- f,y?!}d;G-Nΰ5v9?Oo+Y=gOÍ;ߜ3kʬ]dI(mC 076 ^tF ʒMP -R$CwWuuMYy;ǽ1Gy" ^&V9=[onq[iYp3bTt@@N⃭:b%!TUbV)eQ`:.Ɍ]~WǫWG\lQ)6F1U!&5< b:^TQ`*( zAX$z P 2 n7)!n0^c|2Ct.͟~ŧ}ޣs@uXgAɄ9 Ue246S(3UL$Uc\$yMcsp[P1,dr>f8#Z.PQJ94E.mҴ jOI ~9BZPV; ӂպ<-;$BNB\D. _yJW%ڗ "*ax1~”fCF1e*YF4F=m8<<f|3at3b1[Is3q=dX- ! R\Kf6[$R|e(S'# d<&LRJ`xb>R%*se\\N &w%9_}JH614$  X!*&iScNIT\]dy,8J04 pK:%I!Q %Ӭ4kNt]TI',FFv@,Fzj 6; 6{Qj^ʛ眼|N]Wˋs6}sZnYG,s>K ]lQt: C~BQj5QT5S"cp)REEbXh&sxk{fâV3H~kv272""aSUp!F S@dD l]d{g@Fɋ'8 Ĩ bU~ L"pë3qN&wl"-2^#'ɦ !dkpZX8n$ BL`pp(sX,V>X.1ۃ&e qj^'2oѩ9f2-cwL O SFk,,Wb1+@54E*+d:]*&ע ])#&ڗy" y lmԘϗDISsI nEee2T"NUW3IQU)$4t~ǔԛ5*Q" 2z9p( O՛~~79;:"/IO>AVL5|3tCj0 X,LF3fE7_cXWxTQep"׃F;Vu|/Xq]WdP!Ȗqc]D@e(2*o~YLȢU9e""^5$KISC1T`IedQLDZ(қ ;iRr&mQu yMZjQobT55uTCŐ-x"ɨNKFfkG/9z5Fy#T"+/`6ytǜ͸I\_R>zRqzqdQr*_L, ǿD''L>i^ yB-$E3BT"I>* Uh6THYeBF0u!4cs)Z IDATzӨSLoʜc`Ym(fhz Ue$^, T) ,ׇܾwM~GdEj5bL˒Nd{gD^۰%gG;o?IJz/^_3j64 A,ˌFeRDw\NP() &Bpct ~Y:`V5dltrlikk{*0t),P(%K$pEaMPIQc%W˔%%BY1yPPwlz:b`j e!0dYH~ARJ(yhxzHQ%~`"($q[mVNBD z嚔8'mI,X-+YNX],De@EIFec A " *@e-lH$(# "( QXy&ѬIEWhdy-atnYhQAVQtɐ+ȑj5jXryu8FEj[dDYɫO_GvV[oX>Bmq>шtSsx9~;\_,TY#ƣ%,"K:! Q!iq~~!Z͙f:>#]LT^̹Xw>FApyrí]*stǥ{!yK›?N5 j(UERtICRJTiE*BSñ-$F)*ڶL+ 22lCAU8t$qBRsײeE&R!qQiU MHE1M\S5!HGo9&,4\˴Z.931#4qL''L'B )n& m[z1 .CȾceF&TyIf;+q" m:)"JNarqḻt ,QҊҬDgxqb{K^]z(HGd*c`v hIHɻOPJ%/_PkSbd Hk%MFTe$Eo#HY3(bp~cjO~9GYNk:fqܢۥ()?ȲVFeaX^Dgc_O9?! w6/}F'|Dx`v88i)3>}蚝nw{//~$77l$E* &*$a**MDCS)*NeX'RR4ڮ! s2io (`wkQ3ԩ ){6BeruH#4JX"QP 9׵n4%vzQo9-`Bצ^w7Gǜ>G(Jf;UCq=\ѲTl&Ml[dp2b&FDF 6=07' zMݺd2qkde*x;pu=dx=n;@STʬd4!I g7LK'YNWrA,h<Tٺ[H*{ e~"(ZΨ _SW >ã$3~ kLAk iӭ\ѵm{JEX*HȎ7D<^sۖX-%^|0~C%/  4U( RF H[kRT4DET!PodOH͑HUu E̟R ]L}`6o=ڇ|r*"nM_8|sB^rLfhXF`mDYNscI(x-3W w*)uxYs= (I2<_^~[xۼ~I6].O,'zM=L ?AétQ0Xl*tt%X"Hs"#wk"Vâ$,r,  KR$-AUJ}QwgoEMibj5:6Vqi?[B:EWEƗTLs;no 1 W~ 2Z)_qwPQ .^|)UcmEakpv=d]X 9iaIU1|Dt0gIS+dE@R@aFêșȎɎ0=(&%E 2N%/)HIfd 䕂pxr26hm^?xT"c8 >{AMPVjg/%a5L4QyO9֢פѫ\/RۿހޠI`FCtTD4_}EmsO& ³)i+d6{}4U_1MwqY&g2VAu,}-L oސV|W眞/1V݇wHӶ?>4fiuF0Qt ÀviXhF d98gAA%QN#[a9fA9bz)!9UU2RQB@%xEcYrFYe(h$Zu+A#_awIg1Y U)IQ10"KBL2lqOX([.WK 67m*IjlJS1\۠*$ѧi2^xv@ɪޠK9beE-rM@TTCc< E)EP(qdV_|ّFHJIg+2Wlcsc}76x{v:WW7C~5aN{LK-6v?7gKڍ/ ãzEY!I邬iY.bnʌr ZOv{DAp,iJv|I$ s|?^ױ- IjX1 IYiШw98Mp3rz^{Vۦ er~vEZEDJI1EðHC&TTzt²(d %(v ?+yM xEiS+6;m2oNu8 >B)%ڈ gYRYcNl HEd4f`I&To39;}ѳ/Q`W5IK\d^]3?D]hG9޲5j0v ݇x%f=ZoNc.N^rr|b=bU-"c:$9; przIܿÃ2JJ0G&Knnnhwy{]pDIUb3B3AO)TU(@c[Ԛu JLIJ5$ŭeB{InkQk[hAǶMC"H /= dMekgwƷO<ὧb*%$E真8V4.QY8<:zjava4S0F$C & VY,:IP9dyN) PUu{}8։EV&R !9YR2fU<" d" b>BRs5kYEXIY!n(, KU;覈.UhRtDE8Ӭ#:^V#s4?)ٜ̉ ۔ʜ( #$A2^IGKj=^y($JRVȂO'}g8>[:kM|7O>fxvM@3-4H~LQ(A',ː1MìtZ)G <\ 7 ,WZZä1E"@V*>*?ت4YcM<-pL ]qzڧhĩDZhyLg TUQk)a" jg7j0/(*]pI.%DYY17 2p-Z]2aggQfMFԬq"/d>qԘhcI/_ (2VyDD8F'XNc ~*Tt4%_@څk*i! ZvL+0%jeA[mۨL$qIX,3` nhma6$&8z'zxDUT]eL UQ(Ez68::ծ`X*pK/f*k=:?U}v:uN_" r`ddȜ*9 dBtMOJJ'q <|oHA@8EG΋~F>}es5a"2,NaLYX`kӴi\_SfLJM|_Yn1ޠ 6'\M&|l(+ EXFP;b>1 $ʢd^d8PT*(mk)шr{7k\l,1#b;5Χs4KǔKӓCbOްq(LDөM_ 0$^{{ȚLVXEkSy{l??  :*L9[o9ٿ^ -=4[a˴ɲMU7jp+s0u(bz&+0y@\_ص&Asq")*vQⱜa 2n"Av%2k:yYظ-RL)EYu(rQ1u0d1ƛ/Xs6zP2r–aA(=5R ( ?,xp./dK66e_x 8ր|ֹuYֻ˛ 5n$u{^B^f$qyEn2趉`EBj8bWȺUR󊎣s'\-xsCuAj+^"V'XWtgwk:fS + U@cj(Ӫ!F\.bU]!rxxaXA}-N_ɜwŮո"[.ѿ O ?fC6P0Gro22(@kj~RQ)YRb\p9vQ&DQfNAal6 b%1Ɣ*P1j;ˆvIRŔgGc$:mv6 Ϯ]O^[L_ ?z귛YyFenȺABmx [iTeiHBAaYr4Ale <" .# 6Ӳ (ʌ!Y$wJ "J&يy8 F z,Uҟe e 1%{ :.G!-ytGLV,%5IB5RE!rEƋY ^9Ҵd.N#Fcz>ݷl٧?CDA@M&Yl=8W\\=a-,%-dRDd8oQe9/^``;{(~__0D:;6c9_!UYo:I4atsPVGo?MA\x3'͝'̳?!nuր`Ŋvk1TQ҉$ J>b)`.h Te>͜9ЩL!RUqE`Z^L^XD,c0M3Y{o f0.t[|t8,YM +/Ps~'os:]yjBwÝ;l6{ëN$prrbDdJ2V9TNϑA⽷U;89an1hKL}fBB^6K3-JII[ET*mH}z,!NUF;jH'856U)_vєhUFiRRTB`IQ T/c"VO|m SF-bRs:nxOVQV " dRp15 4hvŒ#Mr&uz^oh2LIE7,D̈́HyxTp,]Nc~| u-WKnݺރlmw89}IǔYIdqmi/$ȔAIʈǮo"'献.v.oF\IJ@ݰ~Qwηc5 yi1MYgL͝6̯!y}:e4-VIw@ӤGќ??KslobJ*MjQs[$Ii膆L/E3t Y=Aݻ f,$6tmrmś7oЭg&ɜ۸}k`wQ 3YFP 8{dmY\b.+/v, =8 fIY#S$EJaq$D }!磀rRdXM%#'$°J2ϧ0$n=b>ruyE诸ShZ2uKE?o0Ro]KlKl[ht$H]kA@%5Gatq1Fwϭw2P#N7Tx_|4K(6cPLPt4Ǩ< o8ШiycЬQ6ԽYdYz75ڻ{{gp !A!,J%6 alS[ ?~!lE;9&59Kw^YYgFƾ}Ct2  O8q#=7&`}ݻ6jZ zCF ԙ?_Ww;a+ yj6ˆhxf1S9w٧ sv5:$ks>Osu,%' LM[ĖKJ s|a"igi{,Nl4d:1_"+?^%QR6P 0r(,\ #lA/9 9j0?>`so~>UC돏8!,X_g,2}ī >whtإwoߦqyqA)wָ}_SnW~ʗ&)nҹ"5 - I&SGGGNlecMVİLDIb6`O?N A5W$R@SE66[hHX+MWxAqwVLd Ɍq991oQ[o2S*4B3ARD2jl .w5|h̋~,g|+?A,=yb1d<0_dȚAtKj.$'&KD iywHQ\1 IղpDU&DL%R4U&O|.gܸ&.(1ń H"X1sm yɌ4ry=BCC"^x;[2?/35Ԋ&Je dB^2|>jw p.ZRٽG B1, 0X.]\/j6 %~R1k>e?}7Z.wM,u.!޺Cghe4KQ6 ~3eoC$1AP/U8zuȰۣ~g/E۷1f|3 k׹8;1~`#"/CB1V8y]nܽIz<}ϙ]^N<-b7fv1ĮhL~](kEEfH(IEܢZ2/),X%n2mcE udIfވ];1i8ALDŐpzGb4a<0t.h!9ag4RłQ@a6R4Lb%2t$ "Ƞ`i44UJ2)aM,c0s1""g!"nOI} Y )X xxBGIoBżyp#J̼9/" GׯjjשVܿ0 xr?Ml_g'>nPi_CыHjZf hS-K%ΠZsbQL.:MRaNHyJ;ܨ!r[/0\2<$898O֤d:=n70M%3M8^HZ4!"dNfR@-0tjD)?bx1>4$!5O bj(Rƈ"\__4lt0]Fa{1.D4P% He9׮m04;  9QS.pU7ƜҨhTl.'>3GDJJPtp@Z|4f>[",NkorHqV۶J:dll CZdowJ,cpeMm fVry(hNFF덨 Fjѓ.o}s>{7nG!qx.iF1 4kْÓD9g}}r|wyJ9S$%I"ַ7謭r|o}yb1a%Ƴ?`9λ&S8EHe7Gx|j*A 3JPUwo]\Ywl1fkw%3X0UQǭ{ob>OIsS_"Hچ9q%/,9U}7~3HfݡժY#rvg:'2sjGJe3!)PT5 YJyA_')nmaWm^|BGXƣ g#ώI@] _,wa>,CN&4IVU7 ) 9ASߨSmՐY ?,~ (7=boA$(dhB.$BAH"dISvn/~|7SVьfa) ,,e{C\ޠQc1_A\e2,\,) 'CZkܹMREIsN<K#ߣdqHє+6w? eTZ2rW|YR)Yl I~ܾyMW)W+ymb"wsM8;sVfu\ywE?zLxe\, 01"$Kɭw~7>l``f_<  )v~6_͎fBg`QG7/X8EEFP--dV-)n)W]J%|BDt:M=)M0DTN&DT*~' ޸B ɰ`>3qӲ˜ׯ O)8 e]&9+G.zA$iU%ꪳЙ/֚8a>!2%!S3q{&/0.jj,DqI&fmdŔyfvIuHTm/t0d4ʩV"Z6DZb`7!CRrb9{~|T-:O>ܺ3.|`۔*M#"(Z 󸺺BdR2q\l<.[I dd{kIp  gNA&+wtM!O]g(gqpg~&;/.(|oK*:J%akۨaiGY*_OX\htJ2]?!rt #/J yHU,""DzpYd4#Idv}ՐTTǜ>{AT'D4fDILg+j '>}M#\8l,CWWT*2-fdN$eiҶk&RŔ;c/BRڵ a2w=m0U1 G6䗾)ӗ )x~iYBJF&D\fKsNϱ eg(3t}*9}*ulK{73Gu .. 0-bjIP>Ō%4F˔i0 X dcV=Gu7HlkJ> n!:*"3C 8;8L L!4[uBT5hLfcWIBX$fRE1t8`r5U-@j#mv[M:e,)ՋxqY>k[hzXk F1X^N Tj5v׈boF1?ڨI%Lo0hs5K8ai{YhL)L\ǁ$ub0"eàȸ7#T{BK#X.>/t_/FLC/)dPWP5ZY."DA'2$)GU$NO.D/| xryssÃp]eˣy9{y $SƟOY/Oh)!KZ)Ϝe 'bgkLz&G vD"B%乀e-rZM&U2EN_`\mGVAXumllp~~Ns,6 dF%FL$ IDATOg_2.W 2'T!V$b2F?OخHF=a:Ŋ)I* g0pQUFA \hr=j"H)')#֪t66Ujt>{rf3 Mf<}bƽ7٣9?>Q6h6<kU53]:xsՠ`_ L=ۛYO?d ;|m I)/_^F``*qeDI:-w~_"xN1wDrE]*08t јEGؕ2M}t;_e_DcO<9>QOc>qxk7ߢT4s?R{EV ;ؼu$pv U OR! YѨW <8>{.=(E$DQd>]=>@#UMQØ0U/V~4qENOOQfX+4 :Sv_G ـtJ^^[AwBBgm}j:aC"Ɍ%3R2 LYBd1Kx!Nպ?EKa/$)Se,aUk&ㅇi$JƧ}כ1u E6N7>u7nyi S*WxXRk{nZT(S1"_'ﲌ@Zp"PqGNCժOil4AJKA?gǃ&9t'Kܩ'ߧ^)-]dU"'#3Yo,3]>|Ϟc%6LJ,0lJlX(l!Kȓ91O(@.ʱ0P-$ah@hiՈӐ8OHHsSՈҘ\VRN x^lh7X)g~t8EE1A4jdȊiY (ﺜ# v  {IލkT%z>FRy.N]%8PC˜yyB&EkUޔ#L"/DTOI~ïTK_-ZJSW @J6łQm !hlQՐVEoc\!ys(' ndME {${ctl6C5 EYU O>ft0 HF>aŢ|`ẨNG,]`@ٰg EѰ"*egS* j  lagF1I&(iqu5t֙'* yI>yUE$==bIC8~j8YOA*LoLQ?e VRe67(+\ %Aۻ_v)Z̢O}ST*e$xKA{<(EQD2t`S1TAGD]r0wQ 5IWcQpWx7KU0uT\Q-QVe#H#b&㳌LS Y*B1X$*BN,%ARETDxIGJ16ۍ8IL5rF UJv L`: o4)8#jİ6u>xn1ę@^CzcDZէ5, 1Hf?vgZWrͶ@-\o9\)j<{t*T*e "?yk`7jHH8I TF-Χ . #:G}j:ьPq}Q\BT du*QM8d9L׶wX̀ BYSY`h_0lmi'pR0ȘOcj5a;Lp~&/^3I΃{ٻI[ѐױ*ŋ'#vRBVœxbYV1y4QaIʯxȟnQ2%t1%3TCTv:Ơw<"75*dBrD24NΙL/Fd)l$YFo<Ƶ-_@bosttjBZ$b[E @$FS`골LE S^s5P.(L?yz $XdCo#1fIYaMCt@NQ ,d" j#~[,UC/ؔ1MF!Il ("9^ㅠ0-D ,[?>\1)Zbz"$"BA7ď|j:wx( ؠhp|O,&cNqsZDi@گ~"R/< \c=9>W[e!76Fs='M*:&S*&~~Ĵ1<:c|' b?B)H4ku*q0'K6ExQ+Ōhi%$E |z)By|[< Alөxɂ aҟ!7w</ 47*Tm !#}H|s'd6v7)7$K̐(x.5DY#b& "&f3m9 zIa~7ُEL$Ю:-n9B%gh"ce&]B-a8QU&2r̠pF@RdsA0,_Q Y),Z&Kaƶ-4!WE|˥p@X3u쬱'SsDv7tO\N.]ULCBe4 DD$<& +EI%yA jEPU HDaDIh*&qV]Әf\ 3 Cө%KL)A"" |$~ȕ5*Dhپu8Q*q|x|:??bn8KN0lwiJ{Wb>3_ : q l)G>wvY,Ȥ,z}z8jAQ]CQ{vDAY2"je$1CV$DI"RTwECv(ؕ*Gg]^ )"eDU1= "Ur{v; MD2Q #,Q),DD2!%E#!Mtַ`Oݻak\g婕`TL"s9`j"d9G$*QJQntI37V5s" IeE SlU]R,I1roȊBAi ,r~,~o\.aS)7Ykaj2WKE8x!`eoqe(+gqw\N ΒhHZRP7nj0DUUn=䧿6~csА%w1Ꞓg!ޤ`T|;4L n!ղI;,&3<77-O_2_$(@\Ruxd`:F)NbH%K fRb$?xbJ M,R64Ab6]'T*6"W]łڵ6U f"*^R7u:bTKl7ۜ>z!vy'?ѣ貹KN&<_ Xnv8k7ӐӃZx9[F$P)Yln#YU>gg=n~ 1'}$uN`6FT5"QAttC`Hxqt>U">g/^PtL08}I/fwHgRy P0 ^D46 Vb^(>g :q<%-8'r} HP`%L!qU,0].V4J oxݾtAC$,Rɠ]_wN%wmU dAJƮ:%4Sòl Y,E>kkbM;ξ}[[WWW/3dgƊdQ$DEQ/!yl!dDP))/"d,EQ01Qlg&R]kW=^xs9q/Cd&ZݠkTyT~{klwPX3JdR=ef w2 >={\Mf9 \U[&I&blSe2PU]!7bgM@K%,)ӈc հ$-5kDB-j ((6\*D,'A`OZ 'p) ^S( :aYuRĶm5uȲlnj68=K͐~7?v؞; ?]=y[ ,E]Ohh%6n2qK7|dk X,p怋gZ779 |v6 =B{ @WܦnX v֩Z8ݻp+$" 1/4HB膈(+ȒJY3ؾx&שP7~k唪p<4hw?2FAy,`@eCE( 4ϩDM ${.깸 ymfMXj iUpLS<'!: SG.KFul!XEV`ȷ-A<9;GeEvEz>TUHU!&kUV8?=$/f1ª5eQDUUƟ=+Mgj4[-e`h2.Pr>S&~^Z $@*L~] 2_km<>ain(~h׹?-LCWn!If>c:cYeǧTbwDnjEx|:eTW-ln] YIDATX8^{vMP5Ξ=;Fp}eu|!"sM6H"Y0 rA~(2 Jdi_|K/bj =Q0qׯ!B3 #z.ӟ,OI\LnB3W&Ж+U *(o[&qc-s><NOZ @܉HrE$,S%Aiut.|" ٪1(2(8S*[ަOZI4j]L+'b⬢%HJAAFYt/O7vj@B"&L*#0g6c:f3Z* ]7𽘿}zĻ4s?2+wb0'J3W^W4/fUh,LK!+~{ե9z*r6FZ Ʈ)%g2Ks`Kj76N|2ѓ_˓K} BqIENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/desert.png0000644000175000017500000023403411346241564020175 00000000000000PNG  IHDR7kbKGD pHYs  d_tIME #: IDATx[m[v͹.{SǶ$/'DH\(" RTq,,E`F[(WLHD bG  !!!sk;}'r\~k9Go/ԧ/Y'ڭFklυ{Ͽ[/f,Ln* )r xy7/~ RJ qHFȠ `̃c_-5BDE+Z#0 Q3ww+R[?~yW/~ǾRPbcbz`pHkZ+0V8?^K`^_M)M k-%GP;@i;Z*)1HmZ3XGɑ~彽oK?m;\/a2XHψa*MVL ;8+"-0bz9QJBk%o4̀0S<ŢD7J*\/i;~ `@iZa$%ea.ѲdVcm'-28S#9) aĐRRdE(Rk7(%&8:@EkKk/=o\-^%0_+k[!FΕ {@푒d:Vy||`]W60NXhU]8bBKEjIKv5Kk G=zB[>g/saD邲,(Qj J|T e'jQ[F(MȁT"5T" )%_WLq'j54\˲3J)3H)I)Q(1FȩF-SC˅{ ?X )w 5I杇;2-J7$qXHMTو16!5 ,&rMZd@b$3Z(=*`fJ) ZTΙmLnu(KT/4};0H4p~:њb[f8Ws@h% Fp"Ddn EU-"UKDI%#UhI%B͉2FKjʹVXzz$FYhGy%9Pr聯҃j[>쁗_i9W3ib!FLd?g 2h5cD.R VӼ> ]ax:tޘ M jdшRb#%e8gR9gJ aJȅq@T| CR >1޿nB\/(-&2#dP*Sk(3J)aط B4 M[Dk` eqYWRm(k9=4$TF@,T ZhJ~f޼}Fh MRsd4:Bz0+*d(~#h42lQ\8gJK!c)T>A1.(cݯ/ ?ͪ)%#)zDR+!$t%Rc@3諸b "҅y,cЖtx`r# v̺V{c ݃l16#NB 3{HpVbyf_#Fj]!q$1!͟z4SSf-J)O<<1: pC'9o#A⺃OO|}KxY 3+qjMBh)9HR# "KjhwUiqna%){{aDKĜY=)mM;صBvR)Ha,۶hh, "<M-xg]W80ZuGIH)x>4a&Ȍ@5|8vG;2 |G>R_7_/omux87| aE0t&7@H5X!hcBhOCRqz2M(#-V8.o#Ñ01ydFUHr#n+B4BND*/ 4uV2&{m!kgIB@ɴ]6qúiq)PRx+8Yn '^ /*%d<6ndK`|HK&Bv}ƚk Jj6Ju۰"f!5!gN+MJ(eض<p:=1MBPk|He6+Du95jW̓Aj 2Fm!)j-ԖΪ5##IORhH-ÆRh$} H@"H%#DM#ʺ?cu]ʲoZzB*X(\+I6<9nWlxDhwq&LJGF0;4L=R8(Bc02yLRa3EtJׂt!giZ9gc-!'ܰ@"<6WhR #BU!H*P ۹bU !юݟK`|oBZݰJb02ZJT8IvOZZI RZ !SJ÷!:rtC1FRTs)4>dB(XR1/s$r9<RilÑRe5J)sjǁザ%,n0/ZB3|cXsB# PiʐSd4]TkemGʅf+=(Zd 4ǂ3eA$h7/<4ZW`羫))()3ZG}Rp71I)ae0Ml.>CRDk (0⌥4MRS"JƈU]H)12\ֽ ?x"ڰ;R9GV i5WS%k )A׈3BbZRjFuЮv,thX A**)<.k.7O,B@Ӕ ʂjBjP0( 3 %0A֤ț`,i$ E#V#0ͤc}PJQJaP)gR^)+QRb2OÄgz,e?lbD˶α Z"LH NTXPsZC -$5J2iY !>DJڐ!Q|FvB6]SRX Dcept<!$VX"Ip\.'.JuߨPJɝ%pH,;=3 L?-^?te Y\)hyGF;%7PB+eF6%uRmێ0 #B4J (3r\Ikֺ{ d2扔uDq Βb_Fx6Bر%s4-VFc1|)7 1UEB)}o XJf,XԘ;b&@,ۃ2N$G )\am$RhZVhi-sRBJIȁź~IG?q>q'rno?ĸdaXzG8yDžZ3k7)l<Ɓ7 n8$R+bNP 2!ix)0h;"|BJMSA􍒙FGint^NrX45'bhNV(+F$-eō!1 i12 M)@24hPsd{MmyFk5J!׏ f,XR PA+^M==sgk;h8]=@Q:d6#eBj>O`?/opbzGMįt:, lr a|8n w4!n+?]-%m2y>HT9^! = 1~$&$>yOO~{uR12\4q>iBct:bd4mt c%AnRHz=4َn"$qtH 1u]9#9gTb| qк!@CځJ8,3ˑ[ڠn#bR!|M  Ng}ǎJ dZc{@r)5!$Q1_ia͌Rz°5|< jc_74<><;1'TH%n ZjC{W*֌%]hgݯw>A?c:,Mu`:a4)u3㍲}z6ȥ`\e+0xg%;Zk/+Jhr 7T>a$LjA#t&wXE]&0vtat !EZ,v@*J+|>bJcN#LEJi֩\c|i0VqiTPLӂ# Gȗ55:hw08!1VZUWrRie(J }ߑ=?+207aXЍj(-Zc Ln R P쾟2][B$jZVuy+bL扆t(]{tx%$Mww& Iil=[eV\PiZQ `* A 9EJhBVB]0wIƫr8.x*>nThSիjA?:[ZEn.}jƵfBHP{{)BBYVU+m^\/*;WJs|;}^4P[%Ucڒ?@MR7u*ȹRZeg4$e5MtBi-bLܐPS Tel3z 8j#n&;Q[ԩ9FCR1y:p={ \pF ]7> %.w"ngnrNv4# =-EkP T-xg!LJ{{zw=_iS!i`D 6#_}/}`o-X0 Z{Q[;3aԌNӪu /ݹ$C?ŭSZaZIe<*AB\v&}W PJ'UihєD 9tz@Ie-9%4P+5Z.v$U9]VZkLH]!x*!n7K'j%(1uIk|F;s$cn$EZ0iۯ3K#| ,d,dK0*Ѡi,)-S[!8_<@(JNH ~_mZzCLh-(7f׏:a9Rv+DžzsNқeY֨Rs!1#F 24AW Fk7l7_dBrDʊL=PCNh{ r#[ީ.``YBN)6ei)#N)%BJN)u/*)==kl>CDqXX}"(1`K=AZVn&8SWhȭr[MiN ]+V*`1R jg2SYB+6@=J49VJkFI];^Ц$PJ 6V1/S a)獔(QuSw֬MIdgWS&tպ{T/Ϙe[wdhm9߱Zs}Zk7:ZѢ[۶H,73װsfTXp4f5&HMbƑ=i ョg+BZrnm?=ehB1o>wGR=|X Ue+&FYT!c5˲`-yi2L [ʌ!J5Zީr]w ڑIJiфeK=NK^ق'w}81OANXS 8*4DHljZZW V9LG6QhNVTzaU3h!b>zaȚi}cAm[on3fRɭe[+[\vT= (7I%"(8#AxkUPk IDAT  װ#d;彇#B;tQ|l:-|kQ3jh$vе\E~ \BaXOQO _]-]*)D;Z*JS"fqqJq?\ZB;߱nqdp_Yq)%8=omxp +8a# o}Qg!ĊƛSq%([H<.)pY7BCa7`FP^ɹԌ}X}]_~2{w~b'0Lw8g7g*R4PSJFF1 Z"rHy\B,t (3@PBoJXUۚu3kק5/3{x,QDP ug D/_?7k>?3wћ*M 33o<d:+^blbJ621ͽ UC)pCrA*C =eNr9],B;<F+nXӉ#o޼AIk岽eZfr 3 cLoti! FOJwy B,ls:y5!;=ր/a9V.]xK?"n,z=#0pR+|nlOgU9>tW]'0F[יP7ReM(-P* a4(R"4 C%& !4j)0*=zjaܰGwmXӎpyFÑo=w8N>3y(IH7.l1[8:~35 Z҂R5NH+6֐R̤0C pr \=V;޾},khg+Hq/eLCP,α+Rk1xx>@EzE03!DO8gS' 8_Nư*I菧#9P+947Q޼S|4{2M=_WwtU:bX1 mYjDç2AjMO/ҝ53u\B׏-5| ZsG$˄1Yh,Iشq֒B5K-(?\ YqGVNl387TQ2;K j3\[&\R9]Rҙ21 )*)Y[?_kmi0*jI<߱L |j lNRkOУ2T=xzz+ )W#Uΰ/?,\v*is?"<==1-#2s:o,}XnR*.ȩIz:2j+Q?p?юl.!csdq3Ĕ7*ZKZg_;3Lwm(-pB|@X-Og Z*^~iJ&hTuػ"Fi|qCwl~ ީhH׃N5$W^ZZ28{!H[1#KƷ"ɓC.[@Yypw>krq$]v,EBL%szD|w+G@X7Prb,hCnHdLu$#!E5k#Dx3>EbK81l'}׾h-qV.Zͽ44pG s?c7܏$!!X [d=>$vl3[M5wsQ9|eS03*a7b])BD}XXhȶqQ}C.-< U`2!J,_=_k?N8,˓L[|Z`M=N5-ccb 3}+?c EB!R)lB(T%e(:}ey,'NیhK6sr&ŶFb)A)ܸNmS4}K8T$*!f54M'v=L: ƎwӀqP~ Gՙ+Ҽ !,󃦱 $1 =ӹ [9zVIȲ,}/a*ZQ@Zkf~x ݌g?6H%Rrg?ݙxq}B*l;rڠTfinli.|2h^?PNL]t0/m;R=!+A֋}tlx,Ė3N-h2N@MJ99ʉn:+C6L *v}PsFA3 J..Rs]IȑѳRs{H͕1x.u4Qsa[DeU @+R9H |™_o\^d}}~8KcՅu: xn E+\2uWbi:uGBPCa/O9-U˶ET^ ziE>@ͤ}k#rbYJ^6ۮIceZ Qnnm;?Vq{3?y.bL}=sT+]+IY<5! R"[=cw>RHVF0V ӴחEC;_i0Z9D>kG28iZ8-jKQk2oSZ"ׅAkZPm[iKX43ܟA)a^gj.YǹH>:Gڞm m3Y,e"/=9ϓq c䌦RhASEp^N9l ²o<۷!cbB ?9Bvlb_[CRc#@1Qr&v’V8=Qs1\S0 eED9->0;Q\xAA(y푂vc,yzjU4]˶mO,#v; 놳 O]C5Ulr5q#SJxzI!چLF[s] u<jDBla˧+14Ms!%-mc^fs~_M+jI5FaB9 Jqh-r1*k c!kH%wgrA^kJ.pr<8cQ_Ɖ.^N (Ԍ1d[8UC4#53-~C1Ʊr[Ѱ2u[9^iuTiRPJ+Y,+%熘߿6R{8OS|}+b*J2לݙrg1JqFB- 40oAΔGi!c^=fR4PO1TMcdX)ӸD|ΨPEcx|<3!:رʆlG!iI>5= 5v}iۆQ m-wq0MKCoh8\ P( i(͚+kĸ{@oߩ1iBQV db թ2'ibb̔*{9CdlöG-T8eg=m70Ec~ʩ-Xj;?|ݱMd&r-(giwz)\ʉ]mQp#bm/c#hțh~,+)j $Lu7ڦ#-pRYR~8CfW/ͶKjm: hFuz oe|~=5mz44\3Z<"</L棜hr.[4%e,dhEQg8u?'k %ƌO(0o3Mo)%wKZu U{!o[9!J1t %eu{>\ ,2XױIal5*.#Ni4GY}YѪbu*fpylJfCYCJyY05BVdSB$HV۹@J@7>}~n /ә6plTeH%sբlӡeA"HHcaiy2BN4@IzlPbܗ=dr-;L@kq($`,YY'+K4NןYw݋<5*.Dd lDo)Hs؃cU"ś1@ Fc8g؃'$XZ0XiE[ZkǑuیk4mm㾑FeؓIi;8*sm-OZ[?Id3N [˿\rHB;q\^~+}ȵ76%Oj.PUd9c&R2c[⃴&d:|,ea; /;KG>hgVɠ%3 =1&ָҵ#~99.Q*V9OBk|g~bm@w|~bMԊ{/~ *"Tm4< >f- w7SjLH";yPL'=L2](L mض@~`ﴶ71X+1Y#òyQ\'C6y`m ag[%NS뉡oƲȵ>¾zJmQI8B޶jCN}'9UiϾXY۵u cse81%0a8'좼FӶ=!r﷧<U25XH)cwU)85 l[vút:> Pp`&E-Ve矾9pS` *{"ޟ\QJ1Zo=1e{A"c9mcWd2~s:}< Ѵxg/a脢ص m4rɽf/HFaEK PlX/S;|+u 1gdyYJ8m":o}sdRb\m/W막R#_3C;ʍ1\=bo i1աFߪ1y'}'Ĕ2ʊ3"JiJmVt2 tj1Fq (EEANP h) 'Eci:j^I1U+/ce0:Key`^=vro|.dI@l<[]b |~yy{Ef{>}l\>]YOW?3V ] J:!)JaIyQRs> `2T0ơR> IDAT*QyŢ!hZc"dA.^yg1WUúg E1oc\¬;]#U4mJvm9_&ZI zMWqypR hJ5K~:L6\('{; IT%,9,BNb LjXF~.XH9chur S"l;}T54V {`5sX<ڎs'p U_:3SxTCAZ|!"}\'JITe>(CA* '44tZo+ojéطq4]k*2:A 'ʶKdr˺'ƲNP2t#p]{h`D'ZСu&¢1ubυ/ĶybHTo uP5{Rrݢ8ja ?ZD F7I ʲ1oZ; *߼ 2Lr%BLTV,"RJb2+*qJC/E:eiT꜡ieBq` *)GTk6y¾K#}FMPj%<4jY:œ8;4{߈U'!R=faoUů>F?7}?rY_H'ъ=,gl#`~]0-!'03 'D?]2Gwsdh`Du4UZV$|S{X7C"@x-he|:lX=8Jb;PDPÌB)q:`2:rP[d+YZ[vBiP$~:P߉ G"_mܟX໎!fPZ|,FRl}#4N,1! )!<b3mIg!Yl }KƳ<*@:cEMɞk5GL g)I c3J=>kK,ud%xl6O33Y,&Uժb JLBTiw( cS#(mZ"FF˲HӂWJ| 8seYY[ĨX_^Ďޞ[zѸ\$OQv٩IV*KJm; 90٥*a~;=6:3Q{痉F߽|Č c"\.j N2ϰϜ")gӔ,!Vv/y[pًfNEiJ).}=ȦƠ׶Am_fԚHqzH;?<3{.ٖc-JZYt֧0BN4F3u=N)\Ɖop NmdAN]5{)d1$B($D2b =6=EA3`]˹Q_KU)έ m/}GB.'14N; Ti99\Y6}6C@Zc4f OwvTwNH4\"CqԼFIrZTcYn3ʠ利bwc$s]pm#sK3hTj-iW~ϴ}O?t4Za{a: >c8\/FgTȱ6@7,uI*aƇ}<6ܞA: _Nqϙח se&R1%Һ#>P4 )ztRS$a7< @<]78~Dre8u&Yg[B öDYH-i$g>ob(=%STm{F6kk{R] a!`R[٨LZΒBf/*;aߩIcFΜ Lׇj@w]'9i,98ֳ+˜hzu(ڎSueb8ct%,3Mo>TUư'z2G iyK\+>f2Y:CgGq4q~*aq)iAQR˾*lq:wPSIE wg0X~ƶ1qP*c٨4qYqV@s)^Ux`_E^S3.=xL.e-RZv| i,pd²9 @ZD8\NWR *l϶/Ē×/**mW(Kdo0Ǻ1e9H.*^N6a%cdě%jd<M'J]NP@̊ۃ4J é8-(D5i>ӵ|flO}5gwm5 RF|tV=cO!sd1#nI0-ǝ7W>~2G|3N/<74_Onoh6~êNuQƩ% ʬRk%$OjY4t# Jifr"V(Е}[Z~(6P^ v9Wb)8߭>E\s*(<"edc"B.R-(N%x<w=,ϟ?4y>BX͗+o_J;ya29,oo7Ӆm$,vttb WZm~P3 eљ[x-mlk0JƜ׎(*X?}5.T/k^BH90QFPr>P-_)U~8+J5J(4z}kr%q|0 0#S;ZbiFP晥.L#(KGզM>S_aVw -&Q`ڎ=dS)!=gjVy6KE3 F` XB:M|b"rRaY*iՠMe (82:Ʊ|0UE,h,'޺AX1* /0˾Pj%"uh}>!>T;Oh KYabQr>qM/9rۗwܥg&B -DN)Ųn'QJN|NWC ׉vR˲^t}aQvZjeú5U Xp՜Q:Rl&(*B4qeheEX"*U䚸oHU&HQJA)cI)큮زGǛ.ky+(=:!Qt{-2NZb (cѶj:YQ1i`Nl{*㋇RxORbvcWxD8O'zgTTTSP}E׎Ɗ|>\ x. hQBBfuKݓn\:VDAe#(湌mSעʯ~z5 Nw֦RjdzqǼ<ΝQfsP߱AD؏mVD~h2 y1/RZܹ/TĹSAiYP:4mJNO-]'ZW*aIǵGiN۶8-IvzJAtc'W7:|!mQ(J6a 9QS%\!\#9fr"TE YjrLQ3RQFc!lZr4>d;mx.J$ąDL |B />l<+<9~n )RL3>l]ϾntD;mw AN]'W6SJD+EMA`vqYDvZ:n"ŰʀYlc7;FY`EW=TWiitpHɃ6{}\v ĶG FS~?Ml\BcRT*ѵdiŅK/l2s8keed7qZ|tԜ\Ʃ`ϨgF-9r>VFħuh^o8]la׍{^>RR9Yk7\8,wŊo}c:9C'YHN6p.:2M7jsot ư.OQ jh4HVyg T (MS^a9p^X6C`cV~_i+zg 2To[mVlFMlɑH5R u%"p2/X54cU[c|xR ge=c˶<wOb{0Fj5kWW\qdFq:ei"I!kW%[+T]i;T,C$,t}BQEJ/ie-kr@4/+7|z!yyy/PύZO&E@V`˲V8"1bm )=ѷ\Z) 6|_g;)!Jywhhd {no*әF;zF PՀ7vNJ\^GR }"fW*{>?el.}_$mѺ!Vb31B7m"yg0g~_4s$ l6WVwڲHRrk)q;)X[q m ,fɱ9nUtD5`VrNL#>ӧ?&ޡa Eb:+iN#ζ>4(/h0i15):Wü11;g*($fCLWQ<әq8c C j3sNBaoyyy;U=zҌ-TbIwdl ]c=%RľA޶E("vJ~lI)qbN)jO_^x>v`>1q481F6Ay˅W9]_>jt={mfA;]r\x}ϿK7a Iuo0huEYduh s5e/Z2l"P;G$SWe<|`$xUnb;mӉBrM2eU/ "3o~z5=Jxօi%Ĥa[V4#R$_E5DرAQdECJB+h ׀$}T%y黑}5BlՏY/q"01{F۝eUAO_>l`ZCxgtp'5moEVPS>xm v"= 7a&Yv2I4](0@I?۶q^1mTa=6P A[FEm> =lk:b1)ϲ觎\+a -v8qQJz~ꚆjUh#ޣG9sYiBM(IW:˿[.S`; W;.g*8OrRB ~2CԛZ{ZϨjkWDH&h(4Uؓ -?@ QسaSlѼ{ΎUFmc؛FĚ7~SsdY|z9t>01"Mb:6؜(} ǝG5Pc7jSyMCEYs],ٚm!ȼn_0#VηǑ>>]?Rà "·/o~C/X麞 Yb,{8hJiؕ% M嶓(gX/,[Ȥ*Y}+%N5 )vr`oW9Fr)4q(!R6VpydpV|p[4^e_)9M%t: j2JUZ%@@a[fԆ}aFJi +k T)7%lsbzTӾvʅi˳-TRm1pW>KVQ1M=`1FYENaVih@-BR- 3(U&Ɲv})dVÀ0-/_Ua:,aaI ۶1s,R$41MGd]9(|l>H%Rbz\\ TB-A ;px<)R-[o )%6qRDjEێ3׏1NGsN\>E#B()fە_Z-8O~OKMc1 \wJ SZ9#òUZf!RJp:NXq:h)jke!tHbԚJ?$5Am{bnۂ Kjm5rAHKqR+?{tnN'euz{6̷;=cϒvP1!fڋt_f<",m!w_n9_ضvt>4Ol8k5=mqTxxG>}t<+81\8ȩ`LfZv:3N6v5LL(M!$ Y4‰i'º'mh$nv]s_pC`ǂeth|AA=n4δiZ DRu\xr*90"ÆyHEDQ%OZa-UO}mؒr<.X8REtl[;Cw(ϼ]ORͥQ@Lp8Ӓ!$r#aȾ-}bܗ/]hm{&d05ؼptoN9qBb;NTsph*b}hZPFEc'Hqll`!7 ^BxLִ<*D&aAm&v@ >>/T-9O ~y}RFr0CJʒ Ez( !`]WPa 5mHIMأnZ2> mkzU} <\$ zѦ`x鍦3/OֿW~:,_ *a?$81gģ]$m2>&z=><:6kch !X0Co|g wlř˽%A_^^7rꎷ-} ෙ8k7ڰ rbeR ]oܾaÞ[ˍَ7FUw??憽|EL-ܛo8;v4ӐKYkDcDQ675VmUc~(ی_jZ$c4j‡v'@}`io$ۿ;Ѭƾ_ 6a>KTExC;1wzk P ݁ |})J< il]m8'vT:#UF UpLA9l9 }PRs3`aC: @ !Ns:. Ј!DSDҒ D,VUH|m[i Bdh.f%-%,LA`cT[,kӆuH(S6ؼRsĶlZYڛJI˩\$p2˗?c~|Pkvo)FTJ6HQ;ά~kz|S٦̨ΑBI4oiZ/1aÞy;lj#dz\9;ӡ5u8A!;}9 y:xc&w@=w O6JI?pÁ׏V>RcK֍ { H*1mL˶Q"?5ژI(/WRym(yH{|}}e&h\wXJp_0N\_R}|//IsP9y:Odg]#yxȵQ@AIגaƧ diG-&}88t8;0vtiI](~m3?xҢ lOaH[Ba1}J7L=10Pk?*[ [GCiC[~,H?t@r3t'.+*:u|||p8x>~8 {PU# oF9UrjiJcn#ext'p VJh<=q)9DJ/|z9! MP#)D[V,*%#UHEM dl69Gu( J'yLaK;--dg K((>֍?Z9r b(6/ƞ:}oJDcd(H)KhXg^"%ohmO6QѶ~| `:6Ra%O➹41,-wݍh٦I B[7J4=q8tNq:--iSa{,6glG]Mp4O~PG:G֥ J|S"&Xb>h>Rms<#FþM#s5-mRjtZS%OgRZ"L96IJxDHpQjW;e|zy)AVFk8k0ZOnn ԴnKU#n߭Ro;$Fp@)DS)2PF0"̃pP+~1F LÉȂ k )F5ܖڴ~oq$)B̉ͯZ~C`kZZus٩1?~?Զ9t{nKgx9Wr w|_^I9HIN9r H"w Xq_t*ؠlF!JE O_Kw_9ьt23:.ǁR v*2B :}F%l<$*dMz\(sY}7k7m]xݙ%}u^N#׷E7#ۡr仿G(qwzIK rYw>xڪҧ򁲢z0!ľ'J(!FC-{ůwSӫ9 k+ٿ]E/_ʝ4~HZ&H1>M R8|}}%ZJ*y{":ވ1.˝uRKq) 6O/v>?ihLeɾ'ow|z>Sce_6̓Ҹ]^Hƫz:OTe3MÐcD4 je;$͠r~b,6R'J\>&7fג : TI|wRHavr-%P+3 ŖvlX%{eeϬx˼hrDn+gj**G+IoU7ӄC>ЍF|_)-(oM.]/NܮW|X7涽9*dǾG5jf;*`;NľUsAˮ-+`[uƈPR%apƱ- lB Fk@:4|JESb]BBaZELea7 4Z4]tz`IW3n`o|ܮ̾Д9#vFdX+~Hʑ[F4Tw&|R|SD)&T1c3Fgrl`*Z$[i eJn'}4Sɨ-ڊ8 lMIdYdF*k}k)=R rm[W=qm=Lm .-uřX3t "DΕCGޢ8ɲE fvcUl~mGܾŧ65B0|h\IbN\PJblîK R&ϙfj]`0#'Z`}ƺˍ}]ڠlXԺ#f:ؖؓH |xaY?Ep>}׿X3l [t;9zӁӹ e]:3R=E:.[+d0wA0vHZvZkc;&7jړc b$mkin=ڦV{Hͼm] ^ZJlt;*!Q<Rs^[9ymgiߗ3ϟˌ2=Uh'uY $l<^SJܗ;5k [>4ꎱm@UB{8) !#]OH ZZB+"SATX"AH~؞X*4̻G<\ 7*Ft&|"rtBF:`qz~B$EZvC(Cc-—(; cO>ܛ{Ort*w-Wk<㡇#*[0oClR}syEZ1rH,m;+۶aHL URDu[(Y)RD[*!?8]Qb(a>0P76FC.$"{Zrּ}XJ˶^34󺠄ٞv[kZL$P?O>@- b]<9K+oĈ-ib_VBܯm_>2}}XHMhgsċJ0o%7uAJ@dڒ4zm6n5 H8qB%TNPӁv֙#?n9Pf;Y:{&%Ķ5 D%s;n]稵0 -c'Xj,I*HaF}4[e 5D r7$r~*MD (u-/#d~玜=FDC`pN0t@0#c9 䰇o21Dv1!Bc{O5yFg0T"a<=ڏ,/TUn\!SpEKžm "*liζ+vϒƷF 1nD ,w8EG[x,%J͐Zb%)2imsi{?Am>,1;Rr3x D1o"X@NhDՠHz<ՇIwnm@:;?{yryç 1>i {\x9v$?`E̟ )EU#ۖL%a˞lk@=ufBf=qˤų͞e*ێQm`{8-#*}gx8v;08iT]a:hΌD~#g(T"Ćkw:)9t8ctc5xmT!4>vMbY0Xbݴa뺢:Z`twXQ1e; PmJ᏿~r(BBEQفc˯%E;JFr }s) 0uh#y~y4R;ĸc圚 %^ ,Uj:- v:bj Ύd1߯XkPZq[tc 5ھX#CZ/8/Zdw. ?&!;8O$zSdt-\F uzKA@|ֺJNٟ>po OGMطf-Bq&$߼, OOOmd#cw2]g*% J^]9Rfr#lɓDe11V HGGsӹGjP5 Sc>?tHEC!K^qFQI>)BH &x8 DV%!@]ɄR,)*pvd-)#Rc'Q|:LM1<@`8JJq:YŠc*3P5mU⺎};6Ȩ n"wy$FNLHO?}j`:.mvJ7x^'资+4P3tt?rι l\+/_{D[ӖxD T|~:֥sm7c?\hFkmȧOϬBͻ1nJc}:㊵@/x.( DF j~?Ut!UjHzL8*)` UT3#y+ZY6 [W4P5fj v;t@۷ dVߑV棫QNʊӹQ25gi@J"LK u N%^GRDBuTc: DJ-g:-8ZmڝAl9O:m1z,n5(KwBl[CRZ[M 6TH)WʴhJ*\;F+YΦ+6_>P K$)2ֲ E@5[^7-D:I Q~n^OZqCߖVakr`pYÍ%,;4cT_3V\8Ml}[Юo3~ۅiH9r~L~}N9reE茲a[t|n6 Eoo7ס"yz:a݊`램qGa4(IJ0ض,4Fo0T3l+JjDX~w-PBIuq'My"qNڸVÜD#}nP Bd8|HXWUS%fE4t;4ĨuXG4^馂hEIsT+AԚmݘ Rw(YI)`aZ IDAT2Ase{kc'\ro3]RsGjv /+bc:JM"WE K|muc~h" 3$Dj)i|iS^B+ko#Z~ڞ2tlRQ0}'c{,ۊ6tdV(%9s+{(Pxτ\ uߙ/,KB}UT 5:(Xkڸ"aB z;EAo5<tڠx:G(ۺr_Wn3RE 79_;+sRKIY#F %+J?26bL u֠b49Bk8H CȎs3apH5p[fR)!/L#Bi9qT eoqb-XuiD_;>`JJjNJe٩b,!7(dQVsHamR[H-gjTP#PsHmt9Z FqjSdC{RÎUh-Ngz%y>jSU%戓t=1vR[%6<5M'u/9 fiO5d]򎒆e|xb+~#G.oXk9:_>}FB={n[gF3HgζťTi95+h3!fb+4Dzf*a2YBH *@h#d^o㉯[#f-o7C^u[{OG*Ni_=0m!5b !>H氅id~[9\h~h=e澛Rn ZVkOgGHd-T%S$m@s4hm ͣo x@Q5`cOیVkFJ\4km=)4Śq:t.r< ӡx));ip ~_0Z0Mga]oX uh޷[Urg9 Tlێ@0FRl2s% b.זy;q)h-}y<#̞ۅӹ-D)hժJ*^F &ϖ~wn2+R (z*@j8&ش?@6Ga( N:JX8(ݯLSђ)o ΉfE %rZl™~`QKvyh˗/?s5c_^:jyZ2OÄTw((UGG;}oΐs|lqc<>Q{8iQiIbn U@TJL)m1JibȄ4v8DOWm%Jčf/!&emx̒@u=MͺUJNb-s@ʺ+W϶.,IqĚҊ} # 5hifx~ն3zGJa\?eYnm+[0qVoܷ7( BIO՛ضiZg=7)p RHeP8(T\ $8pq@00Yy9gَc Bk1}G*cú27:e'B:J,KcYi >%bJ}Qʠc?*1 K J c_=Ӿq-3Kί@nFLFGDF&mV:əC72tG A UZ}]GJȢg\(yʹ/,XRCR?v5{$y& 4ؤʸ\wf1$<ǯ5g&uF$ Cz+۴q"_e - FUdR_,~8 BDHJ?>|fyL4豹=/#]p>0p$V 3ia8SǫS'ѪrS'RP9J~ %g9vC刲5 wQJl;mz:Kl5HxQJ.pzz%8`q~c 5 O;B+`VmH \p8 2r$ ʚJB 2(M!QY324t`+cu 䈖+t(YhO-3mK\gVYP|Ya 7C+Qn%ר4! = ?I>!@AuAJѓ6ONuZvmDz i~!e`XcߥQ2~}2mk-e`JnQ, I}ztǕh Jn$o?q̈́ƶ+u\wvgmX:Q=tS$  㣒ȗaipAJᄐ8ɡs$!DJDܶ;{}6 R'Kj J d|iВ2yxgR_^/7/@ ~}gf>L)ݟJwwW}g"M;W(5rzf l?'QPhUXg;}m W)L +CFUJj/)>%HHS5jbGXVDoA*B)h#;)cPI> Xs뺢fTPR B,\.7>D~U=qL{@;ͺMr'D5uJؖe*uhS*>tCL+ ]gb }˸ `)1z~vK-mhudu<|ՍӪl[Adn+ =е-Zǝ0:iE%)g˹5P<ۺ-aSfuߘreg>~B˷oض#%<#sa)r3řmjbPBbb|}ʷ=x2u 5][NE1]0]#_N'y0>H*=&JL}<+x2%0V1 cDc,wしC5&Y-h%90 ?."e.; )A鏧Zä`Zmd۾j/;ֶ=i](iR FsPEH~3>_7-tCMJfg=UE1}Hȉ $Gȹ0/= B\$թ@IЙ(??g:wNa~RcH!7=0a%CײՌ}G=Z}ߣ%(QemV0ɺL:?}LUzL +31dIJ_.(Ρ)>3;q6>pqeཐNR_9WO#ܪ.'LӃ07KPF2vザ?q'giZ'}r-}3 !kI,蚞nP3Qu}ڰ{v)EaDŬ6Nc 1Y[EG#)E4>*(5WkV2U49vhvHԳ7T}n1Rb_B0 <9V9,RiVR$RTxuYsEU8-tEZ$aƱ ̀Ԇ$3n>MCHw^QhW%kXﴮA MVy]蚞kΔ8}j7Kykݟ2Gr\Ce 1zm{=T;6#m*5G~ރf[ 3Jx7B,-LL{mYb(<>~{ %GEL;J? {d7ھ!@Y2Ӳ:r!@3Xzo҂f%iKkB)WũT+{>?p>8 J :5Zu~GQ1'P!k cN% ÙbW"aCIuN$YW) 9TnZrZeqVw˸ƑOrx!3Ā.!-4!sH2S$K4mlaЦzm=?}V쟤k{ Zw V߶yRxgֵ}dcIFNLV7~G-,J/d€m1_^V"E:PߙR]LTPRWZ#'%e:!ȜV}_ӆ S3 G͏mdͲ%k}RL :ܴ<iA`T{vĜYB7ZNd.ӢÔ !O_ۍ*q\VrX6H>䘐P|%Qa3$dNtְ+YPCe +FX面C϶Kur!(įȺm`Dwq}G ,n(!"QRђi)u4ъ؏lx>6HhSX wUwal]/>c!k> @X^[|J}2]@~3 T ;9RU utE}&E#}x_%{)>RbWB=FJJT/kPMm^X>yT$^4%+W2p\IQ1Ȅ1q9jB@(q4Cwj_ vۧ;VS۳N3[$!8;JY8tMS7Zsk3EָPO;۾PN! {sto9.WRɤTRҎ9>Y`2YeA$0T$4nqᄒql\n7cv׾yˬ\ɿ's_Vhiv]o$9u%tƖJT2Bz1_qH#}װRf#Ǎa8*]EU/h5e֟mjqg,?kӺQ0#JE<2>Ĥ>HuFYtdsϓ탐,~W~}r,{rY|Iǖ7"f*@]48h%h u8]'̹k1 HOi%\K;C:S >[zGߵho-}R,k2=cFWu^(VթZx@+8TΫ.I1QW^eӜkD>L˂uMHʙi]ybOmۃmbwDH mO()8Q560jɟ}0bXp2 qi ]3@2x#8t=FйD[}g !, {8u'yr}ٱ8CzPs.d@HŲezyL+ k-MU$Q$2Z| )cx "Sb'oo܈ 5dMѦc?Uf޶ Eҙ߽}e@XŲXmpa+$NVJ8#btcKUԎ"VSDv {Bsa_7ڶ#lEKczj{y2>UϚLg{0{d3 n׉xbVB4$(}ٖ 7]a|A]/8̋R;\Yq]9 ogJӍH7|,2Sa8}eę jNfϷ9 B ֚c"x(m߭Ƿǣ+*K 1'~9XS^1FL+a)߈9u`&n͞3581xŰmU=zz[ޞg{֜l>jeqDHr 9U:/'<IJlXs;s|&#ETRqs-l{¶˾\KNNt%UB¼Da>o|{<\Vc['n}`?Fa^ᱡBHdB3`-)z L0֐K!HJ9Ԩ3h2؊wV1chHX:[II6DLXg臁HEɅVN-`3Iy~6^NHY Tɉ1㓻%QZBm߹?pGHkoMNFjv:-5xM0X!L%m! )FIϣm smӄ;`P0#߿7It`jL [x兰{r)UjIEEtL+쌇H9q:\>躁we󼐳D%]3A`H[D Uwm%D&GOkmn;-PRFi+')E+nhH)!R71N@a[ ۾=ym#o5˼6n IDATۊ(aI1bBXz76HgXh-"%TmC=45!3J*G")Y@s g3|{+z,51Us)GAIIq1ͬ[$zYb~=ж) R3[ܧe$)HvƅђƼU6oLOg8QB@ڪ>N#84YO+yyΎ9t]+(~FϑǴ`xd#-F8BܗT/ʒ4#6R$Z|<&~F65H쾶6CRP|`t /)}IU*G>Dw5ՙz{[=+ZPZb$p<0/7NCp Xk]i+sk\PAJK׵1jlrVqg^"[L uFHǶۼ2 ׏+}CG e ۆ8GTTO-@iD#UCF!zJ>*bHP /=FUq8)N4ec]"d25tcN ?qA*Cwl۾!#PX0"~u Zhwi4cKS7M1u6]EX˯\#hڦ1i5cٖm!rZjM;Vq{kӧ,ӕ_ JHs9qE6 i,*US >켽}9emt'jvYVc\a wN9 jU1)p>n!8N"Zp|p'b<g+d]XQ }JzDHIq{w oo!qEJ.az<[̷—X)5>(7Hi,!7}vҵT>.6r:;R(p4ۥ=!EWm74 ű?_k?+Z>zyEۖ#> =R'^sϤliB ~CJx8PR|:1 ]?vV.o>~RuA`p8 D.P~ %&^nge5JAj#C B. C?6=Ӵp~9N":6 5,O,P}[s5Y{Bw쳛T&\gG#=x v|>HE:Dz]VM膎(E047(Q ZcmL%4mE AgIIU])ڴ m0ֲyh0ƾ]u]}۲O_c8 ',Hc:YZE_YВ5m߱nJiB PU#a82=j RqlR-džq;0ILӰ>3ZmG |~a<H)d2v>r:^N( @"x{9a(+0A@ ^:J HkgJY!jTq=)&BL-!@BAB)V"B*QXX ̺zCqg72]>cPvO]?KB 0#.iFJj_וN7L IhmzeY7c^VmYJ&@b< ev%X]Sƚ18йsd5%k̶t`h,IN|Ec$&!sƮ#2hù;r=Vqlq٢gZA ]q{LXԍ,JTS[id^ks~{(Er@(vk{uCjQG˛%z:Cw>?9պv[W|h~Rň>d9NXcYwl۠r0"9l Q~c~zvbL9أ'ŏw\Ҹ [=y+q_~{p I]S[9g\S)Y R=٠ |zB39x81/,\qy<98 , ,ҿU84MZZȶ-ķmCʙA2(4CPo8A4ΡDF$}rzd)4֐g] UZg ` Zsk1J $V:ɲ)#I̢R|:>Ce4OtI58F7Dӿ"/gBʒMt69dq{:rF鞒5=lUUH!)%9c]WbHx,WM"FÊ6-CFkm|Zͯ~'I @FL5}yZ N5웯]Y:#"QжJ'8 dkgY*4#Vp=gN"p|hAI']|V__/1JT"SkVJ8VNkI>aQBu5}<}ǡ?@zcqg>sRT:ʲs+6>n5M"_{%PJcNBjuEV%mPipF5uմÇz'HD-j^s?0ň`r$/Y͹xi̡:(2z[DZ1Zo;Ph=>X;_uq9 9mNdNGy}9r{m(L(IA=g~+)&Ρ5ЌlHKɂ%>KtbU[ !}(츦~!D*Iuj3ϤP!om`I M;Gё~"\# 4RhR(W(!~# g5S_?Rձmfh`304-+F+D)N2ad~ܑ6~hr5䀓P,֢B 7*eXuCtg m3+ۺ-B c!BԽ־#s ^PE5F\N5,@1>MC;0O (J`7uaKcJ }GgJJn%FOL+H"TVϴ>p38]3T e9u k7ylӴ_&✯LAAؠӂ)"@9ؿB9sR;R3kΉfY:xv(ww~}]9ziw=<_N\NJӄ ŸF)NL~E[M\=Xv@N t3qYy{{g 9֙|pgbL)"qb8վQk)$(zw2o*YIy<6y0Xq|X¶llضhU}d !\>s懧: E"c^6#E J\w\cmG i.>g5hTCsֿjx1UC m-5LRV ǁm Zdھ;X*Ѯk` ^EݡE"FqV@3)˝npئX M׳)$94HBh()~c1GԄX4m[aʺݹZ2r_YKq-6 t1D$y´#C4i|'39ϻQPg1#ágh%83A7A Ik]uYAYs;ʔ6Ʊ^{S '-ȶl8ae՞! [L4F"F cLQ2o2 RJuM-"0ol9s0af R+b =FB\XJ(HJ HBVޱ{ƴU 9G\q9kZ4߾t<4 Gb*RYs^y~ps8vp>=w̻OXƉ3É}Y}ә B+Cx9]_XwD%'A(jG\ gQZҨ9# pB[G(7ɔ(a&撸O3bk`}KMÚfRVJa{Z7@( n|"C˴qm ӷw|~}[HXCG|@i~:y\d6V7tFJOUds{^ڡt9"m&fH%y;j>Ґ1o;>ELа*/Qz+U] i )T4#&$lP2k#9IvC Zב]  Zu#cx`US`!Wͅ\"ka55ԊȰx,3C+DzT(yOPBsEbc;Ո:}&̼F4\NJ:txDٟw?OWlaJB68"ol◷63޴q}($ kit)E`46q\*|!P ŀvH("$yK&9205O\0ei_?< #\o7\c0Jӹii׵lˣJmΗZ*-APl>[DT2ki5U˯^_ZIZWƀU(B <hL֬YPiE+j4Z&j־m4!(As9=ѴeNTкihfV% SdS (~SDlq֮L)mML mQ3~ǡGB("&(TN'eviZkO _",B Hz]Շ:E%C3Ӿ"">, O %J b]V⺣b+*ʾ!tʨв"eӐhKJҊڜ|D$kҢN6áChC* Uk bQcG08֐gRLnW6Z7=N3pZYȢSB/t0T6{Z'K+5Qw0SϿg/J7hcy#F͸DtӢ#㞈ґS`G>|Hor}T.?Kb~w/η"(6PñE#?b.F.U4Brf}bmJsM\gLHL^VL*$JVdYdۣC/IiaB5(i*H --i<{Lh"CZñi8w=*C bi-}`Ӊ4kPJ07= u@}H ioA7sa8PbSiD-:rܙq@crPȾeӴ-!o$aPF b+iZYiqeǸ~z14C uqDLцec#ٖYqP1晦LaWӖ1#Kk;yc 55jOI1"CA(A">g;HzgLL|):2~e]b]=wşB.HV#ʲ{fl;rG,>pwtېS3,;i0 ⶓC$Q>.M[ŴӠZK64R D(aFnWU73V)D4PB'LJDC9>(9"}r:y}>=}נUf//OH)p}QJbVǎnpLӃק3SucZgmՅr>XνaJX$s>>"Hym9<"5M!2h?>ReC=m+ e\ Om^IBq6ٳ,c cE*ZflL=}Sm[즱l9z.GR.OFgZ]KY:5/o߹/+m.|'x;N[;9ȷwmBKŶn Yš  aD>t=t'm/?j5(ٖ- G)HCeu=U 1zJX%iL>_L ;~|A!ؗӼ T(}e%?\t [IU@c?BܯBXmX}+Ӵˑ?Յv"%/Wߟ0yX"T hxw-kޓsqMq3dA"tᱩV -F24 A@ÀG)y{u=V(bAisPqJ)q}6'h7RU3Ft:V*y82MS})A8w&_ :F^^HD@٪&w녞,`6]&RQU]TPM["8_*)I֖jF\Ѹoo4mk)kpzANWYBpf(IN*lF9v`g|i7"+b"1 r>Xy4YTKl4KrN4Ok޿2}uaqC[FȺcϥ-{DVٰ#Q1~t{5CmQڵTTp)ün|=C!3@H A$)y[*4\׉u؏emY `T;o~5xRc$$Xxzr֬d(mDf(b*ܶt-V֜6-!3h>cY#@,\sb>^gD>ѕ>y\]O EzT[jHѴNSFl!TjNiK@5 caڹZ$dFkBڰFva8\hXbK#VΧ}ݙƕP (zf yx=I^g/! auYӏpݓV+ZclKȁƼxu3߱N3lH+Fȹa33{Hw*rl[ǮOOC)42~ŸGM5\]@ضc6)PgX1cҚA8$ -4i?6ЍC8~FlSgǩp> x7@GB GS2XeQBbu+ogͳւ=@RHN{xtZͶ{ >0Vs']oߙo#eEٶm1mlZLWUCwH è 辩{iB#HZL$p8cphhz`Ga#3}ĺ|P |h{E99wk:>}z&ŽZd}2@,*;F;RY2L˄"4m#ZBUxW5eWPX砀=~BN (X D{@ՂӮEp<Y2CiB8izgi:Рr8N!aVZIp~ئ+ΎCאv㾒e+k$ՒmPY 6WkhΙuhXs6M mϺ화5,DNRľG%A)O->RB$3wON&dP}wxJpXuq+vh 1PH@u݉t)kXlTGIBDӸMھ!|,ѳдXO3Z5[<R?//~}GkT$Ɩק_,-`d{nA(s2'.}C=i4!BH %&f9NBgkϨ CŚx2ׄ-4km`s*uHlsLX,pY2&/RLt/suN$aLK"v(ߒ:LJ=X1'.4D'5lPӟ\E ӑc߲-g{]ZָezWv=a[ |Lka s|tK>b]ϲGr*3pH"_Y捦7ixG$æ5|{Ǎ9Dlj~=W" 8.ޯ}awV+ܖP k4dIFJ@ܾ_CGrH~RpR4ICN JIS'#Zr}T(%2kyvrh)ih=Q\W`FHuPBVF2+McЦrK-P(V#9E=?nGZckkSt tY 4ĆkۺV*z} 6ӵR$qF5=su[8_-YgOTu=!$ߜ_ppx>1悊mHVxi.pOO giAǶmBN(4)e06@X< eeYLB3;T;κmkz3(4Z5LJc χm^X4*Nyf iu8>@+֔(ZcdSai/ axa̋d{y<2~=q,-B8Cb}!D|)`u&VI5mY<%=>{Lɰ, 3=AF:N]&Z`e 떎eδDNÀC#8mp`FkG:,o~&zm3 b*\ i;Āz}}Aj8N|>ؖ#J(J<3rHL󄱶ZRu[i錔5r5sZ"unW 61mLӊk; م1˓h!i@븡[I$"Fɼo` s}cY \%l@f-en1$4<օ~,=yZ49td\=ǣBR4:k|*AmCжUsALAWR :?.8B<ƩbwvC AA`fm1}catwA⺞=Z[W\C]{dzLH ?<Վ\S19s<NXIBҚqpFSRsg~9CG*3EHx}x~~ЙfZ7 Xɡؗu^8O\4(5!{fWe'YP]rLA)4ut:`/m˧аgCϲޖ3yd1y>lQX$/#f8Qd;(QJ( y33ʴ}#/LVcN /MG=>ž@J rah oWHao]ө_|BΙ0r`-IΝs%_]I)`agefw:IﴽZ9\#J2=]tB#!ԼR6XR؆!gzeݗ/,Vd]r2b\}5uC"Jșڊശ)<{2edUO2^XxD5 -}= Q%,h#iL8NHV;޾1+1) i?gvꄔbYլK$˺a#m: Dx-my,+T Zr}h/n+mw~}|&PCǼFC` !pc2ùEiG,;Renors-n{"zzj853]+8] R$B6BȁyѶA'C"SX E1)H>́fR+6-m۲,9{2J#`:ާ*։=Ȃ=e gO4 5UGZ }!yx4ǧL*8 `y$3z/ZdɜQ"1(! f4|"@NAiGVa-Z}ӧM|D}T8[hRRYqy{ǚ-m֝;bhD_0&aڧAm ãv> Ԑ+xdfu_i;G zBuT,>!DJAR]))S zu c50jJ2ts'Óe MG6 c¹d%l~yRUA#z#AA1 -m_ Q'Ggks7qY IDAT#4GKͱp]{sίoec D8z ַߜxG̖)9J(pEӆ."U(y>FY8Qӡf73ۍCԁqB) Zii/546DHs6%O-Vow\[SA3qR;]$<̼vѳIT=$AyYבuXuyO n62/iJrJuՠlYvsr #0$nj ӿca ~!Ȧ"_qHʆiM }>dB׍x +4MQmJ~q>R頸\*\!I2@Ǖ5q eB )n(BBa[FKyBHQI1#%mͩ s熼/޳7.mCcd Rkm#mculΧs+9xnƼZufM0EQѶGRHv%2mB֙Y`Ǖ lIR LWc˽8s1.$a3iF*C\<Dz% J{qrm+) * VeUނ$#ޏ|y#,"2SU3]ӣ]AX=RJ_GV|w(%_ە ?~uŭ먊<~ID")YCCyhꖾeL#ecZ(J|}}2-PE̻Lx-DMS\-M%9]c&e. 9g\i9&Y0ZrI1KurjY/'SdV^2SՎBӏw>^TZSV9QFi 牢P3e݅%aXY#B+Ai7v.(U󺐄@ SDt# RikRzlnضN8 oݝ$Ҿ_%ʽ33FJ?ftܺ[VUMH[(Y68{b FK2e0FWq8ԈG}r,üo&+A]{ 3|d^'z"%R.8)#Bl\.,[8\ZT(嘧-IR;X#p}tlqt<_Gm4%5Ӻl(Jk|M <0,~b ә@s_?Ex Ь>~=%Ge` Ei1NrKHX^^8!@DHyky ;H6diRp\OBq<߱12zƑyw{}a^M©m"Fxc~cc;zi7u'R#`O)m:1xGR$ "Y{NeM 2MN-p:Yl<ʜQWnZd+շo`P~V!%[-푭(U'"Э]iã\b J@aY+6%S10Nq,)%J^h#w-i]GWYInJ?4/,XȲ{^-a^Ήmlbm08ds>fYQrG S$]X11n{ ں4䜘 !"p͖%~^Ɓ9N\wX/4ȧGO|BR2]n!K'W0<]OUUzcB߱$1 $Ɛ觍˶q7ߖn7n~$̯J{!ԅǸQ*[!Su(ʊӉmdڦ{<48Ǖ 8ħ5u2&Nxԕ;بDQI&[r[DlRZXS//iZͬ}wD)'Yq}JS,Y\>Ȕ MeYeO{j4(-(c{m 7$Sc醑$$23ao(}e͉|', /Rs 43s_\) ui jLyQ:mʲn\o$9GԷzl8uΕC&ϸM(#Re]6L6m~ XT5ߦHafz֐έ=/UJ+CqyŮk7e<鍢( <'no,0'n K DC%sh>6:Q*Mu)JUNcb[ ϟ~§L?-]ù9\Ϥu~3/1rGOF0#ZknCGiYq֒"HS&DΧ(n+UݐFҔ^Bdz$l+ wm$RNQ]dHu[pzjJQGjq~tž K %*qĔjuvGEAܠq5&kd"2l#եa6Mö%qPh9jyFhK?zN.Ksv!%cax!ׁǶRTnH_21r.LI0npK, %)I"c|? m%c/-ݵXLqƔoYwb dU Yhf3_u[1ܶ`|<Д5W9ǧW(ޯqe˜Wʦ>D1RԊl'ix~~* N8ٳ +e0 dX##;z )o $) pՁWJkpn"`%lW|8>x(chL:{/#42n^>G"PAD4Ntiiv)*RtI+&^W\[hɠMϟ>Ĺ11ES1Xg"KH J!OO,ć 'I zRY0 R轎Z[ۃ~(eR:i`ZWB,~ Ƽm11Oq)Zn`z楧9 QՎִnY5u3_o w?3wMUt.a"@e-Ҁ3uR8g9BluzO FrY֍~Y9mrHיGB$"Ei(_Y}BJc0R^xib&qFI=ðR7-1r](]q%\EgwِĮܶ2q<ўg}_Kt><*yc{-%)Z&f@.wW5sO\@ќĊ1o$׷~9j:R7 Z#eFB @Ole9{GU7t}GWޯ{RWFu8i9=](jU*Һ ʲmP?>4  r~ EH$2Gr`[F*k>S9h1L}@~8=(oÁ|v¹R3M#1V;uD?O\22m3t{0 t{gge綢)-*o< ["%9pEIYT LMWRTB$jP5)Fcڳ#r [Je$60fBh}3  4kH|?2>=0,-*~8Q͉uP/?)낪0%BxG-/ǚciC{ 1tlD"RJO跞0pVPu R#,9gVBJ[hf5QKe5NQ5d ϒUB ST[3.+, tݰ ;Q(qe8dYSזeۃ8N88 ↫j@Ū4~ x%zu+]7ii-Us@$Uu [Zf=^;м]44RLD23 [L\AHf$#$:~8reaU. 1ZSk“|Ɯ ӌ 쪙U–Gӌ>3m#2)Qh i?"# eC? q${x3Ǚ/<Nj0̹qGO?n\#ݴē-K]SDLYH\U uFQ3-c8먜#]C7ĹAB&* 7ۊmy~؆%LS#֗avcQ$9BzaDUcX;Có8/;X/ź į 뾁{82cIFH\NB^"TŴ 4۶BVZ؅` 8)E*K?{D/$(Z.7Ly!۴=۴l= _X{fֹ ٣,<($9kR,Kk0g? goi'Zch9dR5 *0\/;P*SPQ=(s hR4+Q230α Q sxXWT5Kjk`.j-p}`˖QPida r`0OS?5-hȈpxm49&YmIS: [̳g#IJlƢ¥3cM),2%d܆͡ށ!p,wiXW>~. ӄ2)UhͰ¼e3L+J|jZ|~_64R33"gRvLӴnq(Ӵ2/!'V ׷8@\ ׷ž3v֡{L 1 H!=+ h69V5<#dOZe8+Q<==vb2&>}_7LaxmKO|}J{ZW%7mBlg U%䈶Fg c7۞o{9O{q'ň3BIx1c'8ˊ3mrŸ> RV/H^0)JtY$t|~{eS_HD3O+< м=)ۆ,O?r876 E 1y^:Z˲||9º+$]晜ϯXkH:E@%ɥ>1O BOTMC% x:;ӴQ'~C꒐_>e \Ee .x>&u38oSk|~JUUi#xG``wePq !cVq=Vsr#n4Q`%+I:cJC,RB=eġ(BP5_w(->2੭Z˼lea\58g9a{g5W*ùxќnB~#?w(,O`5J .2E,q>\lǐ IDATW=׿qmvWqE-qR()Π5ƀЄX晦H 7=!;y!cڐe_2Rylj S/| a&)G =E>T?!M{vL[855ZKqpQ9$H+CéAEɌUeB\A*bWR70g[0+ST<ƅn\P`Xg w o/~sz.(޺)p37?L՞ &7Hj{6x(˚f.O5RxYƉE9).|8p:X¶(!=xfh3bR@Ǵ( My||&m.TU(+ϿBDǒϴA#c񞪴Ȧ3'e?. 2+{JdV{ q)ayNͤ )4푐$˶GtxӇnؙn)FiK5|Wm _LSdZܻ9 ~_2v_?WӹT4 ôd$cCΙ˝H"QJ {t*HRyѕ$Ҁܯo3)F/膕{Rp8UqNї+X Fjj2 ͹7? ~^v=YjCǺ$Η#[\+:ќ3Ӽ7?q8:~ӎ$Q?~;c?` --<)%@KǹQü|̏ %GǦUsKÍ55 ܡ!ЇH];d °F:]~,D;nÍbnl@ ?& o\ ,?kya3?W5B\HRP6SͶwưshY -4$LԉZW,ij;1O%ʲvߜyv *b,cf]k,Z_8K\'C{z/OTFPJ ѱ;&JR/"'2E&ivԍwn rʬ1pLv JZ!q| 3'6qJ9>{o>~u4ei_@w $<& QMɧ׿#y`fZײie1in9YpyfUuXṖDb\[~pT́O3sh_za7ˇ )liZQW-hS;4 C؀@ul+c>!BXE6m!o֦Aʽs>M1Ybm]QZ3si4ߨچȈ!fq_ie a;><ax9U5iސΒ 2Tz,fL'XB2AHrz'č39 0 Rjׅ-o۾Wij>5!Pe-0,+Y|xm[8MQ3v"eHX◍L|ȑ/OO8/6Ù(TZU{u01Ǐs{,Xrr@m3Qeʲ$-űy0/ec4V|D_WR#i[J2Mw2lPuxOQ}O`vO'C(Zsl w\㲬(e~|wOoy^WOshwlSCY:7.VIEwtKGy<F%L=HC jO[j+LRR=L /$HQ3n ˊ{11 3T%iMM fEٰ'- ׅ#IPY׉aYz<Ǝi^Ξ ˼R:m;nW)S [uʩpyƋZKt4Udp<3$=͜kIAuM?gӆciͅn|G#(p5[aJ ]_ۈ?/2m{+|0_2QG4ZSfIY(_ EÝxp2#Ow)ÃM'*ǩsR$XS@ȶmEA71 P%৅#1Kmv8=(`]*!ƅT2KÝ/()Œ흁2d90mo֑c+ >$NUúMID#9 9z gی$5oמ:ИH*2"G*e:׮CHR1 !yrX\,|1 `%ӸrmE7) Ha@Vm݀YBfjGuhQ9a@t.+|/S/p:3U8 !M]uǃIe7{ i OwlaDG;*y<,B8"RT,'|C_|O2M1,!L)a>r[JeشB}G[q4Y~wh$Ӊԏd!'hc>Ѝte+ eU#"P$6?X}F CJu]QJQ&010m?IyzYU%xQKUyOTNJgSq]x)ԶH)+qP2SZp"E.Ý4|+}9;@9:P-<NL򉷟63 EJ.CXE\%Y ~d'~` c'3H)01eYrHp f!U}ǷA¹闟;6<[MHoZ= }7 ۉkH]=77w#o<2XBk a.8pLJ^L?_4a|?G~츔d%¶,Hpu `VB$LO(Wi ec$*^kizyO@93MP1u7ҏ#Y #`YHi3fr-/IaD Ij |P$ g|ᝧݕHOW$~ E\j<ޔp8W%oO-EYVXh) k 8+1]MNݎٳbB$EQ-=#a1ez[ @sU1a Fw|d}SRJۑ8KqW5EY.Vr=/.'ɒ*4uq7cHV9Hyqͺ$iX)*eX0R̴tM @k>-?E]Cf쩆8@@Nqjc2Ҍ 2Ebs-ep(val$$ڱ#  & $W-p$ӵc,Yy匰7d0Y($N4e!CK8!D¡x ډ04z^.܎d6 ^*&gwG04cKAXCYf` ~\ dǮ1Վjwx%.K Cos(!ӈ6G'7H!Y25ؿgu O`{q8U GI:k4)),!5m qec;T"eg@5qaFŌ5zQc/A*C$=:`NQ(α& B:3!F&w$e.l8/ǥ&OS5Q3:H0 :T,fx]'\ԗ=qFh %5Iȋ5v4aƈI$jbG! nҘ CRq_n ^IZagG0K#vI[Fs"exzoq2Ď)|w.ǎU˛o&:W :MbQR,,Ό7l QՎ7~u0>ڇKIf8*(n4BiZ|\XJTQ҈QXB cږX+Da˿ip3DQ3F /^0Ų*&Sm5ˁM:q,ofZaB'yQQᒁ xu g^_ZI=DJ>y#+$J:a$岮 *(㲿v\ێwyXcfM􄛄`dqq8f28fq˨-Б`8 L ( 擷|woWC?-^i(^ڥ^ 'V4!<]׃ŒidIJ(+QJ<$L;m˅2K Xe%bCT^M$Efc/ ,;fbcp]96UUS*F̂1dYA4t][wr15Ef8_'f'G$Z5p 0fKVl#P<AD׏;֫0WV\{$(`Snu̶,bŒ3\@ǘqx ޿ 83pސ(y|ڣ90GҡmkCK^cΗ+ZM4y]?7~C9%Ư?7eD5MA $3c(bI zMojn9EaƅY*34$id pCSk2O3BF`”"+UIM-i)ֆX+8û@(@[ F,8_.̥WWI . tHqmJ܆)6!RY4CwrT݀WHI]$ ?M^([>|4\kKYP7`IjJ;l6膖HR K"!LB/u3X[|?n:9raJFعf-Zf1"EHڴꆇKå)V%x]_cgԕqdir@ mJ}mԣ␛ `r: u3y0Ҳ&B2N.=N %NB10'G&KFoEBnqNFRD!:PCjZg fb2еӲ *PqIb4vj{~dK8$[(^igOFrEPG;ͼsY^_qS&68`5g=UU! M4hdh[+:loz}P!o2#Ycjǣ7Y5S`lŤ-~h'o2!-8?XkPJ%Ξk=dYgn[deMQ1դ%44@1L!Bbsa( `Xw5/&XAMi“F!0th2vǫIbFCnN2oA!G I9dzd K֌Har$xށtx 3E1jp{B3}EY2.K.m9NDͣ׬3Y0yמ'H,:fU$J?!ֆ9qO‡:a|c굎"K׏4COVdYq`zVe0fZ.͑[08+%jGU8{zk7#~dGbGg M03QRq: ,o?zDjmJ{1|ܣ鉋b}g_TJϬ6#  O52dyf4.X%(??t ?|=@8HW)4P fg: X!յcIm3DB vPq4 |a{+鐂%:p,K‾U}zHSAPL"KhKTIreHeϱ}q96 ;`7:Z. e]X"DJͱEyr82#T XQrJHt͕j{fXKIJ 7Q‹v^ج`s<[ãTcC >qwO[/?aNN2Pnplw9a0̞w}N5Г^mЎ#NH_h@mKW :t(1S)QמK32؉ Cvs13txIcHRlwԦ3͎n o?zL4|$>&v̶'=ǀpxs|'mij1%*ڡÌ/}kq"WZ8"~sǫeZ5-TmO 4fgŖ4Q#҈ &(Qwc $"Usf]PMd_%)As@IWuO-9\XfXƄq901 EJ\(?ӎ!4Z%et툔Ēoj4;|'? ?/xXeH'N#w': 831N3e]Qf/Ir8 Ði )ե͆,KNgOӘ<М iBy@(tpTiN 4Eћ 7[Hq:q{$0v`i& Bqi'wpЉ;Jq>%݉iik Q*Hu)`KQDGO_6WDH ?"(]rx`[T}vW$ 'KehTX6y<\_*Χ2\2qi*I+x5͙MnZ._O<~&#*,4,EBrT vE8Na)SE8臉hif܀)}&G\)70h♝_voIq#͆[IYor^[b/U{Vی$1+1ԲKVE @N8}0.3PSw=·h- mu8Kcvk嚉y$/r ݎwL̀ =7LJ '}Iez?_HTzB\cjC-IZ<~zq{&O3[ 8;Q(j >D%dYt&!՚4ݐD#Q|u=RDcx:\iHc m  Xʶ\þOFd<})QQkEx`8ّPif ڐ)u':9pS߮tˋ 2O_.HM{x a)@g/aFsS_֜Xp:bF84-y,'+)&2AܱdnSB%H"87;䥢,KEJf|(9]c%0 `CF;Y!*tV=]_qxK_;z7_~f8b7IzF`]%{?i neh:d'\ 9k,86krZic0>7y}gϞ0\y`w3]'] )֘ j$MзiA4Li{&f Gni8"LŊ%\Hi0Z|VpzR">,Ba/ub3斉'Beq^i %"wXL0#_Xc' ίq@ײ{N+)m? ™<{qNXJzUL׵Ea5XnK<=&<$:r!MBB%qOLΠ #v qr;H#n(g/R r>~Kk<̒, dxA%4M&ORD&!Qh@rBҖv9WD^=,ΈY }C ed*ې!kA뙾Yo8(-Z)Cbn蛞m˜R>P~ra{sC{F/Uu!͆Zs. BHjkd^*6;$t9c&֫MmYU޲ ںAhK m$FI5iQ1}piZN{_f7?0>,b N5;kV1Åb95׺&"Ff'ťkݭ9XEe$q2# 4Ϥb¥* dž02Mp̪L QFw!d,ݫ~%/.|ODYi.-US989}alj0H9άosW2ϱ3 R̻H˄ro>e+i5S. iA ??5j͔U!Dda +6e2c?{WJ ?itTcY̘gp:(-moXbj CwM$Et"+JzYBRH/Qg e?ax7نަd`VUKYD(@%g^+a~SKKu>Em32Lǣ9^lׯgyۤxp.5vy̛nnەľ#tk:kx|{ vwl_ K_ou߁& ڡgFB0NvŊw?y"gt3r֜AXK@ ;V@Ch"Y ʬݧF8%s\Ej8/* I\4 -(8^OyDZ|wWJ |#sJ #vjXb k=aFǪ̸HEHѷ?_+a|y~|}y'oqE 1A$tf䛾_+a|?W|Լw(Ly?˫y%'6Q;d$NE|ӯKyi!IIENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/gold.png0000644000175000017500000032543311346241564017640 00000000000000PNG  IHDR7kbKGD pHYs  d_tIME  IDATxDَmkv_7EOβ/=x\<AB.%pNOv]ZŌ4!B -E97wc?#xTk"R 5@EUA 1u@)AV9=}7xFVmf..3uߑKx;U@ZJTjMl-*%'R,4Mq.p8l6tmi:R#]n勯^sg ;>~<9+g}'>#~=FmxxOg)s˯>cs,L4l9\\US Y!PɜY W/| K`9Nd)'Qdf0s." "Rɵ""X!ckqV@) ?|Ƿlö PcZ!ƙJ̳Ê0N8kۆ+|0X*0CEH5cjBp_2.3F䌠("TUTk%# \ ZA,8'*dL rJy3}q*}ivmBU9YeI TZ0.\7c=Z-1'b,8cPz0j!LUy q^P-]aڊHf^Ji;v|[GU(~yNL1/BD60O'q»kO8Gb_s4 }#ip#m>b0RoG6W,É4`df]ۖaZ@Q dv 1ZS8-tm<6,K<4]ݧ# g-J- *<=>Rkm=) )8XDoPyƇQTb8$+:4[R r$2͘[K,X'`P4ZJB Ci M8W6 !rgx e]`{ߐ?k;7LәKa&LjV7,"l]0k)ɍ2JcZ@S5s@)6vrrxv S13o2˜iKщiض=%Vr12w>p:/wGLa+RS$Cb8DƁ޿'L|LÙvK-vKpcTI)Qv[n{AL΅, -w=q r~K\g1Dzi?Ozs4MXg8*T5hbf=9N^3N AC-BiNj)` 9CVY0=Zcq4w75R*UF8j0js1s"K(`ryO+^}Ûyxl-OOg/x m0>2MOZ:א84shׂ%[q^ j fq"67c}ͦaiyaQJyID yEj )IX4Z}|Yf'R,!n} +~ͷ<%FX LK$% 1aCK,%R^yk~ ޽J%LݾKsyrn=i!,Ě./^naz?ωe(zxp]M 置RNgP'xg-qNϣsGҌZPGʊVj!N LbK6ێ4'`\k{rYՏ3"3\C*p;ChV[_9CgPy,´(ίdTLg>kAª5_IiZ*ĔoY+ǧGoy[><[.qׯI ϼ;e<,ÈZ9C!n\~ѫ >QNxkv;e>bGZc񌱁Z 1dL)ϢF!hp:XD- c- $nxiź@}OnPkލLӄ7B6R鉒#qgyujR80QJITy^$ BCJYgR5۴H||zSy3m<~Cemp\P53- ]3N *8OL cƃ8 Uc↘~LiyR)u4M8YRi- C Fbf+Pk Qê Q7̋2/LQiƈAkX Z)eUb\֣P\Gw߽ k5'e<2׌{q8C_-Tl 4ޱo-?0RBIsyu ۫dj\v?{pU[ӌ%BsqZm!&>~{Ǖ;`CjfCPje8͠U^|B$1`ǺrT5ͶZŨ򈳆}ŊȨTL X)qA3BLT-J-8+` w'nyUrU1Xr~K-<_os%0۷|=~ՎpI4P=D/o4=5g bP[z˒ O u*gJ 4M欢%LCtMq8PHlw[& )$= 9%vqd'w- G6Pܾ+~K4Ӽ`d}N1h軆Z,UVݵB#д=ɩ8*Hgeji[RNT8~4e3i;09V4`m<ngLqC.P8aZ"% %o,JJT0+<4=Z6߽eG>l5Ņn54DC˒3e vsXturgβ뷤Iir|3J\&I#ޭ(D2D,yP,QHIԔH%u;v,е'R:wTpǫ!/ZQQXp`L9ÔZRǁiIL;ŞOO|zxi|N+^|Gi`N-9UH-~C MHL#y݆&85]o/8OZji慒ALsZ-yvxEo`=#|kcCyZ(p~ZxKT&k!JH`W)3 o_ilpw. XՕ90ZT5JƒK"H. j#jLPbʒ"iY 3ҌW[ yFPsd,J%{t=ef,C&c%ġ JXPil6=Na=RX=k=4]%r|xz:JZ778/yA2F+jqJݢ޿c/6Pi^o_t}0 \_]/2'~a]OGD*ra2g8be4D%[N瑔c-qYtY=NccZ(py3GNeI ә Mqyq4FK)*&JYsXȚBT#i ktc5T*E4L#MӭA<#L1FdE#gA4a UR*P,S¦o+,%ˌ__rQJ嗿g<#x0O>Toh5eZh K7j8o#"k" %-Ֆv%0M Ԣ[ǙiņgZfbΌ4sM߃f֬Z"F !8J,Ka KKe#i(ƷZfϏ3M S WC yy&K۸5UWd1M F<ƚU" ӼrFcm n԰TKu|^7U!WETVg[8xWiҸTeAղ,R봔<7{o"l#w2ap6hJMۣFQJ)ĔD38cl,f!5T26MO.COwHݠ 7A#?G?9& GeI3˒^ M(YT(yUh$- c  8J]aQ8';f%YbM[68b lTnǙO[qޑ4ce@͞qZpRZHy><5ozܦw8o1ZqaR)8#`>x%Uy砑 9grNT X+xTL|I31G143`X@Oa;Xyzz"LƚL*m76z/%|;gɂPUb:rK$g_LOtmò,5{43Dl1LʑTyɈ.opa #CN ͨf񨮜V%֌֌[*hxO:p0NSӧ;U~']q<>Y#8IR-+o)c֑dZC!ݮyZXCm=/.xt>q[(p:S!.pau1r%yb75vu5xƒ)!H XR\e 3γ`p5g= ym!d8֐UU J|@\FL3g ȶ 0 J} (R29aD(j(T1@  -ӑT m3F#]ƲX>fG ~:KßOYƉtfYN+5 >RrJ?̪4#8h8H FR%-Xk)Yqc=PpOh1B3krf6'tLD:7 lz=14@qk4G(q sXsGp̈18tJ5Sq3JhݪY%x ( FZϨfPRŠ8/ s>=bPw92Eqq~:ѵ=! -u- S)A~ EeEu<8'rfM7[K.#i 힒 W4AJa\D)D_ (F,Zw3̐W(j lhHwGXpo^f40l ͖ǧm=}233]v%h!،2ϼ9psuQ IDATy{{Y+ >r7P=7s3 <h6 ;vӭDZf:9}7-_9>t~eЁOi@Ӡ%;ٳi;|uB:QB0RWYP5͙ 3TͨQ"[o &Y@-hX}!4 -Dd;cKBĠ5r(9/(p:FkiB0>wە , ށ@Ar\c5y*i%Օ'BӰoQaFc W\__w=;^%%|vMRiZ$`cV1"r@` &"MjqƬM-%Ƙ 40Ӕ#F9Uܿ|N-7pb,Sb.\ q.h_[Q 83sَ6BfO>W{쀉/x ffxß77o06 'Z#RIYR];&(MG@i)1_FO%#8.m0PJXn#ӄV5*T)f6]OΎBʦ?4U=~=|{a> `C\*mWy6~chkNO 3H4Z:i-M{_% Xwé{0ճPR)j0Uдny6-W[nw5=V\ 7wQ/?pȒ?Ŷ\#54|C,hM8oXaڶ7-9Ŧu.`SS,z-$s[owJPub)1'Dͺ\^]b? %պni3'q`3 ˃s\hw{-p?3"5hAKbÚJmB@a^ҳjCARX#/"ՖZ& l%.SF1ϙb5NŲ"WBhqajח\XA2ôuJk êYGb,ڿvZ϶lmq^0ƢpXhI<ڳm=.4h|ihey-MT*7JAVk1\zVYEXe͙YG.s-ǑX{IRA"x^ ׂ6oxG_O9>Ny{b)#7Վo`B̌EyeYu.v_>rw T6]5[\lv!1TN{bĥ ΣF 0p=ޔ~T[7-DG{9j T8쨥P뺷cp<'rRhJĬm<ƖfR%&zTb,y<ܔUXRaycY\*}hxחڶa{.a6۞נ׸52%y[Sȥз;hm\\=Oʵ}ѶӼN pW`-R1b]u[8/Ѫxy{@nQ?lɮfeӒ,Dtco,?z ɪRI"Y<< D6Y}17y 3{ Չ"DZb%A9Ūs΁kb.d)y,dFj~TGuNh֏YOvw iVǯFþB+ᆨxO~LQÆlF`f]+%$k3r>h*R EzPJUm,!VuPfC׶ݰ.J!p!b@i~u# RK nn'ճ R bJaH%lZOY f([0Q]H}MuTb҈R*L %`6VT nۛL㖙Fpγ3yIಾc`7 tm˺Ne{͈LIu=[b! HS+'B*(iHWG B:G4e.X֔IФDb$K݂ ѣ$zx_}A٠{( 3[6Fcw4#K  .*-g1/OGߡ{M?'˙ATw

!Fq %]y=]Qyi%БkzDTGRؾ3]Vb-$(uEbhpuet$L3q !XlSZ[liML/G_^VMLc1ؖ`uRTDcmMH9C(I &6uVo;,^_hzû/"Ij~˙zodbby/gv7GK5 UjƀTWMNZi)Hd(eRʬʬx};n4yƘ BD+&Fke$Z7x&UH@f6 |׼|yhW8~83C{07eh:Y$toXO#IfXpkF}q Q91n#onny=0M!EH֙r}ACn$(?+sY=] nZ iĭ >xm2'~Gw<{`b㩦$  hG* DutS)W_*Uє]9Pՠz/ 49>!geXL^ eFxzsn鵡6ב0tŸ1EO#O??q{s qC'.G5x$yCY/\ݶ9} %R, }j1׋3#(J3X-(8xx#?\AI+)X_ _c$F)yEdPJ# 9g\H2)Er.RD.3$E(PeZ+ 89!B&~AȈz9=M 9BrmP<錛Vd6]F:V[t/|w,/_I~g.J9LSvۡ_}WTU DE ,OoTbFn0a: Anځk2?MSBZHp9!8_^!-)5гgr{KܼbC ow?ܒJ`/8/tC c;wX^#;s3P%~ nsvc8g>}ps8|<9r{s x @|~/J*| ض# +96 B(ebi,m}d+AY5MQ m-kcc _@TP!ԨD'@T)|ֆa豶pj7۞Fޞp=T]:^? M/#fD4_^1v7LʖuN|x$N3~S<~sGxG?0ޞ_n%e$%+1<\|?) h>7HRDƇgVq{\YM2ˏ\JL~݂(aᑛ[s,Lu$8hŹTm/w_dR`AkPsͱ-Вו;౦,HrairCk;B*l6R>Srkv>8vZ:$ByZ1VjcO`ԫW`[WZǞaY<5z4Jω T:" BTmƕ](,#%N@;5t]1 Z^OBJo!mW7,&oZDq$AH=ZMk Pݳ39?>81|lvxb -ï~[wa`z{v]V 0 HՑVrbt.,UZDH}?0[+,sbi4OOOYfGcJ){non8|R21H©-!:R^y_~k$æ񞗷g [K?XR&@o y$R5jbݖC)Mnz}\XGȺ>Nꅡ#>N Cv!nfYchm Bd\~EԲJ2 'B,JA3+ ""Tء%DNjѺF(Ԭ.xS BΨ[/X09[RrݱNK< ;,<#4'x!{qȉ3_&fx=x{~{n~-?|ݗwKk껯z 7TGӓz\hD@ӯ:WJ.8VmaeOjao[ݎ.й?}xF1!dL嚗Ӝ hgj b]% a|>L~-8"ۯ k,s"zeZT]WMн Te瑧,cVhmlo/\kB/#J֙>ZrQhI1/ez+A[ˋov<j >%|xpetTv(\')Zd厕R^+~YwDFs2c-;LLm{('L.3́ˇLBtVK'AFG$Du{_{K?2/''JpP'0 Zis@+vH dnòpReBu)V$M<%N7(xD-Y0|r݀{8 >'zF KT@EC)<#J#Lז^J{w16 |#BnMh|X-㈑b oG qXW?m+/X%cjQO?etQu˺ 5bRJ&rF[Azڦ)D %u=_)!Uøv)'bQ8iڞn-(mQ*\ΨXB+Y%RzU$RXs(]Rrf^<+\X1M2 HxXs,lnZݡ!<պfz1'i 9OGo \ m /Gd.ѡ &*lG3%3W-1Xh`M/`[sezZBQ,?'qozdXkvx9bmZDDȹpw󈵖儔ނ*@+J @}oy}}嫯ӧw7T8]<>>;yy{t[;NFmu3m&Ϭg>*-t /R2-3?? ?}!Ă@bEJA! cxbJHJtȢeD+R(DIn IDATf@DBH_3#% D=F+/umh#}hTmL+n]i<c(Ez}@X,"/QZӛG ȺA3]X7{L_!ww":=}D2 % ]K _58WnO.gTJd]6ӅoESɗw߱w^xy}oZcX1FѶ8]l \&iE WR %k쳱^r|=Án`Ǫ|P\oKX`#=eǏ|"^"ᆰY 7- 힯ox!䇿M[uYJYLkq˙G- M5>_ZJ)fBH#R'TJ&,sĹMZeAHe,>qͿ@t]H-q Ҕ"BIQajHnETQ =#t]f3`%9g-77,NќGbl)IŁo% 2L^ENXZtv;w$)ˏ?1l[v[@zp Khݞgʺȧ!%4]E=#Tzל;ݱfaZmoPb3Z)<-\7%u#RRXqv]Ϊflwlw=yVi:ϑg6{ZSҟF¾>v-x{~;w\O=6,Oc;buSVI(zR M@ mvLc=R+˴ 6Px)u.5cFi]Y愋 ZI <{f {r.))4-@ iBK!pOʅۙŭl$Q7~W!²1'!ڈ+.:2 =Q$ՄieY7@ngn6H`8|K^!8QR! Bd;p^t/WxВ$1zLct}Ou/g~`?p//_:``e 8u}2 =ݎ]e$E"XF4-6im+{39')"3 BF c4]7; C:1IWVsBŢ2?yL-BW.c;ڶezPc\FvRGY  Bw_p3Tr$\cMJ bEIHuZ8]&x-3mPDY(Ҕ"Iq52%OĜh!Ⱥ:2b-JJ(kpɕ Fʺ-XƉk㉰:i漛0" ϡ߃+\^~"-[ǑxmޠDن<#[f?46Ea7H 2yia'(k|K7M )*bX\jA3OuIYr.G[ey>-PB_o)x\ t54O]"ͯWday4a|fq -$p~OHe^d"v ! .pO򉻻[Ҝ/+!R#eZiQJ\C%BYtVA jb*HƅB+*i|5PHb8BsdWJctfk t\uk&$ RyrL%#DfYS\9O =oOR'n7_;I^nO q wFX*"(f}7)?eKaJVQۙn۠-Mm".RB })*g@t\] EX0^3o FZs-+/bcݴYXs$T3X_FW]!E ]5KBNmk^t)49b 21.O >r9RIio}ykDSudǑutyO5qn*-%( 6D&ht(Bd}$a7PJ@ttvr<2Z?mN캎u4]d~ͬSFђ鋖v"L#Ot\@ʵgP T9HQj,1V̀X E}D{HZbOEDnM7ږ v-ԋ4s7m0%ysq$D'vLvnעzf@Le|>]a$_駟NDvq{}K)Wi _۟b&2l rh@)!`3ttC]n#=~[g˲V#* myYׅ=BQVԯ%ӏt}h%\YNu$k>C Sbm y=qZqP|*?bXSbqϟ^t5F-WB+rkWq-"KibG0 @ O/$hڞ R*n4'V] hE%)u,%RTTPs%Ca͓[3mJ m$(kl{S 8!HQ58r Hkx?r \EZ;>Vi1H ,`YעRƯ#(nvړ C s58XM 8Ev4{2\.oP2>>qu4\iz]1̬P$8ҵ i集jnBT<Ri{$6":"JdXSW1GV6*XֵUJ0hԗp gA3;kǺ!2`m ϟGNo B+6ۖyk r+s>Df7B18膁Mudt Āmm%_j12nxg0BhbDրR=jjoLQ Jak[m |PJZM5[BuM[ 1HQJVݞ˥>iLeöVwݵ=Z75mh2uך3([giJJL(-;Prjh9f[ ۈt"ʀ )2m;ھliD Ĵ%``hHp9/ RBkY_<{^^y}8)L"V[iy}{EMkS_9EMct|tVzi$n+kj)f@iЌzmj|Xkb,x(1)LV43A~ V59/lv;%QT5*^ס*"Xx=Eh(#mǰwHym ~`> "î{pz{fm =8;np)>ta;ls\L-%WzMۻ{a^bڬ%lLhe)Jh)B@hom}!kĵY@w݆gĐH|xl%0gDz̎bV Z4Bj⓰ zZJ5oAҴu7KXADL"m )x~x|־Uo/gEbVH #Tm{6.uq'XHYygR8Yv;Ԟoho{ E|wuv l6 X*wZ]qp>reJe0i**B!CQj\$yG`\KAd!(i 1G[#ww\ ޽i2_Ԃ~䗛oSiXųj=JfbLy \(%+f[%Gc ~Ԃ'z:sח7PT;tUBryǺ8;z>5>O4:jm[~o9O,X-ŰXR%핂R,7$L뾾=rss=17h+l{JL6LD^jstuYYA-* o9>@EkK?架iF5T]%2l:n{6}CX'LXYX甉fP]_fS뤅 怏5n6A ZihKF״<[58R]z>ӊ'ЕU+2ci%ۡLcTdr|mY UuAj}zzᗿ)j-)gߞn!uòZiʔq\gƓBa^ooo0 JI4d8!Reu6lAhD/ز+IɣrwБD\#>Z?Zk!pyQ&93\s!v(ţu)G- %cm6;ڶrq/|qp.ә Ewe>߰ݾ0_^\.8oX} N)h(]d5[QZZf4Wwox%19 `VHp~v$̖X'JK1\|!EIp"\eNs:͜bHJZCc6|bOWaZ4 %$B ZeT7e+3v3ɤ2l]Ց@'|.Q)hRA+}WqXVs\)xgivh 9-AP)AFdmYCYkVB$R\2Zab:uU=e_qV~bҷOtPW҂skt>q/HWӲB19&aM58v/4MGׯJ(%OgR U90&Rbryڊ"dtuy\9>ne/m;tui2^[Kꈬl7XuQ KBn!֗R~[?gNBdN˞!D++8mJ<=9t,ob'mIK-o~ ;/ 1s´G96$e9fr.>u*e X܊se)ui-}CFbk H) T[YU+)i!!21%uQiN(-~뚫"$h2/idݰa)uʹ_N+4|y.`/emUC RF+8#n9_XFUUr-ѝl]gBH_ayi{ճv\>Me!!S7=V[D> ̞ P-4Xq>r<#dfu 9KnO? Wa|^x_y~%"RBB)_Qidmq{DO  Fj>m,F,^ 42ͩ } *.tԵJYɼ>J0B LDzfu~[W 8[BV[./Ϡ )J))dSad&YY鍐ԛ-ʹS&H+蚖 A(} n(Έ<ӷ"/k"9&r9(jCe*+/1o h!$]%?V %51<31DںBdAS[߿UVViz1k' uu[B*DHaˌ 遾mhj{4m*e~|dw{$@ -́odgg\.7}V RpB@Jq0e#r͛7e"d_Tt]-mSѕX֖ 7+޾ɱ4ܲPK9(p ?o{xєnkQŹ@ [ma衵 LJO$1 ;oXjC"蕔VZ ".8H@8W/JAP#F]ѳG+A]cQ>U7{4XӔ VԄ 6g]$B*MS5 0*s!%:Ep. dyb%`"yb]֫)P5 ]1;BBկ4mW}O̞$FMTuǑrA+ɲ^P U nOhU1l;|rhmnr;C ߤ$0Ail++B_7#tϥb*0_TжBH/ B9GȆiBLUe;YQU 'fCLAjD\I#ŀ+mrG;n7\/̗3DRTZBJ* ln l0-O: 7e4Kb{@TA@ݾF2h˄y< W,)2V 2C>Z2.d\Ye-) /Aш%h*M )eja9]<>%K.q'!ZXcXV U9|bJcDi#9+yVHbv3){>|Q$kH<_2ztaE酮NfVl ]Ӕs %VIN_(#;>s&#yyyfb 1u[4fy%μz Ew_~%-z#H(!|0+JZlGSC]p; hiZR`֢e{+De&&PVeFAD~}LW7ĸ m%8_Uh#݂$2oDdIR< vn{װ=)"))j1 %MTRU rO/ȇduh- n񁧇g#[vi\"2^}lZujCSĐY֙(J] z.ekJ0|I1u,Rbu^TBrGcB2Ee*DRRRmU{(' IDATl"eB\"L!Dmkd8˂'V:#o#ATUx*#PV`ق'mG4[56=k"m[67=|g2_ro ^5DrnFJhboсXi[xqAIpY/%# @e6Gp98IJ,Bн:0XΎM#]$H:IBq9T o6||~}ǾX/T-~g:_.~$- HA^&pG 9pLU$dIpgܺ"!COD]YmBDʮhXmHJh-I8e9WR4ee)o~2R7vI Y ~XYB$LH9TZȔ“ޡTw.#4GrʌӈnQ%2M>El}DNxy9a%@߷(e+xGΣl{TOa2gv{OTZq8las,~Px"Ji4;6}4i.t>猠8!bIRmXVuP7-yy;[=]R5smhZ4em7qӊɁj9x}EwӁԯzN?rdߢgj G$W?}7ٗIk-鼢AQBAk"!"@ z75>jrVX@UDL#=Q2!*$Ҫ 5/ϿȇL$AeJ,"KITW`"QeEr򄜉@餔(4!|H* 1'UZJ}1,˟@2[Cl*SX ڦ)R +uB%U"S7-J5=8aDI[Yly<"@ʂ{e\=I8-/~w?"w>Ck!9G+ZJXWFzR d4n@ 1 uWǺx" >Ӈ) ]?DU,gMPXl/1۞f+ݳ#B 4BCu^ /{U2פ0#P{xN ?VKl]΂||)4k&O QlQOyƵք󁄦=PR񾖤 #!\n"ثC2Eq%n*lS3O>k%˶R+ߐ)t-W^Snuhc.DS4|x)E'L m2-x9R_Vnpgvv ?3_ {`]Tf4a/gt\#uS/|zu i$| ÖV"2hi$HԖ{lHc@z"!Pd!!d[pii#36LgsJC ]h:&̗} OFûiv! * |:{~Œ{^y~x_7o{"1@V@RRH9գUI2"#]S#B*iBn6Î Y( ay#9O#˸I,^0M5Rw6da.be޳4{BV,BpBfZRͭ3끮9> { 5?Ԣ%ʴ]|bO$}ox8Ȕt+nZbkC$3ǗG\H4U~~G2tUvWuy[n麖~ag3m۠meYi-`(/?H7YB$$bi9ǥBHH֌LH%aR),<,fϺQ]/y O/Mk<m;v#3ZoTT<=gڡ+='v2ڐ}9ZDUΜRa"\.xRg|~zu@b7_˙BŻcCU<Wr42.(-iږ1@2;Yt}ښsoTwp>a Q7q(6a>un^ELXntoYǑd8ElSs-TNCb]gt:C( fB])2af\msPs{*]  'eFҠ 'l+"i7[&Wjր|y 䩬/ 1VZNcJ%]@m !5&ߡ3('$K+Q`uaO}ab~CSkfd3*Tb(M>ͬO+u/ryI7l{d*x:JBmHUj[@¥0aM|(#3Li0rx':b/\/XV+J%w%ZBk[B(LMs<E=R 3H~K"'~'xxd:Mp /z9|wb?yoFA$oDo,݆$@j^a?2^jP;Xk[y }aeOHb|FJ-~]Ri32.v+h,Y9~ǭ7EI ,"k|fZ/fWf~/~&Ŀ&+}btTvH)z"ig,iZp.inc娌kZڦT S,˽ӑӕm1RA5Țbv *)ώ<îЂv(-Ʋhi%QC߃_+g67{ FG *݆mkAqu!p魭XfO3Tz@Җs>ꑞ@ @Mh,d^cMtvDrx+]eUf?l!~ >uBMM@[Zd Tb{s#dZ>Ew=]p?q@rHVW֓Bĺy!pĈt|3/^8~(ɍh q-n#/$k;8"%F8Ai8-c w@d%=UgRUg*T eOܽ~f_bԵp8m$e{̾JEu-aD5C(e@p[i^2^Ȝq9V+|D&++ `2+ZH|/ ).I"f13y,nS#Ogܲ^zE.+f7F 82uJʲ.鈔%@XpyÖ_}c|Ͽ5M ʛn_c^BV= 8?Q |<}/[JT=-,~)DNJÌG$DeQU LXh4#b Tpx) ,i0cXo}iJ;R(ecYiK/յw2C(Rg,` @4kºBг aTū Z<39?#uE@DGH,xU5a$[ @P5-kٿ1DL%9b8kQ8HUPg]d/Ol0m[ޕĻa](gݖ݀5S.[HeK!r^ݽ8~\sRV{=M_nk.˅9Ϟs"V"HN\N3>5{L}@kKH :v74mSg[4]Ǽ.l{ \6>x$D6|"n{p2#ӈ7鐄+QRQ-/\LunnYc!BtØyϾUl~}3!zώe!,)H'7'PuxW!=cQ_XF6^) 5- ϟΧ7Jo(kEմ"W-O`*8iUGVǗmPS#n[ˉz3O^b^|E nLLOe' {A *ڪg:@M_3,ZfI-%| k-Q`w출K^V M7PW-|r!?=b|j󄒰ȇO,SUn?wʼnaQx$>]P)o%,B%&;x|̦bϜ#Zڛ;gm91]Nh]!O1vRB I@ZBZ;0o )v/?`؁+H~ LRh/."WDtb`bkALS(khȌ2dȩh2*]nEp X4B81+a-?9'nOm"D6 BA5vSGl[TB̺H%VXzb<;,D0$ I0UU&7YbvBsj'JX+066u-q댖+2Cki-gsuV֠<QhۚJ, (tTH1|E~fEr9X#zoHpdV!P",a qa|~BO'X="IT5JKp+U*tBc`~ޠlj#?} L3w=} )R@At|˿P!#hÊDF/uOw~E#H_=Y!3hZK"K*#nj_9eeb.mߡ wGq:h雖i*ͶerYI4t]}ӬJ)z٘#eb3 3Hj8AY0<^旟)P76_lDRXEmKB7 "UD V#,VA֙#!,dJ"rb!%3L󂏥p5'RbFu n{A"nݙurg6]OS[eYnD]Yyu8Pz|I|!؟4])ħ?ȶgRNlxFfh,}ePHY 8'50 sya=^ox͛7+qZеeIـޔ_e7")ݐI>|kF"xXgH+Ț׿d1_%nHiE_JZH[{U,uR@sYp=>Oh퉩eD+[DB \."KBX-.TBW5US#uFZ MCZv{ 'rx4sqԄ?0{a^B۴OlmCӴ,Ӆy^hRi#HR<Bɔ貎,c5B'^eF?TΙVae,OL])vہq^HU4Jͥ4+[c]g/,!=Jqů Lkqy$WVl]xXaKӗvcV~!M l:akTRy򂮡}cOr>VLVY,+9)5'KGJuAqg0N[Q}yXYvg<n d^/+~[="H,rWkvF(2&ZաR|>B-hU!BK}Hh)\J+t"zJtW)&XnD3ТۆJs/?͖v( #E]5qpWCUBYN4-T \Lʑi]Г۴}5[uq&X݊Iwi2Bؖ%\ kJZX7ؔNGqB+@hje !,ˈR7> Jіu x@iZKOkGlmKf䗅G Đӌ9|5/` ov=Gű 2|-P<JKZnʲ6hq!n{Ԧ'D4yQt+ookٚmJ?E7#1ѭ )+4BckvJ 3A ZusK)’RJC~de$&RCEմe]WΗ'Ng]35.\9Dqټa]P}K[ dX,m}eo,a^|F IDATrk$:"ȴ݀[3mȕ yw>HXP 5+hh)Hi/pO~@L1D̋íM殅F Be!BSk֚D fDXmi eA =tr RZ?zz ?F#S"uEBFj+01-= }ϊW3aPEYbLhq-2R{{8܂⏁F[+aZid#ݮFĥ`.uV$YVw?bAI xZʔtgIsi*cm $s(UƒUm1B(+ MeI97-TT*Ub" 8Q'꽚k3gWty%UO.]mݒH)y5H;\>ϬfΈtv }|gQpqV&h8=Stxk]R,DBFtV"ڎ]J/%-o1jBB&t͈o?z6żK r`I7<(hiB(Fg)SSV5jʠL R=@p"QJ󂻻[8=â{ڣg>Ut?kcKfU<^p mC 4>1J3XAmóSAҍr5c97|ff4%G$NZ]B(9Y%!8b!J0 %RN e5~Bz8:'5 @N&i7ydR.i-U9AT 3mS%}S1XWeF)N>,ǎ3zdZ0FOYUPb#f}%d\O,3 %xV9|&R\]xy}DtoSS(V9قT{v#%fY\Um`v"ӌ]t(ўMy=!5E:yD>H{8:CĞ:iQa|V%JłRkРsO%c#D2D^P<5.?Xmxq2<fQX! ͆BJ9:5*JY"Xa#\ Jn$Hrqȸ<_#BLi{̧)i3OcQ)ɲ$&A2 !] 0ÅIQMJ-~YM*˒C Մa99K~Fq5؝ ~8bJ !XNmGU(7cySlUkeA1Iecs(jIe;[~_/wLR]/?b?~:崃&LJT(Q-i+x1rrL`8 KʬHpa`3#+| aB3LDtAWĮC$=&~p82ځY?cʇP%msA:}Kt#B+MEn$ FggK{=2Vcc-H+W;.&㯔 3EQqu+~w4O F;|eIn2vVHW )5}q<FsFHly;nTua<_~@)O>o?;*e)"ewk)LΡ9咬ȑ2`mg`kJI(yq}rӆlR*KZƑSWpiLkC2J$\Das{`PNrQonioK-#D£Hёf#d3)+^Ş6 n!m9tK}J G2 {v# ~K%080%_խx]өd7xqFiQ\uvbdk{xdZp7,r~v6HN]Hg^o|iRސ]w~TϮ*'g&h- Sٛhm0x"9`ysTk s<%dhGY,gSJj> hY@>wg(U#D%)홖}zPW!H`9t-E@QdY >V&P}?Q FA#z1OP#I9w_O5P~>-NZTe`":)-4 .8cS@i K2=((rNYC)5}pwf>^9FB AŒ0++D ^הEYE UN4:Cqx#Uq6P$S)QDm/l-#{RI) `䳡AYe݀*nFT*?nd6[9tM$*|/x}f{(&^rjtlQU59-Y"姮fSb6%2"beN7#Y%.//ydS%Q?BʄZeqeYo{VA&zD=2=S3-E00O[|Y4<ʿB=JgSKyӆ oaLJgEǡGu1oߣ+ή.A:H, dphZ1SRTmqZ el$;,5bs޾9GI-պ, EbeCԔEם}s`}2}8nYL_%Yȫ&x^70B2)BE֌!pF)϶\ŨZ( ck-ق/M{xЃuH)qyb~W_ᆼ. @=_y.9N,OqHt)q1UL9Jz=%dFinA,yHppqB Ӟ!XdRϐZB d*=eb,^_ݯSi9;[dBg9Z9/8nMES\ah( LMqdvЦ%}%r#h=El:2ehOG*Sr>3"bn8:gp8hO}bV2yݫgz 2g3Lճ(pV< y҃!"D7&G hچˋ y=l~;!2EG<ʠyr:gFISn麁rl:EȒEF硇zf1݁P()]DBj0 Cm㑈m~yɋ〔;l5 e:OJr#iP:# cG|g'%CJF8w~DYgp݉BMZΰABgi6?c{.'`G?d'E2ΐ);2:jJ/蜥L1%L*(^]021چh y np*'Oh,DGcdl"@v)6 IL7WT$\}7hcɌeqvKR0[L Ñ<*ķ_|$>;[VZB)@~EB5dJRyҴ yψ% W)jctHf$,IrO=߿ŀ. Ur Cz @ێ`85G/tEjMs#EDbZBL"kt7kК2_s*jLD:=ZWd1ӝIa]vgǎ:CEfa@Xr0乡/OpY`{xb<'_cW ;t,f\܀]GΗ ީ51(m~c$#ZOi\GfsO=WW5˅Ez 8zא6B>o-(2R@ȲHqm3`GSȀ!$0FuE #%Ѓ*qX J'ѹL&sq;g5#ݞz[~`RW`Y{ܱGDFEm\os(ɢb2cO CM IDAT'cB;dQpXk`)Ŝ1Wg\fo:>9'\"x.eAůwGb?;"mVЍbOBŌ~8ϋ$uNG43||qF,\ >|GK>~Bqݗľ4]ft̮8HD{4D(0&P6[^,}qΗCT@ H=<LiQa|I0Mqβ&*sͩ;#7%uU+еPRZ̑Z\`QIH9H۴EA,#4GIc{D1-Ŝo>廿icဎllw M۱dbZ2)lL z$c2ޓA$Z%ZFi*7-톦qtU7 :Kܽg՛3^|A:퉮yϾ9~Ċ9<=<G֏G, ӑROޢGu.M vDiA10+r sے0 /*DY{:4c/\k>Q$dۿ`"e\ f EB:z87Gv(1BL,KWKN$Iz~e}bDI٪/B$*x~  u/ ϡ,9GYTd:p8b=$f0 >&cHV<ϨIYPQ2#at= 1n7F?G! VX3ZGtJS@%ET/bt0fghO5^pUs EQhP%5dJslL4Q~L `liFmO)=6zLz5FP2"g3/0]cϷ/w<ݴ\?Icvv<+lxÖiS{OUVyy88Xoׄ4׼z]\QW~Ƿ6>X_ECtl 2Fp^>%z{rYSnv߰xtWW}87P.4ʈXf@J2yTȟ cGR(!uERIe@goG%e5ڤ"~FCJ!cД &O "EF))L:K 8:0 k}@X,gSIAs|"7|$~.-a$@Z>!q|JS飅h2"dBa7ݖ*Qg5D9{JqvM?D4)Ftf_7<tN8 Ըӆ }ɻpj8IP^pInRU{yW?Sx,ywh=/yi=SK{*w'bv}q#yN9*Eo{9?Yj~i\]?ɜLcf񋻎?oۣM+t!i3 9!Յ8Q8+y`Za;4b+Ϯ@t~fkFsjTfȲ%0'n?>r}y?;5Ȁ󖺖In"y&MS DGX/w z"# I;Zg9*cԝ8GaY@'8102燔sC 79~ :ryӰ}z#-"gxf{'OO?v'*Ew!9I4=dBr;uU"ZQFrx3L@ ~fE<{ɫ˗n}`}bǎyZs4Ȟ5j.K_?H1,S}=_~{BY,_pZ?_?YMY_!DO?zA{&mdϑ1g%M lp=bZ?dkL |v aK!,`o;G^]d3Ai2oSZDA )4hiep<1YO(/ zv%pp adZgh)21!=ҏF@BXa:.rHޞ"R=^b9'ƀ2#2(CDFB!%etnH\$Q.#׊v/O 7Zr;DȘsF3[M1H]TULW/#ÖҨcjSe7ya`QZZ2hCGfZRrfGn?Q9X}x-ֵ|} /_|8Jt#'DT>24&R|퉗>>0'[x$m,of;<>~\Jꉦ,ij9#`pޓ3n/8ᙟ7u11smQú}|Y{>PfJO-Ħ5b`Ca6Av g"= O>_W%ZB h!ȵHF8;Jj鉔#.$gGʼ`qd׬L&̸<_Pp:XQۧtdQf^&o;C8"AʌLӻ.QRa -$MjMQ(9l^PfrvYnw`p=!>&VXYL/{1B#љ" U^PRj<˙}Z.zJ1-+ڧ-roNS K`f=2hzzo-b)p0: ִmnɆ~Q>%gͧP#Ah3 t%@sإM1һYԗ?xן_su}A\\A=U"Hʊ^=uOޑKǯj2IE-B7:}``#2"#86[..Pԓ }@Hf$RVJ#dyE4vHJ HR%5xzC=V4Ko97@G^(&xz-K3rCGfQ3o63O0b^FTE P'vnb.< .⸙(d:ZM۴9 M? HFj'b gzBh0􇒍r)8&Jӡt%ZD$YfEY}Lͩ? _u}_LƼq,Kw?q{)U``o1MIfKQ,P`{|@{} @jdRWuMUCI%7wX엏y^ nv|+Whv0 Dq 1])S}u#?}#es~<y 'OW9!G[v𞺵P f|kԌf Ck]3~v m`>kBQ;nbC2Dqlaka CX2?cLNb:e=~ԬDSlv^ vKD$/_\%(z *! ]8=C$. (hd$R4цd# $>~OK*ꂣϟ ׷ k'>~~:45evqFPw;li0hF#h8~f>s|v iF]Q.4ʛXM':v=E89}cxMA/@J_<:&_p$|Vs@≐,b1C 4xA-*yb6@Q6L')4Ɩ'SDWOh` hZlꆮ999V)KSGGʪ!'.fшGW=O>$h@]jDv FBH?9%9.`}wGҌ^UO<)sWd[EO0Mggo!;'UEKU(@۟f{3g$cVc זLg.0 `GW=QL6KӀ$/@hӌ4c[)0ΨGFYk >| ANwZ ^@ v$8s}!/o7t퇷=?x< <|v{dB,#?,J1;: GW!=E14btgd'[m0,H2ÏG8] 41O2xAJ(@s{G~}4{5H]0۟cPQH^8'驚)ً_ {6mmzI61L\Έl0{~!O̟'?>P4Œb}G'gehmK0mOUN-0e_A) ;דMCd%9]Lizǜ? Zܗo0<|x>AE]ܮyϐGG[0%!A"PJ1IC/nR~^W[<1}sxI xxb1`m鵡5RP]';9矝1~ +SNěwo~ţ!$f,h>itRT%g XKE gB3g((}`y4kN᫄h4Gx~7=%jk%[4=Y, غg~t@tL/.=@v9j,S80MJ%^ A:rȥy`~MF߬뎧{Bj p3ְqCu:v&G(c׬oGt (阎H| e ң- Jpǚiґ!yiBiM Jq(z( " 03N!PR08rr61"ŸÛsR_s0/9hh%g t2îc|Z~B}??\z\x94$p3xź5Ï2(*R @n1@6d4 x5,qu""y]Bm/ TdO}#=a2⳼]1e7HfvGK#|?!'و8 =t"B#J\ޡnlkhƲ^$i؆K.>BwJ %bzmUPw=]ӂmWҷ/fgcE5b2p xtN=,1z!vn>웒bz nKz^oYo •X7,c2?HA¡%T=^WTfGs48g)w4u-fvt<(9)-J3O=ks:}ʓSzk aDsX`uH=Y7/=d/0Iizz{,4lzLǨ4fO״H%i9ZWiKu!x5JpNrc:!}^YEoz += 6UjFAu='(,"3__17)ϸ?^ha<1G L^alOuL& IDAT$n|= ?ܾ #:?d%~p=q|ʂI%%p+6<-8%CPw_ߵ͆4cZ[oḫ,=DYK.+\ ꡺~}@ dc9;9! /x/-R x\E y_Ma}2C*ٗwol KPA|G^T mSsϙ_,pZ.ТR9VB&|(HbqO߽y~C<N|l_B:`GC3D5Hx~CcN\NN(:o,?/_— Q#G(@k NxX;DC*E4H#jʺA9zct 8ճ!<1Dx2_.Jfk݂p4Y\T.7k$q GSlqN$1"QR7>"]Kح15X9ӳ)rr+_CA_ i=Áa4J^}I8a?{#aZtFr@I ;\q[Qs޾_~9hcm>0akDhޒoH?;Di]TOgDќ8nzzGuM> CzBnh=3ҷqt I@YS'!ar ! \o[/HʦxV'lqZMΈڂoސ7KtgXLdqx:"LA``۵GE%a4f4G@ "/+뺁ض- t 6}HTY 4~`]t mACzlΣ/k2)9c*"-!HCHFx 5V2@g:)OG"B'Yegv%튣92خ>%^A PT9ZdEMGL=bɠD8%Fs)*89;!gDGT /@UjKW80JHG }O 6;Fǟ?qHEP뒾)>_WvyCDPfkp`x%J>l q}Dh!ivQ=Mh:GytѰד^kJ!K}8gDO4 Q\]AϘs׷ۢ$(a?P+(n*@h[5i V> k]KǨh~B!ͦEvrc4U"orCD:BXDJLC 7Da +̩(A!UO}+: cu!de11Fpd)'tWU=Q%)O뷬|o5 7QW/(Lƨ3H''\9$K>)$u3- T)ӣ ˆm޲>ۮHҌ.P u# /xTf_`Iں—?ol?|[ aznx%Y`MGoxK޲Zm8W˂kq R$ī5uе=VTM6+a$,0RHgp2$W̿D!E# XmVC0s;tٴPtPokfوt!G13ȎPq8[!G K^kn޼%! H'gWiFU(%x-w(zsG(D /8Me( }oO^ArÛv))t? )m]37߰Ȏ{_rϟ^-~͋/PZxU;j,kΠE9`߮IOCLb<\Е--#g3F =]Q|2+NsTmj$%fppgW䛒l>u5ƈ UѴ)%e24 9J)VA#>GJI)F(Q43To׆ހ$Rxʣ-5ja ѢF0h,yPl0#i?qV |ϯ 1:C-7Mx6Z@!r_7bdrY4fQڡH)! bv%m!%1Aa ˞0Mpn0ZkFqHlx{K<'>z(EQ`t3P59Ip4R,s#._ pg9|Tzy-)5tK'AB??x8f6{Lr8%{Y.(@R(Y#@Cڙ!3XӢ&+۷,, oXtH1= k< ˋ/#P! +o cn >+ þ@( ~Kp=O>JdA>iwhBhSOo/:HR(qzv4=x2<~9dGд,Şv.sc 4ÊvIy ^4ԇrvDIi'ÁO<~-y^h4wa=EQ^ܬI'S4^yCm4wo9~tC?gO/*5j0.mQn_^+$ǔ= MExx"IF!>'TVtݡ$кBTk"<$ˊy劋t.fy}`q%qz~s` ( h+P=*QD~ڢ| J~1⊖%} UN礱pLNJ@-{<||G[hE#-(n?͗-ac\Hm98n+Dg2Zh:GDYֆv'؀ )"ǵӄY@UYlGm;1rؗ BDu>ۇs`Uy9??/rz41]Uruv7#J@0+s8z ؊y ?ܳ[.u8 lzk_8LqmX[t^eMN[wW߽-cjy-dv‡wyXMLFt: Og#5-JY4#%fWS:E5pRΏ@YP8-~0ʎg hD yرK亡 V~@LI2 ;])U>'kAkuFIU n^|>ZVp:'@{J^giۖxJX΢B_W7߿c=so~.S5;SÖCv aC$S:|خ:,wM<8z{]t6u˾jܔ4 : B<_pG3@+ 妠) MEzq=&^S-D>1ߠАEЁPK:㐾'loyY/ZpLo8h5p@}hz@CIUפIBoo'!h;KL"TyI.koPGߴO'%p*I<_hɘI6A [u1$ȐT[h4[G*2 ggY>9s+xS|.+Y`WRKZvHX9*Ŝ(v#7/Z_5~VP"[={ d.PTkcxfϷ?츹DQқ@":/|F[KLzk#izG{hFڮK',WsGK O)k=Re%Mi=cH{#2xXVb~O,f "K &84<zf9^&ʒtʦ9cBt<|P#Y5ӷ9^1-O8{}ś?|jnG{cY-jv')ii^)I41˔F ;t4 7 }ב3[DItȒ숪\p0'ȓO.uٓ3Ҽz߱; `c,%ƁnyyRuxu^8f~rnQFqwZ#BͲ Fb-ŖT<_@Ho6 D4Fp (%):"}7Mp^M!DPUUONBkI$/2tQ*0FbLI.$IKa$DPJ!$;ˬ&3G *Ì=M>Ƽ@)_Jx윟 Sy2YNaZ5ݎmXf8ʪ"HF:,ƑPAz|cNHs??{A !3.>0 "TBj4*"Y5Kl#:, ,ek IDATS' 4FLZi 9R)u8泚w4-ˁw .[sF+G.ovlvR(^Y-~Kh47n S/f_lXJ~^Vswۓ)Ezqh;ڮ!ƈLkHTRJ2'g_`L-GG%G9K8^J4mdV,x3Dpq`-hͻTSsD< *+B01 {fՃ1zC߿q$ђ##RE !& !Dd9YVcb1f)!z|h ZuA]fCD m=c\ <͡m{UB'0oJDTTfxG ]Otm,AF6ݞG?YaϡkBz%MYB :c-mB\cxJ -}v#+`K(s#zOiT}9CC{0႗;A,X=":e]? d:v[%MS%0`}$s$M,ysMYݞ*HҜb6_U6=Ҕ,95BpR '8m.gϞ"b@O/urz(20mt2xH77WD&@cGЎeMӎv#rnNqYA "NJ L@z太5;>dwyGP f4Գz^Ruͧ?z?`gORqnɊaVH)с8/p1t!"$Z4|Zqp-HEFetA*xR.Wea0Q81#Uf%n߱yO1sEKBV̗sofŖ꘼\@G O4;8[ƱŻR<&"M=&3%ci%7w<:aG̏*,Gyɸ;EB0Kkv클,{K]@rw_~Ï~v tm =b ?PJRB|WjBp۷3cr6Wo^!%=[g17zz! kVL'8![a2 $ c&J0F$8Jqv)璛)YzuD O$^d|? $d4öalfEμ#cɑŧK!A7:b7-Uɿ_\|PBcvIvَÔ8D jF׿ Bk!=ZOI޽m;woA(҂<$YNtR$ 1Z493Q4IbR*Y缿);0"(`,gv ^1_l_O3O_q;;:΍ҐfNRT}AA.i$I8H+bÏDT@HSgG S_b74Hp^*p(s`9ya{HYܴ!A8Qi!$J{T SMglS4lNۏѢ&40F |Dg >\vlf7靛SԓC ŇӼ.$$I!DWta)Z\Z(aى$Ks>z#KP/]p$F'~nsh[ھnRW+5\]mʬf:V߼A&w7{~ӳ#bi=u]q%En7,YpaôBA$UkHUF~$qO?nzâ\Z?@T!rnb8XPDyQ=u0bEՏ5Ls?Z`uA cPgUxsI0gi'+X*3K"Rk(%/]qw?|A⼜>O$HCwZ8{v˫]0F\H,݁~(-E Qb]JS%y=0x-]KŌnBI`Gwi BHLa 1jE)E=<~'Og^rH ̏d#7;>|؃Գ<}>ݷ Q$߿e^ T>} m'zmێr{}v7˿ເ=Cfw<}n@?5qP!#G=p{r;_-hȨ}#4f(=ȬFл`1{fGTGGp| hQDl0RiTR D_#o$0={W8"Yb;֊p_-þ#/S( ΔnKX%: 8 YJuo 7#AX'CG|?ЛkԵ=DgS4g0o:y<sh=iBo,H$'xpI"E-G,+ÞiQF)hAx3ma! n($:US{J$ce0=EQ1#GUQm wh۷OOۛm?r$"Dd=pw=z0=x,KtZs-kT t`q4#U^0,>Bnx?FlT?|Cl=cwcav[^~0:mo)8, %]7 (:A,8Nѩfǟ{h Ώ/^ޑzb9ǟQnO!"gpvw;8O(?b.g.1F>\}1Ϟ>#XVỎ7p j?R*WT q^`܈PIB"Re̪7w[TA)Bd$wCSعqU #1FOOx~,A(F)) Dt!b!%U6 j7`uƅ T$)' Vb J N#6{?!9\yh Ad~uŎ\v EvěWx е;sq!0Sf5 qHG|XK?zL\ǴӤDZiBg=x& ֌H"O?ofyzF^,)*_!Q FFIkL&deEM91&St]uJ(bdYrD={d4nI WX7*d#ehM.y&$lrgڠk.6=ϟ-c0rusA?lE@t-g<}f;-_viQGϞ_Qf wa8diB'DC#7q`$#'̼D{8Z,h6ZTddݐ [N&1|HZ@$ٿp{lM,fj ]hfPPlo7:q$Y ,Ś\ް۠U,- Ӵ^94 Wl7~PH:HQ1^Kp C cGԌ sBta5!x|4E'zV4rU"΂DjEJiTx0a^$zʒ">`G5>s6MM]o1mgC c>L"(HX-j!x\ӢUO8y|Js?tM )x;ɳ"0_+-G'g>8guڞI;xJ&(L&g%ь3O?}_oӟ1⼅8:)*7Wl_pr;xtcd׎@DTiPDQSp-ks2nktluVPH58\U$JVG(vUU (j:3J18Op PTZӎ.DR>~AsjW_:B% ƁL7QGJ1҄& 6wI'Pe(yRJ6 RKTRi&+rIolZhh"(˄!FezZXʑ$@'՚*ƣ$"LHjFQHiIRO=e#;ÁE3+?9[;޿as{MۻHL* 80toc ~mOx7x/9^(4dI&IJ% 2S˚'Jwl.#4$S)zOxoȴf1rJk)l0(3e>6He|&0_/I{C#DnM}KoyYxPk,Ii-ȀVf;Lrgq>bL$I2 P(1McPOȒ|Nā UNU/~EJLR +Io '> Ӈ I F~BD b0͡%8$%Tl コ5]w@]^K?nmzm-7w(ZEP "H'H%yTEfeFp#Y&)eٵ#A GG<| ^ $Ow̖3D@Zi EDJDI9G9Y!u12|"l1K )jھaQ%FucdX4<')Rr?9g#PW__w.]EJBYjv`G}7w,I(_3AOOuEbUQr|rŸ_q}sMEN$Xcn6XTu5u#Դ3CHGblɬG+EQL%'rS~133X )d):6@lvQ~iC cO?6a`^2ͬȩ DEΡO^24#2!+_*+ެG,_;1dP9TuuWWuuWi#`ORAH\0vj謜bxa5pF2{Z>'IDd g#5i~[G\Y4_S"=Y^v` z`98Lʌc۔J*Xx{޿B"+)򊪚DI$jlYxB&:Lۣ˜,))Ji;[x?k9;;e4c6SMHnpޒH њ(R9]`]TUJsuq}$;B$MOo>X9T3L.{s __BcJrx_ܼ}N)G'< LRJ{T9~1br{O*seN7tx8-)r !r)i9Fed<% USS 4#sc[78B&:tmMKx$LKj(F<nh;(t"AJE5`P2:q݀1AW"H!68H؀+ 805T1ւk5W֊T  -B8 m\yYPTC݆ݮBFT+h~]֨y 䣒rN" _3OY{~G/Obfܞ?mw 21ZXET+de)2@j%hIوbnf_o)F8W0M|n_h#U RoQ´$ړW"OȖcF3r4xL e^/x.G֘th2BǡRp4ƣ z%XK]U f \,S ͎}}Tj'j^(~ IK'B2#KӇRdp&kt1}K$Msq8 .0,O%O@znK4*r"2:ж=]ہ$(,%O5yJGLdőA1TY.A28hӀ|}Cyh!8@t]CvXӌ4s^G/ϹR,f9O3]) m٭6IP x@i2AogY\LKgdYhx6e3,l5Ѱ[nn77[uCkZȊzol!$C nkモ:k0}Ou 􃠎8w)'t{ۓ9Da! !UB釛<`cجkĜD<B@!E*R"_ HT\ j@')Ytz.2/eF (,<}?7\^d$/mO[q.2t6| 3Դm R~D+#I2֫^ XoijVq2-`Q]猦t펬YXۙ]NadRQt c^HKd5E*,[kGp=Sv(; ח"at<&71 =:/鄰Yq$,犉`A_Ssn^gC%Ę|xwd0٘~h轧nHmD9e6"Ǵ1;mfQ:Wh) !$UuЁH<ă(:"E (0>DɈ*6J@ZO<´{ YȲ'4:Ih[Q* "$ A1&"{R:ayAIH%N&C7^hF wzKv̗ E53tZh Îެ*AV3X1HҔmSivs/Hgs<5w7dYw.5y"J2~ 6`2uP ~ͮkDg_r#Q9'G̪2iO*%zQ eZj6[0 =Cr[R@1^`oW7-|?ݖF؄ MiK>Ї0xpAsq~qCDehN`}UGyA0]\zL Mt-MCg ZX2BtGw q.RD Xgb\p`-y= Q%Hhm"/8BDF&꡸zc@)E$H$YwtA4!D=l3gXꄶ?g#|tM,/Po_]U#,A)ŇkxgS%wK=Ն{~G<})a\\>7[לCmkjM⌿ [4%8vŘ`5w5c~|"ek!Rzi{Oz6xx,Pb\#S4P0ޢ3~Q\񍠓dh{u1/E皮 "vS1kkL!SK|x9=@RQw'@ R@i/"qD$iܷbq#AJIZ"&࣯D`#T xH!D0LfGf@ݖxJQ̏N'@>3Rvepvzkk nů~ !{x_^R%AXN R"Wnm.,K;xRy !{G%!=ӗ a<Mr8,و14&֟>k$KbRLFڦiqdiJvC1Ѥy] $JYLR, wtR)jO> Y!]2ԇ>}b4=Ʉ;fo\WL#ьyr{,N+В-ng lr}9CXk9/J'mz D@ߛXz DAgVS7iK۶$)=RI ,OnKL-ZJFy !-/خ֬kFUA 3'f b"S(Yރ6@!CoiMkH<)xL0{usP0)DI8>'_WEN9N)')uՖT1c,Hg N W6[:k8{OObt壗?"=yzEB0F쫟Kߑf,خe63tMC(d{R9I1|;Ĝ`) ]@ M3TcH8:CH5JQlѯk|bs~T=ţg~ w5Nj~??{|sNLgܲkwi~{xJ(!B<}a\ }ǡTJzP68Ɠ 0yM(4S䧟7k<TQ脯934CXݯpޒ:o C%%i2a >Ų6QqcX82"1Q<Jڇ[p-hZC4\EM6D @q|!+F~9zfB洫4HU 3lF9L֐7q7{52\\>C:0Mx3Pjq(Zimpk dYN D\8!=pj(!XL^\⻞I5!doIچGP7NT_hrfUi1bsw*ĉMkJG#Uk4g\iTJpN>fѵS-iB^hgT[ MbOخWfS>zޓyzoWy1.8i.: 8Q^CgOX>}ܲYOx9b~|t4G8ic} ]ߑ&)?hm1tdGlL4c:L| @ GCo40f{eH qW8 L븼c1v̗voobH%JBD=؛hs2h|V!>߂zK&Ap-& IDAT %EZ$ud2'dݶnTG9nϻ ̄;tL/5-Aɋ '#*_sq3dW -=LP_e$1^0q{e4]p阺۳82k޽\xfǏ1;:~u|Q2N?&)]P)i.**e:( k.82xޣd<$*2$a6a*ط{)<$/gyL$B',>4T2=;"(k1~;ί{gɴ`Tءeuw=}'f}'Q ^`ۖxDȔCDtMnvTn6C׳?F*` R` Z$@pDU"(;4t@ӵf2, g}80eL CX1WNHT$DX C8"5ZR-) t2ytz?WC-Z&:ǶF`ɋ,-G<:=ל_,_}Ũ(Xx`3;C˻.zi57 Od4|dQ3&˒јg =O>e =BÇs?=¦s%g-޿ɓFӒBJnn!GNP nJy2-)QD߭XmքT rtTi>REyf/v-wT Z2cI$zES=~}s4r`9._i;(YWprް=l5Њh/$B%4]O38z|1'+rfYLa %e^>`麞>WB0GG#j@"/b$8A8N1'Bҷm)$ yLw!Rɸ**bֻ MCX}Ѵ[38C4uNsnޯ(ȴgǟ0-xwuZsKX٬9=_ FՌ]S}( 3o9lw<~Durem{nϋ>b)NZl/ X{j83&`cn#ԴD&3EhNl6pP9"8L!Mv`=% aQQ;{ҁhQU϶3L?_77؃?\* ښdN?XyА"bRsuqp~wqiWe ƣRl$Zp# 31di(/vwe^<0 O!%mopF2 =O<o<:CHt]B1nzsF]VbA#ɳ,N>EK4Uz>ܡD5eӒjdF13zGUdF~}w߰߷'GGsH^ں'd>b^bwG'$iʾDf0,ȣ I!@Y7<={JQ{nc2BQaRRq~s^PtRMI*`rd%YT%W`~-D-0 Lg'nv.0/Qg'ܿ H0rەi{T0LNJ2|:GD0IŻ\{X.!3 Y:GcjSm`0TLFDF(OuJ =mEʾ>pw~szHbeQ-Ӵrˊ"k :'!Zv7꘾R>xA%,H-g\E@5-}M3nݷc3esqEw{1NJ&9_0Z.0MO_]ҷj~ 75g?9|QEF/OG S̾÷o!IV@bƓ4[V{g g[?p2?)ZKtrj{ɒGr[) ɌtD״ 1RMf̏*д w"O1}ޒ;Y 6hXVlw$J&xȃC`( v >0 6f ĹyuF$J!X Bi!H:JC )]#X֣H=J)9͎-X괽5o޼a[6(Heɶ!I)Z5YR ٷ-(NKӊֵQT nMxls7doh%s״ϤP'_=B*%wL'Rx<=S./n(w7kPܭoZ\oi$G9\ɣg]oC sNgǏ1Hx{:gus7`T͗`$3=5e`r7\ЈMM{AqS.R^>Cޑvt1ah:!7xGp8xv=3 D$|p߿oi5i*24;vͦ8Ůp!p`//Mwwte:.Y.\__ҡg6p\RV]љD:.0B"chZKv yA$ OnZ1B,e"I]{h[Cӷ6<]1XΎ\\3,ל,hP&1оm0-X-x9.0xޡuBJ1eGo(# m\RWHȴ/k7H]~2fs@a@7"an떺uxPX?2Lzpi96\fnjFs6{nń[Ȏxj MÛ>_5lnV64P-{\sn?Qo-ާܯ]r~D_` eED%Iߑg4Cf}~E>+stz

_{=zė`.nWaFw4?L j۷pp}q5À9C/_\ݮ݇sR))ծ&xonG'Lǟp)7տ~7^t޵ Fono ;Pf)L19p #>lL<}5{dpxq{}|:d9,ј ]ׇaTUI#pI0 Q=JDE%Eě&)iȒ<y1k-JKt"X|| zyr9⋟O_4{e?`7=O?֯8t Պ׻H8!F@mc?:cڠ4UŃ:?Crj7Ody<_|%C?7\o5ga>qH$j߭ޮiwص˻-gXݭpd:'OSfѬX`ù_|ӳmU<+{޾F!u̐t:'IJs{}zR& A8L0͛ ZjNO"Hң-ﹹ<`: )݆;h;3{?O[|_#7k"ǯKkz>~ y$lmk̡%O5YҌX I 7m"Bt=l>U4!)*H8-Z+JX(JͨJN+&;z$f:t]z⒳OGse{럳ߐ"q3?Lc"3.? "s" Kǧp~y`&^pE%O^>o&h# M)uM}0̧3t"), En=W`yl y sUPf):30-['M;Fcل}4C@({&{FXaɾZr}qw "xz&˲V(#MS ux 8呑QyDX+gZL1gDZĈgii-EOU5(=" Ftsfu>WΨ:I4ֻ &${ȫ G#΄w߇Kp ßsqqbt R b G۞u%+nnV\]S qBQIh6h Q47Ֆy쌇9;!j(90"< ?qxr#eūohr ~T#mׯ9?P=_I:W5{D8hrp'O9ƻ_%eS[ҡ&M#MW%ugi Rқ|ȿb:淿##DQZ/P8mO݆\SwhLRE?ǟw߰Z隞Itd:* )lV.cwfShwT4!" {dd]#tc ,')ٙpno$M@Z궿CFwXq%t#ͦuEQk&.P kBl*:wvKoӈ{99#J4 8Xk SXm/LӘ/yꚾM;'pmEtGW4Mw]C 0a$-iLnV+ʪj,yђ3"otDjQ_<{AZyP)wn -%%S/n8? IAJd w(C+s6OCu'M%I`w>#=}[Gލ& qz#K7%e.1}O+,89a1#F(6@qXs!ٙK5goYwUoX5Uu(Moɷ%||}}pG2???3vGcNSG;,d9y{nV 2("5?)kwu&/ OGIE1}PZca8/*( ]Hibg uUcATk|HhٙM۸a<08C"a0ݫs^}w B_G;ڶEWBt!ISk([| -ۢ"zf0LDѐmБf3 4a2.ߒW{`)ɒ)Y1a\-ltR<҆ M.qrTE˶ûR\UCW.0#1g\]`t0o#ysq8sz͋WxJ,+b!ڄh-k-Wc01uݓ2d){B!uzUc雖4қc^|,fSQ{C l0HF$jK*#0t-Pi?믾˗Ddqr8D`lEZ꬇o2!R7=0~4U-X{\]^ٞ~PǞK"iiL]0=}U]H/oH -i`: ,e]uJGmKs=NYsP(Fٞm(-Z8)Z,pg2<㉠;,apG?%笷_DEə` IDAT_|6F;" Pww>6!dJTEqX` $q eYu5mSY0֐Do {'y"uc~|[VO%ib uN$ᐾ빾ZQ=]Ȇ4CHD $Q BD$(=$M]4K蓏HҌOm"u8{\ד8c4OGD#Ӗ[\/l̯%䛠4Å6[)$Z5q!Rc wI8I@HPw}1XLGSbKzGoJ$q'`<]p=wxtGyh:\ҝ%4<'74uIKv&AHS%s1nDmGmQQ-]̫FIkI]7l6["Dr(+ M}{%|gϿ9nxٜK%y!imI6' QēONѓ;#dS\\3,_of"ehpk{-&$Mד [t"waqpx\]]!g?&uG4H-ӶDI߬r6yN^TG(tP*auxxlPZ ||0HtmK$ـCٴ$dyvLNm-S!>F,1&XC-Ih4kZa62骒3'|ͷd|[zoɷ7DCGU 'H-B7+ވm]wfmO]|kL#d8 ,>hM@> J۞ !#Ӏ1[%LRܲ)f4U% u20W/ʜ*("bwwl9u-i3OŜ2y-7 ^@,Ro b&,WlLv1m]u$`Wn Bu2Ni;O_w`Sʪc>[4$+N?av16/(F\G<FPߡiBSP5`8g>,Gu^2ߡ Խ'JƉ9ݽ mSAl$I)mzeށqtYzfRAd#C|{xa6URT%痗H!po:f%R nn GcP."tc6rzݑ4n_12HNZvAJ'=Q*gLF;~y O-Qzu1Ha a7ld#=yx4^rsxgh:[vTeCԴm^h|pK)9DM(s= Gczc'SQBQXk±ɇ(j% 2~ހP1f?3?|̇Nw_\";(#N3XC0 ݛ#rzz5_\^ݰ^X/,Ka!CY-W @k;:8XLhE~ 䛎ͺn( tt2 ِ1mإ4MG |̃⌮y5kB݌{3n.A g7y3x1f<܇D*OhZnqk-J) 4<;sVIJPȈMP֎e1M}TOjcz c6piB2HepƣcMU7()`|@ͯz)5#ԇk-5dqVP Esӻϕ? {1{gx<t kŹkۂ"Xޖ )Y6'c"*0ܽO:;D~54o֡g>w0#MWgܾyt2 Jc'¨sH{ *BLc :]U]QAqB4eEQDRY8p4q^ 7hݱ;fIeL,b޽z 1~ =zB*Y]`Z].nwrȶز,[  x{xgG R|1Gdih;hw8I#պ!# B { QF]KU!% kZ>Ô8.hDHrv~ͻnV‘QdL"81Q麆m9'JyAIq睩/M%Epg7-x# =J eqР}FJ#%" -, i AWU!^4I2"R)QtcB&?fÿ7 :1e8CEgnVh0m9ɀsLQU9W!ш8:]j3(u;mp@6H(ycMgζ]j8m *@`q]tưspHHےi21x*')[G0$a:8;{P=?喦Yo2"Ͽgooդ`6h5=>F M۶,oޑfl1e;kZR= xN(cbތm\@8E4 Zc*xWCA6np F3g n+^LgS"0ht=H<p8$gggel4}Wޛso}ɫQ b]8=EkH)0i-fK\K>ObY5ؾgISu[@^&p60Q_PV5)2J{puw|ŗA=}glW۲7c2˰eoAKsu3ͺ uA 72t$1mOoC1>|St8MHY!i[94KLF!,7ۡi;Tq|gϞRnq}Mg,XZqZKckN';@,Wg,o2$i&бp|K~/7[lgG<}w-D}=߼䛯KO̓-EZ$DтooDƚtM"v%6#4($]UQTUQ(˨ۖlZ"wH?8d2Q=U1+eG^hѵ1xBHS7BP*a?!ۦ@Y'рlWkC 'SِdyPRw!0y|Z"USmp:`oJ,x Gow9:AT? j:ix')˂c9qSlKmE+ ͆wz3@@zQVM}qS E&a&.j"^n-Grd`YzSq{b8`MX*hZD: %8J3޼j-(Uգ8bSwΆb*5V;|goxP[4pN>(W|y,  E2 Lgާ:"E*q-]_S7qIcE]ۜ2ZSl/ F,rYDi48e{H{Yi'?gwr#%5{W'rW~gC'PeAt2!ggǷ<1z6x g9e 5ԛ9.BnXאED3o SXڂ$ho4U߽& eKѐkXvXzipF"F f4(R//~ɽ)Tt]1&_S7W7Dҥ\]^Xaf.b} c1bn;P tX(!G);>i y50a'O>~ƷϿc2#%?r||4uM$5di6Ux:h_&ˎm)#Lcg6""ATHI(|' ukh,h*KIӔ鰶giΐ E}N۔hգi) YwQ*e=F;3_|"Gooy-Ŷ¶S*^"Ue0MxQ;tca8JY^q`Jp>%z$ S)&|3{ _:.x9ME$H"B[wT@ӜøεO15_+C͙཰l==?g>dJ{bMH#eAܠ, u aSM0zE]"%$ EM Ul+Ì%UMhrS1@ R]ێwTք\{6B!-oHӘ]#Z&x'ۑR6{mCymȋ]k-d )ж#R!c!Jby\]]ٰ>hDE1I0r1=MEePZb c:")m|2DGk؞(V̦1وGkҁG'dq믟s%"=[NN]ԕ?5;d:b4w/ߤV7(Hkᬠ3J\\=|W<+Q4&e(Tp|z>6zE-lZHGܬ*l /ilCQ\!I?+^V?z5WXp^Rvb6UCQDin6lxʢOPaBx'H:آTێ4FpEFYh!q6B7%u=noX3&hC><"OxT%5Z*orHB bfSpVa3=wx7_1d:Rh-&8i+lD;cdFP4Aka[liۖklULdR-rD ۶gkT0i -98Y8rpKthv=$/ t頪:^10L[|ͽ!I1 oߡ[.ofIT}eNCt8~xoD0pW; :gjuE:| Gh'Q\{9by{b3<#ohx1r5Nu "X54mЮJ2Ov(1_E$#m9( 58swSLWb:[LcZj4M0,E%i|$ϟWC8eu%D!"2ُ?|50ECI{]zc@k~ e]RU"E VGG IDATDFRT7"XQ,"th-Ŧ&_洛hM ![mvl1mN209o^ CJAozB)s|JG®_#S87/ɲ CfmڐpGSn uU#mG)xLt4yv%^mOWGGv0y֦iF9$a2u-}ݛ[7[Vˆ : w{>:5?/.m<=ZsEӔIKx$ˈ M%g+"nDdFnL=%͸_Bf1#l9-f(P)C_u\E/,W}< '& BHgcJ0w\_#aލ{3#<=EJ?>2n%2+x6섯T2 } бic*%ڙa 9$RX2Eo{ʪ*ooQWާBL)Il4ᔪ!b'hqA%">jh77wx:r Eyl'&7ڞ"ӜoV&"OO{~>]d3!"׫~ŀ3L#>:h'l!Xք=g&Ls%e| JmV<ׄLUITOG ȧzu36&Î1e& {i2) (=yU5 EY%#23D9S8[>5W7X7q/?!Z:n%]Y)8[Ͼe1&|^"G,BkSzUHYQteQ"dV "Y^0xxHێ(U$)fTL3 ǾfV<~G^? ogGrlgfޜ  B@HI?>嗟jnoohd<~33nNg6|5U#@iHUU4MvS /?V|ad<CD\ѱ>_<ϿzvqI{ho@ 3JJBL'QEꪠ L%3MvD+C:Y g)sV:K#ue8Td("ӊ0''sU-p.0q`=ǖSKI; vvŒnx0ZNLH?oseFtJL)a4/ՏQ0tWkVKO;͊ YV uA2-48|p%e3 Diw,vJbLJէnwk'6qvʆx8*;9S98 92mĢ^ NYb$JN>ܳRYgUU$+ ; ɩ93.s2qn&D(  o?ph??yV//=v~ yxHy.9XZV !aIBeUa4LSeαZ0&g-S7~UUf?:)+/BAgD0(] U@ZY-(29v# zKӬ\\Q%㖳Ϟ577X#y4'E8$*EQf,͊fQXٷCznk,JW,NyɎH#&cv esy$4J|x{<pHpBrlTuOiwhsD v D!NءR5Om~om\n,W*8eҾ6Sz%K丽}`gdnġ:V)QN#G9%CJW{Tg|(-yWlN2w&˙D KUiJRqj&Doψ'ǷleĻw߱?Lݓe9\\mhr+}9Rgg k0XT ۇ[ Dʜ"τ91CoLҤ`LE)җkGɦ O8@wÀ0 ϯy>0&=Y>6 ~Іq@#>fUw)r==X%c..rL8;l6*X?vV]Rd9Rϩo~=aس4 +y!طG~ Sf CGYyrza$/ y!Ȓȓ :2w='}uRSGZBDPe2? \H3ͬUނ77[nb}?m$[#__?0-yn(2_^#7\Y2ڀ)4.yrF(U;I/&1MYFeURxs2˦<~!dFH瑺(~?t@tp`].躞`2K?ܲxF8QfWmU\u]=~oLa, 5>*E%N\Rc(:=a cLvĐ@))m띃СD$79!j>׿-9ۜouqβZf8,<} s@P*<;cݔKG1 ZRe#uǟ&/KĪY쟶̳G ,s;ζ=?~S;M|o 2SgHY\_?ᜍO+) G`-US, まkq.P)}9~.:v[.7vdQzEU2HAW\]]3'Vg i1@gɐC)1ެGWj0x v9q˯~[09ɱx9vmrwwf7o\R5M8@F,! <z7sw?zMU6\Ɓo!#q~q9VgyE{AۍP2M)&!R), :H a1uzPG dĈ4 |+0 =-NZ[,}/(y^0 p,K>y3a(+?_FI^z0"@g9M~ˆ)Mɫ4( ʪfsik+ͻwѲb*w &e w^L߷2Pc݀9U#uʖei+>_V>0?ׄ1DA$ȾlϫO_ry,i\^g~.g9TUP'Cj4FJ1 wx $y Bki^s8{lUs}uAOn@H2S]88~UJPX'[G4:y5Y(83칽{a@3ϲ<#Mw|<?I㸧=dbû@?݈EbVLÌOi& Ds֛ m߳=pݑ_ߑkò\`2+@(Z& _/? Լyi)qiۓx'JbxaLZHN3lۣ  J熲.vxr3 \\<Ϟ߽a$Z r B\/Y4ũVRIɻ-$Y*!g*!FKж#c6 r(-OO{쐈ыD#d"1ӗ9D1GHOTFBfT)ɥ$S!|!8Mi \9"x#볚UrW`$nG{)JϮ3=_~%7DdcB΁#Ch=E96_~\g"Ϩ٦T]u1$EŲ|緜%"ȜHr#^h)'+e?T@:KǪ0buDkОڠ\)>co[if,.'"ݻBi?0:a;ё =w1vZC6l駙ݎ/XΨ<+ӌD}|~Kw#gaH8"eP*Z!ĩZEzB b2+>SquupoQTATE\QRC(-sCUK-FxUbp.XI^dl*],<[PH$d*Rd!T*C %aɪ}o;=H69U@%owo8_(4[Nxu3rsR+M6ׯBj23//>'QD`Ft]-+*4Ϯ8h9q쏔ڠ )a3#uS #t,KͲ f@YVeg[\@lH(rò1ʠT yR~rdcsaF/<<'\]\Q E*n&ӌsivJ̾j2.נ'@].i5§PUz #:!~qJ}UWEf'Y65ߝo9ñOMxRJ>Hyl{f[9PV eU3 <~*PDD/ʒj0J ^xj3Ch6'BeM aB@  "@5ڤ` cH|#/k"QOjrLPtL'Q%%ΦE I˵bJND"3%R*_L2AktT og2%)'E]BR LO)+\1(Y. YyYi^#0RT ^Ƕc&ZAc:BٖfCvds(ASP/"GJF9qYsp/9~dxᎪ(qΥ=Y9kcǁfQqyq.XTNTՎ2zB 4 aѥċ*֤L5!XکeZ\Ȗ #a:Z((N:CK&:rh``zs(H cˢ)uܮLs x0}lKqΝ ;9 ^=R%?k>1=UUql[_z34P+2"9;+kE KWy[}084TaөCw/+4 ño痿wd?w^"&Vb?F]G? D܊1SQU $˴1I_NIvGfpl0"z>ȇׯy 7T'

~|O74͒ed6ǮEO#z a&͢a41#Awxz݊/.XVU|D ]/GnDŽ!22Afϱ{|sFYE@LtZu]1O!d1e SvA4L^,DHy' ~aD=?/x0m 4s0@}Ƌ6k{Lvn*2cgk?޲=%JUh}E+Ę(Jp{X׊ѷJfx-ELPuuM膖}Kۍ N98'+ `sv4ڴ;NHY. 6f겠9\].?)24 DH7#@D7:mx Oڶ O2ey- Z铖8$4Djr66Sd96ML^TЁv'1̙4q.MH@w#8W|TlZ >!Mㄐ&g3EӓTyDzԴ^0Mcͪk3F6J|QJbD4$tޡtvwWkEh I@yÙ%6N~d$9hYWKr<:點/(2Ňp{GaTM0{0"(uY1hB&u <9QEgfB*QZ0ibSC^;Os43 l9vlwO(mX*=`&McK׏GOUg\#OcP2#ʌCS9|%oi>{;{|=ZⓈIM#Y84E%dbkLA s}y2e9?rSLxbqF?"!&+ H߿Iy(]| 5ӿ$#uͻDxmOCzv{/$ocF7t+~ď3CdYQg2-ւ'8Gf Y1;w:/ }RT5Ocq/9캘7 hMdRM nYƱq-z( Kܤ8]е 8H?p<FxȊ>JQH4xg4v>VJDixv~zyw,֯x~|`>OS5+%$g'9^S{ %gd˗+ՂB!7./W?}Qt7 Qg+Yr/3e;M0A  <,,X+/l0dfÙEd*ԭsdD>ʒ)?Brd -"3]<#QXPZD3؊] qBVK s Ee$gEǞIXLxHoq`e~_K/idU#?Dg/=<ǟ1p<8$5!º]c$h۪$Hlt7M/AHjf9A٬.~)(IYW-R 8OeYV2dbNu?bA)? F[*R*|nOMIaym*1H b$P`J~.Ǭ$"Rp:g-IZKd>)%o$$ҀmNt R1 Ƙ %I:G| ĘYarRP&x{qQ֒(+jRUuÁnU&WJ)efLm1E(>jTg7]ݰz}E$Rw59*wP %/LL-LT-IH$u7bzP 9I%~rD Áu"H FhpnϹ:2/q`eɉ!F,@+ G"Kni;H؜BBȌՖ%{J: Ot撔`fL]%"?y|ӏig[(\ !ѓ"dkƞ=.L<S0VroݳYw\\lik0itHq>0!pȺ[*z uPjC%U֐2~a=c-O P@ԕ| J q843%aMKSG|V$RA2%tUt?xkz8@-~'KD;lᆬܜ bZ32J P(-X_(ڶe=B,:B& n;GU5ĪXܜ!OܬHm)%꺰V,B]Wtme釉pnA[րkWdYg<\\\Pb @"p'» R܂me <ۻ *.ZVF$*<_: 4U pq!2q=1@]wiYMzPUVcىh$ 6sIY1V98;ߔ cGB*r)* ~|84m1F_ 2<Fе'>{n}DQzj0 *'B<=>'uGHF*<`#9 3)8&ج,S|k5E]9aQT1E~q\!We^;smu/uK%=N=UҏB+i%W- >$V\D9KD%1"HZ?KqCf:|XԵ>b#Ҟu(躊Uע\&UEQ/_MLÂtX:~K_ j2缸})8w: ^=Gr˘rwB"܂y||mV\O\9~~5ˆ_&|%~~q}򳟽mMmx-̋$0I)A"bTJd SYPI&gEeWs{~??/\\\P,V(cƙ#0u8R$ cjLUO~U\c(Lv˂SmWh4!!r~JR<<9&<zy"+ W7\_'ǩ4Z!1?RGZjհݮxzydz_wT'FRպ .$~N<1kPl*!dFוD8^{8bs%..-7,//8 晇1F晳U!< <`v4uCʚ(`\>E8ư; "1):^Ī&cW~Э.j/RK-)!zRPoϑD)0i 3t*%D[u<$Wu֊983SLL[suu1Dvِ@iȩ۴@um1CI΂ǩdC)hպZs^^0y W_}Łj[o5Ǿ*`+ Poqqq%vS)J&+ha >HTU8F2;Zh~ L͔F, y,UVk[g[|X ]]Ln"54FO }vq4\_߲j*Y KfTnԪ}f:1.LDv-ݑǧZ0SrGNTio-–D54(u3䰕*PT˛Y݇;I?|'^pw 5޷ <ȊQ(P+I!`*=B~ϙq%xtU8h IDATh2͞i<=qsć@L tD(q$"0bꊺF4lU0i1O\^=2M~}+;N,#@IMz`l]/Kbpz48g^㩠B)ɡ51G5<{)fvO=)fl]Ӷ4Gm^()T(KP>xH {r*1-%BMMΞ; &`Uxd#UMXVxoy~cZ 3~&o5ۺ5x͚XNHi!3.sԵ!r14}>{', ck>y c4~\]s9Yh\d-q$XEBjDPڒb=[]}&0qp<1qGHPЊi ), VdoHb@syF* (iͱ$hy"zƘSXqnkLa{FLe mmچjgߕ7i&G%=tLD1 (Y\)F1][BJjŪ0M n./˗Áy#VcjòxH/]u%Q"E=_8gdCOcL'k[rL+yb>rU9KQڦ) )+p@ ZuL tBD[D7_2/^"3@ŋ[GϯY ,RY| VT5,>swĐX6+0 Mf{ǧV+EAԅ6KȹdvzJ_Rq'6@?@DڦO1fڦ(C dͪr#%Ϻ[jWG/a<|wqLS-˥{ZYjTe[Zi.fiH˞*)łɉK$B7Ӵ-Jc}?BS<ƀіs-Tг8'Lo UKm-2G @]MSW%!E9Tں]Icvciͅx!.?qt {2֊ן'~pH6i.)`F X6?-1xcJRdEYg,]b<ʳ"uB'B6uЏXVqpIվn (*w$R ./00%5g[q"8OZ~O{ hsf^JRkAY XR@jgTVcDB h,ᖁ OJgt Yi6MдjmGH){^6])S^Z.R)3FxA&(#=g8Ph~̾D;eZQX##Lq+A[s M%#}s)iUXSK Jҵ59y LC+Q D)`qsJ)֦|@a*J`+EJ R %Q ,D,x?1rΉJFM zje*]zevp4;} X{ڲ=R$VI Yp`'R*_)FPbyTh]f_[d?93D G I1yJ>] 8#Zb"sLi4=ggFt ]s}u6j0Zx|8pyycy8R`~^x~ f'| ̅5CRD.>|!c7aBv5<=XcBΞ!b)5\V q˂ZI1M|pOn_0/qT1 E9+TV!e9DC* 733X)PB: ~b&fWxX*P*J7!%1F~OMۛ'4iecY%XbbvU8)0AEJp"Ҹ'Si\˽)D2%c@Ȁ0ĎusgwQ$ ׭kι6?c2x@?GgkX <.~yR"&$ i-n#'Ɨ!IR]lv7l%c  hG~F'‡W3# ҘHS@Hs%YUc1G_<h7:|ʫsqޓ&9IZx$.Hz_=1Sp+ưŴ Cr⫨@}G7dib5gt5f!Vma|V?uo{b| vZҘg7L]CI&k9E|5؉r6CHE72v mZTDgf ~7~x?Bp,Hf'KS꺦nI󂾭9={×}?% @3t yc;T%+1VkRRdI=1{?m=C!DjE4J. P\_=cu4A9:JU~{" J~yv)͖3@X70_~o{b7?bN15vJ!)%Cc Y)R!$Y*+&kpuuAUH҂(0N T@ ;iJP_=1>m蛆rSejkr&3dCwoeYQTs~$8񞤪ȋ$$ C>_Xq1RA4]CsrrN,Nljym{OFBObknP4!sTLCQZm@AVMG5Xk4-X?xb;o`4I82B@i9OUVXg(iDv{r(*'qƮ'+ m`,AƜ<|3 e(#dŌrd[5(ByF@U"]_}L3Kpf`P%lw,EN4i9/ 60=[`fw)b1M7rtzʛMN+,F$I\L] &"' I%#yijTg B ͎*v_%u0[ȳF\&GGO{b|3?m`ZB@>fGG9OʌG`DWkYA/UQ1>HdJc%xKYkA KÄ yQc (%- ۻ D̫~P{=1M?AKItMM8zH1xOIq EY;P 9dQ͖l D1q!RUg-ff ;XoA5YQ<ˈiX-hD:f'{+kJxKGtu Jxg2 /!Cb)f8Z"UT@ M$[4eqtLn$*iBjtHC(E6]þsvyq#A"$4}[4"P45'|5pOg0 =RH"g4#y!:ƙA =`}|;owKC_ɾR7{ʢ"x-EQg}7EXk|$QD?MDƚ<0t5C75YVps}Eb&;dY!$NK4 "@5 v&ɿ=1?e:fzBYg,Bit5;a l5طh%I bNoMˌ!8F" g mgq$Yv QNR!55G_! c2-+ʪB1bI,g<oe;60A@U>0Yw?}:ha9xK1_c"f%QRq cEju 0u=Q;o -RiŚiƖ4/(gF3ĩx(%v<{Jh $f6_"mv%a3DiJW<|CL86Ofw{>~ (l |;LK ADQ,8k(sH#:Nӄ'ISXf i^Ҷ=p!g^b3$Fꎠ4[;!27CkM7h!o7eA0c y5e>C+v[5ՂG[OeUr"%)g3s(&IBh,IƉ׾o{b|'Bݓ1:NQ0LE`p)c'IiIZ I2K?v(rzQk"P﷤iNQ`z ;99d]@Z').XF;#HZ::ÛՌCOgA@ im;$w^MDIC=yIN(-BsU'a+`}Q/w,RdYIY-yYR-nO();Y4j477L}J)1'<}̓u٬ZCrFFfG$Y s;LN}WRnuT՚5RDqfc ^̀uj8Zno8=>nKpJ%֎()QqD=aIa)\5|i_? di8يhǁ v!V!%yU1L8YB48J-I9*0_膞0hi`}|r"-K!O*Ҭ"!=RV|l8Mw(w KrF"^ЇpM@ȌZ͖]f}t&Ԣqtqbsw{VG"J :Vt]@ݱXᜣZ̙/l5qO/ ZC5[ uBf0DVdmYSv}88 kN0/&[N/O-ލ @VdtHqt-W-ח7dnJL; :O_啗>De{rеlvHR(1}G8/R&ލL}4 ~}ג&JӒirH$'g%"t%*IڟxOM?&sl6"-G(bN\o2{wh1HX4->A7\] /Ho U -C7]04v{NONSVsg25NqvŒ#2(Ҽ˜389 2@^Ӓ065"x[$E%9]"D$#TVp(,Z8e舼\`l[81[2g̪9Sqy(ntc0 D=1>}c-n'~N=89!Kt4+f$JSF@!}ۑggaq@QVcC7tJ3ySVslԄw|IL ^.X4lfKŌ`=UYrbVHqy,ǧɋy$t ]^xƱg泊8M;at!܀V1I9W\?{F!1IX25M}KUR2 S3@&1S4a!R$#5g&&kpvcnɐ9l An %O8;tNG;!U1>@QIpy72b9_5;8&*A^}l}H4ٌ(o2_y! 5'52YG\Ω+h="10 5"xqO/2ݡnIDgmEZHH#4q1#]א)yQ0zk ZEXcQFXc0\"RųhK/3v`Kp6')2p&x8=fjfs{Icْ()̗G\;,o)2(c L̸ے1e0)z` G> 3/w~4c%Zk)R@[ŚiQ"bG`^JjYK^Xnzugt[y'۶v({']ߑ1@8b@^~B%HБ =щZK-u !)EgKc;"ù@e\_=E)3G'8 ͖,q4LDINS\=mWۑJi^^p8 l16;$yNsBg3t"o IZqy9 QBghPZPZӷ;F1:CbډDi&k@k79c?! sgRo0\G y^%JZ˒8->f+!{֧G|+Y_e8BX~W83ՆxJ{O;4|(c"+&욖 1N(P״h-3nh (>UƧ)U1OO}쵰Z/} "?Cg»oԴMK'DR9Tv#XH.0?T* GXdqBb4A*ģUÜ8n'Jsd5R>yr;DfE:A=mq#FcŌ(Hb40P%y^2#Sߡ$@pe%:8(˜n"` 7xp❣w ÈR~\Z~onvwة'Mcۻ4c6_[wo 6鄱)PJtl}В#c8أ`*JɊ%iVQUDi=qZP,xLæ![ ][s }%R ?_~](8 a!+rHHa,K;FPc!KC-#V$I4Yx@HpCP -C߱^#A uP:KNGB?ti)70_,itV3Ւ݃ѐ&@zkL<&-KV''Ѡ#4]3lä I8va6zS0֍/ɛO9>~ry"Њ,iz}r$}f4N(QJҵ{TX$Eiv;# v,+3h'p\dJhǧlږਪaK i5gWoh_Gx)V?(+?y3fD'I!x7g~g15"foFŒ,)-O? &Ok!M3|tb5:sXNDZ#f]ݱX-(ɴ35["c̀7!%"JL4E')j6GGBRs8eiq!)spa[nR1EC5 Jjh!Ȓ^ Cz9J9:zpH[DCBVg'lZ r>ÄA*&6(9:{n%O$cP){BXx|M-H yb{#3o-eeU0-O^ۉ,N# zn."}͆'\7ђ~ nbrrγ [o=y)EQ⺆m@mW3+Gs_?Ʊc wWW+zoAAE|yJjt,(ʊс58݆~!ɲ02wi~뮫†(MG4Äqvw 0axA?nˬ*~,O|򘪨ƞ$K0C;Ż7M{y|Z,) ~~wYg~<[:*}H^ONnIcghZ5x`{wK[͎11Mq>cuboFTrUtw ~CZj%o[̖KbA^bM0UM✸͖EY0#.xYH->x@hNO}vۿ_|Aw<1v" x#..98a#R"+f S5k-RC6X<򰻛Ib }㭣fUN gk~a6[1']˔TI>&W4tqy㉔F*E7~^|C!,-S7=3 4MMVmw#ݎj8Ҽ$N X14 q|zb*)p|vNOCx(9E%8t mg;8p )4]"d~OY-ye7F,=fr[")I4+0.bGrƾ"'Mb&X`xkA.." D'q Bꈶޓe:aSV`CeQ1bn^K5(2!<q$!zJ͈")ʂ)79t$1>bx|O8MX;Qm^nYF~bu|J9:91q7 Sb}B 9KWq<ߴ4GjlPf0_.X5-| F1?*( (KGHqЦ1REa@@= :05ωkwqhh&Ϲzzq(IQH HEG(:ÀnCdFOH3D$(<:ewHv!E%yqx(>ŝf NyFEH݆qcݒ%BFSD*i^{B$3CqttDtHUeN; LM x,PV v4IC;I5I`H}]35U1WX^^B c" A):q K ]h&g1lIPR-8D#0fJ$qN(-p"HRX=f8\:_Ikۧ5UJ؂hҘF`@ DPq3P(P!Eq :1Tb wfj韻qp "AtxY5t疺z5* j{ӁiɊa3e]3L=۫];#slQsu`Y"؟ Sm3$=8]4aEKޱ}OmKwS!ʲBiO<|n1Nn^tuYW?@ LFۃy/cr^5۷&+-{T-J*Ҳ/;ǟZmYfs>)m, `[_ ?o_dahHVU2p}q$,3*yݗ%ZH{:p9ɋ"Qʝ?12鷪2Iƕآ"{)x2fu4OD7|jw4-/Vu|9y^0^Ne'f\N/*|B{zTdHnAG4d5{?e!zڂG汧JlVڰ?1Yfw@>L-"ikBc4mwmM6qӌanE?{q͞,K/ f{ſ=y)A sgxQ%5(E۶4͚3rMG?Y͛_.0PoGՎHr9Q w̋g:?$y{KPW圲Z!d^&D֛fK7@qjuKX ~,6J~A^7LdeE5<B <T)h3ZPyБ~QBᗉeY&lPvn i3ᑩh\Gtv7\߽c 3-1 d2)aMx:H@DBy]E C{9Rl|BtS /Gڳ@IMsu 3/sJZz&-ɋ=dr:xOUmJq i ovdM "HH[wۿg__GI/Z)/L5yfӄ[fi( J$R+Q ny9 a!5-t=u,nB(EYR-2T4 +K21 #usE^\}/nW6!Raל/見 }wa/7TS:0:?Gv7o Jw~>",X%i2Uz{,.Yӷ}]摱1(MYֈJzCs2utS{aZqqjeue)ڮ'D!@ds'tdk^ΟDed[]$D(,RJKx-&ˈ10g>"^4%BD;,V9O(j [ҏR).EDE )%!D,]zvde=yjlp;"?-膑-Ot`"ȅx% s`urzAD`ꊨ\Qk޶/qn,2IN]@HMSq>]}?m/OMʁbzfvK_qw0BmAٰH!8^~0xdeM^enjf; MRDlox|xByZ""?ǩiNc_6ɌE" :y ٳ}KMY x?#jAtZB`YfӞe \}hln9_0B(Oߢ^"ZjtQQ8TT].Xٿ<^_t" [px|D7"\jwMToɭkfRncjB1Jz8/y钐AպF(=b n/?w‡oDJ{G(ŊY#D(&{MѬJsKfs"r:!G{l<*3?g#18\ CV >ct_ß}?_PTD?ttCOb"*fw-&^NybLn %4XmF.G2!疛͆f2|:rs c@yA%unK-30Xe$}O)TRP T&i B˔=tDʲZB }Jlr`$/_4%2r@7Ne<{ڮE+FC4)fyZB7/BiJ&,AEb}Ud<|RDag<^m)i#Yi@jFH y^~{\XB8UpDKV*qb۱,Hf LDja<R1M8S5kַoODf$8ˈTɜ "g/LeHk7/dV1 =RH՚K/X ~ 0}P.݈VfGI| "u=onRovӈp||bt,~qm6X) Uhq}{f8fgV#/'a`fjy "8!y/'ʢDi 42eVP%.FLYR4+LV!/*qGj"WwwhS|hce-{n߽EZLFnsS͒; EB,-\߼udƎ"Q&CgnoߠeqɄyJ%P;*8==MJ"xa(6/U_~S&kV\^ȍ$,(Jf U,^F(V E Ih y/#Y^RvROW jXgn۴ksZv;Ghi˫>dYf2kPZIKq 1ECр[&pdF~grmXU YQb'hHwE]cMR8" ޾C S DYU|5EAv_(LiBHe γ=M#zRD[C? }R*cFƖHya fi.38Ym 88#4 Ua#1x4G#mע/!`LNQTHydtQEHfexz~$9Vj>L %ed.#U]S<3ZF>} D1`Lj˅qƙn&K/tC);-IfV-j{ 2UYT{^{YE RpnLcGt3eYx˔Լ!$|d6=9_{4E_z(AL^ĨR_]%H"M|bH$7+5Hݻ4_|0vyZ,iN4U#9)ߕAՖ񙱿BkG6Lp{lnv|[IGlW[YG)k-pn-[ Bb- "-ѶfKL;mɋTNc1>nJp;Y .,K`su0v87{UX~7BJdZnn'*6W;L^Y0td6goʲ=\.[k?yvwHoܒHab&bpH"~YH0eӶg殅.XfȳM*PD/0Z'̸iDJd"6?{~cr ! Egq= yze*2GAq>%U=]x刟V-BIZoY\H']̲]t<"B@ H@+HMR]d @Qša{{GOeIY3L3 DU4(Ơh)a{ʲz=9er9S5C{#ax~| _9Eq(UEI׍2g文'ʪ& gLbaflV J)N#)v1,\ \3v=facJe(cqˌ-KaH%0=Zk;dyɏuکO&GQ!j/Xc]4EY3O3Mas}9݅;c!2h}ѓY- OOQ] 2i!sՎ21KҬTyAp|y?h`uZED)8czH9kI솠wTCFOYH'iKuJ$m,eFie i3"(ô8' H)Ȍ;'N/X) ]d.] ]R7 =eQ"d߳`f'v7xyDXzTȋ  }FZi&3]jdH]V5:+}t#w}Woߣo~cnwW$^6Mxr1ht]KUfx7Wfi9Dhi*IMcJIm;oؿ}%EYaŹ4'1dXfO4>/0SRՖiQB]RSh,yi9N\]&~Г[|gG?!x<еGH{:-!B20yq&l5RJVWK(RО(9_NHav#3ORĔf{MߞˊYW @'ՂRՎz%HRTYUqx>`e&0Ֆ~LXWePV583w)j'`b/ 5;ORH ޾m!Dhe3aqK4XT5u!jf8$NXQq  ?jD\&%(p;dit/ʆ<ϱY*%'hoOd{dyͪ|xa;޽usxay+ٳL3o:RE6WWE48}$eՠlYӄ`2[fƾ!( R% g9Ri! k/_ˌ[f2uiޯ4u&{9BCH5[hw!M2L3FqiJ0PU)&!9>8\? $' EUg d)d5Eu׬wئb{wRK6C0 ,nI ԟQ"!鋤W"]a{}|H1fM1&O0L#JI]ߦC.#c;е)!(rq%)<41hZz-cwv #wo FeTu. /O&@Z$Nxȳ!f:O YVXYnaU =~Z&lB r4\KyH a=cs2:Yb5ko4yWv<&T"f-1QxY6px|xfU^PY<*KL:<5GiGqd}EE2/l sLJk?tUIdTNQ ) 8 i8E؝{f9FB @]c5ޯ]oxJ,>=Bp_X55!B?8!D)@sn{,O-7]{c2NN2+!Z1.)=1Y^x~ ؞ ׻4v ǑMb\f)mI2/ V55}wa컔 4ub3/Ϗ%"&pweL2cE7F,Xv0#~v4u"lj 7HJExO(mlv6Wk =Ug*cgjݰKa,'|!hNJ%s>y_˲ JBeffDw9QTn5.t<|1^0ʐg0Db{e-jeL("/<~p<}MST,P2 ms_}zmBR5!$Y8["9Tɼ2/3zMVIګ"U66`fӏw Rbs9X`Mʬm)4(ARZ&i+*);݌iyNH%nFaMzQm|+e{liz H'Mc%E WMM !%}ƅ#50QY25LS|fEJPqVq|~ƏcbrEV)!Ds&[KG+%kLKD(n45[Pp:НTah)=H#QMX"e8 a%FI $2"%\g_(P۞(u8D$D!`޼autdi- ),F[).bG14McBz}0d}uCVI3)[BQ*gZ}R0 R)K*'tiLӐJᗁqJ:y#AˤF m65,h쬵2HPe1QLc|,D+!-Q2CJEYViBS75o}*3(!ٟyNF Mvש!LHx <-\~LD/ e@k?yz^˒<bkOgʓYU]]&hʓ@B A Y/l!l0 *3y+_f_gukE|>OV!HLt:dY"`"%Q_ӷq_YUBkjoK_Vqӄ0ތ$Is3RyEۄ5NScmc HJ5YxCI ggLcNs%5<g'1WkAA!M38' HaI^sw<,MiF^[Ei A@H0[yqR/j7ꟼ=tMKx~nB8>U }߆Ӟ8V6W$>eIq2P33#YV!dDyq eg w'9|Ñ u c(A5-i#cwBHX]qu #աQ~ūox=G8r"+K< Fc<Γ!"|1Zs>I58Оd[ک $M1!`gq^]~ª*hg:9OxyMX-`,ѡ""+kMs`YɌ$ }{˒!1YItP5C?0]*Ii-i;H׆ȓItL/PQ3yb&Ce8@!O B0^10Xa`{Ww|7mp^:aYD2| 6 k=0so/K,1 E%ZԑfGg0^+ͱ!RW_!L IDATv<;@{>vJI1P#k"Ú4h٬E9bb>/0Zr'?bz ,~(ӲI8z&t͑"KI{#fKd&qn9zu'`Z!/'klHњ;iʹ=9?9}wFEӎʙ7ME q^[SH+,gK><4ydX1Άoú(q*刵%=*J7-q ~/”FiRҏ#y%)Ήu񰧪kFg)Z4F3 (!Xʲ@j8NHaǹ)@c$eΩ91鈟JtmZqTCh?1-3_ qzaI7G8oi8N޳dy8:elG `!>,+10^iZ"eNq™, $9;rQ >~5-iЖ}G"jbLmF?} K$P/c3dEq\Ė142M\pxz(|ՋX78#m`{QEYwyQ+,g?v]Ff%O3TM$$*x#VmQIq$7uԇv''j~'+28Q"$s77w՚tQÏ׿xq<<{QÏsXp87dju=YDjPQD^(W<+I9ѵa8/EN? f$ Ycyu-wwfxq#V 0y2bŹi$IPJa%8QV+` d/Yȫ3=ezf3bi[>=Së_X1ӌb2(OقΌ|xfb|&Ou~j||3h@`x~G 5y2 RJrBVkX(sLS`mox믰*&-dNYćbMӆGӜt $y$JsnkDJQw,8tyL5:hIL8{Q.87 J@Ct%E =Q/˱|&M3BQ,y Qg!-|:C|aR,DW'M  y&J2\~P5:ӏZ1yc(4S?"TUxKodՊ|Geȥ^ęҞ͆i0eEӜr:) 38ØZ1ТuDs:7gnn( f]CY/˗Oj=^*tU \\3 P“JOW\]я lnicgi4R dI#kE1et:GHH,*"!ɓX(4_ yQ֚rN4mք]o:<&tqwf K+牢$OgHw=8 .+k'gl$$Kn3cב(J4?#hOfFvK$df{C@*dBW5:ơ?Oa d:BEiq(nwe[bq\ߒ$)4_V+׈48*m߰G)M4,]{^VF"+ydQ/ȪՆaGR!,t+Ҳ;qsp.|aHy F -1^=M9 ,+,ZqkN$iB`}{C,É(NL~}3nY.)7w9Pu Y̬qLg B1-f;.#V򞱟O~'M4 Hb qBg i4=O軖yl΅!Ҩ6I2_fĎ#]s؉Y__}ߒIt=fqoRA i( ukb-e3?c{kf4އ/>h¦yfX"P*X3=x AvC#K0 ӌ{> 㳼L36ZD)Kk"8LH }s kYV0iFӷJJYYf)ݖ9\^DȈkHu:i53UYTY72z8N$ ,֌CGs27XJȍq4;2oPKܲ^.k,xclCӒP8܍Gu",89IVbgUCsms\,9OoiicZ; $*gշ3 g| k*gaP"/ȞBzw}C~{Q 4tuQ$JtN/?v͒(A+CIys}K+"tݙ4wEGOm#qab3:M aZfgP2FZ4 Xb͞E"NSƾ%V"P@TD^,tȲ*I̴-I<'8A9D*!"ed!b ܾF$˩1D:L!xzxd^',/%%4-߿lfz鴧?cͫHN-q$P?[)=y6z+ӟ\18=(5 0LdIJ&H(ߒGA["̓&k~ I4|(̖̃8J.ވ?(r#|G.K̢(H:~s~8ў3fpghX/do`U4ST EЕU%x(<~H6EІX} / -+t#{Hewa -)# pRSoYy<́wAWTDZ3 = Gߜt5c4_şJ9͸1n P#[&n1@\I)qQu萅*#tQ NG||; Uc̄8%eQ <8~DZج78TJ3xg0ԵdY!M9NrCC9C $Y0u YQ_|b;!bLSi$@I A?$:OC`gwoS8Txێ G8oQӷiXAEQP%!mCO3{4]oh?9^moe#QP*<|oy^7=:N1Α$E\v1]h3qBfC߰ 4/R Cz4]*NtUG4)8Te޿Z85{^?}IηNH4XA jFss23TDRD ~t̳cħ˧jarB 8]J@qh>BH$ È䘴NH.氥;YoB&见ahPvOmC+qGg'ׯ%*j7ny9Me}|K]: !cd ^^8^BtV1 3ChV%*7_O]/ =^E'I Xb33B8~`Za=o!>Lg(&r"Uq(Jl?s>^x_ϏYJLnq ǹ90nitdhE ݈DKsp,V o6M3DSK$s I3dжg# XRd qR.;~遛+TLK{ӟN(oQp)ր,eP;#zs0LSp(!Q'o"9:CJE%Iӛ9Ǟ?q2@8b|rMk< j" 4I\U5PV+TV2^tcݱX ľA`*l* cłd8hDA\Ӵ'e C2p&খ,AIiY;qsu3FQ&g<=}LcN3<>:Iyw68/:!7as/Ȩk}V^_ѷ!T[3ކCͷ**_ݲ^^>{~ifBk$9pLc&9<(`췏f,#k/,kN-٠VS7<|| -Ihtˈ;Ȋ; I[\pI2#a=:MGgoۦ 2$4#BK@cGЯnc 3{?@E"WU܆ĭDQ7?9[ 0ǰF #N3\>RL~$fB$Vԯ^|l8yȢ7DwB^.٢urE<ICL3,'$^_vi=<8˱LY-00~6 7הeTHbEa ?d}ط4=]۲pBHlW΢ݎp$+3*f43I"clj@$aj$Z,( gfƶ #IvuMUl?8$cpc E(Kz5R'$YF? bxnꎼ*-;9axET1eb偕q#럱 IDAT*+_-J3 =q7'%^*_AO՟UB' ())  D ,k&c`gH*s3uQY3i8d,!hפ8)RD!JdeJhT.QJ^x|yLf;EYEN ךq t=$f#v -JNuU0 r5:NM lOvٙ4-Q:NuӧG#ƎL'dyIQlS0wӀ3MY4Fd "dyU#NV+ҬD%9{t/mzAHM )T3Iګ a%!IBXH yE'TVSeYrR ƅ<u@81cubAHpE\CaLʒv qyDH ۔La (¢H! ZdeA!Tu 1Zkd2t滉4X^wclWZs8삳"iZ,iZ~"tص.B,"4# MsdܐQLۜ3.KgrAӴK믂B(-.i3S_//A 0302v=K٠q'F YQAxK]/QQL\a:;ϏHko-uUpG')IC8vX754QF埿݈:vDg $c%ӝ{NR_Q\\y^}(5m()xzzǻCUcԵD"k`Pvd8i'dC"b c(@/"I16L.iĘ:sR %Y3)5uxk# aXt#jCZ$Em)2.eiFH(|b'dEF4dz G4=?\hۖXjQ)Vqn6kG gmX' 3u4͙CC?"@'52Nw{y#1cΚia^,փa2DcV( Nm<АgMw@K{&ҴSrDYa1X*D3`|o5:Jǖ,dF(F H R`\4#ep?OokY=1y5v&2$H$6 ,0B6 E6ՕU9<Þ!fũ:#YL8"r?Y(;IX (i=S@㡯k$t'VuEADn$}סxv,7[ڮaBySkqc(Ι'""HX9dibvX6+udY'+!S,,9Wg(:XTՑzM gssgb!8>pwlXhq<9cws#QLCG҆(-ǎ\]_a )tZJYn_#tF|Qtݽ/G뫋$û7cb"CDtmK\qH%ww< / 3vHyxy|D+W߲f chk戰X_#>nVaK\8L08NM7 ſa;mp9y4/X?yB_glnog?+S>xnej<\l&PtY^yB "` [{10-vvl;>?| bGGQku28CiM&xg`qL?G8_~4qF{r0MeI_$&erCmUH4|7LxV (T jj (te4׏`mE'| E0J ?mZ-OO;>W|7B]D?,xt`=UGD\%IB0ڬ dA- xInX\ohǖ( 7OPǿ6LSHjھ#+ 5Su#mS9JGԳXQW-E^@.a5 =RpR!.F-(Бp|[IR<X;HW~uyH[ViDz:5Oϟ/дA쥌"nq,wW3n $ JF\4mK-,W>*eY!k_^ȳTJ]G^`.]d*!>,5Bɀ.s<~i:-CrR,UEhcW aBbeSxCjPmRtx֎tylRLH? 8^e4nҊǏ4# 6/Ϩ7]'ٙ#z/~麁u Ih&H)G\b(MGAh=^T#F3nZ]* #9^^:D]a{]V/ϟ>?D7!}H+허8<<9bbXbL0DiISi I"x摬, ?,ꎮ&\Lv }8(Q.yDqyՂ1DeA7o"'s a{bbw{жX;chƙy {CT'&"ۉ(8MqH %ndq 7[ٲnig>hiF P6ZU<P NMDhRilV{=/mۢD?g; ҋ93u#$iQ8)$M0q7Z QVk,#`,>Qy@ vƎ(p#ؒuW9 uFdъ$J:\de*H%EYR7'LE ?ѝ?ꈼror8p=%dhI8a/[ElByXa_nvܾ憢\0n4c'tȊemHA c>Y8yC$q8p?x!\w((7cxbl"CHZ3.F+aL7Yݫqfidh 86\ #ں"qh^oQ*hTLcFKL<:+v|>`<ԧ*@&2yD_ۿ #mr:ɲs}>Ywy,!3+]]VP5gbL-Zhiv eZG#td(򂮮8y 2 Z|)1͔-3MR 3<,8q̽>6wLJR E^ܐd)IlYHuLQ`y4Ky|^MҌ}|H[wMX:&| 4Ǽ,J (0QAg~J6S2!1yW7WD- ~z=OIŗgY~65/l;/D&Pc4CN\HeG m[ R&2fa"Is|չ\a'av$ b$;4$t:$NR1lַX0Zo,DOG>>CD1NJ=i>8raQCDO|WUg$!$yF^?ODp0#͎r9dݽB09x`Fg (:bcree2;5ˏ)@]#AgKtEV癫5Jg}{$$x?8$17 ΧA(lW iQ&)IZ{,+ 7eWޅ@^p h5 Usi:ab!]z ki$It]6ݏlw;qbi:&4+pLXat Yj#JB+h3B->)r6PWgҼ7oGIpSF8BMYD _=/X YV;R7x~~isq{EIъ~ 8)xx6KÙylpu%ĜO/n<++4L[{.XrÞhّ+bz|Ncڶ&IK,8 HBı!MB!IJvׯZ2!PQ0ql058 sK*28c֏DFp<<'oY,0yI,onU4Ӵ! '"@_#Cuرډ-{a4:Jmx^Rl<==P.KG!)֬vW$qLwdiF[OD8>;r:<6R|\`R)D Z ڦ%JC!V,H`2RiŒsUv.nh?h2d{}G~~H㞮kc&:7_Mi -/o?GWw,7a2 8a y޻isKłwޱ\ddd4,EhOoH㈱-_염{4,WKwR'L}C3q~ljCp>X%SvsՖM!`()XMW_ T)o1a ?9t49c!e,J'v/נ5޽OhH4^fhs]ӵ-Jꚧ=n "X$J&1q0a7A3]]]qwOZ`,xy|bXzbM۔\m0&G^} jEלY\߼Bfp{ÏLkڦokPXэ#njK]9|b\eXSخQ:o6dnnAIS@6%xI#d iqlwDZ:o͟GF'0];>;nnk>N3i`Sc0SX Ζq/Y54pxz`\3[0R+ʲfX_2laҴ@׵S.a0LYAv$qІbM1W-BE IIذya9<ѝ_zKV&gh;6R#RX|/OOlW,+,ch[4cy}JR0F܄t6LMА'i l٦>B'bG ,6P 5PH CxHXTuEb4w:SETVBoz~n@@p3:8ɰi$6k/gݼC=J21u]&)ψa ݇oY0s:-\]qn[,Kn\GSnZiTJ@_k"UaQlO%r۞e`zdI#niGIG\r|yDH8RkO]GGTT8.YV!Pf;7 qc;Hnq$9DS>Dqdw , {b{K? ahjszw?gBDr>V00t+rKYhҠ ӏ Q' ӞOM~gY̶= MhzɈjKZ<>~F8^ޠ"J#Χ=OIa +W4p} Es<ǎ+e^TVY$r_;Ow?|Ñ+޾bq 21 d)[H; ۽G1SW=>ShZTwCx[Odx;\Z[V ss{OV,,ܾBEqPuZ`QZp3]ۄ~Idb|z;EX0~A 7OǍ#E B&$iNᢘY(5R?\-Y[@l%@?vhc8_l:O?\۟\_ȊDYr IDdH??S7bW_??|=>#|(8}q'J!F:%JDi_1'Iя=}sٳ^oReraОɓz3É$_DY,%iVe)N6[DŴ1B6i\y"R|fgԟxf&G 7@w[L~0Rc]S)0Z_v{J(̈ӔϏL=4#|~?bb5]"S2-Hw#;mg <g!$]ӳ &[P.$I(iG@./h8"uLr! y^2X :C4hRSK\-ʔa_'|[c,I팵f_~=Jfi w `{*1-C{Wwn"i:0p4#zJ8aY8(eXmV|2Mt抮/HFR&mM|o\pb#ٿ0538cP+gE[yXZꐀFO EQwE+=7Dq$Irq$M{.v$Ns͙$a˚D8ۆX6DYB?|x=HqL} %ÄS[i(B67Lk52,79R ahkz("6p{ƨQ-=J bNRl4]B]RLd)o\wl}2=HR9퉣)+L!$Yjg[8FiR@ĜN/LCKu>BxE^Xܱ,_)?FZUdp mE/*`N/tmt8/}(pqS _jbF4!hl8Um*(2M4vF2$ RwښbҊy,IPJ8` t6處K ތnhRaΰ\QW5Fz aC7}۾<|=<)8/)LoI@<024-q;cG }XFo~ _┠:?:sO,+iLI*9;6 OY/KqbZ'.NNՙ)uhi:&f''  [Jbn*Rڪ􂖊ra C}yhMǘJG$̳NS?iãwqc]Ӣ(NC 7v?Sd ]" k{ _MD*&NZ 0xA{rupuz8_N` 4*XD((0ӷ펶CSo}tᔡ?qΎHӔaB!LDaq:W(%qp@KaMuĈR_&E g8ox|>DwavZs mO8Eay6L QV"ّpݬH8|MT)=CW 86x?9>?)hw?$9/g-Cߢb&2~ߢhQO3y"_ad!'9fG-JWDo+qfv$ 28&/ LV iB Xki:ѤY̻a=Í.턦:LKO۵]OdהVzھ|s݅z Q#dwu8N &ƶcz!h.E)Es2S.xzbKe\yf+֚<}@8C']SG)m2:^Axo_!:y# _t<4wpPFᝧ\lnKǡi-J'X|iX G5YpjBoG" g?|IbIF ?*knx?XcHҘ$Ul}M_פQNR8ggxItYh [+&!/W66CM 3]ScgGeWBюOvd# c2e,qCq<48ۡnȲat`O1-OQ$)6 mM1IϹ:33YckMK8#F14Q u(1I 0m=軚4?f;ᑨ쌔qXUUSRX Ǣ蚚?~yDQ"܄.iHEg);~`Xc윝e:Gk4aLP;X,Y0]pY~=>>1Sf)]} #( #?턛-S?+Ls:I Exwh<ѨK(O͖XK#:$SvLӴ=٢Dhϡ\U|xndG2yf&bA/1= fDZa7h㌪*(eسm*wn9,7[/ԧ#Jkah%# 08_Ei1w5}]1=RX13xcaM "T#mu[3-iX.x~|"/W)ӏ+B/{Ʊ#%r-e@a,/C EbCԬxg>7$Il=Q `ِK$f^^'0Ao3rsu:>2-a%y"xgI%$M}o+ΧDVd$gtb G(MQnyf873JH$<# 3kCK!q2ؑM$*s4xFgG&S32#AXyf=)L3dxƷ0bvȐ qKꌇlO3u53гXZ2 -Uy*+Y0C]Y!?>Zsw;-8 vn|0(Ky~z@ 833f 赶4a.P%bҚT+'$qF?T3qihɖ2҄a%~`zsǏabPffGw$eY|=t`Z8PH-ښXxI]5 `N#=?`ǎx$]Lft3s77͊q+Hce Wg4,ak8ОLf{:8Т ƺ{bt,H56OH;@X$ԫZ1L폯;`[kDWDqLFً<{}VKu yݶyI˜8{GN b{ux@hDOGc آGq>]Rq0~+C!JixdȒ ?N֣o9-}js1aP:au×k ^GZu5I`Yo.h1(" #~HG+$"g nv#4*C (b̉jvuG +}Q0t럛yn18z򚶭Xd VG6WL%5S! KS7X#O0F?`MO;".HӜi Jҥ+Ȗk-Ry$%?|!ipﹺ;e:{ƾ# -q3eYrw1f$Bfc\D{yabt}< CbK?v{v ]y]LhancA=OZ]8]rPY KvO$,6[q`X5-:qdFǓ)q^0Ϸ\ct1=gK _F+Ś$_P-4ni$x ]O.)Tz'\]^$кjAK!{/DI8i4MuIrgy,6fF(=Z8D+9sOĺ(av >IT0g\o8rS}xMMdžᑶ8RHq G;Cjy( 0[ cy:ǥH4p-]Wrsij冾m֌IMӌڵsuZj} B8ZT>81i:'zc K}S`WZ+ŠOe}qd}D5|“+</d"2G-'~=Ib,Ϲxso(!KFM7oBl߽ "G{a ~Q_#Jzn0}R̝)4"|͌a/r6#]ݽ:t3HRJYhmS1-qw@H?uf(f'Uͨqx$2cUr3 _Q8Y&c9 r=9rx q J 옭{MKI sf#e*ھ qpfSO+UQ"OGJEÚzhT4MvZә$rіo9^Q<幒0D!-z̡0FeQ?[1Z֤Y]?0L Ś~GHĩ7"zշ# 8'b;~GӗHSLيmm]^1[eȬ0 O_>Q_X,s_E-%3`l]XJMU[P'B IәЏ_AbE8v>:ta2 XC BcT0c߳n麎)^ cRtM.}(W9Rk4E Q@_D~J7<ga$ cBA?v<>pOh۞KՁgycqBMd0mKڪ<H?ε€~GKϏ$i8tS9֎diLRbcfg4#cPY,/FC-fFyHXD1cWp>{ 3Lt#X|z Gx _ő. !<:J&1]hwFQʣk+Dc1!IW؏q3OhKNk0ÀyY,W_Q+^Ƹ0n"5uՒuU+M-q=<!EUt(򹼺׿;7>q#'<{x.RC٠W.;Ɋ |G*CyB6ۯSY󌥭teU=b,|"EJCX$%e>p8-Vm0ί򘔪jH%bQz-i5cٙ%*8͆qtq_i7ڞ&t!؂@)Oriy%w*<|ZzM̎Y d=#$Z C爚OwX;!my*4vֿ?ѷ4+~L,QJMTU b Ɠa0#ؑ, #=Ѹˬum A'CƵ(~cfOJL󄔒0͈ӌzܽszv 8k.MM7EIf$E\:<ʏ>![n@R{txDŽ:Zꌝ_s8gdNǝQHTZ bʲ-LF Q*bTw5-|j}AuQJUAdLCh8%M2lgڲbf0p'1 mSqs>`F"b3Cp>8m)#y&], *8eq.bǐ5s#ӌWh%]Z:MpW }wF:BK#}ǤΑ!$[,s<%сd2M3uY0v5ړxH￰\mQA8M4}dyq͡8$f*t?gdj'qBe݈U ҏx=a0wqHQS7UA;H@ :C"4ݮQa4͌}ŁT uAĩ8P-q1MNϼI-~:T yI13=JhVWHad0M_~u 2P% %YliYNQ`ƑۖnLeaGuikfn`!N@"PGi 31 Ib]͟<5QDUTebrE! "S MfhDgeҒNn5A5eU0ο5XP:Di'G()?' ~MӘ!ߏ(L3OEBTEA[#Yt:p6[w=̗aBh67oNCFv-*Xo+q;8C?`&C4MKmOخ}2>Ey4h2#yRb~pDG>Bd0ILF8jTdiB((Ƣ5yOċ%rE0x][f3s(&337_ (I+2t4 $YJ Rw50KόGrk7=pqo!\߾%6og ",#d UYd'9vҧo:W<"D8)5+Gn[0J;$)hǑ(* oO;Ѝ`pi`m׻aˊL߶("˖N$Oy>O,)iezNiW暇9s:8vٰ\/d x 뀌sOaHYđNV0{!m;d'˛-_t`Z|՛78ˠanGaFwє%\^yG1Ӗ%m]:ΐH^g f{,%4fh$2a<#!@b%EU\dW]bT1v=m["&KL}Fڑm$<;xv}fm+X+AHS$ق JF|-RQ6p><2T% Z t0cG]Y-A=39n1RڢG({lE߶T),qЏQr<]G[,}떠{V%'D)Ng>}{W䫷|H`577sx8ғ)%M] cxx-dQ)rEUA13i:wy"MSCxglK0{0F*A -R_IO7)(gY/'Wʳ&bp!8{K׺pAu>R ,B*C_AL/V|EZ);N3Cײ\.aG1!WTϏg9?n@wt]CS9Pvf}f0jթf^3J!e-u7t;i,g,*ڲcJ Git۟4,NmwqY઎ĒK =wD~)oQAFwdIF $|eGt4,V TMGfvva|x0X_],r8:dcz$Q2X-/v&} mA&YaV9V, Pnf H?0SGډ*@XΧ{b2ДHxq%w?cnQ~[֗w8ٓ Yf#ɳ 8-r$Q}Qѵ52 q$IB]^ۋ7;nn1s/-qeY.`=u ^p=RW5_>y{91dzߜ3 COaf"I2ޱ;[OH3ӜODQDۍ%}fLKfAپC͖SU3ϟ?wo_h=}y Yn:3QZۿ;i#v:-W~Q>z'@j͹8#z$SAX9]RNf&iT@G8G)a0i$.$+fQS aH)7ܼ}/'%Cӑ-3(bdZqꎡo1OLC5E1E]:I )㈘zӑ@bBs}Ox$yF;omMImS0M3S3Y{UwRۚ.ڒ)\naB呶>"/?;8"\MaL)wɕ,8Az.G@YGvWjrbN3I]S0O؉C{qgc(^AD.ؾ} ,0"ff]Pep8r}#B|q.vOTg&(qپ̖bu#w7);s|ةn. d5 }Sf1#s>xBYU{ #]n ),7Ց85=xagl.H ꆲ><1+oߒ]l@ƶ-/g>~t;󔺭9_$粤yOBS8 f2:1];}(!q۞-sR/(#_Yl Ͼ.!T]u7¬Z~{ „jhI,W/oI-?(g?aGCEIK#JInot]KutMCn8h% +ӧ( G[60[-㌯~x:O2.obuyCb}'H,8y[7]¢$ϗc0Oysbw}֒e=fg1}$~ކsoyk?p=DYCMX NʼneXQ{!#x%6$StG7^?1JR m"sADignoNj0Ä A0Nk,cFGSw 0 #Q&+6w cy9;R>1Dqټxt4 D׸Yu.YTuI蓤 dͷEZrJ8잨Og(̖q8<=r ũ `u}KO4MҢ| `2ӏ  H QпŎ=mY%Uy& %}0=uUry} c,٬]D$H?1W[ַ%rǗ=SD7w.F-},C1O?Znb߾ArbiRzlkD+N=: FHdO}rlZc //ɲ\]!ey>`@b88vve;2#&Bq0 "tfMS<|4xi\mo~0Z) 鞻7w5Eq VjŒO#=-Q 0tuC)֛ Uu:I`hJuRy? 8BJ;<3><鞡/#0$A) @1%fƁbbk0fqi4mEIxV8)1CfdZƦEctØ3IqqyAyEO+0Fq9/p"OQ-BKXnޮk+:Vӛʒu1=}̬ʪM6D ZWu z`(BFwWeW'ϴ#|vA7;n߷r9Qs\ڦq]3QU6 VtdZsm86؎Esnb>;ʓ)y(?q~3]]1~|OqbKAj[=ķGLMD|~=D*dvlơyhx'3Gn}. $,\zmcAkt)ˊ4яfh!aFA4-FTUM_ؔyo?!Z.p|e4ͅ8 K$iH]VT+,S,˦*&:2V[, LZ3m[!\~p\'9 L<=>z[&&V3ܾ6gzt\F ;`OI .#R)kʺD%-lKBy:G aHCo9~t]k`H1Q'lkbƅX: [Zض6/8/ &/MkL,k0qln[~[8a;`9[bZTph0GmBC-8 ,l ar#dIl۞t" /A^3Ha}vҢ*+K4r:Mte7ϲvU][cX߾d-▶€qcH];ɜiq&#m)ˊ$I D6u bqÏ"G 9UY\[>2ZSgTϟ>}z40b 3q](=te3I0`cY7T txq=Bߑf86 3?N3,&Vk"t:e4eK7(! McQkق~t&f(6<_R 0G3 e]ơW38Y{ME+mv΅z֚oߐgJN=c?vu͠V/( Ӡ ݵ?׷4mN[(rS-~eZMeTVIw=,A1 5np<|KL2*[2Ylb~/B0B*4i>~xDן~(99HeQ˅iUhtmGrMn( !Yib%?0 K $@9e \ߣj8ŋ/G.G0|6SNu|񭞡mOLAeUqu* Nl4mF qD؎cmfc8 -Rѓ%Kz܌\ݾFy\LEZOkb?>?~48䗣aluyCrk,"I3doΈyʢ0{iӵP8h܄M9aY3San0ϟY]i LK,sg`ے( 9mGƒ 帤5iCUIFhIH?ͻrv~5zɩ(Yw{ӸQ D@[v#8 Yz7,^E6[\ )G ~ KڸT$x3O0HVqrB|~?qp`98e=S//WXa әAn8W׷tz NgٌfK7goˑ-(7@*؜;G!EjqraIf)M!zF~DUE1" KhÖ(͖˥ #4 ڶm[l/ N ݴX@<3"?ܾZ&1POENTO?ۋ$uj&`t Y]1,ch! _u]] s%9'x8&:?Swfoɉ<Ϲz}ϧ[z'D4L]b>c^2IDt`x Y$ 뱸ZoYVX-lqk$bk.=i:]LFmakro@'=p%㞡qxb4%aI|-#\}m[{|ڳp=dxq.J"ϣ/DQk ?LQ#-2s\tZҡiH%C6m[3 o7Mi2y=nq]q~bb;6^T5?$KS< |p՚qGY̒= uC?H<;Nr$-0Au )qfk"5uE/ABfיm/teXX, (*/ $黎aj9mPvDeLfO:_ْq 0#[PM7')aikiL4[Wc9ލz`z0Yџ),,(1H( 'I]T m ٌka((yշ\ 9cnspƖ8Nh$&aD#uS W*R<=<^8mCOU4U`6˘*'Yx=x4B6_!E]Dy; qG4iO,KLێiL´$#0]ՀH'GfG)Ffs!uEE{8@w8I(ܨ=׀-,<44tn$ [UӶbPҢ$DA\|CYHKbʶB Y]_# Ǒ2a ln5g釴m鰡)B6 x7Iٌwi􀐒01K8+^iQH; 8c=a/W_Pwϖf18M85QbYs?=I,5 BlC)S\;îFb]Йt00f^5<(zZQb5a)I?4dĉ| H+a'\b CWQ^NJ"*lx%a3_.|)e3de{I.Eqa}fHagL|>.%, ,I63 o^`4%DdDQuqw 60x|'pQ:.F[*"z_Ż8[D9Q6WRX-nP^ B GvbPGĤg3r>hH|?bcFX]ÖbM7LUN5b)tuz"!L[麖mچwFXó2GtW38Sw#dԣ͛0+(y&2d ^J#}W!̲1 ۋ5Xtm:$m&) ˁWoǖ\\.][a8I'(@d$(IP(w/gmc8eM;9/߾e/N?cxYF)IQȶ|$%J Db~kk""qM۲=YW[^եm IDAT@u˨5CSѵU18,q<W68Rҏ#(%xijMOf$m7((ۆq?w׫5& }|<ɈfK$c6F:3͙,a^]ˠ;C&U~c]?Ocʼny")0_rV+#fdɚ臆9vLf,$?O0vi:0!AwMCu\x FqKrAsG>9v_"#ꦆq`uq,:gL88Ar\اk; qkx`h BfdkVb%q]Q>/G*È釖fd l04dX$; ~w([7Wx#iNjWiێ/Ruiun^]? DO;l‘PFa4B-I0I,m)5~yw|UtmAܼ|Ebqc5%A3 =w(ִVܾ㔫7=mqfBOKJ/<2=^V8b~-ssw( (==#uuA)(1,Wo膑;\?‰`)J-9!`;,7i,~@1V(t:fFl[1 ! jJS6Ox8m0 8B5%rͩԌ5Zlr&/+ul]o|#?wH; |xFM4oկ9?χX-TEIt)y[.eq-x!7Z#F3 %,,KkFؖi@*@)D[ȄF ǏX^]!D|>kj|CXd.J) ;)K#u~dۗN+z7ꟼs$KƖ*?N;)w{e45q9!8̶5ʓw ma ~r}ּna4zhܽ; 8>gw.ϙ+?7 c6 DA"d Eؤ @v|' Tm&5o^dq5iCܼ|M8m>9,mUlyhFfA7(%i%נEY (\qv;\&KdH!X6ib(Px~Gwa`;%GZ NIk^8O'l9Ql\?q|q3#/IfkaB* G1~y С09qk[4An}"}50̮_1%I]+] OMYwnETuk<nql5=88晑zMQ8!ךiX޾:)ݞ4pc(Arr|fK<ʦR1<0L5"]n}eꊑ0<>3>LE^!ɷ/%1cr'xzx I". ^@>k@J1h0( , tN bEQ8lz.9b9gK È8H c1N%M-KSӵ5e^^釉m 7rfrux< i=њ d^ǖ ,vMM:[p:a^Mk( LnF.MHW/&Q`Ҙa`)zW9]]Жeqْ(Lr"L$xk\%/fI:/e %=|~Oyř0QJ55JYi Kӡ'MߏQWlBkl8[mz#{JZ "0* lA%I0w/4\!q]8 IÎt`~u%8]z,('tב&B9LƲ㑢(;[Z{n_P\̗+Ns:87Ja 4~ۚrl}c .ΌcO]^ CFtX]1U򒓦t#c-no#)nw͗.XʡգQw-uy. ifdBX#/lAř8>= 6ʶhGLӀe sNE#DJ),"=liæcL&m =Vԗ=zh|IS)A>=_>>wwMCض$ʲxdn  B> U ቪ<3=Q5QuO:X}[քAh`kc+F$P7-Q2#8яmUe |>Ii{HGz|NŲCs|_AGS5zԷw{|T=?;1vq׿SGX=4G9 K =yȿ/]v[%K2s.sخO-E]HqG LKS%L/..0^],?PT#M]2 6Tt̲! 8 Lb(y|zdp|\E]ymO0XHdNQ8vcXp>ݘҲ)3,)aAۙLUu|;MAlE5e^ R\[e}$.YVő Y^߰y|0څ8R%Wϒ L qh#ۻt RO̢ qt<=3,kcƾǖǏ(˂[H:3ml0q!iaKt},'D* #l}l1gQ9OLÀ&Jӑ>7t3t=J9i84,3$-FJ']3_ln I Fk;/J!mx5Ioh[B|?!bs>3t-Lpoۑ_ht0a$R7􃦸nPW%Ikqiڞ'rM? ϵ}i"#taيHWX¢,/8~H^:|cAߒ2qDIR.U'3 cg4;0LQH$30=nPT reb"%y,8\׍iAH7DydWW(Q*&@L+㡑8vas6dI~McI{$ŏ">svbblNbb1!] KI[&<9' ]k6MO 45A[ȱCȉrߓ&!t#"ej9ŹV87KJc :r|a}Ηt~? MCz2615"]_ۖGqиG-w#u^g LzfR3M8ldIc a}a2f uRP2'gMUH|?L(/%YW#-r$@ͱC-8.;i`!yQkmVuCG[>mנasmp^xoiJ\hr` ~'F0NQADU\un+51-خ~|fSIFU]kc5]Ӳ{zBqyH #q8 3aKeeR6^`hR(˨IIt[$E q/]зdILەϞ]u8F0 (hƥ,qXW ݙ4MXJ>jM~9wx#ll .0?cusI6=P$scuCy؎XlKFcBhڮpzkOя|൛gh50Xo6tMveH)]]1cFm-)naiY-mVe[lGmq\˱0="{4U$׸V5kҸ霗45tQbq}a2A@)낡͝ Th͠:DWRn ,U͈C7cv n؎w8¶-,it(#qyU&_xh?/l [t}OUu8yRz 7Py}^ RWs@x2 t`2dЩlJUhu }gNZ,zPL)GG7űssvٮuMxW9;? s |3PqӴh-M].UU-5=M]g~}!Kg>~|58q`tJ]н|Nf/'F -$q9?i* N^ܽ77hv,Kق()2 n2k,i0XA phia=1C}gK0(6lG_['?7?1~}x_׼pLa:?0zZ/4 ʊ, .ЙBs }@mIE7g{EFTAV4ˊhH44Po+A";/9Qc{40 2j| jh%}N^xXlj;Kӷ%Qziv j <%0 )^x{V!I␺kOٖj2&}ñm*|(N(.6XFHUUtUAYЃj|Q! IeYcitlˎ醞F ,+Fi`vیahx"&Cڦc1^i[F+E'6aeiIaАg[,>6KB{Q%\z=aQe[\ƲqFK!hˌj7Y_o+}+M5HbemYP;&{pв6tUI9s/NX, twY-Sh{Coێ.cjqzŎ;&pUO ej4}خo(w;7*'cڦA떡ٛL>o=z?|O+Cd4'%\?A55mS3 Z bw(A Ŏp}>!|8W4j0lZ۽-Ap܀Y]^rx&ϩ):Q. Y/)-Qj06Ycз'x @H!1確0qWw9‚oLϲhZa]CHsWZ,/,.À5֜"Ւ-pCe[ϟ>MӔ&R;TW1Nc׏} --98d67ɜtyL_#M IDATbI:ev7UF-s= wmNQ+!|6Z.c"mY_H'D9m X<zPe-:.%Tz Rd8%q|@8V$2Hˢk{N*_.uR 5t vjk, ,<_ҷ%b6R55QD{Wl9<>?JfZd+^P~(xvqGG v}ڦ|SKzt} }˷~?K~Kⷼ1A~鍇?/<~k ǨZ@d0+6;Y8knM] ]1 #$X"_-Mgl9A!QQ+Qq-e:g:a;WWgnV&seۖ.IO.8;>[ () smWؖW5QxZ {g{tj锛k3]=XMgq}cHnA{LpF}l/|q{A jT[klI[R9]F4U+Tn?>$H`KFݖw]Ad؃aHElK,QZҶG)M]XSmU A &nN! }Cw4UF0?:a$ILeXRcgoMx!2'JS2ghk(%/r [6?_xG^ǷS-z0r@B)ummʪd6p\"["-]98=eY"tbYS+"f–> &ɔ =Z]3#w|4:% )OifҐϟ!Oȫ d4f!qJ^u -iE1e0c2)Z$t- յ mk:؎jv=ʦGߡn]uU#&8O43jײ73 /C(MYl!mNiUGi6àACh|ߧZ\ǡ.2`)|-XPkiH["MGqH7َ(ƒiCzՁ5`I :xp#Vv}<ϥ)+4*K/e_{MC'eNXB4ZZU"^8>(ery(&{DcvL1UC] ]epp|boz |TirDjaC2螾w0pf udyI@Eip\P9abY-UqrKA1R(b]W-紹j9"]ٰw0gy H|Mq:Bhl2gvCOU)B)&1MmP%h"4H鐦 ncK0f52w15 \Jġ˒(C#̋>ny1m _ȑ/fZ&mJ|@u TOl7Kd^uFӫOZ 4"IF>O> Bp܌X  ChHtOזKYs}t NC[^_BҔmZɄ i[dv^x 7ZzsC't2!|µ|Ч* H)Jpr`>_xu#[]ptriʊiqh:cwI~sd ͨ8OX?yĝ/c>y4ych{2=f8ܽ {Uz%Ϟ<̷l:ߣ/L8 _E92!Ws{.m[spl;_~׮;o\?O=WCuFdyA4dیA 5#~6A4À$dEK:$(qm4 "?!;bi'I1O2f,4}4b׷i^k˥h:aKQ-v텤9ktΦ`{{fS: g<2pql@ha&Ә4Ef$# EQ6ڒhŢ#I&#}lW1hBc[8 fus@.yggADDگ}C\1 ϧՒ|"W>͈~u,9Qx1oBD!x,{ r=òmxŸI./?۵҂N+KQHGC?t!6UӽCʶaڮ(Q:#+Vٓw|wCv懔'X3`(ʒ@YW9Z9vIUvUdbʭEJel+e*YUב^ϛo?.,W!;y u? ml'g2OB[B% Gw S..PVL'cݖU\lʭdd:vlN^mш%dz G1u~qyFz1}U>R(%LG;tB:.^~s>˽s#B G..'cфxr"o=6Py?o~~ve}[RV,q(Y#ϲmȲ5fM_ՌҔGQ26\R)@SXҦZqSєi$n3(K±,2=з5 `}v !d4A%m9N@:Q~@UW~̋^9"B4fqqlRPB:~4jU%i|b.v ] BѶ b`d:cm֕]6jS۸DeE[ UM;9JlquqAS($A2aШ74=+}?kI?5O=cW}uidDIFQhuj5VA'YeI(p=#$fuY-w`]WE 2۾kѪ;s3y,oyYKx)2l|S>+`o6sTS)k8ŋcp,/ݗț5PGIJHt4I6F98>;*c~xwΙ$ bo={! h2rd6N誂^ω%]ш_Goz>}$eHsҲq='`PUFqO?k$,ۢAx Y21>NRw=#,i%MQ3lzm(vk,zv -lM78I 5Ju4pCt\{8t.99TyA44Z+% 8MWU\^4 ?8gb}8ŏ":հ-+[:6E; c¶lEHMQD:#7+bMYMe{EC d0XHi{DQk % ˆ,mI1qll&_-pmd.u[Hoh*tvRՒۖ^&}XUY -kɫVy(px]quA)Lg_%( gOm'E໔u\\ϧZՃ =v?9KxxRiM"Mx9ȾÕG>]ہXW],n)C 5Ha)BC遦kl ' (Nq\qxp| CY֌Fc4W?Նk?'oӁmӗJU3 h%2#ldd˟0ӬML`ih LӂW65lq‰3ѡ:3ٻY<(kј QmCU78ƶm^-IշWOj|3xt ʊ$)-ew288|4kE+Gb aF ? L#O!}U34&^@k|"[f;}ھU \a e]iSij#n:±ߠ:cꛚ,+|~Iq)0sp',lWK )X؀jԋRR~ʫ~aG¨~@{s=92 [zaǒr8T~@Yhf2q2FyʝWYg E|5t q 3kUW4uj2z J#r=Qࢺt ]hH[u7ėQ7[խU%$I0ޫ޹G*#ox!>PRolJQ-M[(O~!_!K~%_oÿh4gP2Ϙ}bgK|T%vg tMtozPikFq3\[`Q5nKߙZQr}#MmPx~`=l"vxx:c UӓN&Xv^|'o]]`[~֔ 8{T"U[Q}gnD0h m^R[YnKNO?ռ槐B:w0w|s33R?(iɽ_ݷ]65M2?:OW0wQsxǀ"+,`> ( ݖǑ_^<ݗZWi+ɜǤqD^4d%hTU=Q2X|&˂)GwNy~W /D=(0(2V紽GG<~m[BXngψ#cJ1vyoE Au=MYLfsz՛Lq=AkEǝ>AQIDAT(¶\\#w;0%f\^>CЃfR򊃣{'3+vcwJ(G2i:x65GA:^HtU;EYS c/ȶ;|К*yR՚;Kl9?aCoh hOTr v{![6#fw OI{?g>a2;p*KE[6Ғ]bvq{lBFEc졦+7(~A |uш"ʁt2nCu !$dFSQupVk_WWOGOӣ}>=;CTE(w%8#/szrL 3( חqL; ^[^ccf#=&^1;`w)CC_\A;ܚ"goF4 J&~>|@} $}>K#Q2fvpo~Ox$)E-sGCS>H| T+.gvr;/2ҁb(JIXD񔳳3'<}y Պ/#~w⯧__W$fP-~,چt4b@^<4Y=d,x~V$SΟ~,6hpLsjmztA8Dᔮ8#!yYydtPҦ[m8plIw).h>tЪ9Gݷ|{??cj e¸l'Jij;WX؀/,5EtGa |7wv|Շ? V6ŗuw ϾY 1Kt1}]e5єݠ= lA-Kn.!,I2r|z9k0!LQWT53,+oﵧg>ηUM A8= В&1h1 QZvCB1Q&ĈؒHwUwWݺ3y\>"!<lDyϷoRʂp6Rqφ(R2Md/~LBQLCy[Z1f"-- Y*G9E4먺NPK:2K)ȩXRb.f4+H3"#IY^2a} sǕzJQUy}!amc\|8Mt$IvV0"\Qp-'YZ%1f`8XM̎iSs6+ u|o&4fmIIT:v4MP03C?P.uKa{?&M% FB ʼLjAEf,fKM3B: OT!7NVg}c~+9o0x胟kpW]'<țd4mLR11vemktL荩&eͳ|vw%CMf箋OÈ obun)ql4ݢY!K߷Z(B!=' oaDij:'\}86'{ EBlu9ܿIMЄkؖ0-aFQHn}zmـe**{ q!tx#'=#oGs]!B407$qhdqݠZkp dZ"jݥ(v]|/ W' KEZ* n*IƋL0iɳRGs\o}n\o< T5j`esS>|X|g}O,7:hM^,Vw>.z9iRkiV] 4$ #U? t]a5|NE\12Iy](d:{)7YU^]#IR@(LKGQi^S%"CISi Am쮱q"iѿ5ס}jluؾt>f69h1)ܧJ Ιzw(__ݳ➬_SWч`ya[t{]$9LB}Y[`<;*i;HEQ>Fy9׼ǐB`mkH@+ԙfַ0{S$[e2Rk,4 K4Euk_J)5T$B)PPqu(3JETuz!4j.ڦFm=/{b|'OaXx8$ #*nfM/&$F0Nxk4Vinѽ0M(p>! }&7o< aE~) <^%z 4@S9}2q.n<9>gΐA2Q(i:4mNH g{nc|ߩh" MP$tmv]`08!O=Ƨ, ssfQB%4"(qu,p&0⊔G[ BR$jaW8 PUg-vC7XfUAuC!s*x9j}?RCE1xEcprȯ|3RH^<~o=$ c(9:fF3> %̦3.\AɘHȲUQp$QSs[A#t e6gs>Z48>CujM0bܺq Q(A{G?y#awRo&<*RPg:n= #8² (DSUe k2'v4ia96ݸ2cz)%Jb>NJZHt7y,ӓڍ&hFcB9P)K@S8=>YaOMqlʜ8J7Wȥ 3MQ`EQi&+4a881uilY[欮>\Qǿ|7A ͠tխsX]òlvyk^GRM&(Vj*Ҩ)JByZUx{YQCsфY(U]WI ZVuiY YAJ8 2djS*Ne[RˊKN9/܇aY٠|:ҕ8ػlpJ06bh:np@8Sz?O~I::Nif P(Hb1Nȳje9(]c88"Rz)CGeP$:n{s8[KB$je VKDA?%{(t0@(e.tQuDqmש5] KRO/v)w4MXBMZBY%E}$Ih4DM#B!̟RmLFh KyjTM!Jr*x!sbrM2SkXh2NZI**hxL.tBN2ŨD71N`RBwؾpۯ.Ed{}ATPTllG!X[ݦPZ5ț/:o  4ʂQMˬiaip)e_crq?%QjuNOx4~0FÓ3jp|>ӃIFyy.ɳ L!/;I:dpt?rKDóB+y̵?e{ϼ sk?)jwAߋ( fǵIr"5LN$qƻ?c+9LJ7( Z6r]7^=+3RkIENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/lumber.png0000644000175000017500000035521711346241564020204 00000000000000PNG  IHDRaUbKGD pHYs  d_tIME-Je IDATxTIrc[;sM&D;"J3E Pː,TFN' v?\Fi@#a4.;_!`F '-T (%a*KjNZ)EUjZ*H"WPP$TQ hH%LRjR-@ELTRJ#+aC+GQJfЎEH2 cI)xޑSFEj rZR1vL#D,5d  oX/B1 #qMJ)RZq>Z5SiȺ:3XXaow~~u}Q΢#@K,.牖3_+nD AT {ܘ}g >ӹ̿w\דBhvZNؾ#²m\1uVz.?3g3/fXfiu^{&̾ )F%0њ ֊;R+T˲+~cy\vjICA-RJt˨Ӛ9(h҄4UJTi %ESBMITX$Dk,(#IdwR(!-S[D}r F Ff(Ra Uk a Q i ezSkP4})鬣_MnPrh% mJ`mTJKB%JiN[A5XוB+._J+Bܛѭe;|N~k;l^ԍ&ضu-sLHU8x/Zn*ҩ 2M./,aJѹ,1BD^#IZ cW.j}g]W Fc+29ů??~7E$!%-Bi2*덪 UdZK PwR2: v *K8GnNk4-di!i!Q[QiRF́JE;I>r(QJEPʱTnsRʣ@j= EΙ贁tNQbAJpZKHI{:lR@IZkh!P$(>KE挬 M3a2e( ~;n,JuRj-h -"hiѯqyh knRi## VxJ\qa:p>QZnl14uL[ǽ5ZK}E)mZ#B1MM@z[߾qV8$;^fiI18X^R8Gb:h2\Eb{v1MHpLFi! _7uc{5 $'l8 N'B=htXϓhc$DFtPECԂ̕P*dɆT 9hI[ԊnX5%&1t]Os>!]@ǺrH)qF![B |"Rp@+uz\?jmHU9DNLN3|e$hU)ycdEkeȵ3'9tFgl_}7(+?iliR|A*xQZfK;Pet1F*֬!hRpyx<VS~<{ Ù}ߣXXCfO{bJZC:GOZKJG3ڂG0|=ӍIo;Q9W)P?>荦W;KبZ"p]~<۟ x~91MBF^&rKkBd[8?>Q)ԒE *prN :'u~e|8= Nxy*Mry>3\:R!p[vDku+J)T& BN %4ZX$Vh:eQ"’UKV*J81JPs"!)TE@jsPT MIDg %ZA2V5D @&VZ3`Lu A!1lq/X1ç|F:gmcBIKRh!{۷Wd2v//O|y~[ ݡF$a)1&a"yȭb3qXձ̞#B%`-Z 񑮳|jV! 4 !$jܰR@ <\^oϜ/sfBǕG}'HYdRpF }/LŢt%4S?p>a,XF񕩟DS#猔!1zh F J:1"KIQj "W8hbM=[l1)$u|tV" RXk?6TZ.RJt@){5Ԗ&HH%9A' '#MAoZewԒIKM Ęo;4i@K8c۶eH2g~#Zk~L1rJJͷg6nzr.-nL=>2g'ƢdzkؖGh'3Ԉatiй+C];@Yu%~'J?ءg;U H-i 2`rzE)w¶,+4źRa$J*JXuL\ɓ@iz+Q<]:4VBJ #eyGTi||', uL %%&b\0ΒkAk6I ZqЎwH/ZJhk1Q4,]n]U-$Ԋ)5Bj6l!VhpJE^9:͠+L%7Jh*TeCF2 jjto_x+JӒ">Z#R#@T6|iacYqD)7aQƴhɹPjJl\.''͹;4qZ}eGBH)~2qgfq'"Ⱦ.mXqr;VmcEIǏ2= ź#5A7oU5%w.hsLD=vx`?~p&p0mn0ac|.3?Zk|":ɗGe1JJ *yHi²ǧWi טkc{fTcR)\o@ITК騹"'nM@wI%h(2T,dlj-VpJ(*= $c\QRJX<뙬#H!h8spRL8YR%be[RQO6V $zjkҰR|%Tis_)*[ f҆fº#|lONZ `$Fg 4:@D B?KFM={)ux{J*PpNM!7>8Z'|LgmA[0QƠAs7q9C>q:n<~}b c`)=/[[}P߾qjjZ-$yp#Y^ f19 #!).;k)4BذZYE`eb!A˃]u8 E#Z *! dB%@%9'k?rPd`8iuBQ5 r<NiDV̲ohcƑ1fnF:epڴ^__~1B-*N"ۍvvu3n<BveNtS# EQ?Z[׹ RZ1 1oWdcvߐnzbEY덾_AGk;-otVz'3ʾkCRdJc# k$|~{aL=oR]8:ܠ;T 4{4}ZojUҖXZx]g5b6ߑZJFHc%BVjK4W& *3(ݨ% I*"V8pK)Lڗ02 qR@kheO@*,hyu!0(Mo F+|HH V+dڑie2pSwGC^o ':F){}*ͺ-ů ZK| %q]5Ն/$׭o>%GU~CFd(Jڑ|e'`!+>XJBmcօ5x-LjG'Wΐj!WA(˾m& 쁖 >,izIK #$ zSb` Dp"1J'".}fY?8_L}5zj 3MlQ oXsTZ^[<ĜJc@eDÙib{!`q(oa1ԈYW} XS M4| +)%/2(g˗6.4Ȕ(ac]"5l7D)X?_(uv̌`t *` E2Jˁ5~`:H iuVIzGւȕH\HҚb Vt!1n@JK>S ^@d8+%__ǑiQH}^kC :T\ EG/^*MKQڒJ=m9Ct〔c;u4+ V|zee2|ekp0 L˅ )xy$/X O/ZHnPp5ETrakZASi5ctAmێ P?3βn&UׇCƱX4AGq;gZ1NmZۼlM(8<x_%3 eg8?t2mr~积酟N À>E۟aciӈX SgS/7]P hmDKyc8xL<<|y!́qv$Y%?>)ѻe9"Fj#Wt|\A`;MTb Ԓo%WZV[di84khEu9Y ׁ'aI-=9r9DB!@̞e*Sta tXoԜП>}? x[h>r\X Y~J1FP.G$rG旹y.De[aIΣEBh9a{uy4̷7~)Jh|:>ygkvP3$ǡ{][DʁeO(7Dx[,\ O<\:Ar4)μOH)I)m &u.Sߑq;h8]J18 HK痯\X6hYv+H*q9?uTq 9\׏T,+$hs)C>w悕fdXQ5cjJ,{dP %%bF*0X #2X!%#MEȊmTbP$&'QD-P8E?8~whhR(PȱPc%l; Aif*:sFmk2WNHutNօ3CpP%3*2Rw g 9FX +PM2$rmHmJSJZ4 c%FV-+QqbTAe v;m71|悕 YʑhU ɹ y| ZLY3 VkΧErFx~x_$R=s5p24aS!1pNWZb!gj<[F}ghyO? ƇϿWl3M[̲tP++)_ضHLS+RY|Iq@mJCB@I-E.t{'zd$q#{HkI1#;ݧЄf#, Àm+g$3CвDc^(cpRy"KIʕ{9dgxH U.Qq0Jak a)!žVP*)D.kE<$Zk15#HpQ$ۺ %@M#LTk^E;6ΗD$R:6(ҹm$9&%9x.DNQwD&{+Pyb@Iz=ZQ -*6 )C ˃̤i9ú-C#Ssf:= )˔Og4~#Qqrƹ'xxz;-.x"D?hѳuY9# }b%r#khPx}_o?v 8L(1sF bR3GJtcO[ϑm8N*>\|Abdb|}:3C&ֆ>ܼh0R!B%HEtGPUo'~خ# OWCwٜ} N0L_O`E-%r:gJŶd Tdݩ3+A#!asڢreTlɪb(q_FRYוuG]v IDAT;)z|ب5xhS =%֪jl;{(-#DP &0R@*hgJJ<\+LD%9RZBK`FoG!鹄_+Xn sL3?a {Lְm __^ ,< R4h&nq\ ///H_ ,!Eޮ7Oñ׊Sk(0<7t43x݉adZnJ iB"}e΁9gޯoLN !ͯm4{q$-ZCL m PGCK=1E_1лm]VF)&*%B=PUٙJc~s#}dVɹu,54%Ez"đ 1FZ9ܤϧ!Dux=^%V,8vaӆ*s\׍@+21LxI)2Z|C)(""x>DiOэTcD9Ǽ E6!r_W ooo;Oܗ፣pfCM?^os(e\+i35j<>=1/+e8G05Z؏\9}g}!Bwd!Mļ%kJK,+sN=Џ#(}CۃKCϐZa-}g鴆TY rd;?)b"9`$F6qz_k踮7R[ !+Nk`F$6@-q:8S$DG~xak5 ~Ǟlj=l`:$`tڠhI\c9Sd%}[%PE%m_8GPPj姟~F)MJG|yn1KI2[iB#IJo=PcbR B<==3f?IOcXu[7 #7VƩA5`?e;!G^~&5Rp%'ns;ȾFr+^ٳ߾>\M =D) 5+)cUu=Bkܗ SBRbH(O@ jj a׌=OتBZяvĘbb sv-7H>W3 k=NiRV{Ӊtӂ6.SsnpaC)AgjscZ+r=kBh)+~o_~B_vQqCu=1ưfBb&+󀦔9rۡ|wTU6a`mtӉe>R8ls:]8\Wuh8|3Z)LfyFhGO[0p9s`7et:[48; kmZ 1![႕vXqttf\u4LVi&kP-/3/Bi#fJ,Gy()}FZJ|;q&7Xc75xו5| әUVJb0ӆrQ.SםF $uP,x~q!G(9G6+}wXVʑƇ7 {w&7p_JI4PJ`:vX.g)Ț<,(jMDP$B[RI Aη:1xnN-_N|'hH'XzL$ ư̞* mJcF noQ2YGXvƮ'O}ήgԎXb@D sz}[. >0/7~~t]y?34۶{ߦ j|efּQGަF?#a1h)z;rX?dI-v{zm̻20(A@`b&<LSrضm-$U.1-NL}6/D!+۝evxU:o\?~#<.Eaъ4zG̙p,3}&"b|[UB܆宰۶a;w,R©p7 Xr1ۥT亮oxV?KV6ffBH%ef"V (Z"bWZy¼Gޯ3i3{LJ 0+VK۰M4ݙׅe &x?sgݳځy\VhOD"OPb )(@bJ>Tcm;?|,|3]+[ݡU Af#'fՆ<(49 6#Q}øn|O/gRֲ=CדNk `M =5rs唦?>Y]SuGo#hQJ=?hDΖ&7TFO6iDDLc5V0d6( 5b豶vYw+P3G4"[jTU-yI)p^hښٶpAfT)Gy,6$ A&rgmB$zxNF0"(i5co0jN]W~6OLz9t=.ӕD$""4 =R8\!|gpBdwҬÇ}^Цb8 .j4-nwievnDh[,k22QQ2 ZjT4M#L0&,7yT7KVMiҚ܈,90 1yӖy8< 8*$Z9T mea/!;eOR6 19rj,N}2" Km$}۠mVy#ĀO(Fqc[PA$@T|+I#l;I DLn7:c+C=& MS-3)-q[;m-K&eZ" 状 5Ffá8h4p$ FsR on[l-TIr kea|NJw.5g^! 9l¯?8%zPD}HQ<{u{Wbg]˾x.ѐ]Dm JCw*I9@[Ym|y~ExqQ6?#x~TەpĚ}7/u5KY.;w|j݆Rʩ0 ikǞ>=㧉+ja`ZI}./$Y4g^h0wvhK%kqod!JXa04ʰ'UKW+M[~r"JC&RYC-af*VqhSsw+ZlUJj"&sx~fw^oc8v-a_w}{|EJME(5)-Lӄ1k@H}2=oEaUJTJsHB,~Hj0mfD? UkiZCaf軎T~C,wt Ƞa[׏;>xyy\8t'R z^^וewx/K$&G;>c~Fs8pl;R(7-u]g@lCۼaj{oԕD[' I]5±QOOxYwGgkn#7# ^d645;x uNJq*Dͽw(Sqm0u #9*Z# ʄOӕl5hC6J{8Z?~ءSdo/WyWzT%Fg;ӡmi5AV! ueB֙~eojɉmq. LN6e1,ӑf\qwl.(|701<BN쫆6(Ybus05"em%yh*M_[SYnMmHvcd>3M?n\?Vnj;)>F'Q HYiq x_Q0&}) &g:5 o+u#gdC"ϮH\ΌO?? E- ͡+C;/{yN5Fp}⊭K~vfJmJS[qyAvRc:N~4e+ .fTK~Z O#1' Y,YmY釞V̴(jAo}o ~/JQZӶ Z[V\px#DzC,y:uK,Kb3Q V)b,=d2u3/+CO/¶yBqcmͺ;6u,CU D<.gsn(+9 *-ټGs%Ǒ?~R8Z bLTuAPWȬN۟~gsi:\')beS)ø̜gv]o(vO_ܯ Ta4}Cz? emewq#U`Bxȩ(g$>c % uU/ 2T>N(#՜}e iD7!a !*92yqJc+ܺ_ ! }]c*4{ܱ2 1v\LD X ۺ3.+ׅ/_Μ* JSi ~[2L-qByWƴd%ޯH#iigu:!B31-{i8> ߖR!1 yz_}ӰFADDcjLn/5mفhyx:ݨeŹ2_։-%Ȓe\폿'ą=ւ"x9G%'.6.&m>$i;lY೤jz*e1bpsr-u!/3J[b(=<^hN+>-qFSy]w5l)0auy"_^#@f"%+ڢ26Tǥ2/w_V—[5#8r7.ݣF(+l]јXJ '>.# N\W̻ۧJ8j/uCWe@H ˺dv+oߊ<4 )Ē St,m=PBurKPJ@M߷:dYO8!xnuąpxϒRWG=Du*jmM|B* .tFg] *RgHco!>.? 9E"Afv(1iYpa*|?}FYU!ḙ]&Z=n89B H2ۈu1XKB^?ӴlkVHhQ).ӂ^/3# Yr4MT.mm޳SG)|JL5G7W~bY32*V'b2̓C IBtrD0`L2؝C)(eYH0-Jc"h}r"Cӕd;-{ξFoWc D!s&x%[u yǭ*,8_K2←Rǂ\X-3"*yG[Xd>yViF%tag{mͶ󕧯_Q l+3!n4}<#1iF4L*ZP}Kw_<"':ɴNk1̲;."G}6O]i $Ǟ㕟WWL~V"s604L:1RR(f@IAuǷJ l% YrfVi<|1~y#>)%q̟G.qP OmH_J5jo75}mZsW##[⊈ !PM81a '|6i$5^ NT BH gr]qjZA$Xiꖻ0US*@!Eik_ٶ@nC+ɲUC0}[hlK .dѕ" <U_=]S|d1 vوځU1D+ (cQiIȴ{nH4U͸nd pp'bf]<~-;;mo3[2F+խdɾ}nxr<׼?u`q#˯7&Wu$CP)T~ f_0d>8u!+/mSGNMINP_,kcKԌSAt]GeDFU-mw@fwҢLCㆠ"[teɒ4#@f蚆j>`DR]Khۚh*釚6RY&ӚB yr̋nЀ624c&7 Z6 L2}jd*{)%߾B|>?Dfs?n2Hs;lμ؆/tMvc*nuYLwi.Qq,2}2t=}[oRYRiCgPl4iC?w &^] װeo;H8s\a\Pu_~\wGLO88-ȼX]!& DY зE,4I.ߩ~t,h4a!Qs%vm {H.eYQ CBKDLj1c4: mK6,SJ{^XuӖҚ:@T"}V2Zb*p3}kj)dJ7ض EXZ9!HH!A.S) ʩ E#H۶VpICNӂ@s[* h;%Q'mv{֗SD=XAfV̾?n5FVy|.>0Ұoa[R hU[W(ղ(UmyT^ϼ;>RF/;CS;IE =+9mr%<2gۍbkCJL}cK}\h(o)Ϭʇ(k@fZ5=^ IDATXL󈯋*Lc**"qw2o3ֵXʾyVĜ;t6h[S7nVu Ȝ:2R*;"Vֆi^024mE%ZE1#|FepśNw jy}@U%+ZI? qjPcӸѶ= 2tJ,فc6Gw(#:GSiB۝cOqHDLϟF 7ڲtr~g8hC3Ǿ^ $:s[]BV%8նoc}&f.d%Bjvq/Z%>. nZ2"cOigY/3x؆7Rx'J֙ah EFzL_?^12e9iW˼0#O#5E[\H8v'~J`\躁}/i2k4V*zS- !ڶE7<.3X%DqxzbbaSbn͡eY6R*jZX*[RjYrs"B3*wAQZT(<Ӻ-mUႉ9یjwL\*ήxz~fn਍=Z"qq/سR^(7Rt7~Y0#J ><_ۆӹӹg$ GRYh!3Hns\R Ts1U_ m´NC*ng6qLa8-=N~ABQn}(3wVg.5%9_paӄ=DowD(0"<.\>Ƈ&]s>3>NC2 uղeZ9O MuO@+4& ÑAzZ:XphcCW.9ӝ;D[l|A TJ"ď qb6>==㦉J>k/ F?|@MK]TZ`E@q)r@RG !k\2OC*I"تBj:0(%Q,!EdAh6o# JWp< W݁￾4_{&D(4.XecHJOg @{N$Tm[ʗ^BF?Dٖ1u?P5-{[pD.$EAC]/J*S/$BfU.ƔXmms: Nh>Be O)8DW~Z<^B*h ñ'0t,DWW4rW(8v5!FIL9۶'[7~Jtq%ޮ2p '] &f KIF@ >O8?uL ! m]:Q9tl1 Wq,9# ۸^n/W"oB__AqUl!f UUAʊOo([1cAk~u(e}'Dms(S,&i=})H ;^d\;$ԈuEHjrJE!u٭\w+NokzMAܴvW*éiIV\ Tm#k;uM-3*Lj0KIN}$m g8p}~.T uahj+Gll;nYJѩůZ1 V+p>q0p[|n4 GL(iՖ9RiۆS7 LEUz`m&\;˨$I9CME-kK["[:fnTc+n4a.obȦ'iǼ#}ڑ1Ԟia\9L2M)'biҲ/}iԪ+wk-ue?yub6u'În-RB'OUu$m>?3wv}_o̻CH2q%'ź(|_YohB" \~ȦI<o ZƍGQ j}|\ѺԣuCϲܧ@Z*iږmӂ8+md`2H1tUkMN(ZUo,.ˉ4!( CIK.DD$_҂1Q ;{Y $l+R2G( XMҒi/(yFI {l=I{(9oʢ;X86SY$SY2]0:tt5Bf|DHϿB=TH&u4 a` H.'ϸ=}mǷ_iy@oma߾|s> ]o0Qӹo'.'q@Kp_'B*tOضe?ݯ}o8?} }Zq>QٖE|!tCR=J;JVeܦYH6]9&HģK<&-,0-aq.EH,ZHJ0oK!!Lúl\W֩m1G &3?[ܩJUG 8W"YXuiea6ɏBJ m;l)"#Db+b6 O'L]";}]E-ZR5=-%E& *-,Ky۩[YB<}V:[3^/xҵcMm`02 IxCOmWjsmMlg8ׅ6qpq%lo>ސDgmC(63_:>^@3Xt_?+O W@;+T;0XrdZ.6b^^~{.B@ !F_2KoH߭ܙ)}g$Fu%*Oo\^ƅ?UDk+5R`mpfUTk7iF! .2iUÖ@w:L֖Eivw)s: |i!!(E;[yf8IXsjS[þdݡT :eiʭmEshO̅wka;!$/KqbYR)ITTxRE*t$ >`&Pbu { 1u!>~1؊坮x|$O: l4O_Nl %< Ñob'yfQ _1|:"Eμz\غbZ&>"}8"r@96]A Mͱx>plxyX}w+M%Q#// cpH 纥SF?F>gV,!{C˾AH4˶e}#t>Jd1n{XI)Hdž$"6E5<ꊡ)|,$k5ƘKCqWhSȶ$ Ǖt}P )}$B-tv6elWzؔԶD qcu[w:]%DIkD۰<) Y97VƔ1pוcoP=Гb198Ƃ CWe)"v̗ S4vñ_gZ*KM< m|>?#=,og>$Ine6^DOp(s|:ci-Qhp/;O<}..cYatrm$/ǁ-nY5=̺,Vp> rݶJkE.ք9sٜX:?֍qCI |dC V aKq<ƑDf[ A¤icCȏ৉~+0#nGWBB\֍3)7@{:0o;˶8l`hZw-?` 0e/s_CmUNs8,IJN()ێ9#sVF/ GKT&θ č(G 64m34]H+i+4lr+|[Fj+9zAkź,H]Fj cדr^jĶ8뼐|R]ng ߠR>`SWM&˒$izf3U]ZPR>.FUqwtB܄G9LO˘¤;2J &EB_&ue[&ڶf[g )SƤvJ$Q hh:etfFق2;1rWEOan\,Bi2u9s<( ׿R!k=˩ R^>=7}N%8Z~ YmrL㷷+Anie/)Cg9Q׍]dk8wgA;ef0RPeZGmhU^cCU69=acoRI@-_7& X֕ŭ%BCГZ*jɣDX%^ aJ=#Ur;G6Le@M Rq<ݭ;ʵA}w{rrTq!e^<f읇:NG6x. QEƯ *QdR%m^

BjUrm+6H*9O{گzާ$FWRp kؙJy&O$kSLkt9G|u7Bty{ApMUrl*ں|d-/d(JmcXV2Se c-LJXu' vtXO.7inʷ/";[Bȴ44ծѝBId:z1L[~g{t: \ׁe"b|䍐c#B(A/یC]W_3ǰT*[>5 ]I +Ob_, omYL ʐAvK=`,WTmd"CΔF[Wq ycgZ&d k9U 1-RP9ҤRNK"G1NװxDqѢNvq! ZP mwʘ)GD"2nh0{yF)t|;y&dXV~~8tN~%hpBԂnPc[בddRBQdg58Z4fS{ 8(up,ELƘ\dC.y T#$Z,ą>'Eibm*wmybSq]OC.`ѹt\²mbҷ:B0 l.]x|:Cn4ɉNcru˾js(m @>=y̐"= 1FnCX!|:n"iy⺬CFRU)v}6zovmOt!XdZHV%Jag6p%WvpQT.`,Dƶ f.5aY~Z7r #1ӈR#l6'z?D]YF4|_Ǚi\q%8)u_6D!x||zK |L=,!'H$]ES|;h,2R'%܆[pW93yμ.^?˗OsRk҇6mN?(4%xx9ϡP9I*]t*$TMT9,r1>8#HlBpihSBkuGˏeK]Xc5Y}%@V´.țزYKD$=_.e%`vNP׆/!\mrU,iO .xikM{?1(ugD߷10L{E*KDyGp8(s,LWlN1]2[ǖ~9}:cEH{?Ei$Ya^?pùxdV9s׏w\jbX $pLJMSs&sBY<-??m+JN(%sjAp8==I𬛥۴X7'kAk(u~Yw."YU E1M#ph;,g]W4UIe &B2uHIق֧S8[*90YBY˒mŒӻD%iȬDd]ו<+n4u9jSIʺeo *WT|(18°3&FTy4{̫O2PwD% g$þaZf['p -Zgi(9Ҷ58v~_yx4Ib$Yx(+ OCdqPʢD{.?H)a4m%dTZV: wpRe!9\/o\+*ҖwYY#J6D7*U21◍,3z2'2M;MYC$n% 6!Lᗉ_)Bq(lD}[o7*iƱ.:E BHe$m85Dd6) D2!~&$hKE:ɖK2O((sC$9Ǎ4EN52GtH#9THr~Ԓ]fJ9est֊yvmY 5ۍnMAp)5S atYI7یʡ;%n8oS""nJP抮Hl<(/F;87e7Kan,va\F4]žo{-;3u]aH[yd_7~ɒr:]ɍ W#:<85LGH4."DibgGS˂L欋m$+ iTj6 -x."|=>TFTP96%EjGۜjv.=AKI,7>>>v֪ F'y{9ÕHB16HlHcԨ4R+"pkyC!5vAewبkCg(%(Npz<~įH)J)7J0 (#9y@]E@E$߫abq,._Գ6ie' xVHeJEڶ(B!:Yͣ+ǎ_7]7x@dcӁL{G^H (uLpcSEQ p8ow=]ONsI^@QjNCj FgRU W͹k?shJ "`]&2&HPӶY8;ۓP~4 9 pCRT+LQqYYTu nLp+ϏG Km+T^\w"R٘Lv&:}Oe4ڰƙY/Μ yQnLBӵu*mJQpܸ 6eҳ+=:Y^YVGS,è,)#e2?A)"[,~g }K|pa T.љA.{ ;(NEv#tJֹT?>ط"έ  uePj'M.ۺx>wԂY=˩Tj^О*Z+nбYf-tggi+s˲D(˜e8m p۔H&6/-9C>}yB=&׼= duS`2- #/'}&wXpz9?\oo()TܺUaaG,SڏxgGڮfꦠ3yiؼ <֯nǡ9mBT9E( IUhi ٬'/Jn i֚4jsy.y&H!sTUn\. $e.@H m{Huyn8(ne]DP7h!JhHE~!iTl`txV<6%@W*PegJ]fhiJE.ֳ-WmI 6a};սwc_'D&`6@J1vPR B@4ܦJg2C$w.\Lsuap9:SPt:3Z n`r;3x ʘLۂHnrLy:94|\{~}[OYMA?/X/XmdȰUV}r/85m:#uKIw(DȘRJ2%(@= m{;q:bdڡmHn!#W>tUz[ٽG߉!#X2D iʶ풔y{Ե=L8=? E#Bz1!$]w__yS6%_:HӁtr<2on#$Mt#.}k2)^&uirge'Dt#teZAH)(Q>$vTyNVv"|xGgMa獹T0|3C\FQܦ9i煟ΏHaiI ûɋ1\:v*PxEh*g~_JshCxܽ#\QI!`w(Sb[䨨2f;op"Qݞz9q[Dž B 誎_Kћa' =2Tǜi$r$MiJ :ţǑ;zL*;AwyN=6;pl5m>>#krtrΡd$F~zy n\#H;nBYuZ\fKeCQ-hiX/,*/8= &/K^?5eyv<:2-Y%ӁǗ쾰]pn",J&`Q0#۾TYOyEYx%իDEIu<<<`a-yUr:(R@.綤-r|LKOU5nœ ggXg> >6.+yQcY?oHUќ1eTy9M×/\qsfB槯/<-:5x+~|m#awwR3UmqU!(3c[ϭß~e .ndx~z8BSIZj_)sELܛ-QHKt,uQ;;Ua+][Qe28B?<=GRql~|`1 iʎLfeg_- -paر*LaohLTxҚkv6K˯<<ďu\uxPE8& u}]865y(˷][D4<9z_ܐȧܺ`煰tu~Èx:u7/¡-cUEIU^q|P7&"c܀p* W^8v-Oaw)Z3|L$a)%"ȸ~\;:g^T@_RiC 9UU E.4UNKrޢ4 UyD(5@Nr ,k]gB{ym˼peKLG}On&YrZ?AJ8>^x <>}⽟ەấːЬ6l.g65uaGfxY4x+Ɲo``7( ڦ* ǚ0-E!ha_7~(˒˅n<}~L]Cֶ>B~ 3O~ \G\ #@%]s:4Mȳ2+>LE~/O:9kO;~ ,ry)h.d&YACp,yz(qR.ۆm8p[doLLuђe&g 3Ǣ.JqlM>8u-v;sjۃPR2^nx䀹V:0OlˌB0]Drm* tHŪ;{VK=xoQgnogk$ %­Nn<̞u EA~! ˯_n7J {BT%MѰys5~ %"*>tzbs/sovSʀS#d'|fFֹP>0:vIM2;3qubj^FC*= )7 ey8bdz|8dHrI#h%KIg^nHH !qQ4j} ӉiiRh0#_ CmLbۿJ֣sM~鉿BԲI8LeI`Tͤ$m\ \!{ 탢*ܦTwm=Pe9O-j lALn IDAT2 |`|o=oUA׬h/]KJF>n˲tGv/zeӁ/|_@Z3g~}Jqvϔz!x|y"H<-wzԿָ&ٓ")RĖc0 B^Nn!AV%&lL{\yu®})AVD_׸vcO_lj) =S7/BԠ iТ`zĝtmuh,AV4$ŀbؤEh(q|IQنJSvdIEUHL `QiZm7jtn4G,?ʶD*oɋd#QsvqNGe(xMQO )M7)u(9rzqBA#!bھŴlY MJ=y" Q4,q,$EF:0 +H1yѓxTPR"+&Yɂ˳S[$+UC2EI*(􄶭iqǢ^Z $1/JdS4]5-<} uT\/+q[E;:YB1udҬ!+W4yփ))<=[2@ o "~&:TPی(5}cs%IhcNhҞWW?B=JG&!cI+rdcP HeHCy0(snQMjH R"s*9o1'hGS.rQ@ܱ1Tx( DZ$4$D%bbNe 1A:+LYEdTEH-חsf9HVU0> lbpp= YX DOt§?̐-J*Z&Npr22ztnY:i:FH>蔃LYBALʪj9Raò52А;8F , M $ Ti]瘚c}\ͩ:q1YPU=M/F,a݁8Ii 瓅GF:iEYC׎RGK$CbqMp=Y=8A*EY!+Y: ! 2 \fM[L(I8Lc9.S0,^]GQoCY!2 -%N mcYtȪE4eOKfju#W<c4%K2A 4S1Ff%ǴlE#2ztM&-bb2QqU5i4P ׷ I|LK((Eu^fGt4@" jS\-64ųOL<, /*޼"tBgzJI 8[]˳V[LI,Mg˩ zIcIH0zdB(B/f۶11lT,oB7M݌RX@۵,l6,PT%83&1\%n) 4Xӵ-yRT50bOXJe͈lu]_2yߒ75a|`z" 0zJOCWe0~;#atc ԣh2B?P5-BאUU(ARUeT F)0IQ@Wإ FQhK@ۃiYm;UMw!ab#[p-IUU(˚"/F5t}FtPM 2Rq]TeUO PmAPU59ҤĴ\<'+3lפnk9'L'hJ]V؆ Ij;-EӫCG7Lg>MیzY5!:!4YfiL4u=S7)$0mnh0t/>yşl6ed֛8k%ۻ=uϸ|2e>Pfh*A}ZU#r vYI˖Iכ6I\`.YVT'}!$Sc斉0u}:qM\XRi6_=`ɨXZrJt90}( EFzA*yZV`2PS65j"$ u׎1ڜrL!k8QLzq3Z uUty!ϧ ҈=RZjYB%t ƲеX Fq+'uTu1U>v޻ okZ ]Erqܮp\E=_c]GRwqEYtdeMYgm'"ctJOm[w[?t>!MNg24u;3Ix*ϡ<4`Oj'hԟ3(P:tMو7UT2XФnDBv=QR]-aisϣ2D:ڶ`¯oY=<`eYM!mc<j Mps{~@2~|$k%$hBF$~T#>SSǻJ9:S$ob2)LAeGҬ`s ٔ*IЇߴ1ֲ el[͠&=B;$ ٌA4]-o-& " <y% Bl&ǴmO_ T!u2nWKq )>4-BA' )}d}(;f|[-u3*[[ֱLlv[diqeExij] q8Bv"Ӷ9)>:wMڏn4MBkJȓG@\/7|b7LS: "eE_X,TaMZؖ4RIٴ<ߣt18D%-bArfc-wqx èz)Sϥ+$In[>})uuWS9-g2<=P%=q]-SȊӶIAK;nAO/ضG:)EAt·%P@E3W1u]uZ>؞CQu M|[zjN/lwK\Ǥz0 |ס-//)7d-r7cnT Z*:BY$aql1'MI+uHS7YT]C*ԃhImbBPɳC&Xq~^ 5Ch( ۶ 㳋tLAXHJ9wq;Mln3B-2OUu}dנ=@2l0FV=ށ=(&d>eyzhi ːO4T3 y`$tWfMXL S)oQ8l"dB#qr3sL/~mfwķPz Y`T'?zgϮ'Yȓ'<yn| g,TLQKT5n.ؒTEJח4}ԌC{'+de܀5jd–1Dm|KOR̡-]/͆j( @߂=1kN)dyp}=12FڃCEHBHMUzhekeѱ{ҐA}pK”4Jqd'dC|whbeV-hHۥBµl\Bѱʠ{xFxB75C8O "S79*EO7ClA$kS1(E R|>e<[p|(O3L NO%?xXOpv݁&}~mn g?}ŋ'K&ʋS#>LЕ?ȫf7h2ڱpTK&Yigo{nnnU$jx=oٮ>no7Xrk5;ʺGBQٕy#Y4@S. lUF'Jy"Zc+5]qDW:N> Ͱ5%axD ,#$Oy'''Ό;tCG?kz2,k4!2CSYΫO!l!my#I=6aYJd݇7qLY'T(" 1 aR858j)ɔpݱ;[G֍Q5gXt퀦(SIE89vyzy]:),AQ M!7C|4 ,8&)7wحlΉ[G]hū%?}ZGofn;ZжkeSW=}'=y@|5G&dYx4y|#c*#dI(t"3u4+b>hAda $X=(O_ Tجnp-v@ "n=&6G0›FזxḧqMkʀe*誂$y,$]ճ "K sD[;ڦÛNQd YȚnUF5hqŵ}* _ %MFqS әI|8D9#g3~@=Pt5U[ aR5eP G?-{H:ETe4&U cM?$Y8ű>U1Mr}yE&GLawF7CS4-$&S֫}?"EG}U$ Mٵx)eq#I1]궣tE3<7@,KG5lʦul?C2T+޼Ƕ, 8(tY#:1P55n͊Ȓөo>' Ƒ>}t~_{(?2,\CJ4EDzªz/)*mE]=Od|x=gwҬƨu\ZN$<>Ç#R+'CճC=(=!(!B/ *ʪl8v-u@glnop8 E$EIS|krwo|rfW_Exv}s U85ٌ)9N[HCaiEC/@(cmt誐󅍨J(5E=;=$nN۸:%cSYb96iSQQ!cꑮ8M6GayDe47_ɲe~k3xӉqwHJTYÛ+@S56-""fG~x{m[m!ZԡK*;@aqvH*/Iwo*swO~{\^> o~KgEilw;V5O.';*$d(BH=r\b96a;(kJ]ejdǔ4PdM`;Lס*:g2#)*B=iAY.Oá@-zUZ82u*|iȨ[ݯYqM3Yow fSaN'9w7~3O_1L˩!ܷEIW8O\6q,f>y-BU#w+.rlV >=O_] e0N 4ϘL}$5iT n؎dC߳/(w؎Gt´@,ݞ< < fs(;RyO'p.D3=s2"hUX?ܯb~` Cښ*"+ f%*! \]5"drItc _rv#Kz|ꜺiY!H Ie'g%)`;TH=p 9&YЈՊ- Mxr2e^S$rLlJZӰG<[6%Qj}ofy71òFSHӌIzńO>y1 TU6mPT%e]lV"+K*3lag|]XL|&A@#=`b*q84$E]+],IFWL HX IDAT֛=B\ǢLqn[,e`2QqEߎ' ֫|| wYSTZ!$+<},8?|%Ϲ~˦1?_+4C~o/_-9{򒋫=2?s8NF|[VG K5Wg'TEN]ULtlkE,+f9eYb 1},\_/ߐqM>M(Pc|gC! pC:͞ӫsUquK^9)p` Ȍξ3tyL.g34MKV@sL( Y Q GVZ0A$NdE>Rlk<6\6=݁rB;tÄ~ qex.yGcSUSb;6۰Q$(-LHvPqm 59<6^qD7/~ӟƗ]ɋ7P9;T[~S֏QBS\]#G#cIQ6is7?L#rw9߿Y9?[: dߓg5BLҷh%;oȜ:# acU|I]yhfj$ynXɑ% 7PM^2Jw͗}Ȣc_??w<Æğ^rz"+&n>T o*ϥo8==0Flgψ-ԑGC!J$iBVl7)iTxPw5M`y囦ˬ6;/M$C34hۚgW=ߔ=%>(ysz7 4Q`Udy[st|qٔJ88 DI|з9%au5gshN7f|[0,yR=MWpGb`>{.ΞS֛5'OESLF5kn)]7bҲ`9(&e& 0."vluÀ31sǐvixi sFqs^={miehFgؓ!89]r8YC3,& di u"ʲcTZqv:GQT0$"v}f}c RU隞_}y/gL&'>/^ً -gpz:!c>?a@fE<UU\.Fk*e]3 1t0¶\2U]W1pw$[ ܣfS\O.B>'sl(A6؆.Ta8"Ӑz#HkVGanLȒ-<`w`&B)4 ˘ȳHlG%3쀩::a)`y2C{ds1 ݖ,LVH's|9݇7 Saez{[#(n,QEȲlyF`*y}dH8d ː1 t5MU@ K= 2,IJ 4iMu:xxآ*:d1')]SΈ˜Le Cƒ`LM"z4].fe]K0+/8xfT]N¯LJ~>um֛PwEmaۛ ѠA0(Kew ' CKxE*MAS5ci F8UWㄪ1E uqcg\xdQMbc4#"(vC٭WXM7=!Rzɻ0m 'Mc]yIÁK^>d9M(ćׯ躖٭L'vfEhQ6,4!!0H PDP\-XassǛjC03 tS# whNL}L'<z6IhEexܯBQX4Ȳa40QH2B,R$7ԓ*]W!G+0ypq8a1[*yoI˜]Д `9?] Ma6CBTmYR6>Q1 & &E퉏 ~%aHWΌ7}euq1\_QnyW&S?,y' xp&J7EI[@UzLCj!r4Y-QqL3´@,:GV40M)$4yssT#ڇȒ!p-Mko,8:5fQeYIhۚˋ\W)eV(ml3"!9yH7S5c:S%!H҈[\³]<۠)3}jGl$a91YܣI(늲KPT)qbY&ɔ޽˗tCOQTMK^udE.(E7 ADi802MF"o8&bh50thAƜWP%2AA$YnS(&0%sf9uXjrCg V /kb˜I@<4=8Ԧ,(2'~=qc[>メ?xceU-Il7jDww{v$0YL8|8-ʺf2 \yL^D{D m7:d]' CKfF&5yO^W/tu*kdyB]wN1A7O˧OȚMZ4g7["'lC,.󉃩A/<׮,gr{-mYj4Z-`  sse@@-KUEvf\& # )G<<dQa5e|hң3ڽNoxXzIzlk8(*0-Yf3[(ZDEՠf=]lc%< %EqH5tME Bs.۽Kf;MQ0mfK,kv5~يņ8NU/ġw(qqB $ ѦE(g9`jOΟy`t8 Z(Ldibcwi7tQ"zi+[nxCEΠߦsZ,RNU,V[g[¤?b;u͆w~#c~ O0dgxfC,kM/?/^ߣP+@QN4D%ES1!a*,wI  ݮ(l.[))rv>@Qs6VC$b(' i:>܁Q$k0aD)%QJZ 6l;f.{,)Pq{j͏oi ĢFD2bq'+J̆EMo0d{Ne$6$醣qruuę@$ia[Lg;ezŋҡ(I:" 0Gfz)!1)늼=&Bz}>Z# "F"K(**0x_`[V7i4ȵvP90UTa`:r%B nc[/غAYm6(nY zMƐsHJFYȊ.ȐUFˢ(CNOF z?=|#} H_@NBרBԒh"n7ܐ2 H#6w7 ʪd4n2kix:^^HHfar[UsVM2[姟Xt&Ϟ_0Y6;,LgwO?Vt:-z-C8={.yR0x1Ac9}*IC$ M'S֫5qᖆmAC%:..GHB(J|ai9}B%xQ'lv{k_%o~vuAR) A%D/կ~ek0)[ST!Qy5|~$If  |;8$f&MV$鄿|~?'x<{r,B# <ϟ#gOǴ;ӱx^誁DIHN!wq:]/H*of OQn^ܠk'/GtU7_~%lkl㆓!Մ?Z&'&b fB* I3͠fxDj,do 'S":,*5q Jc6"wȒ=(ۻ-G6x&Kb%Ae+Ƨ2FIȒ /%Yzq2{\j:gup"A"#2>%yYF@>]/ =N6ELo@Q%6-\>iD%[aS"Ss'TQ,kvrC XNNɳY{lflNdU7;ʪfmXlP5//}Ii6I# J(Ҕ|o7oKy_E^,yjb0E*&>G]hx &~.ygOOj1K!2EQzּxAJ1{,St-stt0G;xn(䤴Ml f&M 6#2֠uMF|~NbUDRc2.1GRAnFUfo=.ss,&S71_}"l7T5toPzYhQ"",zg. h C o4,fӴXyx1 ܍K61M_qy 1EQ1"Q ] IՐd69 KQi$)͈ӌfM$IF3xx̛7oQusr|j$r7e g)o'|FAFV"Ÿz|O3 *ʢ_kMU+aG1RtVx$.\9>9tHa[M ݢ*+T01 H</h > !jR'hANhR2i^9䜆uЕ 2ID[ZN X/ɋ0(8zj(HNiLx9d޾(ԕ|W*:-4>j`-TMa8b 9(jp&FbGi3JÔ^od2qET9c5,EAQ YN&*CRMv[^˨AD;%Vd")4Ψ%ctUfD~v"4]{S&c(b/^?o>huQ c,i芌wY,HTDO{ -RBs$ѰUlz > 5'gHI,.Q\hhW+.n8rTi,)t:CJ~j4y\kzKGXA_*27$QDiڨIל?yE|w8q01ʘnK\# "uxtrgq䔗/0 I-pK,(. Ojy2'Ǭ6K0&AvkF&cp|2O^#R T՚;6[|#e&uM4,v\,X/(r 8hQh2{0_xDAvh4}dӧ/ONEVQSHw3EݯQm>rÃKi>GX·{@c[T)-HaA,jY$CEt >!Eq=_+qRXY]rA@2t,`pm]4G@o ^ A. =U^11op}QH]QAt-*KF-,&]L`t%M mQMUU*1R6cLa#:icRv]5Ja~{Gnv~ldiLzyKUFTuNVԼyHAP뼿ڻwuͿowVCܢ705ۛ-up?ԠiY=n!"H .y,fz4i9^bC^/>%qmbӂSL]'KkZΘpWXf\"u $!3ܽbjҴtOb$a;E 5g8-Y0>i%>I>)5ilPT!Zu}cOGUux/Ȓ㞋篱~Qi! P „Lt ֥jGpK{<ݐLEMVgX E;$~$;$j6.i[B]A9V%]٭(FVA*~lyz"˹N1UHax^DQi~h^:eTDގErt48ISCt$qINIgP(b6ݻ)f(f3?#w;n/H_:(uak h:DIlm75\<9մ&e]`[ӏɳɘ ㈢,MƘӻ[Nf.Fepq񜺮*„ވf@U L,ӈDtM%$ hFö8:=e:[dXn7Ox g`7 tM;5 n1ONbY߿}Kr/9qJ8*q<<4PUt q0H٤E ok:ib6IK*ep0#)kbY6,+̆CQWXED^@VTKZ&RYQ[wC-13>:" zeU;wCE<<͡Dj4ZD~Bf舏>zmEAaU1,QE ņevH`mwI%.ߧDJPf4Tvn0$TEaPDqDk" SBdn;8N/v^}ԯ<%|4IzOۣ۶ͦ1ZFv)q69&Rn%h68A*YZN%wvQ$WMS)h,[Zΐ1u )P9#V f2khI(Ip?Y2]i˷RS:jӦd rP4&Gǧ 0p5eMn#P2[""yRqX1Yq1 p=Ŋ(1,ѤR`z=㗿>y܆IrUr!y@y"BQ)9e&1 b4fayvQ%N4HR,UVj$Ar IP5VQ*UY)0+*ɲfC4%,[PeŖSVۀǭjFT+wwhD& R{v|BD,'+De!3~VGf}w1-4Kg,OӲYn?bM$NOP:UM;hz`-OIœ</߭Pڣ4>W<>,{|/>=ٯwii7|yuMUKC޼}44qŰ?6l~G:.5d%C엯4 yҸ ܭWD54U0G!ks78-%fӓckl3> |=zNX/I98t-$f8np=pH$Mϰ[-\gZI"eU37HBvMVvb,W(H9Ç)i3:pz:nXq@JJv|ADd GWO˄(p5AfdBIQȜ]f5^9??姟>GDSd.?~#K׿VEjCUWNGU-u^r)S W?~(Sk秧7Lo9;=kln]8g8Aݻk$~jO $di@DQmGgzn:{]l?;Me-XMeLSvQa~_EH5< U1qh wwPYNؖF$bdb9p?RGGLC$!ct{t F4gm\vI~nޞᨃm"&2(%,38&iif%Y1 1ʄf"i4)zEua; >zqN-{݁ibh2bD.Q9=~I+xGga;&7SҸ ܰ78l! Ertt| (dyAԂnh7e|J$|xw%TPU;/_q/F\__~/^>' #$ MJ0,J_wh("|!X2a_|ᑻ)ٹA6[ ]th; jF.nfFa^"iȊgˈNM|xKw *BAi0ȋMW1 0 G7(i#qu3e61t=,,^ŚNg\_=OV\^Ҵ-NN(ʂA"dMXx_~|s$wodiS*7s}#i'>Vw$\0B[0t№f~;C28=BkbCFE;xzrJdIz&nVWOrAcѴln.I˰,EUHCy$]HeI(? ]U(p=EV _]o)USyŚ H ӬsLb<ұ<=}P z=*IyZ 5`Ŋ7?n􋿚*צi -爒n8;HM1y(^IS5"+-!EU` z1a{{.EQS1I wwwH鈓c0#lOuG|ٜ8LfX(ų VGȥlbe]bOb´n8m"/ů~M&M}:2Y/XVx$L3T ~O2TTJEkRIYURh4G"lUQe Hغ> "O?e4l"#_?\6EY2EUeFGClr:W ,s\wnIDaxT۶ N K$&O:& Cdz*" gp3 G>fȒj6(ꂪD,Xn}~|{LjgX#^gxGc D4DY!b$)bNtТ.횛g3>\]OwGK_uΥ8:9E-7UU!"sjdf9U7QQ,tl2(A,l6kƽ.U>^ A%ݡ:YӰЩ+!#H58ۑ$Aa@`x4[&)Noޢ5$hn<>0JĊ'$QI{SCS GM<\st<Ϟ`XېcN JW :](ӜrFi^?R9O_>Bfl;]Ҫ`rI }4Mf]ѰMDn`[bY:IZ5_΋g/yu& "^%e)5WSz6۽ t-fW $sg0t,L]q@UV4&$2#(2vp#v-!1!${)VP»&)nE&iZ I:U\W9[ *!!%yq}3C$$Qbty@4[uUq{"J+L"S!b4mqvEeW[QĚɰ_r29as;OP Ev550 #$A@br|LlW;z."qtg>[Ӑ^B Y#sBDP!"[ Q)uary9E&-vD2jI^oQISkZM)8dq pSdE$2JQzJ䨲nZ0ICao51 cH !awӋ']Mr~ DQA) Xf" +"Ecrٳ#tn:z?{$*#B蚊m$yXx4$h:X{Fa\7vWØv49;k+^<=bطQ-+PԒjEU\1ϸ[z{DY0$?W{N&lv;_`:ӏh6lQ h6Q[-EY&xF{NjN~gvA *e2>bZ4lTIhej3DM$Y,5/V[描^];|{ߌ <2^ qZ E2 89gA%֘LC5dĪ`mq]B38v$p ,09=Gl[ֻ%/n24t M (A"RV57 xyQUd(;%_7y>YU3=TGM@dl6 I"'0:5nv+OM7L&Mٮu|8q,O=0 $pB^] (ӓ_|9hJVdR-i=N/૯~۟y5>Y1A4X:Sz i"{`y]+DYEPd4XqftGQDXd-fߦU)*_~GHiJ\\w%PX6*Qz]C6шjH,W jKe!fAƱ7KI>qic>ჟ|?~d6R!2]44 )pt֖5Za<)iΏ{@*D~|pttțׯx'|wxӧp5ay(L#D$srUx5NFnZ Z$1VoV i겵!6 Gz-*&#b$ƔbVFhBFjT .Qe{ϐ$F */O)tm䊿_OcUQ)Eb I.O(X~u-oq*nYY.Z$MH,M gp=b6[@2qD<ϐd0( Hel(,cп1:Ks\dE(mo1_Lq%6*KG% g[EldyF$\^J,bdx5"s:>V4xY0= wEV^ *G4;U^`"rVU+G1 BQ9;}|g B﯑[ݭqp{wPs (OMno!r)I`Y~ӗ8 q}rn6ipz|NT56{BrCS2Q(E4Gdb:`DN_oqzv=_ӯvnSj!)"*/ IDATR단JNOZ%'+(c($&Cڍ^'ҏ~M8 bٰ\\_/ج @BZ,X3.ί4{T5(de@Fn evVs Vv&J*n QÔz b\GhJB;Dq6>z YSht__",h򘂩+ߢv]Ju[5<7(䧿ѻ_)VY؍1"?Ǟ# g¿ˏh5L:zx8bpw  P*U3$9%KC~%#)J,Y?948l(, V@ ,wQ^BSU:Qw# Zm*+8"u Sf[l"ي̡Rs.Q2!z Pu>밳"DQ*$e8,PkԸ8=gX2J$ӒyW45h`@vû)YfvtAK/qÃ=[ oA^h^p%]f5ެX-bb O'lls|rLK[o(ILf FϏr AT8{3G8)_},IDXQHug< ZBA2w z\8z-K7.!˙d 2&%7DQ`8!"\'DUD^Ff/+oMJU C2!Wlu;,8R)#H"V`8t{u;"T+M2Q>"9bm! !jA.[B)9XD~?OYwH(Vnrfro73O0`Z)ٗ_l0/AiHb|QRic/= @HrLUl2 pÄBU=bC?B=pw$j=F1Js=5Ed&fҜbeI|UO(,>rA\1{{.),KDU!rCQɻO0-{ TXb[a0\ {wƻ%Q")G;XJ'?~&"ᚚY,V:u.Y/tpFJ\ 7qŜOl(#8 *,R"Y9hT֩HL4x$qf0 ?zBŨXO256o=|L;UF P3oz@aZgϟl~gG?%ۇHtZ}̙O&(AH)f EM3 ARn`{(l F 5iR-SՔlͥMCD~ń7'O (8tcIcvظ.*:b$ QӈQ@U}GVjg~r*@.@&x1q$ VvKp?$(0 ~4D0T˳+V8|E[2nVĞO誁͌jJۡn z$sp}Gu\)ڻ. _P( &al!c |A|FATn̖# `F CQ)U./fC~lo`]\oMj c05)ZmhJʃ=N_R2wbYB6,(&\Jeo\ų?7_K7W,yR'e&)bIThw(MT@P+wihT;mFE4X/'ц,QFp b/.X;kM{ӧWHGGY}^;+(Z4,VKv  shӳc Z3`$9~tNT p8`K^#STLC$Qq r1djl.f|!bzje3дח,b㮩6* p ASXm5I&q|rA18AR#J3DE*fbsm9Ĵ Go5K8+4k]- {4fM11M$|El4ȏ e-0-$ n^=s#D$sxp|/)GTBk&CVː1ǏP, EBًoX,/y3N/b\<EˋU(>thF\ |'ҿ7?h~w5Bw0ݩatDAg9Z%96qnдn&c\CT 34fm,(*|};AD&e<$$$ R(p]8HX>l Yb`j*ɏS]!DAFztju6l/cCriJi0_x6*# #ƃ5XSvv45& ))QK"ӫ9b8ߣ4 vH6P(V(lutu^-i7j\Q7O4]>ϰ )B&" Y`4~t~y<-BAUM2A۪cV|Wz]"!g0hVmK*|џ{?y۔JM6 oS/BќT,3RIҋYLq1Ѯ5(4LBGPt5 <7Ab> Y!JPWMxDޓ0LԐ5xAfg{( Han?f1X,n>f2vvd tSCc֭)Ms+QBSKtڻL $!c0P)V@K%$E*^ ?{lnjg45dzݣ;$L1*vMq76"gOPטF4mSHҔxNЭ lJ{|Ym1[,g<{ A뿥ٖ8@ B]7X|Od<^sC.fC V~^R@ìZ<|G?"dY) ޜsuuBR*VY9k4@%4 e{<||>'o^n58@^>Yo'ı{8I9>>Q#9==dp6D7MY4 hZ,K,umdLs֛IUѮct|dIs,Jld Ex1GwmyEPiW'/PUrM,6Kdzܿ{S7q6>a $—_}4G t|HS/X2ΑU4ێ<xAiiLf&DQg8봑Q%]L4y5^XP/$x̦+|?ZE&1^V1,K~ȽPi6jdyBTٸhGۘE\Hn3N?FVI$J2l0LH Vv/rP4bd:e1_ Q  0koi*K "qu5erQm"rysNZX59r|HsBRr;V0L0d^\ #*4MA3tOF9Wg(FW5c,kHU%34AGX+uThrP.[: W2!>R92ML&e,+OhUY#"jZ1"W fY6KTY0uJ2(V/~qIsTDR1*5j?7|fǟ_Skon՘ N.ŌJTW5{[U|/^Ϗq7# COg^:Uosyqʇx n))CDFY4 +==ARrwvm|i^D@`y*ŒR1?VNjBe\n ˜9Q1y6={JKuG ̧6"8@S$UPmp9"i*U4hu(̀GwXGhijg8.~rt.Ogx5Jr7|)\QJ%go8Ȳ yuvJgwASr &VY3<}{w9+|^>!7^>;ۯ1BQXmR@☍;bVln[a䓑 !O`>].I|$vKdmj@ M(*QX^i 3NӡKl&8TY{\\it{oi"bc(*Ͼ}U(9˟3_ΙFt;eۥ F#%_Czǿ?9V TXVzAԫMG R2J-tEZ.'' }dYard(Kqu5`?ܿL LT(VYiu+:5r!(iF%!YmwLÒ1 +0al bcY݌20M!6X6s$rv{% 1)ZVFq4[4;-Vk zj 0ceo(JK\FWt9? f,5 `o<YB5jj`FEVCU%Bf`8]8BS^nR;8Κ fN|DD4C$n=ڞ tݠө>x>IY޽],SjҎU.ȏEܵr3q(u6tMvAAĀ~Jl(t?8k# "2QrfeJHW`I :n R'|!jr-RW'\_"1vIVYN85z)2:֐ ̧slFtbE.U2"B(vloUOl$!lw88GewoVKf!a2z,D]|JQipKE} s'ҿe?^.f3LS!b I tP( Ou{ypb&緓k f9NYWь$ ˜Zzf=_> fYq!¦l J!<8>ūc= sp&)+!v+B?,svNR/@cB/ t;+&9{l\,g>6IR$2ul{F = *Ik*%Kŷ=F #$!٨\LԊV;kUFfElu,gK4coΓwvy]Ț̀ш$QfBfȪY. $lظKvdbj@ȅ[J{U.q.χlRJ̽%O@@(T8;#Q1 Bxs88Xs,U"IBy j|A`^ڄ6It~K?|pJl1y) +2Iճ]Ȓ|C^Kޓ,תUvmh$pRCbb !B/I:eѽ}jyާw}ithzңu$UѦQR246;,@SUkjMY@% ,aHE5ŚNCAZY,>!E!diD(LS.R)<YHX]O n\4u,c%劗_<]a/(K* >jPԉfbiBw_O^:NgQy] S^Y$^߻C78RL.d! >OayĹ|WkV.R1.Q vFi4 WJ:6rM9`kj/aIV!1Hq98Ïb2V{$qY,3^l{:jNR)h(HLRaڨJCU [J"Ϟ<@Td4n`wZSϸwlH_'kƣz~UM8;;g2ݰmB”0AUDՊ_l1O`+ƣȦ2,휓[ *gc=\>^!*g'#޾|-m(ͯ޾#I2,hktz*Sy5冽,+btDri\ J%R qk kAQM i,V)[:/^'\,e85Ie!Npo{DNę$J- [;L.D{TV96՚^^ݷoDU!sOwZb7膆;qN^hIO\AW5~qaDf kM4!`:n*S-C.]wXo*Ŋ "ncǢR- ]uRI=<<`Tk%$q=}K4!$&%ܽT%)$R*Ր ?𩔚^dv~-?$pߟf!ۻm]C 0e>[pttxNDnf0] )T |ϥj,f j\4 ''M4UGD$,A7di2O(8Nco/֤$^\lmd;8`oNJd,6oߝ'1Q(py>e<Ѭ|-"?!l/v8(TuJE~C$n**wBbUSx~&w!v%j) {{ n& fd|t;;8+x*V^B}1NPll&cowFQR N6[QL'C}wY.'E=B?a6]2,hhLd" V]5ÐՆpLARӧT(R hj=eCR+b{OHbML& {uՔ'[3ܧӬЬp7s,GD?/ۧr5&JB0"RB[*`*diFESKW3^d'_KeW&MbX|<}BNK@4UR=<DŽM]铧DYY,"k^cjc)mt#G2TekFT\q}Y =i֫Ĭ]xfp8%dӗK(f{~pvp2V/!V__LTL먚l># "b%#eEV,xniOf1ˇLJćoSZ;:orq=bx;C iu'FY`nǬf K ^]f4AdǶmDHq"wQjDH|"rb ZFI&ߖq;1M$wQ4e5\ֹvY̧lm='"GΠZ-" a*t1Pgl:谞)O>DR(`{gIT6Wcͤ\6;{O? ۉrÄ\f:Z)3gIUT r?!(ǎr.x~B6v>O=gX_%6Cl|Y+R(tnD!yR)dHlnshZYg|{D$Jw۞AFTd>[*FAr̲j?/9xM, d)k*l7WUPs&1;xΒV@Q \ݎy񂭭n("XAfi> "BMSW"vzAf2Y ŚAXv #$*??gߟWz8"c<EjWNPbDRU-Ea;AqSnÔ'1(5g"R\ASt&<8^w ]KTr8@)+,8|d W'誌g+5 U h5wmYG Ed:"ŢTEpoRGؖGqxfe,fk4g8ch7 FH/2_l3Jz'/H5[8 hmVݽ&#h}.?\1.qÐM>O21ERV:bACrL^F7ej:Y 2t$Cć8k$ ءiKYܜ_PT$]rۙdbQHwa 2ZE,Vj]Nj-Ç (ȅR7sn˯~SLSi!bM=\Q4xL'd~fnaG6a\m(JwKx2\,3b '8$Kq}j^rp J2"ER.VixTu7W*SF7tm*(q~qARvȋ/ CV wB$R> CTRQ%Xllnk'dXj@Ȉ(UU~oDL 4 1)= J\ Sd{|ԫE.Eq8:8@Ue%'GDCogRF\%]ˉBJ`cY\ yŢAT4M! C]g8z)۳do|fe0 :Adke0'rcʦA8hLdRopojs# NNθNiZq JӬcY.ՒVQQ dd2egO4;d.p~zZ8^Dӡjs3*'?vѽ#RARF%gs1N>E ;GL'&7dM\sy}xbdn/'S$'OlN yc'/(QTv IDATTol4t8xJLԪ5>z͔WNBTez;C3~I㜊hMXEIJeT͠\XxQ~ӟ&QjY.pOYBuJY/jEg3~=4J<}gAd'OQ-1*Y&RG.౽`wNlm_ⷿY.<6g'#tr}^>lWWWƔ`8nYnߝ j&%["K9(2Q5nK^cGDYN4ZрO=f#PԐT|z&vq= ]WDh7[|<#}!kbi t:M޿#A10 1WA!r6ǐD('}}[t-V!Nr5ARt\$3%M{^x4F-Uq<3J&7olRJBcS)e<{((ᷯ_E_prrη߾gذެȳoyM.H4;ۄ<|xYM)TZkcMJ6WWKFCIj2fM/{$F O=%Ic*i$0nԢFD}NߞqAp_!9qPVo! xIH]}bp{{F]!QfhmTFNP@PE 8FQ4JɄxJh_b|5-궹8'%:rwc}hͻS vl}7kJ?|N[fmIs I9}|&JŐ笗;Ct S:N>IYl^qI0 / 9\2*Rv'~k&^4W|<`>ې9VƓ%(3_o0 5rf ^^z MU/^ "Odbq@#+:DiF&HjM~FT<:F|4Me:^\TURߟ%t]e`zZS)XؖC|ߥk(\,s92&e/zSaZqu{KX0 L[eZwдz@U$D,{YI(*$YȈD\CU&jf8AU8]oo(_]]MqF r {3L+\=CVB{IJN.n'T5E'm"" nFC['2rL3[D$yHDR'r b4wY9YcQHJJ\^_a]>} n6k&c?;`JIa1J"X B]V K-vv^vrvCU9;FAg{YG;ۄfhGC"'R֮a~-O=F$kDIڝwM] I,z^sp|jx.28 Y-6ؖC},44V߼RgGGK -A QS3z³qӀGOoSL)GAKp]mk&QDϞg>.S0T4If>_P0 &Q2QWPAEЧ6q_ yI_}I0~GDeB̗t躁HoLF ,;"D9G{qfefBedRN!C5 Y8p`ƶXvY1 !2.bЋD J/(9pƻo{5<ۢT)Ʒ-dIcbMg"!j?.jQ?yʟ3֣F>!g"kǬ)<Uc$❵j8|a:;TucYi:])'HCErY(akD5<"""^U1 zF~"4[ RJ\YoR) brIR8X,^^Eɔ$}eW7E\/atֆv!-+ШYFwk !E(̦SLCó]8'cl;`{?~ʦVkYol./& S** Q)ܿKbҽ#~e% 󹇒iJ6J|LIDq$'#O= 2f+Llwnشvex@hAT$s0e5Ùj:owo 6tt_=$p^}ˏW+"kk|1v8E50 sMAU%zrUY6 W~p="/b2;.;ȒLV䩄FE.?B"p}noozNfz=H /?}B"}=e6JOR0`4=6*-Ίݽ& y.fߦ ytCZR*Al$KATT*׵\IEr@fz|AU8Ƴ=4-A(D;{[$"RŔo~umJs"?²c ST ^]j2ZplUШ+ oqu;ZGr {5^)"N߲{oQӹMHbHQÿڝ>ax9T(c4<zj8`HDڣl̬)bQaHJfr]tMbt jR uH'hwȄ79` gFCP D F%"AզX20:=g"(r;:i$ϸE,MYM:pܐ Y8yn nLn1>XLՆllEI!% 9 1JM\6YT eWХ^NIW3V,ҘeZSأU'?bFn׸~`>0!Z=ɂ#P6ϧctE$ "J*ikԫM..Ib+w(Wk9mv7߽T,QtJ( nKPGd>|xAA̸ pd (;̫WQ"Q 2RNOoh݀FdlV"̖KJGaB =:[=4&|ٳǴ_?x4wSf#`r72^>a $YgH3QS1al%JzQ(8_ywm#Xk 4@+J43!^? ?/`Hk4spWg7YD/ 퐇K$QݢV.!spk4=&Q5ig!7~D(v|MeȲys#PI`NybOGN% MdjfKnFstDE:tA)V~ ?w3$ABU hN45nC f0XoUdM0UPUbd9ͫwvw)ZVWoO/ѬPb!fA9_<IJ6 <<>Ƶ-TU'}r!ۥP,1 \fhP2x{ĩ7G$ʄaIjJjH]%K9@"I Khҝ٩t]/jeT]_]}-tW׀HJDT"'GUeE(rw:(28nH,g2*ن齖%+CkWԢDW 0o$_h/#H8h3`]2*p͇Ɵp?bي++CetF[I0K28΢~-aMjj|4 ˫sί;ps!e 0d9xET=N7BD|6O6q95co+'d-{t67x7h$ +*M;.R ۴=Jk&VzrfrǨs)\?o_f5'!.DOyLK hX07֊h|JyoNf\ڽɀZ& UCe "B9ad9-⪄9 9:?1Qo4 : :l{,lx99>Ƕ</ؖ17dyM4Ieixx2ET%mPh+]NjB;D4+PT%SE&W@QT"|bZI3[8ޒZ3_7C$?XN`cDᓏg~{d"7ӟ~^D7! |V+ MYs`671W rf7H<&/"Dr5q=;IN^k"J!o/f,|;p"Rtz1W{Clc{oIfA![0:$b:=&ܿO\wtMƷ}f)Q\c,9wIO tfuW\I<}+_9lcn2!_(`Ǥ1Z7m E9& a-B7N Ąg/sS{ޓ]ǓL$21rb Zpybp9?Zi?OCglQuǵ +M:e"*"^xb-mL#@D&K23$ )ju 2 !D>Rb'dR*;kވ{{ ,hL|Oftq);eDv\M&sv Yr=O<8j3Ysi`Qk,kwB0$RI)p9 IDATM^$}6ֶ6JgO>bĵ ޾ߟb ? jX4#z1 ZMc3 <֚[(D[ phAhZZa,}r9O$1<3}\j LD wY%L'iqt| "(j812 yAڈ {X[ʫr;rt|L}NBRTɄ=DI!J*+ Fܿd4ךc֪hB)[-`QnEpr!˽]xd:aNdsI\zu)dlmܲ\0aqJ">bg=>Wmҩ*9d8\`gs׌& dMuK!_f22L渞G".+&UQi"B 1LD"%q=*S-W|ӟ |o_iut}{1Hl _1MДzȗ$Itnr'-%jt( *zb%M2-b; $_Z0*Z+6F$31 H&xx?|BעZm0hz\H@STkul{@Bml4h1o^G<}>BH*GXsU`S,}tRcQG%/omYQ) JYB!"Ւcsr~"J;٘B)KZe4llϨܡ9_|̎XSבl:EBOŲ<$I&[N%<|TkuNO~{/=VNq.㙁e(ZNo7W7\\Z`8ǟ0[5^FtnI![[LcK<6w%DNӶp=\>E"!E+0_Lzb1ILC8%N2~G񬐥r}3`I  ppyQ(ѬT{j 9=># =~[[;,3)p D<#!p9G׼=0G;t82q]$S1 {8GP $v-b &:P֨d*TKu+\cA>a6q&((+zpNg3n9_3Q1_w9?ɱYkQVdsd:G!ٔVl>'/1)ƞ>~10erHeL)Uj,1B YQ5lEYOc,VvxB&,B"5ɽ\_0W6eRh3NǼdw`[YM0P*ɤ̗ouدsuy/Ww"NOnx 曗YklMh6ln! !RhL]ȕ mKl\]vQ$wHB=x saS)Ր%f5XL=F"|D W$;YP6_UL4+ XjьvwD&S XiPX~X^'(mLc91(Dx4%q!Ŋ@O}[[5ZضNRW߼p(HN|"b;-I`T %:Z2֌oU ;ۻ\ސbm|h4XX)" L9/%?wp 7=˕McmB?&Q$":_5 ` dA")b.z*O1g|kUkn̦ulUMB~BlB&!0,NNȗhBlHim0 L_YR"+6m}?{LS,{ʳp` F*re`D&rT,I77GPSQĽ]ʕ8H w K(ix~! \Q aZ&AB>ʘHI4=RΐNǹ`j̨4k9J>grϨ e^~u1.'/G&Ȥs.VD*NaTnwL;d@$HJē$1^~qْľ{?wƓTȓ"xL}cciCωAy\?-ֶv1tS*$Ig0X!x ]Tycat=|BdɧMЬb=:&kL+5q-$V,znOy+ZYϧphLGۓK5.dqrMjᘘ_I1Պt* ˗ S_$r=$%"WLʼ{?<2*&*A+{h< }$DBdF+j:L˓KZ$YɃ'PtY9Sєly|:@$"'ZaL̆QH*1i58|OYbsIAH6&b%Z*KsmpӿG%>=:}bLO3 Ba6Jh6o?VI?ISNN/YYj7f 9F!$ EUOXҬk Vi:X*E端?#O>\zXKtBmп%"No3: %|0XV̗+sr|$H$1qiP/B=!gw{bFX9av7铈dkLBN4 Ro4L"QƜ8ؽG2NK^}ƔHhldHeD|tUg2q&k5$rN.ae.PEe!rvri^bl_]{H [o6Z 1pWsc6#2[DAHe</i q5E;}rcbTx@YNw0X,OlUY.T+5޼~,(hkۨLwIXńбGF | Wl>ؤ,0 $d(BF_:Z FC*&Mn_a. FC 4pW+r$WbTy}&>G)%xto}ÝaN DJlFuv 9{vVˤ1ʥ"r(`gT9BAGh*+ 2j LKUMdȧ9O K.|Hx]j Wg7D)Kz K[[yil&N&c6''S>Lz~ۋ+ʕRɲUW\Wlnax l-lkJ'fXCR;b346xzٔbDT%TBa BR>A *] mD+4zw5tT(TlnZ._0TTj\\\`s\1bid&)x_^ps>!S(:ԧj%B e֟cMg9˷d4OwiN1> d2Y4]! Lc~g =D54y jC&u ><$K*Xoѽ!aS>K1 l "MIx6L|G%FxC\E⸮Kg_nwJ=ǜL &x"ܜ +\ΊjA}mcϞ=cx@&&]6lmp3Qe._:ec%2uWKNΎ|{&+d!@,Őģ=NZhj DzYL F= =>5!.o_!5.ZUR4<.N &;vם4pN:FF|=~@6diȂNjwГy22tnt>͔HӈJQ$rC&]޽z MG3 Ef<q~|GxK%{899Valno'pz~m-̌!鈓7g$SqՊt\-?˗oiw&ɴA(h8W71D61!k5>037 )+A&(cmRrI&Ҹt on [vo7'{D!""!@Kleߋ%Z߰Evo4yYHj2%| ~Jfws|tge_AD=: ;%}XFM $ݝ=2WL#d嘌mHgrDBZƶ M3ݙi9:7s"_g>]p|rx~D2X,)sqH}KPd8H$I!tipyϯb1-~҃ƽ駲R( _ q<+pD`%ӱ &B$ufFRH 3*;c93W|.GXfr>K&HXhgYd2)vwy%:WlmHd}R9.rrl.dN:]-(rCRtRö-4-Ơ?$M/ferqܥ1RHg;z-˅10L"- 4ѓI,!#[8UA}fۥn6ќt*G!GEzєrx2i |B% =*:단ZMUaLV]U#vN/gl>QVuf)ϟ?!$[ē1w1! 5*Bfw, -i)_ ]D9bPyVlwl>JntLd0p"[%2bP1\m|' Iß~9v1M#㷧X֒DJGVT֛;NDXBDxǿ *< cΎ^7Jm|wɤ#,0ϖ<}_ߐp)~f39,|œe.RP{(&&FðHs3(HzOT TM$C56<}wU qc 24qUe>%"1#Ug4rs!d2 Q(fĐoystLTek>gsyXQU&X b@fz?CW8AFAƜ b૯Z/3_@Hbފ1N }\1Щ֪4*Mlˡ\+0lǧtxՐn`VS$-DQBQdF.x.آNt Jq /B{X$ O[E.R_d2VXCމ$cZ岹gOe{w/^O^@Ua{K67`]!Ѩ5fh kX,P,dA/|m̢Z)3l_XKj O$17}BQ%_>tDg4" !go)]8>6*wq~ѧXF>L\(l21Ot(-& SBOM=gZH1*&R7g_ǓtC9[klI5l3ghJ!@VeȧY!_| 5`{,{)Hxr@&S>_}锍-r,A=4WGS\x,1¶Q2+g|6! %&8nD6a}qG7'8C2#_(I'[$SgoǓzsi z.!Z;"Iz!e9=?sl*2A=`ugd q,oA$JܶhlԨ4L c1cw;vǿBXΧػE6ѽ'|k^~d1DM;2Mq%q= UMdE;!gڟuƝfcT]%OH("(bALͯ~(j5ڝ;و9wf1"m<~\$/"(L{ۜ!*j()2j{.p!͛2*Jt12(( hX&S(8>:eЛA77}\n# |J13ӓ+T7le2IgsAս<,a2$e 1C\I(HRXsPGo͘M$/nmVQbR0Ē dM@S$7Woc$}#DD^}a` 1cC Z\ lrw_||AC*%SŸ/";/Lcb6]~L\)?'!G~7G;ҸiFB!J!+sf)AwD:y8* s:q-z=M4YT]$) |T ~qvy0D/(Vk~u°iw4[_1!r: )h% !8; .2~{ah$IiZR!0 GYI<+baظV@:BHlm4Fx0_߉ $i>C z X1(T_c4 E2Ĵ$Z2Iz̦3v!ZI4UezȱCdJ56Q C~gp4`>D>^ޞ}at EHfʤU.o/(Sa >*K,K|Q"d5FL0 xb> *aK85_uN!&1 0&bt:ZLRվ&J?1kaQȕ(6f Zû2'u9 `eXJ`&5(64K3M*e8c&oRdh }4oߜc&`5cl4L{}EFǨW C`9\нެ={L&CEΎnh] |4🏑g"͑剤4UVCDNOMh JV KtBAU"à?sUBT\+B2)Q )g}:рtx62M7v gSe"jBB Zm0j@QaD"]Q=ZgOWf"a8/G_~ݝ R=P-I=glWXHWg[c:mYxv@LK2ᐸgCry=5pc2@Khʸo2a+z^&9MG -'d4Coc9\Ϣި2YHh39܅EzS8?qaL6"X·KtLQ0n]zA7b2w9G'8HGQӺ`jt%db.$2-X# )`aLa0C7ѕ$^k:1M{5"QŹw{OO'✽>_?ck´m7TKm3͘hx\Xr96*bov9>,O>x?OO*J5* O< N2YS)d=&S*k/By$t}[+a<SJ& eۛ|g(BB2ΐ|6ZKLl.> _#FɌHPpqwO;Ohrn5NϘLMX gp}q 5\RF\K.aGREtCDA$"ƀ<,ҬfL&b]dInCmaz.y񄓋KPTIS֊h&ZtBX Nk%Nu-N"P)е$?o7wdAC.[`3L\_R#B c,V.~5Jj=`~m{wO/XbykD;;vv~LZ(Bi @Fha$\O@5dQDUbҕMKl8|_p:Fz򰉷 9Zff-j9Fxz%Ip:##uVeUjQn( 934ܬ͘վFːf+hC.wIZKԙk5};Z[|0`L,\%hI3& %"2{pkeÐˋ~ N/t"h40%rVZI4\7duE5,fݢSU-%$Ape*s+Whmc>B~hX[-x!_wHr<{q] `:t| e{}ôϦdsY!Ga 9 J%H,K?x?? #6wLfO,'(JKZgtK"9A/:b0Lg4+5b/c<=m!F)JDǻwSmH5<&l.XEc%GSΌ(qX[X |!lUoqq|AwңV[w gs gm}Yis,Ro`s8$I R'O)ƣώPd~oczL0(йR {6͕o/9*R1|rR>K笏(hL=cbs9%,k2zXϋ)V+X,XNdB"k !Z0iVZLm0I4aoX BO\'%<~1Q$d3)A^%W(b&9?{d4dL`{|kYS,fs0`}E ,&)Uַvy%' "łue\#+$i8Id>Hea>^#F"^k#)7p=d5OJq3ŀ0 jN%_c-,T {9Za}"ff˯~W'և2J>%(;#꛱j`QR*i$^0Bt,ܹwp6̕8KHhbG1F Eq.݋¶(K,.{<<-X YKlШWd lzBTF!EB"$hH|6'gln`>g4PԘ b/9cscJ!KP`3-uu}Z-ҙSkQELB4'WAq(Uerp1c$)b=ȧh`6ޘޘaט :zQgasT-K1WD-V Qq?vy KcwiueYP͈\LqmDIIB4J"y!әL533 Z-D!F֐ RBH1,M\&jhFFS֜j +n$xeY&N#Tlpr:$0I̢ިGi,&gX6,^gkT*GGr+L.K;B|$R)PdEVh ,<ı߼,]v +1^bzt%"Q(rzenX\a6Qf wھ"^<lRF1nsrvh:nq޽DHrCD%ak_ 6+8M&Z# aE>iUyy)K/1{S3$AĚt:#R(vDN͒JDI@Z&volʣ#r|:\-2],DqHcԘdXG4ONyylp6d9E!_ !+*ZVDN K z.'}\K eȦ?;븮Ygi\ x@J1MFl1BDVkMEPK@LDU(rD~bfJLf#<-lac> `K,]Eːͦ1FAUK =\-h,y,j G]ġ7b/_Rɫ|sƳ!+ {{=ˀRF">oߺ99:j"~P(g(4AIP* [-0C\qgV9׿tz]̙C$_,0DHG7X[/d4XiI$3zbJIxokc c dg?y7o^ǤR"z.ŝ }#ͫE>Lt2DdVĂpQ"unwebBԿfpM1 Z$98ڵm@SsF zf^ Wn'Y6Fó)j\}-#8D+c[AH6 *1|6#ldg]cgwE!N0lT|6quNx9[k;?bi;R1$Q*U./p|q6w?1Kc0Aڪ(d<}zJ{q?-$y?x\K: =$$ZFԫU:.K~3ePFk fafmT:Mo0 W6L.`.:4g 2zb.)P*h6wY_k?g67`nNxû(ɂ\^BdZkGa*l2\ ] Lf XZa2! Y]%iNF3[ 29$ɜ~z/V}>$A:Kg.s-ZBRdfXtV`}uG\wgud9@"2xv¸3%Xln "2J QUvZ4Rv|>9gO)d-} t7n^1  LS1g Y=G7 [~?&&?`t1 Nʥ 9!N$l5UӤ#0 H4ylmwܺ{?cw ,s|xd8ZP2A2mD.b[[|}ܞPhh .(ĞȰ;e:/ /zHBv79x3 HiscI9WQ_bJFNK2x~ISjTѳ)z&'cʕ"a| =RhT:[khIkFk>uK5 9;}͛WS A0Re9fn$R;]#MД,YjVCdQ'%䘌ob`×\YDCwddj#ګ+.真G?`iD%FjI'-CZp pHfd:  #eu;45g>5esd:ceM ̱m^X#\.w{ßliTZAӼ|򊈄RQ#(7:sAB$ovAbXo)-C@ ޽a}$Nd*ńb9?zq8uJVŶ-޻CB"llmq3*aY钭}?{(JR%Tҩ ¢T*su:)E˜2C$qt| RWvu-ġZSx()^Iq6\^>?d_O?孷PkyCfW[mUP=]G lŴK".iIƷ}ۼ|}(\;)#\>OV$}Ǧg |/Xf4e֌g{.}.gT*%&xxxNZwPŌ\%*|S1^ }T-Qr]G/)Wlo*r8q bL,L|F'Ym0>")EZGKtJBi bիkǿSvoIcr|#Jr9VῩ13sc{Vsyʫ.ko 2MQ*e8:|AY%g,,#`:2Nt$ n߼EkW_1/(7ckw+keͫgģlo˿O:x~0POGTeT=ūׇ, %?}9MOQe06O?[n7 |*Y//QOzdb^F4,(g - U9֪MX?v)!p4e8xޘ+sj&yׯOwmJYs.ϟQ-ɤ5=}H*-09bng=@R<{qŀex~Z+5wb6\)-0.+Od'kiHR MI ):]Y=x'=z!Ǖmǚ8g {RgO1M (6H"<$"$i>秗rj{`oCQÜM׫+Wjd9ecjGXCB{}~[t-*(+K \bmquk$8??sqɫcjlbsCU|7&賻:56ݯYz\vt#لtJeV+LUBU0$;DRxCX X-M`8 },&W(/Xiػz\&E{Dd=(Ķx%r*ď4ZVU%Pm%Tl`,,.z(I# 1(i+:)5d<|Hl2 (,L1K&&ȿd3L7Xi$Thlpv!\?tJ,  H $X=&,- ۱Pq]1/ fp$+ĂG%mZ DJ ͛wghz19>B˦I+ #')"/&/mjֵT63e⛬o( xÚj_sN]棻3u<{*. ǨZz.Vsy٣Q6Azl.prnܢ0D(Z۲IvE^vV*$QE%^@S3pq\>O$HJ5EG}ˬ9,GJ%36+Zbx>!N?d13t{kyn{vJ~Mː??EMsuort2G@$(d34Ulsh<@/Y8tL)\ uz\;]ZR1p9E<7!lb3tEAId j*B9DbDa8fg 86V%O]"_+748yŞo^t~>O?T/^mQعF)y%\(o* DJv#!2D3d2YMY݆($F1q,?b>w`"g d|9Os@9豹wY:6o߽, r9 >^-{ zLcg .o&*ޜNS)#YCKIzql$kWpؿɝw1P*Th*lm|{V 319~'sRpeN d:bkcqQ 26K#xVEKE.Vt̘!Rdm[BM͒Wd,+>(qK<+3"ABH wfq( ǯcJoz' ](\%zcroO8;! !X>\7$RDJxq@:sY|63nߠ588TQEPM$C#K5V(ւtI9s!3N_FT u9j*&$Rrp#uo6g_ [cR,!LoO?//17bn<| b"NloS)~qy÷鞭p$XkIUMF>^kbJӘa1I!ﳱw'#2K4UF&!|D$"nsy!I (`GsOcw^q=gUla\R1g}UԜӧO],@{PW1o(W5rz~8x$QbZ)R/E^%j@Je}mb8凟bgm!p=<73|{BF۶2/.P*zm_i0dbkLz6e=H3ЋGsIWO]FR-/X8qxmsoݤP(z6%.{-魏ilVC 3FC0<*"))kgLHZN'2\eb\.-4=:LM&)Mc&z(‹}.bߺ/]ޭ+$rͫ8HPT2BV!Lַ6ryT=Gwg<88S NVSxﭷ;xo鲴||aF!۫Tw?@IgHXDײHJB&Bj(FWKy@Y?sX]+ ?A!K TEQ%?;xHıCK|F}1M)-nq a0+䈓jF̓O0lխ6+k ʕO~*ɈtciYݷ5Ï' 5H{FAo Qt]Z9O{=<~GOvr6.>'̥œ^aw]7 \f)aѨ8>/˧|XiPu |>D*aQT~(< E INfFQţXoke tGXNcL' ]͕MiW:qj قď SNNN|f#\T͒>o_|o+rk{ΎO?Wvt1,y?;;#\d5LFN1b96&ohcoLLL!K.1_ sB6׸^@VD3F9 'S(iY@b޹qݵ*Bs?Y&4b,)cJ jZ$%V)r '3\'.;FC&!-ȸA|3K ߡjND V, Ĝ6Ib̗ crZb!kR0jۤÎo" xҬoI:PP.G.# C2_v{WCjjJFI@UE ,9 }8 Q2RJ$+1 I5:'}^H|'sR, lomS(տzߙP+ 3wv/NY6Up.و5Lfiz:>=GZg7}}4U~D*IWO&d 92iIbiXM;G3b437IޥG]FTER|1'N!aqzBL6[ :!l 8z 5Q XXQ P+-H E^,,cij Rkis(-27-!M!WO!X.`B WLP:I"1O&/OgāCJq,zu^d1x VSUѧ?C*bk! Nbsb/ELxyC l]b05f٘=6V\]^_Wf4d2`>5ػ~d55´<~}w769|!E6r1K`8xP 3Y i߸B DAgs;GT+U?߿}.KNz mwnF}=/±CVWO>^9`8w}Y9?3LcJbZ>ah:Xkg$a 5O4-^xXmr|~6v`u676u }*j)o15G!Wd<DImawɒ"+N@QD ENs}Q ahQ(ȊD*蒋!7K,&$K)2YQJPe]ϡdu""(DLs:`e]TӽZnpٻ{qAT?vc2{!,2L"&-#i5ǓgIaZY%5sq|eYS*"LfiǀDA(sbL'թ݋hJ9Dӵdg7_igRoqef4[u29?I4;.#<̌Ӣ+]Յhhp04XЌ;.(6;Ќ0 @BL7@WO2׊߽;I3_/̥%RΓdP11]._fmeײisic2YPy)`l싵ܤZuaII(/bm,U! ϞԤxWYZ}N[1'811slԔHVא#Ãcҹ4&##g@J*3*Ħ0h6J5e?ǥEn\/?)]FMAg_<@+ђilelOʼtklEG tcd)Eؖ5FD6V>d8KpGd Iݣ7ojB$s:ke^67aaNͤ?&ɒɤtf9$`4鳲R+ sKt#$M%#+*hNNa] *;#f3Lr/|1|qa`MR `['o'HiIP&+e5 =z*$R|+KI,LS6), -j$efPgbkXg\?G/o![UTA sC:sK5~z̰'6D@6CA}ahgX]]楗Bsߋ(pUv;4"ǧdg<|vkg2vɄJ&C:l{dєx,ưOg8$$+ktmNOܺţQ<-Bzh"(BL \>{ȧEJμG111"A( &Dq(ČC*a6BA޳c|+QMf E<2Q$AtVP)lC^2) {61 {>z@*x]jcwM$L;qB IӜ13in٦49k6iɨ5] okk<|%(QVp}?%/?}{_+w(g\!ZUH&%D1B%H m4UszڠXx.Hp|9Zf.QNDR1GBvqϟ<"(uHVWY^q}s g93st֣ʡ1'{-zmDY@)ȍ[wGL3dsiN pߏiGll,qem~g~\ںB17M? <4BNATx=Sga߲iu &gj8\q;LLQb:NE.԰g#6LƗɖ Yk8;9]qBO γPX%t%}ʥ"K+s\d7pcdMH1 d2|?°,T]%!E,I1f<,2 |tJZ-ϥ>_gl؎0EMMPeq%iÞ -l.17ܤ=!ilJp{7{VJ)Nw}ׯG< 1H/ OPe|I SP6|`G˦}wEWxT3 ,f6iO zj6{{U5Bt"1 HsGXT.?}fgc߼xfw4@@7 \%p)[[TJE*e2$*K[P5`V^ʑL3F@SIR3)3 < il|9Me1'S@dFqB {]J~Na0ʫ=aS)/VP J EUy!oH??!k,.H"q7&ׯ}a2o~c 5X!OfvK XB5"w4|u66jԖuϐ q 5&3'c&[׹r ^r9!JSlxYl)L 5zidʇvE7 Ιt-H!$ %bbDae׋YGLx`yk%>7F\B̥72%W0 l.eN)s^H="dp}Jd2u\TY~1#,*ĞG*᝷dnH)fd*XY4;Mklm_acj"y~x@u~T1IyD :;-]怉arBdoߓYXZCTEhV1G'Hǿxt pƐP1BM?xk7Wh{_|[v)j7xLRHD1ٯ0 ly/9Fxom^Ǝyfsi9] ($I$QBߢ& 1 r䢧|rZYDU@GLg[\{i˛{&1KRsjd|:Sⵗ_fO6gqyg{rY<}īw_"+P$O0 ߃<8zyAv[g;jCs6R+qilJtLgld&_\Ngb!KTyJh\v`k*NhBd3Pf22 bU"ʺy N2!8WÜM䋬o]&s<7^@JXÞuHm45MFM9}77~ZK d3I.oYht[׿bDzHg Odj;8G4ḛ;`soK0^s:FqlD. Wnt: /jZ8<{v¤;&1L EaO83cاV,>os4%MPe:s lI)󜟝{!g dECEFƘ|[O2!Ɯ5uDQDÏ}t=넘M$\7 Q*9% <b7#!l(pf/dH^/"I>ƸMDc~B!_X Jzq~ҠcNʵBzg~Nƍb0r]EPvmwjqvФ}>ay1-̰$5`"Ggaq??-))Vq̐s6 k˜w#4=C-b)ƝMn܄"3U,.,ll3xdްOe229_ɡ$k̆.{߻L*8lN6YdjvW_Se^~118=cf@iNy\\$[V/-1(dr{" Q9Wޠ^.jv:~EPiFcBl)]GUU2J׊h>5%I<{3C?c EMMgKtMjS#0hDRپz I1&r,D0I"5cssݻ/szrg81!`{694=EtM ehNEWX$RjE  2C, Ⱥ.t4W.sisr̘b&LF S<;FWÝ`bu rYZY`0gqW^C kd àVcs}ߵplb5d:L&['tgAY9)CJ (ecqQQHe8휒DP1Hgl_YGDYr'H~}%)!'mԄ7nQ1tQ`bZi6/~WEN\h!u^}& ZQE=S@ՓLF-|%BbGƄ^s'#F6a$!{"D`~BNXX\ 9:eiDLiOSo$uya'_g~.ܻ~:$db[NZJa"a>KkKx)JHAs1L=)1lC=.8,a;!Kh$ |w1LLVG bQq| 7![J.9=9%MSeXX.3u}:*8!&Έ L^ "K&i]\qOPT]q*ryNZ /,&pF>ϐe0^\c?xf>GݯmD=Z 2jd\赦8 !ds) 9?o38d5\? ({=4Mc~ ǜ"6=$ zm "?vk\8]&/aφam2c2 Y"xERS*TM3lZQ$ ",R1㲱D.+3>x `J>>7? 1kˬo @"dCڱ}g=6Wndt'6n (PL6aC:W./F6+8KGS4#TI|O2Әs/ȫnQgbKKuX!lMIi)<%b._Fp6A/hL'S?'_ɱLtu&x!ZuXM#\cD $ "r^O&z$ N)fF␔ư!J|?tErCh:~,k3yAY$MQ(WC46V숭UB')Lt6Im#-3)-P@ADB($\J.Kۢ. >(8`8k$9 B -=m bn^|÷|s*s5KUx6fҶm2ˋ8g鱾r -v] Udwh' >∹*3DHoС\+rB^ZɲXACEkhm"pNwhV,& R)l#_.!"?EQdH B&g~X I6r"cP{Ap||Ehr5FlIg8V76wlm*ٴDescc}S+P!k Cۏ*GI6ޢѹ}z)Ʊ 6]|Ge(@`: 3>+d)ͣsQH$ӁHjk 9Jjtds{|*GOZ1O)JЈGdz]Ndn='%1LHɢ)g?2D,/1(et=s\~5]~;SKާ{=\E5ԄyW^VGKx1y) HK9|"ڃ3n[^%C/i}' rOXr$eRQ-d9:<3LK$15Z!CdQ!C@VdU zZ$FORs)C(OJK2W.R|*<(QT|>ԲX\[f(͕ {=ڍp՝RI y1ˋuRZK|F5 %#^e^&"OLd ${7^AG.f̒S5pt6x4"$Dd1MQH*)6__|*"MplvqfJL2nBzO)jTJE,sLGTU䄂@i:!j2?/DSdY*"Ji?ao1T&CeC7ytoϛg/޷/1搄QN7יQ̗H't&1B57bZE"0gRJ%~<v}kӹ^+X7Y[c}mUJ9@KicT9T+yd9%#ѓX* oE< &BlH#ٔ TY_^&y!g,-,aD'VmT _ 93<ـX%*$*d3uF!\-fzRb'O?eOyyo /b,kNnh2k)EX#&>cӳ0(U(k}CJ {]|! 'T*eFƄl›oekcaG`DI!rl̕\yATQUyTMHa")#*b Ilmj6ؾqhwZd$z:3A/ds:* 9'шR&GVIblMbgFRb4\,l_`3s~Q/xx!0@"A %>=/O d"x_{;wIΘDA[o{qK̯U&?ŰLʕ:n\i48=xCbe pBr%$!6IfB8hz _)Q2 f$%OV-u'7suz6ِ()1L- %`:3ś2%W\"f?Lyrb9|! m^b8u&C6_.}s+^17N;|X[ZQ*w1~m\$Q.itZ8OXe0xf86$!1"8 d2 Qh2_+3P=pŨGC " v8YEPdv<Aw QZ_bcmFHNپv˗It2Ӊ<1css+tz37 ;Y\#'teX`m#)DMa8OFUR\{()J@F`<Q$cLH¿lA3b pCDEPT7p1r"^()g՗i:1)93/o!>SkL̕a*I̬)|(&Clqv%oP%s<;D$Cn1>?OF !ŧL&.ͮ|gXIgDƬn.SeM,-q^9*sN ~[.ZMz)%E ؾ2LFCV(fLvPu۵]Ez#xA6# fM6)) 4DVBQd5MYQ8=QR2[$@O2YhXA 'CܚEc^W-:6d_}Dg$Ϗ%Ibh5ӈ#MT@t, Y5& F({貄,,$I^^p2I iPSx=& q@^ݦj әwdX˙R y Tj5I$ROω~ppv#Ky;(jxGL==۝P(3xyN`2ɳhrg!s qOLC$4A(K3Xm!E?~E~o}N{l0 bP5YA,}w}퐚k) iXpreST9h4σgH7ȢFD[Pp^GUViԉ}|?F>&ç4[Pdԝ5b2yx~߳u'?~UW`m3흑15⛻'<|GS4`ccXh>$X2;M* aEsN)Ƽ~:B!lʘ>o"i\N]vEo=("YFmqDQ{|Y$Kr!3 N5 E6\4"MsFQaI0RPfk9Q{t1-_j(2] )dLX?bf*ׯ]t-4*ҸRJTY'Kޒ'OOHQA8K<;:#$DDYğbPo7q\_Y_kDIF^Tخd^7QVIV)pꑻRp>+0e}CUA f İ,1UY)2ya;.Q@+ԍOmZFB!bPENf^1LdIE$U"L`:J*7_  @7-!i3*2޸ f~DȪBYI_y2XkD A$9aL!&%Z% [9r:_3 TSű,qchAU%<>?9'.}U" F77I)Y"(N3$!cskV hF(l6c<Ш?>Bz\Ar !ta 2I(*Vk2c*A²T%# KZ êU97YrR?Cv6)B$ں*._Q!R)V,r_8?/9_g?;:*{SC$z.cgd"/ sR 2iJEAI&ܼsFQU~@Z86yY2,=JIdcoŕfB@Tܦڬ67@MUAӌML`>%EY`Jf`j2e9 0m US(^9 ~F r?Tpt  9K{\pt>@D~;yL7RD\lHJ~'}|sxW#rRbrwWt STJٹQoϙƌBl]6 `x|F8y7mQBZ-9h昺jQc.*obYqq<U-;(ɵkhB F@b3-ys4Cguc><( [tG$Jb-"Ҵlb"$Nf{hTJ!gɗNE5^( r Ӝ, /f j&f3 ʹPSuZV)olBuXiYbT(YQ)!Zyb.&9C,m*CXYq┽mقo>9;;drE ƽA> Ѯp 7_Ţ{TMY9pɜń UL UrvGHf8Oͷs7-hNψ B 6qUٱG8\2g̋mHxV3)b0İ%Z.l»?y7^ⱤqyNwS)a.!ؚHʹwթs>~0cաD&@Z[ S/N~nPw֙OIx8qYR8[^ P|D@ MQd _";?[.QdRTϑ;yJy/K}àbc8-$YEbY[ߦްxטEC*O>GmCV=fQԙau%ONI#E2QtMWi|$8ۥRa[yI ( !|^RDB6$>ώZsO^; Jͧnb6MTWtuz.a:.RITB!2, nqoY1e2̘gnn1b^fb (+n2hjE(l&BS baI+ß|UIdD (;|7dt0iBa(uoDBzg([N2Yr 3B$_7K!ݓDR+ܸG<{{=L{;B,Ki9~EALQ^9dXick:)[PBfKBb˜<v?#WvH󜵵5v*R>!2'gT[;4W)Qo(FAVltvr)r~#-Sw0u  #S!IL|Vw(t7;XxQB5,(#*GP tV(h^yyyXGAEag(@YdEF^讍&t@UJtY"LR#&ah*eU`*ʊEhhNLwE04pPXF h1l;|yS7|6E((-Qe ryS܆j::F]c}`FLtO}iE@ eڰVk5JPx9>'^;dM[zh)r>\rH`%֫|NG$UǶxdIcV77qyK,7>Bz?Ⱥ"D3\Yo!5WRE <!ǛVg}&)C,t] ǬkeYNZ11|LUHtV_Ű-4եDH’<H2 I0CR4Y0 J,NK`M)fsxxq2BwZ4:k{ԛM Uܪ71 4j#K|N{h0e2kI ci4] ܆HW}ҐdV!tg_bL>rM%H}̺Ba診F'ulfd{NY䈊h*Qbi"i.~#(:Un2*~D)kG-,oJg>ǜ=t5WM;!JتMӭl;l7i*X`j"iru{T\n^{EA405@b>I0U, h." Ī M)%^ )`%&quTMƔnݸIi_?xNQol!H@YLűI (bQYT*:ZQ E)Db*%9yYE>7|Sq~#rƣ9K4Mώ{|`OaiSA(#Uqlkt}=p^tr| -#O<쳼| {PT?q,M~?<~!'8y$L]Qd|?#s?Kə\;FMN/qpDH$F}"[>NŋW7zQ֘OٜBm2ύ[79t^BU dII&UXyxVǢx~8s=xI**q"2QPUp\VME&uh\ۯ~o}ǧ/.'ıdy|L<Sq sK-ww):1&S gY' W._J"L38YҦ+GVIXE>AjH"R ׇAq* AAOؤ<,,,095W5{$IΞ>4o<!hY$UXlt(d $"fx͛<?rJO̟=G~I+}=bqy+!Q+O)Y -Gȓ6KtZ=6VI~2Rk8q]I<0"ˑN)wM\u\dAd0i)3 ;dz=v//|I6#39Q`yi x/3W##I|fsuUL>=&%"h: P <& ݈!WeEp]~w N8hԧux@g?XNL/$? I4t85++˰;bdꈄI ~DX͒˙TXd1>ͽ5Qu;nM #7+.]t=˃H$Ο[Ķm>_H~8=8^;X]HQ#0sYY;-2fDUҙ/] mmz6tۊ0R(!+*bYqP.e-2D6b&ED7Ut{#vvU*8Nph3ypjy_zœq:ſ?l5QT\d6hf= eaGLb>?r^XCC4MF6YRȱLM.rUMF!!a|b^!+9{߹K"AB1eR/AղXs=lɉ@R.)o?jS +Ǒ)|L6EDI񇸞E BVvW>[㕗rBG!6 CbZ+'+T^}m&j5&Jlol25&$G1_$1<639!14.1t\RfSypwSGcO3E:a :FNcc}ÃC6dlgq}/O&bb,ZBt ,AB$$pec{s+W,G~ibbR.U"e1g4R QkH# pI<98<`8F!lȰK/ĩ@5$ ll!rD3Kfګ&=f]Շ|L*O~;:}Uo G9>MOV$6RJ)9>#Ae{#!+'K)vv0ń^sZ1OT>8SJg)j*R"̇>N"anGMIiJ"vɉ _ًLO3sroܢ3xj Dz<dF8!U0&_=T?ı-lFKG^SIt$'DQ 3ĉ B@䍑y~'>KDLOO1YT<' .Jy>eEG(B*TQœ DzP>]fcro٬0ɤ`wk| ]@$m0j?)|\*g|GLr+G B2Y/YjNo!袊&̕9l{Li"qe)6}~^v>AV G-bA|n޺N6Mz}N%U\%%Qt0tx$"*G{G$<~{봏l G#HY>/"ñ'uzmǏvp b8mjYfOs5~|9տHㇾh'{k{\xJD@&_ ܁GVڻ. zLGDDmH+e%ZR $^$bFbf*Ga!TRjV|1G*eE{'gHnlai"|*83fIdBN.0-.\f~qݥ<…s GUny (""3SsEDCTxKĄ8sIcTߐ~?/%T>D;euk+2?W0#N_5+:aB3A 13=pd!*f:E>ַߠVs 5;oPIrzsQ(LVkL'Ik13;#<Ѹ}_3;Thw[$J!SɘYW;c ֈVŰ#4]diqb~CN#$\]Hb1ӳӬ⌆TK9$U)ڭ},>y潻 cƃ!,>Añ ApF*hخ dr9߼I穧?@{,-ڇM4lnKõBAIJ2N8Ō|D8!v8ߤsFGsuRf(02&|ivx{4 [ }g8"2JɉiVk7ɕgl}DKXnq]."RJ\?8~l%jp}G>< t1LL&jDA&'hman|\>뺤 =),{Q>B\!C=Š?@J2\VaHaDt6033CC5f*ad<Ӭ=fb9`i# sq| ?3 nрg?VK6J@\Pv,"mأ!~0=3ANP`8vH A w>MMISSȢa6fhO±\8p女RYt]GE穔Yg8}4ct&* @bpZg47IgG Db5A3~(>>_ ]2lɩYzkxΘVIѤu U!(2tQReIHLII,<Ev)L#9Nv\&*g9x)N.,0s(Q! jR"{ z. +N<ejj%rN9R:C2+OXc|F4M3I*%! Iqtt&jhL̩SmouG2|Ã]F! $AYnpezf:Nɉ:Jյ5*"[',/rY"9l;C{xMue P Lq,H# |kܻv=o&>o|@\~gr婏}2xDz5!1Y dR1b!VXX/rtG>_Ug98t)frU [[[DD*bmF~ Mgw{E)Ut]w**|+# pj$[[{d1$ڇ} {{ ~B֤3 .L +*n1w0- /cܺ~DHBUWh4 pi1V+N)| MtU_,I:[PL+ -#;.2"%2'܏8r sy$rZčFmc;\N,.Q,(d6grbj`Yi2v(% Ael`*'=scU#K*%㱶mlcYcD? ;էbawDĜ:q . *!!.k HɩHO_/'Wz= q SS_e6v.oݤQ(1O>@}F"JTgNy664{G>b C ><ԩ%ЦUP`v**vEq,A0vĉrL˙DF32qz=D&!m8Ok83XC"Gfܵ[n?>I&v@B..g^`pr#/250;Y9nuB9O\d=ɧr3 y?# \.&IkA(RQQDBsA4G6 e2$cQ`NkL'X}7xze~9vrWuzdt?9 /_Ft6CQ$("$qij(p8D$$U69EZ'cd{B$CÔR4v€Lal:*4&|0u_6UIeҤ4S3 , 2S+ EMcSO%4lxto;!nfM,)4mB9&+RƐ Q.-1C\eY`if0U ITnѴ 3$ABFw[$CT9$d&HzP(`2iSdA=T)\.KT"LX@uյu =lg~n %I|b׮>ΈXR4T>G|a9>2A@1i*SurfZ'&!A34c9 ,[T 90bHߣ^0r`<c)sL/PոēLNIgQph1rlZ>bsw ?)tr?ٿ&jڼ&I*pL.&H"H{{!Q]XZ<'g)#62 C.\̏ ~ G:#,"_fP(OE:SD4 LBr w B Dt|4 h$$ jж!I(8}l9lj3KܽJg7 $XGE:M_' qy>(!Ā 05=Auj9@dk}MVFl=hP-p#j K'O"r^F (J mr2%hEKLfN\@M02/*o=0b' :{OZЈ"#!/ PqgjwR cFdYCU lHlZن0 6 sX9} Mөէ(T+Di]EP ?& @A.\I2,q.GM&D6#xDAOG)/3W\_R֊ĉHBVQn޻~˭;i/l9B 4٤Z|6'su\q;!a@6 \PE IDATk5!B!JPR*G(1(iSit Ŕ9!"WǍ;oxb{!e3y)LJPȲD6! F֘ShymQHggcsK8u&hz$ƒX}FHz>vIV;x4#YeI!PgTxPY\X`wf.AY>쇹x*F!zs F6ͣvJ#("Zb.}'hp8@W%G brp!"1t$Zz-/^_$?Kt|n޻NZ<tCŲƐHfj!OZh+PLv9u V[}3_"NV헿 <0Uh" #N>T}YUX_bbNg0u<)&_H+1ckHdyd@uR98H8lUQQlȡ?'LU&7ߺE؎O.#6YMdCn&~"Q~H& C2as1u o<z+g̳ A݅F̰K5$LTu(" "@Qu$Q@tM&$ADUkm LRzJ!wtZ sϳp;wP, Dgvyz[f0o9osaU?:>35G;ȪCd$] вI0"rH3q3g<kQ`!jTZHT+lka{q~K*u:h`vvFXcrv suc M-S瘟=`v:~"pG> |%}$1f8QgyI% AQB7 'd/^A1[7hR)fM; y$Ss!߾50̙(ff(<3 on/b $n^OZ6shF}ff=IDU4(" |DP$Af4a9%"8w_YR,eT' #z>SݗߠV6R$2 =cGCer^8 g~b>!ÛTKN( W..Csizc Zj9M{(BGAh8uIMlƱm IID6%N-}wQNDsTS,Ν[7 BYQ y#FI*\r[tBʣǛ^@EXce%J I"&05UǞ(RZid40Qq b?u5+XZ>A:"6x4_\]lsTEX-ri&f=?h 1"B_4p}8MIQv-n]J2 VLVrT&*Ue2Q'\-ݽz (B@$ \\94nDT QTXbVlZH,ZyS'Oi8JuC 9aUUPUbDV!jXXW͕'>˗xpA LMMFq]7h%a*E%X$Q!rթ$mo}X0Q|+Hb# mt%8 n8?/8y }gUfiۤ KKܹ}C=Htn,CGeL<n2sy4\7>m:a*L8 Ek4@=LD$+ 1Q(fQ۶IEO(&nno 6m32emK=COZh*.g\_GVB?DRe䌉1&vL64z2v1 _ x1k[kns5HQEՑ%DAgf($IBV _n]ƣ>uF>cS- ԧj,/#b ]Sd&x خG IIg{d3d8 IQ=;L.bfZېDG7E Hxa[^A3ym6 H z`aH@% v.hH)Dcw,آ2'$>#CJTj*IH4=t!L=tAO#H)z[Hb)(BTlDGkÐ țvlJF(wPTF@qp7oBSر[|zE~@:e898&ZGqw>9}#{k8Na Q "!BRT/^[˜>(LG4Mn^ jUEARUL3 N6E%O#'a]&6B$+ <Bk4@bzR,_ŋQir<ӟLvm^~/c9oc>6PM>C2nA~H*#" A"*[ykAJgav M7J̠ed `l6UJ4k˜j;nsfo찿Eo8¶|O3e2S>~˗]GB'/! F;MF>*2I)GA&affMyJ,*~޽#YƳ# YUq8ɉ Ss=cgL_o%o߸C.7EHG>9ɮ<1ҕvO_ NY`uFH(F18C6'F.?/?cv+8l1 Yd )0K";.rՇwI}. xuELR)t{\|qtD;(nwRw#r4>!&b ~A4vCa;.tx/^ׁ޷s\N{nf7fS$,ـ z<` <53lIiQᲛ}s<9U{W{~1 O^Z%& ,Ӷ{yϳAC'L\qn,JVgu}z'ܥhMj N@-HE I$IfjjTHp1FO8;!I o6g:׮\eyyaHŌ$ $ I#ڝ6quYӉU3) DHpIW1YL#K_5?iֿ֚#H˳ lq:q27QDftug'd rϣ*dE^YXb<`0D #Lg;/(NÏgvBKrJ@a#X3%XE,Z6]G,_2NO$cL3Ӄ=f 6ӳ3(jݪ1赉RTɨbGd2ESUQ4U(dL SeQ4u!F8#K(Gqieыef.ܸ١?D#0"5 bufq4ܹu/q|xBަi-Vn;QR4c@QQ Q j6O=AS5 e|+W_Oq9^xxTfx~HPU ƾ7FI3-̳C$,/i:^baU,,r$J]lʌ?n_Ӡ~wlFݝfd+9~K/;ﲺD`euCX:BvFQ4G&( FޤRF1{mOZ+wLްL!%ϰ__*39%o}Fz;|~@k|]9Fn ӓ&\EafH"$H1.\߁LVdr:֔i2ݏ£'1^; TE"%!I]dUs=4yU/I}^7namdz\zC,!?2U`Lb(N$ıC؃ `DQ"(9.^f4et{H.DzxWyI|)q(=FT"IdyNt;}|"NdyFvuFY>GOY_ayi/;15ӥo:1v'UU#$T%&KFR g> LJ;.r'OiˋI>\*aLMqI{0E$Q`vLȐ:cdE')"I2=3Mb:m$ Hry A|']* C]Mq2Y} )a8Af}kG* v$@^öǬor9iZN4(C 8T)'ȒL>7GT0tШ霒13mlg%^Df)#!K#N|blzEWyyGyDūI 7ir©a K}0EUTUҨ8;;?qtrpk)o}"?9YYYŴt<^2"z eD)!Ja Zbe>1hBĩG H̽O>% 'g$Q@>e:a)sܺvIvlr鲾*"ӨJd󌆓 & KE?ӴV'_g Zt].]K ϟ>+d |xpr!-|4ZȪg8(LMSpû|GÏݻ\ߺBݹxC (!)I"ʻo9s %٥izv7nQL3)sB<p- b~neRQZ%ֈbN;r RiTk8.kn։?b 4H`HaYh,KȒu~g< I L(mx䲸0/Ef9:uzg=@%DB|nݾ3#JqKKK@L.o/ڍ?aw9g< XvwIŅ%0fnfW*:ǧF!#!yUW?$IeH h(7Qj$>q`G|.o_@Bv\L+w_X(d3EDyȲNPd^N_;i/iK>;{\x7^\})NMUiuzHH2V(g4vT X\\onЙtEG>{}4b8p/K'/%%$A@ sm ?';UG^1Cyv?(DO"C oȒoƯv/!WR/MpF#>1N+yo3=]Dv:8# f&O 8.]&7 IDATYT`8r9:<&C8n3:㧏xyG*I|37;ͷW^L8=JY4apj(r%R%( v~4)LI1j!yFcȚ&е],3O2j.?3ʬ,bľȕ7iuZ(ˆ`! *ycz>fm &$F] BQBDH(*,$iD1 -:}1_xDCl_:JAxie~g1koq|\?pXY[a`Y_]ciq(4lbuy!s||lmo1r8j#"Ab`Ð$IEQ2,/.Qot;(BĤ-|U~mʕ))f{} l`4Z-X"ݮ=@C`*!Noʲܻ3€{G$Hef_E~o2V>$BB(L$OQYNNhuds)g(泼C/QD>#R..>(QL|Kk (IS!Q,rO'hHJÇ?%JBΟ?Э˅9$=vR$ }r #bCFD!MR qQ1#&RRd+12+B z'MXXffa?TRx7Fcvvc~o ?P4r˷eT=xLb~"YYlpT%k/n"I">$C,wRL>Ko&1͘?ɄDtYeR"_/[x~Gk7/b;!a5M37h# ! "LCCKĉm#)ÑH,Iڬ *Vޠլ1'<|ˏ>e Ի-r){]{~Nc&Ñ(BC%0GHHY#+*lg8&f=2h{;]\$YGJ!B Uiɚ_Ce5 $ RBqmT9%]:>x_6f7‹)5N"2. ,m#=8Vo1rdI bt(H $P0y$Ya4v0ݘӡ*2.lrΟ_g~nF?XYȪ|H坯"ﰼ '/=7` 4{)+|\ looЬ70Ԅl1CH&IDFc U?Dž`̽GQ$G/xSv9mlP*h7,/O>zHG;8#D3JBURDY CL(UT/cX9BIU:]n\LeyU MT*2aў I2fM-\0e Roձ6 Ql|w%> -l4J9Off+lnoquBZ!-"9>{8h&գS{A I0DW&m4Ϊtuwh5(f2!"w8::쬆$hIF@6gQ!>a3yq$)ȊILIWq*+ˋ JTffAϘ4ZMxfjrptJ';wi(P?m0pl\?2)M|gOQJiR"gsnc^w!JmÐ=cc(ZE@QHD.Wbzzkom(.LJRVc\ k Tg#U#I*)NO}YD, CevG0m8} ! |3 & |? @ޘ+ {?!xzQS=tѨ\ --1 }n\ |̬G.QR*ӗR::q"1V>nj%^C2MyvvykWbmmMi'TwS)Oj4 C&NCWo_m{)vOzn~}6YQ^S }DUG&dqamflTMQ?NJGb@Y$W,i @G$1(IJȒBƴp'1n\Ce.#?[t!\pz]',,̒z.}WH唂Ud*>$89kzGܸM3V;U? kUf~K4snq?ٳdUVo>pj ȢS˴*Ja~hOf 5BSC]VɕZq0@Ut*Ӝ4L<,O#Z!\,+C^uAɈJ NX][&S0G/(:VVb{{skNr,d (EQ%97YQ%DLOo A $^.Q.dIHHV9;=j(@h+g4~w:I'1\pNk@{0=SBR4RA4r~Bee=vwĝw?LPmuu$I0Mnܺɥ+{xQMQ Y׉CngT1O˔Y\`}ss! QNPI "H#dA42Ąa(ȢAǨjAL [Ո0N)*Ȋb(AL(^ľOY) FN:76mTD`<* .bk\ADL3'\zU>Svjԫ-VV&᎐e0tHQJHXFt(bpaseZUNu"6S"$"4%eq= C8`az(JhwD1DI@|UPTFI g3\NEXHP5 ""#wCvw>ȗ<|ϵ)XY3;Av>.Q܀r ҳ)GUܑKRYޣ=TB7$c{DPF$/0=YY]$|v^;TV9!g℞/6qTA$L I lZmDV4;y=(IhZq<$$q|Ȣ i #^tzAYc8!HUQ0 E(Lei9u"I2JSkudY DFtUTEX[co~OXgy>aMT\ii<~̛$xϞ`YG2{#Z( ""#@q  n߫-(s T5x\3;H1K $qD3ik 4R b4t'>.YGUk1шhLƨRgLprv"H1"fI4}]MLS;m1UX]GSXdksJI - b7-jTreh &.OT.GO+yxd#MdQbea{.U'g>!WnޡRY@UNO8UBEU48F&t*((,H@I D$ Ą^=L&pbj:wn\uv?GQg62L..&ph ! C<~|$Hhh,Oʗ4*sT=l'>~v ql\:=d0 mTEet8M<4I3W MBIhZ\tՕ-jMC42x[[[.a@RVV LTU"rek> R QC ["']1 /-(%7ظN!_,-/cڝJeiKU= N\QpH(*H(h䭓HAHw[Eq#!$ #+&%1qƯ27I!r>#M]VY[^as$I"IZ3MIR2tz fXXXYSvwv4:t!Y_]CPb27xtjȍ{1353(K$21UȠ!o96(TX\]hĜ__K_|_Wz:+<>шTU0y\!"^ x,dE&C(DUtZ6,|?"/ae3d,DQ"fyyWgnHTf̲B&<@#k' &R0UNuVďi7]NOX?.nS.Dcnf*;'dsyƎH p:{ß|«o|Y4oGr\nE4C@PH҄׬/0;e`l^z6n3gqs8ʟ?7^nsMYvvk8ΐsLHERP$OIQAHE$QAHI$0 &aA M&!R +#ŒEf< N8)X#MOTQd0'gIFIDR:NN:2a") ;<}jhԑɼ&_^,+RL$q뜞1~uyeܢ/M ce ci_,`dUOը ض.qh 2n!)*J GC Vl%203&"$ K:$ Hp1rJh .n'BA2|X8lY]ja,ҵ^q|k7)SQ)lTu6ӡ vry2o{vzHTAL4!#QpoO+_y]q]>j4L|%cb ƣ2q9W!}o1׫yqxPG3$n޸IDIhvD!I0#DQA<vUɣ:ceLöC$qQQL&c1  ܾu\diyb)KIq4DT)2 A$ ]+e8 i֫$$?`STEVፇ4M0f4vgX _>Gd!L q,$i+wY9:pM?|U(05SqH٬G|@Uc^^׍C?eAJə~ CW<("#K2q4嗏t|}vDsDܒq *b^TXTL$";CJYaߡ =~2pl.\BRgZY=y@DQ([ZOy15]hpMsR 2c/ċF|٧(G'UH<_twCb7勧֭%!bU׿d Id pAF!!"""I#wihȲ(IkXfئ vM_o}m-WQ1,8BID^>yLPuR,&#ϧVۣ}3nS=pcqH€8 ul´ bc*H qfqL)N4g@4|yvvq;8h `"@dqi4'UNwQSdRy x7{PȪN= ˜XLd5gϓϕg3wy?ӿG\8$!!pxB!|kQ ov? {Op.u~Ѩo!!gc acH bea bOtZH KEdM#L#nJ}Ǐy9! w>-I2t!iCL"Fd)(S5rAN7iK: `֗ ;w@d E ֙mtdiJb<&clucu}8$AiAS\&B$Y"b8EJrћ/``Z9V/L&6V!$fuu8Tܽ{UQTN{3;?:~S*v oGvwTkqOK7\|J*EaGD dxn($Ќw}mw)n'>C5.R4/czDڬ\2-rZ}`< \yJS., Y2IG44Y"SIFL< ,H ǿV%uH*R$KY(ɩ8}&OJ9]LBoEk6mNϐ$cF.G,se}C4Qy@RLE& QmVǿfT z d"Y"f v_WIhch(M!IXg2e1 D;BHSFIP_4 duʦMHӔhȲ@hbVt:-LNH]ב%$Y:>n΃/;o?"r}*?AUDH7N9*3:gM?DW&^B <S2MQdn,P$]GU&!׉BA Hdd$BFL£w.^]ӌBl޸uI?ir;Dqxr!K&LL(JZ-1W6|qJW $?AbjxnLx)8a%;3aH*;.^LɤHN2z" h(xp8Ps7/M MD)IvP IQ40^cdYmI&SƲrzSв8(j4b$MT'2rFG),nx5ˏ?U#qqم fh8/Hc$bo:at,(2QJ4ZK}f9&qLProm{D2uv =,b~~ES*UjsHifwȄE$޸uIјg/޷'/b %t 3ss?$ˠP9:CuRUD㘄tZO@‰?M}D* +K6sSv< T0-Xh <q89;CșY 2a`4dIDc ]E!a b :qbcVׯ^A&OE2!nAsFUnA@9KĒi{D*DI@QY(ȢD$83}/H^K1(""ƸODL6")+ W]! Dfjug Ĭ_F+O4ZYŒ3+9JzBdgXF֨-p|tJ*Q($Cq}D R#IH8dS%3$U;)jNBdd*1"uFT =F."K*"2oܼ-N,X%.aT vI{|J=WA"PeZl{weVR0gEBD}OeNq@u77"kkhL]զ}_iJmVWQL~Lf*)q q|`ea͍MS, oDϸg O_b8L9=>i&b0HHg4R$N'ضSBE8%M $\nZM\ȣH=3:sniP!~IITR,ŧ`o0D UR 5$ MB%#TE&"D@$24U"IcF!㒄e 7Yy-ʅI$!A"A2LbR9W!q&.i;{/#:_=|?g$iֵ 4F7$"!1n7=6geI,*:Ee".z.{"(:΄+&c=٦Ramyem+^Ƭqt&[WݑǏ zo;+\ڸHEBii+hǨFcƣ6Ii\X_W Q8>9EXRu 2p Q0xԗgyyth; f4lG)K˜n6}k,-1˜n',8D5"f/JggD$M2)! R2Q̂A&B:?9^-Q0sALC$UXaf1 c$%%2loqnp" (a}eyW/x>G{7N)ѣL$ǥ E}Ͻ#YYG ˔5VX[AOٲqDH̋hhN%1epN$`hJE฼wi6D 1tHKWi 8=lpqso(+HJ3 'nFM%d]/'UӐuJ$"Q!D`He'qFg,/RV[ڢ;|D!q|`uur>ͯ UA2xyBDxJ YSA!MUU)ʬ.-47OuvZB8CIDp1zgĄZ|$i(`c" :CQ.nHhH︄A$&qR(UY]FLF>VDєmvy-2VH Mc$!L""R:6Vig,//{/)*on]d<|%!3 ly5rfdV\"%+U|dBF 쟴xl~ d dI`XfV8ql Ie4M%~4p!ij2pLVBEш kܸ2/md@g茮m GU5RRBAdlۘ)H$QB(bH0Lq u?DQ9c}am(AXu >&g\(,\LVbsk0s:W7WiEQe2i$)N7 0ɐ).S$%KS4#SDI҄b"7ods"'T-=?em} ALY\\sqxi olA RYgjR4,}gEFHK81X^YKbz3g!d$q$DsEDn((Ay8>敿Y굲7sfPQe,<(IM Qd5HbF,q>^trRAT4"@dQ+U9zvďd_󘕹{ 9!ղm|oa>9?믳|gs.i*F1]5,MA$Da< aRVH]1$ϻozgP-ejvZ+WQWO7O/VuN1W]OyY4 &*s2G{'3QBģxa@M/IS0|'NR$G"Ҕ((Mj@ "JZj7oߠb(Y9|o`0"&L<߾Lm8)xG^9c#ǧP3[_}F%wB*rJ,F#fuEiĞKdG> 0w0sf~d &þBFx]x2A$0!jgԫX )(%&'7j/`䴍iM-ݻÏ~~ z ZR2 G>qRZ.d Rzg<}0,I^?8f[ A0Bg2 ]L bdQERN;,.(UdZ1vƱ#κTDqjUK1Adf@RCSUFd8] 9ZEŵښXRVvt.6⌇,/pq"s tC?U%Nr";{?|m,$Nd\̳p1q5Q I4:aUKL'(]f*e tMƶ'SY1㌱ t bQHj4 p)wFL)qltE}5gf1)l]4WpURvOٟe \h̭.f! 1{/xr#{**YR/i14EY%IRAEP鮚8$Q,M_cl{*fzTԉ_J)(!E}T"d#ˡQ11q&`'\X]ZbnԊ- ]GS5^|fAO9ߡ2cﱼㄤ YlO?>k\\eΡ5D7stvƨF C$?!$h8xhat: P(M&$IiwxKĤ@GLlL dDHQsyNg!e'.K+m\*GZgmtd]3  17z*Qϩ4~0YFgSÄjMӦGH"?E%\d8P$dz 8IP58NQYU}JN")dg%Ej uDUX`ZENpϓuז?8$%4tp]g*|7 94XZX͋5X8Jzu]sa9kjwXZXUS&}T%x6s <}ݧ|{aey$sMVgk<{$u&|,HӔ8E)T!!CtB?B 2HEsyMq +LSϮ{nh؛xc4tQT~: PN(WjQJӧV?uP 2ɴSN2^`<)29#O'Xyj~cpݩa )AIԱ?xÀDT IDATyDU"2R4MM)|,.o,1ŝ_1;7Džwϙ]\|*G{LKM 2 ,gcwx>_{[~_K\AǞxv40sTIfh@ Jyf֗y!f$$_ůe(DUuUA%0Da P $I]8*jE ܀"3<ʵkrxx;wkVUft:@l#[x1l2ܨCRfhŷTK,"2ڭ>8bX=@7u9<:%췟OkW.Liă,-o&iɲi플 p$ #L lH|oxBt.sˋfvju ?Jnj ɐF/ H88<;㧠Z%}$3gh3[1q$& 1)ac**95Ǹ7a7CUU.l^Z(yYm9=;,#4ďrza`Y{.јeG MQX]]NOi7_?K_SyɌ&c&XZuŋdE2=~`Vf$zpgExs3ڭYl`LB?$C 4/lwDq H0ӻ43rxK!W$! "Q62+ss|[OK}fD0&$^{79o4)*L1| h͗Y./_nf$YǏY[$\ڼ.1-LvM{i*|#Wpv`ieô8:=`aeNE萝S"KQIB^h(|[ol9G4 ._b4h@Qt/I298˗sxѾ</?ߡZ"SvTkEjM&OqBdHb63 .]Ʋ O=>q8(#BUȲ>'1)j*(HArBXD^ZwBS-Ah%<ۣ?Rbz+W ;эVÕ5ON[ƒ_qn$IHMsA$%1MeCYEEU&K" b*#I@ f j ȈIX\c och•K ,.sa{z*) 3 QIc27/#!]ڵM~ ]oݺo?#W$xb\&d+W)+TkEQi0j99>CTU#JEƲ,2ĦRl;/0sgL =n]T(2ycJ C7g' =d Κ,-.F";A |g~*.Sw@k UNx1_=G&įT84u:!*cJ2J gsx|\$L{8cMh'蒁7 YSbf =YLӤ6[A D%EZYk/cw$YFTbZƙ <{jFCkGddA$K~~(aq'O'w=ʕ{;K"B LFH0 %)$byXq=jd;_{U2R$ ̜!JE+O\E>Cu ȥi;Sc~7ƍ׸zYZgyqHo;Z]dU6.^c0p?h!qam:nӗO!<$Qfk2Ϟ=Yy:1,$tYhcn\lmvwbAIb(y9/_leLy.Qu $ Y3˻,,-7Lj2sUQUG Ig*dIʟ_s|q _?xR )"S5bj:_'w~@J)g:.:LFcE@R6XXau} i4Nh7,Y4._FpqzuAAk@:OM~sT%N SٳdB̿+48i i_~ă/XXY//9Fx0lPmwCB(QHEKlӟ}̵Tf}mT"?&Kut=C}̗?#H{қ{U];`0ݒV]I҅Y:(xPЁ.%`tw.o7S!yV8=9#pR"NVL]P.R~8:>F%^}}ll78}I(I&I33BvLax:'?d~{1/09wo{ocϰ|AY_B.UnpWBU$22tU?nOO1n8==%K25YtFenrcYIs07kw\q|rU, Gd?`uuMRt lAUUe~nO~1K$HaߢR,RϰO_[nq|(KDb ~j7tTYavzIgR4[=qvVdugXR(\:*`j$± Hʠ?D:LMώ`Ved3rIW#Rf52 }Uj:zT CGJe\b&c<'pe*SsX!H稷:xa@oاR-j"kK+//dRl F^}5jvAkT5fAFBvvټvo}}~w/XCyp{ϟ6" 2OGXY_g0(} IC|f#I&'=}yyy/\ʕ/2Xߡq[\Bg&~NL6N6%I"s.NN}d|*ph"qQ#i*13ruc8xY(nֱmrIaǽ{D\rlV,452=5 +OLu$n(9a0733 GWT..ΈFu"K$9:ܧV`2\n"pxt;M!J5 ݤP!k4 |u?.lx)",%<;CDܤsuzz -~DiI$,%Iq4Cd"nRTj& =u+rk[kWzH$@<|gߧX۸KxXb燧4?mo}LON20E&µ|bi]|}B*÷&d0 nI BOsrv1!S315;,E[Xfn~w᝝瘦 LͤAC*;[Ǥ3qfg&;xirGcMhuVe&A?anAXY]gnf Y3.xD5ĒhvS ʨ+Ȓ)4Zu0(ʰ? K8;JgiԫFrI`,7KR.^p^9G3Un $Af,?C6ɤcqFF]gy}@ CJ(l?a8񃀨E U67s~v^@u=q}v֋t#xkMgdW(("N 2 ɯl1߿MDT9/]wޡרq~l/>q^|ɿOcYC$ 5' +glm=dhrY:@TQ+7$3LߜCq{;̮\s}hh&+( Ā)su3n_[8k&Vnf W)`R邱Lܼv&9BI!ao%nxT"tHzEI% &Pxx!Z8==%OymԸ(8>xePS %/v(& (6"o~UU9==%$&g&P5?1 M}kb@*)Iöm~]7q}ŗ$$QsCd%@\`.9` d2tͤX16rh2o;hBn,$xORcy N3ZNU$5 !LXqYBʥ:՝(yaccnSN]݀M./\j ހ9`mukW6;@p5ujRTZ.ӫY7@4\+`؎Z(rl&3iwjoa鴚xeY.BXB颂ggl^@WMZ]/diiu.M,%\ۣQ,I*2]qCD#kQ@/5:o8~ ĤXPǹrN&$Rq@,0bؾG$-0 PrtȝVH"dafQp\l2߿pKfţ\;;; 7#Χ)6C663:>!$1LSSF\ohZe6f_~S,tvK"G( ]]b{9:ir5<=&ze [-&1VOH36,8>˷?Kk]DI!N&]coZPwt{TU6Vo7ok7988ᓗv=z- hs\X>B(P:=mUv[HX:6;,3dfzڭ:n͵ ⌅y$Aŋmz=D9U87?)S3bhR.չs ]aFB@#rw2>=tJCIe~~ MTdfw'{|Bz)+ErkˈW 9jrgkHL]{P-N] _9;qu[C/_rvqNg ;])CU~࣪"lTX*I*W@V DU%Jİ܀x4J"GR y DQ?P5EP$AVV \zeinfbrL:al=ްD^e Hb":v ID" JX@pIȕ18-] ƍsc& i:v U2M"O=0#1zCA38(ck,S,Tz%\>0GG:f,=ghF:$Y 34-  k+Lsv~FV#7O5;!T^&/ IDATapcoSw+mfN[^'_H*^X4J&&n$0UcgI%LsqrFDZLt:,+[t6b('dV'2\13!tjAvU/3?9'Y*vH@W%^<~Ir@C!iH41NgcNY7(dO;ԫ%"7xk|9O*cӅ ^@n,Xqؼvx (2./1<_\HghwTkM6fnN=ov""l|6A:  " \ݼ+_o;_}M֢T.q|tI$ hILCwm ]%bP8SS˔5z3MǑW[vA-]I4CY7o/D1tl'4M(l?:naGX=B^eb&f\6}ȼxM%?^+2Z È 7ZymV."`DM{-~WnsrzK)$Z㰲~ ݈![Yɣ- _(_~??Pxi7oH'\grj7y+] cz,Gafx*Ǔ';ܿ=tI\~99>"I[$Ƕ}3$DsD8W7е8sp@ӡ0=5Fcӷ@"6sk!O?  #ڭ[Țp`c Z α}QӨ5= ]3Y[4* @DTX)$h4&GLJ7LlsXDaS3\Vz Qb!/Yc~ ?3o`~eG }Jc"@Mu /7_0 tkMFHQo 'Q4qC٧_639nJ*`z~ի 6O=&qlYqo{p)NIH2TGh8f<@$m}xt]~ ?kwFu&''M`F#XfFw^X*E5{{a#o% }1Dͫ\+h:BѨ*JLJ't-_54C75ꗟ)Q(>>KKLNIdHx/_.+kB s{]l˧Rj29aqnVC1zDM}Rfn%c[{ݯD&u@}|aݗ#d<(K4;%~٧mP'PQh=lG:GM^ݼO~ DUb4kUx}6֩/g@!?FghUF"\e׵A *JH5Hcn{GoWw'hryΏukyi5;/?)ٱ ]?^L呤iENXg|h:yƯ%Fej"%"cN`S4 ŀro<١ѫ  B A=x&Ej,g9Tj2VWߠ#ܦXo215Ab!a""2vӬwєz^\Q$8(p8 @!.+ (1#:oгTjMDMTpQPL<•"jl?}>oe'Ϟ!!ToMBNĩ\8xˋ8lCdanZ|R9?;&]@ H~uϞp~qN*m;|SQdEH$R3=9tXTY? gSBa4c.N$0=7(qrrtJUg? ry z.d~aI XXݠTn"'T*$Q֖HI&(N{`fL;hc̈9~%CB<{dt6iB<=dQ*?)SSx/wvBAp\?NL~,OT*{]rF"#q 2LOIi5Kpr|-Qn)^uGIL& <{Mu,CF/qtzȊH mE}$l6.D{h!v7[J%j:㠪 H)^FN岈JȆϩ(LD7 v ]u/D99̭[ۏ6.F;j8G H(H]f t 'Hͭs^l?ID o~o%3,y?q`="p,+eLTE , *vN``yds\].H  3}v 10tfDQmt&Y ]Y@X"qU8aH6{(ω&l#vwYYAwD )֖f9:8` Qֱx՛#<;S3s,/-:!E"2K rclm=T*G Z>Lj(Wu@"M8FYP\DE`iyd:GѦQ177$ #|NN|%ڭ.nkč(4 O8<9#t}$EryImЍpdyw{,_r|yD23 moJ%4[M$AFWUnQȊJ/v]YD,BRn*e311O^fp"FC&~( +B$zo54NPVV8:>XQV*G&Ƨ~JS.7&X=DDR k7gܺuUr~Y'ܹv(xG<>]I(KKp!q*~EZŒDs. &)LM)ɡx~ӃbD$it.C4.3{/OH$cCbCTu$4_]!Hx +kllݯ~4 ~bjpyyƷ.qG?L#(naFhFiӌp||Hno]cmmNOˆ j|t:o>Iyi?յ NO.G a*xAUC Cq<7@U MB5} MSq$PTlqu#*NeS7+pxxye] aO%ظF'TL޽1Az4[U:n vQ Uh4jDbi='gl% 5BCpDÀ9^[/.gYQjXVM }dI@Td7ݢo!*_Ϸi6躌eR)* DiZ\ -fg ֠ɕ&3|JӅ0CA0(yH*IqajvNΊ/+pzxG.82G !Z_CO.[C"Zȵkk]uC,;Ĉ@QT>ɣ/>,݁ dg8mcJ h4ȢmAJ`Q/@3ML#m1 *Mp<~aIDVУ:`=2;ۻ뷑%zXE:k4UQRIbehgh{Zt@:j曯0; c39w><:R1!-! ""I>i?~4fjV!IpodQZIHh٩)|%Wwt[_|ykhMiY6aࡩ"9le 3ԛ>y֖zxINQ5iD2jDX^XݨStN4w|Bc HMNxfFcN!Q% r^M0q}4?gff? xCK$`D" LO@t8:>0͑rttaDPT X\o8=8Ȳ\Sq^$QM;߷04!H",%n3 4 ix0B #9:~09(R) a!T$;TZCc]Z‴ eư6= Z?1"pzT'xuݼA,XBU >ۡX,1B:j2?`P9s^׳x4۷_Cql67ܾy *TժH$" gjaxz`nu5bFAr/>^k(/_Xu&\ޠ c&bYʥS<DƲl, dM#C!Ty.ߠRih4mC;}=G\{VO:cs:JKTPw)A:8^ 7oJ|,8?C" Ȓ#¼&3p( D>e";.4mO`Ad]/C @l[MXP=qu޿KrmUuA 9oH !^Aif#%/p|vӓyNwxp>϶#^AtA PMmdtFMwCv:OKt;1[Ȳ0>G\:D#QVV?ߩHZ?v0#&ht"*DY6n"X j3zxm|吞^γ'&LL"H.CJ3lu@"udQEedEdƲDq$OT>OkkL2{{srmt:]D%+!\^^R<7JGDInU  CFY9Ha,phtټyE^ZBQ00S^~ñ;koxl?=v%o;ϻ$"vq. 0Fe$(*^q"*=K!`u;Ky=EFFFh4Zܻry ֭7]dgko|M١P*C*;tZ-Ξ=taH#uHtfEP9XbscBS J\|01=!۷9s_+nĔ( u'&~a8mI''XXEJ+:a` fDA0&BQHbq^\:Ã}ǥ&8 IDAT.L?px'fdIgkg݃}֨(ߍIb4[<}k.1srs]0^?Y a!AӲ #J2©'e5VDTYSb}"/wl!<25>J'*y z]V C;_%GS4Xbc}HRV%RY1qLT|ovlYD4 1{&Bl6ǿ-އLO2zC!_%A@E,JsVVĘɉ1C NbxaaEQhcIbrr4891ƹ3Q5CRebl*s'ns";?PqiΝ?Ma|da2=ӁTh!(`Z5rH6)I" ]$ryjCCȪiZi}oP'Av#ICafjn0\t'KOIez(r)N/bye)W*t=dHTeeyA# l0 vveu?Db' azrnOT\XfgO?;_~N@U]&I"RRDEc2q&yx[ע\0}@-t13\tŴgC6֗P3"f <##lW!"'fgYZNeskK/g >kkDm "u?z2l[9>h -HzB{+ jYT-믿E\`b(cg$^# ab;qdsTYC|'M!\al,abYMqDܻ-G+E(%ET=? {FB!K.ecm O~ }UFS5R$CDޠT )(Zm mr"8 b{YS)$$q<e\6;ۛK$a|dv7Y[^hr%Ξ=MvPz-/ BP8Mp98Z6dgq{@I,ĉHR'ㄣ}wxאFY۵7'D$bׯ_ji?{jJȽ_rY:Sȕhw:\|l6N!v`r):&fq>NUUˆ-VWyΝ#"Z& y<[^"M}j!QVW"exK7S)i܀b@T_Pl>G6AQEzF~>q1i:jIq}8):"" !I~ 2)"ll.O6_s~븁G* ؾO\fE2*c'SJ|}!!=::zVCi#l6v&<̮qNbLeI +"G%ff&Y~M`_Jm'+Glli:$i"$ C*c>u -Շ""d Y"ebw}"?Fe7wȨ:D'8/.^$clsr =%cX&'D& =G*A6G- $wlt]֫S3}2< q(0.[[{sY7-$N3 ^ƍWle0F f4,&Gѳ:HfY0]Zcr,ϣiE$>/gfzȒ='LRΜ:1y"/P-Vi6MZ>}C",(z&˷ p<$Gllp"?͗9uf(8<܇Te,O`hN)vIh9H؞KX$-q#J"b A D ҷmR@@E5C" bI*# '9< l%$ڵƃ{# MD y<%! NIFRLm nѷ] $a`H~`6I2Per9X@4dYMz]s\t`|L)/Gc$1%<% Gr QHyW_ߥyܡ/gu|彷Ç( QR08w4j8Mv@xIsdI&p=<} "l˶g8}zwAHr gz-#~Zi t;{(tZDŽA_?``! P>cdr擯ƶMzr677Q{ܸ #`o^CGۼ+EXҷL:6k!2F^XoZLM2<\ic{ yϑIBݤ6Rc.<[t:-M‰)TIktq3+Uj'IҘkzLczhqD2aBL6/ VR||OȪ")^g14S4hb6a4ȑdIF cӜW3F&Lb. {!{[ġ=(rxnvP.($iLkD!~%g(HLE@&(Nƀ@ D@g/رK;z6PՕ%< adFc@2m'i"++KC~6SPe|jё1֩V+؎ ܼv^(tm2 q6:ff(F\|Z6ӳS8AH,JWɧ_qNV'Xgw-ڭ4mG,o^p2K+9^C$Q38>fe92ZNHϐD^} H9m:u\'$Wͥ=PdX/)>R IhvCk$ YH$]**b'Q5+βO"WXX<,7Lx|}# c "%X@i4pPdDd-G*JtUO"fv kkDfȜ>w)V3:!p_ML$8Peu0́X%NRTE#RRDDE!I4F$̾-X$@F?RpzaNG34,?{Da6xXV2Id >Yx1 M(BH|%I8AL9gzz~brjf A2~C,GIS\lnl"% $#I"Bw}B_~}}~o9l/~k^㕫a&\~mrFel{>3CcfO?x*v{pSDQ$R*CCDQ4w=@QU("#F'j4Ĕ3[l Fmt˗f897[ԆU- ^8;wrVhw 159l FC/i{{T*tcC׿N- /{{qt&h (Qi ڳ(i$HNe5'?͍eVW)֪ ?9Jnh>sѷ,.Bˌ0Qr}\F2 *yDi yR=9npbz 2xER,V 9zE*$P882M$I&Q'hH(~#4Y$<%ZX$MqVI( HH"c$>W, g*qo!1]TDI͑iw # QT!ϑD fUmmprfny9kϗ&ϝwߡX.S뻟bZM 0A,Qu A jgO]Tbc}4(rLUv+ ;$u] y)߯{or>+ "ܺvATq}b@G=i>]fgU=W`k!Kcg{6y]'BvA)DR!C2YlFDzz?&c$n~ o0;m141+?'kX[Y! |<.vAHE'[(@(0=;"xB\b-% @W|*_ܻz)))dH}Sgswll2MG,=LFm,abB\mРjgյ @}󉙞#Qpq%$Qekg7YZ^0,$IDevDL̉TIB@ @ IDATR(365Jew1M4VGDBfckLA,EFXQAu Bf9unM63t%8XvC.v (I$RepɨHHJX<s|C4F#cUȦ2Uo?gkka1Z-*2ɓD & I c81%=", =@$M3̟ﳽ9Kӡ5 "#aa9q<` l$C4%n"R y ^\*1'f1z}<|-S yΟ;7_?d}m(eAY3(POY@$pw}ju޻Ϲ?ÃGw\a4CU frf$:!J+;IPU~F0D APIE(B/?կ~8/|M!IRc|b^O|EW2$adT$czv -'b\r׍32< N'RL0:6""xnQȗʈ5Tb3cZ㝷dbl3Qpjo==wnfdtC>['#4]Et]s2 r$33Un4X0iH׋(Ƹm&&B|mr{+EOF*eER-X@ 4M>xVO~wgٿ3 ﳵϓǏ9yy-‰_|QѰ-kx˃G}YyxdYTDD?[E/>b"?%*|)$4yG?5Yb^\9}$b+.6rbj3OIMq_8"XvCO{&Kt&S3TE*Q 'u67z;d[/_嫨򠏶{bv :榹5_;/g_DI%a`EwGGj,rX6q"IpVX}lPevř,eiköitE6SS7 0123*H$ K4j/mm6>fGQ(@2x4g""{ d3yA"/ 8$t]#MR*"S(Hg"') WebtBd<]qw?`lz;<`wwzU`[6a %"I!*:R2 Μ9$Qsj,ӷ(UK4y$ z03=E7ɓÐ^LLdkȷ/~ʹI~G y)ae$x _~OؾC&A&W*g;MM p&O79c32;~w@5 >C)x+!7.:R!eeD%albn#N-Lpzqje =_uL(*kA1_$-Ͽ4DY"y$=""iK02:[} J 9<9LǘgDI۬aFR$LITAHAP ӵe۲;><@uUj#2Q#"{`,-JM(ISK8FosUDi8o.]o>h("lØDQuT +*Agd3Y>jEϜ%#½GwWE$ edĊxMH<}Mv!>뒐0Tɹ[$akY\|[fhǟwnY LMM"ӟ'*H 7X<3l ϞfLY~-;dy7W833Cw̉ lﱾdm`&%\\ 4O>Nw^_…}DaeE<Q)QT"?AWܹ-GR8$MAӋ$@TM\d]mM3  tcAR_xg(j Q( ׮_Ee>'')y #+wa9nIك?Pyp7%AT0M]5&$DFMi4*+ GH r' $2Y1ꃐ(HSw˷^a{?LI?UYз [,^;> $IJ>C!Ibz5|ss'ܹ֙K.R"P( NN4 i Kfppt=C xD;]n*r3rrnrǟ|Im»|=O>o ^{ YR]_טE._#Q\ ܼq=V>3'1m UXYz3y,ӥZauu]05q$5$07Ryv:yl.g_~39񂅚G%\f{wM2EQ\ba # >|ҳ%(vJFKDqBTQ<+2+jo@L)RFWDN!R" @ٍvMJ;]sNZzQu4+ɲ$ iJ8I#"b#Y9o/xXT8tQVX_ߠv`fz~{$ 51a.i@ )""S,(wdoc$ y8srru:#ݣ rlSCC$I;])HD$uyx"N>`)ss \x'z {C,os-&0ل໔o~MJ!qՄT ӈqffgƐL̠ezęllSSq%/vwqHNrfQN1+':A|wަR-S9 +'Y=y+g8r`^L"*e$M`!)rVqݴ(KȲQmQDa@'ı,hD&xmLg7uCHB ]E7rHPd$N,nY}!E4E Љ Ȩ%dM֨ G2l BEuPD() (oWNs/Eg3-ַ8s{C <^E dYEU}|?0&E"pGX]{Gl7 U?˩MUIS>+W.nUKd{t-鏆Mn;Ȋ$Ȉg5]Ո᠇, Ȳ[V2M E3SìHziQ3v2"3{I5RcgAH8Kr4E#}($b/|2Hm{$qD>g`:KKK|㽷X\EDMCEN,[E{G|W?_~1OݡAS5 $F!F 240 "/,/^vBH%\ϧ**WrI(@JDxCD@S̗! #?FU4RDfÛ,0t޽N^I4< " P. M7. b.Q{e4豵{Y)u٨qgkgpα!;UXX۷Q 1jĨc4MfR$t],+rtP'c!seF!AEWpY a + C3\v+#=8DSƫU=[4vGav>HD$TYõ}0& #EGtY"DY_膁(YZQ5 Q,l%lUS5 #与8.]FTRA;7n4-vvwy|4MC?W )*rXOO |YUz躆T*b?qm$!ôiDdt4tE)Jm7,-/x /V1s#z-;<~!~f)!]uA0r}{iEGq I)VN,z6ȩ:_~1ӓSwLT(Ej¨c:r rce? Y+p<"W]"NjGC[G"3ll0p^o~ϑ-7p8*s3 tڔd45z'0<\L=DL4E䓏ְ` ^r5|/䋛b-ıJ'=NfXu= @S5T!B|! b8BWtJ" *qG^ ,/C IcDU J#g(zYQ4BQsTgR5M0Muu\4)rAc4IP]lgxw{o 鶳HDDBBDaĤix G]>_9{ a Ic&DɫDy {~qK\|\d2hrE"7o~nqo jnv<>c#P(2eeDZ6ŝ;f9qNMQaDc8jsqDR@ /LVM}T5awsf1l5wx+,-Nh!SP):Π3LM_⋇~GDM!_0yrɩiqz!i*{.Szΐޠ4 'WQuzHȒH8 MS)DAm蚆$KDDAD Q<Ur*nݭM,qhY5:B 0hA6=T8EAGlh4bh;* أ^SSUVȶ9w '']q#~߰tj-Wc\:qj413|u+\fe4/g hH^Z T@UDasI7Jhi#w=0.2Q1! &1Q!"a&BM2t \C|C(R(i҉Uvv0 +Si9.R4Mz#|?UQ@3PtE 7I$1tzҫ,3<"L!WD%CףjY]Ya icY&Rh`h.H~ yMXȢ*3a6]Sp_tE do &[HAŃk|Wol2-DQD DH$\L1q<ESM4IB϶!j⅓\tq֞jvØj$ݳ.c"c;mzq( je>"icVć|kw?kOrz8 Ȳii@DƈB$*ˬɳK&m7AEff;Έv.j4&2\I$ sZs%ڽ(J$ܿ{;8)$F>Ȫʌ\'34&)Y1 lnd aXdcα)zB15QAެ393F"{N9Ü((x^rV̙S?>gةwtezu߃xse,+GV15=E$QBR'BS5DY6@$YL?F\7^񾄀\)xvRH!fx.g*9o24M\ߥ\LP$b߻yWH<Z0rG8R"^|>O9U}5vN"0=6N7_CW\~8u8H)K%?>36Vf0d`lE&N4EFE(|h0 #8^4$Q&4%AUz.(a=<$Q>٬0?ǷC 1qpyKp|J5Ǖnn'N]u; X6aocWk2$+%TMA3B._ I$9A\S(099}.~=ƪE_CQg/o~i6{ 䨌M!}MryTcVgZ坷#3/_n{o+!_x88m4Ʀ&ȗ 7ֈ\"y=TI$Ld"H$b ,@LBtŠZ3{H.R kkxߑШ9{m6*1y9}qe}6XKi=F!9#S<#YXs BW!fQe#>{ FNL7`qۻ>vMU8,R\ʝO \EQ@EBO$QAU $5 ߏ2gnBqfu$u{ٳ` S`9U'#NR+noE!up7rfN',.< L\-cZO^Zclbq1Z4I!vly=fnX,w`fh6X{S'1Qr̛y9V/>vCU撄x+Օbvq.E4'% , ܽ{fJZ-dUan~EUA"h̓{҄ɉ2KBQAT&g&x %ӢtMv^E0N z}E%Ϥ:1$Y4rG&(ȱcs: ln') "!:a"1圉$k׮211YX2I"#+&ϟ?e8裪"^( LD% K 3m4M%}3sY ,ɐ Pɓ5~_0 z]tU\*G) zvw)H dT^BdIًglkeo1^nlb&">`jEΤ'1^2yV(%DGhq"j(JySv;Da&$5(b8h4v{qi4$(N𣈷~Uxҙbn~ã}! -huP.9w)C)9d9nzuI(!8FERdEưLdUQ,yW]w;lmm11؎$VңBMWDU(f{k((MV[u%|{#ѿ}.e*m$YҢ>J42=;@@CH.j /,IuM$%CptA9|P-D8FkspbhGȲi&"IQ|ACJJ ,*{|K0r|t%͖'SE |8@`Q @Lj*)ĘA(N:n_<ο}qFi|f\%jL:C4ㄪF#(u= C4$d05sݸ"ȸv=dEEvD$Igyy eA]MsT&9hu+W8ZuGmWY>ȭr =!LU+q Ã-:Kׯ_g2|T*UeEd0&N!dMCVELK7hlm:ca4Á^KڍKj[LLۗ S|QYZ:pF$c Q"J#$lb>$4a"">$ej^B&sqpˏX]9c{̓+ ^?)?{ALcJ QHB>q!+A"dUdU6嘑=4Ln޼ɧ=ZjhH"D~O1tXV(SȗRO;v0&B&OD!ED$=MB3~ Iz^%WqΗ"4DtC \+Gr膅m F. x I4M!}$)ҕ+8AD+eN9ˋ- %|<W.2췸p4ZOord8oRəw|LcSqb~go>F}X4k-d)s]*UF˻ v۶|A%(+ì(Y/J$EF@?5p2S3yj5KWpcDd~_}3LC/,G"䷴ \$74]0bM$)aeyCLSc4c*9SN( C㣪&n%1BeP,ϡdi&yƙx|D(MO Vobo{C71Mo~x?Pn2Dԙfk[/X{qy1AWn 2AE֞={躄)?X*K>_`laHlR?:st]&]ǐJL%$i҈03=\%VϼŴ:]?}.S;ab8'+s{ܽ{TSl{= iG?ܙ3b'Ok_q9cloR+#%q" BJVߌ"L$b`{~]grbXי  1zI/г%CdEC7,4qbM&dwč+HBȝ;;'2.k8i)WQ`$Ȕi/]AT&g/ p^pX~O}ͨ ])bGOיdnw!̓67wal% H BPЩ!VД~NfjjgNϞmaʜ999'&9u _FalJ֦:>k[-DY"F'8CI=!2 Oc{sUh) ùez6LΰQMU@I S48FqF(iB+)VD"AILT;a@8?OǴ5.^> *ǎGƘ'wH )iL3Gɰ}J =Lʓ"+yZ[C4FvߡXϊBES{PB 2A""*2QE_Ƌg˛pP* {&;?9ޤϪ,﫫MEh4\0$A93hbBw_boWЮ4CmP Aэ.mzǛ8= "sꦲ"}|:/}.rZkA,+qu1tCyl"yLn`d Z]L6]^fwo^N&eAFZ QQ9ߧ# ,%:ϱQ*"X^L+7o*kJCϷxOq躁fAO$m|; jFU#d1BsȊq8:>\atlkO<+z37>BY%W "d#|猍 :Փ.c|Cc2Cc&C_)g(T=.v)J.Hj5L34G8/vm)RaYH"Hb$ W?Zllӳ؞Nm@1!љX˯>lg~q 4Sƍ\ZmGϘF&q2$&(QPCH#9MRt:]0"t|C}K >_~ ?y3? (ϥ%na$dsd[\,R4ECDTUű, "#,B$2Pn 1/)쨋ȠUZ6T2b H)9)zC $!ˤ02:7o`vn ix^|1E&FdT9<⷟|jI2H42~b6ſ7+^ C|C~s86z-r^8Hd Gt3O(fSF&Ѝ O;oǿPHS+QDc C# KPʓIyXxNLHIGGidnG4;SN88:lAc>a"I2 P,d_7T 3@{-JC({ N061IVű,FFyZDdؾ"VDib"B@b13agQd5)6Qxb~1>1F8|}1r,GA !BeEF5DI$ 8QuO~,~$}]Ohmj舊BP8 k*}'؃&LW_}zIVBSu𬐙y)q@6ePȧ[Ok\}%Afdx ffgadd)}DŽY2 ժ[Ο[ jn/A[O$2.{ ,jY@..G'g,-]dh:,,LM#[x爠-s8R٭(( Na>7g}Gq,jA"~EJfG1qD&|' Ȩ.Qt( }E ?bjrZ.6K/_~s._:~4櫇<VM&czvQ>||F*5Y!EfAq6B##Ȳ4;U۳Cm 򙟝l!:ǂ(&cUS |G(x/avȲ@L"&.# _+j6B E5#'Jܹ216>$8.䘘+׹taPYv_ŋSL/ΐfg_|EG<+ `{{ݝ#:q$ai>x6CCüt^`;}# }'ŕ<~5 ;;8NBt,ϣtdyL&?4;B"$@i">nrzҡQfW??8 @ڧoٴUMb1GԑDױXJHD ].Fǧ'JDa"Oۯ(q{*{؞ 򍛘 s>꓏vh֎\HoSn!>2LTYAUCH븄AHDz ]ZN٦oߢm^%7Z=#I |0|/hB Adi4'JyH79õ^@,Q#K,wd}&)MR٥41pCޥۯ$\rϞ"F\dnvkqwnqx?OxS*( ss,_dzzmV7w+cIGmrxtHVݻ qCC&=>fV/C>zʅ\X:O٤VcTΚiO)2- #Fl1g#hw{4qT#ETllj")N YSiF^H0FGG6F*5!">om.]Za?_gg^w\zn5~glccs|xach*}EdYFUeiG}($.)~*He[F'_)H !I4! QQ$ QX$1^/- "$(h5 H8z,-sK4$8wkqzZ䴂5p j:\ibb&F=wxl9] ױP%)  {_Ps#mmRY!~tJerbN1m zL sni0xZul* ;D%Q"ضC LNEEIAR$7㸸"]"K )#ԧ=78"/"BLqtg)-t$*Zҍ,_Lf88 gm߼NqhL16*n[<]YR..{qg+ضM%i[o$Ŝ߿O|pܐ addvN*3,RPu0 B EQe}c12l!$EJCȪKL->NjLbblQ!err(}OWO? a*bsNYZZ eQ@:0;4{=,ϡiaws\ƤRu^}"4YާV>"GhVpז"s33~>Dߧ\;C4\ёqvw֙EU4'TZI.[`oU3 \ުajg5ڝ> b"R \ Y_Hloo2:2$f:k`'=ub( Ot5zFXm ח99;U|lYf Ҳڌ[!iyQ5F8)=D޾ y:o!VI2 Qq](NXLAi(a;6 H"FhN>oO:K/]ިQU}&N#_ܕdXuEG%tCMB]&&Ig B.4nɍ{/qna} bBLKSfhDcq<,O}1(LFt~Ĵ6Om")bR 9ҹ,AaLNNde|.:|'hAB![*7_yZ5_Vc^&$._Z EAfH6kFG3%F'ejˣrZnc!TE.'b%$Y!mvӋS >o:b!2`gQe!J*(T1/]KEMIf0o:6gT;~qVsH>oMw&!l\:#&~^ l! }:A%,#; ,b2\OAL jZ%lavf}v  $-m& +;nbd INf>$GeddVHY>- iv|q<81 #KW4̐AU7 QV<:() ~+ȪpEz"˗R߭/5N\_WklV%c._׿ VjxNI*W؃.Wd#Ӭl2,R*-OhoS>:WeV#kOI1%b@AըJER:F!?Gߧi)g&T[efxC7#!F*2t(@i8ǠcSfUQ1$av7TL.0=7A.#m<wnb^b槉bp8Gǧ(Fq7\׌ݙDkG*/_ M)_?=W^FFD!ads9BZ+vuҙ"R-Q+,/Z\dh":'7Dn"w|t`xhQCvƹv6/;qX}]Up )XZ~;wRiդU/UQ.]:TM*.'Lџ=?=ss49-"7.]&iw:Vtz}T9HEpt QLG"8}Ns^H,*qc%Œ) Dd#CBXn%2hxKK/xg:I#K^lB 9u=/aLBE׏I*6尳t-b?"R.l"1VNns<7DRAqP׵Ҝ_ZP̱ stHr 9QQF!l˵?F4^n@ASNLOX8cC&H H }ka)MP*P>22 qD9@ϥ9GTk[N{{k Oγpzz Ϟo}lCLHD(oE}.gP>벵ul7<` TYX7<_y@]a)q購t[WrM6ﳲJ1492vݯqtFQhԛn ubL$h"'.G ds&^Zmq]! j`*"Y&eT ˒ʤIgdRi$Iq<"D)lx3<'Zub[-D\$QQd(avn۷@d\`rN,gCyl7p|Tcnn Mֲ/|^$ܾ2l1^"+pͷDUdE'%NNXYyew hw:X'+JD>J`+G\xk׮JLΐ-:{{'TU(V>׮? IC#Oh\ \vYf)<_]cgwVP>"BQ'eX* 5w(A#,XK h,$ Yh5d)g nK@;p} K \x Y%$Qčc<^(>$2F?8p#Ӄ}xUWSou TܥϱV^aa"B&ϟd(7"d&KLQ.wBE\wՍ]efw0>1ǿ"V'MD$g9:8Vx!QSi:0_^/#^ETӣmʵ6g]%eʕ*~EHAlVѬR.7"Κ]l)#SsT 5C!7B*SLBN>eT`wg~)x@Yl|!2C! <$)&mGncv ,,!!K"%ѝtU;W_^|' j}[xnb ;Gd>mpk E._& dDOeg{Q֫8rycnat:;/E(wn_h300mt$]Krvv ; OǦ78)gXfc}ZYq8<|ΕIdFJyT׿-Q15=JN L=ay62=5E`=j{\ZHyzK,..|^EՉ'諯 1MDzzXiH8(L,k%L&$)t}vv}Y8@"Udx<E}E26C&ƨ5:rv\CSP5J -/<ݳ"[7͘쬮S9kptxF(X Q qy!!+=` IDATNi:Q$ зI! ( 41hd!<Q)7͕7x՗ݢppx?l:3d!11K2c҈bLiH!a(%RfT:M$!2"p]_P?#~1D1ss2TȣMtSC^GGt6przN/)$6!31>F \xj׵DMe,,;;t:]R33\1;1"&T ߏ=׳qM31?sE1L$pr9._^fan( 4Eb|Bߣ46o2\L<{14TR=XZX˯K7|2VE)qwHO4]QmBdL3gД 3CF$"SW81s N,8f~~(?cz~wdm}gܼv m3fr2 8pØ%9=wH dtM%] $=bET ""0SYT bAB0FbRxA8r 8LV,LC%ַ>|g+Ķ J*n*la6k1V*0==E''%clF877Oǃ?]Ѹz O|÷yij i$CN,--rrVEV T%ٳg .]>σjPZon#U*trUCT&Ic6c:NCrEl" h4) 4j-^FYY^6+kt:-ޤւZ{p1<Z.gez6qp_~Bש"ᱰ0__,ծ( {;/WD!$Q,g@E/$j K2(Tc$QA%bIv d*7((Tje[h.ϟctΝ_/G~ď~hjOz;x7;MbM&bd3ȪX( qE ! S[ <"D i-ʐج~vT Y PdXH**S,;(w,]2@A%YE5r!Y\Q*X87NZAQ5q8>%ىqz/2$kU-rK.A!_*XN6L΢h:կXy-hO0([=Z36}Hb+rtt!F{`s=/_ m4MZ6bCdCF75LD(׎:abda O>.R_|Ddٙq oCs]@Sߢnb(DTQIY"Ģ bY -(vP\6t\dGBNG FKWk6N贛ǟy4:_l/][X_; Lv@,,,-q|T5z.VAÔe0JI~(˶i  I pmmE&TqM5)da`&|,&|@dt9E6SdsSasq Q,)$QLOo*;o]޻6k&ZY~C* V!Logi>bbfѱQNNp/]7l=O9>>At Ƨg89>BKֶxhXZXdw{M҅|w!?dwq5VV6!&z>KҠ+ %B|t]]m޹MY9$Y\u} '۶>ZNA!{Y3gֻbf~\DgqZmn5w[. )@ǍoC²rHTs\"c`fSDa)2"pp|08PՙamcCFFe`nJ;=O߽ϝէӷl^uj*Ȯ%>Yg_G58@Q5D-mu BCAJwQl !:^3@SKGdIm!/E":6>?}D#xvKHXE֝kr؞ED1|70pZv-nyB)Z]Tär|Vu/^$"=yF[rggP4}ol1p(ZBе`f RzhA#+i]gmorzt?$KoWdt;mH! P4v,rQPlf޸Ce3XO)MI>!ܾy ׸{4= tz_ĵ/1<:),BcӸ)j`k;\rs(j(vI$ZC AJطcQ̙qƇsD f*C:7D:M߽.G?{sx4g\:H!1:35tYT/`br7^?G165Flӓ?LUhz=JkF"-@Pbxx]Ӊ(Yf* SVd8`qrt;-zmA䳹,g Q ?Ex]szSשVʴuZ0RMr()-,*'2TVo@abfc<굛.\cvaÌU=b_FT w>vA*Fȩ ;@W|v _Q4ހ21:BdmmVnJD g0 * LJbDS>~遬w8r]~L1GLDY)t ֞KgY[||,/_vbd-Ш~T/-cYtȚBl 'ph[Ȓ2Jp㥛\:??/w?W^ϵZ@%BUe{=' \y-^}=6Ug+O BT:Å2 oJ DV>gu}RiwL^Nqm#) "֏,-]'X~H(Dq8nq|>i8('h`IQTFXMY ^ 8FR5DAxfL7L45foSA, 1Aj~A٠76t _sxpLö:|;cgW8>Edi*hDB`0@ٰ8>:!tLU`hd{oF~x_YB%cT:<%3<}ry{X*I0~ϷyJIlTalm=l _;GTmi?)/?tTׯwLX˹,X/Dpǹ;"㨺e@ݡݮ1r͒<ׯbnfT)4ˠ86ʕkW1'| F0 K':}ö He.#J9n/ҋ/sln'tܻe.=zX9FH*a@O=>~bfzNT5 2wnPkʓa%3 }T3:6aPhBB4K _"wqsdzje&ܸy >Zc \| ( fmBHvI4[m4A I]z:Μ&̕p]Ogw HS$B vlg4 `8 iJ"q gY)bAMG,e)27O~@_3҉E>5r'o8{"Ȉ?ry,./aA 319QC(`8S(8 :4LJ8^84wB._zE2|${D~{LNNrbyFEX gN tL{|cW\s1V`Zuoplİ\pwTcbb7RoQ̹4[Mwq&2sJv#b$mj:,-- =W}g /LL19>E<˱MsAn.͛py#h2`d4Oz $5,ۡvԢ\.ScmR?"Ih1=cWāDƊNOl5i;_^\l_**6~Th-kq!,lEM&r.#NpbeV_2QaǗϡ0ڋ_ko 2Z)z#~˯}G `^QylR+1;?fʗY?hOzF`03٢H"eɕx^țo㌌mʗ. Q \wh+JRV)s=*td&玒ĂLBj8, m]OSY۾O]f Gq(~{XZNg8 H>15Ue$o|TviZ4}ABw0D R "I5\ 4\NF淾94SG/219B!_|.P6UvGخͩY8kW_dm6ЉB/5)u"%iEBBc 9X哟W{%V7o2Bf A{L44MCA\btlB1ORq\<#44m l1MH  p n^˺tskH$s#+#L,(h@|kѮ7q$ KxC s\v0o~^Gt l# xi^GvU^_?I^:`qv[7!T,^a0 t MΞ~˱v[t}?H*\x^cokYWN*;;{g4N4h041m?II`h0 0l3 8~l.?B癞ccc&}܅ 5# 'ʋef槩׏ؾÓ?6?`wo|9lS6p,=s3h)l>AfyH #湷OaynޥWTa:nJ,$Ufdb"|\0KM`;Q9jBvEJ D$MdqLqq,4t*[s|# B*LC˲"c>Jiߪ?_WA4wq CV󈱲.brX1^y Vױ0MEh1Є6}/y4M.\ı¡Qo{xQGoϾ [oߤP(jNsmǡq:а\'c 3Xz$tIBͪGn c~4S|L^wnЫwv:Ԫ; eJ(q&cKQ)rR1ODz,3%a"iz |q o㘤*4Ƶuz#&K].[{;>9c=W)Ky AtXE!_ "LMu2ad4}'|d|+_MWҩym"-O֣lJ.GnrE<±J]W"Ξ9lj|}JȄRHK^B+ݻG._5 Ǘs e&'KWX]]>ܱ &b+oJ1p<~o8\{.b*%#etJNq}Je[⍗ҫybLb0`/ù2c:|,gCLgVOYX(a1 F"=]F2XEa)SR!&ZRzq}'S+/ə3'045!4FF|gbl&c9i!(C$ sH&َa`Tom/rf_4F$VGtX IDAT?[M)Ezhyyv6:X ('O,bj&A_u8V鵹Ι~Nhˏg~|<~_>Cg೾~)SlwxEG X6wOO2=3ow0-JHN92?5;W]Qe~ X Q@jgF۶B*0,*ޓ n ;ԎBP?j`kpǨTfVR`Z6^w)4Rd'1m8ya@8@ BYI"S46DcJCGXm>*X:}c9*Q#a3ET%8"N$P$2! ڝַ6S9_8>ݾ\ ۴yŗ}#8a؏yQ̗x+zh~4P;WZNt*l7QXsgȇ>FvgTi* 86[f,_ 4پ{O/8S%N-Ca $I#-EB4Z]l[gm>.4Бm|Gi6.LPx~H25$e{$Ha:veY(L$hh>O<NjG\Gc}?_d{k-*1,۠?y蚞= 6g>#?Ǐƭu^J5t]!U5(zxQӐĉغM^#LF 9䈮re`hNɔvP !*t?R3_ q'm4ߺ,B~`0m8AXBΟcufq޺vMwMrtT DTZ ;q#\7_|b.c O'IlL(K159Ad{wi- fk_f#(>"ЬuWiT]74),Kt &L>m*pnd45Hus y!HB0KrGD(HM膁dv0dhئH= Sb.Sbbb(p"W^FoP2c|< qQI* NTfDa@C|W[z{/ϯpN`zf -I5 Hr,̯03wPZbڡX(sxP l@\ !rǗ&yO8~<[ 6Ed0p~z4\l6c]`.cQ=:bg{:#e)f&6Fth6QiȰQcvݍUS,UlߦL/t}LCT#۱b B`ZQeO&E&AR A gY%)&'iu^eoRAGTy[d!`2BhAaZJ PQ{(ʥ"fT xx+;;ATrPi1Lp,?a̻Rƻ|ӟ~0[I8x@v yfxǨ7 *aRqu!Vfja 0쳗2Z8`dĄPqn4O=43S+%^*|VA~.i23i\w'fu,rëɵ7_!NrY2}ݝ6c#:mI2D4 IbI&8<) RDۥZFruXe+T*,(D)iX(&p\ٙi*Mɛ&Q"1,'I.Lp,0 șZvdfK$`}.h5~mVz}4D1Bww%x'y}[Z>^wO]faj3I| F_{޼Sy}Z+KǙ|z9&fF>M9z}ULťEL)ٸJرVVN2:29_~_*ΜZ%6"ıA вN4M۲1M0p,( )ؖeXhB0 HJ .x}0?̠n'G/ ~BA$يLI(pry+.gV867K*}Ƙmu"(Occl/}naZ&fW|']W)~^~U/ۇ{|Ѩ}}Rd^vϡEA\S>ٸL 9~1uZmY]DM&#" R%*{J/22ԍ1Ǧcnv8 %,!Iba/{}6\zt~|~R).gbbFEJ$/NcwCw|zʳ_0ûRnWŵ3L1LUЌz}cSU Y@L_Xx@ y{qLעl17DitE>c㘦SO?ܟ㩧>HSm$4z/kemH^ǵt{1t>B%غ$ @35hM㘡},ʰlf4A,4 e=(K)_D= M8yrѱ f S7ARax~Q &g\'WVzV4'.b;&±9wwx 6N!}n;Jm| #SZKb (`lrw=0 cejadCN&߼n|Ó4ZGU,+O=/#O#%щ g|]:###UsTJeL፫o #Z!Lt$:ű:ɵw% o:ް_h:-Ow x7޹$QNfyi(LCŏO /f{ ;NAABJo'I$ܲr&4, $|{+I W(AB1~0 >g5yWIeBY* :qS;Q*P(;DDF[)iu&c[{-)D%LL[{5^@2)ܸC[okpM SrF&,nNwt A*#<~y5t! q F'3 * NvP9t;&p)Eevn8cZDO~tM &,\i8Gj]72fu4Xe\K\Ӫ=8 |R@4Ё /CDGFFx}8 |}Ο^HINgI'1y3Hal}WỪRnM׿.q\>O&W+R.Nrj,Kty~v~{UwK71MFr"( bfa!^;˾6v0 \.aB& "q5@73Rd0 d`;e~F! 4)ʸb! Q)&EEmN<0ϘS:KǙbg[΍og03;nhlZߵ~_sh5HH(ꫯs-c\zJ\{W]E%3+g)J|sDZ6P773 bvvxʛ >2QDu\J%TISd7z QI)K87Q!tm Йv@ &1L0` 69j Dq#,8~&BˑٱuC!L0UW>qz3|W>??Jz_cvz]~"*fm.++sX&KիԳ]\UXe8ޯro}(!ǰq\0C4 űf͌%Bk;((( nbYNV=Aׄ $ReiT)LSa@*\筷^#s+'t-ȧ2R$N71)׳R3tA"qy[-<8Ad+l0R)l81M|{S.Gqzސko}Vc;gR KDjJtpl0 Ra;9 @u*R@w]b%bSD&TER]iwr y:&"$h c"J!Xq;YZ:NhEբRR*s:^ {xC}=EgԲIKffa$ ۲qpsRhB&fpnbu :q@E"fd$ʮBL4Mt9L%wo#(3ίƿ6)?%>*F!~1:QagFwŋTkL3]gy/C J"n IxALr.*^d{ʆBqpq"1 阚?DDETRHӄ^M4DS MhQB%FJt]'ӰiZy~CCC<4/|3Jez^%]$ΧDpcc |>ɥ%NoR(0ؗiڤDQL' xd)t|nG'6 Ѕ8hAC,KϚ(׋vY8A(=NcDI8,9_C3<)*Iϲv.v;@1fnNxܱ9HUk#E(Pb"ee0_}:\\.OD2%g(byB0A74LЅFGqvߑSTƘFK4]woQɾ_/?4J{?*Ӎ7291E~4OqwmoXC-Μڢ 赻aDId*]˄l;bB?Hah(DqB`a~yʣnnWG~*!CvqrQX:cGÇFxX)[ˌϞSܸW3L9(9s5#J> Q"vVK L63m! a^Hi$%/8E9?JLd,@˰q\B",rifv+~e@jjEFFfcvۤNΠ^C:E\)ID.tR*QHb9b,;|v|*Q*q Ƌ< r<3Sco$!c;.S0t\'FXǑ:<"}_%KK  ;ۨDs]qL*4f%ad'JBD#Ô z07?|NM R *|@?LEGϙ(S'axS|o5i0>>I)jj.!H 4xvr(!IBCict" ++OWsCIcrlva`nbm} CWTb&i#7gJ}ho"N..^$]@) !c (04[7qyL0r16llk7ze = 4A7Lt¶LvaOݰ>| 8M*C R\Dp\͡RDjKg^+a Bi@v+OVwÁ n!,ݱmL %Ids@3t^eYF+),$CnݼqZ aZ(w)?ݽѝI0;*" M ۵Rũ9~?ƀ>Wx ^ߏv,$OIDAT>}g8.H$S "V)´]װ-t,]uғ>JzG" R|gJy$Մkx^H"fAcb‰SY:k7!`RFxh>u2R\Le$dR晧da~vw@Ëo>}/ wNfa޿~LZ%Ï_?}n.&s/f<`?IENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/port-brick.png0000644000175000017500000000530511346241564020760 00000000000000PNG  IHDR;0bKGD pHYs  d_tIME3r RIDATH%Io\aۗ7l̐)Q,ZMcc =O=(@1RK"%p6Oxϋ䷅PxGhC3- .K,ݤHR[%NN!CVܹDȢ,fB Mz;{*͚!r$1\]ASZM&9P`5;H45d]DR$!@SU$U^m$SB#]T+5Z6 9ry`:'rCZm$j٨%T(&Kjz:X#*\$aA$9ϣ>G+ը7Pf{H{>5t2̰,6Ŝ|" x57{$ߣRDY2nrfep~qȲ *vFl?"\5A iQD:5lF%HMwI^vYWH@{d& r c^Q*kQUe?VgӴe1%A#I3_0:eDgޒ,^DVG$VV#J zDILLzrDY첏d)./ET)g'9mS$t!H*]J,ʼ4SK6OY3kQ)3ΘM ݎMmF"'?E%ja9$HBQϛFWgI%fI'(R K~?,&fP.W\QSG,Be6 ^!yNb3_B:dՙ;}jtIhy$iDV]H%Y+tECDώNP5/ Zۘ*|]1Y9|tG4Otլ{k93%Ob*YѽE{}͠ԑ~uN:mUFUdYFTKBй]DsFȂƏI(U\V-f)wbE!n?YdYNnt7=\__s_"+>aե vYg:uF$0 N" CZ GLwg,kdEH 4X,"^-S`xJ)fz#ޤ<}R!`="}= z,4ZMN/yx} 7[iETYhjACb,pU``2|sB^9(ryyɰ?@VD,B LDr GƮIS>qvwWv4Mp}JE]ۮ& ?~Zqu! [|ex!+n`5*VthNL%4-f9*`sgoR9DWDqlbX4'QBuCȂ"J8VQ^"3v1 5e^q=p!@OSHSAR2nB?U$ m$0AuډNo3ꝱ\/cr:BzE E )EbdV dHF$D5j*;IENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/port-gold.png0000644000175000017500000000453511346241564020617 00000000000000PNG  IHDR;0bKGD pHYs  d_tIME27IDATH%˒IB@pGFfTVUn1 f`oV~ f Z=#%Ue#2,\qSŷ?->*D iCV.DS=".=n>~onavq:M\S=R"aY"[J,niڎܽC4Wy|zOVVM *ae,KXg5EiaXL+%~=&Mi| . 6Q?|b8])%֡f'ʼmm T|&D*e1ݰp^B(y!AZ4c-yH)biX'v _'݆m r%-s{@K_Gq.zG._ɊjvA 2 9]"M6g1W ۝cF\MrlBb$B:R2z DHĒd9ɺ*yzb>Wwwb"%{4RpY1Mf'jB`^'UuAYV8ԗ'~i,$HZ$IY*kY}RG:Hek$MS&Os8!:pĦ36٠eYBs`a'||MT^R?s;i$ @[H5]ױlH mӵ_~afG1*!w)l)x-Aj!5E 1b, 9$b5t =ir8lB0~$L*/-sGZ3_};JX R<ϼ}Q*6es7ţIM{bo".+2~ a /lv1LkG>֣CZ D[JFR+#4ams,u+ZE& Lb!L2 b tMK,>fv\i+l˔yI b$Q!3!b(&l?Iz}fSX Plsʲ$YˑalP U$K&~=]ʱa&nuGY$,~EF !8 I9rr(Ӝw{ûw##ZK,c)'Q%,_?q:~=.MPZ|~@+F`R0 W͙vqPoCo Rk9G}(+*w, Ӳ~*Hl UEn)2V(CIBk7+ڳ\&y ۖÀ;w)'uZd3(JU==X{抑u^XJ0 U*"m7gI?#¦Lux-<=0O#0N B0m}>O<4!I4pwWpM3U#~g3n{qu#r[ҵ-d!"e~}˙/|D749vu]"r\;<?hID޾}$)5x.fQI3tWD ~HL9GUm1R,E( DA;HgHFPф~^h__!{MEn~ߑXCA1]7lR`O3~UDy||yE(:Hep֡F:a%#pT -,6!u_j^>J}ahoyi=oR?> AiǴx^^7,gMy' ڈo{6w0Jz_Nܓb!j5 _&n%Dg&2v#F'R RT0M\N3C2wu 8{ӿ|%1?Ӝ"~Q,agqQzp&,6$ZLs&0EdeoHù&DqQ3!IENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/port-grain.png0000644000175000017500000000363111346241564020766 00000000000000PNG  IHDRR9 pHYs  tIME  StEXtCommentCreated with The GIMPd%nIDATHǵY$GPw=2+hd,fpQ $h4KuU)x׿8k09ekԶ,;v5jE1]jmaquY*93z:=ý몁z|N1 1ݖE޸zqI"CY[ið웫x7,ZEs:)u_/Cy%Y$԰V1DEk.4x3/v.(i&l#ˏ.K 'Bmm6;VHYguﵷFox<=Vfm%E@[9RK0TNԢ"3YiJ8YxZdwx훳Z!46rںTm.Dk\tzD}]o[&!2nPV k%gh-m[,\=/`:ь^}.4 sEhXEڲзpz,ґ0BZֻp'.Je^sRv[gɥVrRuah[.~*j`%-7@; %sޯszsJi Hn5u~+tWjOB;HUH9i 2KWhZy^[\6Ҥbj&M10p`)@*MlE\&,J۔RN9Pu)Ijerk (M)1("2w2:ބKۗKgh}K#I"ꂝ,(3筬%IYcMkH{H0+v:=}mɸ βlZjw]iaKT)%aDu;tVZ1G"㭙Vvp֭5.dEƵܤimm iV˞[+{o5 tV}!G6Ch]+K@u(̭wRIc޻B-YqvմbR>v2݅ir]$2dB2=}ȩ  Xm]Sky{Otqwlez<);jm1(5Z9y]t`_S8Nq=j4z0}fqJ@ iYR1H `2_9X-GZoW8s("lq@`Tq[oHYGy[_%%ƨH81!\gBu~q81ޤZ AkeLԁJޚw.>o7e ?m|N[&UjEtZU\45Xx8;i""ӝt(\+,|=~<0>RKDZd\h˖ЅYEDu}Z߇8im1q42_淗ͥ?.!"ƽ 00D|iӊH{m\AgZw^2姿t|0iexZkZy8+0`RRHJ!<2Q+4F ôK*! R8>~*,u[ yge)}/\9X\`}=U pխ.tXkӯvk//i_faQdnۼ*4Ѝpyb?q&WIENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/port-lumber.png0000644000175000017500000000460611346241564021157 00000000000000PNG  IHDR;0bKGD pHYs  d_tIME7 2 IDATH%n#Wb@}ԻER(ݶ{&3=+AEY & ]Yvw%Q$]u>?sp?_BQZtW7GJ^ל c4& IdB@[qvp9,CGB[w9LskNi!frn1⻉JE93acu4uEHADe`in8Y8#XVH (ozgɫ8A4 @ sH!#V+yz>3wDAq=];o'$m$"V#o_7䱢Lidz(&}~θt-yLErR7 m݁_9(a6O)`+!+w5OYC^UNg7iB$tW :aP+JAe\If;'-t}q_ _?T^{矹?h eQobgt)?}ox|UMͧ˯\g~p㌶xyD3q8xÞX XwkI<#G7ÎG㷯 IRƾC߈3K⭦7xB:Bl3Z)pdjtb`-߾{8))dX"?Ώ6FF7IENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/port-ore.png0000644000175000017500000000550211346241564020452 00000000000000PNG  IHDR;0bKGD pHYs  d_tIME W] IDATH=R\ bΑn DHIxBnM[5[e}'?]eؗ{kWٳk{F3U@$@Ctt8wz35uxnR;ܽui Htv{ol(Gmc6ã|՗vXXI#ׯ/y{+ϊU Q11#~Ws*2a>J-I٠P(PTq,Kı,IĴlR)'Pd7,npl ôǙ,bQT8>O?yb2F"u,^xͻMRx="~ C1,SO?7RE$Y&ST&^jMCl&&z]45|+ pe dëoɞp W/Y_{I0ɣ<|ūlm?$ڧ2Pd7cɤf81exTPUapiûu?x@Eu|~1N9=!**.wu/EdbrngxxdCI$IZy7GUXȋl +|xŧ;k$qgQ>R4qLr 2}~%cq>nS*e aʂSm5I&c}+%^~_T_4@oޢ 7ߤR8":pv~ yJEV(8FUU.3,hЃٮ \7Bd҇G/茱IvQ7"K%$ƶ\./"R4yfuZVG.]lOHQ tt8K ˸ʴ:]چNh`BE^/v^E`#y%,oatn˜d5ޮӟ??]ki4lllj4ZU*`[v[ժm 88t r$7_5Kׯ#P9βXF Kx}~r2o޾Ὓ`-BPklll/Dlvl, :mI[\Y`{M }Lct\2O^g{ßM6;$p)vhuj߇8x\*M" ȲCÿ046zi=^B ggg4M\M%aZ?GMR[TTtc8$Ӵmğa(R#b~Wg(]L'i9&,z f IPq.nDQ[DJƣX^2\֍y߹E4pP(ךdY$JEH0TJP`td-<\0KKx6Z8E/GYxezri6GZö5ӨswVj1+KCXD!B~?#I\4|QƧi]]e 3.P8mdU1:dz|ի+Zlk[<m/,߼ ZVPIdglR|;  鈳| S׿묽ߠgEp@effZQ$P4${Hɞk MGoat٩ic4<7_^bw}-dZ޹M+>8VQ0.e)P84M[QjdKuNYs3Ӹ$`4-xy4^*! 3:Hq 蘨.E/OFi6(&!9@+HN5\ xT$JoPmKlJdrX"NO F5Э212pt@b;v3KPrU#qJE199ELqxR$Avf}F/\䴠jsrY~y;wRC][g+nt6S8.`O0yLFVx*c`u[X.m'_̲t#_8+eU|om" N7-Zi{M,&pzRR:QS+VU,^iئ<φ8fXxe#Qt]g~*@>ko.?OxrGFfKXm  ZZ6QEu!NO^G<̥ "񘛐ׅ[菆x%#r%Cc\Yw?<; \ujQ^A4[Rp+4|K78Ac!K9p> rm FdN K)*p6л],²at?߈xIENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/port-wool.png0000644000175000017500000000361311346241564020646 00000000000000PNG  IHDR;0bKGD pHYs  d_tIME4IDATHUˎHrE=ɈWH_ѿhf*3#Hi% fvDs&qp'"B2Z^Q6D *׉0$D1q`&lۆ?_Ak +zwQ "N2$""d "zV";d$"13q?y{墼\woL@_`X;$*(np8? UG+)w;"ۃ9ND;jШU`vEUu'F&I;ۍR b|Bk8Leqoܝ꬗J):ClM Σ嘉ll Pim!4@tC2;3:tE$IJ1"F&9la:jsGu41d&c99m&Up7J5oީucw*ڠAwM2x{ۆ%核VxNd $XVUgI 3CD0[ૻ :3&H)9)e`I "0K8"۶Z $3PD %UA2 Ab$˗/1iA)۶sGБAPr iVΘ$ bDL"`>seH&Q0/;fe݉xqK%r;N]̌<7ve*ǣ3b&TJfHNBŽ`j.?9wGq]=ɶVDW5朘\ض o b2g7aD{M?oW""0$Ȝ{G7~>yިr̜L}/H.?%nی1;Rm+)Z/:Q3̅mZ^?zΉ1g̤w'sec T Q~\o/1}3kѲsr`bw4l;f!lYoϠNN&ӡ,Y=_~PFxE~RD8}@ *9`wJ)aVxu"c!۽w=׊3C,{Vl˛V^ٶ`r%3 zC+ʗϿhaXgO62j~ND.#8ۃI>"J>xg7̌\Ob.9shŊATLǝD6I*|rCu8e5Bb4f$GPFFEeýl5-LD$B/ƎzQ$ KO bp7b{W Wp6%"hXZ p*\| .˩NAHeJ8C:o /̙H 2sTR 5"ٲǃ s1M*/@pWh;"`)_PUSgISLjΧ^o?y ɲ,3Pt_P7U`rZy ۶1g~q,~8?TDI\P녗ܮ||ܹ7DRvJdZG{EyO(eE28hO)%(5|yĶmOGID5e-IENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/sea.png0000644000175000017500000017723411346241564017467 00000000000000PNG  IHDR7kbKGD pHYs  d_tIME%˫ IDATxڼݒ$IfU=?+) !;;Un {pW)˪7*s_W75FsyCuo @ڄ5l7al3XpƜ9@c@(Q0pCEp <+*D{sryO˕(HPt@ QD tzZ${f̹c ҉'yWPBD}WTPQ+Fxp~%o/ Qd/99ωD[Cl &Fӎc3"aY@7 #=.J.,oַ u4.D[l]tYh(1{ ~x0wgk|`>viҘ`að9q oYPڲe'aabB!8@Bvy2R"4|A IΕw9gLs 6D7hkhSZ[h#QTCUz~:G*‚HC{pv.+iMyxf x{!xfzNCkz?2dr!u zD(#{ѭO<,e[BiCU'1w<&-J͙d0sj4B_]l߰]]4CA;]asö]/":Wb)|"1EH?EvzkhkH1`Ή{ ~=*Rn7CB肴ҎTFk ڂ HXO&擰_%":^eOf3]ڂgj9E@YTvTȋ % BZf83TɧL3J%0< QI:P]H>ErA[* %3'Ga,12Zַ̼¶N#?o%OnlKASAzCo}g+2 o~\]_I=nb?>[Szk@З3`.Zվ?k꾮t^!3oЦhWi]6&6a/L0d:auܘ|"O#ZDᏝ1$<Q ĝ;r=c],+ &^ =&.αiLs&,X]y5{2zl`5oi9qDBc1`<z3ZP@H Y"hy}`@f<ghq˛E5q^yQh՜ V,0I$(*9P%TkPrtE5/Fh0 5NEY-?}U>: *jj t鬗 L~+"]pi9?Q=/ZQ]PTe}B tx_@Ґ5WaySr)mۂJ[pZ=.'GeCl_ sĤwFss޹5f"0:| 鱣h8'JDD4QֲϺ͘33O{^wz[  4%?tU iyU?D͔3,# ұϬP"q+t:OlnO6g<3jk,e-]Wo(>ncz@sx7֏w+c;41fˡwz_. {miM v3fkY Z@Cbvn?&1؉n4DtmǶlbslrPyoێcÈPljL'GS,/P1Sxޚ zqN\v :O휅T {R+׹LhT8Wgׅ_e+l#an;sZ}QZH%RRYrŇ#sA2 ݒ-r4~>7 3)a`I 1\]-.}oxo_݃ޕY1Ǝm7ƣ'|;7mYV_ fOg 8wxUnl_"ꦠ5rsFDhV:u9;8n&dHg{'С!j/(%~ ,cw" KI1qSKSYrHӓbl$bB+,L?*"ƍN>1=F~mk:/EHwᅿMc0pN_v(ޡiD$\`׏,:ӀaWlnY>B+n\\~sCc}`{ kqӂg _co(-Pv b?=f{;zcccdwL:Z^Y#=l$F[.Oq!ZNjiN :r?Ѓߔ)p}}-ID ܊Q=H"}ș# *e&9;Hx.ɑLaZG#יݑPj /;%PkYM9n۟>ؿ yp 3'.H+n;}FkW)́ϝEXzK#hiAD(%76 ;'cw Ҝcf3X hGx5l@M{MuY2еhideGCYTufQ8I9$319`zXHŐjC$iwhҞÂ<еL\as-vF5z4f&\}pΕq/hVR^RlV=`Ȉ`(o {4=r~al r^Mnլ΍VuY;~Zq5%W"/@ZWֵ,"``;㓰W{dɤ?=f_KCrbqx58Vոja A4Du '";N*;sz gr"qY"_P jȦ`&.!z eSDiQj烟\UB{ӈυʈ'^Mutvx#o8Nk=g- <5#? .3&w;3`H =F wZ[pۘ3!N s\@vhFtT;C,_xxz}߹߰hz^ Ĝ6~z,5/xLP iNfI)x:"a1AɅо$L[%" BVbVeOȋ ךYK$. Tʙu#eT1֘ZVGɜ{Ҫ2L[=u!\0dK:E Th+w6yyb[D1-K+`{۠7oWBys[찬M cl9+_ୟ4'h-Xz X&كۿׯO߿3`>shuK̘<qI7#~}]46x 6 }Inƅ.a߷h!\* jWڂS T{NfU;DS$$kaqvIC(Oط9my GVkcOz1: k/K${e> ӉF ob.`y1w@9oH]yk??02' ,ZрF<;~÷ cwl/<ĐD~vvi @+oR$3)*xkykk<Ø J=ɾ}c{ր5 dp)X,tlpU3cDbɾ.DZMmv$-YDcy&+_o?q۝1w @_W.??6_7{rlb>v(ZDǀ9NHzıDd?;f{[.͜H~-:so4#o(;sKrR¡++#Vd<(ʕlU[xcP} ̹߾[_\/TvE1>w#ZW~N}׃~g6m<`+҄0gn>_PvX5xrZ?=f{wITU <ƯLQb ƞdKJ!AV< ׷ z|b p~0j4\. is:,H(ּ$Ou6] d UΛb9cC2ړ*#\Wַ7B$%N 5S1°T{nh <^>ղhJ; OdLt , ؽ Y}o;ujRcAbJƜ7l_w|,: [~/Q#Ff;Mo'YHH0Oɽ !iҗ7wl?Ezh"//Bt }+6YJ>lĄV(RW.3xCRd:cLxܱ9n*6iuU!n3cA퐧>򒲑ԁCpQ\4B_W. qgΑ֡wd&B#=̂zvQ2dk쀢*')BۅlWC`,Y8h=0~ u d=OVBg/cNU^ GOn>h˒S(2]/&9\N?Вġo4IǬw1?f;1هs Cϋv I+$E=b!PH;ԬRrXmyдx]'AM K43PerAB<CZ]n3Zcw6Kh {`9h$ӊ*˒͵:\G01a8xNZDaΏuZxr$}!Vƶ_:mX'TXۀ9QD*Hbɗ{OP3$zTl#dMBSo~BK_w2\KէUoP"^V.ׅ墴mn*ooW.+ۍ~,L{N`YjPp~E "N-06 Z}&s9)iYD*IJ\LOd)=^#÷Ԇ4hc61/l!f{(LR!aL@1}qi9Ȩhseo4cΤѮi x<' ǐ"& hTMzynf#oW۫;iYREJ)ZU=xBMOtʵPhβ6vۍ12teY{V.SSB#_;S盷_kwJRJ"PHlzt$ Жnm#Yt\Fo,io D.'PϬ2Ts^ɳ< XɌzj,/]z(/Ċ1۩PJ{Ms?zɞ9)ՖmDMqK$Jz9a|>?@W=hZB m]iw (R)*ؘ Ta| @DP9pl@s'ఛ XBvߙ@PZ_\.\W9ƞF*KTX9EIzDKz~= ۯƘ˲Qbjp(pke^{REYumP71,%(8K2+U^&I1S@D! !$$$H(K}VZ3H Ae~r4{`XRC=`-| =^wښ?q{}JDC2Uh~e}$W6aƼ߱!ΦP5u;<_Du/Fñn eUi~z֨'K 67,kAo+-61Ri騁^yBwvKNW~V5kQL`yФ|}WzoKzk=nFFuϛ´7Ezc}gڍxs$Rru~~n-c^.5YZ3-5:Cfʩ?*T\(]\),/ׅvQ\7?p'}D 8>L,** u0;3=ze1]inwQj>Х\i6A1*!K1҅qE~Q (iYAѕ%km 1ۻs,TyupoQlcbC3@D?6QNK9cB7.oyHIVW9Ò;#'tXc(JK;,@V_`}[y0 >\پ>a:ɎNfbyjVxk4/w/5RV0a1MvQh[}o<>AI(eBO]_q`^+{79 OMJ"Ī~8UhZh5=tC GԕX)i+v7K_YוϴkBk;Ӓ"˅;0g5Cw_b2+'FS AP`l߿E^lP)Rb+6>K wIGrvKbnvhc #~vi{ִb,.RpX["Go6>+#J|C|g\h¶#Ť[̹JyBըJ%pðcE;D}'\sVԐ\Rhj=ՅopSrA&bnӖ^t3i 0GWk^F^V DHsF9Rϑ[X }.;FL,o(ǹM΃Oxr}fꂟ]$#2J4sOaye\LZ_iJkDrNrJ||<áhٽuZWW_t`~̈Ԕ*҈'KԉxA[, tC{hYFo0i}#zJ'נeYµ' "<81YWM9ryiNVp_JAŬlZp_'%G eVc^32RNETn#F>,'q/*Q2+vۈ]]Npc OrDtf:Fm%.,q%1Ӑ!aE>4r8uXM[ p}:Y'1˱ց*Z+ ,Ke-)=!/󗃮/割IEe8ݑʙIyBֳz79ZU~i=wWrҖB92K8䚅e2iڐ##eފfd3ssρX)V9wNRn/3Ɋ﵆tÞϙ!#} gT.oRࡩX.b2 K /}h-9,EՐr8{*{zZta*i7ct3i%?7!}ɉDn\>/g;fiƜyc@?7jTw2񸥛da?~>п^7myIX=<6NzLBΑjۢוw9o5:vg}+\*$  8 *X@#5$1~~vȽqnvFF)b(")Xu/6}eV#ɁH:39=H%iP6792p$CW w}0d*Hrο4 S,yP{~AۊHNCt?tixbӹs^x{@W~ٶ{E Z-/)%yZii=s/ֺϽ%ѱ]4ް-+sbvs&@P~tEq G<= KwDY9zv)s?5C>?6B?oxHQT!͒H,fbV՜>G=խVH}+MڢH86~Zo?n|;vP%9|T<3d?TZ=ӛĴ4Y>W>OڟP\2K6uve,J낉37ԃk1&ޒf& ,+-aLqYJ_жr쥉O ͱ_=f%kcyDۙ|3yvGFywGF9 ]xf6K_Ws@ɦZ{Os9W*-ώYz \Ni]U /چO 8-ܚjcyZQXPbe8BQ-)퓷_:;Bۖzz"Y(FR<_]/|_\l`wHI˲",eS+D˙a*ertߓЗ4 6csU2}zcYVnlus"NY 2wcO 6>$5Y)Lk녾3Y~-.KBaٞ:"K]=kKBzIK0OTI%˴yl֎MLh/T90)A(**}]sFN\fr̫i;ƨevli50F ]e^;&;_'ȐBg_\B.ʴcPv˕), 7.kjX6vr;,5qH:txf^pȑS"9Z aiHdgzX k{.[R~*Z,5kR '_п4(?:Tz-LRasKieYX%eE4lq4rσ^,9>l)2mͥW+WĹTәeVG0}a\ l~dl|t9!/NOUfܙ)Z2sX/\.Μriˊj˩oGFŬYb/eWs:Q,"R+\n:a+TP)_qQւ5&Q;^EjӏڬtQiv„iQ09=RMDI3Fbh+0\YBqʼn WQAH ,ᴾAZ-U\ :f#Ku؞>LuᲬ?_w؋bZwA;]Ξ+;J5Kb C׿٨1-f;x-U>\zFז4b~cBPZS͏giڶ.;C|c]ao { l<$+;Svrpc:RhʫB&q?) +/o0Yz:ϴ)}myvi@Je(95|L\Mtk}BiEjwX}d ?K;%1n;l٬,CS=+Eq˝ЛsiKѴrcԁzgq';Ar q?EP0à'\u_̜^٤XI:m=gj1A=Qה_t`AxpΗ3ӢEks@21jҡf!%K ktl9k9wrG`Ӥua}_9 ڍ9і6[pmX3M+1[EVklZHixm#sduxFI$ˆ260xk)qvjify ^Cc˝.pRfOy @זPN ho`.-^z;}YÕWl)[rMKUWL:$&֒efY]/L7uOӣ_M2#?˺Jƍe.0rHIL6Gai.cg#"p)J 5J,e柠Xe Z( ū$B(>3k`3qlRkP#=y4lP1/f<͔'L׮f=cgo-HN ?Y_,삭2˺4<5OfWkst͖.%v% YP>ti!9N5Q7+tjoؓ]|`=;,ډ~![AXǑm /d)Bp~FMz$5$Ɩ[̂-.J(wjWDm32߁SW1"\?4"s$%}qpVf#k4]<^h1Cٗex`y[Q*sA@F(1h=dZ49ORw4eJp; #|9›l5,0t [\N-} $%9jARzB"!CqX]e̊|FK` K Eܘ,<+XUt9JgM IDATx3RF[srstF3]1X*Siꐂ$K4Ofk T j}y٦!2%_ ųJ" a(?azYrc`3GCZ;_YsgH"aò<e7MAhulobX3j"fE!uΙARVCx CFx0BȊs,mƌ1$xDOyDG%=I#i^R*vHǺaXw=hmZ[)rSRFC)?WkΎD'׼RH\( Y'^"x*>]15.~vaBΒ8!Dʼ]-?uȮwUZoGH5̒[Gpږ9Y9>hb,Q+ z󒉊2bo ˶Jq=3p%z\!Pˆ;ԓ$߻][]*7w1UTr0P"֋` u9(z@z6ANTZ 8‰Qr~y܆qNol̄'IޑRdf`O/:B'S|}ଜGX*{drE~|(3 e3,5Ip.NkP&8 o/{X81*ᾺRnd ddJ}1کآzj 51z a[ǤVeԂm{@,X&)5h?R` SE-^?xXV;D ESeۀ K ^׉~н-!"8⵿Q"h{Yi L /¨wL(]G%',`(rgMr !>!GSݞx@.5-ȋxMpq;1BS^QV{_Rʬ-=vIq?pZGol/#8=8 mAb _M Dg/iCZDp /gv#*[0yDgbDnqUuiR{4u: A!b y3$ң:gA@o KY@3Ä'&aͼ$ڸ$_:92%]BsS]rk_8 Е[z" Wk4P7.bNNP!6ܣsmް",r]&s eAyO_O}Zy´5zdyʃQ\9HJ&!BhB-Q*:Z^RR7 Z"s8vL2Z ttʊ]_b'6%Ҙ<}׌5lJWuL .1)`;PQPRi*ڞkBH`SB& -:V-3Yjt_ʖPjᎋԒ ~U0Ra{emEX&y2pFF'^_2G?ti-`.5b( gu5U[Lý _ˎo@K8я'ľw6yC}) 洴G0cܭK rzoޏNq%jd@Ufބם*(2 `f#^YdvcZagGo` f(u5[[X =lA6͆h֓ky'Bx %5斾 8,7U||~[x;#1‘ِgp.a?ûXD^Ԡ:AFC1ll8^;ΏhQ$ĩ9[_!pRQh82pbٌy$!84s%) nz'#\7qᖵsFJBJbfh󝆔smILB]WxI=GIYP2gRJy\Tq9VD9 eD-(L`g=,ڳ8y`{0N+^ཆ, ql#vKF&^uF[2s V*x<6,1w Pg$n;%:y ~G!OyttH Jy+5*@Pʣµ3Ȃq(G#&/etDAwf0Us< 1 o;@7|+;ګ|h~fGBB Jq EOiWCRo z;=?p>{)$i&[,:dkiO1OUB ,(5ya4g`^KpmsIs!e .DХ@ZZl['h脦0ʠtO! ܯp2r6RJ1 8SHטzNa\k1eC}wIr eqYZ!暗hQo+P1Й7!bG=~m}C9? h'`G,?ām7;`lOvh-} ġzǎ|Ao =hgsqHߑqР %4R2XZIy Y>ww64rÓqPK;KWCE@oIR 'Z:<~x (_2J-G G _Ѵ})vѕw <ޢ 4kw{a ?=۝ۯZ7|_??>g˅U vb@ǎ_p;ڠD=qz$²h?WH.w2'hQ!PƊD~u)%ڕA%9UGtsֱ5Af\F"ډ|pf~^ڍ2ADȼ< -Nqi<[hK`t$,)7Joczۗ'ٲnu{$*>g,''WAUl5 s-S nq٬JW nmW=H@a?oP?Ȝ}@lj~KA(<[pz|JNWR{X,DAkУ3 {\ehqHηwl 穐~byDYÒ"uh=R^y]P;+^B&}`B0-Jyv@<#"ArfE'i]{$wAL?y]uk My<;^ &qsV? I9+bHfS ;C; Lac4E 5& ~whk9$Dž=TF1)>'<_Q J-霻En# S]t}jZ!0^~r-5vyNR,;rvz!9vX?o-*D\+p"u4qB1bƮ~jY`Pg٢(puejjmzf0cźmq#SsO[l^,irpC?L0!36MqxlSΌM̋D(`Pz_~GD㎨5b|RoQ SZ1IY DQ yn1;44Rf ܡFSd8Jy;0;G{qh-Xok&\/ jx{j82E$]7r/Q68o̰Ĝ6zBƷ`Hea%|9K]JX~-]bTa,^Oaujhea* GJ (yB Vp8չ9,X y5*,&SVOẓ@a J>$~|8d{գGͬ[Yv˜Ką$Pm߀ w v8 ?q?{ ̨ xB=,`` 9dja@mnX{i6ܖ2[9JJ83*4~-X*J%,B;O.x<Xxaߟ!irIjQ4ءᕠK730LA` 6ǙQʹRd|1buy|ćk\)tJqWk]@q/b-6hZנ:)k/2As Zx<` <@PNl j ͸'DV ?%lJJ6֎dn]>JC55A34$W 40UPfٲ\^h;p^!C` BAF)$0q!@v(7Pjb2ہwu-LC9xqM\mC]g _sXbEҩCsrI W_ǥJ-%?64ZQۼTSxlj?_h$|oXPe Ljg(%n IlpKʊ_9iDTg%r=xa`NB3Y"b?a8Nㅣ5HZQJA'^Q'2D\o6םgy( 6$w9uH77CǂWXHVMU'_,)cX7PPAs4058^8>~C< -T^^wHŶn% Y"E. IDATs=+MAzi Tn zwgx1J Ěs+mNI?c͖m:~/d}ABFlT %\YPc~@\~i{Fn co8#| \ر,m,NfX:L `+*+8Pdwԍ}ɬ4=uY pBK8JzdeaLScgQeX?M#. QR:WX5ȆD wwN@ ] +nq7S6% z*vFFߺRW Kk-&?+x@qqO(Rš}}}c[6|'3?5P$PFNeuv*j5uWo8_'@n-L#dX[% @т g'ts>6xB|OV]&Cg8qЭ?v "rϚf2\6gsk/N^~vhZHl7Ed jgP{ CXR˦r oI!Oں:h*bT+l)mR+RhXhض_ \J^dˑ"fLi j'bwk K,ƚ?vScfw&'NJ^Xωx3TvHCP6ft 1$Kĭ"u)?)sq8NE@o0J#3M'BwA ,e9k_  ؚIIqڌc- #I%e*>On*ǥS-:\hLB"xB*fKp'gp;K 2Ǔ[JG-g`xuϔU偲nXBi4|TyTN"/F zroh+K,oh`g`i(J InrĆMTs&:l;8JtbDwۚ^oH,u#lh'^?8?: !ƸHd+Cp|>aѢf=̬ ]wo'cS&P#B^˴fRR"p>r))  t;DOkool}^y)R$?4[6b Iw2sAwCs YE qFK!=/X@wE;>5?~ؙ35SfRgӲEtSQHl)B%w.Gb-<5>^̿MJ̡֝Z 6AJ/5C-4amkݎuPO:NQ#y|.Kx|=BtбMyWjA^Ӟː2%)PHؾ+E2*Pg@4>Jڇͮ\"":U#dКg\*a j 6Aghw~-mAb-1*%sYӀ睡/8[,n90Df¨bgKeF{ w+sUTgx-X0o m B16Hi%\͒Πr%r< 78 TBY \Q!6ŏ<4"7*Ek<-KFACGS|!IS4mgb)|Đ3vhdzi], ۯk6b8>{ln-˘cߎ<,Zl ~??p9X8ӻMS龋`fQY峾 Z a]C'5 #E;YW}HI~"ҀmE!A=7[@_?yˠP \b7#F~uSЛ8)kmj$ۨ\ A*BY~tAp|@ 4̟H:G601ށQq VGZÎ;5\LS6rN~{\fz#,b<\ Mݬs뾩9-Xg:}Ir.Z h5K(]O:?"ƺ>:XnqAswkZ"KQ81 M#ͺ2d!1T>q l%̷@=[2e|*~-?A; CIȲ GRDq6)Zuyd*a@S#'WVx0,tY*5ږA3_;Q8Nx"o#ّa.Džr}{,YP6L꽃x.f;>d!_, Ʉ;P`!mݰ>Qwhe;WG;>M-B%JAG-ї%@r#t^H?::ΣbleόT4AA'C?ha(pր9 LO^ך5Pح #޲4YF`{_H;?Ά&&;[Հ~' alKi=ۗh,ψàUP0 ^ P{#z7ՑWLW^!9/~db,̠+譣 ?}\(Ljv`7k"E(U U-LK2nw5ߦ m "@pJ*ʮ`LM)NIR+)Z;`q2}aDPqdjB Em3krM9rd:JAɼsX@ `[) 3X "+F[`]wώCazAy9>0V ~F7pw|}`꩹:0@\"L`Sq!Z|GȖ58%Br?kg =GB4}ϔٸ:S;<%E"Z{ÓI A?K2P6$v@i P+P9ŜYo&x?88`/poyZkk$>p4s3Y~->#kA_6@uYd3,ȡI4JzisA)Z{G)xz/y/&abj|8ڟ#4^DR^۶.;qCHsX;MC@RVRpnp7?gp'ZR]]DA5=:M6씹Z,5[Yޤ^*,5?~R5KhQ( ?zNv?^6I7R}!mp m 6??=EEy\r"V5\2 cI-5[/HEd]P7x㮨EP  J)2:t3q8O˂Z75ݵK)t:g ȴЄe05??`GK֐~^|AA|+׮ nحFZԲE+RK//9Q)=rC Op8>?t"9xH_]{EwZ13"c>LӓJ/Z*0zG86F3$,c 70Pof᧯٢ e=mE;uYsUԵ`%}LH#㦾Q{) c~QBqvzH6שa)Jٕ'e[+}N3%*=Is(\? ,YH HCxGeA)5 H% @,G~x^ JU$Dbv䋫RQ Щ'cMd~3 h =v 4o`m,KffGh0%gj0mh7}dSU'r KqPilV+4@͓_0 q1r1&o'KRHB0![j]K`o"2f f8ȤyTЗ>Tq6b$|l1\^6P]baqB}1 QdFTU+@1#:BA_peWǨG8 Aϖ6d/ljނnj!6l K"%>F2܁<\n7HG Q>6{6{ V> Bh4qCI(X_%#?WT\Nx۩1Kfs9-tMu(gysN9:G Q<RIT+G!@_ɔ~q\amu1uAݢVdo~`CUj#h!< O-!#qP1l?| 'L;B+gٕqAs('wB5>EwYUt F6k̿ _9(T#|Ðw/}݀>=@ _]tZWq"w*9ˣ!`6%2P|nY8@yۜpVRweA~-e]D޿cL#'e }@}'M/-$ d6L, 4l>e#Q5$[Szj \ >؜2!Lܜ<5Aa45y9c`) T zyl:8ntSFAJ"qJ_ A3m5\qHUdj]IkˆID_^q:Ȣi0 ),+5[xjͲ6-YZz ;"LG?$3i4g*3bow' ݣ2*+3"|IX[}ՙK)yd^7(L5HUdz։cHC^5p ΎRٓ yuveũK B+ӂc)Kb⣟n[pC) !R10٘g:walRJvLJm __ǟ_,⍗s!31Ӯ;﹌e{ԚDL_r"7@\yGO &ܫN8>7.J$ L>m–&qkw6k?==P vXG{p( 5M*ThP=3a(#"ZXڗz䎳YpM5 4>Uoc^?Sb 6k;?ThB.}H GLPz5 Zጉo!_F.O?]\Iq?=[$?^P5)d9 䞾vF&WNGxvD킞$sɮnRek .@R%..灖O]r`;wC%+@o1xk :zU#Uv[s@(FX"sQEoH!)ɖ8Ia2^xBx T=aʉ`appfGBf$#/%GH]=;|х!Sΐ'zt~S VؠPݓn Ԁe\kUi;(إpi#K-s2-R:,,([Cd|MkhαqȖz|0y3+J3dž߷6=R^=CuSuy\yg#YߐWp*AW qgύ'Ƿ\$Q -4c#l6l޴KfSX9BI ۡs;vsqcF+la9l RCJ(pmo߰>V;8Nak 0Xhw!;bxH=r< Tʲk0h]0"E/t_)V. Z~c=g@DZ. KN1P;C-pg \k#:VVJmƼ5a6 PkKP KaWKuP#i@ fF=R#5f*z͖5RkD@1t6lǒ9:,D(VZ>?NMQ!t!/V8'`/ RO IDATi^V9g5tX~F ..@c3fQݶޱ /+d%4;#mcx̾>Qx,(LB䊦SE b((3"r^O; WIq=tUpBl[ {KUmHK!ma!G~˖C,LvG"/@l<2d ȣVb%)1@+5[B$3tosG?-R ~?A-ot3B'`mN0# ) YeHy7`85H~y$jw0"q ۺaYkxIڟ[{vͺ%2p5 1Fzn QZZ8x 4e(Ӣܶ- p Gg\װ{[9/ lTp ݋uSюMeCQA8p|q*"ǝA^ 0 1'*r(jT%sf=B>q%SECl˜Efu"Ao~_f-126~z F%&K [G<],&JOA/pD yNj/I3sQnż+[<#g1=dt +s5K<~K<)?nUYGS~,2ir˓{W02#8z Y88.޿,>>~t)kٞ\S['t/[Ch3#覢OJЌ" `]P؝+!"HyY2q)N`Fq¬18- RAT8FFyQh'xVY'OAHj3!_fKPt00 R1GJ;T{ҳ#YB'RâiE9pO'Є8yB4`],a&ϟg8GSIG0{bp+v L?{*rY*j-Ь穐/͓1LSWt{7%s.u^l70 g{@)eJ-0 AXX`NYB{jAYPʶ^F-DU< aXi FCA*`O:vJJE<ޠi8` vn"`YB-YǥnH'pmLqWogKcnOo`%31DCn0K8B;_rJiZc}H)O\{=C2a+(Ρ-sJuZ`9^|Kk+uzeY4y-Xu{C]7X3x/^ABݢ81bƺ ;_ߟx}tW >p6 C7IaG#-p qj? ?C>ڳ(+_f6/EVsG2F{flEEJIX_ $Z ^P *;]3!0:]cy PX*@u8jff{\;48a^'@Ս.0GJ&"'I["U{9I= ^yHh9S 1h@~ 0A78ý!gtKox]q0z-r<'R~.>na* lpduɓ0* dYt!-k!u0"yuXʨ, cW wkZH*c!0+n:- dt?2д Trvm.Cq ,!<%ђL ~k-~a©8}xC7G{8y5"A)tf=b+t52Lb)QvA9b:{6HcL4OdKOz"?iP;(;NF's_ H60={ yQ) Z:fơ|JXV<ضu|;=N>r<0IGk}xE|@=9;D\V I1e\?Q ڎ[@ihrZ#ɘb1N-⺆TJTXX:`JD$mSope7Mg]^ Qï՜z)%w3C)2TQ< Oq…3Bx0. 2I!#-MCo zFih젝B(O'PurX ֫JP <|Ic"˶WRN~뀟'"8OΆ[0JO.iA6 #0,5K@pM}E y:Bø4e9Ko4&vgkI" sd>ǧS4zXh/5{KC}yL `8FLX ZGRmԅ͢/t9d'Px` }vx'BޟB`YAM Q/7gSk.6G%vxwű?@{=adn =Ѣn ::~-$5q>wة1ˠ`L茡B?Pv^v/2{j%,#,Cq0[hcg;1r]B¼ᔆ}^(7lƑbˆr@tD`xCk^{(ے@Akm/hoY7g"_Vi H(5^&~f̹ ſ} s!) Jo:1\F #RQby`_轅JJ wzG32yF7#=8rv>)*H0t^' ɺbJ ַB/Ƞ!&r`: <?5T(Eb0<9AxR O5:ŅM({%r.0^x;u"BLD nά/+2\ AJdWR!d)qm@uSE;xo O#}\an|Jw`36Lz!x)Ư=#| x Z-|;'m;&j~QTk1*ߠ@ #)O4N:Az鵝'FOOuC7YԽF S !Tfθxg,B7I;'T q:Hkp 7 GAYn'zkؤ෺`ANx3lt指(۷hul;QXqev9Vp f`Cx ?ph<킈t`g0&vk\Xs0k c8$Oq1"i(!xUxpvTH`@*K+р^;}B "˥DS1g@~d-##p{όkܭ&X&%ySᚮ>8mdW*u+C p=̌cúnx='0.-X칃Ug&yH84Rnt!)fe b3Sr5)cH,.eqA7T 43[{ @naCI/lQ&š-@G8oƼ(-28("ÃiA : Q=>q@)Kqw,ZnjG #cܿ6(U(١g0r`z4\XEzx>q-N¨KǶ:ӘF#[ :E)Z(dQPPjԸs:wFיB=miiU s;̱)Q\xnYF 23|pZ}p@ 3|l&(:tpK?!??q>XKopU$ޱ_sopkKd N}ʲ,IP/_dDΫ6!$rQyX{';+IXH"0 ^oX]`tҵ̙ $w̼:1g?ݘQuIzɚnτUAdYx ? ^/aY\O nޢD gSXAX@^Z.@ۂvxd'nX 2z#T5DHfH'}Fy[5FYITx,?p|~݀3ѡH袛fx@8clnؚ 'VQ6+"/ya]|?A0Jn%E.˶%+{SCoI@_,S8f~%y8}YE ׂKqGx 5uTҬ})^Z,˂寐-Zڮְ/ ]CB$(uE)߿ðd+w@ :QV;v+!x<mIYE8)  lv='(Ivo(N]I=ZQ5[Q`@G_hXe}*ڕ]ݵK@Zk>ex@ "e{1C9_J&TuFYD :ad^0Mma\CA]k`O1x.4O4(݌g`--jNHP)3^ٱ [ΨU33e),%`R=,`O-J%NG8_9 5#oE/𣀹Q5~RPTcGZ|Mm2_ud:=Pin]l! ?Y*cDjE.^gO-ßJe(1u_~CYFֺ ߇scJX[:CYgo 3@aӎJT7l{C}WeNh^;!8G "+bfxzCh*qqJe39u]QMʴ1PK?~~E?* p /KJ5(1.ՔeO dJͨ-*0tHgSLd#͇ 4jQFv{q@%NϠR@c㏬qEKpu ܓx0 )>YZ-|^e[$EvQAcp>?aG@%K q4P؏:C'Ư_ź#7T{toKo!SĔQkv:B2ɲ E', $Rx8ptLY"MH@bn.۶ ^P}5P0u cP@|~/j`Y@h,2'H's3F:EHźx{|{o~p\ ֎ k8O*%L:s7]-Qe@wOp^xH@Rd>atc#sʱ.y„t˟'׀lϙא|ܙwU`!S&#yJGz䨌X[3sLs [S)HH:RĉBdpTFR^}` !5|d3T>B>QD0- 3>q0SXPcò.uO9޷Z0 ћ*^@edYH7h?6E'Ԃ,(o, ^Ќ|HY$;dGˉn7 ˙NLQL3 O)HCGC\D2'OX!*%V⌿Tu= sЗS~T:!edieuR&IGo"|>H&ey^BbfAy<@oQC{=3]FX /^=˒1O5L IP78Ȉ`$K0c)+[wm~q)($0 5.zEjaBg7Re>ANR zA I= 0e(RIeZV\bρe _fKdXFX#ԀWO?ѿS qyñ#"c='΁VRk +Ԏpi@ƶ/vwCj2Ö}_7`Y_@sK.˟4뷨wm .p+ )X=CLkGk; I5@ .R-y^8[SOCB ub&$^aR`Ae/+oX p'Z $u&'O0|%f.Z=ϐ;>?KK j $&<7S*=B8,h)egF9[-/H7Z)%]{p%-Ǩ o)-F')uŲ(|Kػt.TZ`lCTQ<",.n#hpbXyX0OtF! Qjκ?;h\1 C;a6L`r㾱.aG?a)K iEѸYȚC&;1U]簒lrʣf蘃i&Z 8f9[@@ȂI"Ri*[ƥ}Bv\kX8GURf"FЋXem(DhfzՒk^:b 5JX E=^8?>p@;vQĄ<5qfxLqRF,DupI3$^f6&|͖߷SE2"˯-%P*#n/qJ=c D%ЖA:}dy0.p%tlds9]&Fr/̡HI oؖgoe0 {كKWt;9q_֣f(fr -i-bii*ֺ' ؒkW|x'869-l+.;Wn7JS)UEbl,"Jg Z{PzL @RҤǢTD\,#S؉R̗jQtэD&iQ(p)@gh#ӑ܁ a1a4MեD/_d6t3xR1>cpwU00+Buzآq?qր]'T 0:.=8u\$mbJ Ҧ,(-fIAˆ[R:Lt5%~'2CX :;(1,#&8Iap:hRaRp8AJ%7+Bh9XO[l 2' ): ϛԁxj 51p` ̨9;ցHkPF?6 ?7n͗l iwd(鲯?-ɇ}P4L1\:9:#hfNcدEP9 FH]6puVhuR1 vd(cG *!sGD9IGbNo?{LY(52b?^pet7e}AtqB=]:'Ѻ-(%j1֯.|`%FNtJ)Vw>ːz;G˜%—:/ఏJg@)C?Aq\JcHTԷT2,}ˑ!nd=G hv:ų]AeCNof<lH;5x 4w<OKP8t_)'<~k[(Gw70/ TtE25[\ӱpfAQnt[KeYt޾RK3ݨ֙zr?O.+0,*7|Hp W#%3=)Gq]z6u%3sA(3u,+TвD dg(^ yBIYO+f[\(ĀBn9 ͛~ g~4i?Ȗ |fv5 ;=#| lF2Efwb"bflX%LlY摨xxݚ-]JJ}FSsZHαS wz=MJA8&X}ώD!6v_V0uq$Gp &/[>IkZe 70:XoYz A17 0V? Y 2ؓ9u /fJbczOJ͖-cDC;4N3 "-HbX ?zšaK[Gk-㦣ƥ q5[ַwpMg#ӄp rZH~enǝ_ÄEbٶ॒E#)|Ϋ=ε@jDRY%'ғQU<#{ofPP%/ V-u|պ 灺+j BEb Vי6`#9QzNjȍC*?FIVO_q4K&0~}*\ȲZgY >"-˦aA{ %C7"(%'#@o|_fK]7vB#<6ARǔ٧obrs_%;C5+X6EX gvBPIGցOy^Q.Y p{9L8+35@Sqp/󘘙eY=XV_P(d1 %@/q@#M$S慔:@@3Mtp0Gty0 *eYQ-"0HNf`ꀶ5a%IH9W٢EZP{q xf', 5- 6z^QPCi|t5. ]δỸv)9UetcWO͘3ʨ+/Ōnv5xo0~ RkyICG͜M맛B  Q<yMOEes;{Ke6`l0!GI0|RKADt$K3G!z5[; u Ry4`oA0[I3̪!BRdnWjHNOuUF0SսP5\LKHwfF`sw3*vBu24涫f LDH9L'ȺBcGa "Sx3NTaҧ@"QR կyJCjo-*'$r2=;yg^Ȭhɥd)AEԂc a"`yJ.gyFhvQ@n F xKy*" ZRzx^B r| !8tXjCOZ4t2d\AAwl,?Ćt$ Fg< 6C~41  %=I_\b@ qXGrⱳƸ);͢. B k{cBZ ?@Ĭ;:I$h8T R^}x(\3(0&TYqcӜMWر0W#&s>>>z1٤4i$ kQJ۽F0? ұnoX*m֝%,gr2_ @cgr))ࡔFN ˃k5wGRbk6뀔9ʱ*g+BOEUbܧK>We&,B8O}ndA =Dv" ?x;B¬!`9<"6M)\b>QGIt$UXl"Ey0gXb)o ^"?:G@ XS8ACj5dzTap5!P}C %ʌH_<֞ j =0 }>b IDAT51 nuhIH~ߣ]1 Ò4[;+R ,'II '+~/QkymsK/_A&=d97ZqP WLTkd2q8!dYPk9?w؋akGMxz.rxjUKCYBfMY`4#Cy x .?_hG %YC/%Sq{pB#7$ۂX#&=M<">5^,9P/, q=|_q#*G0yDyHyf:M(b`C<*ܺ4H=R:!b lMg)lko_RK^p8=~.nF9OYٲ{l9/ f?o뮞KV‘6<WPin j*FdAR_Zy&ZSLIB>#۞l\$lI Qaԥ=%/tԵ ~ugtOE QN;7J~3=2/(нB]chC!B=!ȷY:ǴB q[l#"˭|O* lƑeNf, )^S$a3._a]S%z_Z t_9_ =%7q`#ݔbnn7^温$Xrkqf NTeF~Vp1\ؾ)LĨ )0٭. 9E/fs8?nCOul^$8dq^lhsmAE" 6hg>9C,dߛ>C"= swDXR麤\?>kh bƞ=Lxb+O@-\r%4<%{W̆{~g_8<CKȃnHFW*Ec7!QxijT6lwu07[2RTr=ȷ ee [:ҁ(+9;Ӏ:֒x~09Bpl=d{P?ǡ{v-:)ɇybN[LR!c x5d9 _%_[WጲNJ>FLtu3W˙ۙM8lQWka꺂@P5T)3 FN{U}>R{_cUB-N5ΑdPoVSEI.(1q;xd0)3 ) 2b;;ObYhEФ)'`$#5Kf֠xGXM5&RքѤVvp1z:xDGi48'@' os_=hِg55.-1͌ Kԩ%\@sg gr gP0ut3{o] rݾP:3sx,(=Y?=i7B}{úT /x{A0\vW,QQ??~W`.ƍ pxƃA68 x]Z;#&;뀞о'?')\8' ?X RpLs&)d(qg)71w ?`@JiR:08:VQ _m R8qi{uu#e lÊu1PL!}fbXB3[۷oq'L;j]ZGg<Es\@RF=a4 B2oVQ|O*( 5,2'IP9v{ȰsGzx{FiLkFךK6+ :h&x?a}Xn(((4P@mOvoz5g$_H:T:IBDLӗe&.@a!3$_@xA:Y:xeuv 74q_P4dK@1,o8W̖?O8еC@Dn1:1NCz=>Ib1Sf|>1)+bnpg_Y`g01V3xA_ueV-^PQeǛo@K8я'ľMyzg6yC}) `K rzoޏNq>%jd@Ufބם3TMQP'e$GJ9ƽdaƈΉxeQ2Scܽ!T*Ło sip?Q'uǏ= ;zt%'+H"AkУ3 {\ehqHηwl 穐~byDY*YYʡ C낺YD@2&]Ƅ,_ 9BM3)b$_l$̀\=SoAL?y]ug My<;^ev乫ȿ I9+A()b'Mg:oyt+X(0}HMc aa;~p;\"Ra *#tc} cCԂRK:|@wGH+AԮE]O_7Z}H7\K7>B' _~D9; k;[ iy.W'(A dEi>6M3vS+%,\gCqfQ`fu~L=nrzMW0@|8#..~‚u ÛDQ㏏Q5f3&kVߢ̧bسjbNhh 1Cp2 `ݾAo glds)_0Rqn+ me-+Hdх]7r/Q68o̰Ĝ6zBƷ`IG/?s"8JrZ3[:» ĨX/^(xВ$(TnP=$&@O@X1v藼qܧT 3FƴrJSy~4h{>,Cyy~}gpdc™of^@Uw+n~h(J  XQ-!q{ǡiG@(zG ŒP; ׉~(p#l!XhYC = HѶ+:E|s)sT;?G Y gQf>[Ex=_hR/3d#:B.2I-;tT\8]BzI}|)HQqf#VxyB =Op +N)14*vqcʒbH"E_6RC[Z]7|,Y&ߑpYRA@逜@?A@Оrw7М WBG@dMy|ƄRKkG2.Wt1R%JxR R3 (ӌ3Do*?̖ٲ\^h;p^l!0VR CUh1 &Aiq @zt8[, \ڸ -(ۆ,!2eɅ C=zxz@-ptenFf{rrI 'ǥJ-%?64ZQl*)y|Ÿ/y&cb?~Z6(*kdR8C)x!i-WyIY.s:>K.sZҝgu/A2֊R Zqu"sn_Jc?hH#<%ɜ5M_E5AY.㵿p1gd5JU!Rmb-ov{DL.ܟaH1Fcy/W`cIrwSt#p3<|xoTEy aA1NJuP9~bo%KK4N u}@D$Kh@`Ww)H/69m2~Lgx0J Ě{+mNI̖m:~/d}ABFT %_-ue pGy㐙`E KIAYy{ZEw'쎺/uU. RHw "Y9~)vQO!j!i !&;|@)C)#6J[ u 1j#G 2OD9]1U#y PDi]}E]w'۲۷?71ļ"15p*KԍsCP1ROz:>K%Ѽe`VboН-h.pvB71SX𳃽LBbF8(" kP;S"ƒZ6>)!ܼ֥KCh*O\ۈCLrCb'M#=: jу܄xYrBUvo ܈T<+ǂ8֊~@bD<ՠ$Th MLEv@3]BJ|]9mkzm)#֍m Nx~`x/ےHC"YHx|c[g6cD}1 zI'cS&P#B^˴f(6xf+ayTZ7p8(o3v2Hl7H@6~K |My6l섁y'W6` { =C_ h D<6=-/=!sdJR$R}{GYWtdTvOסΰP%h^|y;IEtEVu G"L5K>U;l313[6ڂĪ<ƫDVIkvdM=CA!_p{$Z=}G'$<7B}srCq˘ M̬L2h/w fI0XWGu,p?Ghi@ж؞W@N0~-A'so05OAoPx{/oEn{ .Re qwOcq863"N  JXPzzG!N'XliNv4xoVviJ׋h5Oa:Hp7ܦojv ֙e_RZJWcEe)xuEhl8[\>r x 04Ap#N 8fӈ`̥,@=#gdH,ՃO\`y[ k?zDJ{fKwOИN-PR(-lo~y\3#f ֡tm 3JP(:]eeP +׎~tg}:zdM>H\6:*5 H꽃\!3w|BXƐ ##B10uxDcd_6m"&jdn (QX /5J*G&-0D.~ttGKxI|fE =% :tGwE=Ca`Z-֬Y7n-HOeQ8 <loc%L a/_ gxR&Ls|f_{8 \u P?)% Ώ?^/q'j?w%_tgsI#fIg]Ao]Opgɥz|B*G@TTA2-ɸ߽*9ւ`p*yVLv\IE9q)} ))2Ijb1Ek'^38!WFp.U Ǐ@&@PdqpнD^P^,U,Ofn8OlA=5Wgk4Q.b"%')ql1mQSHYQSb($wi:KH(v:M?Э=P񆧤HD@kOyxr9I$ϼiҫ "PZae,k6 dN1gVwś B? [Q xqm㌤Fwx9O?8GW0`q-(.+ S|~~%B⑿ F)@o: o:\6EPQ?^A&0HZ bD 5r m8?txB4=גchc O\LL`,u3k|6015> /"єǶmKNk=]9%sX;MCd*/RVRpnp7?g7gáf~Z+۟hK!nCtuND@j6rRjAly/gyROxR|jLV QE0)HvL"jIL j Hc|pn.ۂ9جtv9dIZhz0`=8'}m'ssWQW4U8nQ˚(fg {< Bw͍q6%M]>+ZEMGJLe ;ځvHIkaͲ~؁#?B ++V ZkrZ8o/|GЏ;;j.yM>.B4yWAet9a gqXnkkuώ)t:sdZR,'wh1O20Ho5)-Y#\PZ66bH-QdF`Cp#\× 'ހ{tcB77#3Lf1}#!IെDO|i<3X9;pߵO>iJM"٢`XޠDhYVwQzz(ʞLa`NԼpki<3{.%4I)!r{0aA%&9()m`&ڋLiW}yC%wr FzJ0ܟfjfx@u a`*06DJQU l β˩Q 5d q@|-m24G?^؏BlD Bh4qCI(X_%#s>uIhNxۭ1Kfs9-tʗP) ܊sLo>A|y07ҥVb-BA)=dVO?c낺EMx†DWirJ5|y3r:Ds"t3*=#/`x7y)4|JYv@\c\ʉdBƧ.k 9%)z5Y+|܈z#EQJaƃd*Vjѽa /.tGg:bdqm`]DJhFń(|-[F>P6<\&(;XUR ?̖P"l߱lh2݁>ڦ ~tO2vҋ&Y 6z­)hC5ZFPv#M[n@ Zyt}9c`) T z<6zT 9;v?ޅErEӸ>dp[wL[ WD~jieW)'o0be,їzD=)s-\j|jͲ6{suo|H<2ڂQŌR D$*S2l=ı!Ɏ/W8rgG Ʉͼ:TkSzC,ʿ㴠Xʒ[?#ܐy&Hc $x@L5L63|306})8Sy6ľe,K+7?Xdu>GPpd&FT~tUa,$d_Q|]fț+o)ė:#bgEɧM$?zyfΦx'ַRaڮ@hI`JQ" g& tD$B R]υqv4Fڧmzc>E~X*bfcCE)⑸<ю`]p6a ի~: c"ZግomtA#O{&mt5sL2j E*QӛBƘpmj l2l~t{$KT%&3nvu*O?%H\h\:-OSr`;wC%+@oxk :z=#G[s@(FX"sQEoHǐdKrT$L0 / x[!K| T=aʉ`eppfGBf$#/%Z#$Na{שdSv__`bdi;j/*ČvSD, Z8}\> 7 .Rjl% W C|< #9a1JAg4QSG;N3~rQSۆۂq) ]P8h!8#tM4YQBjXU]J ם>,2'"+/NR!˂:K״@߉o2_/; ~sfY ذ>֦{#"'aEY3+{y7fI6>/U;jJCE .{"p޴KfSX:vܮ;碝Ğ)e\y3[Xjje.TR!( e7,C$!%.SjyL9 6 ) B=b!去F4GNg}|Ṝ*b{{CYVp u2?!߅#R{k@[<1e#*Re`X8Cj+/9@ Epapx8Yy+ap$"z){?)ZC]bXjFȷ<H5vӂ Hة3tãh%HkIENDB`pioneers-14.1/client/gtk/data/themes/ccFlickr/theme.cfg0000644000175000017500000000124611346241564017761 00000000000000scaling = always hill-tile = brick.png field-tile = grain.png mountain-tile = ore.png pasture-tile = wool.png forest-tile = lumber.png gold-tile = gold.png desert-tile = desert.png sea-tile = sea.png board-tile = board.png lumber-port-tile = port-lumber.png brick-port-tile = port-brick.png grain-port-tile = port-grain.png ore-port-tile = port-ore.png wool-port-tile = port-wool.png chip-bg-color = none chip-fg-color = #ffffff chip-bd-color = none chip-hi-bg-color = #000000 chip-hi-fg-color = #ffffff port-bg-color = #000000 port-fg-color = #ffffff port-bd-color = #ffffff robber-fg-color = #000000 robber-bd-color = #ffffff hex-bd-color = #ddbb55 pioneers-14.1/client/gtk/data/themes/ccFlickr/wool.png0000644000175000017500000022357611346241564017700 00000000000000PNG  IHDR3bKGD pHYs  d_tIME;_ IDATxYk~~}aߴݻRÑ& j i"6+T  e`a߸o<܃ʧVi IOWz~u.;S q|}O;Ĉg2իK~ߞ?1<%2[ڶ&Cпw/CX,X,rY2#NBm`$qHznvR*?& c G^^X,3C!i29549u]%/Qpt,%r8/vMG3xFߌEAr1$*02'"ߥTw?+ؓ3Ht} 3sWH0Ɓn ڶhu$Sg56SQ:$rQJ-7yqO9' * t%uWݭ=." )%,Ǥ C,9:_ac_ݹ߁[|kێ~BH9BZ03x# uvs`$znqVrqgXk ˆ5&9QȞY9m#A }?u1M`̈ 兤ɂ8Z5q> ZXks_>y,uݰۖ5]3O/2ybQђ% eIH?t] H 0K~2qDy Fm+< e!9=;FzQ)B'l[XkǑ<ϙrڶ%$32"pŸ~{CJIkB[~(7~uGN4 `qse&}U/=r)A`,:QDMgyIb]0 Yd8F` C7Ҵ;iov5bna6󌪪Y|_bH]<4'#q(pv`4ւ-!?{0Aoq)6 TD? !GCd IPoZ4U×vrq~P\_mX} r q àiW7%iD)U} M<ȱ^r4aMGQhDqa!=8Fq80J>,KBxFP*w6w.RNώɒ<3X7CJ'OahH7S`]OT8'G4Mq4Cu[3_~ȗK@B+8d#@~; dn8==!<%CEQVGKUmI i՚0IӜi?$?eOҒ]_^_Ӡm{HN蚁Ҏ͆Yw{~+Mq}])%h@kqD8'خw"F;\\\;bִ]! fd/w~"NH9p(nKZMFxGUvw%]9XbuGH X B ǨR6J87m Ύ<8ᬠixӖY2GI)zw fh},pα+`̈INXoT0 ymJ8Yē1aСZ-mW3#j',GG'Tai8;a,cf~w}{%{.||0 x$b # <*d EH)t?$9SAM1 P2K3ShRaC2 T@k`4 kn@_X+Œctc,xaqج_~+.<H=Uam|l~ "r|?$McƱ9lq<;(v cE Eqo|G&Vw&~aKi "ZNVK5z C4jA P|N2KÐi$}OQ=asS8Y$/S IsQT%8!q#dX4 BψOF*=~¾j ӄ{gءCgGKѺi1 4M!4ז4Kp(ɧxS\8<ұأ:|OM<1fi*X#I-$}W ~C;U4k yp-}X׬7taǺ0=qMedi<88Z׬;ݻǻo7EuI^#H!GruE?m2mzp>I$sa@RC;0Z7 vϓ?B:'Esxڥ:ʮa?gXt35tX׳^_S׬1ibX`@ݮA;?f}EQޠ|KCZ;3sq` $w~s/o0Pi)A CUUD2%ϗ: sf R )~rdšXoJVVsi-1gɀ,Dt4k!g\ox)GG'$x{ ٓ ubƛܻ8`Gq@qlj-/mw19W [͎h{lq ꆾx.K9ʏI$Nʧ*,zfq!=IN >˗RzvO};X0S7XAhx>8֖OB]WMRE1Ro?(>]g!J87>}2 +[(g"D|ke~'Wp}]q+ӿ>тƕ [(֚ek8Z#MxЏ'G^}!= #eٜ$I/,f9Ab-`fSCB /0qؗDQe'ixx 0/|m>OOvۂ|을_Pu1lI㜡'C)aglsr(M5KR1n׌f7Et2qR [Vc $ A@hڴ\^>gZqrrytؖDYvL,P5aZksFC͸w`/_uiN37X$xG}OӖnE9)JL SqP)@0v RU@)G(myF[hzci0KI$in(i[YrB!xɰ$Gh#~~ L-lqt}mm;GУ_$ cV./#`E_, ϯiCQNgk(ѣ-ša4 =z0nM홤1MRU-("s<' CHxfJM8œ>}?=*-AO#ӷݶYA')MBF:ItLi™em"=/ɲ$ږ"(5 (L٬+Y6QYn;AIaȔ~(_Gw;k$jbГYXM( haè{3vd_✸A+gCG\kvۊ(xG">{f4=8җ~*8==₺8jr̖Y N3 (JG<%ǞH)QPKoϟp81Y,"}," ZOivRYK<}rI$Y<e-b% q$iRU m٬[w1}G#%eruu 'MgayѴS gSJv!BRy!ZhуTlw4 %M{8{-UUq8X,i3* 8'd0#8 ‚hXMT οm`(/K^I<2Zӟ4iz,_ʚ?|]^w;y㬇=]_4e>_e9qg;0,)ozWS8AN,_#X-9k>|wb[I8@׆dqM;9a#NL7u-Á|v XOUDYЦEaYwc٬w\^^S=lŽ{Y.? ,}GM>Paa 5M[aLO(Mf%IɀaГBT9}s}}M4})'''+@STR?4K#VG3pdYBih3Hg$ e5EO9=yp(g+麖]_aum+Ĕ갳3/;b_ݐ~լVtulx;"gО&b=FӇWnUL l7-g>&kW|ݾ莬 IDAT8=9w%QCImdO7KKhj@zΤl6 %Goǧ =B=(zX1=ipN/Co#>8c@wHij~ ,'t+ʖP^b$nn&>EH1-t}+8XbeF]B0A 5趧ZPGM[U G1Ҍ5ŏG+58l # g$E_uu-րRy Fۚ݁)0~fĊbɶxED`o`PUՀ,f9iQ%N|DuJTen~t !fz}G Mg|bE +.䓆{$I0b`>;W e4d=f=<rKIW W)rJ) uCtmHv̲%Q8*;>/o{gADvfs>Or٬ ɲ>1L'OzM)*-=}FEdT@ͩ]2mM|ӁRtmKߍf 8cJX s dw= m!X6 i:FesaH3oڄ$He ڶ&'m1 m9 C3βٷx !>}?{\׶"4@r}"W>+(ywbD9-/^Q%q<>V;}(L xx2"f~ȮzIPT@(/yITc FOSge{QJu8R?}+6 ~pX,fƛ8RqFgX;d ƁIDؖuʗa-X_ܻxv<_#(1S |>_!npm:8G)8yk1(Vt]88'I2 b[Y2Dy97{,[1_5v= O{?9 #}[Ѷ%#eҵOAL} B''Ku] # b ?s̸wT󜋳cQXYߺ] c=a$ikmZ0ҵBL>BZa ?9atԊ5鉩J4ϗ }7&m zvx@0Pa nFy>þW 1A(q xʢ P$ږ+!Ps0dV5ͺf'C7sfy'} OY֛W Yʛ>8NuVN0hA]7ioq|ݡpذ;!2>[UsVki)/}Éld>ʛm+
H-Ui*V&K@]BEOs:aWyquơzr 984'N%B8ʲf}sయǞYrrrDg UU^fsxJJ!=MI,艖)1#}ƌ8u ,'uO}Dß8==Fon`1?vr5=TRJ'v'Og?Aovuo8^=jZ|/fЀIx8T nm%΁bi[>PvM3kDaB:ѣ I}P%)" 9>n>7+$!#(1("N50v.>Q8G%D,?7YIoY9Ý|UYU]mW=^ހdyĎ łUhM{#YX%v㦫**3g`qnFu/@(wO"{#xj~\}<n8YuRSM;#4=թG QtE$X {n {1RW=z.x껔'Ta]4 c70z$lDqADNu q!}x'_G9iR^Wʑe ƜRD*3Zs5ZA(4>=}cG$o1EgaWSHSy޿O)9΍<ܾeF>W_G^ޒ5{ADC7Ows^\RoH ٘ٳKV r1FS;9 c*Nuc݄"h%:ӶL!i3  EWH4po<]8io9VwgOѲi4펟+6 ~21a]q iҔLzGD:aX ;sΠ#%͈džQ.I)BBt!?I2tf]NwL%!NXӄ(_g+ BAYH¿\^3a|||$_BU[,q0t-F2J$"ZŢ*>|HSO4u]˫Ӵxyygkd# 7}GXs!Co%}Çĉf]XA۝8'/xaǁ7,V:EʈaF&z`U~FkcO]He v1JEclXXbTi?K"%:b-y=?c`Dɔq@3 S1&$ O׷OYUUdإ\=6Ze8gڒ`OmmSq, bh,KHŋqBLtJ3 =mwt:u-BxDSQq`LPV=iXam)"wglkb-j BWط4ՉXS+t1<&<a{b8"p3)58?v,+&9qޘ鑦=vEalǢ 1ݗd'\$d;EO /Ot]O()Rt@U؜LvO'-MwG8+XgqwA7N=yv?5 HRy,^̋eh9 &kL5[cw}u<׈EcY3=U'MKCqu$ !gYV́Mi(qahhG4,"p}J4se0;$c #MJ^ŋKƩŶy?G[@:rٖ|ubqp0t\^^RxhHL:vCKTm;??5a2qh##yf1qnohfʾ'sbTHcZi BZƆ[cq野i]ѷ"₢(>oŢ%i'qi3AgIf'N$Mp:Qzfi:,@^"۷H)<wGc UJ| %cڮq#N]=LHR4OL$rOX7P|(HW8cH, d #? +C=IIhNFKI.5:5NnY=ֆq"Mc%ici1vdy| |@TRa25Ώ\_gm|M CC=O1h)&EF=ChnD??k(K=m} cZ/nnn(Eq~'Ex$R1XׅhM &zP>2g8UwuO߅uqGмz}'^6mWж5IX7-u ky<2{~y3Q q,2I77_==A,ɍ1 iS+gOsQȲL5>,ZS;8x${:އ\GrVZ>B>}"if>h |`KE0ydo;̣PUKSbkcH3^~4Mj,K9K !. 3,]% EpqQ p"{A?rwtE, )-N1`0ZUL[ %R$k#G*5?#M[ʲ1ཛྷU Ynh$!ϣ캆rOlOI,KHxO1c{1eBoP˺ @Kšllg"8NfZooq윋s2C*zaG^$Bj M3 e*,iV?g|G?$v;`jx4(-4.\\Qag՚=N&V}#Y8)10 IDATZDQf%MdiR?>gFOv|[/ƖL4MY,HN'0o?`r %OS-Q<-enRYH TH{zlXP4u2##.eFiCo~4MX$I1mz #t`NG"^oǸ0 w1Gg|SЁa=91OH AW'mXKt}{?cDk|@מY@"޿u#Erv\;!Igv?>T[Ofn$4:\pY91q ͑Ea;&?,+"&).!T6J)"=>eYI24W7GR_%YV6ww,(ʜ"H4`iIbqu E,0@8Y1tfDC8?0lም&qa3UBԑJGuxDQDADu=EiQUGƩeQR(=_S8d&&V\h;2;*3 R aTZ|zX3|c3cpSĊHLkG,728QJٛl~kH?9DxWUTE34_1fqyI8 OH3/~G  /7T8QS˔qyC[b`}KV 6ZeI(T:^iK֛$t \ BUc ri5B~h6u q@%h AQS CE]騵fP,SQ!Z~оͧ;9V1P=Qp~ ᡩ ަd8}â ;q<vء#LPjI8A*~3v[W7\\2ϟ?O'Ꞽh=2N ~=~ Q#͆&6ĜBuSH IlK=!dP#]#N%΄+v眎M0u%)C;$ <h Uՠy+.^η GG5X!Ԛ<]qqxv0SK...gC 7():hي,)~R׼~sF{)y )ckmLXa=V(ehMtRƤ&(7(@)wNÈǰ(UAdr{OzSb G(37h2yΗ<~I;9"lsžaxĹ_eٖׯ_S.b\.ɲ9:HyBGz$3QډNdYvx8q5Sg""mRIue֡j McX-7]\,̰Sàeʛ9^!>hX$\n }IrQfaCv(5uhLo?ϸz9͋yg金3N}B),ԑƎ%u)ET>,s{Mhils6tKeY4RqM_sss@eZ̞5Iqwbâ`{ģ~8q8Ք(q~u3,VԧHm"%ZkM?4<;"&MEجQZ"uDShT ~I ̈1%q> qͱ L!jc|A!yk\]]l@T,hGL|Q"]W_}ŗ_~2le:..<)CM/Icui+,5E0)覩I8LgHO$Iō푄Eט /y(e~(%%Mky=G~dD86({ Oj۶|q m]ה;9۳; :62-iǏwmJ"bZkct)]7iɖ$pfyRa/f[mW8UG<Ꜣ8h.HirHq~~s,(X? '<* q3>" YiqYސω3E"}F$/n˲HTTG Eȋ&4:IӜ~ag\uC;><edb=u8$9>ڶ36 C/ye4adغ'T?_] Yt dirΰXlXbM9pwGRx<{KL JKٴ!s Ni+64E+zQ0P>id=MwR"Z M"w"2I&&ƩF*K^$3?"t` ?u@)PQH#=V3"X.di!9躁ӬVp Ǻ^N`)*0FifdE)uEZcAL@g$ReO7(7@$8!ݻ޲\y%͒'|˹wDB]=s bh J_7!%cS㞦X6AǷ> ƨۿ⭵aB& ZUUpk ncz={Ƣ<0DjIIH}`UL"([I4M,ek.ğzdtOǾ252M4MCVs*@J)G9a 5-ōhnV!w!KB_5BppY; ] mƚ~81ٓ)W5HL'{0'dtLf`?8s4Q 7z./nÍEqfu5kCw^a M=Pw=$vi3,i i$;6V+!KJ J?ueٓGoܺiVXyCqj@۝hy=x$Υs#c Vp8<2N52HFeig>΢# W<>(JwG ]ZzyŢ us~P9;;#Yxx˟nj/峗f,ך|f ǖ=ec ߴ Q,0;cfT:=gq΁ $gED{cBY6hoۂF\l"=78*X?U3M])i^/IgwؓA3dmh]NcMH>麁it>3MEp"Eya Ejy]T6X:>Weyj=o4}Lf 4zQ8̬a3'P*E1O/%NSd$u=ȹC5(,ED(WAZH$SE]![f;qLuDQ1 9Gq gF}d>⻤90!DQAu,_daS}Od-L~5㎬Pcp3~~W'׻aG0ً_F9"2,7=?52~L.uLY.8 0=q}C4LSk&К1 uu`j"anڊǯG #y&PrIqpޢ \,sbu oH$j&t>b$Dz)`#z֞$1ř<9l=\%s!;v g CnӛgI(ơhLd)qT85*IIΑ~DIߺi>8.Y Q UGRa:4$HCo̹{'?h{zEzuN4(63]w 0diA?Y<gP1u;z#xKAMpNm6lswwC݄cG߲ZTEY,u!8;/)o`}e$^QNE,6Жc7bq؍,5/?,y {MSI*&[$øN::\ljJc4*7  ̤z7g/&!sHSAT4sT6Ql3l+q>Chuqv"rʢDȐ*30IIE ڶFÌoC\tM'˂4X;YKر:~f?G:>9l^=07+Xesg0ۨ@iA?cy٨VDjbs2ہaȹN|]Z=JjA`g&Rj]Ab'a+t݀@S4HА1ZO=yRħ]V@)j%'dQ M۶I3CǚLJ#eŋ, ;=RA''(J4yRg]^cMכrp0Vĉ"IqYbMXƩTAgڑ,ٰ\nǑ=9˜Ȳe l'ёJ(»7xV+~O/"|EWL&`2ؓn8ps#U#)/BZ6U&48qV8t>?- QSOa0PQOn,iTh0n j~LDQ`ot`A -c; W@P"C͘e-=U}BK֫=]0+13;߾@*Hӄ$'M`ii02, H`E s)q?MBxČ0cghEI,(ʘt蘧` c~as"|Y,㔦iڀZkyZ!cRjTsHیt]c$E?|jZO-M#þ!I$&Is#1ڞ(Iɷg!ڪ ub&jcmϩtF-) =!AOS7LeeH *j{s3gg%]?K30tCdZnJ 2 X'L.H'#V!psѡ@nHIF٘Olg ,-8(`;7緜'MN$(Es<9cnkvfYX4MGUU'MJ޼z1#mW :JȲ3'>\t: ^_3cʒn)YFc h@Dʈ챵]:{QBήQ9X, VUbl֊$ h:G1̗H=y` VbK5c 8MplC?J酚N^g%{EuGqdGwӏGT'x,j.A:v@J cF}szuOH&c\<ht"['ChӀp Pߋ?é_#_d7.Syf NlbrR#!H ZeO'3Y&32pSQ4f)`:|4'Sp^ﶈgqe;lOxFf*T bEI/pz2"v17{>á|˫sT1a~i&9xβ*f6,saRby ?|($@W'NY8b! iOOcN՞:PBzc.66ITX-Kt}EOwwı/$ $PA¯@KHѳ{^ \؋9rGtiB\k!1*8,Zj_Adqmx gFD6Hs_`šu&t eȷ g5 ^cS4aٖS|&BdD-$d]R e(\.IGRJPpRc F+"F ^L2a XٍB߲K8fF,sa繾 MջܒYZ+vɓ'3+.U7XVHe3` B&H   KHAmw[UY5k-o|5S#zy"ڦgK^ zʲ@#z)tȾb3i7 Y/J_p~ƖXlGȳ-(qW?ks{8F c_s-b6)(jd"ZwND{,g6KqtC+Y#ґR["31Q\cFićڰnx-(\`M؝`ZUI$NrmzPFrYvr,sjH0F$ahPSWH,(at];FqJ I9o'pvv-OTwGP̊5 x?}*-$91LJiM^t⴦:daHUɳlw?]?_l&FZ )Ey8rw0 dYF\^lq$Xra, 0i~,zNh ֵ{?[W<{ Y<' 3>)ys{c1b"i Q`9/,O]ut 9bbbD%\dDBKdVFqq84M!xQ(%)qp\Wx-ԧ ĸс 0*ń1طm-]Nm,q,08䃈ME 4& =Z(/C2e-00(ICr/*[?_9nPiG_#_~~7>_7w?_s| j%.R;4!G8ޣPA{5];R VKkŜ|MZTѴyS$)bb1WhvVzMu8L0JndV؅0Ig|b\)z`TalNAFڔ"y9;6FB w3y6c6QBF+44Ց_|`?^stF0%c* ^2cdV q,0lo^Q6/@=q%3FwX8dɚ(]A*E7uq3xM;h(W7P8&0I6ca5u]ssÀbFlZ|=:pޒa;'=_)Yb_*ȣ4^o??9w_)s~E욯oʬEia4'D'LfŇ^"|K?X՜<;'Ϧg UiH 6%1Y* >d3ہӔ(0J}%cPNbFX 64ZQ>FWi^gx8X #mW%h䘑nh0_,hICd$)^I|bp21C$AyB12<=ζb AM\b9I$+rqO?LA=E1'3V'a)d?A7&"!,sD#Wx<jxs؏Q@)QEiڊ3;ۻw$gﰭe^\톗/X|5Zy!Szt2BMycbq9K(o'N$QFQW-U4;gm#=/>ރ2;y%ڌC"IE c)@z}neϹyd5]׳ٽFOaAVC |1gdiBhՙPǩVKfV:M;B1Evz m)"l:M0<}Wܽc.dB0~g5Qڲ^ۂ?i_2-29/o_ ~pƳ+d2|.b{F.gq ^uR=*(lww 'O8XHRM_չw r hP@'~-it8Qx739ۛS ߒ&V8P5I"4<[kdIʓ$8`^rEB#u_Ʌ(VX _Mӷ-ZɊ}׃0nG!꒦ߡ"NfOPڟتh{nnbR"1(gю ڀ ~l6,w#_f{|- q($Wg&J"{,Kf fŒ,LJNtgϞqq{gwٜ0EQh(dUJԝW?,sfk6kkV5WO%~kf8 21nnab\N Oge!(X]aL@SIBՒ0ء'bpuﱺHvu],nBA 1=x$F;c R "ey jFr5 tǁ˂ZkJ7^nLei%?tPdق>vzS+ 0xq{{W_r9)FLX2z `jQxrU ڧ7޼ywwInJ,B,3j] _} t'T3.?V37 R5Aщ#&!MΈ[T ԬCx^L%{4Lb38MuIb-s$OfCb9?Hжurq5:ZQL˥Ní" b>_:K;-7'rqf$;'M?$#zSNܢ:q "/`T V:Ãnq^Ob h񼾿efǛk ֫5`zV|)aád}OKߎ`v#~0`sfvC(0Yh ?$es~lq8ZgKihڊP,ggϞ'}pYR3/uTZFZ[]-lo蚚bq}ðB!;娛#Ǫ{nwC.njpi~opp}!x64DI1IOZh[rX\H9W {% "b#qk%)Bbfu|e߸&QFd`td\U+߮dA\eD@Mq쨫 'EJ~d3Q6G 1+W$i0XH=f1#2)Ge놛6Qry| h-I K>C?-L%0*H"Y&A{N@~WE_Hv$~lI#>8JȢ$UB B>xQ/({K鑮kQtwB)_Sҟ'O}N^i$~W?XnՆU;p5 #ȳ,3nR6]?A*ӌ9Dvc(ń GQ5'lQNymiA CEU=%xާ̋9MSK~ߎ$I$@9<ГEVeI]xAvQU%^=pwr8vyr5)_F &eю QX.9}#@h E`0D #Z8Y;iJ\tW|l]o݂sVg).ۖ80w4vo'8GWW5u9aClR` c@ qDO7LEe:,K޽fYHzGfu=0sFU Fw0H/,kIuDj-Pvӌ y`=|Fgl% 3}ûW):Ο_՞Xsy{L7(aNxC*} [ĹE"@+68с*u\\\ɠn:|uMUmi q$@%D=-Y`xhF<ա%G #G6,k{U:7œo8Ɠ3\831hCw%E5%m_)MI`r5Cg1[|Y,s~7 ;..WYL['C mw$.8@㽥Kj#6!DaNe'۷?S²\?0zF,Iv$3>ńP6 "%A&ΣxL ˳x{KH Y.̲xb0D1K;VX3x?ƣdfoV|gO E7^en+f٩Ǭ;0H`G7L[J|y'<͞łXʢT>I&E.b}, w F<||[GZ1*  =X3ʲofa哈'#R o;i,VE,˜s|i9D|FJF,sibMv%C 9Mm Lnvbᓂs 'M%; #͆whYVDFéP5#}'ߍ(GGӴMfӒs./3ht}CkE20]L(/Te3@ϸ7 %M hwI,ht:є'l<0 =ԭL \%&l~ڎ 'w Hts|.,nQNv ءep˳ݱ7xPJ[fK?1T~Z%T_;2yC3=F8"dߩ牠[A9jvux6I8:ry1R:{8NFaҷZD!!)n((ib易0 Ll6{X'HO_<ӊ.ed7l6;EryFߍl{WdYƱkR N,,HZB~񄳑n,-wwقs<mz<xyP$AAdDFT=5D,VKJ0c]cGryFQ=Nd8t]Cʃ&MStbGM)6ﹹ;py]Zw!8P.o߿g1_q<ָ^x?Ds 0)M72'д'+qLU q$c 7o #]k; g<ޟz<%*0qeH9=-{i-^87P(5!b̔ed9XZw0X7 )F Jk1j,`^a$k({Ac8d !AXydq囎a0}smf'Mn:@ai۞ |Z8!-ڀc]nTHX=~Yᑐ&C..DqqVkLg3s\ o~|`^ϸXX. 0k&) LFX:޿#K<{nY ĉ-wYҊlR)ᐣI ؄Q$ر\.Ia Vx(*88= قs<4 Tf&,ϱܜُ¾oO^}4ͦ,!C^;YF$Ev!vt6wT6$y9m۝(ց6VR#ggkgI&Ke#I ]=xa ՒϮ8_ξPULv{ |G/!NFJØ,XvIl.ȕ9}$:eDoh^8x_0t5}pvvlmLtnCя{s4># 2=5UJ)KP:ђGGωwq^ 'LH9V .Hʗ"S%yA/9vT0I1Q K=x;K|2FI@YDfD1y69ha"ǔՖ! XLlOS1}/q'O'F0~OhoȲ'WK,MN$Nlt \.ŇÎa8C&e}qIFD I2xBC'Rt7JQpB(KWcC+DBXEz-0&U %d+!`g0%e_uf^;V t N{n W~&3'G:[rs}#I"f˙_F/^>;ϙSܸ#Mu?Re# /d(ZM8~2YJ`̔ "LE1(a㎂<)l%6p<4tØ(L(&%B)11l;uG+s".Gk-cD#[8ǧR `QmzTRzo~:5pEJ1oZDZa4du$)|hFx 0(<+~H) P]ۖj8j <u=M'MrN yVHC44m5UjIl0!I#aOgvlh^J& pN`pwoPJJa/ XȲb",vޟR 0Hq`D0Lk=qm>#LrgCfsϱOC1%h Bz#"4Ӄx-! P@0}+~=ms`q6s M=Xv C`}؍btLY4M't0$Ibh˔_A6>~djzN^i!нv+ Oo|adϴZ_*0 ATOwD:b=  MLDH1[ҏYMIZM=r62ӒwMjP;xڶ/QJX,d7nRI< VM仧4DD&ϯu' #0e,]3Xd\܄q8X$oLdʴ^Opylѳ^=~C :E1aZmy0=qʼn96E8 oyv ^:+RY<aHQjFbцӵ*g9&1p۷儤ON$?TkEH)O~G7ve-,ir&?Mi"Q0xN.Kb\6;"bluɱO?@M hh3= bi"Ba?T"t 4oeßF)a3FgJL{z&aG?Uok[g=v{Ή&3"2+WAB/-%_' $#Ls-[E5TUMEs}vُoY)R \s|{yq:m~ x(Ud,V̋&?530Rӫ,@rER"L~JY Ǟy{ -%/>_{&lxu|qAi*F, +y :2OVXcj?T,ϼ';qJB%Â5yf?${vnx;5,3seqIcqVDj)U,;203Z[ WS#sW\(<)gdz{8z4E#K0NDiV"ibiGJ*$- %=+]uw^V7s-Bh l2Wz,aQ%mryyɼ/@+9qEQSkJ!0 سjW?1wgZN]g(\> ?N֊ZvߐNym.\IY$YœRekʊ_\I:BVe)!շH8u͓ʛ9"ouMUpaErʈf-) {UB&o!ZG![F\.%qϣ5'F)Y&E J~>_kM@QJ.(l_>?1"e欵xb̳ju)[P;\83O_#zOSo~҉ Ś=։@gKHMrg3+ɸTqh(iϺT Kc=ʶd*5EKYք9iuhR}dj $vq"W0J~Q޾e[lryi/#[,%%#9m4.9GfdEƖ=sOх)-u㽒K|$a`bSΗۂyqd^0i!Y'[%xJ$)܊ۍO=Kx8O^PׂYmH .3:WۈB<4Z[ qǎD23慤)sS)< eUpOӴy2-!L,~$D 㰦Bk˱3T5Θ.oʍ؂D_PZ j@YRS m;.釁)\j>4~7Q8'ęGLc-dYX嵣gI $#M[ps+,dX( t8*g=(Gxbͻ{~O)\jд Bm@Ug-g,e3#:F[T$=OZs"]q*v5! ta? ujUqMk'ݻ7߿d~f[Vhֻw2T4_1]ޜOg GSv,1& ,7Ls XSVylWPY6 q$2|'y5M!l~TuE+yv5f:[ЈGbZ~+,Iˣ菙[46_₮b umi fc@Ayŵ#>\yBu?zfY luJ^V&V͊A"֔jCG7w,yISo`ifռ`=, ~1 \\llWq%_:ƩǺD9|m )% u8Y|G6DOG 5yq+4%~_goWO(ۅHX-KsIO*Wˁ4=st9^R+"<$$aH)̙W彧N_k5/_r}}!zPuھć%8)Tb4eb>MuO_p}ᣏ(k:IJѵ-N;ʢp-g?qޣUI(ʘe e]Q3Np{xH3(xPF!d-:GQWyc3=W;5}O\ q`q1f`3+,:J"b}Q!F){"*A) I75XW`Ltiq9v0Mn2H!k(#^8 Lmn.)k1 ԄGRTrt%D|蘖'~ ?maۆ+ȼi]ٚ"az]0!ڜ9p(,FX[r3Đ!}(U–F \aNM`n|7ζu~+Fg=cCm.۟rQn灡p(tps_+B*U W7"r}WM )2:0_K3[q% QWJe8dω-u% \QƯ,҃Gbn8=z*q㰜Zb'78:OXSRU+ G qVQliVyqb:c"=$J67pJbjVoBDݏչ9yLlxzŇ7F$H,/IM֛6a.afPrEj{hQFB^}z{ݻ{*q/ }vs% 'r$rDzN=(!ʶ=~6<<$S{UpE1:IfPu6kCiTg;ֹ'_тt?FgdAFk+*MYfǭ2iݻ;&B4UW|%gţ*5$_WWac QAJI((뒺2ncȌ]({e;=F[ouݰ^{[G${]ZެH/x|?/ٿ[٧ֶZK9zR*3'O~NDƷ!fk-eZG]`2+ZV5Z޾yxx?J.1/=UyIXp.)Kcp,Zb< H"ZSnL x1JD;$BPLN4;i\& 죏11 !;8W-r8WS Ÿ#X>1=1!J+)pYv}>S)s69Iu#1 h˫o$R(-CQEs: .tKӟQW+ʪA((g9ML y(P((|zf+;!m(l2e.ʊ IMRA"(;sܓY]>`EďﹽZySWI8S‰ $Oe *v$s|0fyxy&鄵ɧ/+o놛XmQ`|p|_w2޲lYkvik?q<U35\^x_bsW=]GhK =A1(saVeJ5 vHc5 vWPU$LJNٜ&ۆ9uC-9yY%:9o? !' ֛z^ h%J;F+1H~pVLUuO4Eqi/09>MsS2≘"hv=si66kژJVƬy@i](J V JYJpl@ZKG{vݗ?kזitx2y^yŵ#+жXM+%6Ԯf 38Bߏy'6eų٬nֺnl6|W|G|i`l%HT\}.x⻂Q q^<12 ę0򼅙iq.b۵ޡ29*We+bi꥔]Y 7_N=ݓ,X#\%;C8- LgJ3O_ gxA?c'k.QU8i'{޼ k`mxf!F}(vcwaYJla13{R@-+jX|YSDkvp^НN|/ዏ˯o|r[tݑ=J5gR[^kprǴTN'+ 9q<{f-W,Dt4 82TeY"ڪ`ފ1ڶFb=Éa8 FG5/o0JNLGCӖքi4{PR]. 1{KVy ݘS5Jiv(TØx.^rB(UPEE㊸V+. iqVO>c/›"b.3{/'cPP ;~`^"ZSM6N=c;޿gB6lw>r<9= Qnc/ ±ޮXmZ)aLAU.Éŏm)Pu6G1|ـl?GNŔDN#nn_Q7'?0pǿbw`U, mz]Dy:>?x-PgKǫO 0m%q`|,Ya]=:ۄ7~{ej],B{ c V+Vmvg[bBR |WeA5N(, Sʘ.ج24&wc^sj*/x߸pA尻9jU ''߬ԛ-,5BlNsuUv"Mi2RU-?Opq^8JC%7%ZD >lDBhhFcJժb]n$<>M]d7sR響b#!hgt˶; i=$%/^@q< XeDL!,Z+Fpkdkkv:my'3ſ<~nV_i-vO]7 (m4q:,.jCka gC3GV,8$>/z\AϡyWWWh9YseӶQ+k߁vض>c܋ʔhep&D-XR$'92i" YоCX("x$Q@ p8ϊB*8f,4¦m[gJ$ -YJ(k]CYVЎ7yxxb'arq'%0|QXp02SEQc=)Ϯ]S8R:m~ktU=`r0mK8 ͎++pӑ\#+ JHJim 31'TY7k|{/)\]Ow;GTJU.s)c!ܛjqy P%w:ج =KDYZ ǟFB߿uҞfַ%.Y\] B{|ŗ?GN5*RXy]'z]U@O=Y_sIQl1 lʂyzV" _BߟUq)SG:J%cJMNdZzJ{46*#u˗|2D-zjibp'GbQJ}- CՖITW(&RcZl X*膯\N0R7(hXUtGإg:p8>QfMIˤ9N8sZ06b?Oo>G_{u8G?n?>q↹hUϻwG6-ʉɿ1=Vn eEm>i@)ڼYk/oa\{F(Rǻ'|0n䣗?@.hCY(m-eQH9UwCAEQyq99|-1J!`#*&^dE1AcZp))*mcޜSrgTA#&ڦetݑw3{T꯴Jtݑq78v1O1ZQ._үF !O)@Q~ҢjϴK蒶ٗ kX.-mb]Ec\w}p<,Rwەw鎁O1O{$nW7O }_Q-!$./?|2E9COH3:8k"1U 3Ym kͿ=Q+`[s^OwrMt٧h<b ܾ1m[v+%.ްBH+,LHg4{]/vB{p*+ e!:3 (`ƼF#ueH˱@%ybHfB󤴜kVy eɱX qĘD3Tl1|Rr/6p8;1M3)BPY )G0(OQSD3Flofj7<=^1Kq@+Y5­whUb\ũKbH5WRtqd^F@h>NI,=e|o <+=Pm3>η(Q[ e(ya`Yf4ZS7`}isJaŘ221R߻&FCnٮ!V+ԓ@?omsMay` Oh=2ij~6OLJ}`;“JČO8MjV+V+iwN.g`N^L1^iǁ{\%XxI(u9apzDZu]c Ip4LRRcZIFtHQR"%ozbrkQSo!c$ihHH3>-,>MSʾ"9M=JQ'%_|W|xW$O5׿?yȫZ]㓦['~3q%XAZ|mݼ4 *PP5 8xHД+,,QNktJK\APJgN`&ӱI94%V;LpFu" _g b_ygC]׹q#4ˣ:c1Q\"R*`b|2BPJjO. +"f9R )i9ch2-j7IaMK]TU##w0HT ¹U4ǜ5pYlƏm)R-M]˟3eYS5-MJpAnB3V94M5s98SƵMi ')Tatӝ2˷5SՆ]mnw~o(UQo{QE'vi 8V͖_nXKa>LT/84Ӯ..m/]\RZR}4gkid1,&PJ/2m˜.! a8ס݀s?CyyP?iY*̌S'(\6Ma(cF ,i[!Ng1&'k +Zy<=gh% y(B"oIJ"X\Ӵo(4*Y[/jo$POH*sl"yYȳzX`rsY9[kβN,}0AU.^aYC~Tif{/?bڰ(D23KPӉ4rq-CYvܽ{-;6G@?c)8N{i$nin60M<>>՗wº&FMP\^Ňxͦ!OoxyeY8B6H L:_KD+I3C.\_ IDATxzbw {qbWGfnn+7]IGhY|OU;aL\k^(YUcn>#d^iUif}1ݹg4[\;ǔ5a} 5Tkv; Gdދ3dF1Ί猶 P4H!\Pn¸Mc<6MPؒFY03I$ *[4J,RI陔Ժob12/D:+Xޭ/~fQUWw<> vMexk1&bZ$a1ʐE7oN.Ei91-ؠ%)U,Ө9PzX= VuC ժ74Xx|pz/,SQ[f8tGd`yq|[6ow_q8<-W+ 1yRX6b,ZR*k=TV1u=9Wk9'It݄]7+RU@f>4N"m8 XSTrg2T/:s\A7tp&Yl1VKsO@`^QnBRE$e Xh짙3mﻼ!0 lRɓY|GH=ei qB)CMLӒ)wp6h"PUuk4u,^6B:չ='*KgapBz&.H3 ζE])9 Tggkۊze:RJ]sruy#楧Yϳ0УFϧԳ/KcyDSJ(hB)Ëb É~x"պ(4pd k1G߲nG\04q?=w<}E7/,~|x28/̄)%Ac@&.eatiTOT~Ya(m.#M&}(ꩤE$ (&t\L8#pJퟃG>hmڃ#1,q&ͼ$zu<:ʢg͆n77SRRE!}c[6ٔ(1lp GtX'xȪy6| 6=~^Wg#Q8[L.lV7 hZv4\gk4Dߝɀo{ )*by(a$}9=ZGNP-,ͳKLjgb- BqSG/RS%Yܓ]iԋ.mh HU60 G\!Ϲyv}GDr_H8I挂thhsJ,XZ3D%* ,g 7Ì %-C .y( ums&c\fZ...ljWWqdx_/9cgTUvs!2M}/'kqvQǙᄵn{v{)N0V8p̫2FR.Rk|*e34>!LԌHUOLiޣ!E'ş%WN)g)N12L,^v K| "$!JsR_XB-1h@PTLӔui9TEY͂-/A햷6I2I3 k.д,~bsZVeiYat`չ2*R-8~sM,ܮn8 ~1%gʶc"ZAU B2%4.+K ,J$X[sKʼ q1%~s^F?":/vDὧʔe# .$MU,ȼyƸ!l6/n_ɉ Ӟ/O2qXf( uy#e'`t$-OYlnMYiÂmrM%WJӔkPgRKʞ7VR" V̤mL%C(CI&QÝeb͛i&0/=zK@( AgKRc0v,(خܩ3_FB0FqdgQs^4X)IJ1O3}7SRWZ]񑧧;V͍DnUΦOdCcuy%]R ,_kvb 9(QV kN:Sɝs1B0[%¤FQՖk#U QӝUgZ} DY'ʦdIq:+gȹyRB5=vr"`INGYQs$R%c&9~f;,MgWLE,eW-=r! {g88TUOSNmKCSIbK>Q:f{{]X$~نٜSWXe4֔AQ@rU0~k1ܡa3,|LA br R*}GLH(ݛs_uS(e!@iB¶9W,=<|߷ǪvcvDMQ#X(@%sO."$  8 P ݀ݎ^;9Ǒw̹vaKɒZ-U]{o9{x$7r,:ޓDls"'9.HʵqV)z9yrkO)=$$cv#"uVZS mwit1yu!}<9OM~멵ly %x!'Ɖjx0v,s|[Tc~ƠRk,?21O$eF+ͼw'Iz\ R:o BZ$D^tmc(9%kI9j)R3RԒ:,C!|#\n=˧7B K "w3bƭc]@-HCYR^.B#v]7 .)nZ3IoUӫXV\tD(\c4߿0MRS3-nI[-h#iӠ oHY2NnY"Y(9{=pkyZʍK/ns.}?Pʢo `tGΐ굍H͆WⅪFf+ik۷'^ˤRdcvr+KN%`' Io>>SՕ=(;\R FMzk-J곤qC##;ae'bi%]["Aři>,/y|۾?ȳ?[铖TzE\S)AKY6YO)-4J!̙ 8!]ˬRhJiQͶE)@)%(Za[koM^r`~8H9ZLz=2fff*~ HpI燶mT7- d7^z]k>ܔ VZD)j=Ze6aR9*k@^sXfw2 c˩lE {yWN*6k?|7ވ3$ɳSlNO_q^5 ZVQ8ҺD sn(YJRUrYbfwP5~)e&m=%ޙRX-EPZA֗Eo(&Vz"SXk!%ֻC)6׍XRz ZZ)Qqvb!\#?Cyk<9( U 8lRuęSSജ$tey>c:b˙at\3ڈ`vrzLj6R"m*34B*ugch=NB%GogOaCZj77dY;0z))5rIA{Œ*iO.0¥mXl4ɗoR9w5aw3pr8o>nimO-hrJʑIeBN+1i!NRKiJ/i6zS<7AwKZѪ2Hݝ32VRO"̖,UJQG\bz#{"LmYGk,Í2'i&'QXy'޼yE[K׸IRa[_$@.|nBYnooy$j?uJ$nrRAc ݵ[Fi9Q/xW*BJb7PjXA9PYg"1fr]5Bθnw[*Uo7N Px\4JZ䈷FmPs2e{֥ҚAܖFJS2eG-,U(ζ4]hӲUG42E*-j+*B͂!l> ,16e`rί1ա] L+ߘ-->g 6OϷ&눤F^aLMkOysw}aoay6HeU(4m\g¼u'8 (7]'%M42"ZJ ʤTxdG^nLT2eRIny1jќKS@ٍEUipey!ϩ=vv9Eo l%*9odS&^͙~:ũ%SJ%FBRma6ov3SJbG''mUf?h߻j%nFk۶*aYKR oՔɤ5\<}rg^t2 n h5`оU΋K@!YKHs|ioﭔG$+K8i*KOʁћs)f dII~ƴ'Oc0ʑ4&DH4%0kxlˌ=juZ%M?|?h9X 3|z{}1dl¬׉1AkG'ezM%44\eOTX3ߐѽPy9YC:1nm"ĊM(\g[%~Xr69_k3Lj骵uWc T唯 VJJ u!g1Yy0t$gLJ{iԤY\qEX"!\Q H6a.Z7#Gh7<ދHiEȁ2K|EAdrPVչ4mYcnUi'S*}wdtXq?A;̿Sd3l^fPsvwڈK/ňu:R8XZ6 U]i|6֥nȦXH}J`-+ƏE ;jq:o:yh&Aѕm8l^gF#pYί96QZYle[%̜\W7d)'oYUhcV^g$[8G6TT\`yTS_`[k5M Q)IAʟf$*iLMbDz16, m 37Ĉڬ*[^&A\ %+T y M|>Ek02:.'<p'8k9s= 3lZ"y"M KOϒRji{g5Ӽ3Zz=y_*fŚnK>%քsjL st&!hP.rwwG*{ FGm#4=ibN_ϻÎZ@[b T)5rs#Im)tq^f Kf69ԩhHsA9ima_Q4e( ! [%eF6˳T:H Q$\HVrQ*/E_"m%N[+ qܺ}uj&HLbtN)I&(չgw d5T,-Y>~G6r]3? z+k)5!W7OB vTk)V5C/F1aHYJc_;t 3Hy %HP䩗#0ϗU:/ B|wL΢)~w},f%$`;pV:Q )2c4Ft*AF{bШX 7wrLa>( i9)ȉ,&OϨwB1 eo<" ~Zza"-Y;^JFg=5HQj(Z|[NG(a.yڤ-lܤ"]?I)<,[Dd y J&_$K&o#C<7dLTѢkc=^c aKHnj:ETv۞#e^^@cuZ'R}5q"I%c%ww3kngw/8\ 5*i rl2%g<6~';I#1d1Fuq Ћa"okEJ3h_$6j5--LłZQ{hK,4oT%L?pB@'^Is9i?$٩$~9)Vʸ( r$*|*9ȞBʣ.=xv٭ηGl{1~=|ΡjQ>n[:{^?fmN{dw2]V,7l|E־8{b)>,{i/rc ﰎ k tnڈ* ˅%{WUr"%V7e+>H3 "ݽh:lmqXۤZYITr{xٶm[qͰZ)%:FޡT̒QTkaN8g7@#zzE2a4ku̳G`ml$zbg&qo*;t!0hvcZ5gd{i4R &RbOlZ7؍RlVRWDV=FTCS, =w2UFZoage&e7Pu\bpKe,w*jcpmxAJe:uSRU ѮPַhXc-YL11ek^-ppsLܨ᪕.#qVȠ0Q~HVjRԂRr?BG8Ι?ɟ\vr|QQmܜ; ?ALQ`ɶʉXPpΣיLԕʵMx1L$qUTʱ]X#,3%VZsF[˰I[s{%\$kۏtmu"'C+2Md&1 B&259PB1rzRm,  {I׍ԺcYd߯<)Iti!`p=oww{6 0MS˙X. n$TB\HK KW}/4Zr <{6*Za97ZG:6J5l]%\JdhjK**IJ,sb{Cts|_ _+?ϰ?g_Nu4N޼'eUÞ%2H10+䕈G+GL3r$P!V^z{9ker鏲m B:JMo+amrxF~Sxףt%zt ƥ1D 86 iժgwMD(2i tcv=Ǔ$䃁e{K7X1ry7J3 hzC1f%Uf-%PFQo}sB+U&?4O52ƷzPHs.Ep8=77#ΛH- ζƌ̳,dvhFSi*S2%K$Pm>\fGA2˃eW?{ކ eI)sW_!Ɖc {6ٌ\1&<ժ@B#VKצ,Z`%X+jf>T9ByhZ(tqhr$Hŀ]9>X򦕀Izcji@4ע rRlm]PZKҖ1z?s"mxr>Q=,/B0ZHZG͖7>68ʬi,ۏV\Ew{Av<ޟ h?_?Rs* e49"8u HRy2-p}Кe <B[̓OI@4& P[gkuS-_)rPv|w]_~|t8uk a;H5SFEgó)ܹ(hPc] ^.j$jeockoj\s-&r0+# oǀu+|^gV4yf4ޚHXӱϦRG(9:JRv[S,1Âw{h0X3RǻCŸ_S_u@HP_BLZ'* ZΆ0itQZq^erM=M/J8u:2MW*z[6͏K|cY+ĩ-}jmmj+/ Pg>y[74-Z$SXᜢ(E3U͢#1O^nM02T'#jYG*1k!L,YSj/L^*>}/WNs8qFqLa"E;U2FZ%T7`LBlqҚrbZ*,4GOY~a!sK:'AG|d"|n:"PeGpvO m d7w JY=󛶱c5! v~gnEGm >~2pkMO r:k9S7|_ku{Yq)4ew]3BYU>o_b#Tz?"FtP:gKf3%1/t2`Ea=jV4DEB̓l;?Prp8VfIV&87JK)q^mbItD'jð6/y_t,5.~|y)eD[;QZz֡MF2gM.%\o7߲,XRÑIHqt"y A"2|xW!v{~͛#cŰ~:&H؋,dK*nĨo񢕯 "sX Lnm49Im쌠SCJ:SSy_s?(/WMlT|jb.zNj.+W&"RVrPNN{Nۖ'BkyH5PM`̻nt2/"}QU1ZĀ, U/ny;6faӃwIF-]$vXTdմv8ney9ѯ9])7e6("5ER╻(-#O @QyIIi@f _^ ;׿~_`yَzݍuGN" \|1?)B2jvKTonLEnDJ iDǿ_._|<ݑw?>)`f_VBCBȰΨD\G(;1!^*Nհ*W9'k*;n[T%#C<r^l^^ \HVR:c O4S/q?˰CX0\ç$z=JzbEyEۆϤb UY#lIcbRkmY2:'8e@A QQm.޼\.8\O&;`bI&8U*/3Lı^ɇ/X/7_Sq"ӅaԭPf+^$ͣhkd rB f j\$r#1N:]&ё&M/~}7Pux}ŗe>wXmx\mOL3PD^%H3]/ZGUdi0,ˌ4)_Xy;TA P&@rwd՚6`CIT2hc$xǑC<}J1\KU&/1yVSMx\ i~~Ϟ=z5\L: 16[ l6%kN| j޾ sX#UҼ4XB\~/wA's]q-{*@M G!sHMԉ0\"%5;n  0Un^?fooV_w~>?%Cx%~7^| S|=>yC.AZ˃*ґBv=p8xMrURr%wn UQ[PNWj-XFA%AGx$&4myI ?d<_Ն[ WV8Pm !VR%PѭdɥA̍RhNΌx?H"5}:{{IL؏_K~蟒+??Se%CyU]|F!)hSqn5{eQ2 Rc= o|;>e^>;_|+|?i^_9Ea?"oz廿x]{~oGF]B~EHy|hOzq-(J\H&o+IWN6 .G! Bd !퐑?7m%)@bWi{[)mxv]$qK^ex!|'!4/ĶM}_Z0ZeP4f#pbksEQʙrf*5M8(n*Se3.)hyNTl4huqQ»F0 LY<5us(0s( }cprr|o?-G)z]1Z|n;g(3˴8%h*kU&\XbP)K |ރ/'?͍OpҎ||>Ο|Kxe_B]>>z|WMVGK^|4$:"0vܺ~ze@>L8wU*{LY5U~a\9 9_JĽ4\3,%|} ]QK6927(88Xܼ)lçC8(mi';\QiU s2cwm-3wHK˒mI=c"M}Hi ٭,idcjbtӇ*uU=dL9JQhbxZv^S -|U D6; %gβZ201A\>Zb8dqs[,aOrq|v\6ppC|K,kOO0;[E7}( U9<.ɓuKr|Oh{ݠ2rz̨ѾKj):L*BGPT99| ;3PCʢƚ%^eqƩmP:)iƨw-{v [{σ8C㬏iz*3og1d!^dODLtb9@S5!?ɅO8Iɮ[bʂ%By0 p~B++>h_ZW}~UjZl>уPgAzBĘ7=S_1s1O\G~!AuE9 ·G9|iNOmG,SUĝ\Fh8Xc΍ӎ]E%CbfS0oDW#*9oK5O2cG ;b2C$VzAT+Њãe TeKq&qyg|Th0s`l}`TGtxVp1z05VamAӤl.IQڥ%Ɖ?T1'A.ȜSV د7~ϫ] +*1ZǓy$?$2DY' 춎1G^pSv'(,c=cg\;spd Jsx\Jiv-ӴiT2!lcQk=cwF KaZݒL6V(#84!0ôEEYΐbVU%2H;FQ agИ) ԕ,$螲ت+ʲ$aRl"`;S:J &sj%"I#6IŒ6*Qs RYCۈ-tѤ>#rTr՝2x~ʋS^kk5j]hZA^{ewLn$ze1`>v(}{ Ww+Kʋ?wKc#П~'n\ b*'76r hC\!R%ue=~>]ȿ!8zJKCylaWa*I\5 \~KT,%6+I)Z/U0iv3Tyr/8X].񓕦FZϜ.%8}l9uLj:|3F?8^bJjQi!<>(C7uG$XЬjoç(n5R-Y+_BL1^3 kl7ghUh^tNJdNg'S– -$sx/ ez)/?|Ϲ}GoZέ l\m1IOマ=+`:93S0`Dp18RJNJZS8ɮB+Aj 1 7蕣Л$PkUFRS^ju]1^Px:lPiwֳDBK;mi58.z%1STR^+ 92%uRw ~-9a}F VPzme2QG+P^ 7%FLszc>o{{Qfen0.`=\غ>įw#_E֬^:{NhGq'h7OWm&Ϯ(W_tHR"!i: HN- psMF't) cKQ 2{XC[O%_]\``2dޔkbGNH 4EQY!r .SD­im3ѶzF)N;[T.>'#1* Saϸ_0ń#~x'9% QgI):Xrz}7>9}˹q1~C潿e=D,%Y3\Xsp|viu~ƭsl%$$d0 CNY,T֦»ְ^"RiPcJ^rM#܏RIpxh-fB2Xw"@,z0}gMȃ - xFiSq׿wLUՈ wc1{qZ*H>Ƈ0@i{98Xg?@YG gשa'u:] neU׸Qob95^az,E0vLӀRn\8頮˙C4mU]} 6ѡpFO@@%#W)_E\uNe*ȎP4`xEg#ucq6hs/!ZeHt١!䎰̎:)Ѕͯ~߳5E1#, bL'dg;e}aHBfԠ9h|!(˲f;~6Ţʱ 8\,rf.sdN5U^RږeִYYX :]9S}=n/ǘyv64\E19Eh">f:h!HtG[֔̒l,3Ǹ fo4M%p׳6E Id!:&jV.FWó UE!婮ڙ nVtqY݈s xM1O<8]ELA ) 0{D $8Ak$C:8"he!ӶXuxD5E;Bt U+yfM!`^\E!lv%zJT  ~+9 <ےp0sEIUp.f;/x?5IK21Y]eiy+geQ[$ea~B +mO=ZQlrk u0oCm8_zn5/hpSY)iN)%&^d?,,DnEjCQ.;lމ3V0h9r* SA5p #qT:edXזu1~`%BiVISR4mœO>͓S#泶E_o{ק}v1\*0) ͹hLuДg{ZH3Q0Ex.4]vilRU . z'_O- {Ql!ZIŞ2imvyfm{CO:RQ+ q|]ѻkC!:_n8u[F]fm,;R-੪F"rGEآaجwtcl6iozY_د})x8Ֆ2a-WlwkB(,GHa%"DY,$gCM{uEb3V͗ *{>g*&\d@@G(ٰ#ǥ!"}Hinf?ςEOL`)h(LCL.HMÃc K @ dQҁa܈CIssDv 軑P\/{* '[ aqۢ,褼i]<$͎9Q9^`rW$qw3N-M}@Qe7Ft)Bk--w_Ekʯut7՚Gb"J@R#LTQWJHcO7nH%1~v) Xoo&}RlhRVa2g.z$fca uPv)&j" 8$#7{q~./B=1E-;c,1%*Nn e5>J*4Z?{15;.x f٫Xɛ&D9Uٰ\5$ĘFX-,ԶyEq$>lEQˬJi{/.Hف 7E~8rHL!) Z5Lcם "wN-p&h˗#a!OgDgUU5{{0 j3$] @.)ȗ܇"t\fEuQz/wksn\z@Q(n<ґj!J6X2}~WQYBESĉuÓT#xkE>=)UQ\72{o@b)Mća:3XѶW(bUHu$y B_oJ(H4u~KTk\8a۝D%Z4QN%dh*qyX.iL۾^P*zO"(i\HB.+KcEcŜmuSTEt[BD}eYu$jqͮ[Srty?grb(%~=P-Uٲ z/;MJ1F.$LLZPȚ]{/آ'?TUU ɝB [9'GIDATFI/?Uu9hJښ>gMPZ1UeF!Ѕ!&5 n;%A^99XG̒QCH-a~1񬭲B0tԢ( bOn-tQ*6 D:$aNJ4 h-v(D(=cs4Fv5!j.h|ɱ!/Ԟu ㆄrct^ڰnZ 3v !8fB]Zt9e|A+qMQܤί} x!5^Do͗ݶ2VH!zFfSJ w^ԧ! i(1$Nsh;& f0VˣP e6[Q֎v$06'Uz7]qS?_BpJXf eD#o"tI Aݧ`o.eQ3IOز B289Mt_-+>uݖ 2-$t)Y/D0R-$D "!DzwEJhs@b1[_덨Ǟ߸|ޗE~9͊$z,BE$ō&"dN^\-HIpaTa͒PlIQ' f0x!tΪ7#g}YO_ꔢ4;x/ =))EE)FF1 j$~!]\كgD:MUY% #ݲ>CqٲG0Jk~_ŧn}ߏ|i*'vFDYiI2iJX]1(#ys9!Z~MD+ˢx֛IBNœ@ƍ 3g0iM0aYz뜣yѓbh8<<䮻ivez}Ʒ?|yo,goi^]i0YUUTkF x4c) II?k~]s8Ju* QښYuK,06n/ܥm*IB7]C#gwYϭ]dhLmd.Ҷ+lQQ5t 9:9X+f#M-$]f y.⹻HUUΑ;>>˹_Ό'b6/ (~7(?$qg[k5 JjWiۖoeQ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA classicthemedir = $(pioneers_themedir)/Classic classictheme_DATA = \ client/gtk/data/themes/Classic/board.png \ client/gtk/data/themes/Classic/desert.png \ client/gtk/data/themes/Classic/field.png \ client/gtk/data/themes/Classic/forest.png \ client/gtk/data/themes/Classic/gold.png \ client/gtk/data/themes/Classic/hill.png \ client/gtk/data/themes/Classic/mountain.png \ client/gtk/data/themes/Classic/pasture.png \ client/gtk/data/themes/Classic/sea.png \ client/gtk/data/themes/Classic/theme.cfg EXTRA_DIST += $(classictheme_DATA) pioneers-14.1/client/gtk/data/themes/Classic/board.png0000644000175000017500000002337111257440734017640 00000000000000PNG  IHDR@@iqgAMA1_ IDATx=I4˝1Ω3xyII6Z h0+ؐԶԲݚzb}IPu*Ë,df 2"O'c|||$l` .d&Ty09P \J!W$WI6xxlW~wWW=˫%v!6->[s]* YH+h\GcZQB"B.b)ґB¤=y8 | 9 {jjy /L(%i2XMH`+ZQ+IZtӓBH/@ARL/o,O 7R‘;/ 3ǚ0BP+B-,}$NOCR-xyo'Ja9=>1j5qlKb܍cZbQ {Fk!ŢἙ@r`i%=heѪxAs-e;#mhDƗ@ Y%Um88_N&Ȉjj/2Z[7/^Q9=p( cd)X Vt\%c 4~P* ddj%{I/;JJZxvwpQ?6u~C+~vtt}?ןxm#IѐY 0ϸ\5q|xX KC_->iq~}rylo5q{sû\fD-,DjB$Oɿ#Y-н̱G28| Z+Z+ii*b l<9%Td&( )B̈BW=ddQTR墣B42SeByv O)t. f]xoi.5wCO AEĹ5s?KZp@]%# ,FDP%85aq[kbGg_=R3%G 4ԓ`&ɑsV@`hwx-ZgOXnCF&AtOztڮQ+!B`ia_-F(Jqqf-"RԄNJpȉ>;g/%h`FL_m*7Jd 3ZВ98HURf2B#\4gRЫ%xؽ".#َ]%/$p!1Ts$$BrΔB3U5TYseXK w1ϧws7GND]0PJ2*H+AЊY}ւq7ft7fN3}*<#utX1"RHT J)DRBtJ.hlGU ÐRƙ34 "&r]ܾ}Mc4~($v$D+-UWQ%Jj%J\+4);HX{NԔ!'MB EQ$c-2BȞkЀJ8X")OXy&玟d BCpy(՚8{lj,yHيmrȦ&pK%+MPPx6$s9[KQXZEDp\uDLDdLeP5HB(US c-H)Э,m9֞븹wL)bۖ7oY.IJA={Oإeix8o>0Tf5i<1#HdQ<[i@Jm$}0nt-Hgzu˓ޣ]L_<7y(~Yf(X)$0QjesqOR*jS`NH#0"r;˞TTiE=s̼ڎ$)ЃZCbE\eb .c!}QZД7Tjv-mY1w//8\[LJ{~Pu=8"?+i)z;0b ͬBfѝnm (1$2S+JsKt{ HC]=Bb"f2m,\-2YP)RRm۱/ajb&p(R*8'>fΉ' חurۗ^/T&$ W-^7\<~'[~hι?a ,-0_}JH a_ ˛P,?z~GHa2{w wmw?7|iC'1{Wl{Y V(4k5)J&O'U49qGNb},jqN a+Qa&QJ3KUs3.IZ/M! 3cVX-I L5Hc1~?9{B+*+L\n4 ^X~Hc7kd2#s2Xܼ޹Ky|#NV~)bɣs"QJa&F~$\6XȡHv/9zA\cv7Xq}aP3l7zM+MԔI(|UEP1+h aFւ@$5q i]t]*)UfUU\_0O31Fj1T+"E4Y !7HQ&r B*Ϙ\0H>(޿Zp=ZU7 ٻ 9 <Č'c,S=Ri{rh}U* -`&RR`fnc[4Ff#*._3!&)$.*VЈ9*nbEAuV'Ɋ}ͼnz6P%7L Bŗʔ"B*uu5_PB0Y 17VR" ENiRƒn1G(H5yħ~į?#JCuFJ=5r%XeV!&hJ,Wi&aD^`)Ѯ *y`aCmr2%=G:"P9CGKɓwr{!H|Yr=9f^|vo[ɐȗ$-þaJt v.,BT2̩Ex2(@߶hpBV|G\t'R,"{{PB#jɇʒ7/^~C?ӁeBj/r ͞O-|yoowtRP(>p&-T'6 h8 r + IRzJIlzRM '̢Bn<^&DG7/~?wkHւ4Vq$-HYJe"87n{E۳'=iێT*sҒ, ;B>ޣZ3F1QZ!!Eڲ?LaܒpKyӋsF:Q:9}GQޓ5?Ѫg?Wwow?$'_ 45~r)i<%5ٖ%)JXa\|p;$W(R~i7_~lM|_|9q,tA)2RrS@_r⣶R!Lu[R;P,fMM'p|1m39h?jFv;4 a7cIrt9$Y#i2}#rͦޠBao)`W_p=k$GВ>ɷޯxGO+yݒ߿n٘N%8G< P TA%#ԪQ@̨lPIaM4ǣc<\]S%_޳+#azYI"1rʁLŗӵ9fĤ98>R^̳lC={V){yސJC-ɦՔ ?$)+.Sӝ&LX E \XYB#$]e7gDRn&턽׿s-q3<>@( $xJsB* >bR\BL#%!#u5 )65<&#Nk;c0Pv) Aʜv ~E%!,dPh2 Tm=oG]roNK{ ͚SCJ 455#my'Wd"(U"TCJt]_SWH nX`)?UX ʸ(R 'R4-R[Tat\M3jRZ-Q͊5H~#Bҩv,Պ\ *(: Κc˷is%F7X]y%f'ig Ĝ2Uǣ+'/(EQ`IylD#G/0aJ8B \J"̕NU5.r(Fi|nͽM\TΗ]&KXXCu#X%PҲ~f1*n"Wh͢f93fJS V67!87l.H'$1V|TN~CRp:P+jXETЮ ǀԴ(%hDݳG1זq4m QJ23+$ Ñ~ma?8 k %;w(QIENDB`pioneers-14.1/client/gtk/data/themes/Classic/desert.png0000644000175000017500000000206611257440734020035 00000000000000PNG  IHDRZgAMA1_IDATx%=og\l8o 1HvPUh?S"ځ 1&RHbs[?࣯+Uk|Ճ~16Y 6(PJGRtJ...$u]bRJ)$!cLb[V/??=&KQ88|r*RR1 I@7o޼usNJٙG\,˔R@1l,"MӋ۽m!hsnk,4 e^Zi!kRUռ,0%9oOXߊRV5BHxǹgr!AAiAmwwvv?|8L&{iټY1m !A ={6(Zk)sBhUJiZ뺮) Um4L_:|& oܨ{LP>m9FC>0 !0\Ҧiz^$n7MӣRt)w|6ځǨsn}OcݻwRdrpmZZGV׆!w B.Օ8/'4(_ރau% qr0qNޖRBB)"8%i8yQP߿o=:|9gUTUQ9~a[!ײUUUQ~Ye߾yKX+^R_^P}#HGy` af-` J)f|^@a :0ƞA9_^^xiiݻwZhtWhyZ45Z{8In}t;}`IENDB`pioneers-14.1/client/gtk/data/themes/Classic/field.png0000644000175000017500000000155011257440734017627 00000000000000PNG  IHDRZgAMA1_IDATx-Kr#E/yKGɖ6̀` K`,рni3KR2o?] ,;pr[acX~z*pa;p`+%:[y²3[c.Ls((^ܰR H.~;Z,OCfLK(j90G䈕sbZKyӲTcOvI(x|oAI-kU+rإ!VyKipÙ9n:8l,1讇Nf$%l`6+!j߆6DJEկ#G&)װ,FKﻕ(g|yN]VU W,,;s]:K243k^v8̙ @(RM9Sn}GZ|CҥmC3p|a)IUᡧ[ (萴WK#Ð/NNjp!޾|ua= 3V놻ӝi-`1_ѢhX5VM_]_vǵ}T.70rnN.婨.7f}8.-Kc<%R0tnKjdi.ӧf=wZ6*n27*Z,Xm'KǸsK26x|r[5|Gb8^20_@tр\-IENDB`pioneers-14.1/client/gtk/data/themes/Classic/forest.png0000644000175000017500000000216011257440734020044 00000000000000PNG  IHDRZgAMA1_'IDATxYSu}$M !%-eZG8өڎ'?_7ZPJ B&96  G#X͑@g*ڵRq0jy`Zt/ ΅W˥yrE+XIkS.S c[_d:C˭g M7OͳL1h,ܶ?X-E I?V*Ȝ7wyYI2oϓRDdFipB_gp}mH v=Q.fM4u"&i4i"9=)*mذW6 k#'<.aDCZnB`r\|x@^3qps=g9vۚl-0Q2hV%tIF+X2t)(o?Ҭp' v}2#WY v$-|or'LS\`' r9s^Zy I F'JwqyGFqlGsD9,TSL,o*Ǒ;.KI "'&Bnpe󽂶WdzB UR5˅ ,J0ș)? 9@.*!Blk6ZV'^ǟӔY՟y(ŮӆR&.J:;]2 ^Äv[@fd>(h.9^xQΦ. 1Tc/.hrqDD`m3>.={a6bB(J5YY+ hIYW7a/EbB(P%aVhl{mE%Z wsIYZeexӝL2,>XE;MsgA.^*qB ,<8fQ 8p H$C uOv4>X4l,/]'XdR!G-._lyv xώՊN C '=N%sIENDB`pioneers-14.1/client/gtk/data/themes/Classic/gold.png0000644000175000017500000000147211257440734017474 00000000000000PNG  IHDRZbKGD pHYs  d_tIME -86IIDATx5WW3˴54 Ko iAcD @}ww]"1#Ffn <9nm[ݗ3KUDTD{#3 ST3ά"ͪDZ$#D@JwV|~_?׏TC3U29O`~y|:<߿5 MT?tU{}oO_]|K#5I>>C߀I'vDŽ8 44Mu9uٗ>~v2/ϯgoqvљ\I"jVcAMpS#41:fhH$eݚX$cnkZoMٕ'SeŪ:q$Vߕ\q77oZvyXM"=pfi,1[x<¥?K8sbr],T>~<[3jTm/KA}T GVWPu B3g؝_lo4?y_91" mkBH[E+><Ume Vt<|E';_HۥS?^q@<#e$4>_WvF?Oa}!40z gUz>N~N]Y-ݰDԔ7\^9>Z4}0_<4 D4IFr Jn׭/]s-rGrH&PT `sm۩td|rGל* LZ|1 Ɇ}||mkuc,1f&"Rz2 c,s4lG>??oZBB)%cP#֢%*R9anC}߇ V!d&=21fYv<뺖Ru ‹1Ðevŕ֚J#lK~\)R*8Hg)B2_Ÿ[ιise4M˲H)a 4,aY,u882$eBEQ5kNktۭO),w]4Z;s۶󀧧a1xr=??n6ƘZ3<<<|# ɲ,˲﫪zyyy}}mZ۶rA"80cUUs=X0IENDB`pioneers-14.1/client/gtk/data/themes/Classic/pasture.png0000644000175000017500000000176711257440734020241 00000000000000PNG  IHDRZgAMA1_IDATxIs5O'qر a=Dq_@Q\/d^խo/jo$2m)UqT+`쨵ixlƤYTUIʹĺ# o1pa@ژ'X&eu]Z u#G}< Ug @5ֶ:`:0}c77'eࡪI9-f4SB±k7Z(wtE}g&g@l9 Ǜf>%$˫EQdusML?u.OZ[~(4A9m ]yr`S([fNN޽{" jxp{{LSK)R />%Bk?/˲Lҫ{gg'={tJ ƀJ@tic߾>~..Nttnt~無W?a-8toӑ,Eֽѻ &3S޸5j8<">T4ku7T޿D zc RE+3.IM^F jS:BynT$u&Zc7E.?`IUU<֧e >nTe0"8VW@cI:|LV(*u5 ZZhh0 "(A7' PXE oԘ:|_25 =Rf; >}ۗ5SU@ Aӯn[pTLE{gl_ja2WD7?4woߞLu;g\n:6bN)z宄{lK1p,QOk{ I1N4iܣ8AC`Bz0,oW:[xEF8j=zD^G}Ԑmfdf2AL$ .C +ͭ@l( ,{u|>I19!DM hUer nx>Qu}& \+8"ܾ>d.益Y.V\݂jwD I(P5w|D ($(RLlL>@+9`ۦP#.S.M@9' &D2Cₜh-mۼݛc^8c%s0o:;!{uC^ab4Нm$prIENDB`pioneers-14.1/client/gtk/data/themes/Classic/theme.cfg0000644000175000017500000000123011257440734017614 00000000000000scaling = never hill-tile = hill.png field-tile = field.png mountain-tile = mountain.png pasture-tile = pasture.png forest-tile = forest.png desert-tile = desert.png gold-tile = gold.png sea-tile = sea.png lumber-port-tile= forest.png brick-port-tile = hill.png grain-port-tile = field.png ore-port-tile = mountain.png wool-port-tile = pasture.png board-tile = board.png chip-bg-color = #ffdab9 chip-fg-color = #000000 chip-bd-color = #000000 chip-hi-bg-color= #00ff00 chip-hi-fg-color= #ff0000 port-bg-color = #0000ff port-fg-color = #ffffff port-bd-color = #000000 robber-fg-color = #000000 robber-bd-color = #ffffff hex-bd-color = #ffdab9 pioneers-14.1/client/gtk/data/themes/FreeCIV-like/0000755000175000017500000000000011760646035016702 500000000000000pioneers-14.1/client/gtk/data/themes/FreeCIV-like/Makefile.am0000644000175000017500000000266111257440734020662 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA freecivthemedir = $(pioneers_themedir)/FreeCIV-like freecivtheme_DATA = \ client/gtk/data/themes/FreeCIV-like/desert.png \ client/gtk/data/themes/FreeCIV-like/forest.png \ client/gtk/data/themes/FreeCIV-like/mountain.png \ client/gtk/data/themes/FreeCIV-like/sea.png \ client/gtk/data/themes/FreeCIV-like/board.png \ client/gtk/data/themes/FreeCIV-like/field.png \ client/gtk/data/themes/FreeCIV-like/hill.png \ client/gtk/data/themes/FreeCIV-like/pasture.png \ client/gtk/data/themes/FreeCIV-like/gold.png \ client/gtk/data/themes/FreeCIV-like/theme.cfg EXTRA_DIST += $(freecivtheme_DATA) pioneers-14.1/client/gtk/data/themes/FreeCIV-like/desert.png0000644000175000017500000000100307771100213020576 00000000000000PNG  IHDR;0bKGDB pHYs  d_tIME7YIDATxq1 DqWD t=D]hơ!G@O `v}ED<8/*[kLal=X2yC5w֞(Ύ: =nU9CtuGcd>IX u\ɔ\*QMTWS*%.6QP|uCLeUN#IULLQtvSȕT^cwTk!S=CUfG)RFGj7a(N;4;"@Z3ջY:D.QT~ IeL^ޔTjVőw_N*W=u$ (D bĕb jԍU[N;Eڕ1oT SgIvb]ev,Ri7 • =Vtw-V!W9 afۼIENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/forest.png0000644000175000017500000000240407771100213020620 00000000000000PNG  IHDR;0bKGDB pHYs  ~tIME#"IDATxWk#G$+;Y$b֪B\Ҡ\iw!TuEj]M * 䅜A188vKyoޮUd@hv5~|b=RSv{]*LP_t0V|0QԹ;ha_ɼ*M.9]*'%˘DW 2*gHwe 2RPܾ^YL ח .<0#w\=1fBXH~qd@0G)PN0b$BCR R^Y➕"QP Wѕ2xhxEuبst<*Y.FSѕ/cF(s BRBˀbo|Ѫsg{_t0΀D+6΁!Ep' 'y)9e"~)7P(+@]8 X)=4 ,P<^a6G0ъw]-,5039njR8T84zKŁpv>O6q-ipG7-^^h꽃C98Nt˿kŦjىfB&9OQ_F{D݈` wQ9_^zA MϋDɔ# >IjCo8C^p5,YV@]Tq]~Mܵn1!3e>VT3 /E'跾R9eODSN?RH. <%'FrHBIENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/mountain.png0000644000175000017500000000273507771100213021157 00000000000000PNG  IHDRR9bKGDB pHYs  ~tIME,":O*jIDATxeVAof755a9H#N.`_F9>U9/zi~GN9%C`1HPd,IA˙pۥ G}|d7`Ct\1+ ϟz%'c?Z|ô0-|]I˘OWU5vww')ĉ^M-W,t/c` 4",eӲ,D_ыv9 @EKAl#T%>G$#;4>V+?+؋O]c{ދ>*8߿(n&o}b݋#xr_U 677>|xrkYaX7M ˲uc[4- F={6v>Qz liRf0~,]bHn7iR k MrVugog4Mm~97mrZ^̥e'qoKpm h^L/Rɓ'!A 6.Oo-jk~OczJiJ:Z+pQG*"xѼ`c(11BN#Bh'-"BR:JGa4A/Y0D xf^4/zݻ666g]EQV7Mu['q dF[1T cr.&(hA𧙟In&ٖaKCSu@%Z)7 F9gH(BBkIr`}$:@ $@[3H;Nhκ1iXGQ*(I`$wmkEQXLw-&Sm~gi,Sk<6O<К l[/$[(D?iz=d ~Xng%y53ʍ12ʝ.h`ꮫ-U}xʍFHU$i6f-&vFz?1L]x~QIu={6 #Z(IKi>ז"^Pn  32ism-W(~l*k\uu\WX!}A:(1] r^.ʀRt^@FLz>pI5%,6ʭݡkz-fR\Y8_\ѡx)vn^83.ŕ- ݀(ҳnmuV S\pF;-WXNqAgCS87IENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/sea.png0000644000175000017500000000150507771100213020067 00000000000000PNG  IHDRR9bKGDB pHYs  ~tIME1IDATxV@ :i tľB4 <ݽD^![ rRP\Ɋ+%WVo`'D-/b\3: bui]"&B}2:a5yBfKj:bm[xq{ 1F1Ʋu)L/au B<0][:,tWu<9I+}=7J'!BʧCE>_/9\Ky4, &~|WǓyENn3^~s23?CX8yWeAqք@ס!a&ⰩyArArE[Jm?xmU 妹ބ׳'M!Xu*}+k'N|ZDž?J e1ӱ*'1w2hnLs$-.yNeB >ܴaxmNd*oKTmv` {s9;:yH7C:Em3U@7ߦ.\u k]j],n2BjB!v3F XЗ˷^ěc=Lצy n`⍮  vs$H8JUp Ur9 Ups/E .Cl G(H$=D^uAK3< b q9-4c@m0|+_-̟w`V,[_0,5u QJ>u .@:g3#`Wtp1 @ R5b..RR+،#}!Nk3FoCS0τAX՞h)9#NLt~e:&E9]d; X^ch/t-p(pPZJQ??3_1D4@Q{4] ZqH6ށ1FNؐ@|l!#kh| }&Vtf`]گDcXm(4ps4fI.\ƬB:1zotp (7]Ɯ\Z8'6޾ p 3'.dhGŖz٭G>W+^^v_.9B01Q[OC ”3 # hj9Q. uJ8-2 ,-+&8xW\s푽";!jVt _91p909 `\ ۅG39]A -R',4g%crǜ7>sY5LyRV,BDׯX%R'Mi4|oJG L1M_7^) kHj _wr=CKJ\ 4쌜+(p6{RNi- BrmD!g:beٿ M\ov(^)qS0'7*52+$avo?$$zιP Qs7?] t-x $DFWa2!dj']_bhz|[.)WKrR gB:J_ xT@4 {ts}66}NSwAj9p.bt귙@Ђ#BNA(]ҿ07H礽Gz`%CXc0 QGt=8o4ne#BI陹=@%p0<+ WX;" ft,.:fz|M+YbwWѾw7 -["$ O}P!`^ሕgYx6u!=b0' Ue #) t@Ld tD֬_Y+%JA [ಀ3ZSorwA) ;#I)y`O W\O4$ K 5z"Ì -62o Q: ` BlCh/%\"¯YZl̟XYPڣ<5ez $ 0WD\:-P gpK8<MՂ9t._];%\:w5DrN1L#\~ HgSx \hL`V62d& ,pB?5<[->[,[J.!u3b3o?"ݡy&(4\ =ffBKn #h PUw|wHU{co՚e)-iٳܳ0Df[q9K`QCR l!{f.1_#N}xKSLIKn=" LjI[jB;r=,J3l? _j{Jmp Ifec ($ 6rӾZ,9P,ɵR(-ֵ/c/ PP~r:*-_\W3DNBNFYf8 Roc%:/&L_` %l9;V7=b:x@<98+:f?<)&a(yBV:NG&+ %1O:&: =!I+1 س=I}װ̸9&Jseanȍh iJ'@Mcp50I-ke#b/XVt`U`̐O YQ󡐴;8AW8Cineh//w!Z~Nt+[Eˢ܎GI!6lSh?|7!`~ INwOW)UF8iL|ןH\04~\MNe.6`˙?PۇfHjERQ~sG{wA^JtRy[hu,N/0s 1GzF,_LgH?`n 3f Lf37N60%3JpCce GHb:*{qX=L!7_>yhs{=Ô; <L}GzF]zJ 'I`J_M[؋;XK ]I: -5pư ma1<=O7mC{dP1ma1aX2ݿ{0&3կkE8}fSGSjf9mDEznstWZ31Zl:]2_;4-^h/Ww:O\pCV/I \ovIXj{0"hpCL0ysa {Sg.KO1Jc# Q=GrK Isa>2'|JJ B#XP{!1^'<#"_P,fa,k{rn[أ.<:331/8kMvT\/lgݽ?mA2y Ą5 r3 a[̃ѵ% # pψ ɐ 7_oh#"\x t |A2<}_MJ=Mw~%==2_8)hݯ`o`/BX=G9vGO0ϙv9n{8+U~NY2?#7Nzp-sg0,0DڋbcOfpR V| m{ ^?ho7'8D+~ ~|'_LBsKnU_g䅿{q &fjrѠ€05$ +=cX͟]1p|PwQy}a]a 6t9چy$DMX%Y ͣ4AOѰ~!%oW!pf>8B89#a$]PFBs ^NvL7,V5Ba\[@xwF^\h$`Hs;gUAjC}EHW0lܛ@MgǷ= 6 Hڪ9U̟Yo| 핵)f#۷{ &4~C~}GKx W[V7y-ƥڞygc=HՂX`0tH839`~/C &B4h|8>H YT`X:_O՘1Ipb2ܵ#lS_᠔ Q ~n ++KK o{'dpFH$ +3Q<2ۿ;"Fp@LJgW "lKV\eYpYBm2^x K<4 f 9+߾`/uz 'r?eZ6\f1]́Xzh S~ad˜pS0bPw;-f;Sx'iPwes0Wz :M4ٕOvH+C}MӌV]%\c}Uj<+& 6Q홖ݰ4bn @B?vcxx~}tFKJ vw7H۟ov-`J˜C(h2,)A|h/a̛XR^0ˁ&,ZD'Dȍ"tqݬq3ބ pz 0+JjELN9\HRsF *F3mA9'4`. 6<%r cCQlfnn: ^L8Xif?zۿ 2nw1_i<|z @3k&"v0&9ΦoqP|i3 K ͚Mh{naS%n@%rfaz(?ϣܙ#t=fjs}l0uW~{ݾ Ivg m1f&\*J 3l UKWf9+Vs QrrlxF9;tՁ͊[5,xٿ{Rjwۍ?~2?E]6,'uq+ se@G_o)=UPYc:ɬ7tg3JkNyc`Kcc4Ġ8SgH. :`0~{êfj5O~R942?݄1C$VƥWP}23vZ,fZqmx٘rz%;AK ,mFS*N@å9F,p.4< &o=_|OB4jrł%ؼp֧=˕/6jt|45 ۿ%W;5JQ9 t_~Sr@UcqbA\Z ~i-p)<%v/v$C/u.3;ѯ0 2 on^"7t EnS)'}vLDS$Ga١"B+ՆQ'gY`V.77w^nٽzvaUp9\wbgik% m@g6&&qB ?gw#Fi ^ӳoP|d#V`J3{LkZ(.z5Op6+#.L巕ZA߽Pׄch_f7l-ίEAMh卑1ā"+0um# b x:F0KlfU"sG0DĞ' zn`[ANS{ܿkwK$wsQ~Co7BTliJnD_(eL/6 ˬ,,j?<1M,W,6ag`j&KѿGנ=Z3Gu]MNT>_j<`bᘢƤi!_&j}EkdipN[ki2LtI~6sX]%̂,C@`w#L<ɔVQg &W3f:=*~]/ cndyt W>uAUL^ m@|tK:. 9q?C:b}E+ ,_(  b. 7}{~7n^k>7*Hp~Oz QzK t/ˀ)[aOk& &4G[8D#lNo5G8@l[G$eeWLEhW򵿆0g++o citIyluI, /wo}~Uyk'׶Ta0 b 4(2=M$&$& Rs>U4/§o5LQcN˨ wvaι+= @^݆@|`#Ih7LپyO 44S XHG]a|Nus[cbU0~o7 n538>\)I SxF+^{^W0= g<͏@*1Lپ Y%.U7 V IDAT)ѫn& uQxDf:CKY~4W~6-0^h̕IPۇw[]3[TcBnfڞ/+̭Sf-LR~v/Bi3]nNnzx]&rm~?'+0(h' KN0h:o3J)v g Kk }4y#3cV 0d7~f]?KShAz'lݮe)GŨA3u͂ &gBAHBSKҰzC3"ЛKt5=ny/jWooiKV1&4JӛNM0EGSa4@[K1,݋~bt^q9py cİp`oYt8C7XHvs7`H'5'l#mΒF:Wr4?h~8.h&hgYJu:ƻ߮?׈3#7E8|{r=eh_w 1^׬_a6O%pzo;fZ_My5W>)Xl4B1v5\EU3;zGL+p)]ؘwnwo#rIcaxTJJ#;wlܭ7JǓJ_ۿWއC\{X}uϾer|4O<\WEؿ]b|d)%JWRmROS{z|7O=m1%_0x5ƒBۣ̏~Tjx JBsײ'h'f֑>xw-?A'H{/4pS0 _~ Bh:bh|U#6cUJaZjfl*? ]A[f2A f-lң@#?vu/lҪbEij\Az<*% vBw0%mb8e(쏽wW~<ͯpu5h8ZV *AoiK̒ Xjx[neBVL9S$ ?a7Ot] <-a# W/_zϼAs7Q7g͞7Ě@ /|} 3BƯ7_"LސDI]}:!g-CΛ^̪[WQ4{U3vwtV WaM©=4'  @Ki?dQgV-5ui~s]BQ 8#%u6ۆo *%İw ?oZBxh>KZYt+T*9S{F0%5A,O\z Du{rWq^!ümY q˰gE4Jq4/:}@ca{ L)bC%-:1>]Usc W:\:Sh#b,9FnxSe9*lְYS& vIJZaT: zܽJiqFC'? [2SU#Y%cR!pqe:kϫ \%f(@jyB ="BsU+߅]+cgo4@C!'o+жM'ݽ̈́aZ*u~ VoA7q^ OA}J?ogs Mx'P$kP܂g ^w/h:Ig?; KdKBa*M^"2cC8 h/㗸ͺ fn,"Ӽ@ṗq\v56H$ ѿ3 [hʼn.wߖKY(6׭rk#mFq'K @{^ѭxĐв0bhnq١KO0 :4Jv>URzM=\oREyço]5WuORa: vT`=`+ -!IOlޘp:ڿ͎V'L$45w/,^ G^Cb9Ri#fW/_o*>^ؽ]3klT6^7IY&)dJWs"׏[_o]`Cs`35ԭYj XC rq9hnCs1 ٿ߇GV݋ "߿k4􊝚aR?\j(i3FCy_uvK_Bsdi5˯vn8 Q)I>Ha6Ώ(>boo|E_-fHGP4ORXO$C߫})Էdh:څ:^╴1(M~UޭP{=BÓ?N]a6k! zTsVi"I_{n=ЊH{W#?Ss)L hͿ7j7w7iCh.OvlbbD_JG NcQw4EX62ۄ><ί_vVC19<< ^Is 27/ D{Z78eZ COpP{.fݩ1,EsXC&#U{ӳڑ=RḆ@B$g쮵(Br֔c9!9*M{jEf@&i&#H$p}{5!y*W<'[ٙ+铨M/ VB\i׎"s>7!HV z>Ng0ibuB *@c{f5>ϜɎV'XU} G82Pw7צ=2L ")N anXD8%ZSX Yo6BI'9]`V_ĢJ\$Ō=squUKb`5֢2Jmyoួա}-8NdkaZ_$pN+Ӟz6EtTTY%q$-B<+Vaz,zs6Ysu^A>mEDgT- 5FP=wI:l?OV9 +L҈PӜmE /-:ۿ2p*`EHr0ٔcv+PȯEHT C8cIPZGf JGlED8=lϘZZ+yizĴyEZ[>Ib+'W7o[3Q(sr@ʲ|doe9l @ ;_=o V]\}了Bx_֕8DZD)l'H"3-$(%81vP lǮ`2ooC%/rq躧9%^#hhdCF΅]8y/V/A$Jq\lUo&wN=Q+z3y| OM}:%퀎AEg.}ĩb3gyh9vklx78,O'~Td;}q@*N3fXD Ǩ=3Hʦ}^x8?^dij"Q N"'wՆXgnJH4#K@t/_J೛VЛ`ڔ8y:pAZfXlDDH$p;{K/+q+cPֵ9kΎC%5vN:8xJ] }1`s#^6hʇN! #\v-v¶AhW-N4mT2zq2.wx[Qn!^"q`ڱ|ٴJ":͟AB%+0D-R\znh-$q-DE3&96""V_LS $eضEP;S,ŷZGfw.B;KcXʃ!1i8W_;Ïg5ħl ښ0xClj7N*[~}u]Z)}}_]$zGkti3܍f(@}tA@J4։Hi8פ-kτNơxMCT %Ѯ>r1y\UH_iwfG:Aa0]DR\nO;sM KkYUyi@b}Q@_:t}MY8|$$möguÃ9ΰ=FܛQ$W"Xy\w{m\[S**/778ipgAg{zP(BzX:}Q/ӝF8fNvzsvkҖ̱⢸n)kz؝h'6s*Y+ލ7]FXvO8]{L'ó$W"ZL]Gd`b+cvG*^z[ Vi':9p^^J%c[~/!K2i{-tq~0/;CՎXrvo;֛۟%m=uDs %Ʌi8n$<;j=F+a]5̡¹7}6L' 9/:Sl4#$4 H%D=nb}u?..e _Q$"}fyt9vy IKfy(us:Pt.] w>-+;CI"\@iԁ|p.AצbT ><8??U] ºsd{ohis̄":czvwl\ôAg{"p4Kم.Rw1Vh, IVOpB]r &G!Lqpu٫!mvd C70́ÈӨCṠ:Xh A8 '"Zn[Wg^xq͟x֘CEHr>Pߠ\q(`VJn_qhO'*:ݯ lC`0'K=ݮ=D1~֊倭lT@n$60 <E3O N[lOME6/SJbEB[MͶVy1c?b۲F1itp0W)%mXDA5Fˁkm1+WTeLӸ|bj7Cyxˆ'O轛ecU Sr->OL.u nW"IEIx'VŒl<ה v@o-]+> yKRbE<@:mXJa3-0:"[dm 1DUTp q)r.^|Qd)Zgh%9+³|"-OUqs J`{If98z4d!EP@L3L9 :k=$K,se ˧@ZT&""9P_0Ak9hT09STȊȕj8~aIENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/field.png0000644000175000017500000000135207771100213020402 00000000000000PNG  IHDRR9bKGDB pHYs  d_tIME+!]WwIDATxV1n0Vu^ R# 8=_K!NW,\R,0H լ_D3[K}K4{@㒟 mSçq;!fm|ypB2`b67w|GT E*A[xʏ_=~,t"WO^atĔ [R@ Wi-`\?5D5x3]^qqecwkr9ߜN1OwjϸP&HP8\Ckt#) i0I$隯WJI<I.MsFo'bWhF&1]b1aETc'o=$ IU0OkWhf߽ ڕNn+Le{bJe^UB##2ci^"Xj.F%|}j4oƝOld|hh %^z{ʎTڱ]k?ڡbuLz(ވL]єHgF#Q lhB"YFCGI]`.1vq"IENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/hill.png0000644000175000017500000000241707771100213020252 00000000000000PNG  IHDRR9bKGDB pHYs  d_tIME7j.IDATxmVMkV=& / 5IpzbGed(]avx}]Y)tUp eV"`i Շ tq7/I\=KwF,TEW 0 U5P(ҍj$}z5{mtrW8,TYOؓܞtP+v+ǂ܏s|>_B\ NQK޾nMXE&_V=)ćǖZ:U$/?5/0UZQͭ-}.j n#(%@aJՊG<*R7I>L,oz~14Pjk>LWP|a [0˜񹊖900 .qG 4)3׹~ &Ôaq y=O31/kDՊ'ZeT-U b^^ M3P1/Z@_Ac1ѩGOQxyO7Lt+Ղ}֧: 7@aFҞP2  vmiWmQX*?NGduAgR"'6\ jcڇ=f«bs]lt,#1LUYEbBr_eô=̍Rbo`2/'h}i=/9.8>vѕQۧ[A'"{ѕ ;֞JLpcnxAꆮqezzq Z@ϧS 5ߝaO+W>lYOڝ4Xlዝ/ҩܭ@57=AEX9J vиvh[[xeՊIsU+$y> K-snX|FvT7I'@=͊ϳLm|zvnAnOrtc%0ZDٜ>:$^tΐLf=,,F&Wn+& a\|a.L2O7VڡF$9#n-.ը>\-iAk1¥ÎQI,T@7V6iRظkGCRWe0##s(%b)"ȳ+rHWJ<5QW4 n/gIENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/pasture.png0000644000175000017500000000140307771100213020777 00000000000000PNG  IHDRR9bKGDB pHYs  ~tIME%$QVIDATxV10 } x Ls8KCƥi!Y2M$'9ߺںS]o@m1xďOi )S x1@.]oQ l??6 QEq.B1^`'C5kPPpw0bJ *D6Q"\A8g ]R8cLǹ0hj&KME35) |Tېy3v*LqOyÙx@8<,`K2H~)LP8֜ESZ[i̦Hu@$[3(! 8X(%]$ЌlRh3LB F6-:UN`WhFj<݀YhUm-O 7ܹݔOO 33M=+< j.B/Z~;]6oR'fˇmq#Bm4");B3G`]H^K(i4[+s@&v#I ]PmD}fmєHĠ~=4 Pd{h4D4څ;*AIENDB`pioneers-14.1/client/gtk/data/themes/FreeCIV-like/gold.png0000644000175000017500000000147211257440734020260 00000000000000PNG  IHDRZbKGD pHYs  d_tIME -86IIDATx5WW3˴54 Ko iAcD @}ww]"1#Ffn <9nm[ݗ3KUDTD{#3 ST3ά"ͪDZ$#D@JwV|~_?׏TC3U29O`~y|:<߿5 MT?tU{}oO_]| # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA icelandthemedir = $(pioneers_themedir)/Iceland icelandtheme_DATA = \ client/gtk/data/themes/Iceland/desert.png \ client/gtk/data/themes/Iceland/field_grain.png \ client/gtk/data/themes/Iceland/forest_lumber.png \ client/gtk/data/themes/Iceland/gold.png \ client/gtk/data/themes/Iceland/hill_brick.png \ client/gtk/data/themes/Iceland/mountain_ore.png \ client/gtk/data/themes/Iceland/pasture_wool.png \ client/gtk/data/themes/Iceland/sea.png \ client/gtk/data/themes/Iceland/board.png \ client/gtk/data/themes/Iceland/theme.cfg EXTRA_DIST += $(icelandtheme_DATA) pioneers-14.1/client/gtk/data/themes/Iceland/desert.png0000644000175000017500000016101007771100213017775 00000000000000PNG  IHDR7kbKGD pHYs  d_tIME1 IDATx{gKVYU{~twfa 0ÆXqxFF N8q";pb E#[NJ#c [0% & cf1ۻj叵VUݿӷosa^%s~]]j lm{Loo|/}/(z?k}|V'8 _J>?ޛIyIŸ]B(='LsҎ@'WڗO* O*ƉvJ翏aGBf^/zӻگO*퓊1Vk~?o|1ԤOHF)#AT'WU" jxs k V$7gO* /Gӯft! \>O )ȧq]3|RA}*u+~px֮Hۃj¿BJälC*%mLzDWO8Ÿn7/?,wU/O97KzwhJS$^G")Ӄ S$yO>a2oO/{QR`h?1(iWz2Jq Y`g2^sY?^1[!{>|@{,.>]qC3 1W~bKb4tő7q~ZIA>㺕o>r!x#$z)mFp-\ 6%V1g1/~%^8|"(ǥb\Bc|[wvrI/{ߗh.{A_8✦@Ib1{l*T?ě?j qO&~D?_;?h^b-֓^ѹp 2 q};KE_x)Cr_xU x9_}ŗ_Í a4sI5*@Kmm$$?*(|oe_n?H<\xSyŸnxv >r?`~Mpn][%yc$ L9Oka>^cV1[!t?~_c?hж q_RKlyW'FB9>o ܏uS'_FÞ7Z?2*`0A)ȓw~o?<<\XV)Ÿn~/%='qe!>%+;<(Oto0+ñz N4swE},*DŽb\BoͿ ]^Q׭Ev_gOѮ[Ź#e[9% Ǎ}zmp[XHziԣ>rXQJxY8cWGcPQض8Wr?~#cWuso~}+Gb\R|mvA)Npߣ"8.{)x~{6>k~e_9OG|(u+J~sམ2^p9|Jඞ`x)/s:UY؞sU<~?S_|ŕV+ˮ׮O|)|@ҋ1lV,ycȫz?Rib z<68]rlU )Ƶ+?^ y` ǚGmcޅG.@JFٞҝ/)`7J' _kWk#Y^'┛Pùhi̇sWwl!)o[52F6[W1GY :?eV2*_OTkSk|':XqA]#(}HzhdqLQF>x.ӼѶlUT:uj4)22Rp?ǓS"3ww=Oӽ\;?5:^ŸUt~7?ַ|WflV cnq?~z l(|؆.=*Y'y17bLж4cU|[/[efOns4An|1=6q|o S:u*KRk/?ŏ{y/l>vۋ5XIL:Z1 <=Wq(Mw0 T1:lz/ӷ!7 Dp=ZOyST\3vL,sı޷;X?A՟iL9ދ6Vm>I1_{@DQaa~r&y"^/L&`[ Lx+q,$= ^b\BL._C1Lhig0$,] dg޶ ??N~Ÿ#}#>#.ɽS(u@ODZ1݄A7c(]kW'vOijy'eb&W+b^p9fu?^qGo Wӯgmg|{ {xP~ f  6CbGoٗ8V0?}S3|V>Z(?Jc~J*pǿSAPXpy#?vOك&8f3<3 Uwr;g0yw?>u"ۿW}0qsqʯ?`~ HeL1Cǫ d/@q^e5\yJVIbp-f<8s/gs\)#GB;H- <焧 '[1J\~|@ lS=nv~9Q⺔yv;8?WgN(jJ#I( xW %ބ~7#n'3%]IǸ/|g1 SVzX! sAgr\`K~}xq8hDžbD5!XcVs:gx(UNu:Vu%&!3={$&oEގ/|BA^/nF_-WbR$~?٨PϞ⊠Q#2 ?/&~U+X!LdY3Sa ƋiG Qx4OS _˃ɏGPS_<~AAz"寡\QZ&= V9 VDr_6!/0 =U^b{9dd]LA":D$6A70ň:'jw҉bNOy r/rfhק~4=8bBY?߽sC1V Df<\닭:Ep +Wyx{yB߻b>cc}91ey (fog^Hzwq R!8^buy(X[GKt!@|# n|[+m1q0)(Ň!!4 K\ƀ:HgaJ1(8A"F"1QZX5{_>@[aPc' c".ȁP}>ĘDy^t:|/iu?b=O*VXVH&s Z$΁W$xLA'D վCZӉLXڱs_+M+DczW9gԷ/!hL_響.ħ@XwF^"tL\(ZژX.Y=mns)G(dԝ>TvP.?1H"Q\/GAnI觿oE)7}LCAYaYGzVJj\?E \JAh e s g9kYWqZ[;.S/(ݒMbǘW HCT m7z*Q6njbtòP|2z?A-#a1bmG\/QF˩:H)>wĀ_C_/;?Pub~7>,we93km G Pd-FF9,}7^:x0aݡqU-{;#j4(PP1s0mtԨ p|aK^.0(n>M(+x)Fdm.=HxmΟF}M4y=ܘ@Z81Y:j(#0r*Aqg1xڦhAo&:_jsa%cq. ة#qnqyYmyj0haYٽW7_YC;O} Vn! &8^0O  S٘ g5Lj נòFU b[¼߫IW9uU?*j(\Tnٕ#]q\+6f#'0*Jx`ydm=[,!﭂D<~RߖOO)6Ƿu[XbQ9P W ԏ8y%,x5D @uJUkIƄVy?VxxU`"հA;u!z*\sErm B,n (C^ͷ7pqAĽ҄ 'UʚBlvM`6(xkڜ72}5ð]̍K F6B0!/"JiF::sc#O!{;q{ c3%pqa-Yn+d ׋QGa~$B/.aշgc2b?$6nlb獊tl^{ƣDp2bZ~/r]e-6fǷkO)̩m7=-ys~OÄQ 8Ʋ)^ M?(cMN~•n~OX`,-:yL$ a ,=TqmɓB~K~Zao+q)]fW4T3e{멶ܯc<жm,/-Kv m1_0![xprx:. DO8I[U}!~13< (8D6dqƎm-YlYf`Эp4ZS Ok@ú=g =zq㼰c۲-c4/'=o*5 fR\ ly ozcQ7ۘb;QB;b bJX]Zm\|j18ɧ`S{?[\eG=T{! >Zڭ'߲LՎng;&qx8w܌c# 1/qn!ﶱS@#[O³f G aZFd Gx2hLJu7(:Чh-4)ȧ\^02|}Gf/~\"7 ⻐HĎ,F5h),m.@ IDATFLrdIՏ.Xx~|-s2ZۿTxJKo-^LMFp AŒv2htY'RG_ZQ|9n9}9y]Mp]a 膬^67)6VCÚěfL ҙ>ZCqر#2pm샄۠4KQQxGaHXl B~AEQk㳏yl,µ-111׮WwQKv2pHmV1b1.nrDam N(L[E )Ks oH1=**I"'x-7z(V"Kq~ϷerƒҏaD~,=h9hP}V#͖J: 2OymՎ;dzqE߈QGNo D otȍp c`os,Z*$,l ؗC"_0oqX'4ҤQEb?WSDˎՌ0>1-JzǤy V IwnƘs:fmXp>Z߱5pucK} YBPPx#&>9 ^3+/?s8 *ǥ6fI"Y< $Ъ\,+$aDbqY`DJ39p9}QNP*[ّ gacۜs\#Jv,qG_.1 Pn4VH UЮqK>=R,K-}ʪPU{ :5p9#xw ;J SN&- BQ\&aNp.ƯDQBM@U稗qOYpaRz)N4جT7 1׋ pTX- P+1ӯAuTwkU*Zɹ['E@YG Tsd Kb2UY)M j=m̀$q%Ԅlf[eF }<̻ l^-$i?3M;Sа$,y 21j5{uȠ(R{ Jݵ:sZrԊ0$L.%wI$Ys₉+Y G>Ž341->q%]ZQId6h]xVzaLP@ #_pHq=!n\R|>[ ,{I~#̲.ꊁyO@B CJa]3lPRxnYp+j!c9I3 aigv3g7jT(0 dS+eq!~,~<u\=RBNnCr2 沓X(yj\$Ӕ<%@Jʫ]dA[s8ޔg ETƉsxd˹RZWdU:$YMV {ܗƽ"';{a"hvreG^:`V2vrUJ-ue )Z{;') r`ϭ&sPy`KT QlGO$ox*m2mWlTpʉR| :6 1fljx]UD"B'ha bTgD0>V8޽k{,%=`Gj{R"M-EثT>օT7"Lպ-c(*EۣP3L)kEaL1Z^Z)kq'V rgh!{,γcFcϲ$RI ʟ) [s:;XmY@t„7yʎ5U<JY@VLt#Y6hrk482kqΖ5bN):@Z1bgp) ,$53/ʨdiqOSZBD O1Y-P(1m]9u( XJ-ł\Z\a0A]Y_6ԕR%8UuO2Ek-e9v4IR"OI0USR'' HVRLyjxRU覔sfʳC)s> jT@+a1xXªJ]W>Lx gugmbDž-`l⪻GNIZYRK`.A`ڃ)e;(aT"7<ޗ8|I9qkZ Fl8xR6ciJ] r֦\݂v|F+H{"Z|,h& ^R8ei Ac,BzQHH$#219h J=ϥBY=/ `c0zbN7ƺ\2&"yh I z ]CRY괥c `eR *4"%ct9Zg,⎆E=8m rԓb)5#`ҵQpM.Ca޷*IasvՏ #I 񷺁9qT|P67-'!u a!sQ\ZYkE ,^`pZ~"9,T'+JFu q #,_cvoTKPR{.dUH$6cSPm:ܻ Oo؃&C[D ORvv(A VRꁗLuj,Uc 7ڄDU -|7S歷fYk hEռM;c."Zj,DEMN^"b'4ՍM̟c3?)soTV$`Ep5pOz~]#6рd@ltgoAB bUixu+ޡEq˙>/Zb˲ ~jSRBi7(Dy.ԪQم1Y L |tM&&H6 ?WY: ҁǷt(V8ؓK>bv/UOp4q*S5g/HN2.V}?Ky<1|,D%Y̖ܼX {Vt{mw&R3 &w.h`>'XOp]wC}@344}Խnn q ZjoVK(UjE\Hrj6V:<0cfy!kK \[Kn8F& 29EQ [EmxKeN*.DٽT!@!ؖG-,%r#-ݍ$@i"NMЫ ?wcB&ỉza`{UjwYd8:<Ѹj1|)aw Lǣ-A^ ur+-V_e'i2N:=tjT.3ω;\Lei ,P,F&?Vde4&gZ DtX.W8噒غRp$40}K"drg=Tٳլ${+Qby}s1EǼUWH˪KV%:Z9&s:c NE/[u02@7KyO>o#d#>r+Ҏk :J1Hc{m8ý;JH"gv ^Ū<T@k`G>T>N9 0=6nc`.Wb." 152d;$5܊&,m2*MyP*OLÚicZQ^K10Bxrξ~#4=>S5T*∑PZ)>nM@ƈH}\Sd %C XM1:"C})ϔ{lHŽу:J-1qu7>й qT!Օ@bd6.>o;]plfuR[xC)pZ=v_eg޻x`EQWQx|PZ2-q}gL-vFrd^Z‰p Z1鮰Ju9!^ l<Kir8"jSTT/E@ײ5cXUJ,H}b\м|aa.FzՍfLn-e VeZxA BXO62Vr.\TӉIp}Y٭VdWJM/{(ܛ%JrUeAuԁU8^wS}?8_U[ o0p-1Hh5E" VB$nA' jչa0Bs]<vFoKsv=C3(64vdbg )UC)ؖku?Wgx+MY-Ў k4X&ݼRAcbķoj[ވ |X(N3B`"C"kdp2iء[(.|Z?ڛF51n"7Yozm .4i^P.nV /~r3QX1t/SKmUvq)a'E0:@W&@Zi/nBӤu,*ҨTukJ, m(ijyu i])kiuV2ZP][]?i8?<97tf,qe Ox`ͰDiFXuiyl=J$C(fr7` LQGՀx!0WT"#UF1M[eA`uY#^5209P4pF}KVqY6K.)D%?6J=%j \GdS'>AiyMYĭTZJXƨDpDHqu.1V[6b"\g1(cPޥm0ėD7{Pfԗ4>c+U_^cKi<8:2x}eRa:qV10Lz5b; 7F׬rU*Dyg*-uxix7{S˻l6{r̨45%;.8v!Q)$)_F`Mf'8D}G?F[3jUZI5BE'"L{||.83)RT 5د:UҴ7 G-fr0oD*pܶ IDATN~2 1! "bbu>FIqlM d4e.ul)J \F3XaIqUjxkthVR'T6U2uR:<N܃T%w1";/=Am7u?UB*@Cn (Pj0! q Imp B΅ʔjDIKCR`]IdsBoэK" rE Nn#ōq6AS8Numub7^>^' H={pywδ;c:;g`fId&,;#S͆͡4`!u]Z쥥 (8 AUh\[K#a;q%J5,Zl|>b+d e{+Mshm8MM00> ߮x v{_Jbb+(ڦ%,h\^4>::kB\.$aj8B+W`iFԂFۊgQ Ui6ȑԎK>ɻsWɆ˧[Aޝl!KF0X.%~4YRT]C0 Aٞvy7DRk, Y _J`5`mdگK`j)! bvH`ش[A[x @Qu bwe"6S5Qo%b0򖢱*-uwTy`:=60>iFބv1Ϙ7Myo? X( ӄY%ϐH#֢8DG-B #v3~~lkSAՔiY5o)1uS6j}WU{gnCub{Q;>M0=wojRTŃ՜۪(&^Y}Fo)cԕZWΦsrue]b帲WvJ+uxqp`7 ϒm޲F޻{ZeY<1EejFQDg*₳3*'{g@FR cnD*m "ּۧt5E +ct_\ L؞F6k9-i((7 vg7 x9Ldc{p.m bI޺UW iԬFFMWyh,u@OJ }r9Ɛ{)1hv\$Dl)cL|R\\Wj,u }eHIy?;Q.ڪý˺, zD~ֻUVlDz,ܻsFr7. SL Ks{5OۊsQKp/$=,ɶ(] 12hlU#53"Ļ7Z,}5A-&iEKS r/.Բ2E$Vھ1%SDՃF7KS`?77x-n>|~io^f%.4j/_W4^ުi(6C\hJKńz1Pw)3KtL*U͒ β4/4XP.*T\'JZI'&QD*3+S%ق$ ,h])3RY [2~&g3wuaea*O>縀mT8*n+={ggG…^,.&XlVFjr$iRw?2Tf,] W#@g# ZUJHwo5ehtVdDs|^;N8Cuz=cb#CۄEEފo0.L?RjZXBK؎EU1[3[]RTS.yPr{1xpû!0ئTum2iU-[bHeO" .&ÐQ\7VRyO/l*AD@y!9yQϵ\" k͆!(skE)v o ځei %cO;8*mel;u-mSa[;ZGQI<^+PX8{RHYd&EFAJMdycMI}뿂 ڃcЏ87VV0:m<"Q(^>5-Z.8dHH PaN9[~%lEVA ffB0L; L9y?ns4hYQ:JD+3e*Q5ъ4|FeΌFWe<swׇ9rüaȲrEl;r`< 0Lap4m¶ѱ.q4gk%(AB-%r?|R,uB}{#RNʹfit.D'4 +4]~1p.JOX[t!JRX9*Tn NO4Ҥ YCA6iE/@v$5uLD\Loÿ!;{˱St}s]j"zOUT7I/ЈR^fx}T [*>SXPalQ8ݮ>3?` !j iĘ)l!Ik  72g }m:JZv,>㞐(pHZ&Jn'zl5hT1-_ɑP2dh%8q֐Hj Έ(> 0 `"R]e:ѥtOb$E:EvQ^9XǶњz6^ Q*υP2@nNaB䰱)^ՇGt"YCr6v(?2{o[=kpc1Jm[ƾKY,B:ʜPLpȎ!964)-kn#gV .9'F.Au=^If&2TA%DoXFJ8&V%,NE@fulNI=s%>gZL"?9 i%_D9'b''AmƸ!$G0t?}&@"vHNSY"cC>l%E^P-,,\sr3@n81 &B)~%z<(|=aߵ:(˭5;ENX&G"6MRbӽN48 (^6 dzv_{HHZᕌŠUq>pcB");&I3TZ*Dh9:s6n((AFīUKYk%HԐ?.LaD+JQ,FBXq#R ^u7zxj oC8Gx*t1F'%t9o(wTߥ5:hYT16`Ab}2@vk=&:Yr/\J?|ƨu"X$)P a^3FtT0h0Jj̓1c$IRd(R:pe) GJŤ\z3RM.GfG!NyvW e7I y R EUbs8?0Da[Km*(+gp<'cr8UO'1J2H rx` Jj8ӨЇTؘBOtWbx t%}:Ga ̅HntxZFGkH%4ydZ.Sw:P2&'.JN$ޜ88Fw'F߯{9_T:19K礑R Y~;!ŵbC3puJ9f:(Xb(#zY9Y^~~)"(ORbO7^1KEʾvrmK8luR09UTڀ1#($St)I?A~];$a =yI=4LJ| ɴxd*hS'Ѥ|lF@J4NOCAǽ-JuBH2 HtDߔuL5$Ɂe<}V_sIgq% < _<:)"S;Pk%LF̆G^~Ƅœ)uhɸ6D;Viħ\?EB *ů{ſJJzmQ#tA81ER!]-9ޥE:h'sՓL ZQĴIyA%*XY'1s iip[ca)`eyFX<;% %(D |1pq* Af!W2 )uETdF/*urq_#D,jJ%'t\Qo^t"|E-D :xA|8Q8Q[(D#$ĔM\n>sJbf-4ѫ&À$$H')ItS .^kZ(뺎5>y)I_R۝xi鉤Tp !} 8 Aj2hŇC ?GgŃ /+<,3'iHNhbL( GN ihKʅIvD =^OHG$6J.d08=y<m%qfEĻ%'eU 3:i_^pӁO̬DdXO1 ҉WcW:8 ?~"h&cL"\K(njOIWEYtir×N4RK3'EZa"=#ysȩFTOK7/R&fXV_%&PEcJ!"_P4aW;Th!zƓISx]:$QHkv]tJ *"-œPsQS7;=g1N-)F]PJ`w#8oo4(<us{IiRm'>[o _KMp8.! KSHJUIΖYQex^KH* L=Y]Bb. 5NW*y3ff^>+"IW4t;E:L4F'@ rlA^4D5St']Bi-t(RSÓS΢M^'1N#ƕ.xނTJ4=øG6]&ɑg^ IDATHeT,4,kurCeRО.tw%Ϫu&3R4?z>p8)=1Ӈ>QjVG@T&8XD ӥIk5𝲾Ucq DRLy6"49)Zҽa{ Q_+"M T41CB8Ĵ5mT3eE\MrkFbjdP[,PJ:`q3Ǖ)Nn9

(rl6#sI=ӃC6(F |9aȍ2A&!SqtRԉHhFj2R)'=w?ưzM{6uB|2P!~_*La^O/ lnWAËΓBȑd_$էȕ Rڗ"IKKR̠@T+rsS:䋙CR4!1*Є$ "QHw1N>'̥䂛.hCUEAf2Kn%3&ȅp湉 E11!ɑt֫XMSzb~ޣDM=Zk)N#*sjx!$J^a~^/]uDk(॔ jU*"m:bbh,pxvj4iXO%b"L>@J4+/+ $Ml߈^E/ ^K% [tQ_Uy 2v:, n^ݰX,ۖ0lʂ*Q$6'L ťSxB|s$=Oxp @,5|:)$M !V.Ң'ꁓT(J=JZ" ǾI>#]ےUUM4 |GQZk6O=l1& Ys \ZNhLeI $jjmRɅwI&cyy2HT1"2`ƒB]|T&RRͶ>J{#"SH\~}, 6D5@gSjD(bqcmH(]40 J(i0D27g>\Ja ]3.i\tϔ\cjj ik qdQT8Ή';&SC=0|R_4Blr6&0 F6}JY lUh%E83!KHZUt8EIQ*Vs Ra?Bi?='}dv=~1.(=|AhbNYdahZ`9l_c08[y2'1O9'6.ME/N ?Fe1 MIUZcڑIdtdNhVQ4Fc=m:A xϴ*Ԗa#uimȌI_n id9-EQq¬Z<_Z7C0з-8KYvpl(Yd+ À"l}F5-ÁzV:[\(gkF;t/`1_ܠfݒ3'UԪG-K+9DdS8}|_'z{dJ< @+LJNVdy>M,kG9l0!eYHFr6Yj̅tG9ReXq1vnJ$>wUNX((s!;WԥQTFgt&GɁ (V[1ZLiqC[..Z3lo6oV1ْ( / 2g\>eU2/Px6O}KQsFMsnw,nϱm%ٳ6sdF ҉$~LMR<!C'ͷXGD7 t@۵YfʰR%cpwWGW3ꪢJơZtCۢaAp-7AqRj@Tx9qp=ٽgB$$SА(P+4mj&ZɫH2ƸGBkP$u6-#j0UA,^81DB6@1lAU+1,/H:"V+\ct ꒈB[)~#K,vx?x9麎㱡;;gKEjxdZ|o5s6= ejMk;(sۛs5ݑWdENnҚǁr|h|QSn6>nw UB [oኡ3ĨErwRctĔF4%X :qvA^>t|2X,8釁mx*,}ebB}Pg麞'./́kÞ/𞪞abqvNVV\^gk->~n^f:˯x s޼{˻|Śj0:qf5,ؼxy|Ai×/||sCڭnQ5M1-Pb"+#z: Xw,01FYN,0!Fh\ KL2I'F>gj2z-Cg(IY,D6#t|d O}u5 ڠ%jP[Nr',4Fθ]?:c>6,y o~'aGdE,,@լx:g //fmI°#PdX(J5 H1I'),F'Q14/P8TuMX秨UEUUAIOUΖ}BUWTdF7! tMdz3uM0u8Ǧi{~kʪ撫W<><7oȲ ; gXky~0:[4=hcsg9咢,y~| a[ʼW7᜺뛙/[26#M{7\]_RU%a >ߨ*bC=YjMlLu-'UD| )mœpˍH 4QZ~.LRLs6ZaDL8GDZǡ'\DR* 4qDZ.[It<ЃY&+fm/;:|nRzxdN07T pšc;ڦes>à EUkg+Yh=CCCb(J9MY0LzmswM;|by[׌_I}8>ޱl7ް O/ͱil1c;Lb6₦ 8W"s\\^0wl7[ʪ_"tv:l>gXx8dZ&򜪮8_麞ps3w?偗PcW<<0z(ʒzVPUe)#+ \sUϩEQ?/_9n| @Qet;gEYPFk/*T9փ:S~goG-<UU+Wk1l[V՜j>jʲx8r@5ݎ~GslC ~fŬB{K+?Y.=l)/1x4TbBHUa.7htH'UD&QTtB)42)^x⺂X*GcN>IqZWT쑨dyi[#2'J:!AtiF` (Q%uK},)m2n۷S:>3i wtM6z9GA"2!+j~P=EYbaSUUؘ:ea㯟i{o*=Y|>'jv}{c"ǁd|c`6X.^enKh<>7|mгEslz hmw=Xx}{\i4 ;?l{ɤ--SS$()BJtcY 9F,(FF4E8L;+ BҡESk-3!iCQE0|̍1Ac>[EL%a ,$M3|>*>OOlykyAU#?~꒧G^gϖ\^D?YQuWou?|b߳p8<=4-YQE|1 ~7q~ss Ζs'pQжTy߿AIMn+'+jCSk6huMU0E20 uIQm-]7}xr 3>|z6(BGyb#ǹHI^Fh$T8OQbG 6'd1Ib&l\Æ Xr$HXkMnQ&FQPVeDF IDAT> ֳheC8Aq:Xؼ釟˯C(j7Zw(cxkv3ֆqY(sʺFṼXQfx) -ms'|-oc &ϸr:4#?V%58`{/.d5CߣP<`YMQd&E1:-1Q/C?u=;Re]WiyUo߲8?7a hc#NٲlAk>}ne6wkl!#*,KPvzf}u~BUy=/OOl7{# Zn޾w[2e|'{*łʹP0veU0[̹X+Vl7{~GmWg^3#XoyqggK?{z5jVs>=EY0ENY}vl7;#,47WV9Wt#+8,/WO揬5㑧-W_Qd% ѧl?GCڔUvqv1+C]W̐9l:Ș!gıXi8@)H/9}LA6f&,Gu>vĎ.FuєENVŤQGǻw/wOǟCَ@|7򒗧g~[Lnz i{>ذ\cW#U]dg3+Ar3Þfuf^tc> ~~;TuEZPX;wG>} a*yu-o_czv߿lcT܏ Vs^Q#9x~{`Dwg>FY|/?|l(ֲ{|ڑOupw߲\-B=7\/ WxyڠW߾Zʪe軖j.<'Wn8])"vzEd>Ff:E4YaV ZaHj^ [5S8ij> ^E1-*޳X)*p}+y~~f><><6-v1"3g g- u ݐJW,^Ψ CyK8l}.ԥ 1`^>tDQ)A),ӟG -ox~Oێǧ-//[)?|?@4̖sY|dXp  f86Cfy[K2q<60dZLpu4/[Þ?4-ktc(q,/8[ yYpZS͡:6, /T?Z>,h`YTUb^sv'?ߑ].k3=,'E!3Mo-͖lF^)j(j_b$& k]j9`PV)-<][#K {5:06Q%o޾o釁~wa{%U]ow5߼{19iEXt#whoycbV3;_Ek#y]%nS"O cG]u)ro\<5~VrvqNU@ Vlw;ڶcw\Rg4džrAYWx?9|n b1=xyސ{lv| c mw-͖{6OρCմtmG^\^boFGۍl6?gvsEYs<yzhӴfUהeű9Ϗ{z&l>K 9uQ9YUy~G{ Lh=(ʼH8e4MׅuT=05-0Xq>4z"/hc]^w\Ԭfsn`Xҵ#Oϡǣ5Y Wl6[ȋwlE)x|x`٢|Ag,}KvX@i4Ezd?9}ė_nR,7VX1J1h_hG2g6?cy~F\ , sulj6C?P5/gkn@+8|j.FrWdȹf}qI쉖O'fP&Ƙ%fVd2igJ8ڐh$`N2 hBW;eu,:3uLwm/b?r<qvdXy((m3^߼( Cn4/OG޾{bV2+3Jc ? SVl6{~P~64i+1tMCu17g^߇~7}jwmC2DIcǦkg%& MC w_++~3= O>susC]W ^}҆|oږفRNa0kp |,, }b2xO`90U(4z%+}w K8QkPs<G<@Ӷԫ c?5Y-U]0mjIQd 4Z8k=ӄFP3Y7L9#֊rhQdd8/f(]A9҃o͞ f2(a[O{8}~ { ]oyCYENs8Hie]撮 g6-jItO?u=嬦Uqywhږ@sl(KYo;pˋ3<{ڦ-cXj64ǎ_!t#;_pyq"Gf7~YO=tǎO?`٢f5yY?q<9_XX/EN۶6g;r<ԋ*vyy~£~*4O ,('9ehm;j jps{G~Hߏ<y+gdf61_9iڞgv/x31t,/&⢬ѕ-th/dQ9q_H}m{&Y([s#PhGYmBn^t0}u-vA10%rM!F8P%zMf4`Ǒ,YeAglcpOOrsnni~Gf9Zi?a#>)qDexvblAQU #rŇ:OJudE6}f3?sΑ70>ТFiq YC:_ɠYqj6c6nr) |1FAQhPV9\2_̙-W iC7S3JkR6[<(ʒj|Χ͖-4g3Rx!$QP:u;{뼍k~>V$$'&,XLZo_G 0YX4 [t<%pMfh>ɌQ%Cb:cyذi˖ke:1^u4g(Yac;\kf*:lRC64^l)SkNaFױiJH!ӈu€7dI)0&1t1'?%ħŌ9N<ݩx<`%a8E#N!)P>n4'<¬}MVd8l\ nJ%|yXR0=U]ssRG6O42[secN&LiqƜ.kLOe^Tit,*+\f1Xım6Lun(ʊ]bF)^Z M4|DS }0jB۶8WmUQ;YeU;DmXQtO=cIKW\j:rmYPZPWW WkSf Hvlh*EfStàk:ir励W~r4 ql5Q!LLK#,e=i_~g״OkvXĕa!mAćtNE]K໊OԴN;ʢj[%3LL8‡Îd`hլ Sp$5m#ĹI1hoI'\ =\æzf <(@ ,fǵڎT xuD9/JuIwmS8jx)]Pe)zZ#iНB 6%9B؎`2bh:M̢gyb^qL&pgh.SfӐ,²%R*򡮩 hI]7xmۣ:^ͳK&˙R$v=m" 2<&e:iƦp\mILiKLqR*Gwσ8KQC6Ӷy{ I!L90TCG Av`AcӃrYф| ajaa>R;+p^qy'0OUViF5 |PӲϺ;UӑeQѷ-ߵ ,Y,hrIE4 =m(8QuM$?%cy0YV<{IN Ñi0`ua{inؖDB:Ñc{aASl}1tIP]30K?<gA|>eqműlQò,LEfUkd.mc;.oQ\_2 `ꝥ@6pydF4̳5,+b;~(q\xIX0,&CBYhCj~K0yNg-NIJӴqi*+FJ@XR.mQ#펗+ Ӳy';Ls|bBQw[I :ܑ%)%dԓ(D3 ơGm)rqXMm1N>7pY="6SBv=gD%߼? mӱе-j"(*4e٠u-K? Fħo5iɳg()-cӇTu%70xIGa= |Ϗ4 SJI6>$*n{`F_RB*36l>;DŽ,>z6#sTlUMM&{&0H# x Lq Á$ɰquq` {6O[l^65_~lz8)8tYKhӎ_"SƮmiBӠ(k iNCn`sj0gقeY  /GP]qKTVuCFL&!e^P 8v{%[L]$pM@`[Ϟ]C4M^ aq0 1L%ӌ$I=mk\n[/ɳ S)yG iK>s^%ŜǧYoE@noxwG,Oʡd1MpcQ# |ִAU¢H&F b? ЄD?\ㄾO9g}H ^y>&>h"S%ژu7 %%4p8PɪR]3mA gĔiTMj1x9tGxsz&>쩋2< IDAT '* UU*nOvt})$Ŝ5o)ehN|Lɒ}nf8d}sŭexzs9i*f`B1C\,/ukH!ﱅ*+ΝV5mS:$ >8nd>1GcAc}7}WU50 Lt" &Gz{+u3g+ C}˫ DZPJҺ&=%`h|Y_,*fk~\48 #>,ݷq=S 8,!dZ_t4tױUmiw[}aokںС mM"&<'*qJ;(ճk^}]Y;`Z\rm9 e($RZN^ 4  ơg^X6Iww[~_w ]l9e},J,ՏD8-L\)Ȳ uΑ :͹up86`:M]RU}ѴINI:N#4S9K͠xěu69ұhMWjC/ wx`2_X.q)]; *d)j&]rSַkUlq[78lPHG!@U14Aڒ,IO)_#-z(+>=_xpOYV &( <kDaط{ccY8M 5q 2Rt<ߢSP 8)o~k3l7{,WOGd.RVVR*=f;0$'OH[k#ڧ˞G8byEcG K) LC'=% }Oض$45qdCre[P{BA&p]6\tiAeRߵtghYTX<a6%0y/.h)ێ8L'!,h<) T6ً9ˋ%h /p]( iǒLcO,) eɋ4)Ld8 eY^M=\AG,34͓eHE6|JJo|yQ$Ĕ-ٔea8?h ϱ8l1oc0ݹ^,/!bF =-ǶۆmIG,Ce82A5z..\aA+͞P5')RTcms?\۶p\]OhS<}ļbbu0zkTuUu)N8't]g(* #x ~!Y\FXΘ.&K힇w{1jD/7\^X.fd`@qm ӠkZ5zRxD"MFyO1~&W79iPO֞1S7i%_`:hږ<-ʚnҒ{?`6+|?DJA4]OUygdL&Kt>ǖ׶0u(¤끾G7:7׌FU$qF?씏 }%w둺|<|rܝHc%rCk _,gH!2$Ità?-ݓV>˶Q[}&e^rW>% NPUmÆ,͸dv{qO~'abxR׭:)v'4S0r(9C}tb\L<>xAk)=4 KHں.?SM K[^~{D $4i`:}U(0_Mf mIxbv$q)lO4hnwTB0 ե[LB\ZP69Eè\(ՊIDw2?³]ס)+Ui`ھqbtuNuISaZP93.oBR dnwdw ܾ!M=WǞ|juBQ<^>ūϨ(hX,fLBx4ʦazN 'L,`w{H35 L&cϿ׿h ӣ1Y#L0DZ=4S*u&4 a{OOlB0[-À=׶{%e:jt &>0`>/>#LS% ;\ò-B]LrJX/}LȒ2f?jЏH,VDOC*?rAF%uM[U &a)}?|$=*OA7Χl9gq^"I*4 >QaGD^UA(xt}O],8%dY!mҶ? 'UCU֔yEv4[t5S4az.LJ'bz>t i\X$+1 04KT k]?bi;4tHHG>7M<#TM;L\G QQ_?؊cebѣ1N"U:^IVW$qqa*+Fxպ$1 ʟMIˌX_;h&P5q}i[FYVTmnhi)Х[Bcr1-[ !pl``Y*#;La _,1 i*f) }Y7|7;04h>FHa*Gp2&Y.rY#%oys\_?ܢ!mz\/B34\òmڮwdS30̑ip$(2(q6r}srBGmچiۆ,sHj(sE05IצhzhJdi6ЫHb6& ~Y2[-9 hxHQ4MGUTMzFTR.$M"&K4MDŽ?`v1[f)v-DQxj斗D_0p<wMq˷#iH&_-/$SgywZiؖ5z˨ӐϦp%QD5l]5TEE 4(FU)Ȉ*)򩋂Ki}K7@SepbPG,5%eUS)~-(:3Ȳ0L)>W/ Cf00h*O$R~KʢkSث?n\^!_aZ 5#2 C"E&}jO$ m#Mө鴍R CwT5Epq1gXP5EJNC=ePR ڮ.ruO4$}USK#MRҼHsJYN0)4q({=M182`: {QaƑx$ 2sTÒ&}ۓP<+1M)v'$Sc Ak S u?gg?v߿yj9\*Ƴ m20yKiiB?eM'XEE }r-5=- j̨}?|J<}ϰ< &%\u\^T43g:U&96}?L?i]v=Eհ8O èzE8,sWR=y.璦^=#}x$ 4 Or,+Bi AMKժзY, j0T(e:6uU' E٢Mz()Y~RJ9aa IYռSyh2Ð*+Ǧ=GH'ݙP*i.iܟ~ O'[;ro-c1X%mw-deK( FFOjCdEY!`XlTTkֱf3 ںUMSet<~tmr9c6LS6TEꛋcrnӯyѡtC{8EUU$Mİ$BmCS5̗3("K3v`&"߇a;ad<7ڲAt4Ci#M3 N@ (1%^|ؖTYB)o??${}莌%ec> {~R7-Y^b;6Klۦ* a6sqJF͗l'~rcZ>N| #lʢ1#K  3UKfuJ׫%]7ڞ" ö/VֿGҋN}_7o -54MꮭtF:a$lwyal˲ʊ2՛ݵY].y!-4\\y**Nx(󂫛k$AXw#a4n6Dr7_}yE^Q$)ﱾ"O˲ʚa14E}dݳƁ TJ!- ϱY,!2*b"mf¤ʼ8o<οk!q9ۛ ,˦+$aKM7ql !t5)ՊrNYU$Ijku:eayw ^tW*#݁cQx8* E/7t$ 886JH u4nxD+oV džW錯 >G>>PM`HI?6{Ӊo0t)iK*cHqOfBFF!]f \ЌATuˀBv獠:П% `O<}tim0Pʦ0 wA+iEudyBˌÀXx`-go@߷x0 MOz/ \WggBul׵`uH) I8˖Iu5zh7XR2XeQ3lӐ~T.`=zWR-X¢G z w VUB^Ak;hخMMKYVX"K 0,c6KmY¨H[G!QEӐTj! ?M / kX%&)v1FF]Ǵ$)8RV0Fnk*uw,a۶hZ׵Ё*8> 7ſ_}A 4q=4 Y:03`Y"K14pm k1?' PV4Md>C :WA7_d6~ag:@6w\bui"ݻ;jbTUMϱc#‚Egojjq G"pMC;ڈ)$up,F^qf5cTy19^7@ۖ؎mӑJ }Ǐ8:MvDihXiJ?Qw$4M |iN tJv0 lovUt%mS5 1LJ'eOi~(iF(()+*J7 PdAxvpBy? _g~Gۯ?ʫo3 Ʀ. S慡uALY6uθ)+U.i@׶*F*ƈk[\IӨ,I aqlA`X!%USs:$Ha1j2Xx`Xy.e` ',C A[:U9j#mQjkTZ? ai]ۣ e:m1 i? #>Pw#h']Q-Kw1y}g_^^YXc$`Lc$aE$!G+C8X BIpD$v  6xf{ٗ/|VUwWtaf^Uw9ܺ>idYր![{#t]nz:uS4趣, itV]fYh.NSwގWk A0~~(X>qcNi6ecDZ.OQTWU(JYf+ yYiZJ8UtD-8M[dQ0O)LDG>|ij͆0ؾd>]AaP%*φRv4ea[&wKݤ,Kfם){dqiY:2wB: ÈFAGj>ND4v67mﲽMU̹&.$ec]ZY&;;jhIt&Tr0eYEe樾$Mm^iA^H%o41$i,J'WճI ī׉]*}] 0Xb2g)k)RʿRgscq^oq۹3[s]t$@$)vs퐤94ɔ(dSm[wlP( '3UYa_ſ|_h92 dg/LIXdrM0MK"JL`6#KSHҘ`8dۦr$Q^Y;4 4Ju<γRRo5ɓTuKM!7et;Y9V0HBJv{#t$qǻ貀o/ZhwǢRJ>yDLn^Z ɕ#R'Y8FˌwZ,&n1O*V+tVwhl:c4be50'\`0\fSשy.F-՞#,"04+Zd eFeغ&;.L%9_D%Ie3j[BP嚦 Cp\`}nU^;5v) h$`{62/EFqeY8uǑR xM^dXҼ@j&^8Q&nCRo9}K]vyDAt2ۼ]"yyRG$YFj|8E~q Ϳ 疣^y\7?yQф=sɻ.KWWd{I ˆpec+,qS?Sof0buedJZ_ ˜v)`<EEd09yb\# cVn;NRGdCKtJ~ IIEAR ԇ#r2WfMS3%l:T4 bO2u$#M3\ɍ44 ttCXqhH iT9D9[iJg؞MY<%(E4j<'OS( q59ڦUWzc_Jân0b6PʞӪcnIBlb4f0R8N 4[)4)Pdʣn&yYgo&{ōgŸ:jwŴMCFݞℭm&1VN.T @3m{Sw{8;52YÆIeضHfӀxv/q=ŭ4Z-adiΨ?rN=;ϲ`mgnCL(lƉ%u%HQ`[fE=S 5|^|^Mj{tY$s|ƱMJY$VDfĹTB]m ]W% J gYJĴ fQL&Vo5])Yjq0yt\l2bsc8N,YjX^j`Zýejᘂf۪ͥb)A$m.a, th5.ijJ(".Kq į*/h6EE k+t+4N*l7L2tBLe䂤L,m\kMKǶ̃ʙP i"H<˕ skLIV02(U+ FD,S0RE}Mq KIY0t$V`BIm8s6lR6R* R.dgs fhd<ŲLt`7`&Tr8rľܕEh\Ξ^^wʒ8 Ir@,bZe*4%Qb[F Ӳ[ [J,nfř^݉nlon#Ȓ`<%3,\f m)DRJL2-vv謮PU$ݠ7@6~N&Kc@+f{X…^+<ƕZt!C>/aEg!LzyYơD͋EVJ0mx8 c(yƥMD3LɌ,P5glJ(a6M  F5I(%sj5DZl ۱B(o,R0%dyno.QB:?2l ]iQjXk蔴>+KHM'K+JuѶAQYV diL&}˲5j[ Mc>:$iF)~ `c @caǢb%-/9^?(xK_{<𣐤4j.e)"aؖ`ǪB ä>0=D 䥒)P|+Ws_E^2DDZ*+ik4A}5 Ty^E)YV9IZY6(yjM7MQg+`چ)tu#E&$QB{a;uL]#M-3j8h`0s4-F ϳhxP~듖7S^}q+AX4@~ći]/ݮ\[[fiE)!Ks׉ ,$a&)I"}9)QeaÉN*Ϗd; O6R1[}LSإ^t8d*"4M~pF$hAAL)R0 4KהA?&9%I5~G{}.I)In`q`0aOT}锒RwQ޳X@S x1E12~y׈l-([c4xb[&]֖loS%FSOR{dAY7:M;rwR7N@÷ w]c=A%2 eE8rrR diZwit]6zl?r 5eQpmELSB9 4 Tr9uz&3Epp^Zp.ʕgr-]pR+|BlƩd2v:NE?ؖI ct]yKv_\ߟM 4Ļ,ySonxp7[wϢ $U2)=+'e,p}8oE1OܿXԶz CU,ա]|W4 pHdzX;ymwt</3??e6OK`c o}WNQRQHG$qL% &Lz{G|_ pnO1TQ5$2<( _|!4jJ MRt; V*i4,Ǥ!4Sh7޳M'xGOs@i y, 5ܿ$BQSJ# cFބ,y~Tzߜ6  S9>C DSwV0 +sp,NFba=u/~Z<NotLeDȒ4`{k8dQ%8p=P\}U]PbM 5OH kXXNf'7bϮmQ X<8{<ǿ2,FYÍ$~ƕ=qR=s8$h%,`PʜCpH$Bױ<˵2i >@̥ ̪qYB@ZQ]#\R\u!9‰+_&P+^/l|cR6M4S{If[+FzhP_9(dE.<1DE!_qyRZA9:7qN?7)Ew:  5`kw$'O9!oR.rYA˹9ǻux+ >)u7@y,^=~KyLJB(5d+9wZuu.G'OjƝ'Ko$QǢ2g?l!|8z%y2-ӕq!o|3T3X4@_/\޻zqonW?^5E 5|A'7;x+nXB{ >ޜ3T3'gn gupGC4}sAIDATɽsj:?ߟ,>7\E]7BaIENDB`pioneers-14.1/client/gtk/data/themes/Iceland/field_grain.png0000644000175000017500000016460407771100213020766 00000000000000PNG  IHDR*VbKGD pHYs  d_tIME;V. IDATxwmK~{|: /L02 " X0k( 1((   c",(h›n{>}r{WoFMxs_T^>1A짛.0n>g3?g־?|^ħzۏ>@&ν3](֘ws>?;IG_hoCwR0^@}PEw_k^pG_Ȁ wbBQ@ā!eda`@;xk_o^hSGW7Ta 7`$N@b +;S65@|k".%JpLB5dyo\}*v_.U]qQ0EIY(Q%B`HY} x{ŧr ke\P!\ uAp0(B4΁V`R o? U^w?>­1H `+1~E`S Dx@Ä{ 7B6*Kwn_ ?-Uɕ5@"w{a[|c5 hva3L`cyCn.J QfJD gEskO&O^k7{DxW,eSk&eK7%`0"q\|>(ml0C~>U}m1fo'ancv_l3q4E] )-X"[o΀mͣW j7oJ.FLg"auU 0-(;"< VHU / {^~B*^DyA`_DA|\>^AqdžgQ4pc ))e"5"BE|:JϼC],-NճO _kB5 QǻRy V!+&*aJ Qk>2 [}J\IbP7xa/wSZS$ rc8ַ+O;?j@< E x@!f qB%(6$~¿T#d*FaGcSaMoՏXÔ?/rdķ_檈^kq8b6 '*4+Ɣ6 w*_R}=NGDD{Jӗׁ{\eŻ/(,Ļ6;_!ŸSiQ_XP vpiTtSRz]Paw#EDm2 knywٕ?)#{#faRǒR6 Q1FrZ }Jpɪ{G 9+ob]e*]efr ƘoEo/Q}]z@|?z|tw9bAS 74~Y徔4escVm $HV0c]_z*~[w#|֢Q$ߗ$k|5)c}Pq "%*&PdD-2W2m&w}_,?ӯW% ||})Y>@>A,K 8*B"66\~kArzVzkx,,`|5`F5%c 1t/m&>W 㟜\x}j3UCrJVӨ5q  سuҏ_ /~V E>֮Lcԛl%fV]~ޚQ>ۀM_{+zU= ^'ȟ+F?gA{2M[\Յ H V7UAW3SLUW/V) g" ~DݓHZx@>SfcK_{UAހ6bRC.6vBBQm_, ` +A }ePe؂8mM|s%ރ!n.U<#o;d!38"oua2cKU_ArAe5y:č^ fmkæ/-}]ܳ?y*ko{ њLaPkJsW}J pQ RlNu8%괣OYq>ƈ>XcMteCN%SoPR l=@b<&|b0&0~)J>cbr D[+=_ хBV)QMiӚX3 aZ_ Ocpo4ު#BQrk"6E 3x@|Ͽ<f |Gkpd \b<J@P0ſ\Lh`Իq٠bO@/6Xz"p#[VJwwWZ}$㭟) z ;! 5c se'x=j"_ |h'ߋ ( E !"ӯ+ %|).Rx-b%/!-h/jݱ.i"G5P].>ubG} vVdDװW~4J?+zE{:"y_s^) f*K]ۗVXeAThXϝ4juLRjmWnnW)žnbDdLNqPWL `QEe!ayd{_>]] ⎩҃%]/zT{+@LV)J"vq^e2&UAxMy-GkI_U(˱0{m_yE)_MWu2VGWx4]J(_}D "qB⌥cLF ^N逇"5-} †k ՀΜGiR!N1Pnf땹A@xhp = )'WYOOQ/q^ bd:[qÔh_y qaV6lwGrv"zaeea!^ 4p JʴTNbw5? SϪ>ɯMŽO  I#\wBmd!2= /z3-40LhB"qąv]&)q. ץ,@X*>Ϣ6 ?΁)AE^Ņ᫙ b"Р6|y1MVMϿϞ S_I' ˓"ی~Ae \E"#h.Bc #%ZKH)nuέB+~nչDW~ofǸuxV{+D{ݩ+)(пw*qTUk?/^p< N4W#?)Zk( YP%) (֐}ɉ֪}c19SBԨ]ڵ.5!r(}Δ~GὌc=ѓ穖x8>__$ x*Vfzn[RjǠIF551nV)?G{d+Kb. e;%Q#!ZJ,24E;^/zC31aPv\IKL{)Tɮ[@[y.'2$-l%(y.W];U0F~W"' J0ʒДNUTdY$?ױ$MO ^SK,[(J%izZpNLٟ7L 11ꭗwٜ@(cs^* :Oi @/ْnQZujBKqr+'֖>u T&<+ .y1y_6sӿF?%O"9 c<Ubbc*34A3%ʅ c%|#֚慗S"|€_F]bPhawX,Dm-Jq/\nZaxׁE5ܯBr91akbGA iЇht{JB;] =X[YUYZ=J9oT^G׮}JTͿ15|] #?'_(P'Nw Gj5-S.=_;0BbL0e jtjLA`kஸyj,wu@]1ǴEBVEq_~/L3CE"z£ۯ/ł,f%1ٯ nNyA^*19Mƥ7Ȃz[dpaKtbHgo \鵿v}]w+Dm]PK4]Z*ƇgRėsz}9WW-@]."jaTƐ~X('"8/ b}5E6Jojm\PVUsZ0ڦg^Og7 BOS]5[ 2մE#gC.#F-+=?4lԜzJK}z}_^^?G͏lƨɭQnPG U&͞p*)Պ&1W50@+傪%D85~֪Ⴈ厚brjZUm+iW5Sϵ?QJ9jd{^QSVIET{i%銡LMXϙ"T&AizV AgD B'x:ԤhWy(@"G`W@|;JuDķmSP JUQm_=6R[DK VU6%4{1*4o_![!UOkw,|Ϳ(iŊé RϮmQCD7UTT Z߷ײV5M@8i& Oi $CJE]P@l(j_(Z;LUBWH+ ՍG:i|;4wy˩~LOO L JkxemrQ*`P4!HIԠjډXQp /'N*Bԁ:P$E{|/dq ȣQ :kl˔Ę𶢯PY]ihT3"Qci$0&z\(^x *7]j Ȥh5ci[S $L˷e Qn*TьCaXh8hJ->w6a੦Ob.|?RQ%HeE+,MFn00/?Z0"dlNfְ֤rKKZnȬʲ\ԬJujXr5#JBy*|hCE'TV4v?5h0V*LpPFR+Ljhduu:Qs/ܘVSIͫI5]lVϋVl~^*(MDMbd ED!f<8[1[dH:ﰫA)"5%%=F$YG'-.! ƭx$ 65}4V%x.Q L>ǧ IDATm@jQŞ/e_QaLz*5|EI*ﴕ֢cVZ Re: XV)3my2ݪYǎ_ 6ZObf1rjOrzc iaskRŕ5W 8=?}wk-z{Byt97IZz0+<'K k!c~v(FC3:#]h&7)ES2:Y 'W$""yqFb"ILv^juASB/$Duh_9Tq7aQ6h`&˜koUzנ5j4(yˆ&aX|?][1m-=?*N-ñ1<[=`6c|}[ihm c>z,NIܘvɕ'vyscwKfI+2=b^r`vb}Ybgm Yfƕ]Β%UęM 3JF̐ $/ʋQCJ8 /dJÜh ?*4A@ 1(6۲E^&VӴj% ݧw=4Š+ԅ_d4+..뫺~-_*SS/~!ݗss[;\23Ӕ|4HL)ycnKo|Ά4ox3gG>ءXFyΞ#hk1s)ϳJhY|Vof\OާNX/l 8?l6Z}5.]ڦMgObwҔ~|6d>]5Ō:6v'K>pr5pjf4[p>I*ѵm s]Z9RcLt=4SL+^X_E +/v<4m5S}1hS[ 96<Шh!cR+d@bDr:IɔlLіÇBͽMWMFf<(2-Ӑ-d3?bH!8%Ny||ʃ1V7}\zΥ$2C ?:ш*ٲ,Hg|rу Į[mz&d9v^?cX3_8 q)F6;{i$g6Kt\z#ij mR r5"X=JBPS;!0K^G 0`KA@U~v C$jD dlQgb[פhxi'[jck.IdM#3s#sCVYٿVOstw(gֹFuaJ`xRSt'2pvr7ۇLqN~uݧn;Ç i{B>8dxt`hB#:͌1 kO,׎p6u 2laqp2no:3f;@EN<#Ɣ.%u +'uHAmfJS9e%{֬ʭP:rZ(5:h vu=Y/kW?r8}9l8 Vqeh f !d+nt'tϒIoy~񚄜f΍7fp|Gݥs4w} h;[-YLL?ɇ9;h8`6:-fps{[}o>Ago{|HDR<N/NȒ9{_O#9y4;YeN2̘p2:N11 ,S~; bX;ڕ]Y-sj`ӫ zJ1CY* Y(BrҬܻw^bb Ǟ}:FU ޝt27cl\%{ljej&rpa`<=5}KX;3;?{%sbim1Nr1ɝI F?z\?dl>%_x^µK}:meE8ps[O]gY!OIq&g4^lg+zMwq60],xuO ʄ'2xހ)ՊN'h6;mg Řd`5]cú` 嚬yH!X,cr'kMSF 3%HaE?7QH*(Z )(,D!2 >oCY0Wq aE9h !X!eի RhhnNcA7cRt ,gde<=0gM5a~wI++\+8d~3ƣ cY*lnt|l`*mi+׹_M߄)4LodfuzBiM 4߸t '.L}h0ddf+C?Cw1W47ayh2Z;xуsEcH{` arr*/@(O|4X:/DMluKuQ.t-tOks{n5+Pz쭋vP0ڐQdVZWRoCa 8\m H1h@ôAN`vLWn]>G6yKdx,yȒvʉk5vml:;]7W<&)՚v;`l$szg610ڴ`x31X[ֹvRK۴vE;X:y5ElWP.J`45uY׾TC /oT}.L鮨g`aL&Z3]/ɫ'XM8+W2KoWz X7gdvLLhomn"9Ő{lqdtp[HAoF k㸺#cp4L͗69mkM4\K8r$bW1 SS))| k VNCnܭL8ML?f]cfk1br1e\M{MKX'1"Cg@ǴvH=gm ITg~s+|][, @Z NjȲџ>yE837FgSIL "[.t:Ű4A'1 T >3h]'oX=wb]6f&?ߦ-1yrgsl>f}= V5NZ ui6woZ&\uS#[i527BfpLF9g9mNi_I{c੭MڻMd>gr<#ϱ^xp Xf_AђB^29 ܑ qddm!۸Nќ.i<ݼAeSU"P5Kx,!_W0Q QmkM%45pTizxZ M~ZulM`bPm,SIze]Q_e߉iI-d)kp3eIY=9پr}5I:"_1c1ϹiYdm٤d4I:̆ḅ1n5C&;מnA[uM$nVG + | >d5o0Yp&jb~٣nйy#cϿG YbNf6vwʹtC\s5.'L G#zm[{ͤs?%W(\y?3WXR\!*u];묕z[pcRZe?jmqfZVӏ e9k 2K>r-{{l< =fn^!L >7bZpztZv-M2&ksavÕ*:_ /`Ƶ%{ld{l1,nn )لђyfڢu|p1;.р CfkۤaW6el]JčOYL'8qt{MC33txI$4 mYn6,91={@`EUR,,tsyrWC HRpC߃ˢ[s 墚wC4+i+ b[&e6 m5*k孑_gү)I-#\Mfc}ru Yehxhz'yb?d2L$c1{`v^;&kt/ߢyInz<6ݍ>FKOq15nHېYu4s8f;!4 3?]POYsyf{4<8p2,g'k Z\rҐ)hxQlE挦KMa6iِ]u`9-10u${h?i>.JJkUzLd\歅_ۻR>}4'FP%ou(ySY4xej~=oK`)tճN`16.3`|{ONg\ Vc8e0sSXIEޤuc0i'xc{O2 IAr9F $ɂ-hgFtd՚dJp-g5dgs#ƫ:p}M)dKڋG#Ɠ K&Laڠw0?bcmF-Ҽ\l)ZEz\5O¯^ WtU(k485R)k>m/Z[iSSFL G&&D[㕷,q`xm-N#ķ/Оvgn/\X,l%f9W͍>2r10nܣCg4q4nmq*KfQ"ݻM0iVNCV&rnR/iwٿ9${ iɵ7=7rwy81.ͳS,[OYclA,8M=PvMFAE+3_p.z ;+AYiOՀ{7 #h-*(>jOme%:A iտc m1)XZ/}`2&{X{2>2[YwvI4aFJN֌3h]?!6g&\4ǹ,sV>4q䘻-voxJnŜt=`~vs&m6Z6;)nE3a5v.bq#̓k~;جMǃe2d}3[^S?Zp "X&cYk퓘n4gswk49n=%muM$;י%wήa's$iMfSakOpeX FZxC2Wb͚_\ܗ$%7Ka'+V,T+~>>}$µqt^l!);cs)1,w|m褐$2#~;'$ﰜ-z6MM%eH72[MXl⬤;{/r݌Obءu" 1NHL{1ybi>bd}dp)+:]tьIJNg .|~ `[t|=+41d6;]`?~OnY"?L(LV>nwSKUWS*W!ks߮OvCTya T( EJ_8.j^YSV'%xrL썒ũ]o-3'6״ GcrC;gΘ>\1MmKGRz1]Hwk{}0=lثhP-sw|=k@"|]h1.U m<-C m+`ya.ǚmRE K['T_C}h1=jV)2o±sp IDAT:޸$iظIΥ8y?.3t쀣6[fѝ6\y20Af5h4J7`mv]eq6`80hwO~ͯ#a5"MǛ_w?wwL&_fdYzn:3<}W.1n|r5=bWl?=Zg>_u-\yo{)&{$ ֳKgivh4aF”"0Տ~%/g,˝0Ϙ$4FxnU:HrY:pHRܥs]ŕE? .wų=atE%Bijh}(-`\%|୛n8%QX[J@מcu|fWFi h.=:k1e$mмGuh0N|d&4>I{ &MLՐGMoc4Q⥚i"M~EsGƎ9/lZv=EI :" ]Vn|bIt~xBX1~<5+{ln"V,4U.$e_RZYSFWBe '޻B#I]x0\da} Z tY%Ǒ7w7ʬ (AFSZ EN{4=nvs *[D,nf% B͛q#͎s|B/Wn;l+W{^5Bd;F͙!Lvc+.fTѪ/ T_3:Rkh໼.oqe|'4}{~u]\4IkpU%Wk.>nqzx|(\{?;7 gu"RgՊ %rMx9QO?~kr)nK/n^{}Gz;rVE{W%l\! fX0_t[LR`-P+Rt9R+MZ}7C\v..rī~UrD(^sg.fP.|2l|)0hUNOW(L#|ǯx8;~Hd[\>c]{p뉪.V%mNTMihI'gK*ig?ӉCW4 AUsRZ(CO\/,g,N9=SΎ%Ӷ-m4bC~զo_0z_+/G҅w]|,P+ TJ-|i?z|QG|Ee?Ã4;Htْ!A2?Y/9z"~oxG6!ڬyv|q/n?[;;j{>竆Vw7h7pei$NwI4 X Z;ev iU1;zgS%N͎W'~j)ԪHQQ[U^C.b o]s_|yk_ ˳9}o)O b0i@a=j%@)[oo#77=_­{i bœ_?/ݞ2i {o~7=۶1ђKs_1_ۮ=O_o{{N.|2=}ïӼ?vs>5~p_XuW0 ZHÌ[| ͢aA3 b Q1e(eFhg_M).@\ϥ_&`/üjS\ZY< r9ï.h?XkE!kjҠ82[Mn\ʓ?8ٹzwֽ[<}_1,h V4DfJ~{wnO] b?Er)dFB|:w3&WX>;yOAOWovM_u.\[kd63Ξ'>IZrO@2n`uz_`8%U jٓݿbA7{2W|M*t1]IC{U!|埿Ȉ]ދD-R~|r!#9$j B :Jx)pg"J=;frw#52Ƅ{lLALlVlNǿK~x/{6}YsxL  D ȊVi7hS%LS=^XΎV3Jɖu%wkMFn!wEb"D;ZKe2Z+Pra HEKy szy^" ߍ_U^U zƯk FiBX?w<>3R &EɹRJA" ~̘GYK@jU"J*1smCumʍ݆g+V`Y[F۰5mx|0@_EЪd2'?N;{Ō/"=9~p<r'_}{Q aHW_pwhwx}ggv5 -Кd g|-}kٌOxcr*J7\GckCW+Ct ϬV=`G/{(bja9^Jt^Tj1_r?^Կ.^…D^ Ja5_ro䷿iB1;y`XRsa1AR/m3` >:՗f%qTQ"FxڔۻpkoBLu"|#CH05_$D~ʓu=O<'׿#~杷_'mN^R7`*6uUuNH׹onn&S N.Gg=_٧bc GquNOy<8{Nhj[1CA {wCvLoM~ WM[7HÃ'9Z) &1jhb W,w1^\/κ3xuM eJUs|||E *Lv0NNXQ~7ݯ~_sܚFJVK7 +ttUr(17֠)\MvZ훛y{F%J9mWJwpG:*R j!{%J Be^{槼ޛ]! tyiYa.xE$k߰εOO_/ `.jF+qggsjvC+LJV=~&?=7^g_g_滷г'ȫljqUѻwY8;/ ~I=hG'/y>x.׮_ekgt6h^UȧFGlVVRަ ۜfG۽R;ke ĕiC@y wZY:->x7p]5aR,< p&gGL7Oxr<'0Te} ɴ%͖Bf0 Ŋ6bT `pQXY.:NN &NhRBkLJ* 2jj`vrjLY.fP !DnEj@tJL)(yڍ]689|ۿXFBe2i*Ce$LŢφߑH !&` lrmۮIK!JhNq0[AHD\T uK1X;XH嬛ʕ]nݹkwnsM]awwMrԒ}"lbvF߯, HeVyJ'|2 <vZJ!hSE$ͽn`RRXXsr̨7qwnj`'U,g.8:Zqҋ }{:ono#L9; R M%_?V]G2rj@K1*&!ͨ'AbLHL b>[-Y-%J;kBxH#-tд,3Ѓ9w(S"!6CDQBJՊ=#ZjcCFItj~RT !DpSc-#" ; ]捛SJϪH)ү }_J3Vv@"P,˄.3NL[9]DP*2̎O$5LچmؘҶHR3 䡧bd@E(D*N>~N1;btCJmij oN88^ڱl9p:/<{6?7~kHH cbޤ?ln{&BIUapt|UВhcDH1 ?ȹ0 Z c1$$TuYj-1EҵdJ)RM9\q ՊkGF>QTD"|AYql`jUȶp(b)!uv㩳OB0N2!E L8<8avғ%b JgrB+HXV}4ԦC kv&E??Q E#T\YW(9w#t|q{gώOw ųyp=J_8a蘝ػz7?Mr hPM={L@W䐡BjR5N!M8Yg˞ !g̗+a8jͤ?d}t4;n ,::E;ހY=8hUjxe}#V֧pm$(`9%P Ű,MG!XAj,U%Hc#7a{z]B\B9=bJk&^V 7DJ{}l5Y@ڳEAYikv#fHlsUQUZ+615 صZaU&q?~ߺb`WH*'Dx+WZ%xdSaBl99ϟpUAY,Nnqu;M/z1iNB%]|˞g^78/(#z$ Ȍ^(S QAG/%E._ BEF+^=&lQzT׋(g "[ h BQ1YJ-o$%@ԢMH")!2@ LnMM%{ hCPYmCn#1eͮ)B`a#^p2gH3`4RϢbժ̕}~tn0; CA_UD V>{p[{wscʧVV H>c8s7yu6O8{OZA-G >?lɢhͽ]ڝ ]aTٜn ]FC {Lt ?ua'F*k~BO=%GGbFi"{mFmgo 7|o7\9ulьRūm]Rܘuscڠ&kpXgfuwDx/ԨskT](Uy+U\,+1AT wo--:cFd f N[+CeXfΞ2 csvx½v;lO& gO8-YdaLI)vw&tl+ %SC$ek:! MB؂\ To?݂}/@mA皏 cuuElgF"B-µ }Ĺ=wj1K0:S Q!2"uDC/q(T*Z/E}#١A5W1~0qz~ V7+FZfPJ:,h)ZygSuגq'5&-H"E*u$뷓N䋧׶yq;tv484hl H6u1tɢWۛ{7xg3l!:Ūgefc}W9)J4d9>垭-nOy ''gv<P_x:*yZk kaoQ})K=ZiZ~b[Z'\V$ju -dͶ%Hmΰer)Qc8vkH}CDt2j0mc@)]"ⅶD,#ֱ T"#$#U%k6&p$%PG1P |sтYr9-!%g*!U5\o'ܽ CŌY+ْ^)eG IDAT{wnpͻ축ǟ}ќ{ok׸MOΘ6`gκNh:s}+;;lmN UI~{xl' PZ 1ΆwQ)veM})ֈus/QKGJ-)J] dcB0l_.bjda\&B&RKFpָfjHwju@  jņHXCY`TL&!btTFDI!fe3/ )cgϹwYϟ=+Й`*) -Dzj'_h@`*7}H$?gcوƒg|gy;bU.\7w- '-V=Պ ޺ysN{G5 lꄈQ1DYa# LR@ëȴiB)L Ӕx~I Nd2-[|ğ|jV5P%M_ y-*ɜ',ڈB"ځ8C9,:/<קT{f:VP HEOH8D}ֿU[$Q 8m[R,+7 Na$ 7l-b@BhE2*cVvlUyQ$%BD[patXc_3fPNR(.2j9ecƩ5HUbF8+#V9*o OOz:X &NO+tg ? ܹdNظCS#W(lș LY[5ge(FL:K-:D0; =S)^|+8SsTkY*k_^?BP'*䜩ul9! R>%qypc$h*_`D'u  $2 18PH5Z2[%ϋ#TjܛȐVSR&zDV{QZ-"Z= gljEFMluldxYGDυ84Lxtك}~M޿C7?dFg ) ,dR\+"iO8x2#"W&H;ad~3ky~f0Pgɷ8+oH!qp4FvKvchd*;C1H)_Sq~PQ:Mz~*AQ!.RUb[[JanӪJ` ^yu KjPB06h(/S +2BѡTh!Cj 3FW5>1iˎbplܫZ*9Et ټFZ&|!!6 L@oE.d@6T+UZ"Z%#jh`Y#>8fsy>=8d5%p b)C6ͯ,|G3n<@8>z=haY8L׻ Nf@>g\M]o !5ZN`B֡"\#)zNZ)Z<ʺU;4d,`IAŕe"3@xD KF;$BPdO (9{?m!HfFc [6#1CjZ2U 1>8K%T*CBk" A t2aZyi%HLaV1%B5ajVBcZ¤i*HueLY#r@b&N[I2%ĸf%iBg+~i0c&vMH^پ"_tJ'̇jAۜT"Bn5p|xV)7oPYdvLو'3zJf.Dγêg!:'\UR\#7ٌѺ)UPq|Fb"H^\J7`xQHbwZZV!gX] #Z"d`RZgIJዒѯa͘h?W@gT݇kJ34ch%膸BJ ` }c{Sr4 H")ryIÐk+BV'T|PfD MsCɃy(vH 4p&!XVSϞ>~ otE)D!9g;bLQ߾-H /^e{Etmš{)qS+)^k=jLS )îUTe2RZ{`G*bH3b{rkB$EP'~ qksKV3mĞ%&ڨ1o%R̾KovvUR?sKiGZR@2yF6PX`N2 z4՚V`W48wh2猪VS JfT H' q#As&=itX.` 7luF0uP{Qlc#c F:']tӢ W"- U)uHFB f A*bDLHF) -0/dE<^Rx h4MpE'ŏ !hδ)Qb0 :(-`jv :MRχDb4_ag5nv!IAnI sކ:ԡk̶m 6=wm>tIJۜF&Ƿ QY,L6){w=N!lLZ7tgӕժztƃ'V!XKYl)ԍMBWB1sBOxKqjK#C05 eH8р$!ԸZZg $&ŤV˛JPI9 @%`]`ePB0 )Y޲/0Fh35>T/H&Hdj][UmB3cBX5zn'Pʀ`Ó[C h.b] b?`0Z+jjK@^…\wm[o.~m~#աblnzj54!j ޴q2Z[tkQP(duF& NiA6MPJsdGЌ6{P. !z b F# BYEDB^]| ~Hn͋6pX@l ɋ%_,Xu foq㨧 uSfER$I04HśfLrۄz1.gI֦0#"ゼP ; %m $Bh0:qܫmH'#s!uGZ+hhB(.*jt8 ނk1+y?y29jFS}6bG5|T@:Qq8f!7 7nlο|ãÞ+Ea- @FrUZ\ M>,:sWg G^ :X\bf. U;Ҫ=(JTJj&H >Lݭ`DMRh7,B]2MާTk8jE^ FԘ"j^08bu6%I5ZЬ!$%7U$ iաb$&~e7n=|3RN F[+@ڦ8],@k.. PhcBŘRVpFkac["R<8\`I1ST}",.Wo"OytP ԞnnѶ-/N2L/ k[vy̪KN P6' O4$P*ۍ]4D1Z IyE+]ɤ&1i s<چ0SqڵTgM*0("D>wVxT ocfµ V73"KU4Q(Dig50m*Y06!-~6&r5Ҡe4XM m0A61TR#9ہ!gBTWΉks )EŹ `Y9N}߹}ۓF{rhlJbM} *JkK j`t d^|hĈASQAVE 4R--"f֪ OJN}(ek[lL~bAl;יȓS.?65U)\ IDATC-֊+CԩY_}5%J e 0M>B;Z8lpdr}b%Yl|z‘`VsaC1^D2@ _麼n !Wƿko]iZ%b+{]-bp`8P5 @YV8 C6bxK~-co j''qg;LB`T$"Ħ2X[0dH)fqTl":܃vk^aMfj՜$عGb`:{۴)q2[;b^k{WhCdѱ>2=~g:#`(f)04l63fS5*S$([;"|NQ5gBMBF%!Q TW̪fvΞ:P)?dVf Y`JHu-ԥx9{AUSZ=%oK4Ȑ ƞ9Ơ&M(nq\  z}Δ }!2r:mE%&V,zY{a7sh!Ie}0Df:*O3?l58t9Zwy(EbQ)aNI"0Ltrq/s^+~6HfY2-=g-Q|su&Cab2B )F5B76Mb@bMDz:,ݻQC3m?K-FgAvtr&!yih4SBZ`fo&CFtj}BSx~xd0eڴ( dgMH b0lp_6%ďcbEBdKNq{.KbRm(化B?!h0ϑYA+ᙗsaGR*m8y+6zoS 60<%8ʖkFҖn5L†  6AL^]5`Q$agfd R2(;E! u{A$SfcaRH牱i:|ND) O7A^VQ vQ姯w<lVjekQL! a%rH//Xԕ)WƠuڨ t[R4ƬCͬ!<4Z>DL-.NC!=aPi@qU#6R*GRIjHĔ!#g0~(l[km< d-pǦ? o@l'(A]qm4ؾX9E۟9n \׏mΠv|C/2MA|% u[[Q ̦bQ.늛q4vuSA&:ePbWJψ)xސzRazؘ9>Ӈ陜 >F'4e z$Bڭ?cԥrnVH;.3Ⱥ.(zVGg va˱PN*ŦŞK$PjQ49EF%L %*7ti~N_銙Ǧ1ט^70@;oQDȮ}v Ųf롰+w9P!W^lauQ&]ģ-ҔFnUR쥠O o L[AQ%r)d31qCZCmCAl`ؔ eB/ J۳[vm]he>;n Rơ\B9f/}L~-wӹiZ=Mh)zS߶ w7t\(MlZ.iB* Chk3vka]Iڕ+ #6O|D9 t\e5D$*l)0v)fWYڻ#rGFNۭ3n=Wy5:I 9q!r߁iĄkJŒH>D#2idm49}enIAqs/Z)ʪ6leT)>c%ٸ!Rnݽ!/DPcObK dU]wC՚799> }8r$ՖԪj%,18AMwS\U6bJm:qBӖ[Pu0q1ǎа0 \.b5AmK"C؂4:+: 2,YRm4/`-s]]MѰVN'Caʆ9:r5p14um' xk $ L' C}8>s Mg?!C9A5Q! A$_6:SKp$sBUYZsNcoYysBIC8L3m ΑuVOnNƅ bU9bf  +H-iaj7k8[W vT9z) 1,7)81d.GUckRV,Uy!RS'$ѐnK)6t%t!monbk]akɌ !ͳZ4˸VCtztyڳ2+YEKDl~;mYQT {[SH6:v2.ȎU6c.ôErjb-NKKۋdYRnB$ljX@ VT1gDYpz xGP;c=BS@\K:M̷`spQݰcvO7uBWGpb'v lhWi8 w~+ :%G?OTܜ_ ܾAafvꀈO:!9 G6 [gj'%CN/Wr?qp|tl$IPL4w)#z6t><^9ƪqo%_)3I!L6zMk'2ZrbSٖRqaZr.QLqZ2)K3c"ʎrBt3L&& | Rm ƒ0[b;eK#cI' ZQwB)lOa(hpO6 0dE焞;wVa7  TlMCMm dpisiQ_sl'yRnE.lAf@b|zN|5DYoKN|ޏB]եXKmЪkU 3֨go\qXyi\IPF7l .ħ?֤fACRX Kdn4e8Q^j_m@1n(`H"u]v"MyFGhNJ黿5FSDr2cԞT7+{m]p .0͍B"aH )22.%:粎b-N-=D4 B;$bd虽cR@;NEZmR FM)e1\L\oApka1&<!:9vn^7j u]*vG)9ezY'ÿ#HU8=/a=RmӨ $60F<#ں҆mǴyTzlH)ۢHGZ c?4A8{g#WWTef14R#3*1Iw]a(rrǮ:yCќ,s.fM= j/PLȪvO.T$cWuv@hF`/Ցj7m !dHR~(DakP zDY֕rnM/ZP6"ۻk&߿TyV^oo7<.~!Pa})Uxx|x2B4_Yfxԑ&"!DsG8 :rlW]lcEFhhc9pas`g`גɾ3c̿rzwewJMF*yڨ i uɛ@@̜00mT+̭XBݓGiLU1 {(B s"y0BNz GcUsf5ebX&Ҩʌf2Y].M,:'K@只I{uPLvm e pwig5u+fl7n.ӔMN^EҰ-||2P9]ܳM+:7@`1=P.D+?ݣQZg7gF)|G;o^_33T9-w_r&W]XJCb|yo?c7Vw7\}y>|;]窔nFҿ=!a*?e)\`Pw9Gζn ~umm" *"ƹJc3u4/,wbDTJec @ɦKz0IR7BB7< 9<1\MhO r|fݫ)sxxF~˯x˙\WAC6_q=|ၯO|X+)n97y{W7Ӯ3ps=sw}->('1)Eq߸^d:۲D9œf> vEfJP#r6lGX HZ'x9S]\ 0 LnğXH:\(5!#h'2e]fg:lD̆ШbU$v)Q\Y[o5qpˎE{˫0k ]V5Ɉº9cq%]ML$O,#pnrZ\ߘ[2P0\&r ee>/W}wOu-O;~7>2J:[>{sC*~|"OZH(~aǫ-e|X8SyM!Bi ׯwpºPw7쯮yz>)3[馹 juE{> hk!0@}9d 9}gpktHWqMiXEi2yZJEsoiXFnj Bɺ|ĉ)ZRهh! &쀤ͣwhV1sh(R(iN;DD.oB<("Nui,Iwء܊)h!8@hѕi5_-QSn\'Dmr>߽Ё>b˭R g%~y < M!z~jw` e-iӷ T,k)nf n,gN/ ;=BHb ?{Jj ?nΖ$%qs8L} NRG}4cvtN2bt.Fb7D*o}~:a|ux|tC1Zx BpMMu$o[k2bkQQҜ=Řs%_d#iJHPums1 ~ { IDATs<LIWno^M<={ά5 !;Kk'%j&xu{nW_㻟>4kf |w|p㺐3ȳO3He]Oօ A+Q)sIȌnnЌXElGSUIqF@iMI-Ew Q9!;Kv#ORܫXC+bQW}ؒ&)R˅X.,K{iSʔ-(gC'Ki[Kgny9IB `p!߀`.gЩAmX:g#š-5a}Aҥ%C s: QmDPTOȜPI F2̻wňêDUs W) A> ~6# !M~i}I $㢠 tA]c?[BWnRm`~)gO]×g>^aYɔ~R 5N J,͊n&dQctAdX`o rgHl/$C UbE,ې ptc\=GW{KHч ;ݢHM`$,h Ǚe ҝV$[U{z[ (z*[ei4{cE8ө i5{!2MR!FҼPщA\t9EA) sf/I;bV7X g7zm&XklKL'_1$G ~iM߇27ՈCY}/!)bbmE3iΜF렮4jQ0JW>?,=?=?,g̛뱨K?r:u*BWI]FGeJW׼t'WύҌb׋fjϛk4wzr,433okn2?=pׁsF.XnO7{*q &P<rY[90wvJua#ZI9nפ p¿9cP찖HSFV=%[ ˲nIj Ye-jK^kgd?n܎fnv;/ojuE7dO;䧠 0uv7£-ՋEQNYωu)Ĝk)v XΌ4!v<V=;daJfuOQx+no#1Z)|flv3ӂ=6`XyEsF:!."L J:fb(Kv+m)Vb ,W $Qxuş}e w;rX^*kf7G~_"3tfi0_%WyƩ 4Kg*]M\Ǚ]stnMaSQgpJᰳ I{wR0Tzez /;pE$8 /JЅuP| ( dZjx b֊.97q.dɺSӫry;*KL Ghb9F95¸2XP **hӜ#w΍i[_Qm \[@r $3'# Jl}3>{n k%[e?e;F\d22637vJaڭ<#sj1ůߗB!2g\]x.n5 %s) d{̻DRE'{q8Jd/n)ZsQs`3$`W=zqi f4j:8BDM)o>|^ ֏YU4Ke*g~?sE&N<ͲVW\o<>-ru5oP1酗upj2\4Cۘ\Mwl$ 6:\?C;2Ld)2<ΑF0cJv mcnJN.=*%SE"bcݕ}7/<wv3ޘrL/'!Rޑ;3[ ڛ-LsfʂY=#)\ݹ͙## J`vsϯ/XzGnfz3MV` Ġ.X|6d)n:ZAizLݕ5 ^ʲc˵Wպ@%pQa]6Ʒ}ड़XjaʁkH90쿏x>ss|r΁ݎ4VJ> kbrwg Uam ]Pg-8`:ހι VmU5QW޾Ks$C6#Gr)D.az"}HYTĚ?B/䖟F[j*Y϶p"9ӎu1#Nު+އA|kk^R642`reeV]uDh!LUedPghCLe|ZW>{}RxZ;աiDOP_{m1H6GOFRc0cI=霂Zjv֡L2ȹXx W(ݔ%6?0eW_|N"Qkp?}÷|:ѣ=u?;B_}}[ N|xW%2*\2sJ<2Idߏ`Ahq.ٚT1Aqz-ht͑hŅd d B4"tGW7;?ܯW1{V-C9ƭ&9pu53'ʐfjEep8da_S хf6fB)Vh;i/*1s:?7Sb&oH?̶։#(:-]SFӥ[Icme]mjԧ ,6z`$\3/WD3Syč//؃5vFAc2^G /`W٢|orָ!%t0U7'C2` Rg ! ѥ[wZ̧W7vsj1uh$<`r9sw$`,IbBSgK#b>"'0ygAQSSc,fP8&TӨmr/=B_;(;SgooxzW=÷/ߟz招Wx8-g~D|wFjfDŽ=E}4FFEi50-A} 7Io 'W/pr0;r`cv)I7uRN$YLPiaJ9@[ \j*C9>n2)FrϵCpy!/PRSLS4ѝ3Ǜ0.Ev9rKkFAf'P%2H,4,fU)2%eY4\}'!jKU{5XAP"d<y<v`qzc!pX8zm/;ՂyY C}Kcw3\є*vSʄռ`@dViasZ**s/cLI1Z);L0.X@w7S٥>n;ݛ?vߤ ZU+i Bc8s,{a"1 S0M&SXJiB Ŗ˲;uaHR1z#yᚗurZ87Ke bySc(tH<%YX q gScQeΉĸ7\frA/hPq-{{^oP$iNlٯϳ{"ޛ[zyϚagFw1⠩d*YV'U+Ʌ\I9HYNU*UTqH@(ڲ5N,[lZ)GrD3R,Q&)F((\|k .I P9_k}>o#FklG3ZjiJJk,E6e-0ڒMrWuac>{ɬ87_H3VW,g3~ e1s$9 gAV ĔYUЧ1S~4|[:|$޽h~\G%*P0#ZlBt Ze 6S $A&G{6eMmYbLc%(H%28LV8c!u[`aZZR57N6LI4T)*I rT)&Di䳪A1fس4,bfEr"KV|j"SLQN:cՋ찥 9[@%+hb&+rl VDUrqw̤@AKʝkT4GʲȽ7c9ge7#o~hZݗ/$%a,sϤQ+aFgFS|?eĶWkITHS} | IDATs\7} 9:>M?Gӫ?Bؖraskϒ%Θ26gk8 +gi4B2Wn2,rS.5i3(Mb^ w= tS`O2Pڤ1/'ֱω10 mE$ggg-("ʥ&a(,ޅRYRw.|!@Q#U4AX!+aS)\Y*if7ee0RՐ$-Tz"3ti\ooz~iBTaowA *mŬ臉U7L΍{vf,iZsnY;t غe1 C2,s|[J)}~N_fxq]cԥKG#WT3{qZ3sD9^O(+}Iw%h;6Sh接shR A0@c 6> +"Lg\TPi$X)"81ExŎLe0daIC@ќGI. q"y5X]ZvPY J%QJ:p"5~ RqՐb`,sW#AInD•6$+mL nj| ]+OS=[ᅦˬCf\rx?sn4kOƐq-q7xdMhõn'uܵsw*:pmK7w~}+]_ֵk맀.^lYĢm1sVpm=J"b$!# XcNee( n$G9hclfG>2뜳 Mk1IUբ%5)Z#mݘ™"L7zt~$xP&#i(U1HPO˜*oL:u2!ˬ[iҐfaC rXS;Ya"j裀nm1MŪ\6mJTNu2Pa%N2^I:Q908cض;JX[ .KDPYVgHJl%RqLSl-6X/;b̲5uӊnB 'CDf+iƈ @dR& rKB>dI~D7wԵfgI՚#y#i=! \w CυQoNe3aÿ5/m}U w<=ӏ5L)3zϼjzK[WTUUĄ-]n&Ɖ]w<(Mm1<:2xZd$$?IVB"WZh Um 93DI)`(gD4LiB6^r4ZdR|b?MI*'# )DQ5, cYM׍!0&16 Z *ZWbDc3)GTɨP9JL4ȥô\~b$L.5 vUЏٌ3ъ'x]ͫCbrg 'sdO89:F1ZrzVoէ>-m}K9~ZǶW RߕbDŽ Umb}1)*-8]X ZggLmnDq朘 k،BRIf*gZhc4mG:Bά qqLS H.<1 1Ē$Y29+J4|,U1 "*j'8)E|A6l0&e QB粋PɑrH!"mhZ93ʰZXk !qpÍ I)r fSS{d[._ġ8=_cO_ c>î2Ubu(Mml !#@2LE$T*3du1ksw!iƘ S,n(Ga%I|"K:ZԳ@UWԵR$ FRT%wI`ʆabtLs9 *LJ2kRe@0Pd[r%Dk-xzRT  &D , Bi-,]#{&4`{sKhF3T5l3f(mH1p XӕpEĶe n84D7ǟO gtL+/3>2}:9~7>Fr1->kn:QY62B|m!Z_j0F%8%--L3NxuĢ\(Y.MYޤ#!Iμ!E/bNClz/-)S$J\hйI 9k9s/UD2DT\bZaR,AdgMsQH2/k+ 3yg\ehf`gz˸HM ,[=@k8] c`.knLs{hY0l6=g@5h]|yY¶^u|8O^8$;Unԍ$4DC3Q:%1C_;# G /`4*I\L'#3Bd^[Z\2 )o-30zrW:ɲC8RNj $ 4bBdfMUXN2T(rY++*.hU$Q|yF;-:\њ C?y\'>{e9}zYĶnꏏG{` ?۬meƇ8F*|FBdn 9"7#C(4rl)Q!%c1P.J)J1k UU1/MD@/QVYBLS׌OT6"H( RP!RI0kiZu3AXH9@<)S9ut+nN;K4H!jCSƂV29s~Ie奰YY.k8DIh]|>$,IbNe4X,,MmXuiůIa: dtp3ޘO/}7}|>X b[ׯOn\]?#3&ݩ|NB L1U5c֢ 6V<3rh1Z;NґJV]f1s sҍ,&L+ң$\㤃eXhۥ+QL+W&;qF0L)I}  iVf+;1 ҀPJ6R>hQ ,LI8D ܱst{{RLf5uXŮǫS駯r!}s.{9=YqpC?dnbӭ9YǑ%˝IuyWҧ>kx6zEĶNAHLJ)K1$+gI|*?Tj/dB#8G >t7Llj 91H WFGWPpN ȱxtk*|E"PY)'n &6])DōF-VvXV姕j2 ̈́&;i-)%.Q ks].8wЍמVLH׭1spŪ`^ͪLj=MGg}; y-ܑWtA8OnO_8W=b̹/L$:Ufdc\샴+}Y ZD@*snnLtCECMmj(r0 iҖh_3LlkWN"jm%R)IHrŏS-`k1?z^7 7$`FL|fJ$DP}blP,ǹ-F;sai 2V}Bk֛JgJXz\=p=aGrXB> 14 هbQ/yO[}|sKBzo_WBJ37ZdǃLJLŸ),42xwRF$=i~*%UGzlXֆҬr*9l 32̴fwa5 Ea!eVb,3cgGq" UeI%{OiF='Q"&$bY9Ȑς =Ƿ޳z}s_Ïkt޼˪זs9y8zHe]ɉAijʏ3  ~L6^tݱ+'>}o抶K'2U.LSrJ<)1dP%$cJ.Q fZ"0ID̲2}f-Su=cΖhNDd0'u Sa*+-*I+9)Mu;A.S24UA 䳰PQr@r3ΑJs񾋬'tQ Y@,Lu?hX=Q,ci8lD$'+ޓSt'?|;}zŏL_nOxo4{$)O+G1,ʜbH%!Q'[RQh %`ɸO 3%$I.F4x.%nXuL(1W<ʑEohjǔDCAkF˖Ehd 3KśvrO~EZp֒b`h `q5T5 ݚãc+چ㞣ӎ#{;s?q>EBH;x6-9ƚwirn=3'ԫbAli?_H9}@(sT)Sޢ~J >nj2 >$Pt9"K"؆Wr^ӣҞ+4ɸʲf5VG,+Kj5r:Jr(g(AF-JwL!UPUFYQZhdq-LP'NW !y00_4 Ӕlf@ )@=k:X' g0J`EEj]NGwjU >x,ޓbL|i.!)+S|S*,QCyA+#~>MJwT:O:nr StFB9 )t%-/N岿R$$#JgJ:Qdt}PBNLBL3,v K 3t;OִUj!ED9E(blkZs֛UߑDΑi޵kR׫~Al볟eZ6Vq.AثvyƊ[n]n^?avjΟq4e=~Me5KS5@݆~$x_ _eWU+aW{ۇSΏ6pFT iVJs~ְլd4N 19?k8 }[l&7V\_ "n{G߶5Du)^UJSVd'brUv$*U:OleCVhF{11Ż+ÄJn󷎸u{ptհchj!wk%e[ 8a~?bp;?6w)xnxq=߻ 7{bM7V$9ǛJb~&Nhrŕk}:,+:IS&eL#LQRy)yi)""v@dȦLՊV$AVk)K*0)M`"id9a0T35UmQp|@ۊaQJ>oܱ_X_ b[ Rq#!aQ[.2r9bAEc$Yfd5]5\ٛku8d[r\N5MP˓<!(T E2V|g9N143JbPJd\%yziH>ǀu7Qٚւstk8psXcάfwYW0NObȂɳ{g?B~ S3Le3kX )vjKmjnHS@W\mqxaLd9Ĭ9:U-(>yŕɄ) exjktDk#CV;fB0ItXaJD$ ** ˹LMnjY΍  *k>6Z/EIC!b/7o޹+Spl'wv&x BY5X ^I-()؜ q{FT*bO8x%WNpTԵc$e}o/ CgVg1;I)$/^v0YjE4˶{A7n$9kXBV&s˃ m5lŐertNN_z-mׁ=J=2c[Ih %h9OݖEv[GkLN\X6YHADKH.@1vp Mf˜T,ǏxR[q(vH'> `o62FG*%Ax@,jMm3n;[VkEN`k ?oVf[ݝމz.mo?s+4UJo]K.#m8o{I`RhfiO_sg %1'TM ʔ)G(2 řRC k$wBB:TIDATU*Xbr1>$UJbݐ#Zq`ʰ5$βl?n߾S;Y_mׯ ݲ9Xc_ H:*æZ[[p|MuRM}I̵H0^a>z/˃MO)4IsΘhjKS+gؓDBPَcﮊ8D>Dd%ZW58-P[WcQQ>wFO>zЯk~xq}|# O1_^.]X99ĹG' ׯoiKFCVd_4H91B9(CPl/LsδFsq97ZSpKĺj ;5UlN=YDAdd{\4#,яV= E΋;;jAlSOn?o۞ӊ3W_c_~ax?⯛!^\?O{2ܼz;oJ3L7Ff è"6$\)IJr[ҌlJAmmO!QTL26Jh8 -нpF;̏c]Uo~"^ostmԹD~["c+Pفvx\83[0o=`8Rqp~X:odQ}W -<SQ.?Yl8: (9uW}P//Q{5Fmm%۫Pס*F#`0dp&B$4Es *!sQܶ*.rbgq.N^@Z"s \7ȡ7IXoi>/;~] Oɷ_jߓG֨ƪyZSif#/2Hg}FWœV1iTW!M1TKЅqxͥ OcEf'm3<>֏~z^3W^_Kw)~{mya Bİ`x Ekց3c>1o5u%멋7Ĝ^%bNځ5(BJ yJjR +_S.-VQ۬k> 2hW1JYy7W#ݐ^5P՚AGzQ6ftQCA8#?u|s|}1|*ͻRoN?up{g#:؅D3b•J), PhvQ5-A.F6g%pdCY1&KT!ʺ݇|cn'ӫ.|"bV@3uXOevnwG7 3Ә*i>} >$$[z(y[OvÝ,^K5>~upw5] iaϢ5hԵ! }`['{WAEE!2S\lNz}ADuxu $zJnkmF%\ m m-G!cm5ӄ e-cXF{S|(?ZӝY_xیl0 ߱pdX4UWiUfCS_17+P/n?ES\1wXGag8vٛCz&^_/c=z~$oiS~ 2U ;NV#YX97+PO?O;k t9y9;̧N^/KLڹIENDB`pioneers-14.1/client/gtk/data/themes/Iceland/forest_lumber.png0000644000175000017500000021326307771100213021367 00000000000000PNG  IHDRaUbKGD pHYs  d_tIME8/8 IDATxy%I^̛wᄉ^ګz}4l# a xGB00p`# :X,3$3,twUw7~=LfFFFm񋸂/\SO275|>sxBėks~5{__ݷEew7(&ioZhh|oֹ?>ޗw?遮O9nPh 3hFkF*)fF G'/y-/币M_# ֙pUZFAv[Z5zcArEp̔NĻErV7/ md;֚w]x7_f9E._G^ӷ~_9):;3 d΀#r c/̣㭏krǫW^i>(0$:K "P9 -.7>. cA/hp70: ]WKzʡsw!sG=*?as_0xA E/=~?!Ps;JeRrs$W, Phs닿E8Ǭ}nsd+z昛uqu@!ǾO@8/rGZ#rJ|1H |kQ!_*fb֔y_0_xkyC븿@q"•/6P4Y^Gh"0?8-RA { ~p"}C/ $Yp7(Fir \A GKGCI%{FӠBbhчw6H^s8nP(-7ɿXo[HJoeGDn<<니rY'2p̒uaY l)^8NfǫW|l~ e/L] F bZ얰Ö́q3l9Yt%PL/x ^5&q،QW+ȁ|QO[j 34"_Ve!G&ӊptLXXpt;/|#ykp7(עX h.A=aV!$EF'[WUzy1:Y |1;d?7Jw|FǿNwIFThA< 'ɑʁbgKi S@H+WA|B8 mG+=_{r"g|ށ㸁[X:dijՐ&Xo6d:ŽRd#mdh#KoPslfTYӸu 'ˋ^|wzϐ/ qb/Y=~g'oúj^cLTy JEE1aVVč)7;+Pż,$# .a3 B1*A6PSQ>qܠu/lwe(4*#B Hm|QojAoDVȒ)%p  -Za5BV/8eFkV9}qvB u5+*?Ed 1`O?<+[>_9 W#4o䟭2yTkhC7ڈtx B'T/Bu-B 2&N&)M87πr 05n2v 斒}VW"O"28ϔ3ZGG6/Ip70Mo.j@ ({D <ϣR J4Whœʀ3JNr'<,@ $o F ow|(O)8%l,u-4l׳[~Wf7q d g\>WA9E?6~:d P=2ZIR#kh]p4V6'X^PiXi1PiDYK$'Ldk D6e%ubC]nS/~_/q^z\8_'[YB|A̘"I)ƻϡT Z"yˏ!'Pxh-0kfI .4Y]JŒ.\`/N$+1'ʼn&y1*7\q "H^?w3/w,KKǫWiŊ;om>Lwb-WŷRD+ ^#ss1Q*3r6Zrm}ނvfeMUZhxZgwgjkZkJg1 Y5=ehp!sȹ$rsm"nAqݍBoF (b Eo[{w^Sup7(ƪ?~nb%[ !TN>qƻOA2dg L)X|?/>lU t,}ۇq(FCh6B<=b:IDH>E< JИWV!Sk Ap$8 ^& #8ڈ\ (V*]8~3OmTiItl䐟 \n~, 18^?~}(ofa% 8PM&zzxIo|a$ 4[g:j<02kCҷ*(cژ+*g' ̴.6|±v2'B,)̭Rt'G"ImJw>̺yH78gq<{{@O54C<3& .IVA&e~L=lͼ AxROHŠT%4j5jHQGsJ<̬ʜެoˆ^ Cƈf& XeA-)-H5T*=D+4oNm3!Bg6B wRm|bv5{o9}Geq>4qb/GKAdaIKk+[Z3EDÛ$3 bUS*KN3w,*KgD#DT)qP aJy5|)"PEt ܘYҎc6Tj`p {t6((a} `Dt4K% d|oAWV^*H Oɻ'Ծ;]FNuReCw9>\5LpS]į7?s : X:$IJg'll+ 5఩GsZa~f11lq (EY-y]e ef00k/XY/#k&+(/ G+K~l;:7+qj'3-If{ݍT1&m0#wk} #z[ *P#BmaJ0R8#z!"*qU,]6DpF+A,YSLF77YhVa83( f~ӎktJk*Kڿǻ/;x/$|Ɩ:FúzAx({Y8|2(6'dlaE Q CE|B2LxO/B0 NCM92K2E{\ 쟆E޸eKwiKwKWa]Q?L_šu&& `#bqnL~?I횪n4<&ۡ aƱV|åQo ~Wa:'~NhUBj*Q&NZ sOt~+e%<:Zigp+;B!̣JubBnޙIc1,k ̙[F* hWH~L3FAC̔X2W#ּo-q$H%Pؠw(zK@n5涩iM&.3S6 [dP3zcjcxvI I8GAO pS-[g-3γJGYVն_"_*{yW~B5!®yųLkwS]yr0!7+jx, ҿʏN?>j&î,.rq;g,ߧpeE(H1޻x)Mﲿx07:,p|g>.: / Ht(v%kBe9`El#u cu193QN ZV࠵w}5o|0 8I~2-n7u(I(qiKNRY`S_ÑBd*Pxt֍*>(beO>@Z\ xRx R(dJi.:wl,R١`BifƴRbݞ>b_QfB(U9^j4͟4Q|\;J8^.ZMeUm'y@C(B?|/[j+GC~5|0N8cRw߹11yIUB2AW?Glx/71 Ӕ2s'^i!*s :ڥUX\>Căt@ؽD"ke'! [0B8{Ĵ 8ϪL38҆!)N>q"W fO\`,Ҹt6.8[IKOO.}+{?"3 y!&]#٬d4ܡOM9m#wuGýj@4bjOwW^dȠNoo`=h@Yc̃#qI9 r>]a8׵XR h}oǎ虙 1W rm&]]ז(|3Q~+c骛-Ag8?S_28zM*ef 7h4fiX*5W*GZ(u$VmG.2 Vjh0@iY,~ER+֯)-ef"f\V(9\b+#Y>U{\{wh` ^ʁc "NmYOF?4 HYvĘy+3JQp:yF>;ܱXrH +đ.c.j&h֤!4^PG#"0~;N=޸A2MG ZxA@XkT<'`QAj{efJp~Rގy޵WI|dɦtu3\۽2m;68`{56,]^i\' 3RC1LNOя$Jz(QuGZ.?y]G|?ϯZ?k4fFS?R\k"4zf`@Ov<ʼ(|3F)&σ41zd;[mz-T+ȪG ]g3(^M+ t8R [2JQkRgQEGt{ IDATY3qwDl;fR$J} ݿMJ6otOƊO=$MkF~FգhV['Ъ(.pzB/^(`u1biR|_2I28Xx/s&b7Px|P|7ux8Cy$-]+2+`JRmkF*ú4ZJUiyӮ&|e:+D)S5=I$шt MF{TDۡYI-Λ?Sk(N:3ZƚrMg,}%kg\|qs%dUV:0_ z-I;)H09$$YB=AHC=W*TU +6_7y?^6YJf&Ura^ E1dÏyvgډt|Q (3^J{#7v&p0G%U:.tH.i|/٥UU($Vq&㴎Vn-Rkw2za91}̟un(G0uk1[%y[ƼRiJ7̊O)>"4sueA>xE:w۞_C>, a5h i+X[Vo$U;☢fg^H$-D2D'kJB23!QqN1Mz=n$kLV=(Nq 'O^Y*V02Ku- a>S* ξGM~N31d@9ڊdL8o9+W$X=}j`9=+M^X"r=z׳t]Bigܔo)%\.=~!FLvqsdO=L}zfribWTU!lo  =MiPS& n=h!O`~iKys]_)c:S25|ķsr/9Cv4y܆˶S'jDaDe? R'4A=#t|%ug\\`jM'%gڰX̨+-Sn?*|mb CP$CC`rf7m2;XGJh^SQTj 1ycDX1y~$"%5NuOh5Z9{R;sW*RODA\y\ Y\ ebe q| ̗3혋/b"hS%xP*=qa٧e 4x z]4hu6};a 51 3+m +Ʈ4]ǀ:R2)jB9n_0;/"°bzT;K0@x7C*>IZopwѕ9b%tsaT"_@euB8YጳuR2rzxI_re8,1֭@9s>U$431F(Xl{j^n ':oGڰJaB@/w+ oKTҠ h߱gKFe5LCٱ2;\dWl jp Ч*>yÓ vσ3β|!J$gCFsi2¥U6n?ϵk7nOXyJ%dNglo>dBbR Bb.3뤻 1m $?Mex>[ꎙU^HOЖ ox I4w* 0Ɍ@&x!hJaWh &^FVY.1L~csCW 93ImwŔ;W5B(#&K>n,E{! <PX{{nR2% "2W FI1.S`Ÿ-G12܃val|b'mFOpTNvl'  U<rq0DƷvٻ)֯)tW/!MPx p}#):&aX! k+ѥ o͠y PmM }T0"b 4̕ &Lh5P}(_;)NleL %Yc{I0(x]}#h̭`sa(fA2huB&q$ jHV' ͅEssn1Ʉ7 -s'Vڴ[:]0(CN/#WH4&cLI\V뢙RϙSkҺKmOdOQ{}TeZD $4)V$.L85I"Kx+XuZQ񈎊#.;*^MAͺˑhrt|,&6s`F0V? -2ĉf|e}Ym#& .^蓪 ݥUVϽN=4,RŦ8cc5uJ~;gi>p筏QnԞdjUA/_qG0fB),HRH$I=4LD$䭺+G 89OnÂiӶm:ӶyF=;TjmX`a28{]:AP 'R ~#DzdfY%`cUBP1rZLA5"ߚC{ksP}#y( "_,X8<Rfqj[PG})LY89N $G *͒,}_p f$kﺽ05QG3EX^n5GhGiR7~OO>v,,Pjp$IsU`B TI1Q - Ii:E% 1שuvV +a64ͤ l&4C+]/r5f֌@̓5͚ 83BYu2J=4G2nU3`A1zp ,[喗k:ݯ>5*؀h (LcbH4MQJTJT=⇞s&Eq u VG3{͍X~$-[x:.ZE8a§?訇Њlw *Ã;x_j\z4PiJ{y Yl~v )ˬ^xSR_>*X2 ~Ghc.c-5(h)I2t>Dy_&f~Kݱ *|y ڵ ;1MFX0)0MR$&I3q>D_xHqlfUWV6-ئN]8n(@7η[Jߧ a7F(G泸f ef(m8E't0M4~h0eFzJO}OHDÜ8Y˧AQNa1Q6+ +udsaRNM]LhBɖ"E H R!Bg1M4; Txɏhd,kgV5J(QqBu=XJYUx좞sCbEvM۞St5f::J:̩$B':m uv_4|?㘓ksJXS h}4ڪ"c'ٙRk0mr8įԩ:xST: tiuC)l\`v옌M> |?[ҳ=Μ Pgtw>\lOοO}%Vy#U=/qMHh ,JHlcK8I(R"$YҪ$6L1B &FE= "_T26ƪ11&t(jb;ӥ57L5.tU;=zWd~~ R>TuVVY:o|/"%D{}j6n%=kC6㶦"rrw̞F-B~n%8(ORXW5ӌs,TSGj%*[cLW^y_Og+c a<4YRaR^0g )- $FHIo%lonRI{%] R UͦǦIX Z&rPy>JL*Gwx ۾Nw$~CRc:dS CV'L*"S? amz>m΢DTu?a".Qi8eUz[7i]xxJ5 AKzZeV.X+9{tU e4e_:4J,Y>,Ig>(ږ"K+?ф7~n'Dpzş7qJy_BXbji Q܅~_Ś(N̿FQ q>ժO呦0[;7h֪NehtX{pfxܕܒi4#\5~ȋC:hHB뇸dl3ڻK'L&.W@T4+T m꘾&?}XkB=8ˎ(p':ʋuɘBuq;7oE* ٸ"<_A 9w2ӗ9t.UVtb(gLfO6|CLb8 ɤ2pM7 a()4! P_ <85#2"ϹZE妝/r%Q2{Si&ccE$D q iuG%<)"MDq@EiLV_gG%Fj)E!4&fJ(z_KPg*{8rFº}EfSΕO`iAN^Lӡ>Awa<*"ğSmv`4s_(Ӡ]dÜz vnG=\bs]p]S! THRX^]R]0Qli3fip Zpq1cq 7w8?kd =2Uj_|"̼YK4BQS%'S/5qWH1q4!N&D$IITJm5xauW.@tG#6'C ysmVOҚ[U7Q8u!P)B<ۙ_^ckq ::;l4&SW1Q{>z=as`<whAݮp.@7$q4BzJd:Yޜ#f¹KL0=A:!Xz̓6ߦ֨1`ѝУ1mGcn>iPÀj5#_@Has9Kf' [0 P[c؍P4Iق|}_":!4~عGqo)?8`ckxډUVWN{^35IG{ iZdooNxLg<*u-:l!P e5Y:+2zOD*L8vAo4!C:“Ԛu[>>w~Be ȠB|ptϤg?aY}̳^] $`ZbP"-_YGآD` 3 fzzng˓{HЖ#|"*v<7oad:t|vש~x עq]I,N6mVwo`7rDV'r> VY~T&2nM'~ýZY,/QJm=^_qx>@jU5jHܜ8y>AqX v<$hJ5wnw |V \x/Wz"h+v7υK۾C3Ul`\9FJ%9发MFӥݿEzU lM>TYdĤqH,Ez mU,lψv UG\$=lR!JZiLl];U9&W cs0 p+xf[IN&ӂ+kUnaaR5] x)?%ll{N9^IW5=;WcM}\2(CE%6k.[14qE !YAcex }@ j<.|& yuMFЫ?[Eu@^F˳+!9BMh}o-3gDIJg$S-A"E&)VBm;w2v)`R߃_6Z|ߧp~Ur1-oxޥ8r bJoMjVooFWn7WuIgm.Wi9WG/x;G1cg!wn/`+jYC|ZGI(FW D^ђSBTC ~?ɏAV;%{h[spߣ1J-{]:T:H[xf,{{W~x,Wc Wi^{іbJԄiw>~/ Fm-7Bnj͊SX N OŒ L#GYH[둦]?$I;9KOFCy#p{ڂ?Q.֪)-Qe}o?d~c1:K7Mo_qL*]+_CB35jԊ7\M!jfiY2z9 }[<o/LO Ny/@Yݷr=0:ފ3ܺ{&>7ϖ_oyոb HR\tW?ǿnƵNLS)M'=~{igO_s;,6w|#bMo?`o-o:tJ:Rf^\_/!W(箏Bn p~_^ݽ}c:<9[;wQNU)=|H#"g5;;#OYIYN9J$DuOF^5MCH񛝮8yo/*/sWFCje%鐳#.OY.hPZ-v@,]YX,tV 4.mIO׵.pfYP֡&BXE]_j09}STp~ltu0ij'F}{0YdsZv#~ࣰĉO2xvC;hVJ}7Hhʪi(p|rIܿM7|S ^oTRZCVo^  4rq6_g?zpLMѵ5ǟ:Z2]2Ew1 i# |u6&G% G~V.a_w"(ɽ}pv`|s"G s9˫!!wLMz=~\0׮RҸ7q7fY-1}o˃u߽f|իP{ |t6%6b8P^q?g2qrvGDO3-}.'hh%Vk gxE6Eq5f*g}E5)E18=?'Bb0oݿEbX'~o}{lnmoDB~='XA瘊k_7K㸪y!ahŹ+dBʘ~o3ryM74E5ygB]/$ e1f4 C+UQ%VߓZQS5<0WsFWFs`P;.NK 2|tׇ/g?#޹Ϭu.}K'N>ȯ8zCԵ2ⳟONj'_矑>Ys|8.r<L}ķ? na~h`4ih޺;.,ρe*:/*/@n#(q~Su7AR7iVfTg; :p&\g ԵAsyyb>h1)~e4^"Gdy!RF4 zA$ 0AK|[?3\MQVΙd['Yg,8Fsxrȳ_[`e@l{w2b4zaEh:% 'zc]en`jdoҫ77[Y*FnWȬ;mm2i4jߙQT3U*dD/X WK)ִ)q(Z08q0M2#f1_2G .QyFJ6zm~@]Vlmm_뱶E_\kNOTE|V帹qj | < @wEYKǥ)׫Hn]-htƽV .]I#;Yu]id2/]]c( [tdٔl9z5b'W2whͽl,Sl&$=р[X0[XF"< j jQZr1(&ܺɗO`xuN b}-Jk-5NhbUL4W: bK[7jpUV?Sk;vR(|L@z &}*#}`/A5EFYd4MK{H BX1N*,𐞦,-BӘ+tc+jx IA6ɠ BH0;A=66k]ْ/h(R7)l$nB "V9'2G3 $ƲX $-E#?u/]Ә5﹅`W~rƬJgyNC˭~sa܌ġG\_ [\Tjn(NO-O{,fC$Y*SK۬bnoI jnm ل+ ^ u*FkCT@n4:՚ P?zk Nꜭ\~^᫝v[p/_==-dq Үp7xCv5.tOjPN3x}w1)jTEAuSɈ("[{[!F^̙OjB 50nLqox2" <ڝI9р*_ix;{l˝ʑՄh!Q/ ݆@VA/y]W7LxJqϺ._G! Ms0_% 00Xyt[8Uf",,KC֊2۰۷|RV8Ѫ^pyud4dMѶ"J!"MX%iwަ6|d2`o#n0hUЎ{40]ӟS}&lX,KE19MStFn?t0`X'>d!m:TBZb51 6o[ۈ(dܹh\[U]B8KUNX gaR>x+=;t&Dט2$\Gw{׹?߉hJXɊV"R:iwo#nD>ɘ2''/)%vQlf=OSLvSk Iz){:kf'\T CWZ5 3YȊƙ Cݬ|,x$$I[jDq~OPFЃġ4pvl`2]svuy>u]!&iy45Dj ƧGj1z * lκS`kʦףkrp;H_2XH`]ONﶸ('O'gTYAu뛬n w֡\엟SDqLGdٜ"(ĄN5\,\HNVL0n|"֜Lւͮ@Vp;hcYQQ/= Gcz *'MRӀv;>>ac6_Ó H!ۼyp>ǒ Pu?#HZ2@ۅYMlq* ڒІ^dy%\sŴ+iR-oSJVbZ'`̖,7’׊n*XZ'RHt֮0$_5 8c)WHjJU0]st%YvVQV TUS -AE v&~$ '3I /ɳ}$1 ŜbJn(]srq!M}f3t6f8K*g GO82gcytpnz6۰4i|ӯs&Clƻ>;mumF0m`d{nLi]brw]O]NfhOƤQw;hfy3_OȖK'xx. >Ϗ/huyy5g' lnwx;|4Zq|rHFׄ]Fmfo}~:R8r1p;yYnhXw*ciLKjz2j c- @n$[*Aؑ^Xj{tEeYKpZ3]+s+\vqmk,ՙBӓ`]c,((KSFW_2]2\ OTKM]Lǣ)1ÈwtnwM<ߣ, ή.ț슣ӯ.),[p4 yepvr_ Vzm٨ƿ*aw?.uQq}qJ]Usoi<qD`)חG4 _ Uu`E0Un뇰]WC*羁~tţm.S>s$jq|y͵U,h;[{{- ώO\ ^"w>tp]vvoP(MGt?ls,Zk$mz} RiIw+M*BB 8HRk*74~ȤviLVZ^MxmV t"(Gm=]AAMSvE fl@IZSU5JQ^2. Gm(iiHy>/PjL0^Ե|tcFEJgCHlm$1\f,fc~X9'\ ϩcj2~ӟ`j˿1"3_ %aCFX zO]Pkٔ_m>wFGDI9'/XKTFW r}@8t˷SR=xDcf3fJsD.$_̧S)UUry~eks<4 ܽ}l6C"XG\Og\^rryJ/~/Cz!UU![kGt;7ҜG#F",sȧi"ZPK&@逺vݨn|WuTɭ=6{JXu#+*2ZS8(9󸍶ǼXK`Xs>Д6\ )*<B:/`ϳg3n w'_aE+6()~rٓ!e3h=gwgNk i`21P+*#&mﳡ:, ,\|Z꧖0L}@ޡ=MRYB jk|!fw#ziV$ -ro8"  FӾ+VW0%!pW# A^Q%!iZUh>i2|dx|4J^UsUU,ΊG\/HR$h"h WS$VdI])({+b԰\,^BI-q/_$Q"iGU*P ҹ: , UOi/8f뻜X,/g".OXzh@#(0dXb|ď"A W`pvU[AoKh(+^٨@-k݈[?,kRc'-O|Lt Q+@m;8{Ӥ2g9ᙆN3>||w1yXVB\.W3~?x? wC hOl1'JjuȸCe Ўq X c%X6Z8=t-jVvrš9;d9 Õ]QF7S&=:x*z'B8 2WHQUG$ i+ |Lhyd nM>YD5Jg\xji=ҧsd(;%J} 5uc)+mp~5b6qxïD6kP珿"c7g6d<tnt6';<^'!\07$Z-$ 쪙T7 דO_pq~I4G\] wXgqJC#!GuQ! ͧlxs@pJݼ YQW}4`UCZEsVh<" .IAYsj3UxG4JS犺BgA`i,Ua24V3z)a%}FclCy䙢Q(bV'(RH(q-~(4YI5ԕ,|NSMcMłZ궙e#Ͽ$ ;̆C?}9}bNk<i{l%$pE{ Q⛩rүv_r̆LYc /QsX<#Lľ`צX6J s=/vјш<{y֥Q9~&1Iiu^cjb%Ԫï8 kn~Qځ2 ǜ~Ag.ϏYfS66ȋdLl|<| N^sv_ԍ4iH<_B;l^\ǫ=T36nMB>a oJ&Bi6)q*VoȽ7/ , |&񗌮1|>*rt`a18(j{m3F jߢmg?F7 !nuN'3K^<h#WS=[> >D[D>)xhpE(=2#XJ)m0jل񴤪,epUIsgIs7{FZʕ/4y4|p4e23M˚L lN],/iĈ ə2&'<)ԴQj%L}JcJg7ߌhjlR`T(i<@ ȡOŒ$0")4OKz,b:Z JרZQ5u,>nICw-nJj@hvy֕A)CEx~),U]O{j;iR4泟5ktz88e:ȋ] "F5py~M<:xNw`Zp6Bk泌V+FRIm<歃-X*oT $X IFQi0]\x2 m/xIg("Nbד9WCLÐvaPKip|lLw_2O(!6ιp1c$2HAI/iTҦ\^]b$MQkgq [QWs|A^Ɛǧ/u ?G hJlSPeS}4uZ}rP׆+ҫs|_bb " =a ")ݽ+/vcB_yӊ*L #Ś!TB 2s)b>ħְa€0ЍrgF[e+uRB1TŬf>l@g#M"VGQ+MWE:k=ȭ$Ѧl>bEMi a%O݇uwVrK˜|t٣i{Ji3FӌLO7 4/i-iz> SS QkZ2]ۻ|Z)Py (뒺R0&keP5r~C$ 5FB7ԥ i1q?{0rxOuzh쒼yF)P e>>iF 5!^gc9̨u̲%b/Nxz:z1K^oƏ[;ʉR(`r@h"RG$,HҺ.=$(ƂjOԕE c$Ú}I-xo(^>TقVo`&ڠ9K!e9Q7!" _JK +dˌdH 4a`&4MJݝ^&YYhDϨ+pIdF32)2#3"45Yfa{o_k}Kd^.?Gt ]x[:{~{#RFl\g9NB(ܒ؂緿3c;ǧoo3<} M*&7e_WqwF)(n(B!mߘnk%t~8ufCC zEA7`[E9BFT- Y l@d HVc_/ДJ?Zƣ"pKGCJaWq,J*Rl#TN I-KjG |OДBb?=1}_W )p$:;2tRHBV!j=o/aIA|'~ , _NG_ȩ ͞aͅro<ϤT(deiԴ2ԕmۿ/?"'LºRs$ֈ eHg J m#JW7_l+p~(!RFh$v럛>4{Rб3OO`Qf*-owJ#-RLW2mR+,5J}yg}7AYt(}%Ht"B sR4 =vY5$U%naT F)%i+GL(m6]{| |skO{^,a}E;yZ Î_+Fw(+eaWLرW|mʧMK@w{N Q5O() Dl_,Z)?5RE¨JN;Tnolqo\/\F wǟoHa+<%Fwpvȷ+4uewR9V^^Agr )￲;XJ]o__iǏ?$@)Ϙ^ UR 5.+(~ D.9q|JI"#aDfo8y)m*n4LlK`{վzbPRJҜ9x>2L¶.ۊAr  ۚڢ庲JI?TR!Jp8|tNa:pkDU\&m?2ܶh+oPGTB%loe2a7 C%Ǻ% IDATBTj2;.ܘ;@3PZ0/5fυe^j)-Rs;RI *JJQWt cFیbzajAʵ cmbad&D M\7~ζ%j=u-̑Bv{nM%ZmRbƇ6hg> 3Ht'{kP$V w:g|HN?x"֙b@29ׇ=^3_lK#\_nSA[M7fGmY+L,ڢMZ+vӎo-P^AB- ݾ]6S$JCgŚ#׭x"4h%:Mʚum ?5bL|x%ՠw=a^nUpΣB&~lѕ>j*16d_oRH!{c)yJr l+k*WʼovJRE%B}DS-$:Ѧ6hV8iqݗRk҉7QQBSI`þoF  BVkmpPK&Dy_%VjMH۲ ) >ah#8xC$I0,qlVΥB3JcORf\,:? >)( n+ynҤ*kA< H["i}k'("RK& 12Bb m-szN 2-|J{G-)ڨY4vwa aӚE5O?%:ݓfkJ 9~]x{RMOYJ Ic`,H%|Eʴ3N-m )%=rׂCPsh"@f)]Cl)A(b(%Ǿ!szu#؎**H )KA|&ʺJ|PP,EɐsBizwp[=޲) H%=Qv_e6|Bq)Z~"W[٧Պnw%_ZV䦈ضo0thfwUq9j \QDT&<1 [sWJ48)R hnkp)eSBfGtaPX<Өzw6o!+$Jz[p~Iœs$DɕTǥb-h8;(%zI. q1- =b@:#*qa ٍ1cB{E}@zF =Kn72$]'K  J)%2R LW0]%?J[@"$@ՁkzJCG̮ym r[6kHeZVڴƭH]!b; 8 wJ=EV|LxJtC=)YB.Q$%ʥ->jZݘH*ɷ%+uN7nw]1L*X=%UqIStS{A(D) 9d5f a/w`>I塷-1υyJ*Vr:UfBtܮ3C5v-ԇEbjfJ)!Wo$+Z1`L8ƹ%x- /TCR5ѵދཬls"`It{2 SO7n˕nk_#1غrRD/XLI7؜&_W6dt'=9py\f:aǮt!V$]A1oq[|lzJ,F?tO堙_۝-MGvI1V2 kYQ%JC"-3 B΅ݑbB6 !>d:PEPYo3 EXU"=CPV#*5U[|!ׂݏ#j|HB&kD]TYݝsD.~!x8"//3.p0B$;Α%޾ܹUѣb:ljL7;JA#iv޿̗@I3sjNP8-JE JHCF?zK#n [Ԕ1'ʶK )l/I%@*%NZ^/ 6 auŏ8ҍ3, ~ΌÎR*)e^OG c$W.__v%3Ѷq$P9"-3n84?qt7ԜG`'ֵ ""#u4"Tn. 5Wty>9VcZ,G?¿? uǗwR#Qje8D KRvKdGg[0Iy`;""2ө#.m ܶf!}.-ZK|\zm˷mMh$hW#-w Ay' . _Hq`s"$̈́{R( STETkd8>|?aB?U"A4Д^I6WtUzy c&'ErD{@s\.+yg8"dj)BN2됲<Cn 8fL.; TA$rĔɡt$W\M}+O-n?gn]0*5\GpY1|w<g@$mjn7n󊈆^1#ŶSdE E%Zhk~0w#CES*?RW?_Ёj YT䔩*C{#D% ZX XFA,!*d˝aV:4M]݆5>}D(X -$Q-"}²D–R4b׷m =(ͨbFm=%9EucwZs/$-v<[yvl!:OzL?#R42ی~Gg559 eۡ ł puel%3'ѐK_|}F)IɆӹ)6At[a"B.qi3:=ӤQV}6Han0jY9 r$WX"5 jՄP *!DA}-Ip[sp(Ɖە=syD/Y6mJOg/P2~tҘnlZؓJ9:Qps_)q>+Pe!D56GaLS5% *<_[K}9?خ5bT49 jhӐYjcD8rad\ 5]7dRJԢP`Teba[cé:d]GjT=EPS3Rv{y ,s)}I.R~GCE2"~{pqrE‡G>42 O.ǮGBk-:l|ǘ]*B(s^zJTnJK@oB&*|Fi׿-_rjrK  $Plȇ;Rt1'ѕl4cGʑofjVh6ztJ .xn^" ĴJ&J"f%ȺV*[|0nׅ5cLtuoo^2sӉo ["vq̠@$?q"ue bhf#ZS S?`zr5ܚPZoYI^R͹E-h%XrŹ}.B Zˈ,HImyA;Q~qgy{[>Q)cr<*MiK*Tґ\e^=4fH,"ChliJI͹FQM{˲_EQc&,DT@m+TiMg aůޯ B7 tVqǻHӤ̓%luMݖfR3JYu+N5dHP6ȼ>Ͷ>N]\o-֒INZkәbKj2) ųm )J5|rX}hHq-d#:M@Xa:8Z% D YRSDTmQz_mD*\#F`Czv]yZ*( a 11TJ%v~4ΐs  U#s[jMeZ!6˛`ç#Fljوΰ?TQ)|̢QFsq}qD6Pۛazͽ5ⷌ^+,ؓFwTZ>ŶW0``s g6.<%´F2͹@JQ &E2BW=RB KQQou)`M,2alL 2o+Tli%bȬs()w 8V"؝,UxU;FQU3/9q]oqNC֋,%IN}O{-/+u+ ]CpeZhmGX ?hcRDžeʘtM\QɆ 2 f_"ЕN _8_q/n)|'Jc 11Ӳk4LczcNd28i} mZ GӘ(ҸMnAY\ELK@6m֥af'PӱyE-%JxPN>G+5SP\D*1G` uk X[Drܠ*.ωpU]Cgv;:qVbTvE+bD9;PB Y5F)(QQ`R0Vv3;8jޑceEj ia0Y3mmmƷ;ghʰkxy]HB*HQL B;7-1^![R^#5cHxȞfLS*%Xn} f%dxx7pkэ Ӿ Zh3܃ .Vu+u;`^y$ |)sxVM̷Y{Uĵ22ttwY ZpDUW:yUp5a\XG 1ֳ&~Y5hobҶ@G R윂٦W )A7y #y>d3s{R\nP#x`Zo* 5W6r7- J2 +%%bMb)Pc(^s/;p,,6ZEbIvs{k5bXW!P3jt[i o8Y̖B+#lj%T˜S<]O5D ]eN6q뇙R3+QFt}#2β;8be]6<|ʴ{MTJ@fZ}c Ԭ&[RS4_]7V23u׿Qj"f'%CS(TIP _@TLy)B5Ngl|ڪd\&jbʊn*!X|;Zq"E 51?4PZ}g=)*rU)5o0]35Ic(0Y+8r&.J+^[M] Y]QR*Ls-i\"ʲBN GO7;aCUlXՠM lZQadyKIlwΒJ9z+R&NVV'H!SuiCivɰ1U 1!DS\V]n|<+K4~;͞3Ӝy_'r|끯STm4J[J(*PY"3AZȆl9A( R7xaF(p:3 oU v$-r>=˼ W!&\e uV*DKd|> hSQ4`c-K MUyk,RlvJ5cdY")D9*SBik5MbFj5([iFmJe25Y{!I8c(*s!9s;wL֚fp8ei%1 JS)AN!*N2gyL_'%r- lz*?8Jf= 24}upӜIJB.yaiw-M/,c5M8=zB^yW3E&N( Mf[[(/W5dȅ46 p@.ؿ Q[TZ %\<=ԗ/_U@J.]#q1o12m*za_2Ƕqfk!&(}OUʮqEB-ւOiVch#X !g uKNb/*~u$@YV,<Zoia:Itjo;r,!L uڦ%cA'x)VKKAiA ^?hE}(XsiIv~pg?[ZfZ2l!g( 9ܮO|SOL@YcSf54J`z8 %K7JU9)%b{do&[XVg}Ƞ"iXkbH9BU ?yU Uf$<䵲;-J>_`_.8㝥*4A@ZNdž]`^f i}TQJUCȁ崭F׊f 8oȵbv~7`G9XrO,׈ӖCed2_v |0w/dIV6ʸFRtmC]!dH{}1Jd 2M bM -w;S -U-t+Rm[vC~OXWj\9W\Dž~ b2#7xQZ:q^dNdžcb'}q-+ey)^Fb:ϴCjŇs&(i"eJF!*\(G.*ժ|.[U>p1ᨿݝ;DiJ|>Ԓi:JV9HXe~֕ IJk->2s;c;7=Uws?""H Qcp|#2fhh&0* F9!LM iDQQzNTFQDLִc[D!-z1J.\+쏞9-§יXk)9 g BjzRhS%qM8"VQ`9ry~l危2RKfgrái:;Y.LTr0Qu[5R-"sd!7 شIA7|ݰ2KYm2UĿlt׿w}_ݱAY,Ԙ 2k-J?2O 5MR2GC,McF1UW^È)PGj聾ihM+YXX9W;LZL,WkJچ7dFWQ-T8=w!̱bqְ{GO3k\@nD3WxE5mC6c^1FLcGSq, \1qОeJLgwI)^ :E(i,jo˜h!c(I.!edR<3/~g뒢bXVeihx|hp?RJYtV Qn QFT9[dQ_k%[7@0^K9 mMw ^Jˮ7@Ukh) &WּzƩrTj,BӴtÞՙ.UKZ y\^/@a5kI2rWXʴVi*UQ┥u.RG@̷WTJRB\V9JN;*R6U+uff%kݠ*mZhuLcT1%bp͸Z\%Qf^?.A֨"'2feݓ vǎR%WʘJs EB"mA)EZ9P ې۞ m*ng8鰝cZ ڨ//m"/r)Le|lGDDY) J,,S` P2ie]*O#-33*h}>ǞaO,Hij(-1fBO#zLd :⮳i;Vsہ\#eDVsVVQuSģ>,1FIt] KZ+iRLZa]9ЮR(U:$ #,eLO5a۽PK`Yg/?"@U[JP̷Qn?>Hm= "m`_*n 6B kÿ,\.ǯ{T,LX"]: Ƣ`pDnO+@"qV3|bF1[rTbM{~}D ouO6-$X8?x-nD#څEPU~qI{ y#e^T5˦@}y-k+A m嵯쏚0-drMܽ3/ e5|k^џʪ/ҖNά߾#;#İQ9рf4߾6MWn 2x龈hM+W@6X \JZ.O#%:Jz[Q' ݁ (q g 48v#uu](t#o~J]?П,M_ 9rLOO_/$0XPMu,ڬ.% ZU4SK%MyAUw qI(rʬSzha8y;n`wVk s駉R !+mGKʝm-ƉW;m\v^>hW{C %H(e/ݫ$}e_;)Hд0GەR2C[){żhb.̽yeY9޷D22ƀ1%lAb1FFB`#Ʋ#@F _FFHزHX 3 [hZ22c{?΋ꚪ'2=}H 8Me 2SDg: ^*HPqv=,B8AHi~̡ L4BɌvkp0^.dq2ε<8q8? ,r{l(]Ÿ!"ܭ*-C. pv 2SXm;^')eU{`8hmRu{Pnǰ)h^P:֌!M3"{f i8ƛ@a4 x Î !$2":? T9X-Wĉ;m`>L䤷WXeV[ʓbVlpFSUe ꎡTӊɬ8h,JJ&Ә{)M{]Icm0 FbG<,".툔~x(&*aڽ5ۦeqL$4N$*)pڰ[b9e*"""jB($@꺥txOckw r! 98 2QR1>O+ {O? -4wnaVeɠ% D\?|f%Gs"giʔɤ7gxK8&Tm7-*\œKnoX*'OȊ=fA3Ϙ/f]G8!R4`l~RJ JZtZg 2D~ׂC]byp J1 kU dD$2J`]KTipt(eBG$ Qf $SAO AׄdZ`ZǶmd'c6FHOVY*=>aFTݷu64/\-|bHhDqD)[͆1I R>bqtOٮ5EQQI5^m iN'D Z#N=]mpEc=uW7#(83JgV<+I8XclH<J88ہ̦G#Ocpwduu[1b/3EHb7VGL ]Om ON+nz]%4ߍC{D|F?8] uw;q=3X*"$-2<{#%kQn{ ǞpAJ^-&&ќ )C-$ O/!q8(FD;1#Hb[ʥx읍Z^@8pxm2އDiGhUEp!k0#"N_.8}նfO$ }1s݂v+~GpnX2E$#եAܹ9P>b#PtbD_9Σ_~IITqr2#˦nj ~=z޲H)Sʤ: VFC?Y1p )E~HM8;}⌡ope "I'>bPjD$/ȊdyݳL2hۀpHm:zX8*iv1gǧL"(mO8A0eJ)EIYdl5U֎"H4a,J(/z4CEp 1w(]g;Dž<݊;|y>7Iv{nAӘ8{XcTh9k(}ײ^.Ǟ4882Tc:Xbn1=v^c]Oo#"wM62S#-2NPi)PApHu/| ] TGqJ3 n5 &zt%^W$QDgkn~hB^L6Xs MYT)ͶYEU͘.@zfGSַ;Nqx6!_\d*N9{P`ьHwG(1њDIGrZ"GA,!V Y a`|P׎898HHH'S\,޲8#|ЎY":xp(Q%QR"q7 ~x^b|Dʀr{9SGt~ dm84yPk4Eq q$#Nt I&],/Ȳk mM?6Z{'҅1A Hg4r]ې)B(/_+-Rhr˛+⫑Ł q;jzpqRlsv~)+ fMuKoW,WdEZӂ4KΎjؑ9Cod`Ԝbѽ9Ւwz¸5ΏI: c% GI@ݨ-y$ڑGYA ;d"(ʜjv]K?*8%h!Q|R'" vx!9)sn9a@!;A;/}Cm?_+ 0 .QB2*,eCRIb2 @ۖcQۅH8~]wDi2 X6>jHc,FaPX(B@0 ި5?? /q0_xz_]ǂ$x W̟]s}u1j>&RAffyӛ+Z_399=;Fɬ Gjpuj*ynl{~d~0v6ݪ{9iP#syaPy7&y 4c+ip<ɺY]>FԁEWV9ݎ]!j3`jPfEAlouf }jÅ&DAq1d}00,tcκ|ԉA4`}<1~9XZyfϙ&YFL5ikjolx6*v;!cV`G0Fm8C "q&)F;HD,_or~0<#%w:o!0a{CndpVǂRq{{ =1Z8Ls/{EK?zضI>2һJqaGE Yڮ!N2TPHKڦ ^g.QqJ23h3`FMh7(ޯyH}_}ԃ?s/Tr.,fqjdMO&̦S! !b 41VeIDC"%ΎLSGI=v> BJgo.?=a;E^PU%B ~LE]OU$ea0#$M7 q@[Tm-9ބOSm#)Y"cā8.Q.Bg:5#1kx?;Zfw?Pޟ~?_}S C0 EF8T:k`>;Goh:TǑ]nnn8+(خ7\= L 845.NYmv,m^r-6tZKf "KXLG,()1ٜf4O^nKH4y⤩b-QRE90`K8a*R"?;'>69bo؊"6Fku,#N+,%Rް]z H ݢfuഢ{7=aq2_Ŕd*^umSno;LضW\\\`c $ȲɌ)]58@S+"4͎'R 4X%DIDc4!Haѐf9-iQ\, d4V>|KO| Ƿ=jv=Dpr3#n)f92e:Ip"b2!cY3]"⟋(,8IEHKF=u i9{~@!S{ 1i0JvRaG Fʁ8B!O%ܻOlr,7w-Ķ6N|0,8;zwia^g0q4I'Ov{Nh;a٢@Ǝ-2?:;Ǝ<,,MeĒvf`c:/pΓNy{=et 7:Eʘt<o6ԫ@_$ȘJto),i.rM7Y7Y h\}kqDQ>w魦H*򢤜TTӌɴ _%OOQ(0}NBDbƁ )B{zm:!f0 `y$Oh- A? D*(;z/ī=_w|}/O"! _X~}O\__}#5$I1Q\^"`W>f38tMT1^ZxPbՒnܐO$pnصTp8I!sTX$-´vaG'Tn$QFT&98> 2ºQ.C1R"G1 be "i]=p!bҡ2h4ia=C0~"KP= '>ѹB _}j\kvێ8OJo*BYRJE{;B-#e`ũb;Iz(Xb,?/MҶ RE"ޚfa$_{7Ͽa2bԖzrvyҔ";`W_kc# ^KnDQnKƱɓ D42ԵeәB[P[D[0_.kjD:9j֫JV5YWT%>Lʜ0g]8:7 I#ORu34tZJl0-g8M{@+I$ -54*8"ˉ"iQ!wi9ܞ-C}"ݡu?>^L^A;iQT9zC7' NpO ƠF~F-dBt]0vb7-N}/%=N0^(V#ET^ -_\y}=%]W#E~/(qۂo5`[wt^1IL7c-uIYniCNyd?ﱬ/x8?CF)sYuϼHq6Y<,CYM1p4SDJp8sAz3px2sܬn֗cMlhwxStRsx+j ӓь7\1YܮhPq!Rv7AŻ;Y‘%ak'4}TsZ;z_L ŝs-Rntlv"U`횱҄ʘMKJB BPU T0/qL6 H?vPA}{Џߒ%m{3I \K⯟$ΑQoW5m?/e Sbpx@8;{nӗ3>XVi#Fy"cKNgcZsI J͘MK<ɊKuF&$i{[)!}t|XEYmi)9.Y.рs1&y!c%dU%| ,eG]bQ2u^ 9YLuwj/BC/};6Vaq'B!d_BT3S c4]6U(bNxp~LU6()G0Hђ4cpJ X#Bۑݲny R &,ⵓ?ﯹw7oټ؎k֫l>E3TӄC\aAkze~4!+$(( Qdjx$cc'욍ʂ(*ֱݲـо4;KTuI%EŊӓ̒9ꚲ(8[rR0?zElv{ozIbJ{Hij84M0h{8>:"KsFcr0zfD>EfדeeQ-:vךRr!4J*h>UJŌ]ЂrBuj˨-Z-/"V@4s>l [W@ʓ1YQ&^J1dhcH\g1a6IwoAUdl II }s^욁kskO nŤ39~4m×^4u2IH8f>9v4P&BYIcCz{ۮPIBgdi1gθw-=zy7^= "UѴkUQY)RﶔEN1ɹ!8>^ DY-yIw2'W%O][2Cw:XtAxQ1&h72X7 bvJH㒡tm"iEMzi;ct3Xȓ*X/][ Uw?nҪDDV4#^o1¹ UUr0M9:x8zײ쨪4Oy u؋Q(]~Fu8/׿_`Yr~~cZn/yCδ1? QO8?3"GfȄH]\]81cso~{?sV|K'0'ǁ8UU∳P%&E}xKFѵ ")UkGIuӧ6(|zА'U ňv=CŤE|m@&QhF7׼m3`','s_xM]$oY'Ice.7+?;mlZ.?X'.(g )bnV 4#R.= rB*1;!luWg8%F;D`txqBUMnjnHEԛ|rsS⬠jkxUǯr~o .Fiu8/@ ;+]3fY/mG{d haXu>Ӽg$O)eҤsz뛴PU6!14%5eܱVIl^24nk8>9!Nx޻3`G밶so~\\OVe"xҤzn{֘CgPupxx>¸gWO"{3fGYJr{wpG4b {0Ȋ (5AA%*(k QRe(P"&)~V^X,!h Dd⥠&L9^{̠XXQ""IHBmp "H b%1OEANך1O~Rk+'MT^6AW[os~E90?($ GS5tBYFF%I쨽d"onٮV, KMSN^^'s{v]|*M'ImRŧϺk/U?7/n-n>`hUoP&Ynw,kzchkɂH%V[[,`>8I:L9xcM(vĪD8\,IRRT)" IjtBV ÀW+ں%/3 ijaW7Lf1Gglg&䌺ؠec%FQ 0zwn$JRqdH!,en# +S<"=t¦nzэq""'EAYLcd,)fG)=4 ֶ/){r%9ɒ`|)PJok~sM7:Ip=kO|=Ck}mYv#!>'%+_azdxede2Qss}skncrf nqcvDd>ψȹzC;قQi.oٌq{ܫ&TSE?Dxr?<㕗^㩪3.>xꂮX1NaKdl%$t6d@ێ68l 5󃜃8 ֈXi|F*˛5JB{&fY_w(,zh󗊮id%w.Ä?zzu4mϠG(R?wSA?I|NI{_<:<϶YמC9?=m4GfJ1n'O8+,l68= 1XNf%MKnR+xKqwPq6ۚ=xM9LfYbgԖzE[vu $" Nknn*^z5k$U9Lt#~~Wy9$ ݚ%ab:gFVWAT`,>UG]SNJ|e Ŵr쀼̉xglk"e:R[ᄭ>2l5)^?rpJ(Pahm)?'g|>*>~gͧ??Ph>ǣ'Ogo]"rK-xpr0j͎fz7?}$EN=8==!t}},//ZM,7?;ፇ+g))gzu*AՆMrD g>[8< ^W8fę财 +"TCf/?ůӋ5u==m,; 䠜 )0kno(Kz5 )3n$<>5`}?yvֆ'DiFxv'Eu`ÔEŽXn;N% }װWtmMR4pv punv@ g:G˛6Ӫ"Q)W^}Wyx M&ɮHIwX8:MKmxv1=Ep ψ\T/}%K̳IDATVOkBg"px4%6-C?)eY5 ,B[Ώd[_%Nsv?9Qd)E1OУG˟Wٯlyoc͵v̧w&[i  AE,$Q$ED!C R`=׮rl_RF)<^ot7MRQ!J M2ePe4a^o!{;0Ung d1izYDQ%460T 2xzg ߋ-z c K YZol9 G !QatRJ6ׯ'wWLܺ^y5EY^?ѫ >! <8Z,Zf*F: 4mIZ2fAY]a,Co& ԫ&g?&;~Kq}yrQV}y3 o~_"z9ԩW*hpO)U0 a ySAIM$JNNȪ1EUI@,,S FM6Ȣ( L}sw"T@2&Qq5sC<H\HLN=8 FܻWmf]m07{D`tFEmk/&2j:XY .Zȋ:,q]`E$Q$$8e>EEp?{[S$U?/>x0,UYUqq-I 1zש!\֙2v Zr$6j$qT*'/|[7`:O\ U UX$TLסVu$y1Y ת9^su.=r/}.@UU@J4SUmg Lˋd9M5EKVlן@5y4˱ Sbo)Z x 8c(s[O?U:Ni:c G" ŐmY>D XK)lfZGHRIfIdiC&uǥQrmdd>!!Is6-^Pq, >%O-zNO2zނ25q] U% IHJBdaJdmmըpb9fÃCɜ8*)EjkkS4Yl " BFDQtsVXLO)oVHqVXy)J%7>%M.ßaX^!A1 c&͍Xlt]"!Rpc;kkM\cjL)YHQHbB/3m>ќ0ΨZk42YR \ #!Y!)e1l\S[*y#+ $68X~-) w2SөVdeL.$,m Oq]1i4e?eXNDf>i<3?K~UL?(OX|\`2/'_UHYlFޠ]??9aptHGZ\^^'IOQT4NQ$E'Ee 2bfY$eHIFfY$Ik fZa," FA1?Bt…xx|iiJV0$J T!/uNԪ Q1ѤnPHS^L$fDaF'G@W5 c(q]1eFT"[`u7grV]QW >{o/I"v,d$ J4osO?g8'Cz5wD!.d1K/)Mˆ"[֝kXvdE 6 TMCQ5S+%I ˂0(~pBfxI,z91zkT*"4VY1ϐ )") ͐iڈBa|9"I GsY,L'StC[dxp-ĀgUWk[FGE,˔9eũ3_H5rVc2RmT|"w߸ǽ= aSkZ(Ĩ)3RF Pql}!W_/޺!5:E1M04 r?"gBM NV,MS\oЬ!W)0q:GGC拈85ȋZ֑c %CLK"a1˙LCl,4UjInR.nw;f6#9" <~Ճ,淮C, brQ reTM>{{{AS!+=d9¹-ӄxFX䨆jʚ]'=uRc0s,SݕKqC-jյOm;>l%q&aBWpmT nqjQ29MJŐsDDxH%5+aBަ?6m E$j.1>$Y#KCRDL)Re$3Wُ`i2Uϫ>_:ǯ88Vi;âDUZ}dJ !$TtEv IHADQe6ڴeoEymƣ)߸ukT:<$|(%\ehjIgEF`F`A[k[.?U-<)xqKQG×}߿[K/@9՚,K膵쟐tomxW.^m{6y1ШVyHBF)uٔ(?2Clm<^{Hʈ(ORIV[)2,ǵ+\zYO?%^͢| T1(+oՕ>m)1_˼()牢(*F,I8>:! $׵ɓyL,/; vw4no=d4\ctuS6n󸦁t/׮iP49"Bj 2?.xw|Ar?RoǏ"FO&L#Wy}Q  Wix!Rl8Tu4`4YFkB%$yBKHhJlY5!0 Ȳ* \<׾.X%m՛484m.i~ٴp|<_bb>Ǵt̊EV iUV5zkP&e0YnȔ?'껤AV/HY'翟pL-5SUIcL!ڋwt]i^%+%iQ[f_4'(a]/$-$՗QiTЬLˌO}n޺l1_$*F EG LKa}1wvv,Zg'yO?ª%:|x@RNш,`6 LYV97C5Yt K xV-ɮ_QPfx2.#/k_}d$dL%$@Ȱ֪l9d<H? sŃߓyO/5O\g޹A+Oid ӹWJȔYF^(*d3>jve7}L6IENDB`pioneers-14.1/client/gtk/data/themes/Iceland/gold.png0000644000175000017500000020532507771100213017444 00000000000000PNG  IHDR3bKGD pHYs  d_tIME'[2 IDATxy}UY{s&I&I0FƌfX@ `! !6TRT%eRNReW9 IH&2̒, 0{7u{>i^o { >{~ެ#~Ww4)v5nܸ 6\_0 E^_/W@㪍 t g} fj(qb^D&VBG^˞>jq;'TMU&(Fʉ2 *V+"PrfV,L|?狟 iq5x\1~w΋2VTQmj@J35P%QJa\if&_<5߱}|UC/~jhhsC0*M9gDT030+$jLsen UL^" ⱋgoVv Ì2&`_1̄3)' j3rJ,HJ)SjCTiM!g A>ٯe{%+=t26tx˭8d ! pC.YmfRS'5XƑ$yښ@ZJ. "_?/>7aWTB~-af`&()#UR5RJ3"UjH癹VV HAJ9%Li(r7G!GZ+a)gR@Д $^uH0;jc _/E$R$ 3{B)%"hHQ):aNWVkL JvFMɒ[ĐzHXJ ɒh*O(|xLJQ\1ƧDs p0$a C(d1H"j9sr20#"iif^ÿ '*GCf y 15u~oϞkjFT79Zpx$w0KH- 3 $ea$3ƒ8;]1 0͕慻$%LRr7g4U % Sm wAUcIN&#pGA0\rB0A"ZqF*%a M '#u34)"r:$(BD6aȉ)U6$#ʗyG)Q7O3cN9 6f/W133 TI fkʐڼ.an=*{$4\9dDS3H]d;(M ģlb`?򯾄y|ʮc/>{Q,5{}_ZZx*ٽ/\<"QN 89cQ̀":E0(J^I)qq1inHj f˳,*ⲒdƐ D2Zim |bOW=\P6(~}|U -?'ewwZIE+;xTqMIUCdz Đ\Q["CNܼqjF j3z4M6FKFrT^/ fB5-=JFe\׬V+_×= ^uP4z}pg{|@0x bR8 K-y 9x7%QYMR()3f͌ !묆, A$jc':Pr$ $!%ch980 d*Z=R||7>S!~ů}?O'U{-9eg$i4XAvGTmrvIY+8 S'B X5=j Ashk n^0OeE(i@:󞶟h $Vcan3w23J&f&ʆ̳|@ ox^8z_=EXpN nFBPS,x^@`WkdɁm8uPKZH9'xcj Ӫ!;U[JB^ESGyd(%MDi\5괥'4ma`5]Y{}J K@@o[>r6>~0(| O}%_ހ(:;y4Ź0=J#wLgoT%QM8D%H~*{\o검q`q'un@ku@Bf_"~/^,^Q;Q~k=2ݍ?xvΉ }\=$W6K:/ pPA[s"J(q~ IūހZ)ƐŅe$ZӞ֐''gV9vwɽ;+f֚t 4B"_ >oڛ8rx*$?O_y8 |F +XE^@[ѡ LlX|7Z%1_"ҫ%)@vJjGHr!%#'OjmH$jӵeHJ& 7b3ڌШWHN4k5`(,Ƹq8Z}c7f3P#e(קd"4mw~o;rezMoχtҌ+R^AHG!G h-Km^h?k3Knh $QHrj I8 jj),4R׮D6sC2\'r)>F+s m yw Dgݎ,ʐ=: pB3T)0CJnmQac>{Aq1,ZB#4 iZV fW6Bw}`8=JL pj] |IʳV7Hl`"1I$zJ"FDe8pzr8'.:1M.~&9 w;v-<17e{2 VY 2w<:UՔT^jgDdQVeٷuRe=BFi%OJ8Ȃ`X0-"t;*t<`=:bBe7VO)ӥ>;=tV̦ViY^ZwLF1+ 2ܢ7CsjoBVeM~yi2d'e;b=XaW#ņvvI6׻g枦 0 /)+QŕOWJ; W;F8JH*4{GA7Y2L/n ь*`2 WsP~r]s2#? |3^n<=iD53ZO3ܢN "Z3L nDFפisc#V)"dSfpkU!x 1FՊam$ow\lϻSA@tR2%xQ* hQk]Ra$_ӟv7(^!mˏ!m}Xi ^HvFRD㏈Lb5I 0µSqkϘnϵk8=Y{PU\b.7; x葇xd{%x,l.cQuPSmH% Ȭn Q:XExkg6;y( ,(NV3L~?qyQ8ZP ޣ*%'$M=ɥ+ϽOAtLk9E/Y7o_Z}FTߺ"~7flj&Gw0i2Cl:#/dr )F7o^x:< srƒ>ݻ{bB 1obZY+6j`ڰVQkܔT^bS9fPEy/EUV}FP2m*CF䬌〩{HѝdN26(Μ_v6W)TZrbg*hfuI6g3~7pYQW>5c?*wg,czuY ?`zHGGz/:g-'"H1)dԌ5>x׮#_;n塇ڵS/.i͸w~OfEC%ɸb?O.65ZF3yf4Xc`)3S4s95P#U_HQ;$T{0*s0goJw%y_f4W$YZcHo;sssXߓ#t(sNBe{(aH7 ╯/e3\4cx"li!b>ek~O{ޔRVL͎AxEWh;HRȣ7դ2*%%yba.x"ʐkeݓ"O{1lR4p-rS7M2PNKKhYy߻ǣEt3|! lww^}SJQEBL\J>Kp04B4D^Rp)آ59WkH-o lu1W9f^a!~Br_` ;O 㓠e#@ r9$ (9 B2H_-^#gW'QW JN8fEcWaQDĻbj ''kɧSlwvgݰ gWs:?4Ia1CQbwє(#* 'r˵kxp)d ٓT?RJHIbJ`l4ܨxFlMDrH6ԲޕmG8G㔔$$>xQD5+ђ4wlsIz{yy{E4cMH{ $gXjأ(.*w Io{ꛨ'D4`=^)V ^28f\=焨Pa^#8})28ÒRf#jڵV3eG_BP↴z~e^fe;;d.VscM)H Ժw^@G8RLgDZ}2 3xeo=߶l/9]YZu CJfK Z1 #ykNV!yq,֌ #)g'){Xl@: CYqW+TIB\> ܻ{s=K:z">Ü][QRɔaE**FFxE ݶ;DfK2,3@]5ve2E4{W]3< oORzA$N! isbz_g{55 lE`z7oSo/03n>Z+󤌣cj͛7Z'YTG/0q%-ifw]OqH"[m"YdvՈLZӸVT Z2c\eAj<]j a jX[U5=?M0b'?/z Nص3~])8qIpv$8=µL.faTrabXg%j+#nwSuo5pܾ֓}/wkơp=w%vGZȣol`hF5E Oӧ͖y9l>D`QJbRU8wfw<3M{QuLQ V7#3iq!Af_l9$Az"h$qC$H؜cCKa=)j)d&uk 3]ltz1 w%묣otQjP݆OцtNO'[?|b$P;_dql\:!T0b=:$;45%Qp:K#.|8KQxa" #O~{_*S 3^<ţRM}YXWkqݖvǼnolr-r.#kcsA9;9ascsej;wrq~4R'9;ٝR. 8ĽKnݾ|E!ؒ/@w<vO|vcz˛wNk`uOjeF~L 7P#lbbpj4"F~YM$PZc"RtDS;~X+rܿ7}j ?SSDFGE#(3:?Ý Q1qR{JHx&KC߱#- &%_?|ͧ(Q/y|W9~I9Q犉+MmLvgD4l[%g(Lr7:{u(<"7l) .l `yClرbzW9Tۗg|+^>yo?9&k7փWt<~󛠝GVRLC^$r6Dߛ6ꉇU}s$cc12)4gQo9x;<80Ԧ.>f1S<1H´=Ō rK.Kk |*Tê&ToĈ枂P Z05.F{#FynrjYxc)/LC7/Xm~ [e'2$`ch. \Qз. fK̯/y|K^Ku^m|gpyȔe$1u'.6;w!'gNϵ.7Tvvc}>1/CgSBHQK;$O;QA9o.\B+2usgc bYO_]uZ6<60*_KӱMDa쾇.}'rvЗ/a0##H=f-%Ӏj nQlf/o ϓ9ꇶeׇ0ٱHsn:hK z)d9LFM6Zxvޠx\baá-I" XtR 4,)z%XsEpsBsN@^u꒷J:֗mT-z=BDRhhuHAJRGq67Itrj&#-r15R>Ago;E F *!@3["x!i ;M#iS!H F.)j߯I\?#cVf S`Q,Y(&%,RXװ.v:tY}ńat}9cc{aj-a Gs TߦYS) b"vYZluȧe*=s#׶ lთ-stV#Zpz ĒJok{xx{yOZ}r@ɢ)Gpּ.b)1yZ4#.Pø,\ i"E D';X?|za8'%cQ yxd*A׎$ ‚ѡ3GK_^j))0TՊX&2%e/bᎻ5ƅFi8u.6x6J2W2Gᆛn .#0 q9`&hNɣID>8Lq<8(nZ$]+AWg.R | .]m#es)6)3$7f/Cl~:tdRP']4@wԩ~M.f*)DŽ C%1{# OoG ˠV>Bbw҄ZJlym/| D]V@w8ثt9N;OӬ"q|J_t;ڪGɷ=U yII;W"8d^H[Ћ& DH]6P%7MԥA $q@UHCqGt=`b?!K1Dw橡Ť"Ͷy0&e`pC$ecI1{K/֖?Dc\ @Ab :*q/xbQ;{9]w%vLYիI:pM߿jx>䃁Hu52Кw%ɤԀFAiXt 9gDq?n\-ccU䡫T5/-̝ȏSO0#D@=?*RHZ'*z: ."D>~}b/{:Zz8:v548tY eOFzQ_l7u־CP/Ar\oCϯ-&hx弅EGy>la@qzJđ*&b%zwȵ<P:iJgUz35r$^ wڶ`U:>IOr>ܰ>ɐET͎οHJhpVK=ERY1gi"zV2G0f I-$tࠃSw`.Rrô:XKGn,8bT\ܾ )vWqmWޫ^Eb23sc upg^:LBi+kY҈7wT$ou1P:`m 념L=RѪoO oU2fD}Zk,rKPͰCTJrzZv(wvJMB;[R<ůYgY>fXrvM%ul [1,FEPRX jd 8{.RWqB >oz@mᨎ6"A(}P,75=zCp'{% k+#01,=^u~1i)]'U{xD/嵕D\.FڕYrP˽ O̖jK.^즀> lyHCdN!Rh{L \0ӷ01'.z p}xRT*2꘧Fv 6~' {cN~[kq}4dځ'$m{{ -QĹEgBd!zoLi<͐#pǒS$$j T TA[?Dݯy9tن-T,LP\2vTc gТkaW@xWQrK^/#1Ɂ<G+}Is_tي;^}("JVB^t*]R_8 f,@[ 7<9E;I 3MSlG; À>DjXx[cg0kŋug,Ê R^ZlĚ0-KiC%9y)+ϥ9) ;L'K@1F/U GdOG)WC}КFáW|6kF裧7)8Snځe`7el=R)y[@{:y3zO جR.scJCnr~qv%8&\@ځMѓNP˦+}]T PC_䋿VzX3uQ 棄r\n )|_┷FgA%>آzp~Z/)E?h /nA^}FWSh%^Ow!A w"#>k`B;V%qzv)< 6\9.xǹ8v;^ j 303-X_=_Թ IDAT"?DRg&v/RZ"-"0V󊽵\#ȓU]E~!G-.//v u!>36eO\t>p dM lUU`ְ:Q;,D^*)ZL.b'O>%yfc qcmKrw%{rv ,ȗ7) &ޏݳs]ܧ^NァlEčw:Ra=j.%%C~Ozٚ7qzNBI7G֙'Z\27#$IOn>2ϕ'co^9=l:!8~$WT.n7OjK^ҥ#w-Q%K4[$݃.yt#p \K%WOFBʔ@u)_1113`@ݝ))$E9Zo$*K+=}:񂄛R 1Gmow2օ)beK+)gEd ^^J̺\Y_ɷ ۲Mhgbyzv|Rm$'w1Znr?׌[`28{+ItCm)e;jEkytRJ}>ŦϦK\\cלum*|1cݎ2VdBo Z-Yj5^nogFR:VOrwwt>r:6ʥ~ ]_zxPmP G3.Դ`[ F3Fi\'(9k ׼rcVB8]3k'uFn9FL r*Rw X~]jE/M QfM"TCZ57[Lǀd)xwYS')E.8ݖ $jo)ryH-uY+iP7gzUɈ#~9@ۍ6^5 :+GclW0UVRf 1F|k&tmrZE%ˋ?"dhmenکjp*D;`oc˯(UKPQջ|ܯL |\/WڶaWNB4t 7-CnO$I6nT@}r8nވC_X`~c6QS` z04)ݭ!Ls3)z3II T띚@bJ^[H39oLA4u,.`s>DXB2WC$uxs[;e[IJ2pFT 8 ׼¤Pj#׊N k&<1j˨\R߿rP"hYx{_`H'0(YJ@8hl逌,}p mᖳhehemmV75yN؆aOVnNńM<>jkF + `F;TRmP[!|f{}g>`#C1^vE,O`?Wt9wRΒ s1nZؖ+G^~^+!XjIB_z[ض"^R:JGNnKۚ(݂8(ERK&.xl.(Ė&rX X'IϘS%B7R_j|6*k PH'(H[5ZЊ`(]^zkt'Jv?A#NNeU}4 11~,B~B)^~zƙx|fug4c8 t󧷄x=޿ӕVԨ9./O|'n۲SƔDtp~82f'jZ)<*{rI"N [Qjq2+Yk5ZZ\7.ak574 Zjc]Wj+*9Y`鼃fXEFT anY9;-Ȉ-ac_]l{#`?ޔ;Oe/[kjطD!6Yևb죓(310Fz|(Qӎ.p;;najqV1u@oR'myG*MZ);fFI~V9Wƴ2'_JږY]/3ZNN0NhH;xvhyrQYX1፥DIdZAc5cJ ,H"FmI-c(o#dxC>!;MmATҵ8_×t+OAQ5?ZE7h/BRStVZnѭH s@F$wx 16QI2:`ި3N/- Z2/b3+=HDYG$_ ?azQ-jhE .F*YEs щxatbۑ*[B\=9|]Js Y%Lȴ*.ںBjfx[U<tcpnTGr|,K *,ҢVEJ2jr7M?1orFb94[ܬa q^;gtRVcX~֑[!ՠ.1n~6mrFrncnYc37gm u%y{@EOE-д.Ms@zGCD31BFD[UidM/Zrܟ:j.=N-7< "3Vӟi,+ΝdbṮ_ Np2R+Ҵ7٧`}P)fiѫ6]ʇXaz陮4b~V+yOnJ&6 uSPG`}4{Ao%Q~W Kwqr.ѿ,V!{/D]ozӰ6PNn!Esz80LU׽,T)\*y/ V-mb{SLb򤥳 Bvd}9gV,cBCI[Սռ{F=odH +U1M_8JjdNkEKae7CW + xgڃ[+Z۽h%SW"Wm}@uTةSt;pV%K-8+3a&tﲋ<"{,y V~xh&x'PtN!U_Š;;F4y= CZ˪uhUZiʗ`@;R%5n!9vmu}_XCWY 5? m=#>s֬:[c5z{uH֢N ^#w~L{fJ7VBzmm pvM+P4+Q\*7Үicz+uWE.Bt>;ɿNZ ^bhw&')MaɠkӺ 1K{oi]7_VE3_.n42N-/2 ^ {xsX+C%ƨ)zQd>Cgf՚!.]2D: >rkp-aydlXg1:5GC*PYzTY7BHdZ\|&/WsHĻA ?[%v([5X\WVtTwrTǐ7񕮆9 h:\hݐG/RJe&u^@$m94loyN\8G)i9v9|Tf`a١~͏+ƩF,mYևX8ۋLaZ|tk(N6uzV1`󻗠9JW1mI0;>H;߲@ߖ]biBZӊFY+& ̐hK!Eu(rz@ &s( NQ1uxm4#w더2ۚ ָ&m=.@uA(bKHwJE.. ,90*-U!&ǺX9Ʌ3lRc %Sj! π(rh$TPָU5b^nhƍ/R7&}JF52Zeֺ}j4uM9Zk)"5*L{hץ1 ZUjI8Vije"EnMץ buB02Doiώ7I~&u*mP$U@5%%äsNeYWLosY /]GYeEl;x7^ry>)mh`aoK)LS/;>7ed 8Q~Xn%uF|#aiuFn#Ί'h [[d%ی3pih aV2zNpN r&llRQmHufA/:.%ĂRF)FBHU^f+={ Yo%GE!2+2s:87AuIi6$F VU KNN=wdP?O8QScyPF/NB1x)y9g9C^Ī]L_k~Au`ґ7|('_]nla)/Ǜ OT/ ir!V'6J%S`!zLq[ऍʥBnX5 )RFܶUf"B&u-%4ӳ q<8\qPK`i岀D療ƈO>DWDAoǺCЃh!L!5*hRZ[kMV+mq-|)%Z)x"k[bi%Lڒ *ֶ:pDd'iΫ.j9c>̂{u!#%gUxxa"y&umNGOTy, R S l!7Y&EaA,ʴZ wSrߒf@X]V*u#F_B0O~70{@!9;!b&W 3gxP%חWzIМYr[= l$ h/!SjA:ɛ%%Fm[l uJ i!$<Ϣk0;36VJF9O?Z3Gjxgys-p.,BUh  8 p\Xs,mLKȩPJfYV^_9Ç1{)A6S ȿO\n 9'i0ن}uS#}FWax,*^eQ^t| IDAT8Zyc<<rr%iy޷C0Tė WmQV*խV;Aw,et:pnDbb!sfS<ܟyZSl)dn떔vP+A- qx@Z%@vYHڊ觼K-Ȩ Z_a: zj wC Tu-L%,-N9HWWd9ʗ*OBp)xJhpyrgjfr#G˶%Lm?|#FOd`yx~~f 4 r^w4̗g˅m[4~[y|z>v2[*^5$uΕ-e^^ZxxwBlƺ&ZkI` (53G乖]یz#mM[.qJOty:ywwaޱ,WyEu.*H qwG-ɉe]߈9fj\\o+dr$~Y"UњiKD*| nE%{l i/SwPy9zzij|vwۖY(iĻdmǚ- 8syQJݻw?Ӻ?֕t>}=ge>k T$#iv0U :hf4D8]!s^.jSk yj7j)!zE;i4EupA*͖$ u3_+[.Z|ҎGg I) mWj;A:`p#H ֻw1p[W^__9#p$e"r`#lVR)e70]$iOO|~|>r0s:yY !R QJxNGwO~#$0 _O'4xrT]++,}wM_:!Cvn;jFbt:0Ey`IKe%'eJ`R7bTvSjɭ׹e%PR| s`8*g)ꛞ EV*yS&C8=6C㜰Fo,j ah%MRuX7aJdVF^qB$tPMAyP+,Nҹ.,mWqdFx71};5\/Wۅ⼒7Sv ,ˆsz%~+˕>r, *ht1`8L L!J+0,lծVw<&z}=/쇮]OZ8LLgdE)mIDti 1\^hRr=U) u8{g]D4PcU()CU6Ub"׼WWExCEڇ& R5jڢ2tH8GҨߋ݇wg VI:wN}ZIZ:$j̊ʶqUHvXL9#Hǰ1DzB+ǧgMt(p<uQZRXʶn,˅Z ? z-%eN|xw^Y7!lSEE|iDP-gy\Wx*5eV }ZcSS&yqfA0J?Nz(sƇ|ǦѲ|y_E7UZmDMRO)>W9HMj \8g$c*,)鈱np)0@0*Uo74JlXCNB cpaRM cG#,^Ǚ+vh{3^oXkm>+묥; ;#UTöބj&r3hrtDꆔ:gζRwh"Ax~y%-7}|DiO/ y~~gw&4yˍ;Zl[$R}I[Onr#z} @aÁ9 ){6UBpXֳD"xNx}~ (LܿRħƶn.dk,n1³w]Ip31b 9rmIXH^/83Y>~=ĺޠ4p2Dݝ8dYΠV |8Xnxnbi 4Bߠb?8ܠ L'Lc wǙR$W6m9O#B$ќɩ0U |~PrPrk>ҊTBe>4ҺU5\ |?Ce[M}-) P!mtk4-g*ya@{F#gQ=U A"0Ձ㏬c$b t$BLH;,\6jN*^Z {b[bfx>?S<~3)IĻmQva 9:?œLuDəRVvJxcbŏ~Ct9μrXH ׻@}8;tza[7]"%sp|LQFxwsJܖ\ ;yh.ۆ A`\kxw5Ok^HG ֒Ӷ14ש,BMVr? K%g,-vdh$Uw05'3h H~NyuⰔ&"=4>NF\F:_糬uIk{$^IHoîiz;\R=18;l[t",L8ȥnX F*F*ߛ"o;uaK|dsX1\ LJI$AdRq~߬4n.% ^|O///nkaMN'ƃԉzTYhɡkeY%A/?"E.p`͕u`#[#@55IQ4# T!>7t{iG՗IkӕkQ9 hKF!xBi!L~YNJ4Y+°NjU[)a,}4QC7<˂u+^Ob͕)ΌPuYq:Ua'xKmh0MvL7䝇ZprKN5r8\eFeP-"#r{uAcbtkYi.p:Iݺ<īÏMVV6T,i׵nukua|znbJn]|2vYyoum2#k+3XމSPxF3BUR ~%A,jnԲԴ B5ЉH4ǦJI SB-&M KYe*U!Zy4=:uYy|~eel[f_CjH=$Z&(EﺤIɝgBMmR$2}~V6"x9ޝyl<-Lm V\r[1nt$9LH__~GҲnD[4r:Qjvr[\Dۏp'j:9Lp\n+h%by-BBt2<e%3e 6$,A^Pq -IDrۤcpN =Cn)]C\h!Be$ˈj]u 1ѨYS#16z+Z'\/߿p:#w+B–~gA6W `MyzY.[IfQ %`Ek77op<z]$6\*p*M# FLO%˗YR'ĉҠi 9s ӉzÂxp)u]wwueM/ f\.떹+9q<B45p>/\$'8|P5^^m]&Q|"Igr.0te,b0ϑAs^îx;o0t8hWwZ6r:} @r>D5x/m{tkv NyVQHӛ*7bc<W/k$mK~nㄎ\3=xXm} ,q</OQJ貈 O)m1Vk-ݻ{\_ -m&q9 f=tnJ*E"9k~w?/E-I6Y 6zkޘrI^Ir3z0ߘ^5BRdq|<5Dn] Rfii 1f֫p|š* ΖmF3(o^^^hFҡ7Z,nyjC9TČ!3% ibZj5eA:eX͙a8NC;w2VdnvP;kwpk+c*F4tU7#bGV]޹6y>_r(Jk&a[bo8!.+?_149kt'Eے0ar:L;?~_~z] V+Bw?1sIpe☔ ۶Zf̒PwV&k?9߁5. Ũ8*;N K 8h0\IeYnyMFVeJHTJU0@*rB#0ABb!1g?TBPdVvaf=nV[zB.yxvk}>8g߆4<:14iZnc80Yc28?4aClr'TU4^ˤ3ؚMף댆n1 YSؖq>ovcDz0M+51>NAT88b'MRyx0Nuf×_t>ʦ8.:qI$+ OYTtK#'_V((wn6QZ3)9dvq:P9hEn$ ʉv["d@ IDATD/s5]nv+{.ibZLZ]u(SsU1"4׭bh;qT5)J-]cDrJ4ξ-=Dɩ躬FC,RpqE1*KS ^p娮{0@YC'Η ά 1`R]~OZRk]U,\Ę*h/Q)~cXs.bWy؎{n7?C!z \m%K@[# 4L9n;_gڦ㲮u\ͣǎfUN1i[19-c X R*JHXmk#ξ㫯7,Dc5w 2KoL̓ h#(q4"tN9ItBV% Z+AJ'Ȫ1(-z|,Bcnrk٩=Ћ o˅1V 33~Y?2M1vuħB5t]KNGvc %gh62>:7u}y5TX{HPzm^G%eJGg^=;ɟSu!o\x}|wgnwBV1/3FlwfՉGbU`m Nz64mKAr,kv >C廎LkX'jEvYĊ+GVWbߵRAObFQo 86-3#1dOG~cⰿCwnI1gJU]|Z(1w, ]B1qXCumiN4Ey}+M4/G_Xf/i Vr6-|,=9Fռӆw̫o" EۡǺ oIp>iZf]uXGᶢ@ex}9Rvq %V(9-Pum5,̷?,s m77n3Jø2 A[$ f_fNGbsn4i?{rJH674QNAJaY*VʂRX@+7r!Cm%D^#3OI!sMRU^twHnF,ѶB\Jʲ iw86];?b/lZK^ZOR- Lom,rZXkƑa34]ҏ#3.3yz}Ro8aC7#qb==Gƍ")YGڮڪj!bZ7?V<]fe`ۖ9Qޤ 2\*EICPNLsro~dkkswOʉ5xuqggJ̴m?a,aJļBjD@FNHG ڑ LDɞw}pz~@9]&<Z񏧂uN6uR|*R2"lH܀L4qo-C?ps8p&ul oR]I7nUj*n,lS<"F[)j=k!i^khemiۛ=9>iZ44XkX}ŭ-ӼrBjYJeegq4$[~JK$@g6N^ji߂4rmh4ԔͰ.~Bǔ ]-T7T\eL~ycؾݻ;}5piLdo~rFYK5K0f\|伮6#_nOk,@R7f)7䏘.FP(]dh{G3|~|AN8ג)MCc7ӋEkU֢^ U%kS)!PDBd&_3b΄$ym/?buu [Hٌ-mTCDf~T("7_14q_SaQжÁ#r 'I|L )DMO9]lv3;%{Z'<](*>kh˼fNs@e,t~oX}d{A2;rc]'> m4!(&A)J/aMu"ot)k*7˅yba/KS`NXeZƁy^>trz%ɯOg~'g- ݎ(*-hzjc@{S8*"QK^p٪$sZDՍb78ئep2%ic8OضGEXWh[ݏ,mqL_YJeJT,7T/$'MKL"PFb///b ΐsճln[C`RT?+'u-qFFAR5NR&0i^)FP4Za:uemэf Ue."˅2k12d4d6r[i#SQBRNO34N&N+»㫬HRhږeIə=>SzP8_fWb` me2 ]/o~}<_ftN=_}C磻E40p>"pm7Dp-=%SibH5R}@ U|zBBJH1ae78_.MINe%lP"V^n&g6mJ$c,~Z͎/c #?p>.S͒zw\5TɊUA\FҘm[rY%ѥJ)* X::M Ip);u- C4Bs\Cme&ӂ34 ]w ͈/f(1 Rz( 벊t!͎M߰;-mmJ3Oye]y~~m敧#y9dT^ *,e!'aіzZgk31eF#9k Fm~ӳ\IT9-kbos48Z]15LT|!JnYqEC,Vab.ΤXK mxѧ$#C_}r+Jk)|?V/_F Lu Z.N)#/4}ܼF݉Q%k^J2R)QW[Nҽ_Z(26}pۓSfWEjyQY suesKa 1$65A1%13v[vm }3Sc|<13dΗ24m'j_k1cIac5ڈw]VZW4-ݑ+}p]2aO,t%??z೫Vt+a$ļxMCXV XօmM=i=,rYUxyf| 4m[&5H]'i@5'ۛ-wy|zfcX LRvmGcn;2 m5Tp^Df9sj\]/-fŞj+tAװtU@\ܒdQTrt@ur̂_7SRÚma(ĆH- ~4b^l۲9r|= \Ӱ,}?nյ}_ճqhyfJ@08yX+ffJSc 3ӹF+?jwWFðߚl9c_QP$Iv1q9$ { mːRZRf lƎqg#Ғ ^:$g{W%EW7VuYbk|6M4l;k`qC+ADI Ȃҗi_/׵E`g)}$B9kۚu%r.9C`brY,19 hMϪyimn3S(@ *JkΗ-nϲze5$iAZvlv{12MlƁqmG̅ǧ'\ۈUKŲbFǏ!Rj49ڷo:׽L8 (i\ò,4MM@BV}Z?1)4(Sk;~:Q5#_}xW5E2[} N>8drlƱc;!xOmB W4vmPm%_\DV(1qVEF߱Zv-77 PXJB베l%&}`'y!~ij<Ͳ)b7U&n bet|=8(x0&VrL*MT72=MYyXE"QD)\(%ecʬ!r}ȖzerH $ GI c :RʼgYղe4qz|E{)!ĀBz:\ ,^7hm+mID,ar9|;~o8-43-22(0( ?Yw ˙54.V//s]| Zw|R!?Q5[@-ui 3k =~dN癦xy~GZ=O<Iҝe764F|viG)yRiX)1̀ֆy3mX=~z6vOQŋ#@5dߤa(EH|QkBɓcvd3/i̗IKNFʈ-Vkˑnl6[i|>T f1е}iVCL~7lo!{UXsNXaջ!OA1W3 N XkoE~cL"8${z9+olw##UQlZuD\$`3X WSZGiC `[ bJ0琫& 6ƌɒ_ܥ]*拉ћ)%70t(hO~+F`_ uxAƆHը,仾kpg:_M(0u9W-)WI%}9P'am!VTص8' 8lƁ~CJ4kˉW0c{ݗ_s|= k50-ۡe?o-9h-4USvRbYy^|ݷXcx=ɞĨ8bB1IrZ RnHm E&;2K*i,(ֵ-F; mG7lv[͆eY%Yv)p zXp]+$:Ynhiu&u)EpYJ͆n`Z.Gʇ$3kYXd/WK7X.I/uj 4d;vmmJ)4✄+HOZ{Y\!Ӛf(XW^ȘN}u=ֵ>bLdC'9rYac긫5-MzQ74˩.:|mD,Q<1xZ+rSh)1Hjz[lr{|A)8%^\+g1J,7:G P  vNBk;Q?abem*,YXˠGBg6mKPĩg9|8Fr9)!bǖ Zz<̳xm 1F˅2/t|e53L W :IW=nF&tNQx^)@ T#~S[kjUg)eкf)(m1hbRYZrG^)XC.XHf Z>R?uiUtA ?W5}+f1[cBj)q:1,w,$+c+G<FIcdRо5ξ1ZKl6[2e0mO> o^n-J) Lp aU>@5u V'l?mK$y[-3i¹aVϯE9ש슊Ēim!m4VS'm]u]0FJLǥ6ϥ3mH&_D_aؐbEY:C:޿{еİzuPijTXl"hCQX|`QT(P-/r+(((\ԥrdrˈG΢+rWzL_U7Xey9WYɶF5U)"W)t|`kHa+}A5Rʸe]tȸ<6ecdڮa]jmDDt *VB̽1vKQ :x>$tb$G=Ųy<$r!O\!eenj}y~a]C.9TZh;w|AQxyPTȶk9췴]'i"Wճn 1sf+W_d$܏%ɨ19M459Vw}N'.#)ZD뺒2S((kٌ*(؎jGyd2[XU(vPOIa)-/Uߖef߶B+L ?e9;].<>bU`<<BVU@(4Fz~3VKtNg"WO.2 0rbیY)ZFdNKESI#1rJY է <>$JіmϿï+v]?~nw`EZ1-3xzzfۢ)CO8>ODя=m7ǧDk,M 1.yD*2]SJSr`[Kھ2$9ms͜P݀. 9tN)]u9NYl%Elw7]ȭme.*2'0~Y'A2 N)e|Y1 c|yk5^)/~ŭy:cI1;j;F[#+I]QkIVrZ'\ce|:M x~U2noږS L+j.NѴiBj6"HoH~+qZ&@1ʩҮ%ĺ QBAr=H յ1mx2Zw7Yameϴ}O6w[aCvʊB4v[B2Ƣ4W5<<>ߎβz+NTB(ozXSrS(*:m,hS?3k*\ZyP5y\ve9{r{ th6͖+aAib })ue:]~M(C'e=ѸlPJ3M WP'Χ#F+PP<wK׵P`^ ~O*?>3?z$Bu)HwǗgqob'Yv:9dPzr:qy~r:Sf ӼaחNW Ig (w!p$0:H EvJz~Q Jt;0T2zZnonkD/Wsz}D٦Au|x_~{ͿGrePq~32].gEl\4]Z<|^t3p ,0X5b5q99>C׷{_y}?Vm66puJ1Jxp<$7"~y|o,a>}~^H+\k9ld)K=TO (J.+nG?=H7ZWlbS zU%U9'Fx m;^`ӑ4_ IU\  bTiX!@.S(^ͯ 7q" (ڞu+zNP %hV[K TE&]>HMu+OFZf[;v05p.oJ֍C?~3螺@ƦqƑwkL|o_Ȳ\廟}k/8k0NP-󲒕6'אlOWw\)_g5Ka?ͷ0O3ϯ4!ɉBM]4xD܂o83//<>JH rqq)fEo[NcH.mXfyfaɈt:&**Y&jx0dz"11Wm+ ՔPV(k=ur>uxKGD;i,_.l6B,s4Ni5| Ft3b\&G2 r}%1Vq*rS\[<41eƉ"dttdȮG%Xiaҳ+D,в?찮!fa!+M<;)EQ a6Q<^eYL2?*bۑfh2NA҇q )_}߰9moPgγga7e1k:Y)]7oێqGOq2i AQ fyb;c{^_\y"7o+%@0HR!P:*СSYג4sYi.SBesӡ(eTć7-m߽A.|iú.5x%S'^^τ(ڲȲxΗ˴bc&R&գUYuXVU) Ԣq)zg -DP(3kxm'&|,J(Zsn ,vy^Um1YxV5 4&fӅ> !z]?~fqM|?#/gΗG}5/y&bX qdp#qΙN9Պˇ@VϓyU`m|qGf+\_^qqy\༓Ţ Squs-(Ai1dy҆Lq`ef%ҕq-!Ɋ( &4-*5"l,;H׋":Hݽ.Iz XbXP1:-IV`ю*;0FߧE9RiC IsHmKQAfV[IKR"U"gJ!z3J( <' q\Ply4=K,6]PUs#SǎiUg kpwqO 6/湿"E5R2''lw $Lvu 06&w;st*f6IPJٮѹY +j%o{ Pf'xTՄ,͸[L*c/IVw RE #kquggr)0N崨[V5wwkLv˪F3=}'ơzZw=~ȭ->>JVI"%?\,_ǻ6fiiFjYPxG5]@넶xtU>x4j(2-JE:0bqڶa{УUIG[tK%DDei-u'KtE"34C 6m;aXMۊE8wC[ ?wrHLRtMX1cLan7Ri @uTUǏ݁Vr^ IDAT5.b#*˒X(ݽ~0/#tkKD+8Α HuB0t&B fFz/d:LmI22Mx! )M+VCLBn"n-]oYowsNwkأf MwE!MӲklRlz72:6tķ!zld66u $N'^7Q_dc*feRc(s%B@ƒ$h^7(:TZb0]GB q(:ۮC/lx4iPNbG0 NA1.R8PocP4mKb <͘itNr#L+O{dPcj-bC]:/-ȍc X$B̲|I5(>v1v :%I^o(Mlnz$H+%8k-T=>LfS%Iv58(-maK1z̐$)ZZާ5Y"nB`:0҃Rh(L˒Z?c6ʠG82uuLc *LbkAtb1(yLbʩ^b[SQp7}Q7=X@bra}:;>BG|Dl*f`4MO93HSIܬf[#,8>:!)+T$i N4!at%oAET%,IIR= ?t]g%!:)e|? [owr0iTNNY,L geŸͲiljn%]-$]іvKwEhJ&(7`k%U <8'u y9${XCY䌱nyK5g Ep0s)ޏ+kEj3uL%,>vBPl[ڶ;P̻ ^4r7X 2'I4}Q.1&(!ٷt d ߣ'5x~_S˿!KSq`&4K/+Mn'ݶp&ɲ}>_f(&}7ȇ%~hژ{kbi-`\b@|J:pJ2 D`h (DZ|M5!~`{-V&ENYd$1aȍ#GGK&ѧPF`/? .ȩ&3mfcZ5ewSU%m#X<:夢zf/kWHRm[1ރm1iȋ7;z$]CZ|@GzQI6qh54nE9j%u";ЉxFx{ZcɇdBOgeiZN&S'͚fBiG$iJVNnJZK,M0eX64zg9i*,cӂnO;QhTEMjj+@L4sZClBf5&xc7fҜ<öm#ԈFY$yVaṦ: Iߣ\bDP(+Ġ^$h#0Q&1(e.dBt@M(II8,HoۣG|*k)oW\Ѻe, & ;rE4g3i={kZNJiqxFi!񦢍V1⇸/8[@=;(3QȦpq0nj&c6ĕˊ<ϐFƁr!8C6a%x?Zp>Ef웆}3bMtfS"a.z._SbRq4A"abuzlQ޳nYVdeoEY}Oam0ҁPAZkȪ<,Gc&s@?'Aj6II+ ?Zng1D7jvHfL\伣$ZDHo!!O-w7ȭ!MRM IBMGЊ *<}> Պ7o.;! ˈ^¦2'$VC{燀D(D]7DJF|RBC8I3 لq X|01gNVF9(˜dP׬{non*lֱܕXb6:Q"ooږ=aēD"\mG `ePA|>a 1>'X@w{3G\+AkB]`vt x'"*3felREʚfm膁Y.L'J+1Ϗ8'vhxu~!R#rtF^@mhk a!*25Hi5m &+MǪY*KR,8'b|6'+'_ߑe4C>2Xg!?szvML)a#>Sߗ3!".J|!Qct Q$exKCgpZB# EjIr=ۓQzv(3Lp.J˵?; "O?͝Ƞ5{+l0NL"zM3zm:7FІ*"FO?Wg_DT즎xH|c`I [Nl"?6%r=K Hl.ʾ&l5}' @Y?`z% viX,}݆$/[QYv%,v/d# 7WWzuI;9K{=PJ $TpfsI $]넛 w5#) pho[6,K>{|Sor)ϟ=޷\\kPK9mt9{'4^c0 }㍜>Kw.'|<=Z52JsZ Vrޭw(%tJsyfRdYd2䍵ctہ Fq&#R84ey e_^V\nʀ1bxCΨ(>k5 T@Htc{dL͖(0YBh#xiEEd(-ak<, F7l,Jخ7.nˋ ,Wu-0(zEFKfˬhNoFV<%&X%ԥܾk;Z;n$dغ&SNBR`X)Dj|qxtvdT"<}6OPnh1Ie|_PnPqVcϞ=_;Ҳ]wB"2 <#Q#ylh6,3no{IA⒂U#Y^`ۑ]_@3k^SSG;.%)t"l$7"OS׌Lnc ,4 $$#Bd8 #8j$cE3Oҟnڪ8HЯS&7H{ύn٭Y^kݎz=]zM;jJH ɔ 38}j2eoXƠi}qHM]ox;1 C$C8swX .. YQ<9eytB1S%Xf9Uw1}Hx*Z!H$)Ɗ,Kw1m[SiYqy-~tvkO>U9kZ<>oM[oEL'[2<2\m|`>lj$5^IZ{0"\Z,BZ+J06Mߣ6SmL VTZt>qP_X=2Ҭˏx2ϣѶr7&YNI8Ohtjtn%b4mѩ ,IЉeAY>~DU }i5!((,/[#gYjVJx7'`^IMX,9I&-H$ At"/"Q"JأF+NQpqNp#mЏYb^/fww. 9 0HBK$m+o *_]dl5ts%g_×>$K ~+= =jNwI RAonIc y-Vk>|4C7oCS(cvaYm$8l2ab^ZGԾHH~V#cݠMzڮ o52ezc,Pw~ ܖ~$(G MUQ=*Ne ;9w77[U/3=t?lJtO~kPZAiR#ژbH5/Dy%=F)q6r2A2b>#܂1{//q2?!M-3=-$˸(DW!ucMPyEV>=g^1=>%Inws?%o-/_<>goPG c[o3|Lf8Iqy}QPfǧg\߰^ݢɓg\^6  E!{orL)KV}Of,GMwj2o[4Z|߱L?PGxHݴm,kG\]KdIݴXc8V܈ B,x"nX \X~e-V'(UQbudj4uǏ#CRL*`i|aд Tl4R)&ۻcr{uR^7W_*pSwW #q {&#?@=qBfK"Q}5mQѠ0}P:jx䝤kPHD4]=UQ2JY+8BFՇ9v̪Dt"USy=}KQ-h5Vr>3 nl06G(ˊrR@ehssмޢެzZ֫Slz󊦹bkNU~GްoZ..^7?Mw~m;6|G'|ߠmGzu4z_mH0K+ڦ5iMVDZAҴ xwEI?*6L7"-M {<(z_s6(7@5h/~?w1:cMP(M"KOA\*Ѐg,2 PJK\@x!1:HwT mnC׶QI+ "JKԕ a7$E.(/p0m>hSlVw<>93o}ݠxIf#/j#z?zL6yݐد^RLȃ>`KArsy+zGOAe*._K5|^|.X>|1}NYo7&3r)ݝS@|_'Y ww<{)~CY65 VvlV"'hld:PE͞-K,+M'2 ]]/Pz膨"LˌkCaˉY2#Xiԛn+?|C(||_?16 1NX) IBi.?Jy YkM3;+K%F/QTIR'gdeswsG۶ nnne18HӐ$`VJ(0?v= -A+Q&/~3̧起HR'Jy\^~}]SēaϸNO@%:ϞaN n!LAO PԄc c1?ec3Y,1c_l+?{ˋ׾byDWTYFj74u3K6->xO5?:cY] IDATEǤ)Y0H07mڮ#&ږ-bG1-atX{A<'v@q2fcʨ,7yxG.Eqx5Cx}]hb})A4e{ڡc݂PbqX(^]^9=.D4fCb5E^e sVw{֛p\#z L"`މB;pFʵcF)u@F?ynhɳgO~ˣ:- aO=1@h ٧X]~kd ƑT8x@/eBh (9 S.N-Wחmsr|S[}]?~G9}#3s=z*`X[fzniۚw=KY Ģ*<(2-_o=v& EAj奈NьEJ Ч9h$?Eqxڜ?Q C?=574ъqMLst9Y&𲀸, ~w/NAac)q-:P&F# 7P:ǰC m+ ĉSv/ 69-ۛP-NY5I&vv+5 WtmMM-V- |foZ@P4ح7 mn+z9M' bA&KƮY׌nmNэ4uqJl"pȨ6cP??.OdQ_{Yi4 vfw 5~UѳI)Hmr8ʱ=Lh7IV4%;Q]IDehlF A4dy~$uh"K`nj(&)C:z mKZ,qru9/@$HkLr#adJ*=*(=G{L|`lÞb7v(5RW((K*m69C۰٬Y%&e \]]Pu#vwԻMDu*y{ w0\d*/OFaDLd^@գs! w "ʀ0R"n*z\oטOߋᏵ(wEK.8BЁT[('Gǘ r,'B6V"ѣPew nknpς v!fIC8Ju GG ݎOӼ47u2%+|I8,2sH&Mpg8]o2h`Aqp$wI :m,hۚ,Mx9[ c?\zWy{r}}o5[VwLEh=yN׵฻`^!Vcʴ]Oc0VUl[+&3Kp7 u -I1Q'~k_oc{yDzb| BF"gyc&)γ:"q"X*N#⮏d1 !(tOa~"WAP^^ClJII9Z,7 g4p Ig>x~kՋOu9VA^q@tIJR9ŌOP#KtCqcus2oS.$}~A wH͞z}zcR膑ˋ L]-0&?o}@Jk6dT~+Ex(AYۉϖ2DhguO1 Lm9v5j%{/~J4J">#eľS(%0qH+ w]oQ(q)գVgdR?k_?} M-e6=%}hxAX⸸M缺i.XS -H2Fo|S,Np,O&/rG8TihIP[wLQX"kp.bq.O'k y0%NYͦۿoMTOA++sH 1 Z{'pgw )YE xd*QWh$d:',&$Yj:k:TUŃg84:O\Y>$7C7%J G"cZ{}go$i{/*-"@Ei% MT&iRE!lX-ӂW$f?%~o2JƖkY}!M;;#qV/=~u_!::,JؽIb1IDaKVoO}cC|e> =(<˄*;{VKeFIPJubR_xc_3ߢHOaI/Nd2A)MvtZ 9;;b>^Wx/$8::Ə]S Iƫk6 iI[wRFFXmGhd)4;~*;ꦍ& u#x&%Ʉlֆږ,KttM+fDJ"֊(ٮ|#"3{+/'lw]p{}%Ѷ4Q ^im}1J1+#nCԽHn EpCDmK&yG7JB6r^t0H:R%r!2$~!!8)#B_b>bwǮ!S肊$4M)sG8{(0dw=fG'4mǘ]PTy5iO{gcuoO;\[ )[)&LtHL, c0$c^$A~ F` v0`ñL%M(2Mq&SuU{=asiMҷn[7o5gqF$ )E ?|OyX/x,hm$DPոd\lL':tr]1L*JZޥ:QD$ŋ\<x:ewo}-X,mGYzpliWbraQFĦ>G/Kc]h\Q+並#])ʊLu69uۊcp/)9ϿzVID6Ɯ` :ج QjL"Bτ!VVZu^$Z8r(b3 1(]i㣄L*BN `β(}+Lޜlޡ(ڮ D 4qvw* }x2}' -Q}=¤zҌbX7]>(}dv-89%Wa2%D%7Mvv5آDk^u*+Zkmn22:|k_eq,PG ٲŗF9"7=GGҔomC6#dRUd eâsUjEȓѤQ 7%^&CuC{J+4r L qhYzC9zeQ@p=X#Ejݵ=sAF}05m1F?{_ZSoVu ]:(4Ϲ||L9$'-}BΘdE`=xBysDž7%~#[(ᬻ8yuƯ]ʴǙ37J<9qc!}dd:8 b8CQ(k,$y>d $\ s4Y:,fiK[cNnb{ORMbYSUY53Ҵm+@|sQsCAFP M y*](D%ծpF8Z˺U"?{8fiaZxuFJo[r4J{RwF\=]LƜ?*\8u4pBVĔ`Co}zRؚG F11j U5:#<|FzD2~-Y!ɳ3ZB!%y:E;n 88!Kֈ3gQ]7Z<.1ɯkW4" [>Gg?CQٷJ2Ξ,ޓ1x8LQͫ 'bcܬbX:_lF4|Oi:i]N[2ZKO08Ml>g62Or󩌑T%~g^vH#2F2g$U4@ Ke+Jy*EʺL41|! ^HZT *aT3{lLF =g }}W(NEkEZV[k,uRy3 Y!BE)"y=&oȦ>KܙmU+&\^{j굯Ƌ8~?| Y?}g{B⠪gO&4][,kʲ`qtɕ+\zU^|B\Em,:R4(r i?%A#"cL9 ! 1 %Rh3WPc|X&]QRnd'4mJLeUf?0RIBRn2ADYlCd 9xJ ~o{vm\͂TY{q /Sdgwj<*KÅɕC^}Y1e“q;eɒ$m[S(ͲIL$ $U]!>Kō肴^u>rp LJ~%Z>3+lu\ KpAڀT3h,ę!#QX#VN}Wǟ\*\/p5'3j gW.tNq9Y_ƖJG衲"O(!E1u1rrs& ;6x|r&O}8$Jz>x$g hjIs}d<˚"{;[LB&i!eT>m͞wVw_#p÷CL*qB>\Qqʒ_xc/N9 )IG ƠP^6 !{EAfR.,b5" Ela=Ǵ!!R -]ߋf {[i_ʕŨ.[ҧnI3*Q='WTa|c_f{zXyGb8.ekݯ-x~mZ5eU4EaY(1V8xz QAҾV3>sRe1ܨuJaX6inn\!T'1QO3֛}+OS{;,EQ֕s%>m;&}'C*΋Zm+1 (y¥L NQ̏;ν֭bj IDATVA5RYwqtq̯އl`]AR+(c>6t}i=ZUJe9y^9 ,sWѩ<<ۇH8)p=ּҫhg(JQuCUVJ2<躎QQP75˦i;t`O' .Ę)I#vێѨR+|[޹֊a8TQ7;qڰz^z<))ڮcǸ(*AKyB6(J[3xV>gELbMH`9>7ocTƓ)OyA(Ejɜ(y pXb7_9&or(v:/ [2<j{2]\sE1!QB6\9<&yåQ"kP$RC TƹChЙDa_S#Y }erFɳɈ38(麎t,BApmZ1I Ea,FkbI5c2D@%e:P]t?9w֟^ ùfb8k6%Ż5''2yØ(N}Ddky 62]U^[(‹0Iئl9N"%Z@e tL'c@ң<5/$"]2T G1KvDudCUg>m^&%o׹b8k2_>]>S5Ju󝩇{1 0YVs$"Bǎ8k0Fq7= GGL\rȨ,˺f26EH>aTV'#)1JؘI#HmZBigP*2FLFcNN!t}׫;~>5fq(vH}}J)GJ9JV+`MF,W39 TOAA&@;8w bm<p;g;ciꚣc& IMy2U,ꚾDٌ rH (>wWf\,ᬟjh翶S[Χ˳hUV^iJ!AB3Tٶ:vX6-$VQa)QUR 7fLPI3d2HSU#s}GB=()#&>rr~=7޹Y~Nԋ,ӳ4H+ս\g?6縀$z(i;!YC%0c\voC\qq#ĀsYSTZrOuĐrtZN[f )m??(]XR ùb8.?W۔ҙ4Jq oq$ 1C|0l#ڈ5j)MHƷ1Zpgosٳ;Vo;ۛ|MqE]ײ ڤBCҊmd?o okb8*oθ Ik2v5p"RvDJ+-:mr[NaA[Sn N֪k[PD'ʌM`N}^]7woA(~HYL*SqX+\%<# =!Jn o[lOJ6'Qa!/*ONԧ?Г*Iu޵EW#coe ` J٤<%yM1ڦ"0:1tjٸ^8+t R*+ FmӨ;n/ Uޒf󼫋b8뗌oa>ڤp\ W W= "8r W2͍) [skROd"@kN kw=DQ gTCÿ'Oϰ֦02&r;M̊Ik- ;sΝ=*wF@f>x,K̊|g{#5TQ gg/׿uƢJF)ʮ"_640lmd FxJ @QUq>tQ>DZ0mz<ɢ#c;o#`R;3lonpf(h'Rދ~ʉ^LF#Ζ'K3=/MյOۻ{(w?y& d=*YK7!xFl_9:"|:* eugcNmqyp/Q~K{cqZ! ? .5a`ЄЃҸQ*"W?u|7(כּ8?}SĨq&9Įk jXVF9$uMpߝ iun_r ~Ni6vVeA}pWؘ,oQ Qsoz#<xrtQt~'{7ՆѣIENDB`pioneers-14.1/client/gtk/data/themes/Iceland/hill_brick.png0000644000175000017500000014103407771100213020615 00000000000000PNG  IHDRaUbKGD pHYs  d_tIME;>:Q IDATx{жU[u?줅(ThNN-gcԑ2XQ[H-ᴓ}HBHHIH9 @sB88cbNilUjKK >[kqd;{{su_/yhx2{f  |\%_>g;>~gg}=c|_Lv}?t*6j5 0w|>_3}%]x%gb }S,ffȟq/^x` s^0 \|;sz9^< ȵ^, 'z$?i)^5qw7}Rϡyx~2jI#k`Z `&L7;]4\3Gz~ kM& GD ;j{™{ĜQekե2 ;`_ p CAU@$dj_|qy o}Zgy?x=5?"/LZ6Lv.^ @ "gU?Ӎ'|;?𬾞gy4׆ Hic;B`6`wof.v3|=/a oӼ,yz9^IwA*`P+ "S9} հ>WNf0ɯ=/m|:z=U79oW)DEk&M'{5V Yc&X3}c^d dDN9/ nP3,]a4rx"O ;_|:r=> `~}9^8k) ;&ipa IG  k-@UXGboӿ]3ȯp=⡗gDO!!&4m\5A\{X/Tõ0h20gāCFGw7 ׎}-(;MNÞmogqq}C/D$"pS[ DO) ] s!`B&1LjB8ߦ2`t?cY}vFs49) ls|ϟW>og6@^#@;4Ry4Cb;xΎNLML((ƺy/xӾGs9ꡗf >^z :N%)F9C]e[&Ghz=Ca8i 8wp9v];;n(&p5 Ă邙o/;r?czN3k^oX]a q$n @ѣ( m=s`L/lC0M\6L2(Np5'qS k08f ,,gCJC:Ǹo ؏m?w7Տ<[q>SdDtcd;mPi#"b֎󾠺2ڡp:mc@Lq WW'10`؆ b3 vL(x?9ps&XZ~E> L$tk }7=wYOR3<V/"ux<0` :W^&7tfg+YBׂض 61\]p&pkJ#M'QCMie?oy"O٫ v)D bucdB)0GU l5 kwA9#91M]mWxJp] eY> 77`W?L82/<1!=]1VčMShÆa`5f޿YO>@2_֠aklwF1L3ӄP7j0M -F&u›Cg &uOxjz"cAM/XTy’ w 2FǙ)\,7X3"1no`DpqT.^ɭ|"BÎS`,JTJ`HܻZ] 'q8L6M5GL7773`ÃOԍ⃷w|Fxj ܨ`ׁm emV8\wvE J۸T9#H4"g)2fj1tb?Mí ߧDSĉH̙2A`ϸ >ֆ \&8M< |??[։:p T&&#5r66v\z.*ƶa־z>z8o[q$7cS ~7 p^Pt9Dw40i"Ta !<>nHYYs8ំa4bj{TUcI]KT- ;1QDE={F.<+ 4X*M oE&B1 ,?M64 %ixp<0/ iEW> 8;r'l'φQ|p[' PհT_hdX˼ᆶf C1 ty r XZ8mOx 7g1~ k'ߧp> ,sї}*6X=. 2WR7ؑ\v*(zƈlږ6 WS{'(nWbx`L9~&/S=x @6hpSp3{GZDU1'j`#g i 'Otߑk 2ր{] !}^1"=}y0\o'OnN%iԮ;:p%nAXO4֤,}-W). #l}?CWcL@}|ޱt6@ ~nm̟ɏI&b'{٧ xzFwF{ aꌑDA[L%#`%$B0Ox]S=|\ȶv(>2DG(tW즑;p5' 2:+% ,0.m C03ׯ}^>b ]by={h4lz KYb'o "xi$`7<W <ŽLc34XDkacD E-8@v@g .㜏JH2߂"cg1  T3p6۰CwiG9Vv,u.D+G@/1?tAD1Cݪz^@q{n)oθo7ٷ1 (sG>l? w֥i 7 KaD3DE4ji$~~1JA2)2F)=@FNwya|"%'-jMj:mO=u}sq(Duߙ#yYfg@s7xMoMw05JM@氲?_5|ģⳌzp'omЪS]P0a"Z\LꏐG8[j.$Gg$N}πee#K){3DsN3<| n/נ2k"_o"?,OwߋsNO5^ڜp*«aT !I qޥOC:>`+:+4quss1SLERۜsŰb-8J'mِAoD>9b&nܦHaDk['`#k@&dR]מcksj Nt)>;8Dĵ+{D{^_Evx3|:ϭ8Vi ~s.C;d*+^צS dI2GY>%c[lYٽ,uR i-P"#}琩3iEzHwU?, z Bh0C=g4a]j~ >tqBa^oYj? '_}?~m]O+s< s| "L)^2[Aq8wxֿ g޴p˄ԃe F-]0?ր3ǘ[4&딠F 4.nG|@j8 0|\[v5@3h`{iК}p~ 𱌤x-Lh0p/ n2=S!1xA6ztb(rBZpvV!NbH_sE @xƶc:s[ pEk2%`׃Yۘݗ1.'/JeF(uCRc3)q.`1E߳l( %Ȝ})n=**iC^~mp .?wrG9G?11ؗA+Ui)#$ {hYAMݙmH$qD JmyYT^,kL:p<͛!cD&ldNA `kPu xghe &3fbI/mIƠGp}TA-a`fPΰQxeKi1;n(X4?,4R`H=N63?ȏ|ː1Ǜ_ȧ B;!bM8}ڊecT4įt;͐a}<9•$F A-gcA8g(zi>ox69ީGmm+V;d iZ=K1ͼYwajt)-׊Z4# No~Qc_7s|k߭ivuSQ?\$ <ۯ`4uUh$42DCIhdYyGԵ@]%-Ij֜ 9Gcz=A, :}̈mbpx#.,XJM{ʿAiK)JdjS3H@:BÅx :}$ԾPv[75`??_7k_ا ge7a(9a~!Ȧ  NHD9Jo94ִ@<ؗx}v72:NvNInHi_0ۈzkX[LZYgD b^%/:bSZLKq%h!Խ@2{lnJ!Hc$pUB=$ȱ9F"L[<|oV= ["5]x8L?i+4uh!c=~~?H? _҇rC䮲hFXeI> \Dl; O' WozOWG9_zkN6̾Q麨 iakm6PKmfiCh-Eh !Qe*iVI>-GAP#ݑ9cNs`ۦ׆3kt/j*j֏WLtV< eـL&@b*H1C )IG %֪;4%n0x~WI~Yx?+"r@XRP6;#!jtjZqȤ+#ԽV&1mAy]Q:zR|Gݝz,E1&aƺ|0Dv1$5GD>Ր0%Q9ҾY#Cr]Y^|eqB?c7.=: tシٍ>< ᑌɛ IDATQ{ ;bv u@զ4Mj2o~{2=I"#{T+UqjK|ẖ$q%{dx4nt {!!jATfJI@Cf֠KA^ zdK ^5$mSi,]-vf0 1'Z|w/"5zf4OәaNg,o3I֑C-.yREXWW^T5a} ӣ'cbn&ٷujla28}rie/4%ms7ugX  ~dL sd|+4y1πOqx5]r1F&&0nQb"$np {$|^|lީ~ۦYL ,ڢRv"naeQhtH%V)o2WsĢ/a/C$[2q* N$26@慖=hݵ~_S~*OX74tAZVD Ɔ1'DXn9ג{R ,tR-D#JMH3ԙ_]SJfF Px c]{x]{'kjkt[ZDE4Ā{Z.6z1lv-#*sY=P0˂Aҙ03G 'D*@HHH ?xZZa 0=AAǪ04 ,MX;v7N,DeTy"IHy/S%%3/IQNeu^9KCRvsw !Y'k>@fͺy/Xz2LC0r- s>QupQ7Fh.{x|x/v'vr |>cj(0+E135b\=n/Af HdƜ(w\`NWnlX 7Ƌ9jRa.逮Tσ҄LmL@t&HnᲺpԽR0OAaAm_M{HZ)#8<(`P['.\W\ -4()$n5hjS0ҞT C+-# I2)t⹣%˰9i3&xA3D!{"j`zJ1 Dv % |Gb]ƖYJC LP$B]Lk#"@v`$|z V,W:OHl. 䂨)r$#' !hds s=)r5taJT삈mYzshΈܱ]Ѐ #)c b@6.KmlX[T״D,G]ז9ƓΕWj0+ۃT{6g,iuhڒ $pq 349فȋc)mJCw0a~X^&(c= .jt#_3)?Fa3\ܠ΀RRp;2*Έj;7- pA$+ #__1ls/!TLo("$6',Md|֨#1۹ w(f@PE"%*3|_][LȜ&1>xd>vHM+lҴ s!Gi9T ]l Xq2 %sDId]+i]LU_o]Y/}R(sT/+M:K5B!0$dٔIGcg{:øv5mkrL%*}U$II0k QI@78!Jpe? MF[H2tRhLBB ̥n"n\0J ֨5_b:٥:KI"}U)h  O /ND|,aVST#:|w4u)5( &Ha-M47C 9^ ${}K btX&~ ݀~*n7G$͗i0CI.i~_TC[duGۻE؍}@2kHuKM`\+jNco񙺗Zi|G")e΂s`7l[D#8yQ5Z"y}[Rݙ Zfp q&jC|RPM7'-=ߜ{@0#dj#u|k#5q,|`cTQp Q5G\2g?9oO#pD=ЄAb'5xF<[F"'o)M % G ͹nNj_*y ki^dNKU@'fG͘DHGA\txB ᛧZq80dDi%l$?+7!+7mA6TN}!չ[.bnUD2* 7Zd$"Ķ0NB)8eҙ A8Z$p,=hc<9P_҄Y68s/@<~+FW@boG ]䛤z m/db`aUZVWmmc0Z <4\|;_ EVi ض(W㮂СLB#2 ,ڌӺ$ d>#\S`oT\wt $z9Q9h쫧uLU>K߳ ~Y|;O<'9n|I4.T| , $̢8${@/[Up a$b8o#A g˿ڤi!liʼn k}eBGh2{&H@@5~.S!Cg|1|.;f~Dž(UKݞN)5HT(>aIH}pT|/Ϫ;cocXɦ|pui+$?uQوqj& Uu RlR<`1ј 0Pōo Eh%U",X;#^c9 %ïxJpiq*3/"%y4:55Z)O <}.6eYԺI 0J ,0־+má"X+Xs36pl-G ,"0g@FҴyvwg kWR#字sl|nBrQi XtbH# 0IP! zX&g~ 2|;E>x@{Bܷ_жA(LO^ﱇXxx0*mV[]i4FW6?'zlGR.AaAխ T ˈTܬ| ƣ8p%7g2H[XgF=<w}S=4Bihi_X#z#ƨGF;dhGj5 O3qH |FG+"D!C0cF''̔D7ҎB -59_X'$wm cRQRrJľ @vv1{4HgTTJXIÎ T&†EI!m)8PGEIy.E!F6cee"+9撒mdX59>6p:#ΎmB2$7cxceq LOH{4VpIQH= ƴQ$H!$,mOKil-m Ӎ&j97)y9ԱG* RӥniBfuP,(QF؈ޖV*(:wB4>H&=cIJ6eH\ Lmr,>>OzZj;A5$HbR$0OvAWG.8T7/Y;)iO`gB{TJS(I.MzE̚QjGeܗ{:p .:G OK.Šм4;m$.XfOh؊VFzxw1OHJ6;\!mM= PPpF HB9݈sBբr>ӷH$%'4M +XD`/ޫ"ޑ$Qhwĵg{&Acll" fp7%,'Y EiEe]!S[Ouo3x[=N(4Qo6idb4L\a,~{2$aa=_e-M|Qj>EK.5m% 6agon(tݢ+}IXTUgq5-,p+M[f.xTјXK,nVWRAbӥGEp̀6=TRzhMKcZ pQ7b΁s\!JCB4F1C\(}$K^OϞ4V77(cARAaH͞4k 6U6;^l1dD!A]M2kA sykCc}`zF#èb=kآ% B$2rM,eOjb1C-X$YH$=;s݄ `ph>dtAXK+R-w%6KKVJWbE4|_r3'٥y3 ]4u]w-:~E$J;j~hF%: w[UoDzl׶y >𹔗a ,c:eg& SZqQf®q5!;$CۍQm`]Ah8n#!\j&3RjH-v䆂wP{z~?lsbfxk$ Ul> Mt%/b\$5*^6m~ y$y?\e0V`i \ PrݜQkr_A' "}n+׸dd^Qګ<6nV}%4UeOr7W%;čc0Vl1_1Mzo 78Tmr&%yb6dc2i bq?#F,(]Y(s&9HCh8jzQ$b*е/蹶P(r:ԪGc:ƫ!DuUz'Z%%rU|; eq% mkAb=2G=ʲ俔$TrFC n6}MNsbá̘P4%{r%t9Kc85`t)%  <v߉R1r68Fi,=8ZFSxީ/Kpf u(Vsx_7@vN& 1q7dOd[lHfrihxJjv˜ @% ۸8,6h? ǹd-Y]Dm8~` 0P!T)TJQ! - w[V%E80HS3&Dqb_~$`)Qd80%|q6Lh` RPm%۴s(F~T] j.gY+'hR3j,G!ᕔuFR=Pdzd[pdeqdjҗ-1Pwm>]0C:Ӌd/0fN"#5A3c)Nc[ L"960gƆk `` k: 4E]}a1-"6?WU$ 0LwJI:{`1=*A{MpR¦ ^ l ,NTAM)23 \S!79*\2qxH&JxBL-HFy(UPL1[L7@b:taޑ!G-slanNg, %"Iqa#0cm8A %G#*0L9Ɯy& gu "`J={h h[,e=&H̓ʸV(˻Y=_1aEkjBwb8's, QN! %U|/2T?q9:d+ŴI&&t3JJuElڣ&68/`c"!^%}/:k  چzmNZB̉Ϭ/0QhfބMHMpR, Γ~)L/ab5ۭ,M.ʤXCLwaGpi\6\&8^&?0 M'w( B%Яm6 ܊!L5.ْ츲$="SuyzF楎:OkV{G8 @ 葥Tݟpw0 F@Z^w6w79[m8>Y$ sXyRfYw- FdJfsuBOЦ5>H\gʗk]jj,JfQi%7Moq?ۚ5z:b5Ԯ4 gߤv[ kZ))8+Pnސ5kM(ܲKȥX{qE$7K=xs4c@u\z.b1[T#Et #cBsjmD5D\u|Fȼ4ZZm~ݽ"JXIvĺa).( jaQU?  hγDZg?G =],M" q)Y"&j0MВ ޞq s˷V4^ʑk=EC9ޣJstW.N:t@7kMT1{YG)\X 9O̳]TKwfZ.3 _o(ٿ} ,&f^o@(nrNǜ 2xؙjF}这3PY A俫 _# rzn~X/KYg1g4G'4lvs!dd(<4x͜6܅Hp?eۑ.-3}F{{Jg ~W14lCd/2%jp3(JҝkȃQ{F.QdдuȮ5J\S1gu6wu#qrF.wF:6QvUa&9f]{CMQ ƛucrf ^ETUq?Vlak{* 6wUo0%!h6 n(rAW \X2ƹ}$(Iyn۞1:z6GMEsj~hTӲݙ"QG'SBJϵy"="7POBy8`/K,G/\4 P-mkr.(B$V|U H^ pNh+wrD![[*ebsY yE j8]wLXoFTʢD/ 5co*rl HuOCtu/kiŦTTBdMLJԵ Pgi$S CfY@`}*OG gZܔ{n,]'5qvQmVQs HO(w.jm3dQF(ӿ|uo9 ήlOf~%. ~3Cec޹=qqT8\ Ky]CݛG91R H2(@olK˃ )z/(ou'zR,"X$)re,ZS+`lZ:2L,T)TR֑$\_-#\Oy/܁遹2$Jx'dT75O?ȺuyJq >(8 8x L!sYp䢍?>m1iFlr6"#bɹ+]jʫ)KV?#ضd)5$I+ؔ9o4eӚبz"T]>صm5NzdoȅE` 7==Y( ):")΀=F'd0MR+$QXk7qR=in~'"JmgдAAG"L ,e-Ƈ iTZAy!%HqHWR ^54^f)(1uqwn(S^@gc 35MXP)7z"ґ7' z816ӈ-<,qz)kCRe0P2N]JdOt# ZCBƞ<"ك{$k*i8R&pW &0:_Z'% 'deC.axB 5DeDZ#XN#\8#,Y>ps.4ahP͚I+ۦ 5r[ g>/0Ȃ# vj |~esN6 t(*i)|^pؕrTRRQR2904ih29dC##pR"@1r3U! .feN`gTC.B j^G5⚙5E t+J[6gud٢ {&dP Cڣ".'DNd{>" : V I[l91|sc  ΂@ecdI":teEUbϹh663z6Z2C`քYh71ե:γFi@9d->"Hؘ<8'OjJU\ل5Uy6XMpP|r5sSZ,fd;^ok-a^| +p?:h|#8!!I&8D1_c4>A` @ޗp֭WQvPr1 0PUuK/「Sjo[KU`-Y@OctrըNu)B-\Qci*@PF,sx:^bi c (^+o!87h h=BaHbs-l؅w"4Ҽ-G蜡d CmJu0w2c l20|Xka 77\ 7P5/~Cчfp|FZFx0;8=`NpyB5ms Ϻ8ۭG!m.dOYL: Zd.X..$9_nOÂTwjیKdT-jև"0=&71ȺfKka+itK/'RӜkZc`@I[fB:e}WlgÝe!Jɀp)Z'ؽL))ZF9{n8z*y!FK5qpd+5V+))4暓g|/͑eVa8&z`tۏ֓f}sH/T ׋@37ɪ[Lmezn5s2;V6O+GC(1wn4q"CK4F47;"./dD(LGDC_H{feW̎g4at) ,j‡r+D:59' 1ˆ;V+nZ~6FhMF"D x!y mTjUksI1p~""1yaq?ShOb"Z *㋂6h3O5ew{!.15`M{|H3^"( 9'm`CMTHu O6X)^wK&66Ι#cFR ¾yG'Iټ5}d?\}Q~氮fm!I7,87V=i<&G U4zv%]ٰ2Aj\vґ.Mn>1hw16w^bFpM*s_8wRR8^p Ujo4]id9"y)KG&Cҧ$ÇwEm$u0&GzZ$(%].qRF54 =Mu \; fs%9m˂H \]!j U^Z: TxQFmtfxgJ~-ٸiޤi")oPgn dN7hLbqT>\({-"}Q=Hvq) j\o-TJ6HÀ Ey%vfE<-"ǀShs_,r<ڮ7 C@ z'̆s%0-kQ!y0(C\0kWζ.J L07ّ΁(țقr?T=긒7j Qú%`R7p?Jfj9b 5܀F||8@$~K}|P?-le!<>G;p}o"!i &%h^D2x(H2ɚe8ׄ9EzY&""L~#Z"^pӠ(nҪ̯j+LM."sc~@()2afB` @ Ĭ DВRo*hoS=܅.j$c( JUT=|0S._$0{Fv-%!"9BdO7!G{QW~7AЛ8PI,~SNU.I+b@W<܆@{*u_u|zncY xl+-1n 4fI.fnf:je Y]uH.xn|Y7m`|5u\3SRz}עʀӅ_ݩzpy س=ArE)7ž*D_GQtߎ^*y_,kt&xyFMِx܏ph8-x3<RٍB ^U! Mq=zUP|Xc(n{`ei:OL32$_+ FFU[ Ycyp.RH24#'" yKJ]9ra#, I槆vV{_Aa°VEXZ5psRi9yPl%A~=f\#ED V49ES*IcӅkAuû}g{'Վ2OTî(XFf$I)3$k,FN Ze~e"4S`81\fcf.AY2Zs.荒W ɯ N~SDюefAXG_\ʅCN$ B,my K>R"aB$w'sy3 S^@6EJe}I[`BFV~:9p~c3<@3؍]ύ)_f{Z)^r #):by{wQπb=|EaC[ɎgAQȨ9ygo8Dah+esXY8&85)S|F璀4v ^䆉P#]O*[ΤxJZҫ˳PHP j.8£iA$iص[ kM˛"i#`/vЭt"swaS]`mi.*yD~$AI1>_/||zC5xPnX* x> =%snNNqiWaNi*, ,:Nyp.٠i=xoZ/4 fٹ/Zs/җq`J (4x :=$2EEFfE1G{{LYf2%!-e$AP{f )Ne`p[{(sdBQ1dWHp3]6J$uW²ܽC CvsRz8ex$B{ ^_ f8Ɓ>,+Odڲ[*MD7"LH,&3eVb ;P'ʔiTONfVp!=Œթn@H(% yLP gEpFȚa%v B ᩄ-tl*Ûd-WoY*3J-E 0_Fpq8]9Rx %wAÍ BŒJ' ɨd3'<ԀuCQq0 hz8cߏtNv v{Shx6? |~MR}hy10c߼ }!*ܖs|aÂ\3YxNV}kt`BbI 禨vpnHhHE1phv2Xڛ.Ҥ2: b_S@s߄ͶhiMs&|i Iȉ=QHC.TZw^oƥ0ʣñ&!Rɚ@vzývlU)ZU$u)ihV514ȞLō+1Wx~}" 銒&m*Bkow߿?2 8c.)<^%oYuBqomG8YmXFc62-N2ITǐ#z\>$Im)::z6C-rt,Ū`h 2fa9PJ|KlaQ T?y M!HG",VΣՖVE[d/)g=~eX䢴 ʥ//+IDzY{9sлPK5<ƀP]Onp1"Ti@Z: ހ@Rws|8nw:΃;HL9nPt Hu!h}n+EUE.HY>{Ρ D2p'nmSHHKDi2x/]@bF0=6vZ,L=vQx@ϵ({:Vr5QDӥ@M wK!StY2-;asclv9c(RFҎ*"Jamd$>D!m0[@u C} t7a'yž\֠]o4(4Ċ6N-{#blwpcfùv`$35|5E \xqaKKs2Rjh8`g`dұK^K3\- #Hv4CfY~&eG57Ń+2Xh\zcZ *^HoI}u&^>Llcc5G>^Xkf"/DW.LUkAѯt@x%l9"y/d{>IT {s9 ѰGn sN p}a4#mDhPx͜׈@wY h"`0 ́Ŋʬ^81`ѠSs< M1F[K(0ǡU{0;^qIR0ǠI4̿r0[*^r F#7=Lr,V r7X`fAl %(q-n  {sLAZx>x^phqA8k N|G!C,`}(nLR`Z~}gʦ>I!Gr90[Sth#$ .qc 컘;TU6x_0 $^rAE>PU-3#'nٖR*DPG(2791hChkDqOAxy?x/]p.t%a/@>_:/T$-{EZ&ӵr桤D&"$i-sT)]H-QK>B^',"8>-Z ['`Ԛka\X8 mCX]a`Q9|w!+06.)47> >j΅__|ahx-ķp8tv} .l {@aҘED.XRuu<i$ʌbG5Z:^sn>q!>? 54Х敔ď'$)نAMaC 8Mpϯ',j>>OKBشmzX%lH/F禺@uFf 1n72ڈjl"`cDdl)X)S9Ob1@-PR'l@ $bodGAePfl`'D7ܿ=7J9;nn vYT\+7!a΁,D4sJ6yNn|uR+)z9^u<^xlZ9^KV Yi|]+"#0B IDAT@oh \_߂HAgvǑهbt 'sa59 N]PAw5]ϵgpJYiΰ[/n(ZvKJ8>Ys߾?2z8y! slVF6ְp`ƈnnj! μ,Q+0x/px%ߟp3|{ "OA_y b|;htJQu08'^uI:H =E[hZ~Ew!HKE-F9*볂QqRf~@W9!&Ut Oˁs)<:VB":s^;dx3z51TdFck]8poXkGO|Щ弡//I͇kY^/i,ѕvpJ- <uFl?sPM;>8 Qŏq3௏Oc6EGf+"Gv_gfkpv47T5YwBqy5sR:#^MRehD#֮}8pA@SZ}9:`lin+/ <-p P3\jQ(FtHt;yMRl%hnd@byyGq4$ѾSjPnVs ^i 8MPV!'~>nP~^Ltkp#a0_p: սznL@ùax|Ƿ{Q;q=01ķ s^=d++Cj'YTmiaN&K@m&N6htg "$rBeMm&5e`(f[m )@ /[w•&yYbTbNҡ8b$#spN F6L*&"JEէ0ɦi8FW<_ SC\y8Sg:0璇䍻q95"ɘ.zb'sf1x*|a~B4 >onIQ$4Aӊ7Əo8*1 H dg<h<;Frdd\d -e&W#]-z(yJl>fIkF];d$q*6 k[j)NOx8׉srtg EgI59qa:)^2nv]VCd%rx2IM9^K'CWmǚ}%֖r;S=ص)AI5?"p\ ka$+by NlN|1rz\xf]Y;PR1v o@J~eWJc",kbY˳n9n;YHU07\Ne" kvi!-7q3|©V5ޟ፼4rS\y1 *QCN>fO N.НQR Vj] \';T%PYfdn>El`\Qm?Hh 된1>#1ɳT9܁m:ǂU^d}"`_2Kw: Z8yHtk D!H=7= :]WZO;W>I!@EeO 9WUF+ i1Z=EZu?:07hf T²O|}ցh}hX.4:.ab#dLχל;hxz&{![-S\q d)Oqߨ 0ҳ蔌x:N@5MŐ 16NTȾQF BF I96"Lwpc :>>Xg4hZ7BZ5v':)xZTa=9$uCqt@zlOFdΕw)F*?j؄NNb73؜#́:QXDZ,¿1x!M*ó}z|%ڪ(+],@8XҀv]Zz '"nZ }?n傃u E$bCpV63Dh@f|M*?Hڹ Mq;rNIDᡌQ,gubI[܀g(y{T 6ZSuSoV( Li+~HZ6'&-`+J8x234E9WjfwC@bb RA~At =ͅL..Ԑ 9FYFZ(vNiy)OGD#psNܐ}7*j(cMb"N/%JHՕY e>:F?o7#?^HcNXkHY7c͉']c\Xo q 6AHy *y<99f m8WN5.y.ht=m۲sC R8wɢoHU\vO)r5/uHY,QYq "́dgl$BXMA O ׹'28z]HOw*.Ү5p_$p*񤦼 !E445h裣u\5l.R[M%r i5/_ ]//5~iL_s_O|>9*|<@PaJ@H83>'7F6 cn,b  Rct8[pӲVmҽ̩T]3UqifPP}oynzU. k,­H/{QpfNqXMЋqt+RS*mTrI]ӏW/RnmB ,7/{DpQ@K k9tiϳ7JʑMJ '՚Y< e<!54}Ϊ!(E|xz 04 _qx*P.`"B s U0RIvIYWT0:8_1^'l:O; h lG%WTUˠ؊wؕl-Nʅ (T:VZ/y> cܠ8nh} ^H)d4Zi6T߇'ٖe>F3~ ߿QУ18 oB#އ}t|g\x& RU z/OR&%-#&=ң7`|uNx`e <{uw*!nm[ꥰߧO&1:uU"lXOGUΈ, DX˱$7˓5o~t[\x-u? 3u''OBo8 Lm 钅gh%ˆE#jD|>czʦ0ד版v{oh gK2#w`Y7wީ3bIA1RaK\~{G~8n7fIPE559Έ.J`F2=,77K^vw^'Ė٨޳5h" v`*Zl2kyh?ADYxb,8 ι "ʮ M ^|q__'^< P4ܿ#|`*"XbWb\qbģۚĐŢPi-qq÷ ӄ EM}G]$ HGsZCFVSF"CDЎ?33ixTR ,Yx #0?J"%'s. `ۍV y\<7R&P8c%ܥ[ ?G5҉a&Xˠ=~v(cAq@ڥEJ@{Qm/9`3vGcNsۏ #{%P?RLߟ,!CjG<-' ZA`/W1t.Ü'={ӘN1[aCUx0jBd2~Ճf1b~\-\EEnx3|<>:)@_-ڍWxߣUUsdxXى3nEqLLn{vj{ K4t"sQNXz_?AR0~'cy.&S^9i8ϓn5GaMBhŞa%_~eU'j˘rKvV w'ίOPU8N3y39٭M;Q:D &\wa3Es}4Sa[sl8p;nsS<~dWe<<k(rk>0z`&  d|7g b>˓us)v)!U3I"` sMFF*ۍ@rL<ŵF'_a|?d~_#c=G\r o'7|5;o=@sn/GC]fK4mb'RUS UOs.7]]ѿ箾ogXnlH^.ހ{ Ean A!`Fh.;Q%LiU 1#:Y{QR'0bj" SFEr+ +q9b 5:V#A\`avv!!-z챂 ( r\2kkH9-8`\cby w.0e)C$VAyU,9ʨ+l(iȠ,5}"8_>O `&ʯa$V|^3 TT?;fP:>h#{g;nmՉj k2Z{}D1/-(|;3;VjB<rC 1.p7eZez j6xkw80˵틶H# ֩͟+DMmk1c~ZesgUSFtnRh}s1 &󫽥aVHNSjjv`66l. 6A2[l0cEtg]ׁj8.х`0g,qE "G Vgz`ڴvl_>/:z"Dnr;{:rznioy4ܨ? Oy*Z#KHVO]) \ll0(I̟eK/]t߷/)19Hqʈs"ůT],T^Ad;U_\2N4xRRvJb,B8Xj زu*]*Xgzraa9EYW~~"sJ5t}bXMQ؋u5yH$Z*GOmNfmpYmKC,x` v{ͤ?FҪOLv,uspz|)"rr_!v1%g^+C: "bR.\`sM%0.lC7;4MKgpLu4xPc*Ƃe, u :Ԃ<&f*sPf{jl">փWʃ6 ]?X VopM 7aoI 햁HTFVNr񪬪w] ܳoLawW>RZ]*Gq.{ͯ fh,kfd+aڦ? >goz}GOQ\}ӝ;xuong{8cJ_,ؽg/6K\ov5A70[{MOC*JL.s& 1Yߵ!FgM]rgrHѯ"VT;4=f8ofB7jנ s$lN7[6sJKt4EdJp)@w8@+Z*׻\bHZ軠B_~㸭kX߲|f` ݄ո!di"/ DyFw^ AVSXhIlK[owK`x<)k;MlK{PBA,ziQ"Z;޳3mz[]f)prh9 %l@8*!o3 'V%~gc_x>)ַȯ06d)4.t'(Yv;ZW'50A T"d7گ,jt ri"c Ø~aGԒ1ղJUE׷RPsFఋm]S#j~:~\[E:Ov@)? ԞLRxӠJ]eC~UH3:wZ bVl'yJd4%c4&&HK5$!ZwFLNlÊ08(P$"U U͇#  9\krIV=BE.#j͊ ‡#o);-k skoZn\PGS- jiWY|O4$li0[e#R׮= l,FU8a["#x9}xpzKx<'z~kbM"e8hXVziqՠeJz ],U@ uHJ-dHapPHQ aqםbcc@? ĘmOGTHuo.WwVBlHif^+n  -sM?FVAVQoQzq@ ~x#{{n`零1Cףg}8g/3:h_'p6~(=B4}qpLnyR Ւh4Y7/E:0`Ysvd Hх) Tg{.@Tj2tLK@1hqC$i )#H }`tŤ&ӪfN|yS̅Do6=&ei`ZL臒5]LDFpeцh)()accRUG\Uȇ+lqPcz7?s v6_̬) RY Mc10gx1!*A٩6d=ɇ`(y8(l;juTU*>[ J 14UeD6:`ɈG5(UICY7J]R֔20Gu&"gn' be4"sߋԌ{~V=N N?ՠ&F9 YZb4Z SSrVڧ.j *E=;? #X¸ J08DSvں` buuxGkY~|#>@6oi!"#iE;AŲ-Ӻp0&;DXM@DDvїv\[}6XX]Of [@EMsR10"k+6L4iuf29b"S7Tۏ!Xf%τN쬷J*EubglF2ˤF1"W7̏C UOaP RNj0\ Bg{1Ł5$|fml*!- WRauiO:\s >f^ՠEd@UV.0\xٍm_oxS 0s6'H%+Bv(Y h&nОM(EUEOhdeSK\;f1&R`dH`RlVŭEsU~ Bm 0chYHnvck7Xガ@w0X^b^MD_}aasOm8:94 ÈZ+^#،Dt8.FjĬt"*rNVdRiݻ 7tgA3Wo~Aa)+8DQGS)QaQe{)@d4p\k$=; zWv ME17Y,vdcND^x鍷 9qz3 gc3vǙ = ^vM$2DnBD3]YobFf2pb"~yNJکrBG@.rjAC2U+X+@ڏy:cb><EOK-2XM|j/$&oNпiih_G}iorϞ}h\uӝ>5]wxY4TR.8DCr!JYu\:-P@>eן_yT*XKۡ cH f"IC]|>^WY.{U~Aa:l7nw7vͳcT7|<6ȁ_D+~vUQ-ͻ 2QˉB!] ]ԶړM7vLV+(u@y`($'l^z̈Qo`&+S b̓ i4!O\EVrx_W3S+\A}goo8(QòA5/8ukٵʿɵ 1vٶn\|v dXr&/872|"CDs>vgڼtЂ} 75#Qv 1j c!EN1jcpsP*n'z`M7Qfټ;QaUPؚޯ`P#1R:ߗ|;ny*8|yOGBxz ̄aԁYPZWCq&ujs#bRRB@!*pUVOP|OfVJoBJ }ٴz5#.:~*)G0G"q'nWHŰyGK*0itk֩m[`V@o _?5fYfv{? _o1\DNp{e;cnM"TDTVJ F)ic p-+ R :S.0uÈ9Qh8[zO_DzMMj*՟ѮҢZ=D:A6Xa~hV*Z "3#:ׯg<^D^QJZy9+lĕm$)2p^l1kE煶61zP!@0v;_G+Y>aRܙLtrJP7$4(To֞W j/kYk\qCjj0R@aYo#/_wdp_yWJykJ`s J bp,NU!b"Fw!mT+]nIcNm21M-ھEt3jUbdE֩PEЅh-`T69"U[뒳}RxR ,X ߑZ/ ߻|qCG3ZpmBZe֡9`ma4'Ek׻^.9 , E85kM]Ai7RooOLviSp$3}<0I3_~A:o?Dɥ;m= )h]PNYʸLO"6XP!k)[]rQ ۤ9D@LdN JV0"l% 㔓[":[ZB-&-UgeubP+ X~sѕ #X|ޓw蝰9 $>ln.U5d6W_-%!Bk2Ho~rr ub 黨V H1tȹ-콾V|/;Ḏ#\OO rB.ciѝs'`nHL+j1 JJME}KLpY!Umh1]=>˷=o>׼@[]%FqKQHk:Lf$u$lzG2N$Ԍ5 |]nCw?w9rֱxuv߀!k6#l!  MYۺ =)ٲ2T(wXj], p p\ǂc?W?Dt^?l HMXLbZ&1!vZ\\qVu۠U.()/|vO:qVJy=.QBCF.YkE`Vl>〔iO1$ u ֏Ů._xMfy ^S'xKuBC]ӈrPz` aIDATu[d[QA' ,Ԁx>m_%?[\|SC7)?b &dSR7*.W|R2A9>!~G:x왏'fzlO9ܼcɖ-"?ӡ~]Gڧ8OKoܯOH^'O=؁|1Șt8یqR6kC:!mwyz8O*"7G50)e\1 xýGEpXVI>W}rp>ar`ݜE/>c[f? z?{IENDB`pioneers-14.1/client/gtk/data/themes/Iceland/mountain_ore.png0000644000175000017500000020140307771100213021207 00000000000000PNG  IHDR3bKGD pHYs  d_tIME 5и IDATxymuj>s}OzzdlibBHpI"UQA@HG q Mb(P@R@lEc] M4ʲռvf51k_IY>HOZU{}^{9o|S_x ?k!'n?_h/ӗ{__ |2_w >|o/D)s(kHQ_j^n8 LP|뮃!g/,RcH)Q(@J H~?|N3/>qu@|(|phmOBĘѶ#LR!UZ}agߎSӝg}&(uO? A&LDŽ֚J)R`l#dz 3?G_Aqۏ_ߞ !}e )vh J(AWM9*g"dUg6(^_ķ/IYgL3c9)9ʔڒ:麎z{_<2(: ^7M!)2Yc'J5ՙ;$)B\j-r,AeFk1 ߥ~O3F;}?iw tɟYYY2YJϠJ )E)OdH31xZc5IQ~Ai_~[~߸"(:b6?o-Az3*0(kP) `1eYe7FIb0-PV$tXp&_0dT0d5GWg~::(:/|tGjysX+sR&)YG35(RfZQrX-FE:;F}?CW8t 7lPu@<7<)kS!pKt$@*"v)1(@ $lNC΁N%j{1 c^ '|}:.(:/Mb9GTb[:1>;r29gb|:@ Yz ~0|n!RnEQ]ТOh!49 1- 21eY0!dT8ag"6NMgv{a%OR.)%u?|7b8zǧtPu@Fҝ>O ;tǟƟ fK9WC-,˂Yȵ}GN;)T ~oJYZ*9cP6B霰 pxN J:TLJ6s.Ao +vI¨Nbp|]!=˟[(gcuۇ-Z[tW7*ajk S%M}]uXv-s\8RDL@g" Es(r)J@ĘYb5wybT;y֒Oڠ{i;wwa:)$?k @'f eW4AҹeMjRs( ),$VI8pZQsXON1r`3p JH)S&'*,c-RJ$ BJe߾x; >U.(^{/χ!klPsZpOk1p )%ҤZBmr.&O gbu)CDT!p'))YDEOz+ZE q%3\r?g Ҙd*r 3!_"d˗_f6ѝ~IwO-fR2Fyڻ6SU)3HϐRAJR z NKgi8YЦJ  C3VL,|+R,INe h>JJ,Ie1oa w|'EPu0LP_ښhvO1QV A}4YY)1!2*쓀Z22vjm|< \K,PyPJh .hRx$08[ձh#vJAn0(O,122K9[Dپ*c _>o Aqo_w$%ֹ2PeIvƵXњE"Q3@%TR H V,s@Z/rm$0R,%YƧ4IMKecҺt2''Ts|3JBΛs){5;T$<;hbjJ}}Mw"kUt֓hR:#hpJCl2-Lo]"nh:!=J R띬Ή/Gw K}39()ht H-@ k]k`$EU!"zId\h|F;M,TZKS_m^QJ:~zsE2V„HܲL8  |jo~uC⯧QwbJV2p6 +\Z7Y7>[4) m5!B{{uwrj`d,ae¯lM P2M3J8$Ta:'@4A[ǛY3Omw??2&2eQ&EQ 3e0I8ɡ󊻆45䴚 ԿY@DSxJ#J ,²gSUrϭG)?S4V۟\*D/}ص'9re/caB)Ey 3\K=0˟gޅN;u ;w-|?yl~,"ܴ#hL:*mzއH ܙNzBَ3ؓU)5-f:Taa*HvF*j׵߫:& MA*p{sx- |y/8ŋΐB3pᣇ{0?$ww7 'Z?&BXMaTD,:BqS ӷ65lu j}:h_3p;ۮ뼼JI~1Fb1U5Ss8f c%C AΊd7ÙȦ`e9q/E<7q ` yI;tmq'AzH)[n{ߚ Ji&C9Epvq):%dvAU&­.Lݙ<ZV>"< }4eI1!*lkYf*(WUK%rNԔlN ~ZxMpsN":!b3~i /$MGVT#@Q$,wn28>ᠸ{{|y% 5b`Dnd%v2,d\QߌŬҨg%dZ|j9GRm,Z$kg,Vqb{,٬fKH̳gq-l\}1e )fE]k c ZlGDzLMu}G`ӋG>ꁛ=Wcp77ˆ "׻K<|y ?x#TZ*й$)|fZ˦ʼa 2N3dC%>T=*WY2踀?[l *{6x{|q{W6#*Bkbb00M(509Қ9^}K¼%9Lg>si_tޢ@ĩdP);CR2_=oOHǏ)mo{՗1AJК~Jb (Q)rG_D#qjDT=A4dSeff,..Ne~ܻQ#混Ͷc;Ri_dǬf>, /2v3-U| 93ϲi(+ġ?[-YtRkƲ,v;nWa阦=^Y/#0U-/jnp|̠A;oĸc\S5(? ӉN^t]elb$":1V }8Tl  [ιĮٞq:yh3}?9K_98l~pOJg..6ܿ-?x8-3,4"9ٟEJ *ʘ$0|mVCp7iZ]aaGR mu#>f)U !o~ZŸi{K'!Kԟ*^<&3O)RLRƚz'̳ d$ #1k5tH@8'i7>h8s&&:ʠRD+,O MDuz,9aop~nz'{ZcD$a%,sbMYRw|UK S/>2fZ"aY4Mxul*^x=]^^Ȝ_K@Lh”5 -&a~0dC"<Äv<9'ɰ1 *S/3 RstuX%~zqȽۯG=u$'~Hm >~eHHՖfi|{t܋Qcq:{2]`mW 1zT,@o iOѓ2!WllgiM-j$64k\J*JyЀu] v $lQFkQNH 4/\]6gDK:VUoznH>/<|;RR^]]J @,!Ff@#Ϧ1/_?Nv#a*Ww+΂"^.U02@X {2yIIwcA=q/tNmg::˲b!ݪl_r{ֲXޕiT0,X8μo~tdzOG}/?YbhAg:6VFiM+8&pyyI4T.7vrnR'TUz==" t:affVk2 x?㴡{1瓋 >]ɚe)@0Ϟf$e_ɐ?p7\50$(^KĬqRTDD)fsԡ/b90v2ǣԔk Cj5nw}/&^ɳFk:eanA(8rQ|D|hJ"Ȑ}JS%Z,=Csi>'~.SCx9v+:#Zriap8I+1[bE,Ka>GN 춵)MRR餦I6(_%"Fxs8~ȥҴZclpcףtU,먬Ω)I)CTN(/MF~1Q=Ϸ" J%ŵDFhnOXB\SA.,gvYvKZօ2/O'=XU]Ddwг\0aZmNLg̟b \.ݎ2WЛ9+ HirEc ɨ,<\UlX;*u| 5ȫ[zͨ1y+/Hp{<0tS=8NM :9nƮd\( Vո=/пϲzc>t|mS.@gUR-BeY8nIRcz/oU. ?Qs-|1( ~,P.$Ǒtd:[G F^a@g4 ɽ776;ŶS/\zR2!fetgG\]}Q`RJsD!M3:H<(r-٪&0a.;XB]19Ipr#_ IDAT&'kø+ѣǦ(hU",. MTF@xg: B?f@b"oy[$/=f򋰽)dG-˲J %d,1pd(zB$=X僎GA'?x?[z|bY6 )Q٘?q#>1dA~[ڄqՁ2RQ\8i#N'qeH(LqtP&ӺYԵsew/љL22{l739#ȁߐZzuo^1nPbovc>{ew۳J,k؟Xf:&9BΊt!P4O3Ae]VOc D_"dex#q84 1 *qCӴ<5u]zL~i.!bs |YQ6gO,׵d@~ioM_|aG{ «{o>9i.³>˲,mKIcܘ3]q8ȂUٓZYkKQ m#=n#_β[Y-nplv>y4Eu̶SGiVʂ(O oe:D/i?ŏZv{?}lg)sT2bdC.X-+(Bw8^Hו/%NH"y3糏UTXz@B3e!'9O3$%vZ q3UY{L2=YOXЮ[PtJUۈSN$)ź| y.cm|𭨏>HX^Z~z/[ˑl6 6n4Xcn}smH0- HoM#υB2477،]kU >ˎ蜜y^aPd 3M'-8^;^x`DJ9yn4e΢%%Ar%A-J@v@cIG/RZ#"jjѲ b m6ֹe%/aYDh4euNzs:]hKNp iS2|* g*R9z:ec(5.+7sZ<̺f3US7oVO~g\A1W{9d?o%c7y>79)tA4Ž:BO&^+?敔c7 c/65~9Y\5MTҬ|D$IO>bAZǏ㌢-R=W[2<|Y".l6Zr,27s:}>7I|Bx?Nʓ11v=W;TX61=d2Ms9(J- j4ƴUZyY97 c"k)dc( ># $jf=To龇/,y*(|c,y:s cga:ib̺˜B-<~|CB۫-WW<K/1ϾBS"@fu뉤fַK 5@e翼(hnt:5v6q,hԟ/y!{q}ynb彜[ C~al63RZU~l\.xlLMrtex<2yNzĖUj]q]sMHPT1{%jgH49ȫtDzV$lNqRHV˲^~?0WC ;N>0N+ۑ 3-ɴ4fδ~_F(|g=x Og UxcC\ \aζHRJMݧYmHO=HlzzڮwNRaDyiͺkv-1Ƹ/eOͭ<3k]nAʲ9tbY-M^9nF ~/UϺڱvٮRb;*E,;RCkZ*9OkM5}狱tv5sWd}E,Y?-3t"oews*\$DRfe2{Ͻ]rUO? ⥛!j"{~| gAn~5!き䁫-/0gnno8dpJ=L܅iiݰpf:2-{Y\s>δ"gRL~$ 1A0ep"N y-Y Tq"RWV~}PJbrt-W³482OB$H81.D%eΡCk}0(M-I&0!LB24Iwy9)b5 ڱ@[ӏIݾutՙ\HDqm\߻$Ԉ y~t-+#BC1ą`"g 貭< ڎYk<\t(A}ٗ?~u 豠"*s"(cEd!ue<}76'Ўimĕ{.<5JU,bI^x饗Y1k-6׆Nzi;saO+8I$1 ejO~@jTx =O(imr#FeΡ! DUA$1 ӈUc&DHR -~i;1fuO)"hw(b~YD$T+cpݸѓhU3Eel[m;&昰vnAeE56(CY/ Y] ҚUi->C)f6I:X 4GX8w`ODr Z\/j/%~A*gz3bgU X%K5be?WeKI)CggIZ5ʛ5֐|p,6-βԙhNbpBHVpY<)I ڜW&uS))[_TJK mlQ^i!=̩-Rz^dyrh5xE{Bz ]O\d%f`NiM? u.#VyΐKI2eTk9~\~|yi)Q0yA(NJi@51tֶtBN\;;[؆˩ՎVC?Q)ԒuTuY^DvSQ55]׉%]ge4TA :L=Z(g"gk!*F?Sf*}Ŋ\ AQQ4ies5AvC*ZQIvmf%Z̹,ђYNJ\"ƈpmUTn$|ޫdz`m 6J{o/rPagHTXLߏ+G:RQ[J挡v[H;jN3O8/U/U9Ʒl8N,1̡"L5Xc/\~;XRGe4LЉgi~aŘyj j+*eňehEg吔8s=A4慔6[<k ,Ζ9LL>))eY*4iAvmYc !e"ͶZ>Eд$Sz5 )QV|R"FAjhDUa:Zc@b9*v=3!yP6UfEcctg"b*#*apC7gAפ]׈N5&qG-/#8n "C +> ϱջM byu):vaej)Rx;yIlSO46PBwZ; ,miҤT45=P$3 vX,..xg۳whTm C tF`j"e{ۜ|r +rh,Xy%~N5!Cs|JkaZ>ũm#&K.*ub]!41鸞g"Z2L:먳r'%!j~/ۭѻ80ʼCn>ïʣ[=|͞yg)|RБF0JB7:-MDU*'9x*&6!1ƢZKE#E)YSE[TJ{[N -IN+r0 \W2'2k]0  H]O*JPJN1bf S?E/Nq*w9gLqCůWXܾK3H9+P0ִR2<UXfFYMΦHcfU)y QQV(Bbf]|&<58%cu͏dP+jlPJ)b HȽI,pFB81zb*=SmӴ -̲L6[6ہ~~^K<~P*l4\hf=?綻K1B\Ǫ%-,w~r\gC>j[ r5JzmY+Ј6aQX΁OGX2AUNe.x }yIN4 :21ϭUmbUH7[v}:V""L5KU2DYgizgPb ZS2NtZr9Dkʅ'MRw >:8NG^eoNerP9D9yV61F_MZ2q*aT ZYJj2ʂWYdZuBjl TeMV2jV,\+J eV+ ˮ)2%TF8S c:c-l!Ľ"{Rs"W%m/FzcY²Q{[ #I$޴(nal4$0D4{q*VC] z\?rB^3Ӕړ1 ihC& phgUf9)ŒÓM͂F ,^ϪOt 4#9²x IDAT2d)}^>L8 C&C҈gpS d_g!:!ż4tuEp#pAtc?`)2U@l,Fx-m9~"g30{l$h*s?wO!MӠ<( r+h15ЃRidbA`v.-]. Ah;`tnR.0:\H|ĥގQAxBr)BD8U𪤦0RԒk!. Q΃=8䄆Ii=&I]DjaCfMx%Y0 UB:E8q[٬_߀g}]GZHl{bYB@5#{gCFb΢T!Tsxt *\,q 6&ݺ`nE]t׹(mg!Y]bg %[uQfB-Fmrz }?b",JM6Onvj^ ؀RMPUIhc9؈vyf i!$ IxyvI2*dZm%ULn DNL h+aѩ2"@߷)j䵦k~R6g&g`s&sbeD?2( }O0 v?pAw?8;>ׯ_܇?}ZG&eO<'z>p.yj7լ u n@] AC->RڌXBI 3D養kHn8_|  h4s*1UoÏy1Ta=^~{˴1'ZOs̟=KIDEnph`Ѷ]ʮ!жZaě|of<lZ\z!lyO $z<;`Ve5566@UhV#uj֠iĶp]".5]bVizﱗd͌^a-r֍ >/QUnA|Ai|4iRBEm я0"@ܲQ$%Z5E$\U֞քB7Bv(AD@:?j^G߀^zxmGhP2"86,N'J @M((TaWx7 } %\y??˲F?:(Hi`}!s2T}) #ڡG]/n]h%h{"6G'!`\ zrhnlas}]_: ܾ{~ 0eͦ. 8ٜc9k*l7]>d8SJ. Y(!% Je@ܽywOΠA~P, Z`Ű.m,!Dr$%uDfFX)S;Yn` ,Ro&>!`6[@ GMt % UV"|<Ľ>ʒqtM6)R5hao~[Gdy()I9u!;CD~@ow?ݟ+9W+~z'RN( G,{C/?{?#m>z@4)3 @#crZ ;9R}wۿaOpd]VGSV$AhӓsX,gi/ *T$z=Ώ8:: .P\cMw}g|>ac61}#MSi[%Zbi1Z1tIV5>'Och; 8mA'"$@hGT)~GEgY%4 (=%gꆢt1Dqu_*>~ Zh(Sd'K7@J(p r)Evנnh#*m=dojK4s02ɲK#6 ^og}s7=z %bAѧr(<߬155q}bZefAe3˵:O9ݶy8[,єdUP[i 6 }XqtrL+vf8X.|٬ν n0TuK0wOPd{RJ?jwÖs?(%[j!)=*D;  Hy\l6KTR`@E [Ewm+鯤.~U5I $u`MdK/D>ē oy1j >oL !.!$d֯fR@J߳݊D1ء[ܽs w?xGn!NPe(ǧ89[#aXիPJa:!gQh`7h=@ ǟ[w!UgkDA|Di-Q)HFCӕ1(  ~l6=6{{0[Yz=L!1+\[͛<NJ)%ʼmCcQ]|RFf a^G#ٺ֎h7TI$#/4,;;4&6xJhG[ 4~ ؛Ciq-$db&G1Bt|0>OOq|vcDpD2M<ɖE zH3΂HE'ď?_?x1?mGrke Bh;bW ;%,n{( G42ws>xje=ݸ0ϫ!y$ř^=6E~ mA]*\=\0|$FKw%/9c{D RF,?GSϱzmqjiG(ڕÔcN0 Z@Ĉ  \$85^U mqQ$'4QY!gǠĔMx%~G+?y '-o p4"z(ͣi&NHmkz>f׉4/@2QCv4i%BdBj|G ]W_x>эd_߮7899{0Ɵ~x[r!cS?m7`S}x߈w~7+ҋ_Tf"R݀+{{a m|rFjL2pr بF[N@.B458f km֤(E m$5Td)BlF5z,C 85AE~n7nJcve0U7_ /2(-=tY(OpiʥZ6 II^'mAtk?}>,޽+W|Wli2f^P:b <ɃKS03_;WW'wnÆH >׉9Bpl}yJߝs$r7*Ր,oy)bTP 9˿ ~ ^fVX=\e:+9I]aN*_`bV$%`?ϯ OIB!ȭM<~$~#|i`uГ P$Jfn Q@|Oa@;BsQ 5BL:f}*/*S24$ ΒUUUd˜78:Jĭ8W\Q%X u]c> UMM%ɝ̳Zm!ceiB*56tL&nB$bRKZn} pU2I5т\4vDiCe dBjbPpA tFqo/g>Y-]=Ya2"+Z$1 @KHs8==CU|p'8iV[Bh^m ¬iK\r,QU%~V-@a40 y<9 ?8<9KHI`Z)S&҈"b- R uE7V}JoeY7 =_^jצQ@)- 'Oޔ^C'HR?wNIV`ۮA]X?(#@Ah<0p}dC{I7$-/į 5=XPJ>F[/4{9,CmჅ!YM>x&lVĐ,dv\rixITzN#\ HpΫreE]كn7(K10f )-W+B r9GYf̠N`ŨՅ򞫀GzRK x]Rhpt&'e97( MJ(cx"x.I򜴄DŽH0*)uӒ5:<:J|c[[k0&rT/@q iN넂L6Q(&G om]6ȈKs(1g7MmJ '_Ni³/`VzաݎY8yp{ 1QC*|Kfpn1fQٞ,˔=9:P:\ KI 4 H,"NO>;w=wE4eh(ɵS/ T8]cGۗ% M@e"y>R)Ԝ:!LU OKB$r.䞌86ZК,/ !Rh"P&ټSxܼ2lx@]I8ut0x߃g>)b8˂`NbGf(qL{Y\ }-v s /_;;aʫ YO;h[ {f5#q=4/zK)W.n<̥` 5DHɳ|/l2!{08f8RJfzʒ~ܼi!FK@Q1f3o8==(u:\tK{zc D{OxTN=4H^ȐBm3o R5>'k$Nnic fV IUiQePxDHte#xtȿbG@=\&]6lɆd?(<vRUF]VG4_y7>8:^U[#1Ð敥t24 USڠ0hLCf YTIlFY.Ӊ xƝSއu5C;8GˌC=&t^co m166~s|)P;ҩޅ$^nS$ R11:mr`5v48c^Y̡9nQ7 *drIE8!O9yKʮKSI#F$!LFg3R#m k Q ڭ&d?p]HbLiaWi;ͦ?D~x,K ]Bi@"U{ 39~7=%`z̿s  $(%t, D91GeRB`wcHOURJ?}JT5V0[ap|zoJ65J52Ph\MRXo }ʊmQMJ̓+]zefG۷/0=\~øbQ a"+X 戲L  ǐnp-$d"qf+/j\ sJ@5<&bL4‡;@i"> ԣnF+WM{B > LyO^L4*1 X NN! Ch!1[KTgsUrDKլ!FTcᓵLf^Aa|TDP/g?"'҃fgdI)"K )тJ ?ZMYBȡRaD ˽Aǫm7Tr8*+hCoMQfo.{ mi 4 aHO} )I%'b\H /#R(9hRk!L])0eLA;B` 6𓮉n zo)jBU*TwΩ )nEHW8"zX}~~ԨX70s/cTO"tQ@cJ< !H2lI?=Pm$3 qJAEզ`az2; !cJxoQ^B*鬇^D0͐fm#Ko@ 7 ]G&UW 0R% ga;BpdZRHXU~e`1ysJۊ;B7yBT:XJ``n Tu v}o{ϻsAmT*7Hq.DL5wW`J(s xO MvBI]Fl7TM2Xoe $3n(1vJyޚ; 0 VE4o uQ@h˴R&F@JC~TBlF[( t@='9&H*`0 P9Qɼ1FJ"Ҍ E4R}FZ7(`m6sFfVz-$E.a A]#6! Aӆf7;HɄ$ˤ&d9FApRW* ڮOk^$'> IZ@?>d7IBخ EtB>Ïo3!bDu\6%#iٔ,>SfHnOr31' > ۳ 15Q $Kks$:Q2 aLʀ-֛s, euúĘbʼrZ1y*iR*nVݴxU3-9aVRb&nV`OqTk+@>M z5$r%ƛ- ]fČQ(55({ 7~{uxl?$``a*S! zWo? <9'O ( TUPxs0GU`G8Jbyc I9(5~ [5O~l <Ӽzܵ6@B #˙nytAE4I8k(Jl* %)pR!r? CrIM*}~1tIH@xD$Ih)zv"BE*&P(>yL !K2eC!?zRo3O2Vy r"ZSZ2wh7+7 ߌ{? /~dhԦ&n@PB bga+ ሀeEQͿF=[оupF8!~ă%CD@Q)SE=*-jbeFR#聳n JPA~LG APZ v"%Ǚ!?,Fz24 lE[j&2d.2,T"'*::aĬ.1fM #5*IM!FRs\s@Q,`'3Hk%Ίsk)eH(V17ɻ< ]6bc.sP)@~' Yeff.: 7}ݫTBF x];7_z;k\Sy9{H '>bvfIJѓ !$v,0gf*I3SZOXѭ@LKZmp^ؼO>L5';N2lH$&Ql,Y[*Mh_]Zr2>  hf %<29}ZUD:Fo!>>@\!edV24K,FxZ(&ހ5\}fܝ ɝG<$ ݤp U%:{r%6xTf $߹LFۥ%vwOp h]]Jk eSd1ˉ)fh~brȥSZd-JG(5YnS䨍H ŲŌ*)87(!H9 Ƙ@IMMꎬׅٻxEh8I4ZPc>HM"y2I1%끐*]@R"$ *M u]\{Ek(5vO~cG67oV=7 E>حɴ6n@JR)HoMLrq;"J>|E.E߷fYlNd.!(u#I%%YCeX޽E #U F%ڶ%v_SYp5]7'[Hп1&A< Lu6nж-̽.S-)bFҳwG#i2so+7qV HnBBY|ISOIt ݈޺ۍõ7Rllm 'udiFBXR%_>G kI \.Q6e2z=mj2>wϗQvf.gzVKRO哗 `0~G_ F"&&U%`>c>)ʲ,1-r%ݴULY8ĩ5}ei,LVOP/m(?\Bu'SO ?CBh Xkscg;}S KUf(;8D)E~Fnr1}QJd;=8w C>0{cm<D}7n$/#')4B%;&8ųL㓥on9/N+K-D> L'zH]f~Qn蠅̪vo'4&O2"'tb%G1Ňp2NNx&׻(4rkRjSH]n'&x̽ ++LsTʈM9tKGM=减㘥 ovY^N4AB\]-2[p 0y`C~BP^s?8f=Xnܾӝ@>,Opb$F.E&.6px\KлqUUhE4=mۢ{1ȤbG:Hr$0f$PNH*ظb'"&Bn7هr 8&9RÇot/|w")5ݴ<(1[mO̶ d6$$uI%ge b%+ǮckbGQ|cҐɴs-'B !f1~)ZCUŚ\Z 8-g2E^ E7er N[MGRK&I22rQ'Qs֮_A%ހm{g%%@  1o25aZkyL @^$(mN7'?Ob qch+4䈑9ez]}{&g2&l@Fb*dhP&JZTPsRd8n6P$HHz^ *A6]"'4M2ʌK4OeY[6 ~O{8ҋ`'N5asƢ$W"l*P2q`6<C@M3&$9Ao=L97"`0ϲ4PB[% qf8=='%:Atr4OQ!` T.h*psBA\@nP_*SL.bp•*V]|A\[k1,5R˿GRJH^9WFdowjQ*B,8ӂ]>OaY*9A\biE@1TB="5~db2O) 2y38/%Z62~t(2KA bddR(J$D7˽uA#v{eYWq||\r GG4rT"ȽR)K[ɋ8Y eS~8cnX' ]8Ɖib w6W4z y#NH&~ IRk!2C'괨[̄֓GEGet((?tHϐN>6[k>7bIPG2c/AW2$nTOFmחZ` _ (t@Xks3Z495m-}^wO4_GyV)LeA:7擇dn"!'B#oYJC̬"}SKJ}ݛ4WCL6#XY-v=ttm#滙U`zr, P}]K-vLao i H^ <šHh6 OkW '8 %Q7%d BD,M=&·i 2ـmn" X,gd\=dƪeSֹIny#N貫:R .Qlx# ,έr63A.oK BC 8oU *il[4"tCQ(2qNC'vBXǁ̑:ΐ&ϊ6gᛗˀ ´y'wd1<9j*=M٬˸-hN;Zv9*M p2D25:9'䫔I*Uy~%CbB _<%/p1e(Rb6qe[j,~bA$CZ<Ą@!XO0XT., Y0PT"XTImtOaRQh ~zO6.lλn!6rԬ '>Fľ9uk^ $O#9d uI'hfE'D!K?![* {T%'1##[e:# GW|[}J)b}x l2l!4NF{xqʥm%rֵV.I&f$_o!r @u*1 Cbi ٴ[kvU)Ŝvo]F VC IDAT=D'`r'(Bp0!(6(ՄP=HW*'iA|:?^0憊8= 1FPPTqhXN H0\% 芆a!* RBّ-D& Q2 &a(FPU6 &UJ(iBPo!$`S 4  ƔWu{s)3O(vR[J<f_Qer2w(o{3|xX,f1 V++R¹>sO>602*HrytԘ2#ޓk*LrMc4[En餦S#g<-H ̄Ys㜃uCg4hl&yf7 p¼C׬B .;SLUsؙH}uy`G)e IL822t n/jiI"C7^&Y7&kd! AYq4\,@S=w4Ȳ|c Fu¡U xa`?CV8X{MJJ :7bx_~bٕ4KZzLgu! ]*jUua!`PJ)aUfͺ!ŰtN4z.fGEuIU鄝r9 !枉dnw4^,m`GQ|% ]庘mB]$9"EyyGey1Q5yzMM~0wMMCA/~yG4il3ABg A*rdB9AYmY)v7 7|#h#3eR*Öx 笑JkH}Ț.F6Irڡ]v j I_9Dxj\~/p# ufs6[V+\r%,)Se! &CIp7 OlH|hUdڢ +LzV"OBOD7G`*zx=܃a<}W#tCNeVWUANvJ]HO_47_[RRYOjϋ "kX-w1?0B n4CQJ!Ҭ4hLZ!Ő)3TS3vtJKJ&-4'i B0| PCgz.Z+/SP@J 7vf)a?lɲ$[>?""##Qh 2 >@ӟG=(QUU1'=lw?ꪬq>$}9N~ CZY*N/X)JQW&`醈9y:o0 CBcYR?2FAdOR8^< w ?~DU(j x՛ gsk9x0N`o8^^DrnćO؄^>e |ҿNBJ]} b:iTR?ROZw_S8|^"xpj`oZ&;Sc; o4%\glk(Ae@ߍ A7PJvč<]e C2ā"S$z^Oz)%X5&l[WzzX! Ac xp0LPzc"D|2NeNNϡ5p֠*xpr=,V.c=E * @;B! W0*+I Id:NzyX*A+l|DB^r{dQ0aΓhLK;}xc%u 7X\Hh8 =yLˀn_)H:dvc| 1/MYbH'Dcehjz5q"XMATiIW"h&2Q@tAN2A1n)WNFv:ps6X& 혆HU@r`&Ɣ1QO"Nװ rƌQ Hs_JEk$v6y|#xA26?yrUV8ܽ^BfH/K:z'`Rk _58_Y5e'<8C$RN3>ܨ½b㾾cmn'"1F:B_Â,Wd6#` %)yк4plhDeASVxxxR  tĈqW悲Osr9e9 j9}t xR"K7@HdGT1^y]γw(޽?/R v[ԛû;|nb%09@{$!i},f7z=)mۦ)t'82O!,?JDb{ |56XȁTcgTE bbsxPO2|gϞ~*;Nva> 0'v`NAA#AqLpdGAs)RƣzlRNIP[x1Zkg[ !WoiȜaY5(2 i)f[ЀN(cNLH~*-  ~^ !. 5_# e3x|wT9ƱD̻}逘9GȔASU6/ l݈89  s%d"pkO{)%iћ3Іb>^Xs&Z JxfnHl(&zm|# !3:؈GZ7]-IIin@股&nzzNVGO'8~IEQ`٠mۤvhqnp, # ,D[sBm"M̥(`ļYSXoܠīMQS2Pj>a1[D0oLxwz}ܒE]ݱc*]3ezN5TlsLd~@kfEQPk<Ų1  KtNJ) &3?fX? 6QQLiХC.%.Q,4dЙ"~ƐFñDiK8HY,_p1XƕgATJ=c/~nɆtY&g3z*+Wrتg78z>qߛe61dg]áUM)6F*JԍC;)eR$z?/"Xc5(B%,H4 x&q 6 ( x+0ShE&QYq>ur÷WMv+d'(Id~s*] ~F)C벬kΓQovѢ 0zLɜ"6t4xCnKTe{|Z\1#6Uh5yyyO*rѴxnnYnNhD,Ԅ˹QeF0EƊ4\B,Iq{d9oAt8%fU)t]~3v;͋ -)~g\kb\4Š6-OfI5flأݦ}ΑY .#vM/ όZ?[j 63Ӑ"X|!] d:L5֚J!ֳ`LmǛ7x:Mk/sMcIo콇I=$ Tr:94M)IH]#Miיr󬓳F,k*BLyi}:9>~￧ò,)c3~@^d PdCA/ N֚cv,U/0-<dKDbGos .~3>cG̭G,v7w(]7` t\ fHydś@"vyN(sXF2_n&\WN>I+׆;n3 yy8Ylu#&5{5P2<{8=޾2^'iFQ(88IgeYJrޤ^$x@EW(I"O@4-t*OjGtQSN<Ԥq3a &{jzגH ^` t-6 $gF[g(O@)Qa E)$863栣&j⽅@]7ggBYR=Lt5 +98&µSCx<҂=c^@5d=$$'P۶RJ{X6AdR6L@ kp8qn0tr:Xm_AsxO2iz4qo-`442t/JzN\N1L7;<<< rEvfC+drzB{%]= z/t'[01)PUJe܃5`׊Hܱ"KDIJ)9^uN=TL:uDb'xk4u=yo-nPRDSJ30Q$L:!98_oؔ+A q, WX~ E^038DBh>(dF挑^!h*g ߾}*/0HjFYSX~Yֵ/`hr,@To1LW%6؅ii4|$S"R8htZ(_yX 1:`FN) Jux6l1!䨬)Ӣy LP2QV=>~۰(/^).Sȍ%)Ƣ*`7Ec҄ ^&mp\$կ7R4b9?XB"ه7pwޮO(7$ufA >I+`#W5> dP}=L@"O"X .f0ql% @PH".<Χ+a|@.3\gǎ%R+'J J*t \kQfS鉵^Sc,KܢxreE5nu׊, <8R2Y 6G_d(o߿Ks%"h"t8ޮQ.xsiF4]> Ęæ.CH<i @x!p:]R.x!inq8X Χ&6L2 c"$/)+ Ä_w\T4zB¨Xp,e41V*q#?6ίE;*3Yqӊ 2˴b{n=ܠm }ߣbx*f>H};:D5LDL):}fc%B: 13-nK0hT2.}Ȼ7k0)E( Jtz5$kHҩ'TϏ(D)hq^ɧPHS~T͌ep=q08v矑 ]zI(f_ J| EQ`آ(TʴmjS "73l+餫UNzh6qpHGR qvXIN&b^(}i`̙#ޭqpf:8pt3&W7=gȫz8Y*,4*Ɛ;44spP9ڗeؐG 9Qo<~#7'Tb^.BiX~$c5d4޾|LvKE}wtZekcTdBfBd4 &)Y8**O0`D2.,Gէ"G5MccDnTE(1U8l_~N%]2.hfEEԌ978o1.b2nODC5=rU wx]EF^ۯPF$t%Y\}Vh|tIw_]3P3m"`QכT+g0։@fp*SEִͦDi߿[EQ*l65ڶg*n>} >FB͞,A!+zI.Tt<Ɠ+,IE™)ϓD1birt57<'Ӆ^kQʛyB"04Cib]L&L,);.B8f-фb9GYo8aлXǞ JYcb.0S:T AL`5Q!xyyUHmpe8A M'AnQ>3ē2RhӸ`zfS&q!Dk`2p! 8Nx9F&?;䅂8kěg UB`BҗR6 CX )uU.QW rw "=1-U,(y PȲH(eP{|!${eK 8.es,+L@)=2+. \ &>~<j1O+rߣr 8gQ9;G{ 3,]\zCP53B4A=G13EO s)>ؑWo-cFIKDt{Wk^f_~QT2Gr|!}~wzr{P%ˌLTC3ᄦBVBO#W@Š҃94Q/LUc/]ש!qb*␾$sUa`>CbA.$wG]8y \6A Pڞl2 #mGiҎ}3rh#9IPo$-qӖ@f2<d",CEEX1m gTJbdttv} MaM`^$no$Bs%:TNda zg<<܁qm`˗/NfΧߓqa!$gmYܔj/ϴiD}fS~(w^, #^eꂸC} &E6.r.C kF̠v\lOx|rkvԊ3Ew=2R ʤ0A5lƾE]ts-3\W st_aɠ9~ ʦ ^xu]i`|| "7(&z%{NQ%eI1!n\kXedϱ?t$2eET)y&Zov1~ЙaҐ(3Mvm|Vq+\:/|,TI-2 \tk4M[8p|z?# q:$)7 ?=~׿~-'ӭpDLYn2!8_ӢN4hA9Uզwhr;NXcc 4ufYqFɀq_0Y\ˌjG-8(KK6j$T)=.U] K mv RY: 녬ZnaAu0jo@>dI?RFúq ." (Β2mS|-c!"6FQWU"˅zK9mz 써$W%dNfIB}ۿ .LL? 3l-[h1:zO7fC5GlC>_qG#jgJ2 xe\ mB'S- Ykakm:cxzR2e&MT&zq1n=9B0xL$8iƁfY&2t:0C: 7iB^d܀R eS&@  Jo~c95ƥ\VIҥ i9R+sc&2b`ť_/.W CG_6'h^q!Mvs X<>﷖v?/Yo`=`?=Rp\b >X GU6`j`EoH|~oD qWȍDg +c\(E&t}o7xyiQme28k3v>jk#P4!źF-3M>O>ѦC?bQX9W-(72 iDs(t@82dYN_̲2cOq}w3" B2 >^9iG'rㇱ4ܡ,k\eFߗj'hCŦ3#Zj| ֨:t9ˠ EHsJ}{ :`zY1,aiJ I\Q󳺮[cxgD⁛e$mqAO'Mv#pi56"Ϗ`c %TY@TQ!_ q͛{h=)+x~~4") _a@S6p1ȣeE]`/q>gm7Ѥ=ѨIije0.[Dk &38>04yAΈAʱ.:Ɨ,#i!^_=c32h 竛`mw3OvMy!9===Qdu oIQy*a +0ˌm]A:@xipssRe(w[* 0/Bnc*`=Džd^MzIVZaY%ysGcQ8Yެ+aNN%=4xnHQ$!-My:$dTڡsՅ˄u#TY,`M4\r<QϟQWl6dEa@-7E Ekq>C#vp2Z^iƌaA2O?~(z1-C+Ayṕ\+@^(by*σƄq^ Fk^GXm ziPy4`zpBJ.$`ArxYklep76TC7ZcgfBpr%$pm $Ym_3 Y&e ^ì mڐml`LƼ, M(%0 438`Yz0OY ' ]AInvg`2[Il6 ޼yȡd -fѶd&DzA^P5@Q( u 4XJkTUYk zdn.qLf?ęT+& Z/Ak "Ȣ^7XƟ3.3a48. nvxxxc Ёy~(BnWͦRQ|GSX :tmexX=3874T1 + x4ʫC$T / $̸F_ϧ#8 @?\k }]E643s _1ۻ\N$8yg⋙v%hӌ| S$/5-&Z(0N=u i :(:: eyFYhmZ cx#~$> cBP",I.DL::a "u`6Mds{{Q4}YQp3jeaLòL&O󢐊j%Q>CY>57}ӧOeAԧ'MRiIzj.c 0/@ k X(旘 J7K#o6;DO<'-ttWi@Ɛ[ՄvXZ$(ltoMˏ#.Gʪ`B֝ t#f 8me6XۺBw=%.֏Ѽ 2p+fI& y!]8 , NƎNsUęSN8k&9PgpPH8'58j0_VKK5qɊԭQ6Ie֠ 먼bΛe}.]~Sܿ t1%o^/vKs (UG*Yn^/pc:j.,g4m[_3@x3 E;H)H$0Xps%'4 z#Ram7wI ȜG^, }ez"~~Gb()b1-N31neӗO>?yl#iXk1kRL <<gLS7P?˯?cj[ `yQs&m/3TEY/IEG|{yp.Poa*P6 P0PEh\d#:w,UeIF\%P:J,4*+K8_ACŘﱃ3pB\  bY) !}oQnnxʲfE!3"! %x _583)o7J7x||>/p*T^:08q>krFo9zty'ATvy8^(.J|#?r+ϑ"H3B;R}$Hz @de=D9 W.AWx>jۡ,h:1cX`JEϟ~?UǓU$="o/h'yP8 *,˂K(KYx<9"S1k7OĖD'm4<',0OsBig )%3EJ,kecC~UUD3 ͚֡ -"' N&z^5#ׂe?n 挴i] GҔ_}9ogl3dR S z^0=TiK8ݵ2Rgpc@8/6[(U5ILb F]?xTB}~o_q9c-n`T5yrpww ps19~0׫B,"]v< 78kۀN߭T1kMk4NvsfR9EX c,. gX&C?h<.8ZL0L` /^N'8oQڮ߼pǾN"h)h"CABQ`l (XRP)ڭH( "U&(D2EQ.wg=[goSMM{{|u=g}^zyϷmi>w=:0 Ӷz}YVHд R my%Y/Ļlti;ϑImǴ1 19)==Z<'J /6۬nliQ YY E՜_^dEP-Ys}uctc8>Yp=i:8:mC]q\<ϥ+i'|1l6eҔ5eY8G 2.Y_onkf9e`}SH]LG<oQXY&$B) vLs1 [Pua8rs\]Nj Ґ %SaڂPU&Ir,*<-Pg0O0M/!0NCriqY75EB2`nyccMu) yXe9SCa~ZZC䣦|bTmoWl'k5e쓔Vw]4eHGn;jڦ02)P& #:FSyǵ(iz?,ݞ"!|bk4gӰ::a\$iNGze=U-;gț4-p,|F[\ߡa`Y6H EHj|v,´ L[_i{Q4\cq`6_' m\OEB}hih:Lâjda9ٔ`Qlr*A}@|ȳlSO=%y JD!$ɨʒ|x㹬N8&yoQՍ`'ʪfsy}b$]i!WWl1my97 Fteژ%7ס(rڶAQhm)#3 Ӷ-h#ZhŴ$0IbѴY&H; 'S.躖*ɲe86m96NC_p,Z{i!F{VJa86ʰHR..wB f*c>G[i'! R,Si|6!Lek~~+xtM_l3 $26]]aД5ŜUҋz̍XU.Ɨg8e05R8;;# 1"8=nǠT)p3 `j0 Ov!N}^d2xnK6l`:i:NUoW=JԦÿIv4yWy'Ә$#m[휯GPf9Ո6 5Di &UϙDg+aخՍ2"BKn%zZMTSO~8 @韂4`G|6P=퐥Ue) ,E\f)}&;+Lf^cq CkY,:y/rN"e:SmX_0k ܈xPөyۮR圶\o7bd2p88Lػk%?l7pܹ{ˈkq"PFDn! >L,34 \wʲd\yo꺆"i~wÒd)m:Rms0G|޲YWuEXAס|×x߼_|Ux׷)6 ]6ǗaML9:ZL"89ۭPiRptz^HmÇ(wrvv6V@8)э@?l\ۑ'ចhJ)d9Q1Fdz(h)Y)(?ġ]]]`)Cf"kPł?Ηy |eO߇5)#`Pr&a1"I0G`vAPdj+DZLP -վ؞@YʃMp}}-;xP"!9ֵH4pHq,+|,\n">tm`6$1UHu>}GgkFLq-:BuNlNWiB[IuW2]$:/{FZfY6l<۠K0 pml=I= װ߬1 >N̖=DU$dCZ )(0ZM&"MG&~sGeG2hʛڪc5tf/ nr$3 ӑ#|fy|<KE-<99aẕs]Wt|>UrmK?,:ߋ\䩧ݭ!7kq=8X72u }L\{k6p,A>g'jYVPPIE^Fo#ƃo(ς:0 ,!+ lZ0)|D9UÇ麆rqyAun~ci8B8::"NHvц:&°-G+xOքS&NЍlˇ8e\`62YV\^^HLb 34!bS6?8>$I߿|omTϹq-S7蓚² ǒttrv79v8q]?Oڎ)!|Ԭ=qfEc8dbr, ~4 j 4) 7|ަ` ^#dFX.Jgq~zK]klyɴђaSl&MseZ+sSDQ4,zH`6h6o!A,]׍h ќdhTݵw<>Ep+E!_ Qf)eiוfit-deMFr5%R6вnc+{|>3U>Zy>uVB } ߼n{kڶe2 -+Hv G'ضQ48  W:E^8(İ-Z_LHbXr&ӌ+$h9B h^y:l& Y@٦'kY2KZN Z~^ |6ZtuEx=)1ѕ첝chdW=m zb1R!<Ǧmļ-1phR WV4m5e9*_.a+o//0){-|oT؎aIӒ6|}ٲ1I{ئE׵Tx//wח0KKz%Nͦ' G.>nhu Zzrc>Xh45Y`*i7]qmôꚦniZͣ+^~Er6iS75 Ey6۷oz-E? B + e&H˲)+KbiZzM#Ko0 !K bh떦jja)EUZ:lze)spl9E)1[uϦijf4 mJZqʭf dn /x,~W_^s!Hfzogǫ BBǴ"oKE5؆\Z}'kp=m|Lo) HeɣCڪcg,'C~fs jPEowDQD%({1yf7b#=0vIʣGѓ+L ˲89i_=!WmO<`Ymi:خX6n^Y) l{^{%޽4k$B8EQ6oy1P mE^x\u#7-M)ǡilBJCjc}T\Kv'K}),#I~iLפkoȉM+beYS7}8![3ð3]W_c*a6:a{m[m]L*%{ϓpy IDATkv&YQ 2C: ֆ "+\nxɲ lZ ,خnp] (dҔ~xO;($ eHf6g`SUV)ZjPXB0J?`PRU2@ˋ/#拈0G}7̧>wu]ID ^~Ur nIel>]},s`15p@ st4q^{5?q픅w.a?{5~?szpc_n(@ Oۺ$>qpҒ%uI-iN%8Zi{<ҡ;^'N! qHba;OʎN''ï| %Ao7]M ""0ՓmL]Ց')mW2ܹsaQDZc 2^$i,ت+6$Ityh$/ۏB6_d9#ߣ$QSpr'B6m{X@WX_)0tiO"{ǙDݓ'1^U%HԴr'PmV'Ӝc5-nU x?_v7f`:{.M#+&Ȅ< H(.4-j{mXHtmV'+V<eZ(!P/9tm@0cKzW]-)vLz-w^|yǑV-~TmrV~۟1ؖ?41M{l* )sqqAŜ8咦zKh*!?<~R#Hն-_w4ok{/n0~91UUN72Z.94yP.@ /i+m}0dWeCX6!-wjAQ6b9AaqE^">˲8?@ϗ\]`s(D7N*Zc~/mł;\e"S,۹'?JFrF>,OFc D9BB<_^E^jVVu ) [نeSmm69w"kQ$[&rNT(zxrrwKOn/zm>QU Pyv?D O<feA4lZ6WƘ2.M]Ϥ$Qh՚JX32GwMl.X4YOGr)nsG- KW)ө!a0!-n*Q4%2*ksrr$ XSrb&Ej(3 @v8+[M>,q*~{|բR+VuA`4\8鱧2'nYC7iDHWhetu$Ķ 4\2 B4n= Dy?S(qSycka3vq2./^?F4ڲ,=/t34Tdz\WC e$:GUUMЭ(m_$GW&;9uSSssL2阦J'nܻsF6cRe1tC}H\]CRU2G$y"ːYUEeun D)Pe.W+E^zW{_yb/LopQJ3$uK^cg( iNI_S_yGV(avqragw>qm[AY&tYlDvEf޲,EVb$SIz#oVSu/aEP E\Ƴ-%K :%]{vvJ'\^^KKuE-Oe)qRiiLrް!.%oL,f!'r899b:GRԋ;C\?#78ϙ/hXM8f^c&Y3MhJy/K*'*fNѵ֯ CvedY1~޶mi "=p:%naO{6X(GZ Hq?k?^Z0buP`.öx&L",~L&1Fc -\mF۶Va~(%jhE B֛+vȥw\:%j9FSz8h[58&DwEcI׉4Ms֗kvws3Bzc0E 6fTs*C'I !}hDkr߰8~ ;h/ FSY 4͞'ձlLw|r󆏲ƿ.Q,zJA Ձ0J{eyG<ԓ2)x/̫ ֚e uptt6Lv yrA0BөVZeKc%tv<@,vL b;jp-SڨmO?il;] AY87El%Q\]sr)CD]rʫP^uZ:%}?OL,ieY2N >8{Mji(0&㭏yvmKsįQwZ=kEɄ6чkrF,ed9[IVoD;.0:ȑ*=2nh/F_~#rl6Q8u`Za=)>-!x},>9jmK|3FCo7X'QC~ ]Z?8IeaI!N1/qB%I2DL&1C"D~wZMku?qd|/DMݍЇC1?#K ko%R~iH٩r4DV'qhɬD_Ӡ (B~ǑިUTbnRtHv߶Ν;LÈzIZ\Ixk^yȰŸܿ{dɿ)Q-fǼvQ7a/=]u 4yG{b80^^^ 8lzt^VP&{;tmrIדNUˍw0Dq[uU13G[0܋Hy.G>R3/27LSMݩ>H,Ғ錙RpUjkY%0]R8w؇4 _|۶9>>'pWUY_sbpHޕG $޽{,fތ;7_Ll!ypir #;fi`| ;Q۶<~w4eS*?|gvkaoPQ 붋׽Р\UE~GBH=l9>^?iSM5MX68=9JMC[!뺨,O8;.dw(c|>E)OEkxh5 }%hu TP8N~፾xmi/8Prmu %a6a&ųe˟c/r[A?za|o' ^-<eDSPE"$fUWn f3/'|Ͳ= |)[QY/f:_T<1wЎ5MSƒsZ(eʹě%kofa qEnqѨ,n۶IQ$Qisbsu t/Nt`eA+| ?|v,?yBYovAXú8?"vż[b'uz ?3~g$-KyS +:qojZMLTd4^L&L&!2>V,>`QpCi|Y(l<[x/at4Mz F]RXyJLRF}hʲۯ8cL5/6 E?LVS᯾{w>>E1ۗ+NW3ZdӔ-gsNNݻ|Vu'w&uCBY[vFIHjt-Mv+fs g!hꎪVyģ;X4%wl#LbRy- AX2 >AbX]?"mڪ֞Bi)ڶMZ.t\d%&iU3 E]1Ln.Z޶/) ǂ(F)wEtutVz'e/M3:yaB)Jպ7PqxGbҩD;FvDZxWCEzF&]w#-ăӄz>bX]uW?uh MC\ O&4 wq$(p2NmX,e (P?oRI(npVfEYJl'>4% t>˱0t9==)#+.(\suuk0X|ZY}r~(uű={~C$vlf?P2)Ɂf?`ҍ`9 0b˲{Lҗ4%] s|KsRma֣'E^edqj,S>d[_;joڌRfOmǯ`U ˥.by Y2nؖ3WdI(ѯc`}y!Ry:-ޘw=TUASLÈ^=rfUۍXD2t'Yu]bz %NE4WГnm}2ð>iOMW:\Fb.飽FJKpb)]B#Dc6a WxEal6עl$`t]S6 Knd;s?0j@qY9]TeCEeYqY~rވIUúS~G!Na%I0-q9z=ƤfKUKUHh%Ib&.\;(C4Vdy&/$նoR&yIʲw>s.$-avq\lўIt $ۨWWW)Ji/XTuA=# L9Q4g}eL"ڮd6u} CPQÀvb~tCm' !iLv }k+R%Bd\EoL ڎluӲFQp;?"Msmkfc6qt4'>HI0A1qeYٗ( &!,J)-YX̰ (j \o(˜|RuD)B KY''ާW]E17BǦkV[&g="ٴu' tD3?YobLsT OL)u-4d6(mM+t +FpA^h׿!汓>)SúH x8_/s\ץ(*6]4#YۓVm*<@y0_L C2Omc ZibO|G˒")Lp]W{YE1[n=T1]馩^oy!iFO|!i;@\1q|ՒgDn"ۣlZtMC9PeQ~vX~>aXEo}W^9gafy^0JFCYV8(꺤 MS$8(p#2dEd}*8tOW|W\|JJ߬)]z#( ?1zFFؓ*%8LvRSPb1q{i+q_iR2ZqJbJ Էί}ȓIr0IDATwnT (avqęocCXXg]M%vb4 uhzTPi*Pra QMN^QU,~}ZqӪ(u҅w)д mWbrY o\>)fiNtlG+L?՚ݶ|×؟&7k}Z1~ߔ@{Pȕтj@U2R9]'dP 2ǂrӱd_1O3I>mbX/C~_LC Mr aТc7Y.GC68XgVVwN z$5>x}Űn_nWL֮iL:ILs&qQUP MӨ+>̽MX)ߴn8~e?wf O)@ق/ꆺҤE,<ϣS;R%s{+3[ŇXo}K i3ے(<EYt"J9*k5 dZuIENDB`pioneers-14.1/client/gtk/data/themes/Iceland/pasture_wool.png0000644000175000017500000016102507771100213021240 00000000000000PNG  IHDR3bKGD pHYs  d_tIME;dЂ IDATxwoYvYƗ4&*X2KQp.pl@rlCU"FI )$\ؖdРКԹ_ 7^羖4ݖ&^ߕ>篟]n{xooQAo|zW_js|l0l!*( o1ݗ9'{}oq]6~4PA"7yT+ĥσuـxo,3DpM!(""R)Ԫ"|P .u\O~}v]6NW*//CQ6PPh]5N"߸<8>Aq`رCQ߉ ߋ \2@!`PnT@Ja~O]?9 K~wHD jZ4"00!Ӏ75D~~wpk:σ]l@|+$$Fo?I,\.!AT>A~ѿ3|s  s_>P췖}0p$J Pf鄚]BC Z7%]l0T9??Eh58_KQAф"o(2"zc""{<םznԹ~. |; fY8jEB`3IIe.`*"HQ)L0D~9sRZP\6 .mS >L g|[\FXX1P- `%+iF RL{ޣ_|P. ea?ˇ4["R`jŝa{mW+1IdH̕_].Qg (.4C~LUAŹn4yڿ\RiqE,RhP\6 o|`Hy ϥ;̪'wK#²<{b(P0%P~|?Ezy\-tIR%I(P>ѵJ'Hj/p!C)Q"͔*6Mkq{*,"/?w]Lg(ގOϸY73xHo0M j9/@7io3~%"2ݡ/1@mycIȕKz_ag (./ɗm2 H ޥm))Vz-0aEN7k$5hPPEczٸ%p/_}?{A?_i_5nTZ_ph Fo?@5]0Dê]D6&R6][ їfÑ@h 1@4aEOe^j_tLǧ-(.  [êA;Ji %.{H0D+dCRb*lC#AS$2j,mξz L0kC%ŵ`t2rc=)b{C/mt?s4fY7U1vһWo R6uWh-Pf5M1x/ 5@|E;0xXSd*dcXW#꫗e Bc-o̢ER1  ΜE~*Tfc.΍ŘQ}\Jh3ْw>'1BGF0õy&p]_i]_qc R"hKi4^|}5; Uvk4VT-#=Fbcа{+"L'̣HRTulZ[F̧j7jhV%&@UD<~mX|oGI\~߷{)th1B E,I բJ֪pzsZ`mn]CF#QlPqPd [k]#Y`"xEK 8>A6%?/x; -A}!/mWwԺUE46)-<br T 5Ph/ ͷp g[Q44@KK6 53d8 Z (ohjG\;Ǽg}%?砸 yx<މw0 VO%~6t҉ gԡD1BcOֵʀi"ls-UiK)+`.T% 3%}Ծ\xO)W<|K3?#̤Q.=>>7& )Lۘ{ԖV~jt֞J.n7P{i/E@J#[ 3ZSSxun*N?:LG)(O?-[\?xAvtw/FK:d2mg %6PkgbaNwU .jzm Gi D.a`.2sR?Ǖ8D?^d辕X SD*$50VP\zioV֠3 +:w?/fkxEok#NKr?&1%9fqg<nI `x66sk0=Bb&j`О'qE(MRq׿J=o (.=yys01(.{{9?$NŜV?yڷӚ[JS$4ɬɧL/%1*6>W! ^Y,>]Ψsg޵" %L[PtD:% @^r̿Cd¥=Uiw{\S_?[`|Ҡx;J3M^eњvIJlqqf8@zhZoI(G7-x~^E9H˕]S$ /KxG8>Guf~q\xA 0Ë8JBEV"wqÿ{gOTI񦼏ms2=Qi"Nʜ4G3FřҭWYS8ѳYiHu'1ӵ/pjy}.}{0AzYFOzU9mLtSMl^QNBKdY]3R'@JE~[E+/-Q)Aq%W?>2Ph2>b5Tb%?i !ːx[;]| fE,Љ2 $%¨ڜf:R}" ŢfH?'/⦆r~͓1{,&4ߛf P^BS4F%:ܤFE5G{KV*{ȖN֤"C#K$EJa*Oװ87\c|߱7 37fG"L?͎NiI$%$1t IMWI7KDvxS/A S]ՠd}y}wsɊ s4"n:]nJy-Pt `z wӳTɶ? ]z|  ߱fFj1.BND#^ؑޙ⦎M.Kh앶}Gm4ɛiEj! 4RPcqw&ZUXgfJ]yǫz#/)Q,y,]h/2$i 2~sq6hPgA_"vh)`{P?W ?%r%Ï  /CdS9-*fĖok O鎶s*]k'8sieh0K1vo} \ t&"=cBĵb/pFE\ ,N(v+a 0:n]dPW!"q2f*FU"~Wsd)_ E|O:õ3)$Q÷Mvʦ\KK^L{֣#.yߒ`ⷴ H2y+}ؾcwivzRdocp̿O&SGM-X m 9]Lأ3IN@U2u^0@ЮUj{fRiR98ͯx'P(T0 0zwۿfl-h 9BoRKf̅gh>)4V[CcnaN:H8YEHT[i.7 fL'I4\*w]0qT]v0~" ė.m mM=D޷;by@qcZRj" f02m;щvlw9C`d ^ån0jH+vj_ڴGy"*c^[$ R40SӸ&̷oIfsػ$QC)akTxŁ M׶W*O^*]35ک@7K^UW0_Gǧv}Jر7wh!RjB"y[80ϙFpQh'cPv;X ~n a-{(mS'@V|Jb/ks2Q3IfSh9y{6)h-('j-hO>t3Ec`ݡ14tqe@+j$:jEdW)@&j5$a،qJsODDߡ_3?l(7g]j8ј$UNl<׳^ÔҎgIvIM m{Iym{< huV[&4𓘫 _]kحƢMKbѺRR } Pq&nIR!c]wi31FhMP!3 թ! wAU__72gz8|{|~d6 t"w9dhv$$ =-M2c)`s^mHfUr{$"(\|$N^@w2D720^X@G1֐>$?-pRxUOyɃ$K%= ׆-to;e?f-ƒ;jF}qQ_eOstC?wOwY A@X*MGr!$ŜG<$ڴϬ'IW[8{E|W,aapT*}>eݥpL&u~i&'g aVE>j33}!%յwEDb-Q+} f%dl 6wXjWwFX(qq֊wB$sE(qTS@+3PyŞuPZJ2M:6#(3ɤa'ĥ ;{(' K&.i {nd?5EJ7 xqkAkFES({EroM/ Ld|Cyꚁ9_>ޭoT2jF NĉIF'V%^ti5EM 7p-m[8縔=A2A~=M$ /'<9u\cGDw.+1dlmX]Z}ӠZ3l{\sMZV= jx&74N ABҙ1xգ/͜tmN'h(”h &=\665FpNk{3W+NpyA"'޾u P>>Vr spk$v׏/1/)~G]1GuS= `a&Ib &\Os.&Ҷ0 Ȑl2#7 ǭ5dM~3}Z2/s' C1&kAa=Bgf1FhIk*ɵjLE}Σځsid*_!~o䠜"!4jmKN"eVW&ˮ]‡QȮNyI1X1%ىuaXPjc]Ѭ&$mxc /&ꓩXH]3=cTߜ_.bF,Kiq֜hbocR) Nn;&`-o}>\* ֛=n#-Y'^9XÛR?nK"[hA{i\r>|:(u1,( p7X?TCk9.E/PufGBjuOPP&>-IHW%@玼SYIUz#K%І URF6O 3='0]r@$U!%,Ϙ!^!7xMF/4"Sk8*>Q) F}B knb6P$IuBjyV̾/Q0 % )sV i;X6XCy=h,+#(khD#6@b'`焞/)aDƀյ#$H7^bLZgȓ{RzVkM5FAgsiD2 xATz]6S$wV!3c{?m1K[~"z30VLMYji&sy:(\G͗^73dzժ7-?w!ñ9fS),¸nRC>0J4!?ĴjBjS}a|pP}1V4*`oR۰IȘZ]pSkefBT7ElkeDZ&ti|bc7 xˣE>6$I;"'5~U䛜kXUu+CLX.$}* g^/mT'T~v3K/fyƅwzVgo N1!FJ)hXk:wZ^1Ub,%b} I_g3(m_mbl3ʾSPbŴ/Dۍq\̶GN}o[ jmIFRJJ4DiMkSqAumY)qKsm-T?K\.޹'mCRsgWZ& G$ X'h5$kհuHژ!8(eM},jT~>;G榎ttE#P6`9I!jg>r3*޴߿NGstUC`t'[&q)& RKw)=!I2v=4Z<d vW/ބ8 uֶ^w&{$h\UAd#m$׾SFfK&E0MU1WS&fYy)ξmKU8nQpL}]HhsϺVN }UnYjNft|#<'q̹jߞ1,L=kX2f\NžX]\5N1UTձyYlI4p};x#}2ԋ4^3p+a„ILq>Ř64{H ˟=2;PtF`FgpM%;/st-x1+; .&|3arsإQ>>v8f܂HpHAc?|M֙pz ACS ]\{ȎBA#w(!!IIMB48תɐ N_2YfJ-MJl&GqԩD"G S>> 4})I@ 0In=KCך.-t.0kjCHQZH*8QpeH]2 !A:[ s)3MLhktX^ -Sa\vA'tx>nM չZDv"taB|Tzoͳ!| IPֆ=#GH{oLuTP&ҝv5ɉ (9L;0P{D'|}.Hj! |QzSQu2I !e"*3\= `\wmBU^LH;7#n& r &8.#C .LlὖݑFmq{h>VoIw,[G'BVؾ*wٞއݖa(}ky+7a"2pVtb{u6_c؝\Vqb`w|w̺qwq>=`C{ф̥vPgg|2HB%캁,Sc&:_ጒ]$o?z*@Pj}Z86p,pEWf%LҒQ1Y*bM`]#d>E1թ6a9]kVx YR i@aB;;cRX.^xϓKug⹧T=bM}#?Z{Xl[J8<<Ɲ[<_8>Xo_`;0y\%ͧHp*F] B|1 3mΌޖR{=BfS!K&x^9ytvo 4il7:$21fWFsHTY$I[DIy@v,r[]w=SO?(;^_C9O?}ݣk}f|FC!C?Lf0n'Grv>:mYp5Er1GW~ Ӵ^esvBe.xU>fxxvQzK{wp;8z]<}֜n8Tq(i.;qp_ 963wmה&Ocb~[孲</ae$Q' vBbG tJc;b=DL& 0KN6^@d%NLܔ,HjP|/~ ehBa7S뷯svv쌇rzb6ukZEX;ܸqg Ͼ7VĜ&_Qd$l݀ϊ[pTJjFM|iP]/v\v$v'%Q+DQt˅p{w>!{pʫ/nsδYQ7\v瞾 {|cW=^wٚw7X(}nini9܇{/~>w' '8U&) Rj4=B:0}¥xljk̬̜R ci/GVTkqcZHVXjvm*ulCT ؜̼Eo6ńJM`ho P;v;1G K;"wBza{[׹X~ {?8T \~[wnSwb|O0Ն's0M˽? Ŕvo=ǭѻ'lt +`o{gե]Ӓ5m5KCM;t!`aHA q~Z_WJK2$j01ɏDkJC::Mb62igHi$eץh{D @Q\KB#|+-\5rmAф@-y O8ē,o>ƶedd?fh1]9+GK<{yp/9 E'osmV w>ͩR)۬^ p aXO<ߐqp8. Q1bA!4JmRz& {Үij¯}Ϙ3A VmEqjxx S J 5Ccqխ Ñv6uZe̟\E$\.$7 #̸rqQ Ԣ*\L2 ׮r|۽ T-vX>8}ѻSĨ\ aU:%1x k,,eT(%Rv^[KڱoXuZ9lXB%1!xݜ}g:Ԣ1i6kW*6a ռF `W\=bq|uYxRM>wòe>00 C;O^ǟx_}\狾 _%_K؃dD(,({=޼Zklr/nwxpāÑ5;jH/ w!?Ƙ;չUF8X t\;f9T޸[9yD܉q)˿9g_[*)秧LH #eϤ9 T J+>42-!obk$`M5487lij SТTIJx'#Y?fk Y>p&w3HQWrkGf"+2n2ᙣns%2;'fk W1ôٕQ v긏E<~})xX#!dlw[wKv8<•}j]sMs"0qpn7Qu@c:ܾͨt";΋ZQ)41U@eC\"cuJ#raw(ر1>HVלA H{#)eftdeIT>0¼1μ<>3{Mw~ts !RFX+Pʝ+;0v2 C^z|u^{uxq&W_ (# #*O߾^zͤBd@Kƃ#vU|Y&a̅Y P҆W}$ž(B؅tH_ؙ~@@gr喻N]6bӘd־zmV[=l~:(xkUzi& `VM-1ꬖl.0d:N] Lֆ!WTay[^ e`!GDž=a9gv-e\^Gxȇ]g~W_U PUr,f 4) r+[9[wNgU!u&:UZ}j ꦀ\`e:8\#4eA~UiQ9`8ލd?̭kgdX>\ lNY=|;ygrtXX[JYp c+^!-}'9gs a2fq4OhHnXR%-~ )6ڌKoV$XϙͣyF}:ë3'|tJ<47hc?>`L89C'ಜ_\&p.%!pf+h.G0PM'aXef$,8~쩈P/ǯ-u>`:g(rdG0:l}Seý7>X]Yظ&Zab1sdl~ֶ,oub-#U4 ˃`,j>U?) K\%=x),j 7%~6Δ+~˅C:9_3o1"C}v GʊiDŽF3ͼ_i4te[m+IiohZȎG n)yj4vlv bA)j9Ķnx<䳌E #Ciʚ1eie得qƈF< vjt7U ŎoGdZҝzݮG~/}&g[4JL8='[ 9_{<ە$R˪V&^lKP':9z-fN /S$܄VZ-[LuaQf'.Z Q'%~vMŕ)(}*ɆnnT+͚v s:Mc7UnXȰ8b\\Hg>7X/\ <vBE1G'G|`Op#_BȤ6@T~DHmD0) H?,6u" 0% ZeX6'Q;%8ns綗$k(#9U,c^5U3[ZM;z ?/*#²(R'ݎv&OnvZZfrpY,R :>$£}7 eӏ˔p%[¸ݞŘjWu,Z[j.S(%6;V;p^Uba33HNG,gf"IV@U'WkF ?1Zu\#TziI IDATI$v#5kc>uuEn7W+ۭߘmv;ܺsݰ:-\~{Y>/e1,Ǟ7ȁRbc7CΦ3ֵ휹x?ia<_Af/}I 2>:D$?jsȥ2.99 ah?;hNV< ZKI. 238؂`33KMIZ/.݁nvpM Ca Eږ2Gփμ(s^׵(^ shp*ج׵dݢK,Ng5/N ut.qq\0KFHIN׸If {:}K.G*/~i6ab{RTaj/y\,3m[653NǑ={ rpG޿ ;m]ˑ[=B˼׾6ڄCbbf`PO M$~0n *= d]{ъm4W]!0Ų[ٰh4L5}!C;HHAB%@sݼi4q]2bA}~k[Zdb҆,Uf3NqZ'?;DKaFRƑ2<{$nSFkeJ2=nv$m0"30)2cB9.=J e?@dhZesI 0r%A$~d͹E(rxD+KpT9 # [NNخmWZm͉X(V25-Qgq`Kq`Tfi˂7P\9<5LCex$ q>fVN iT(ajmߙ1ɦC=nXhB-,Cafu-mLxySHSL) =;,h'eRF2-0FơFu\=x@!Gq}PIa=]v!F5Ec-s0=`SkFN89=a>gڮmV=`ne͊zKu2ZΥ\L0-2.aJ+ p,l,+1 dB! ݊؍Ԭ0 ^Fu`3ؑ1(EBxun>jf)3 JԵCeov[v%,Zb4RG%.;4x P(i8n %f(acpx߿i !\R95'CNe? *AbsMS <6{Ä~~lAH͡xCe$B??%&v;hwIIx1\; "%^&~jGBBSgwd-ܯTeɆ=9c´_Qlqvz ݖk]Z-Lff}δ6BRJ$T+c'6rdoorhs;g )/9dCZ!`my 31 A,7C.l)]to f3 8K93D! UfVub˚ZkuzH 3\_Ð=[KsSg1'Ac M"~\%D Ws3'B#IOޕtQFvqrzn"Rʂf5Y^Y u WuReN즉zʹub'q-( akɹÃ%W#rғtr[UV90mij5;1ݦv3#gc,zWB1&yl!v:Ȃ;6P!k c 0f~ DZs[qm% 8L5M !|K ]KhjHILj˨M YNC ø0,)l6[6'Xf͆vC&°mgqUV2M-BX.v>W9ppI "\Y : LYxpxHF[`dwVŸc[-۟'׆&EIR4sF.i_b/-Y d#l&+qvbɖzHXX"C 4L7F.>5Z9%mtM<3aSH̚&@FIGtb K=laѢnZvau~zuvb]lމfo7;6qZ@dkt`JT"6ktZ\ ,4zfٶwսg+GV2;+GZ m[LӐiSyC2\%_5|zi&NQO^+qtd!8|j2y.Gf64\U:J0ZE_lD=ۂwqP's[JXZa,ʞS*TZLq=pqy  (V-_\p?>gٖU.r mgX< Gу rP6D++aДו&-0VBu^N]V;+ًμ拒CO{P&uv xṚlrp' ˱TJ"@hZӒJ~i}Ng<1P|"_dZkI11̓Cm2m22\Ɣ/t7bU w0#m%>8.-h}ZB&JdAypʬpdT9XȒl/UZhG&ꬤ9˸wBjZ_*wgRbX{VoJX.5[œfq@)J5 ,'TcƘܧ5T%g̴: Y+-1<3#x3:~rO#Ǒ~[Rx'=BS fQ}fAki).PB}gy~d )I+W-p~sJ-}qk,\ըyy2ȕXlֶ*VWaWh*록گ"q1/ub*fz$cpAE;M+͎yq$n4N<޳ۿ´[xֹEg-//{.Zjnrmw-kbbϖW_eōph*su +`5h@Ԗ*Gd*Ln szӻEK)'8`1\ [i:%EK:gKT\VcgjRS"1zR 3:ytFT*_0hzz&~ nS3#4ݴ4Ǎi@0FSm474}G$7I7WT>:#l^C`<8b(M 0=C,.WJ7 .}d z}*C%+qbhOXKrV򦊵.H UVA)sV%Ǖ9Q?VV^%T*Vw) ,NU|xzzd7x#1Stj)g5l$R  s(̫P֢+CHκaHA(1:Z.z0*ـ \nM$tU)1'3~p瘒tcJt m 1 &F@9U{nm#gS}t  ܃qJ1mlËmKF@ [x-uxUR PUԿ iMqJP=_S,JIMj:{T}*ֳ^CMNJa1M8R]y4(mK79bצOg%+pk)X9{r fS#zJ@x/^Bk 2(nL1w=JiliӴhŋ ؅ n1CRǑ0FDd1D#(^Ɛ+rsˍ*WIKa],XUaH)I*B(*qbk裊_B@>rpφs8@ZzZEw;Ak(r_e%ŽA‚O/0(lw-^T+≳rr*꣊bHAj(7M@ggMĤ<ǐƻ/bS<'!0O#ÁE1F`397E#C2EVpx)4}K.=Jt|Bvt`l}-/w[~枣Dvv6:SB(||V׫EW/rJJhS+;_Z:XS UUhrPVQDU_+P9Xu\Nrϴ4! )i2^g@͙q,V]W*J}~%@A @^Kn HN҅θ|.v\M^^!l]\U|6_W ?X:FgL }꧒kJJR*܂|)-CA X811t9Jԥ+5McBH| k,}< 3ͤP(<'-HBnf0k0M#k.4mf:!ѧHݠX{kz^?ay<%lkմuJ\TtiCeUEUZaU@Kز*ygP·Vjj(a.p5^g6ű}ԉ,RY5SP ʡu E؋Xw˵B}2vT$"Dt#a0Jr}f|zS1f-1O I79Ĕ0Vrm3ãRr] MےmcQ)K GCY(CHp_p]p w2-V¡b),x*UN*TX,bOUC1E˯ZuW,kf\\]_S*\ֹJ"I.ַ*,׺CNK[oA\MeԴ/v6+ChٽW*wD? SLZ粬rg'Qc&81p]1DJ{B,ȫQ(PA'0 V{=<ljp}ӡTr{ɳgVamcט;zêRY|k\tyЋ e@J$^~@ρ~TlYxg*g"x#^w%)EMk\+dKR3kEU>]C}]oP|ܳeF QS<m>S^PPȪD!^X!BRM1R?2 ҂)2O ݶۇf2gKJ%,S.3 '0&<=~J3 #3:@ny슃NX E1D+h캔<.F.VlFH=Zza-`UY-ɺ"=|8CՀlCd >Kqs=rͅ{#pOZ^J}|Jk ɳQ yg-ΕqP)DR0W (L6@*B9lY8ᛱ4a]#Q1p()aSUIX{̂wooyv%hR4 L3@=i.a}PB8$DZYpUlTmf%b;> (fek2{_&{m 3])hȬfCuTVDqpp;v}#|]kH)2#idRtVCbu?~~we8; } Y)hlqIaHg;?@yfLIfCR(-;U2WV9*+R qfӿMw^]ZjK @y-,ٳ%{r1r-(ryEIwRIxe\Jc'ŀ;HZ٬DX(ZF6@ c-< =|jM8IIŒQ29`G[PomVaAyTRc[!*9N>zaHT!ͯ\"Em3HJUSB,UYMd U0IagRY^t%Pŋ~^ s*76Pg|T*Z< <8C>J AvK?4`t$ I4RuN acdLPF Z@/|H^Ni8!( E;lt~qe>\Ik3IZBU)9V:/7~g[fTɩ!µ9,(@O9"Er>ҨJR紵T=q9g JX)+T2fz,S TV겫¬_TPY~!A ) -d7blEbč#n([n9lcL}0tHJSƬ Ieim40y~80)i... 2<$v<+?|!u%^R&-3RL9LR֋1BardxdgaVtxBpFoIB/Wp hT)TGDͤmE)[Rh*AZZtb1.Yoni+n\*U":zb !LF,{3҂0ڈDi I, $ QrL EN@胄Y1QQWcw=EaeNAU,#X Ul̗ͨ1+SYYWU;Cٓ$MajsH.kSPDT2(LZ"\v!Y1VsbΕՅ=exG 9lJdxmOnv4}G vKthpՁVE#7{^~)Ϟffi$dJ,v wMnrrgx~}7yJ-\F.Pnͦsu󫛯={>b,,;+Z,RDp B\R"N3e3)|%ZUK ?k#x罍Խ$LXhf#zx=~ᄏev3ݾ#:t82M3W #֏|fqJT ||ɳK.; c֠M +,N>@:fA-F+ni?q׿=ӟonAB%)y5'W :ɉ?1+IRߏUR > I"/F& j%%:Io~VZ&ڎttaFܽrN9><ݽ={=_[nذ]c;>9.(p9#Q% 'J'm~ƫg7~~O~kW4Q_RJV7!S( ,2 ] YLrcp![>,)bp%+^Z(VM5w Tr$X?CIA(+NB"zL"~Y ))iP6iB§Di J#!!N4Q +HIa=iḣ nP'..vϱf#f L)`}{>|yQF:^qnۯ=M^ .R-W{9~~3~|{i{erG_}?g]ȃ4RKsv(%b$7PDR6Qj`AupB "`͖?s}yIop PBףaNYu.{@unZ%w4!x jVU֨ K+%7X)lr-qv}| NGH\e !%ON>#F P͇b6=XuO <߷\J CBg^8~4ŏ4=)z6ێ.m4m-!|xt;?T$gg_p<ӌ 827no2lJfonsyz _5]GD>D4y.9) N\~Fi618鞦Hvis"fC V7?Տ~7OS/-Z%Yu3:'0d8)j>TdEqԲ'x3#f/%yFͶWׅz5ûqv$\?{H>{L<JkL4m`F`$(RHl73!R>9|F'n3'!d%Y ~OozÉ F4y~~N+-w|q;Zehw{tc 7)HB ˇH=lw5-~|?~ǚDJeFj @d;Љ=ZktW]git8qiT.DHci0<&ǠkR4>%};H`-ɶV:@K7n}o2BWd%IQ!(Zu(bc45϶FU.*^gvϹ~#a&)sjdV?Xmm[1 5ktc$ln[Ąh-7yAˉaGOb,MiZCln_kq}6"/߼o+{bt1̄yq+vW/xpǁgOQfp nŶH0a\\%_\1_<>zfsMF#C">Fg8RNTIw ܾKL3LDmPO眼% S r%ij擋H5l(g#PKI,k9OZƺC"uiLUPפ/JɱRURhH*,W\E+Ws|p|"MK8%w"KhF˅ ^<%t2x &Fz-сUHHdY|y{w?+1\_1ݖ_3~[yZelt]ϸ|/xX;ְ=aGU4FZx__/.`J4 ym{R0s (e4yII¨0!Dӑ>ҵ !&AEQɡp`[i4吪HpIW6Ϟ?'nGSQʯ+AɿՌZ\kHL.){ BgU"ՔFd }F?+ dR$jk)O%4e%!fW4] VDt3{LOGF48s#\p0EQw-GR~n4݆̇_bǟ?9nR@E-Zۊ5-io[.:xkO#{vӱm{a;>6lGơ->:o!1#z0C *m:YexDkFTPLӌUm'YDRdO$jAfvAZ>azBm`.rxYB97_We$Vg}@,tSYgFRٖ1Bg%<*X$ =~=4aFړxb;4ʼD4mCl+Jefv~G&#1\$A2-(c5MC2ͦtV: WϮ>%_?'/|_k~72jCsVh4HKYJ] F..{^m 3l.wl/vv[ǖ-_NXsIRk[Nybwh iݴJg4u,a$.DA9Oㄹ.GkshtK3$-ҳ:7\aZrRʛ!U UM~ba_B$TkFbsy4zRzIEHIq& !<G`YC,>iz p4-*}F l)_ݦgtH  R(#Rvk]nGL+Hً+/_9Od~woFW4dTe.Ԫt6H*^i-ngW:_"i7//Hg{-!Mǧ'.o.p>0 # eO$ y'\k4OmGZlףV%1'*IBUI螛盆o\BYW%L_ln Y*m~ǘ }.r}`ϢF,`݌G|慕MCBnB"Vr46Xme3GcڮtC+%]'M7>=a+9ˈbA[lgM`۵|9'~x3{ă4 *ET 'xQ##l躎g.\o[bJ 0m^bȻw7tiy<۫=s<<Q 0̙E:xb⎔&Hh|t/?) IDATej-5DߋmL4[MHfR: pH) Fsтò'BjBJ6E)#Ԥ[e*܀1s8TFb^MANœ gRdғFr:y}4-ʪj>SиXZ6-mm.)muQ)btŴ)*bHl;!\D/ -˒خ;;>%;~ |7?W)?;U TE2aOoRA~z"1n:̶%6q슦bFWAeC $,?<AŖ|ÇҖ1DQA<$LpN^ZgZԶg03yeܦH9JCSz)iu SJQ˨O](KaA)^K2U ;b*a]~&zGʳҲ FǪ$qMZ&X+>e#Ps9J`^ O0Go;RJ >F7i̚R44fCnzӈk8_"Z@Fcd'0i]^>G?Woy7o_sԦK%V\OYt1:fwX;8#~an{YgӬL(W<౭e5 ng〛gPiv8yr<=>2 ZS4bO# @3lj%>@i`%FT>)]â1(wt5s0dԢ1v;0r@ZQK7EIJAzEi:AIJ! $3 ZWejnlD,]'#!(-Xlײa0Vf/$Ʋo0VMi7xVz ruH:;b2QZʞz^??o-?o?w3oTH9Q& { =RT9K(%k]A ʝ-Ͼ@)LDdqGJ Ϟ_B䷿ 8Ox9<9N4Kh9#iiT2^R…[{lP(AYˌmZt TDTcxK|If99^P16Jde+ *\%ɻ\ҽΕu(cSu.> r"IaLU̗ѨY4m _`98e7^MV c DEņl/ mg<@!$Hʀyg{{y%o~/۟+** 1 (pN|.ek4O|{pm?~7l2#}o麖x ~y<Á .ͦ#xb&ǁNaXC 4%N@ṶŇCEZN:MK0O9$!aM,i׶mGt4J˱KW* I>TmiV"^ЉX70+_LUI(EQX_17D[*a*Is/p+i2#Tl;~S"hW+XMam䜻MNj/^sq6-\\x{ݣ4n#%q mm[.~V6r/)%H:L2SG`19w7 87n .qФ#_};14g/.xLJ'_K^~-19Ot}g 6j&emmu( ̘%e2[s¶2R 1rg]eq 74L=o/El`{3nn/k_wo!r&QZumgdXLiNJfӉ".L: C0Zz0#+-7z5oН6hs.|{A*M˥b;YWJ Vi Yʵ:^RʠRe[3 BFK,,p4蒙5RSiT1IU<1*ViaLLJc~}%wL,ʧoeSfU=qϱ }6خoyxB9?\C,ЙØ\ 2p^,͞?͛G;{ty-otwF?atTB^UTh(~}Aq~J4mKZQ4VӶVVf=f7EZcFcTPƐ :Pdm /_= R2{Hn$,-J!+\* IeE,7bLSn]sHWͰwDH2Ǣؼ*-H  x-_dy4iэ>=GahvӡS`8pԄ2aSnsZAd9gEehI{خm .EÉnr|N?g7Co[.Sb=|=>r4Ž#^|?<1LRj:6R3#1Eݰi915na2[uLR=qs`q4^t֊2Ābi@ a A:F10De8)p܌ lxJ?֩dJ/ WVZ:`TɖN%Au")I upRVǡ(y<\f3]5 !PyNFrM+Q#br:X&-*Q(ڕՆa<On{IqV"W,7/4V o=F7Q('O2≤cfLs ]C߷&vئ 'DbBGQM:';`KDgx{b' t)UuM6s yR!UE5P U2x$Q4MUhbifZ§==E H+ՒFUAKI9^ RX [|Վ^(JVq#B>'TtYQ؏4.3vDkհ@!R&\\ͨnWqNhQ!!T)s#}ґ{lqlٴ[a`{_߼~bF'W8*ـ5iۋ= X0߁4ҵbJThճd-T2dr0=(R3tC]_+/~.LgS$U{'R/|ZRM(!\:XhFلm +MI0R* oղXHJH@VЕ"YTp\" ":iLsGZM"E49$ҲG'|qg/dՊmf4{fp.2mg'lF5h)1jORi(C1nv #%1Qz6ZhS6G'QJTV T+*L0Ľi뚖u׏1fOGq ЂA(R` I%Ď!A!&*&0JQe5:>W;|y1WUN:!~kלk1y~`%ʢ!<&$:K+L̚%-YO\K{?oB~5rGZ+YB+FRt.r*)Ny;ʺj;с6TuM8*^|w=af,} Lw[Z,)Hө8-LLNM?X(<(և /Q gTQ5gD$ L(gGbH8=Em 0ΑpĘ[y?B?̟x蹺۴mEYm( #>zڶtލX)k-YB7u뜣 *kqΓBdmSlY`]#8g! wټ).33#vΆ=Jq";A7fb>qPcVy0&Hܜ'^A\[6Nx̝M< TCy9r.^[.ýi({QFc,xs>gG2x.k{ AUpDxdӂ~&y/!E#;"bg2?M彰'MD<;c\V2BYaLC4~Eb'qax"E|vqkE/T¨D:QU Ei =ƊOHS}8$Ҙٶ'.چyYp! Zku^{t>Σ1s3`Y-kp!ɰ}YsaZRǚPoK?$N>g͚'8K#hiQ̓6?TT{ϱys3)zL ք!CsDd Xki6L>|fymsC%fWoGAdȨt6Dj+/,.Hp9:lQOJ(eX&ɾЅ#D2g\%ȄwGiasW%A+13SB"9GɵH06X<* >WR&UI k2ye<ŵ?:I(;k =\>=~Y1E&& A'Q уMBz /RE(>%eUf*i.7(QTL)9B,K ' X8 06ub+QA2(_ %vXVD2woTx+ ~wM{-D^ZcxJ{lt.Af80yqɏ_[vd 4E89L!Z[֔5S쯛{Gdڲ*Erk:sF X?\{iia76`rjDZ O^-@iqpKHL ) kI^GrKAjke=iia'%2 #qBe! *m]m)eFn๼5 ` 4CNBjuOY ?f!rEz|_׹s{r$h'|]Ey8$ Mס&IFxY1<*3+sslBVS:oUeSYt96!& cp!kě%۹tdodTPV\ {zyR>n1Q4'Ǵv$~:=="N~Z͖7y4 pK;cJ,1T,\A ~I O#0hZy&,3n-m{{QțE8RzL1KPbww8ѯG x'ȇJv3VѴ^s@M+g(1Z\lz; L` ~x% M,/2SX҄aIrRN-sevL$]y18/3˂҉mIU\.]xcY E楉1G)R@Y9ndӭeALtn T$LD*8X[DumA&) IDAT׈?n8(l ^Oc_h&6ng9uJ#{1i0M[fļ8/h1opsDVB %*q]~֥"bEOq)RJ|,ڢ W3MBEBxIi"hꦔ;\0%X.r=7W>1_!,3Q*)S,+b%&U)n~3̃/Z[,ӱW32O<~ID6yaFa:V. 1=S?6cIIp)lmfk,N:ɏ\.;í"A6ҏ(IaŽBt.д]ѡGկ#W]| )_]5+yEOOTj#'p:`'iy OP>ɭc { UZUJx?x>g<|KfBc:wP9N:'@|'Xa ^.//sPȬQbdda]AnEn|j> 4\jWF֣u+ps: XX<H}9kq2~.BbޡT*Q9 ͎ݶp80',>G+_iZ`yPe?M(Y:~SRz5c^EL)QZ1QZA UDea0JӶm{R:Kxd-!=")3l|\"BxMxQ_83 B"t42Qf յ6*T+]L#~(„G^|+$ Ԣi\H)a쮒Ue6-cW @ woPLYbLUI"]~UִH LU2ƦZӱ'c _ā<Ɣy,TʐO )IR Dveٯ[.0V1zVeZ[BEDDŽ jE)(?OgXQk x HFq}}f28cڜH|G}Cg] W%}:1ODD(,E.7A.PJ,CF}0RHY~Nj#I!R -]X?ff{.P$y97ꏥ㿘R#2즡[.dr1 l) !Sx-5O@mFB1fihUQQ%0(+_W_)+ Mן#x9EM#5wBϷy6YLqj]fAqyq !bRsQ.:ߵ6&),b)D 7˭&Wحj \Z✣?n &zͼg|]N"BMٖM0LUazsND־LJȐމ "ĘrMiq!2/wʧL>F7 D0UAg~aqÂQՖ˛ 0gTQoaBg'́70ưyr.Kk|LѴ51I|KRlvY$ȇ4`Tt}uY,ChqH4]4 n$QEAYUH{߯j9;^},YuH ]#֎zm%KQe/k W[XXǮ^Urz?F9/:kXU3ZfÍ2 xXp($4PyEFJbyI80=8r8m F|8/B)9j1݁iCǯnQV]nHnӑBr9aG?-6a;UQx*Ř=@U08v,N D%*S(E7M^|ֳ]V\0$99}82 q:ȉL ǻJ)6L4Nuz%8PӨ U]Iv=1* USb mp ?=_:ndB)Q!83Nim0כDe~ e ylL6±FSWMazl) OYYڦ˜d^Z)'A+}/b&"֔uEǬRj iB"y ^1eIE-he"7F WAz}˯&Փ b7B? ,~d X8>檃JSc |Rz{+_G|pMjLIjjjp`n;u،Ì[MfS2%!J9Y4"SE]S*-ӳ4ve3xn,JRRLy LLI(+C5؏v% 3D[W\v w=ZӔx~?vV5!,U5#&U)74Mżx gOSm5@2.ʜbBD<EAOgcItdV+\#)ގo( _ɯ~g׾9ʭsGdFgZK5¡'\);%eBSXC4IEbN]\oSgu~,I?y_sW) (f($Biql7U~e{Ih򪩸zvC6B޹EXpj}fIa7efS4cIQ65#)Ng͍֏6):ӘHRD|<ŎsgW;MZ7zmNȩlCUkCV ^f@S?8tvzg+{mN _4&D:[& K\p(jKmir8G|Z) .ܽ}-ͦlLYH0/>C$3J(ü͞(?ݢ0S W;t4 G'O8@'Rq3i鳡@W[LQAs7HE-hv;li\(0a (iV6FHN?{ v3|M>؟I7^lCZ%GP9FX;d{{e{%dG\(.xǖkYɨ*ʺnjaP`˜KYl,QJĈh+ vC\$.s'yn)ެmZRd* KE zH2vÈ|FbYGJnKB+^hӥ" 2T<\`ڈIHجj,& n'89\!rHR]C[ԛfQ%z0,Lӌ.(낪h/6<ʈ)XYز Sٖ9)%P!2Mȇϟsq6-OPh'nqGGI~gUMaڊ".p{DYhPՆ.GpÄ iNb`,FT{iX >ܱ(+EYYE%Nnxs/ѽh(*Iu}+0Mab׿ o^En!PEFcgLlj[j_:_ڦX6g/~JNIkqv hcrV܌qj DjMl#q?5ܴU[S/FgӖnM)n&a(c},vϻT9.JK*Ϟ_͖m9 K,N46ɚo-i]Wcf87O6{Ӊa:q|C؏Cp,qyD)AjB Ln89آ 1:1;Qh$Ơ(VR~ЊņgLL )yci1Vbheh* iaH=c~o'0JI}sM3&I°rB`8R]0S(ծh233ٴ Ps0n??Fi})W~0#|Ÿ+߫RLiI8yY ʲVF5V࿘.&a]Y4֦jj@$fB 5ya$ןŋklY{ޣ_ 1O,^xhpMB`fD ~)WחV\=qqL臁vô{kb%f0C( $9Ek:.Lx/4w61w#UfIͳci\1#Q6v[,M*zŒ.EM]:ZML)0q;=5eD73/?E8q<=;T<-)(%J9hQԖ~ NpxINѵHRfbHL80 xڮ"ŀ .dڿ|'9lyc~+%ꟹQ(JV]"'"Dl٨rL75c ꪥJyY~t81ePw ᢦz[Xq eliw97^p?`-/_񍯾+_0{6uYa~rIQXbiꮡj۶XԠd1OaNyr 1݉}O ]\?iXL4S(t1JzmEWc 1(o11{)NAb6"O#,f['9Ge4Me=c/e-8g e-eQUX *li%l-W:"N1kib3&JL"j)Js_|cgm-{kwG?W;ݳ҆D3-8  EQYe|K_Tq}d8}$YiGizqA-EU}`:"}-؟f޼ap`N3_+1!k +Ma": g-MP%(5eUF4&"_CI $L'.eN,#$E5PZ*Z6W ix7qzw"ΞD}vAFʨ a'~|ᇴ]ÂD$;b.2^h.\ز`=#n`A)'WOpz8lhۆ5M^a=>MAH̋LMwESoQDt8.4s,Eݶ쮶0ewsA2fcvd/,};H4F*eteH>\4Dڂbֆ'WCibU]ljBM"V↘HuY~Wj498}*a*kI|U@2%XE2j\u:~p+xEmPh58ֲ=?M[o{K_TߺK(MbAYه)("H `P2#+>4mA[M۲8R'BH<n,HJ| - =_wb_<{qzGBS(*e]* I%nozLj_Zg_RYZL$q; NGB5R3 1zPoZְHȬ׼@ճk]QabghEC?f(Bv{Ru5c?8-`vҵZ91cXI^z'Z@Ք@)- :hmJeie?$.7l6 BSmKJΟ›{l4ͱ)= گQ}:^lPT6zFAY7u19@1s=A᳟_o߼%DB5^fOPB͛Zc㤞[Noy{{G|@_?ϯ ˻wxo} o_ݣtaְS%pOcpq%q&JW &di`7mEϿ@wI:[-pȨJL\>ےj F9gf7KBgn;n.ԏh+!RW b0]!D%H-*W=g'6C EBIIR]XIt_\wǑa?+`SJC KBwy5MW:XҬl@lN3m&B RBˊӋ-)+T9͒G]aOARp16-pX&Zє%ΐ2᠑ ?A.*`uh! oWnKok7mU7yNޟ_|698}ꂧ:˯ .GR. D0\뚦=e]rx$sAMno%n8ӭ=yH FRH3 )֒FSɆBD)W-+< mgeIC'YWBIbD͠ۋ{Tdrstt7b4%14aGǩnf!hX,zڮև(]d.ɔX~1x4pE] eBqx;=82M3I UMQ$xӓs!4|לeX>Mc~.9}o_,&")3+GLg*3BD==u&=#bܦR峋6{qr睷9R C$23VLP j TnBuE tBxq@{zKr ԢJ\XwBߎ\iՆ\ Z,; )ٜn؟%x1g[EA9~lJڶ(3;ָ,Hvio(@+I "-TW-ZId.9$?4ϩ|oufϺrT]pvR ޑDԍZbp4]tM[8MKk,ƌ9e+7fOQ(832H%DUUѶurDs)隞2*h&0_e.u&16[dHTFIGUE*v M/v#.gm"|9eyspSj$R¸S5e09\yŵ(v6J6r`ɆQ|Ka UUt-Ջ-xTUgm>%cCBWJ|+KÝMZ7Fo9{ޱJ-Kl7T`ѯr ̓G9R4]E<0ܣ*EQ >)88\Q6po"CE7d^v.gqBU%E{TZ -R 0n-GE+tX{ ~\^+JF'[wM UTfyWJIgP[K8c T( 2 )HIi2ɑT‹(%Ee^J ?4uÄs:vMhQ62_NJt0er;v72UJebu`<ӘC<$Nti~qtmd{2byDMA@UJ]$z8?9Aמ՟yǫg׺Ɵg֯_9;~x?Xr^UE*Ƌ%o@hE^" A*U bLL#ntb!H 1%58N*wjL,qg^!PuhUDndryAhb7ZRuU# v8< Q%A{01"3cĘХVǰ γ8Z0nD-v݄̐n*|kxqw5o>ŷ}<{f3j ?wWn_Gec=?d481j4Us""HB9dcQZT5},&>|y9njkdQrOźk F d*H{..-Yv4})AR Ui&woFvK yxJF^ueƭeSZ.H!f@B%˻ bMMGK+aT]KuW?_}Ueak=kMR}/}\]"dM17!blΆ@L뉺)9\P.) ֡Efc34MK)] |n{hvF9"r(mILC\m{fCt[G=(A#`#_uX70gB6T[K4 `Jtge1'jh( "P.eY囮PbLQ/|9,]dZϺ)|˶oRBi'!0Mް9dd͘pFu 3?ѝm#qE@H ch ,-!ȸ19g ]i^cG IEu ]].i_b&uUhN1+єhn@-jE Bbgd)j]X&f(te. Di<ꛟ/z nx馇Wli;|\\C [DeBRؽC0'ebݠk5˳.8y=8DW9OX0̣Ù;Z'u_4/7^Z)oU o[2l ~ I6l@w[n</{R =MqC'n}w1e! Pã%5 a;p 3ersC%ÚMDe)X,n9ƹΠ=:M^-2A $*HH%bZEn*2N|gL|k7mQ5õ>)g?Jy㫾;ݪr:7{]]Z3#<#n8g!eU:Z-j>8ǎ[s1D@%ם#H\!tyc#KQgp|!g֠*Tt" ؔ{J{M_4F*vE2gOVRebb<܇ok=rMC+7ɋH[Hnvlv;ʶJdL()cdgi"3z|jmK׷hvr, 傔|@ܾG&qr ݈n%.:t[|W#R>'By-<ƍl=f0 !ݪunDtEQ'ag7>#~ȚZ7mEo|?!?KYR t"DlAଣ^E^nv eEb}%d ͞N4ӵ:DpB|M_~͸I=M7^q{xoḄ%yv3tURB8N誠[V4p|)rZ=$2nnȮf-݈Ve%' 5RI!#1 Tnp$I&bGYX1!ͻh>* !Xl7=BQ#wXtӇw?_Zۈ($jY7^p^98S* ]P(PUD&k3<*33,sU쒧w BEE]WJ3yU)R_'~7syMZ<f-Gϸ7`qԉq[{|n!mCs׺is|\߿/J%-I%TX+ևD. L.Gq?*ͰZqCF>q{{c[$܍\n/b< 2n}48_w?yf3JVh(B$YQDAo}Se[RJaFO$13How#'[\t4eɼHs&L9dB biKP"Z&+~VUsI릟1_4N/HZ+va?vu .:LB+BH)@^u3 ()ppժݢP`8l:r梥r~e[ X]"%q(-8ofk=oLq6`$jƦa7e"Ǣx.:<\f19N^fk9#gꚮY0^.Ow*~YRa_h2ɠkEjM0N#RywA^׿Yx<4ŵn}Z]qBRjH1%|Z^HyUX$&;3<# j`wŔQ>PxMD`l>jpזD1QUd6JUJLk?C|yr)|tZ?7{X՟:7|z^Z7m᭿xOX_Rj-@]ZRW~YADFkp!2čr&R%e3$h]2gBFgT0Å*b~_^v8dk LqKGxVܽw+UU#(_/B|Վp;IENDB`pioneers-14.1/client/gtk/data/themes/Iceland/sea.png0000644000175000017500000000163111257440734017272 00000000000000PNG  IHDRZgAMA1_PIDATx%лE?nvbcdK,AD@FDc&$$ @9@`yLO_G($nTe0"8VW@cI:|LV(*u5 ZZhh0 "(A7' PXE oԘ:|_25 =Rf; >}ۗ5SU@ Aӯn[pTLE{gl_ja2WD7?4woߞLu;g\n:6bN)z宄{lK1p,QOk{ I1N4iܣ8AC`Bz0,oW:[xEF8j=zD^G}Ԑmfdf2AL$ .C +ͭ@l( ,{u|>I19!DM hUer nx>Qu}& \+8"ܾ>d.益Y.V\݂jwD I(P5w|D ($(RLlL>@+9`ۦP#.S.M@9' &D2Cₜh-mۼݛc^8c%s0o:;!{uC^ab4Нm$prIENDB`pioneers-14.1/client/gtk/data/themes/Iceland/board.png0000644000175000017500000002337111257440734017616 00000000000000PNG  IHDR@@iqgAMA1_ IDATx=I4˝1Ω3xyII6Z h0+ؐԶԲݚzb}IPu*Ë,df 2"O'c|||$l` .d&Ty09P \J!W$WI6xxlW~wWW=˫%v!6->[s]* YH+h\GcZQB"B.b)ґB¤=y8 | 9 {jjy /L(%i2XMH`+ZQ+IZtӓBH/@ARL/o,O 7R‘;/ 3ǚ0BP+B-,}$NOCR-xyo'Ja9=>1j5qlKb܍cZbQ {Fk!ŢἙ@r`i%=heѪxAs-e;#mhDƗ@ Y%Um88_N&Ȉjj/2Z[7/^Q9=p( cd)X Vt\%c 4~P* ddj%{I/;JJZxvwpQ?6u~C+~vtt}?ןxm#IѐY 0ϸ\5q|xX KC_->iq~}rylo5q{sû\fD-,DjB$Oɿ#Y-н̱G28| Z+Z+ii*b l<9%Td&( )B̈BW=ddQTR墣B42SeByv O)t. f]xoi.5wCO AEĹ5s?KZp@]%# ,FDP%85aq[kbGg_=R3%G 4ԓ`&ɑsV@`hwx-ZgOXnCF&AtOztڮQ+!B`ia_-F(Jqqf-"RԄNJpȉ>;g/%h`FL_m*7Jd 3ZВ98HURf2B#\4gRЫ%xؽ".#َ]%/$p!1Ts$$BrΔB3U5TYseXK w1ϧws7GND]0PJ2*H+AЊY}ւq7ft7fN3}*<#utX1"RHT J)DRBtJ.hlGU ÐRƙ34 "&r]ܾ}Mc4~($v$D+-UWQ%Jj%J\+4);HX{NԔ!'MB EQ$c-2BȞkЀJ8X")OXy&玟d BCpy(՚8{lj,yHيmrȦ&pK%+MPPx6$s9[KQXZEDp\uDLDdLeP5HB(US c-H)Э,m9֞븹wL)bۖ7oY.IJA={Oإeix8o>0Tf5i<1#HdQ<[i@Jm$}0nt-Hgzu˓ޣ]L_<7y(~Yf(X)$0QjesqOR*jS`NH#0"r;˞TTiE=s̼ڎ$)ЃZCbE\eb .c!}QZД7Tjv-mY1w//8\[LJ{~Pu=8"?+i)z;0b ͬBfѝnm (1$2S+JsKt{ HC]=Bb"f2m,\-2YP)RRm۱/ajb&p(R*8'>fΉ' חurۗ^/T&$ W-^7\<~'[~hι?a ,-0_}JH a_ ˛P,?z~GHa2{w wmw?7|iC'1{Wl{Y V(4k5)J&O'U49qGNb},jqN a+Qa&QJ3KUs3.IZ/M! 3cVX-I L5Hc1~?9{B+*+L\n4 ^X~Hc7kd2#s2Xܼ޹Ky|#NV~)bɣs"QJa&F~$\6XȡHv/9zA\cv7Xq}aP3l7zM+MԔI(|UEP1+h aFւ@$5q i]t]*)UfUU\_0O31Fj1T+"E4Y !7HQ&r B*Ϙ\0H>(޿Zp=ZU7 ٻ 9 <Č'c,S=Ri{rh}U* -`&RR`fnc[4Ff#*._3!&)$.*VЈ9*nbEAuV'Ɋ}ͼnz6P%7L Bŗʔ"B*uu5_PB0Y 17VR" ENiRƒn1G(H5yħ~į?#JCuFJ=5r%XeV!&hJ,Wi&aD^`)Ѯ *y`aCmr2%=G:"P9CGKɓwr{!H|Yr=9f^|vo[ɐȗ$-þaJt v.,BT2̩Ex2(@߶hpBV|G\t'R,"{{PB#jɇʒ7/^~C?ӁeBj/r ͞O-|yoowtRP(>p&-T'6 h8 r + IRzJIlzRM '̢Bn<^&DG7/~?wkHւ4Vq$-HYJe"87n{E۳'=iێT*sҒ, ;B>ޣZ3F1QZ!!Eڲ?LaܒpKyӋsF:Q:9}GQޓ5?Ѫg?Wwow?$'_ 45~r)i<%5ٖ%)JXa\|p;$W(R~i7_~lM|_|9q,tA)2RrS@_r⣶R!Lu[R;P,fMM'p|1m39h?jFv;4 a7cIrt9$Y#i2}#rͦޠBao)`W_p=k$GВ>ɷޯxGO+yݒ߿n٘N%8G< P TA%#ԪQ@̨lPIaM4ǣc<\]S%_޳+#azYI"1rʁLŗӵ9fĤ98>R^̳lC={V){yސJC-ɦՔ ?$)+.Sӝ&LX E \XYB#$]e7gDRn&턽׿s-q3<>@( $xJsB* >bR\BL#%!#u5 )65<&#Nk;c0Pv) Aʜv ~E%!,dPh2 Tm=oG]roNK{ ͚SCJ 455#my'Wd"(U"TCJt]_SWH nX`)?UX ʸ(R 'R4-R[Tat\M3jRZ-Q͊5H~#Bҩv,Պ\ *(: Κc˷is%F7X]y%f'ig Ĝ2Uǣ+'/(EQ`IylD#G/0aJ8B \J"̕NU5.r(Fi|nͽM\TΗ]&KXXCu#X%PҲ~f1*n"Wh͢f93fJS V67!87l.H'$1V|TN~CRp:P+jXETЮ ǀԴ(%hDݳG1זq4m QJ23+$ Ñ~ma?8 k %;w(QIENDB`pioneers-14.1/client/gtk/data/themes/Iceland/theme.cfg0000644000175000017500000000116211265710144017570 00000000000000scaling = always hill-tile = hill_brick.png field-tile = field_grain.png none #d0d0d0 none #303030 #ffffff mountain-tile = mountain_ore.png none #d0d0d0 none #303030 #ffffff pasture-tile = pasture_wool.png forest-tile = forest_lumber.png none #d0d0d0 none #303030 #ffffff gold-tile = gold.png desert-tile = desert.png sea-tile = sea.png board-tile = board.png chip-bg-color = none chip-fg-color = #202020 chip-bd-color = none chip-hi-bg-color= #c0c0c0 chip-hi-fg-color= #000000 port-bg-color = #3bf3f9 port-fg-color = #000000 port-bd-color = #ffffff robber-fg-color = #f46a0e robber-bd-color = #000000 hex-bd-color = #000000 pioneers-14.1/client/gtk/data/themes/Tiny/0000755000175000017500000000000011760646035015460 500000000000000pioneers-14.1/client/gtk/data/themes/Tiny/Makefile.am0000644000175000017500000000316510462166770017442 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA tinythemedir = $(pioneers_themedir)/Tiny tinytheme_DATA = \ client/gtk/data/themes/Tiny/board.png \ client/gtk/data/themes/Tiny/brick-lorindol.png \ client/gtk/data/themes/Tiny/brick-port.png \ client/gtk/data/themes/Tiny/desert-lorindol.png \ client/gtk/data/themes/Tiny/gold-lorindol.png \ client/gtk/data/themes/Tiny/grain-lorindol.png \ client/gtk/data/themes/Tiny/grain-port.png \ client/gtk/data/themes/Tiny/lumber-lorindol.png \ client/gtk/data/themes/Tiny/lumber-port.png \ client/gtk/data/themes/Tiny/ore-lorindol.png \ client/gtk/data/themes/Tiny/ore-port.png \ client/gtk/data/themes/Tiny/sea-lorindol.png \ client/gtk/data/themes/Tiny/theme.cfg \ client/gtk/data/themes/Tiny/wool-lorindol.png \ client/gtk/data/themes/Tiny/wool-port.png EXTRA_DIST += $(tinytheme_DATA) pioneers-14.1/client/gtk/data/themes/Tiny/board.png0000644000175000017500000004046507771100213017174 00000000000000PNG  IHDR``mobKGDB pHYs  ~tIME0$4u IDATxT=$[z%vndƽ'2"2oUVWg{#XBd YZXHbB4rZGkDC 9H2(h!!9|󺳻nfDdWFd@gd|/@C Ot[  `G&3_W3ZxGpP\}Űak 3Sq$ IbVtϬXռ~_ n XM4+Ni/B!@~Q۳*`J @@Mk4JyrAf \D3\fk2CLG`u]xDM0;R =p$7!ibavלJ]p0LJZ5L x>ps/E .Cl G(H$=D^uAK3< b q9-4c@m0|+_-̟w`V,[_0,5u QJ>u .@:g3#`Wtp1 @ R5b..RR+،#}!Nk3FoCS0τAX՞h)9#NLt~e:&E9]d; X^ch/t-p(pPZJQ??3_1D4@Q{4] ZqH6ށ1FNؐ@|l!#kh| }&Vtf`]گDcXm(4ps4fI.\ƬB:1zotp (7]Ɯ\Z8'6޾ p 3'.dhGŖz٭G>W+^^v_.9B01Q[OC ”3 # hj9Q. uJ8-2 ,-+&8xW\s푽";!jVt _91p909 `\ ۅG39]A -R',4g%crǜ7>sY5LyRV,BDׯX%R'Mi4|oJG L1M_7^) kHj _wr=CKJ\ 4쌜+(p6{RNi- BrmD!g:beٿ M\ov(^)qS0'7*52+$avo?$$zιP Qs7?] t-x $DFWa2!dj']_bhz|[.)WKrR gB:J_ xT@4 {ts}66}NSwAj9p.bt귙@Ђ#BNA(]ҿ07H礽Gz`%CXc0 QGt=8o4ne#BI陹=@%p0<+ WX;" ft,.:fz|M+YbwWѾw7 -["$ O}P!`^ሕgYx6u!=b0' Ue #) t@Ld tD֬_Y+%JA [ಀ3ZSorwA) ;#I)y`O W\O4$ K 5z"Ì -62o Q: ` BlCh/%\"¯YZl̟XYPڣ<5ez $ 0WD\:-P gpK8<MՂ9t._];%\:w5DrN1L#\~ HgSx \hL`V62d& ,pB?5<[->[,[J.!u3b3o?"ݡy&(4\ =ffBKn #h PUw|wHU{co՚e)-iٳܳ0Df[q9K`QCR l!{f.1_#N}xKSLIKn=" LjI[jB;r=,J3l? _j{Jmp Ifec ($ 6rӾZ,9P,ɵR(-ֵ/c/ PP~r:*-_\W3DNBNFYf8 Roc%:/&L_` %l9;V7=b:x@<98+:f?<)&a(yBV:NG&+ %1O:&: =!I+1 س=I}װ̸9&Jseanȍh iJ'@Mcp50I-ke#b/XVt`U`̐O YQ󡐴;8AW8Cineh//w!Z~Nt+[Eˢ܎GI!6lSh?|7!`~ INwOW)UF8iL|ןH\04~\MNe.6`˙?PۇfHjERQ~sG{wA^JtRy[hu,N/0s 1GzF,_LgH?`n 3f Lf37N60%3JpCce GHb:*{qX=L!7_>yhs{=Ô; <L}GzF]zJ 'I`J_M[؋;XK ]I: -5pư ma1<=O7mC{dP1ma1aX2ݿ{0&3կkE8}fSGSjf9mDEznstWZ31Zl:]2_;4-^h/Ww:O\pCV/I \ovIXj{0"hpCL0ysa {Sg.KO1Jc# Q=GrK Isa>2'|JJ B#XP{!1^'<#"_P,fa,k{rn[أ.<:331/8kMvT\/lgݽ?mA2y Ą5 r3 a[̃ѵ% # pψ ɐ 7_oh#"\x t |A2<}_MJ=Mw~%==2_8)hݯ`o`/BX=G9vGO0ϙv9n{8+U~NY2?#7Nzp-sg0,0DڋbcOfpR V| m{ ^?ho7'8D+~ ~|'_LBsKnU_g䅿{q &fjrѠ€05$ +=cX͟]1p|PwQy}a]a 6t9چy$DMX%Y ͣ4AOѰ~!%oW!pf>8B89#a$]PFBs ^NvL7,V5Ba\[@xwF^\h$`Hs;gUAjC}EHW0lܛ@MgǷ= 6 Hڪ9U̟Yo| 핵)f#۷{ &4~C~}GKx W[V7y-ƥڞygc=HՂX`0tH839`~/C &B4h|8>H YT`X:_O՘1Ipb2ܵ#lS_᠔ Q ~n ++KK o{'dpFH$ +3Q<2ۿ;"Fp@LJgW "lKV\eYpYBm2^x K<4 f 9+߾`/uz 'r?eZ6\f1]́Xzh S~ad˜pS0bPw;-f;Sx'iPwes0Wz :M4ٕOvH+C}MӌV]%\c}Uj<+& 6Q홖ݰ4bn @B?vcxx~}tFKJ vw7H۟ov-`J˜C(h2,)A|h/a̛XR^0ˁ&,ZD'Dȍ"tqݬq3ބ pz 0+JjELN9\HRsF *F3mA9'4`. 6<%r cCQlfnn: ^L8Xif?zۿ 2nw1_i<|z @3k&"v0&9ΦoqP|i3 K ͚Mh{naS%n@%rfaz(?ϣܙ#t=fjs}l0uW~{ݾ Ivg m1f&\*J 3l UKWf9+Vs QrrlxF9;tՁ͊[5,xٿ{Rjwۍ?~2?E]6,'uq+ se@G_o)=UPYc:ɬ7tg3JkNyc`Kcc4Ġ8SgH. :`0~{êfj5O~R942?݄1C$VƥWP}23vZ,fZqmx٘rz%;AK ,mFS*N@å9F,p.4< &o=_|OB4jrł%ؼp֧=˕/6jt|45 ۿ%W;5JQ9 t_~Sr@UcqbA\Z ~i-p)<%v/v$C/u.3;ѯ0 2 on^"7t EnS)'}vLDS$Ga١"B+ՆQ'gY`V.77w^nٽzvaUp9\wbgik% m@g6&&qB ?gw#Fi ^ӳoP|d#V`J3{LkZ(.z5Op6+#.L巕ZA߽Pׄch_f7l-ίEAMh卑1ā"+0um# b x:F0KlfU"sG0DĞ' zn`[ANS{ܿkwK$wsQ~Co7BTliJnD_(eL/6 ˬ,,j?<1M,W,6ag`j&KѿGנ=Z3Gu]MNT>_j<`bᘢƤi!_&j}EkdipN[ki2LtI~6sX]%̂,C@`w#L<ɔVQg &W3f:=*~]/ cndyt W>uAUL^ m@|tK:. 9q?C:b}E+ ,_(  b. 7}{~7n^k>7*Hp~Oz QzK t/ˀ)[aOk& &4G[8D#lNo5G8@l[G$eeWLEhW򵿆0g++o citIyluI, /wo}~Uyk'׶Ta0 b 4(2=M$&$& Rs>U4/§o5LQcN˨ wvaι+= @^݆@|`#Ih7LپyO 44S XHG]a|Nus[cbU0~o7 n538>\)I SxF+^{^W0= g<͏@*1Lپ Y%.U7 V IDAT)ѫn& uQxDf:CKY~4W~6-0^h̕IPۇw[]3[TcBnfڞ/+̭Sf-LR~v/Bi3]nNnzx]&rm~?'+0(h' KN0h:o3J)v g Kk }4y#3cV 0d7~f]?KShAz'lݮe)GŨA3u͂ &gBAHBSKҰzC3"ЛKt5=ny/jWooiKV1&4JӛNM0EGSa4@[K1,݋~bt^q9py cİp`oYt8C7XHvs7`H'5'l#mΒF:Wr4?h~8.h&hgYJu:ƻ߮?׈3#7E8|{r=eh_w 1^׬_a6O%pzo;fZ_My5W>)Xl4B1v5\EU3;zGL+p)]ؘwnwo#rIcaxTJJ#;wlܭ7JǓJ_ۿWއC\{X}uϾer|4O<\WEؿ]b|d)%JWRmROS{z|7O=m1%_0x5ƒBۣ̏~Tjx JBsײ'h'f֑>xw-?A'H{/4pS0 _~ Bh:bh|U#6cUJaZjfl*? ]A[f2A f-lң@#?vu/lҪbEij\Az<*% vBw0%mb8e(쏽wW~<ͯpu5h8ZV *AoiK̒ Xjx[neBVL9S$ ?a7Ot] <-a# W/_zϼAs7Q7g͞7Ě@ /|} 3BƯ7_"LސDI]}:!g-CΛ^̪[WQ4{U3vwtV WaM©=4'  @Ki?dQgV-5ui~s]BQ 8#%u6ۆo *%İw ?oZBxh>KZYt+T*9S{F0%5A,O\z Du{rWq^!ümY q˰gE4Jq4/:}@ca{ L)bC%-:1>]Usc W:\:Sh#b,9FnxSe9*lְYS& vIJZaT: zܽJiqFC'? [2SU#Y%cR!pqe:kϫ \%f(@jyB ="BsU+߅]+cgo4@C!'o+жM'ݽ̈́aZ*u~ VoA7q^ OA}J?ogs Mx'P$kP܂g ^w/h:Ig?; KdKBa*M^"2cC8 h/㗸ͺ fn,"Ӽ@ṗq\v56H$ ѿ3 [hʼn.wߖKY(6׭rk#mFq'K @{^ѭxĐв0bhnq١KO0 :4Jv>URzM=\oREyço]5WuORa: vT`=`+ -!IOlޘp:ڿ͎V'L$45w/,^ G^Cb9Ri#fW/_o*>^ؽ]3klT6^7IY&)dJWs"׏[_o]`Cs`35ԭYj XC rq9hnCs1 ٿ߇GV݋ "߿k4􊝚aR?\j(i3FCy_uvK_Bsdi5˯vn8 Q)I>Ha6Ώ(>boo|E_-fHGP4ORXO$C߫})Էdh:څ:^╴1(M~UޭP{=BÓ?N]a6k! zTsVi"I_{n=ЊH{W#?Ss)L hͿ7j7w7iCh.OvlbbD_JG NcQw4EX62ۄ><ί_vVC19<< ^Is 27/ D{Z78eZ COpP{.fݩ1,EsXC&#U{ӳڑ=RḆ@B$g쮵(Br֔c9!9*M{jEf@&i&#H$p}{5!y*W<'[ٙ+铨M/ VB\i׎"s>7!HV z>Ng0ibuB *@c{f5>ϜɎV'XU} G82Pw7צ=2L ")N anXD8%ZSX Yo6BI'9]`V_ĢJ\$Ō=squUKb`5֢2Jmyoួա}-8NdkaZ_$pN+Ӟz6EtTTY%q$-B<+Vaz,zs6Ysu^A>mEDgT- 5FP=wI:l?OV9 +L҈PӜmE /-:ۿ2p*`EHr0ٔcv+PȯEHT C8cIPZGf JGlED8=lϘZZ+yizĴyEZ[>Ib+'W7o[3Q(sr@ʲ|doe9l @ ;_=o V]\}了Bx_֕8DZD)l'H"3-$(%81vP lǮ`2ooC%/rq躧9%^#hhdCF΅]8y/V/A$Jq\lUo&wN=Q+z3y| OM}:%퀎AEg.}ĩb3gyh9vklx78,O'~Td;}q@*N3fXD Ǩ=3Hʦ}^x8?^dij"Q N"'wՆXgnJH4#K@t/_J೛VЛ`ڔ8y:pAZfXlDDH$p;{K/+q+cPֵ9kΎC%5vN:8xJ] }1`s#^6hʇN! #\v-v¶AhW-N4mT2zq2.wx[Qn!^"q`ڱ|ٴJ":͟AB%+0D-R\znh-$q-DE3&96""V_LS $eضEP;S,ŷZGfw.B;KcXʃ!1i8W_;Ïg5ħl ښ0xClj7N*[~}u]Z)}}_]$zGkti3܍f(@}tA@J4։Hi8פ-kτNơxMCT %Ѯ>r1y\UH_iwfG:Aa0]DR\nO;sM KkYUyi@b}Q@_:t}MY8|$$möguÃ9ΰ=FܛQ$W"Xy\w{m\[S**/778ipgAg{zP(BzX:}Q/ӝF8fNvzsvkҖ̱⢸n)kz؝h'6s*Y+ލ7]FXvO8]{L'ó$W"ZL]Gd`b+cvG*^z[ Vi':9p^^J%c[~/!K2i{-tq~0/;CՎXrvo;֛۟%m=uDs %Ʌi8n$<;j=F+a]5̡¹7}6L' 9/:Sl4#$4 H%D=nb}u?..e _Q$"}fyt9vy IKfy(us:Pt.] w>-+;CI"\@iԁ|p.AצbT ><8??U] ºsd{ohis̄":czvwl\ôAg{"p4Kم.Rw1Vh, IVOpB]r &G!Lqpu٫!mvd C70́ÈӨCṠ:Xh A8 '"Zn[Wg^xq͟x֘CEHr>Pߠ\q(`VJn_qhO'*:ݯ lC`0'K=ݮ=D1~֊倭lT@n$60 <E3O N[lOME6/SJbEB[MͶVy1c?b۲F1itp0W)%mXDA5Fˁkm1+WTeLӸ|bj7Cyxˆ'O轛ecU Sr->OL.u nW"IEIx'VŒl<ה v@o-]+> yKRbE<@:mXJa3-0:"[dm 1DUTp q)r.^|Qd)Zgh%9+³|"-OUqs J`{If98z4d!EP@L3L9 :k=$K,se ˧@ZT&""9P_0Ak9hT09STȊȕj8~aIENDB`pioneers-14.1/client/gtk/data/themes/Tiny/brick-lorindol.png0000644000175000017500000010656407771100213021022 00000000000000PNG  IHDRt'bKGD pHYsCltIME  ,< IDATx{mۖk1Ɯk=ԽUEE1 cE|$E$J (HMMJ#UĀRjTqsXk9F5h1k[q5OYk5c־~>_!#?EWRKɯW>C~T_b<Xw#yQҴ?}4+X,T"_Ϣ.ې3A[uT~ڂ_*?G:\`1O~rݔ/2]*2>H FHWP+CRiG^>)_CHϘA" {b X|/"߮|' w_1zGQ̿NmFdI \"P1AJP2S(L'BeG"( P[Xw0iR 1[dz|0~!V ؗ5XĠlE4H͊2@6$[fܤ }7$ U,n,C a;5}/s}YE*37r  [,01f?؉쾇H ͂ " s~t->n+ '%jF,`3XAkhT5j)h)Rj")ȐR*QȥpgRW\u%FRdm<0]4 컔ח>x"סo"?dm#Q9T ՊL uY3˒1@$$Ex<Ɖ4nDPuKVjeΙWaH19."NSЂHy)xj 1>2zΗ A~BR~uAE@&Z)FJ͙Z2j>SJFQB`8N\r˧ZQSH1b'aշVKdNg "t]o)H _BXB=; tAp憌fRs! '쮰b0(f]q4ai$LGWi İJ)Fadl=]`ݧ0'B@>ӵ8>^:}/rE||Wag 5PJ IGԂD2d*2({tU0UTjPM8,xͳEL̂ ,=/eW{Lo+0/bO9,~ b߁lx,. 3U3Z23u)=XզOSXkTc.pr+<0HBJJcL$I!ZKxɿ%Q0%bwE!(j09$|ʇg,|?zꧾ_0XQt6j0=t PCẓZ2e=/XJt$rl/mE2Ǒjb:L+&!!&'cHkϷbJX^W0 VfR 6<XFxkA ޡ,X^(y'0a!@sQ=̌Z %/,tO>;qDzZ v%!R`BCT1O YKa)R$ qƉx7k.3\z/hP=h9A/y'X(:S*3V*O0}Àkd^t`e|:qt{{^ܳXUb4F$  [X"BAǖ4$'<0bsł.-ٖT3VOA`nA򭚾ZqJ7T1rV*f 5&ь &S$U\=SU'<^֙[^{-NcR!2 1 ) aLb AP dE ٓ>x80&'"_X?Pܲw~׈Rb3.? cUR>ۘ\ݑP [Qq &+q" J y9^JB0QZzj%h%j(BB/Pj; T4Ƒ1&B,WXh!w=p\f9\riCro@f@'tͪO\?Xb}oe) LvH4KTW|+@[7\]G?i_bR rus@Q:򂕼ˬ 6WUU)BD-z]=WCh31x8 qh&w[ &@GHj_tL׮DؒAx=Z0?XaՕO -ә:+VOL Z]߮~0k|s泟y;ʒp|rŇz̈́,y&/3dMK4 -hJ%3c"`xaA`1!Ƅ ! H&[߻İqd X<lhE2rx@=}8~;k\q@z/T Z85`S̭@` y%~9f?o?%әifJ 4 c$QKfYei%#OKtdXb004)"HODF4Rjx[Q9{ `H=cPX _$]Տ| GwG@!y1LY/(Hb(O(D׈!%Tzo%[< Z! 14S`#guJ@vʫ#WH:ٻ>?:]ZfυO8 ?co?./Xr~=awݟX|L350 `3YrJ[ٌZ*<+晜328v|۫Ɓ.MG*VOu,:21u`EwC;k܁5B$FW٬%#kh$D! bi{,|M/.؏X1~%Z_E!\c Xm^+cYz[~oKҾB*ym>x ^%SV"3)g?(b4#keDhtgae+AZVnVenʭ[¹\`/)E!1TQ"ȝ2XV6fCۏF+0 70.]|^`=Z )_~8hoxD!#z`EV dʆwNa^f+󙺜evKCCw8DhJb8@L[} TWI-?\qK;c:lpK5g8ee)^ct0 CbCނ&'T!e)r8 '0Q7H&PGߠ'Suo|ՄI0[`ϝl](n.rKbeA:ܪjA4 i1nNJa`%oe8%Z}nV;n.5C\@8ge^*v`E80 P)1k0hEݺBY% xPgrYy/= 8s~ՖO qt&%~"?8K懈\X5ˌ'|B/T!Ysր 2;`MA+RwS+ܭ[,` YSR4޸0u)1p "6_ڗ"PWp,oS~Flz#..)OR~ٲi@3n0`Zw;uzkY71PYXͪ, 5bG݇ynҁցU[iњ^A59-Ѡ[Ϋ1lJ X1le8a<ԶD4cAiտ-8|ZcLgɅo_P7P~'*jM+9"V.Mi2>EOh6+deX {?忇TBAM ǸԺ[ZRYg?xA9݁UWwzRRfj-n]R mFJ,4x" 4ݵef!/kt 028F9 U&u<պ`Z6"Dz=KyiB3ߛMDY!g28޻u%{3 J^ZKj>#Chɰdb4PՓ+kKp/eUwVVf* -o@g#E\(Ti|28xmVJ1c4_+HsACp{@A pmBWB VkB]~h7@A ~4B? [2Q^*)$73]{%W^㳟}Ԓ c0=)gbKgUR->Ck^B>QFs.LKT>lTK^.Ѽ&J4NV%KnU"$XY_SeK'ECK) mCn:p Qg%2"BI(Zii/eyzٛYӶ緼/^)꥽cHṕp8܅ꋩչ ێVC-URϚmc cQŌ\+E}ޕO "b8R+1N TLYס^ӧ(TL0q8LaKt6C<ywHؾ7Y(<u\(O P݃/1h({QEETMMNxFlkahLjyJ\ZB-!;J,Nw5`gsPʹ楰ng{wXc % 1 I`V"pR#mեJJ)JΆ8'<ƮHJ/mrolj(x(-qc ~&!u `>|r~IwF\;2% \ԯz|T%TI10GԌ<#5 cɅ fF'\ m Z_Yo>cTz^Kw3keC(:W0VA]@q+9AD,ʒz:ru}`:q Aǂ`X{x?y]Å`&W!z'':qo8.MOGs漸usr`>q>yYfC Ei4 8) mc)1BQS aZzےZ҇E([D&^جV00Լp/Po)9jVa  \5^JeyAXe0$]ARrp3ErH+eYZ^H#׆WTC\u{żs^1zkryC/oiu-A!H#"BF+Tp.Jh}%7[Ƽs|{x52v΁p`:^1N#fe7%j0g; W}ʍ>^::M)Y՞ .MvOj՗E{=yf!ưR6SCXf(g܌Lܽb3^80A\CWnz܆[C]o:"RSƵšPK|nXZW,8(0/ dȳRLͅZ B aL +1O4D{jI\0PQru :1emo8+'-,wHJ g_Vw٨/FCBBv]B;\lωUzB$>%(XZՃG‹wmX XHc0)X@ w 8rsa3ѹp~vOFF4W y\ͅqI'j5'oLT(2/Vݞ9% /]UxL4Foُu@v ֺ0IV붺B!ɈxТV'?J ~wjRg3H)Z7P@,E)%[Sl\RQt>No9pׁ{8%.{7 ,Y_(OՔx:n'n?Ȅ|޻,ԓ(L_(SkcZB  3@|ʜnf楠/C0p<'6ulaiҤuJ(`ab.[:h!.1FL"jc5:zTiLYr&.DtګV{}!Bԛq y~;ag%r GՇ҆fV3-kyx8d)|5=KQu|9rSdۃh%]e-*ɅC'4r%! BjuQw\-%"CtvB][mRu1Bs& НЋ^i\o㆘;RCe4Cmegt,K& Fi [O%MViZ#9p"-UnLWrX %EbyseUx0DS'3x(026p_ẊBkh[jRa nYGN&s"gfu\jvP'1bSfTM10FP!n8h]]] dZF tqw;,~m$^V!'o撼Ebv; kVdjl1zs^f]%UP_V+aJisYw<0盋mq8Xw[kMFWuZVCDxYF-^%q^rsf_Wކd%G" MJ _l|`%ZC60$ uUJN\YYCo `%ڌ͖<hukWOu m vl}Tx [ңPf Oi?*ERBtke=ztWZxIaȕ%͛5x_{jH[Һg-aVQRT8͝:h&6b7n:ZRy.YV)mZzCScH3K.JmRmB)ESmpJ{Мm7n,ukyR]h.QT3vx^_ZB `d*LIJUb4B -1Quz̈c@#-)&!#m$qR衒+qHϽhf)e2jmwnd[]e bs#<=EQ>ϙicg{u)8{BjV;HA 5pZj<ԂTo8\G-aVJ^Tۍsv0uT[^@-]!9v;()K WiVJ{ͯ (d7 i$@[2T,X!F?S1,y= $B"Sg]N RR\+'P8Na=e\gBlcV"!a J2`~ڹh/ש*H&JhAQ(]Q\W>Duw{~Z #&aJ5mq,>S0.*!VoQ9]!>"B}VM&dF b]'Vy!׊8.q$1 MMg^ !| NQMȔ 2RpI/.-+ktRQre}׻ 4J^u~*˛N+D#7c>uoL%n1$_pqxYcd0MM6O7-\ 猙Pr&>pd%=cǭզ9.4. s7L^*!e4]c7ՠ5Ckd 3Īwk%RJ!PZP]r]]6 anb#v%OjNu*.>\y{~wȳqaM VM%tkɚ%ڒ ҆Ԍj9Ws}diX' IL:I bA(n뱘Z*9Wrdb}4:wTo#iU >V*Oۂx^y@v;ͯfE}v+6摒W-D=3z)4"ׁF?Zn8H6|jEL[iNOf=j+j SQAV#ޞ "L^DՐHӁx|z%TnEkr E[cV5!knK7S @E5%SmCzku,ԂBQ ۗΤO檀u@Ct½zJe,v+XJtkeA^݆ђwW.q` VSCs^k%FW*!!OBO"@GU&m(^ 2\A'\]Q-+еFNwO!en7&b>ڵw{2q&Pdͼ.0.[;B^&[+?h])ܭ$-^av`w@L;-;K:hvTh"FYR)&]8la?a/Vh*:&hHx_w G24YR)sT3ÎfZGRϛjD9z0M!57Ѐ_׷7z :99JݧDzk" 3Y0r5 9oʻu ws[bH4V+vI9L5+XzOw XK`U)%oLHZKEj$10!sKuTg2sb:2 ܮ2&aF&M|%Y_ڤ,X(Ƚ)ً[?|͍ ^gefG0FiI+;#< wOt2樧 4ڈ}׿zav.Mv:TЫ9B,렲}ܐbϣAb9gM mtXսĜɧRO6|Ϸ$ Zq)/zqSi= 뼪G =z-.i-A6UU7u+-nڔycDķ}z &c`L^)a8vQԀn%v;/b {5t2N+s[=-bvnYowA/:޼iP#6zuI$d2V /c9GRQxT7b='TφZۍβZD7k"zGkOB+RT=#oEͳZClƺhEd;j1r[bq|fy|m/wTotuݼyZOٚ,1%~3o ~7Mj~- $w/+zazwYnIvdjkXs ۜ:Gĸ @ H)0 uBŀHSqVW: X>'+wUjR^x]F|agKwkZ$[}WݽBWlKZ9ϚR ;D:ϯ_>>G뿖ZSjk0 fmʰ"[{j1x5rCtu~׼<1Oayɔ6ij\1tcvTw c8%!2H5WNhi~f-`R;Ьzh(6]4^-'CTNv/SW&jy' 8CkLJggo^==1} I d-ǎn]֋t~̫okOIĤR-Z20G wHmynۚ6)%QmF[bB~va q ډ>Z{?[Mж O5YT}zjwV+ <9^`64tЯ_{_c_ yW_⣿|D5GJhVznƯmalţs)_И\Z{{b(![rLDm-.rpaŚ_X+Wjw+_ŭ}GwoS`n+ZwI#ƺ^|9Wa+E 7|Op0Hboُ?'"}_s~o&(?7ooF~Ge=U%.x; ^G'󝷽m^.xSLPz&ۢd 8'$uVJ{W*vvu.i[ woBز*&h(VO[-z6fqyYY xoz _O|w~ѕU]q.w?ȹg…β8v\z,o l. cQJh`KYjP *552yrۥaF#&0k@s-=)C/R#$i?K["WKev rp]UV+Sdɪ6' IDAT&S R8PHҚ8 Bπޢ"O_Sft@liv3y?#%yg@**vވW}yL&P hIާ.%&-ndg9󕇸r"gi?VxjJSOШS䆕e={Z}Ki5` &纣ǰ8|k?W @ ) ./  j:aoj#q9W$Y3<_nۓ)f޿*HYY=xK_p.|1e&\ (}12I+9]- 8 X_XcqkZSZFDCe]a!\*(\)J\S5L˯Uy6\P`0qRZJ̯uȹ/baKIUh_ّ$Y1R8r_ JJi&HUŶ9/[ MR/ӟj_ gHZqhҥ`گ3\#c[qRp<HҊ&@ijc&Y1LLFPD:floҨJz޽*عtO})",ߏR X,I'o7KZ*MIsr^ِcմdIס'σ7SMSUh 1! ayYOQUhee8yXn"B g׿/2 &3tPM?y jEHLDb0c&#ُFh9|O7|Fɢ0dSؔauY]]FbL.f$+k NodmJb*5@B ydXiD~QvkJ*h^K ÛP0"|gBUZvB?S{PX@59) %Bp|Y8|}4yr4}VXZX^pLװΐN8W`coGyokWדe ?,%3*2csG E!HӿCno6srUmgyߓXm! B%JxУ^fP,~#A$u a( q?W3IOhb:-1JG,貵?OЊMǸoϲAnbT"Y[XbwL҂( |;l"chDdk}( .Ш,/.3IS,aiu=,/4Y\^^{p@w8䵯x_㵰ʨPM+G\9~2ə?/+f2"-BHL[#5zS~0\0gHqMɠz$`GUZ!̳u;~g.\p~-% PM")MMN-rNc_Sghwp=K:>q.AR0twv:sᒌ%cDXC2cuic 5 5[I1^-)԰1e9Gego)%k+<#Z-s[ğ=rlʡ֊|mȍ%-]%̯jQh}}1fmRSq-ȭqhQ0ﱤ;< iTMc D 0 QJ57Z4IDDq~_(oOvKĤE/5ȲG A3Phci_}!n:ත;i V tw,je yNZ6 :;{tTNIJ 1kԢ,l&vRt{=6I$^5ڝ=pI\$3LEHJJ耰iSZ"g*eДAR,H٤Ta*'- LG@[ƓZt,|B) >z&_xa8lfM@[Ӕtk_"|!YN:"7Q0kXGЬQItmWV{VkGb[g N:ÔhHfeef >zV `y̓,4\z5'O$sr`1L8}&NOr-Ӿ30ŔZTYNRNɲd0&&/}0*5BL%N͍ z} bRQ^C1qFb266(]HV֗ɋH4þO46Ʉ/^ֈ10u+;[PDѪ&xzc%=/2Hkm9򟑦)4CIEaXG԰΀aǨ"QXpNꚦc f B0@HZ*~={RsɀP&LRB "-4 A˛ﻗWq+C+ER#Ft4@22CXoLNV'cj9!W\amc~0\l2uN8n{v*~Ǐcm>L[^Za0Ca@Bb5 :aȩS'd)q-c $g>sۥܒtȞ'=egГWbp [OhǻRʕVҁ(g:GHЮBkt %5)@~-( X3.%㈗v x79W wq;7gz[oz~XnV"ca\t,h6,/.,6kru5lS1”;嶧C%/Brj] K;Q!QC` Hhl.QHo>ǚGΜ军^hR{;E7 %+ ,d6, bk;{=G/ϱ9Nf8ߥsjNhV0p|a`6 &Mƌc,#2L&!Ncǎt0RJ{69:}&5tcaa,<=FFqXS>qq 7qPs9?h2;nc2}h<{{{lmmaGh6\>ǎ_冗*=NRrt97uޤ"ܶRȔp(M$SN -a: tu6OR,_`9BXQ,Βl׈]vg {̍){\Q0$Ԛu4~gx-7Ņ~?6?ʍ//}oh6,Kk!7:,^b8qXC22 X a㜣h9ᐥvvv<ŋY[[Q Q`a8L z8I'Z-vX]]%"$j9w9,/xfC|egO={~'s7llŊϳD|bJVT= 7mQmCN BCj5(]E4ET"d|kŽQz7?Ng0:[rխ10EZa&KV'}}oG=^WeymG1K-Ν;Kl5iY8p0D^GXkfiii깆B Ð<7ʹsȲVF&KS( =m8I=zKL[x`L&Ea1[8q{;~m|cƹK.j6z7|~~ 6QO\Z\d<r%voo3^_$b+ZV^g*U+5GmPY zzL/\gNr/8" ǀ%>`{('c 88E5ɿaYFt3C/5$NZ]Z7ujo @ :JjjiG7pY! "LUnh6Y]]f}c!`wwOx/0uw;;,9q8d~{t y''Ct^k4Sd`!s^+&JY`>|+g"@:z4b 't,ow?ig$BZEVd+#dG k B̸u=Z/jT15fg80rac [FebfedH$<yR% '>]F4@ZaȹsQH#5W zρZ^&b C^DZGiZg .lmmu8})6VWp ]Fɐ5CdQ8ڽ>LA8DLx<6[[[tF#لd8d1z6PU=L^K8C A=&j։u0FVܸA3suL8sy_e6ǔo~2dF rsUpuZ49~x~ s˼T{, IDAT3XPiDBX#g!?u/>eVVZ51iF{c F7`m}( uQ:Y3IĵNMnRp_uE M(htz]wJa jqQaLN,-hﱺ.g2!#P4IRZ\lQ 9|5ms"jw<튂"7di&LrLSh<*UF7g>=GPF^}>e XkY_ҥKAg%F6j5x h5X^^OH>L^d›ZٳmF#'>=~ ^YC5@aI ФyrgyUW ,7#`inOh; ǻ8qit!("ssDaHn2 YN:tdE =zy)6aau)zjKf2g 8ϧebj2`n30CE7BnqEAJ_̇,UiN?C$kja$K`z~^W*$I(2ãO<ǃ? ﺓ~Ӝ<~cǯIV%;]Ɖ r >GC^?h5YLhw;z ā&ВΕK5" ߣ)HS c&Ye4naK ԅk9S`±ř‡4'Jq9 jҬ7K:uiW5Q^A\j 8al(B(BV&ܙY^bٗTvPZPNH1:X0*fHl#hj)Q{}p119$>OpG|'~$(ry2 xM~찺B| p^{X][Ѩ$Ks 8NX  zIGq0hkAHD뀫4X^YcecIB7I1IS,Yy5""zW3g`(XZAFF*T"I B  l yMdMǸ,e(tKw̯=*ޗ -y"H\fN|mnx, TD*L*`Yp*OtLkt R o~sR6wO/h=g@ȗן$mxM,j2Oyzi.+ BP ∨cB}uK{{a*d(IG#$!M'ްHPDJdDR1O (5̐U wfRRh4V* ) -O|UL&Ʉ"II'jT1p0s)*iPP׼5F D[:efp-vڼ5dG.OHF$M(caiX@ky.\M$JS "?X 1 9ji"\yk!jC釁8-w<8aj~%ux[nrÕa~}RXHK/8UI+5!QYm~mn_[;;qH97"091)KVE%,GKOK<]wc_zUh P#Z&EZ% {}v^;n#"'h1wY8Dx㋼w6a+1 %Ϝ֏_B{P3P 4¯cxXJRw175{]}mM re(02~oPe2?w6PzK95R.Th?W6f*nt#t=66/ol1堼BM}E1y>FhMn/͊ב#O?,Eǯ;ƸSk@[k-F\c<cqQ)Z ^pM\>[7cɳv2be̝`ZC%M-&.,=ER -Ȓ\iV2/cY-LW TMo\z꣫6AR"d)^Z#T0BB_:\8sExUDBESd=l&2.^MdVjC\|7_DhQjPS &DaH";}R'zG o(h4fn@ؽrU$c4MI + di㈽+4Z-.=$+kEQܲzݍkSԹ5MO9K+P'򀦰X* WQ[@=bn` Ɍ "E}:ι/*ub U.=oZn\eؖ @ՠ.mS$E֗@*!gӏKoξ;v;/{!5Z6OQX,%P2|_Z)4/6}$CYm#͇Ԣ4MY\]ٳ&WwE;9a#?159|L2TqNT5oVsePs7˽Eesb;5ci>fiToZ]i6A7uFJghLK5EP(}`E]8Uwn)uU2#VF<_?FY0JEj-&diկbzWTmV9~wo*[[(.yzBO :4-P%g"Dۻd&em}CCM܁2Y/'A5UHsǼ)\I Q&3ޛORxZqF].|ܵqQKJuT ?2wW)!t$ƽ.EvtX]\fm}ak5<,:Q˗8~'_d"$qtca>;дJ P֒^T6 4Z[u;Yr]yZ;W%T%7y&ͅ8|4U ފS%$.JsMn^VY C!|'Ҡ'(99#?%^]d};XZ0LƤyFXiZ8@8҇F7XrxC ~W?~.(0wQMzx8BYE: &lmA)r֏g8,s~}iS= ämpdEȍGijR:.d4OCi|e9 TQa'H Ȗse) ˌ7}9OTN7Y^,R0tPUMA/;y w/R '^(ʅJ&YSqRI0" YլqY)P^ܪ޴eo+o%4aiȞ93_oXeD(aJbsQ22:brЎPA݊`#8֭} 9N\Spq]c`,v WNJXL#pAc TZHE+5`te - Oɷ5#+?O$ Q1Y6Y^ zIQ# Ct\ۢjO"ϦU?g_؋5`r\Q`pJrW.,0R[UqaZ5Ӌ;7j42kk=7,A$4y*TW {ת֞@#D8"Ek[Ʃ)A}×t-\wE0 ES #7IՒ%58c|ޙV"i{ 9xDu>|k2l}C$-0N 5RQD\+ņ/ 60YZWAQ#*[t8s 7P>yAL=YGčU6n-S߁`z>? M - *8g-AQ-WDÿˠ[%ؽQ_Fr|""nJi'"*@ßMV1Ud·3dYj.bsqaȽqY k G[r@*ZLQ'nG4oJ'4(LT%3A*Vh-|2_ gȒ+bY- qB+3Ngk{iȦVoX2.=<0|v d#6y<x^o2k:֤ob-ˮ1Zk}]m2$ + H F@AG c@9)Q@%qٸnwUu]9{59ڻOYnLW9w9?ƏatlO"ltY^d+%RZ6Y\j7?'HĬ, +\ƔvB[fM(<&m-q 1k]*0;n. 1֩w [JK &RuB]Ek!8,b؝y!LJ{8 +zHG9|˩$L v.dOZywOO Xrz,'7Xғtj =^Ȗ|Xrg1K*5"7?՞-e4Rr!7F[D8Y5Aۉqc<ݑ / L*DQοojƢc:xZ }O}-?E u{-`:sB'8k}"NQݡO{<~}>c`;xݾun>Zomy΄C:?C!61]Cb?~g_\xYE3֧XK/驯 ]1p z'D ϳ~,sv71Nz1T0p4Dqȵ3LIjR("aVuh&NަME5ke"T%jݫ[tGeuhA#t6 Pw\~;Z+t:~/A<`}|{ >.Gh L"S.H*PM:sH8%S1Ni~=C#)747)3$]C-bK![rI^xW?xɀ5!OW*O7EǕגukЂ8rK-3jɘ1q1R.c!B QXk}KKu(3525S$үXm֫j0?uri{JG,mFTסҀ]Ue]AMӄhK=i6%1%\%ܹ=ן݄~PncB7 5Yֿ@5K1ޜ-JQJkwn IDAT* baPzBgiׅSS=z7{MC64֙u9;v'NN cv1 uˆ~I+3z)Mp0]'k/yؖXs?yI7Ńv}p(0/||ˬ%=&jn.VJ;U4,Ud³J횩OU<ާPKOKEkWoU2!:a3}MSC*(oNNO=ْVn={3`簎%}L׫v]Y[$D ;& y] ozϒ>xq_^ +*`<~[栮/t\2NM$)\](g\ T0rKͮ-BkFstX4T*"hǪ[q4IVٍ햼26)exGhSZ!eglVkOVnj@T-Y&JR!cQC=)F[NfeMO *vGΏ!]sMGc=ɟRYIky a:)ƋE_1回y_wZmpЉ[%h=7*N;5ʙ c. HV/g\VL<#63qtV-eae̽=%~!vٴR4Crpy'_抔#OXazыj&+K%[6/SܽZ\]EdP{K},x>+BXi t uZ.YzCܗ\f^m.奣Ǭő A%$Ll6+32A,C{UF+TFt7 E$yOW .8\7ETŬV"!WG TK}FIOkB7}?lOK!Eg.UFUjM~bPrW&۪drWaɧ^;s->fIEX!2Leۛ;q=GžqpxPiVPM۵]ֻ+}=ݥiGCJU`1s  9;>gt^h)on3p ? itJy˼PjB~/9kyuYu2 z?ʠW.w5czj -͟"^y@e2k{K7E. %^t"m<;jaueaGSz--wkQHKibLh.*Xz٫9^64IWrF77Qlx\Gƴ9Tw`ڡ'~Pj 7ʫQ2DŽv=( Iwa^xkѲ{g|6D7tTYAǫQ˷j \jPDmK#DnPV?lj583mG Ə_At'5/Vw{lp[%3]V^dt$]8ZP}$~K %i^8s<9>>ǣX0ZZ;K.Kt-oy"^ N v dt ?~g6/ x!,J׊zemg>sѺzN x1y!ysWb^PN*S0?acƕЯiu쒬!)0g؉uFyK0_yu9?~no4\V9L ˃ _D>a3 VRW%{5|zdݾtəGnm)A8"FQU@YLo}DL5I0DBd'ub3B8_@oR&ٿ0<_%z<`]pr?++˅f(&fy^8;_'~q?'z~YP?yrQ-&Ai;;(é.>S+[E/mn X# .v+4q U.Ao/4;Co5CBGkAQwmD)PK*,6 蹈BǮ!2 )z4E-K$:KUY5 áZae -F 7Vp \SYw.|Ԏ{&t gZ{*OOϕ Tc8rEd- @bu>G@%Y>;u=*,}b#]x{8A4K\YyUs_K|r8qILRe-iz1 /lwZ~zqNL-ds;Bӄ˜Yak,D&MZ eU.+%tw)E}:>ġb>A%|`lѳj Rxpx0^dRF›YS)ߐI*AQ7 5YR D }^7"stFŲՌVoߞ/5xަp8'e=mq2m-" >,}iG.PTsdAhnX_J [a NO"U-1D4q/lRꚸX q~ riX1 ,3g ZS0Sg>|]c.R! zQFzDz\QbT٪ 8ptD_!ID'~~tMa\Qxrn)\/'G(^V>;=Ao8jq&gn@>%Mn&羊t6:IXߏ \,E P)eRh! CE.}7ahr / 7 HI*^|;zӇmy] e,ޒqP59ahp 5^!P]CGjdQ\S(VÛl:"ȋˊG?ڋiN8ˢR'FMIDi?+{]X\tS$FÛP?~\N 5* g'2k՜HX؏Y'L.u!2` O6dlh5VaHNsVR2n.@96n,L%1 &!?-WN-{/vl"Yds ZU׾W1H0@u`EIENDB`pioneers-14.1/client/gtk/data/themes/Tiny/desert-lorindol.png0000644000175000017500000007323707771100213021216 00000000000000PNG  IHDRt'bKGD pHYsCltIME 7U IDATxym]Ygᄀ}\jf)jg i[5jW=,5 ī ? f{\h,`;_qdzսo6[}N)h7ěǣg@j,z?~,3?Gy^B.ŽW㠚cC xXxg)Kwwo3 =[\CAaGo6gb0 VEGm%?c}ڟ9`-/?[gr jN(8w\UTBdz:f@l!P?,dZ#qSk[?l?k_Z B_)ˎgX c vW6;{j:D[KhѨbXn?,nO|A__Z<Ic~ԋk顬fN)BN5 ,JBLV`uൔB5֪2z!Ԧsvz|g}Akoֳ˽#ja!h+Mfjt'q5ш:Kx2`iM8(DOMT '(j|Pg?w6X]߭[|[Y.3ZT韹N/A @a 'SuTs2K݄&Stԩ .ɦj u?ewNxYC{`5Ş' dڡ û PaU,"VQ vL"m!ǺƳѳt}(?z~_36py ,oٵCRyo9УB[R*hTBk[P6 H|R\7I-ٞƛU5|| g}˽oq39SUmֈD#'U ^U+"\p-րZ:Bwۅ "e}x Yk7jMB_xʐ2aкSE-ə&? A&Ltc:ު= )$uZ47\g- 4#dl fkNW~^ `5[?: @_#:.)G*͵R*HXU\(5Xe?xv|T ֌+Zl=Q JbҗVL<8]?x~64w~6*%l Y@ @_3 I t`')8*:U2I5<+v\=7d*sm#1-d"7L>y3o)˗O?)9`-meJWBПII(tD,GԪCld#iX $$#5M~i65E//۞3`h>$r־Uoy[1{1|;v|ͿɞKpoO{[@!ƛ*Oo\c J(4h_^P{tUnI:y.u39Eж0R++WV醴vP SYˁJT@;n- d}ڳUz{2$>,+bWbSv0xG<B{7F^v}awy}R#X-mww~s:׋49 pfx/ F}*칷ӄ͠lAAhAP`s~Є&,XM~5;t9rȘ?taVUKB s[Rm|Eo1/+_W>85w`'W=B== {j!ĻTg,7] qضuükBU2u'׶%RP-԰}j좶5,el촲 ,GfK\Z]w3(b2f4eLN*/ ҹ=]3hb%5C\53=![;ןOx,o;ջG^£յަF~}(0PBUtj#dL˽W6NֺSrU%4du<Ҝ&HUZFbU5 ,-" c}V&Hұ};DVc(4UxQD/g§>%jcXɯG,_@pZ#Ðc27t6Ȯ7o5!R, B*BNV *S:ެl+99 pAՏ&䴋gsJrfxI`v'(ʇ{2d7ўBWݸ -3 ,,$.%aX!񶸀 W⏜=G2(k,ފ[~5DK(4zcH&X-I,qC;{ RjJ::LĢ,Xɕ *&<DvHJ`\u!TaPxWE[SG S㊄\; a+Cy4}t1En}?ݧ,7Tԕ@$i =o Fzy=MF+W X#HCfcTD-_4 XrƬWf2cVT ^ڊg>]23A0vc>ѝWaMA91:^!77v^'utC?R~u!Ai㥏^H0IOvY٩B :P$: I#;=W4cao_a,` ufji$Y"܌6zJV&a\}} K_R)+W6ЁPg w%]Fol2жI'O HNOpEG-^c!;DzY_G|1~Ql" /`O$]4q0g洓o*.sewqA#\6}JE[;<{=<&ƕv ny=r]EOpRo%ᅪK2zVlRl|+х$f6.["2+\. c}>Rh9|~Jŋ~]ˑza5B,5xQ! o+&fў2rՖ(%}A>t\(F6+ #F xɹ|"H#jY܄=y= afX( 4j$ɷr͔mF*rD{SgXfy9nFNUDj~;bx?>c7^mNw66~JWj%7Bi X+)ԞfKԁ I`b Yn8`nKv (c;_v܋#@M;1ލNR*q:I%n :!22f*3v[4mMl=4DK}efdvPDv=&;&l^BnK)36R<8{ PQ2^4 61]0O"x1HxaP2>qbe:{@$ɞ:S3pIsfn= )d 0UûX0+_Ķlhd{9]x-ط[snyzR>$$'ќBE'UW |5x ;I"dDdkkbŪR>Hph[F2dljc ^"}4Qt&!"eMJ-ozɗ"oq~" DZ1ǏOOh>S7#._57̙ |8)ϰjɰ嶍^Ss`roNv#pC=[QOU nHÅ)9aє4Y㗖>(Ru&M3JI,X%±BO~ E%L##ѬtWL$*`Hx`"o{B]5d?G\BOa%8.HHD UV oD~N`D?n%C#< gWN9- &.;`Z 1F= #qcgWLPڒG&^;KǻM ?/^ˬ))t=\83(?OcR w3$JӓUJk%[)I!d]r/$ ʀ%Hk@ ~2碧p^!muUk^}%́LR cTabB. ;PV_K thbN隫PعC8?fX33TF=ߥ6g)lJVTƢ X7\, *ؿȬ_s^ ^8 ?` C+ţԔs@SN~OyhFƵ![4HIBV[ EeJ2]BJOLh"HVvTQ{cU ^ ꥣqMV锖==ep:!L:&%z 9\ 03EDk^טJ)gǮݚDL,Na5soTs 'W+$4>H9u.Ura +z8# g n8gP:1;/PA:[ IDAT <{WГB'*N^dS;17=%GD8'vqGKチBQ;kkgjdSr_Ȩ"I|bv.W8t V55 ʶJ)yoש|2>6mjs Do B+cx .hcO\|R;r06G#bE;^6/G.PL@@J4^R(]Ʌ 5yas(mIfs05f-عi֎E 3CL|lBs>i}o 49i__)'k@]h{d`/Hx"BZp0D *HtryAdpP_ğ}gSiVfp؊][*u(XBY%̬D(rȹckcv.45r 9:㑇 iъy! c..yK6#P%=[pz CDc;H"Bp"Eĭ'[rADw<}b1!Sv>ZQp_WazAJMK+CAֈ5=Ĩl~CIMGx7n%V= O?>2gHYhn`Zזu,6^q4whiЖ,ޘr3z(Z+WsO2].9gܓJryxfShq#w}wlwzƳ2Lv^dlt*^OJjN4)X~.aP6u4D{y B(a1T.Zp*5i!ԑI(%E0_J%x>p a@2TlNcadž^q޳faY2ޙp~Kr0LYZ\scQ:¡Pa9y -u cˬ, ,әg1U-z~ĝ<{cQ]J5 Oj[y9ODh?94#WHLizVD{aK65g8 CfGcIV=IK3fJ>s>숦'`Yz6lk|rM0G4WKcKz])s+{uBdyw^]bUa֔_,]{Q-ᣏ+s=e4V9Z s[5O{`!r[;S2$Bx](F3R#|VVmV=(*֍ib3e\HYm|LX"Yc<2o+ t:eN6Ď(f<ōxYhOulMkd/z8P#|Rc7" XUJn=8T͹OQ+.Yln𖙳?Ywn-~_rޒm|X}FZsnr7"B t)TӒ#um!'%k/8W Xx"eʄd'2>_&U&:\=~_<3nk  WE`.+2^Kn))T1ԣ1i(GemGr(S-Kf X i-8_x=c-N{9Z[R]+Q"!Q M%7oXo1;c7rYwKY:D*MYٝ;KdW۬O%R;z kɦjǧf=6ѭKuTO?u+X^_My8NwRN\gK#Xd5֎3ugc^K "༌:U i8yسwhLLeрssnqpXhQ0]J&;57cWpWQ0BlE+f j7D芪| ~OWwzljG%dOA7+*eźm"WIOM0!Ųʳ \Bw٭b'}ǯU؁y{%t.U@7K v﬐^yY" 8 x!M#=DyFwmo{xpʴPCK3{R,1g{#MĽ9j8w[vjT3`e ƚ!75a] =6P4\j2,36^Еkg# W+V˾?4iBj vH5z㐯K_Dq8r wzK)Wl}y}=9 Rs;`@E+eUr^gڟ8nBʾaHuCH y%?y&W} @krU {pW;6Rz[Iv2E{?C̱u@X咱o8rpwqM̀ZpqI3Sj,!8d=wwv'x'qKC5w1jvgz!?ᖠ& @M8%znr's|lǧs6v$Mϕ6#"7nlRLݤ tvuӫ,C 96;ɤ[;GYv'cqM[=x (eS ʰ ˒{%X-^\[!b)j(fg{]tP"!*ht#Mpإ)#<2W.sF_Ԓ'xXp)~}? \zƳDY/n[ |C(+&RrD3piu_dr纉79gC[/b%II:VI:TU"OAU3S륇"/Њq5 ..dlB:ˏ1]FlAY,85徳x>{qᴘX71kbDi蕆LmGc<edCszcD#0\^̐*ysڜCt`d'q'EF;E(,e jyI0Vk a1w0~f]z^<6TMVÑĿ{__9}tDmeȻ*9t'4{ZQ5w'8]ƅF#;%/89}b{ c0NpXE(78ۻ\`~BxMcl|7CJe>Ǚɔ6u؛fՔ#&jJ[u| no=<۬)l6$´O_gLWU-V^m>;J=t[VyE !TN): -c_2#V $YWJ*Cac>J> cP4Vp/)5n«NyW ؤ} PYAO֘lH£1NɇyGsߝjpâ686 .7C Gs=rlpSKˋUl g]rl3b rg $j[f _ѹʌЙ ֙kFuvQ:(z]-8SL%{@yj&\G9,՞hMH_e'pSKUv(U5N֑4 r/n[o1Mq[bBk85ᆑ>xgH SΝfң~M=Q[F=iSwO2ʕnde&6{x@S'䒪mq&Xu+""$.ߞ>⵬>y Þ3&ω9b6kute7RtU&H [&MB/32.ruŬAPD׎A z 2`Q2=۞SSOP9s>~.Q#C[:'E!e Z}jw[IQvh)/ º.W37۵FY$9Ԯv@&Y894pIܖgF$mYbZZ0 ( /҆E;|`d=E2}VnY`cR.)U_rz"D2%}9d*x͹C?\ábz9.CxsF OÊ閃<Ou&`2MPk;4E6#iY (IdïH+h[ -d8(I̥ [K{/+[-.0ֳ/{WR\$UT^'VaTz3NMZX ]pvPPN„p;s8Y|6|ˎycFr+|wݤ FӪ6ը]Q\Rwrҵ+ @m8iMv(R_|ޯ|do%㤖KZ;qRN- -8!zK)DM"]'W>) <W)tlz#Ga&@,v*Hs#z^9ǟ0o/mPʘ}k[Aˆh+LK.y~\2.A&;Eo9 )OEBS (Wkw„EMDo|` )*9`c~#zpAH(OFG+~jf4pazI͸ Ep[+yk5i``\vz/G?GrBpE:V$uNC:)WUKzA]&IYys-[\['"TEʡeiSӬ&Jamo`zQr \o=>F0/G97^z`,7y|* h,i=%56g<@s5H3S{!jc C\3:dbƦO[P3"!>)ЬKݎ^{?P.uRt\mH*']3)CpP D)Z3]b\r}z"JL͐=2g4U29s]ln7k}:܇&JC 8 nJHmHHD)"$cӀiCː&RJ]J)Q%QFUwp) mPSksg}k9Gc5P_߷5/XfFkemA;|ˈB~`(I\:md@r)ۅ]:l⶯7nM.9 B { wN%zO#^!!"??}/WxK5VcFYc.kg/oĽ/]\:T;չQc97Uc61txB½6k0&ҭn;ZXn4mDA#@om|z]Ɗݦ_\ B!@R ׇD{j(UV L"D=>,ǻS(Y O=}G8.lwk/ :θҿN/~@/ǝ'I,#HxQM؉X;Ґ \r }*:U R1ƧK.%ptZjAa6 WB IDATd'hVm5-O,0uh,9}/Ʌw=g4K;nBMZMC?fV$@}@,[9Kܟ pbF $8Y#u |5%tÞ"F-x۾`ϡVu @ȴ@3$CBkqsҨP圳Xjsr-oM#[uI8R&'LyDZ L]K=U/ .?[v(DtH70_O%bJA.BSp~<#Ҁ7}WW_a" 8X(q5!9@e@.G;STusE Bpʴn-*bH`g` Z:N&Ms^+Q1o 46fL~pb=qY@wsSHr.~a@K(  9Kp[ iG@>"b#./RC9<oQ&l{X'&B&zӀL=Q,HkG`2!w\_ا!{8ZW(Q &@|^pPzETk6br"h4.(Aslb#I&gD)AI:.F.nς'PRnp8Ê>RQw_`U1 Y2 KtCE7_c{_5Oa`~ Fx/pOJ&>@ @=j)awDLC*eJL*ZMKěn/ȖXSpۢf ӵmpV݃:;\ T1|T?SV#hXbإ\; Y5'8 r}m_A:]`q^[d`aq~=F"nf〱P|GYKWz @a%{ ) Ylo9'h~3!5_O>M|Vɞ#a9/[t{V~uvkYꇅ k 8T%òFh=aGwp }ƳV (")/JĔqyU x}]c؇UnXp>DxKxmxT PȨǘ Âl3jV'EX܀a(hP/Gۦ9=x͸guc=a`kw5FâSrthCZ@lr@aǠD,K wUO 5lq4=6 u3 [tta pQZvxl o::A.Hq͇qT:.εƳ{o{_ ߚ#♃dB pC/+b| Ԍ Gp^L)DAT%8 $(*X>D\B LdK[X94yAReN v;ӂ^VR+ |g",{@{ӳ܂#0-OuY{kЕ72FbnY#[qUuv= @Sԁ 5!e>W\ݩjx;-TAۉ5@9sqP]E ٲ#x|VR-}SJ(c }[4'{~qvD?c`4˾u^vuuh$b⊘ŘOĶ+ij:C|0uzkca,j%H0^Pwc 8DB?܂$BHZap IR [_KyYouKPA86)@k!p.GBEXbсo4XpֈGO-hB{u؀ pK̈́-[gD|V|In3Uۤί568 !U-9 HZ&C↴Z|22=] p|. #','R_'b(į*Rrⷜ|w%݄q&XwVw gA0~-״L I׼|}y!~noi7Dt.h _Rj`|\pA65Du s^iQ _g?uP)ZYh˟Rqx_9Nѩ;Hh3EGo_80*OA8YZȶ_3?KkG|տ|Vvj^**: ,X#H ꣄D =7 qˍfO1LfVE鴸gHA THI ei/D9^@ +Vor nשwż%C.O]w!wLj \̼_'Ne]93$*y0Tnn}r-s-M6kq\ŊiY $mm3%}7}]EF{5;{:{gM;Z s,nUOsqd _7 *|q6`s6Њqm J!9(QGǡ=T/0f^#<[l iW-ؘ6n[|X[2o!ZUО'+{6: h %.| !f Gxzbby ­f3r臖EWpDNć#Dۈ*ی5/^7|m 7LirSˈEyLa.Ɖ[B{-.úQ:9G)c`9r6<}N4)N.5ηR&LH\Y3$:`1nrq"E`)eOfx>dP'm ,iMN R?L βf}%=Ij~>%C[0w:eW|G5P+6Igy"B١N'QZRS "\dtB7R'˂yح6؃Yr0YK4ۄm'm*FyHt=&nǡesbX~*q*Z̘mdI\ddUͰi#?%!rlX׎!.#@(h&?d9=@jڡY :'ǚď1lAM$%wfD+wxm#رbd+4)2tO?[ e5Op` D5yZRݞ iB@uUz<+Zy`k*!_:lf5Sׂʺ5W`;62(%Z{@gހcUis,Gd̝diẼwICt52 ̃dwk4¤`"殊j4%irg)W42i "DON'%abMQЩQ@.4'2&MdP; ˴Ihd4p\3nfʿ#&q[{ݐE2hh%v 03@,YG뙫XU@\2#AK DV#0H9@hB뵄R@>v:zE$C@.L5( ZD]arVhГbf>Cu?Zk)Am<_IA܏!DR+bh=Ho[zo, zx~wJT- )p ̉mA*DTJD՘W}sPtNWӕ Xp i|Π i(*R\ a 株!!E6A8Po(  պ Be%Dhm6:uc̡͠]Mn$aW<[7Fjy֞#+ H0XgniA sXLt͓HD@+pAb8`}/!n^YBqk 0tBqqZK#FVS úElY"3+1eX򰆕6 B fG@9\M=qN?͋Glq]rS7۬z`Zg{<22B\caE)!cUhn;RoLdFLq­S+z4b`6b¤m0h|YvF}^21d%rmDA 3|0=#5&]L'rgƁ#pkaq5 =a0ZXwh zm1lҧ$G@}N9X \1ă(Yq>Qַ rfZ`V xє )d<0e[M~Ӝl"6ms ML݀9agDƌ`auĠCye _dAy˃̓bez0UlI6m\j$hzBJe>FZ D!2BܢxlXe6LS܉i14, @O4$e** \ sqM3+vA$' YFH&L:_Pbq7Gh05a.hěԄ-J$V_t6*h% (zPn bU:ѫHjIuLԏ,na8UZ9k5Bɍ}E<P,+!"F*RY#d/̂j&ě֍hu L B s#ɸS0` ;(5,y,O9bé?{8k a.vw5qр\PrUAtfQƍ+TA=jPbPa6vrr$jA9LWit;$Fh|TET΋`ӵ L6@,1`B`Lż,sV'Upаtߋ1VaA %Bjw)Y h'TKNh"-v Èئ,D9jްg$ƥ4鈵:S#sXŠ\ .#]A$ +$Dz=-zv%%XznTq̏ЁP@Y<Uʷ K@4qa;N8lAr$N(f&k?~AgWЈ.y/Y7 K.X]ɂ6w ^0+ uKskZqK;{zg!qP^|l'aep`R)@[ 6 "d\1󘚨¶8錹rIr,On$Ȳƅ|%a[x϶kʞq^{Ɍs {^[s5;XHVHz7xLs-k ?d_Y\z@5ɘ;L 71ŰRF={p$&&pe"0DA`Lep 6=P_49 L&*#dnGmg`hwAT p$Ҡψgn8zB"|>sfЃ‹k괎(!.8Ifh5U/8cF;wr =x8T@MrQH{v2:A_8Opv2=/zKx05⸑LRHۛ~cҀĮq#ЅXn\9u2ښ# YBg(!\Fs5 0LX jRB8 ^Ozi|m^BzK$]f֠wK47\WBa[49Fpwg5`s6:8YNJxg?F;mݨM.S "Gz<0ZgVUᷠoȴIi|JDIDAT%bpEDWt U(J RcD(Q%&Rc)^Ѷn.ߣZmĖ_86tiAS|xmDZpRà, Xʽ͹Yyg :0}W3ڗ3 ϰNB_C_ْ<vt2u0m(1:ktʽXMI_B*o n.]-v:V̅Ee e3s]bOm!b\iZYAĭ',{ 8(Z)Cm(q9 .购I'չ4gz&GxUwt?@x{w6 @~omH'_I7KI@  k@9b~DPZ+2Wd\QI~+E]v[pVq5d~.u& X\y4[ q1n^cx9"<82pŠ { [:cu n!c{$%Jvs0}_O4n:PXIx,ʹJԢļ_pQqau;o__|<y?p0i⇿|N\ 0$eG1GNQ`a "ѿLwDv+zԄU:u 5>;2Lq .ty-(WfkdrV/K_3#W5@*NA9\CD`U|+U@Iz44K! 6j z)5=%z8IP[` /;f.S@"x@a@Ar9ISMk0 ؋;=\"ŭM33#Pa|`u J@Um/N<3NZ_\O|^gUfg0 'T\nYX9w(MOZĢ*hkpa0V vkBھ jx_w^|:i/߆|p.b{jK.IN_+Xt -)(A4hOCUn:9u%z ^q4B\&V3] O9ınD`ߡ=XiKv/6-c*JE,rzE81gWM##I| W|u@-ktw¿O,e|V} gr\E \?&'ZæYvSDYGQl%:2Z {c=[q4)y&-#VGSL7#®7s\M ^0wUHvҀϨ)qX?U/{ӟ0>}W,{j_F{莮E-Nw~}TL&7Ԋi 0<8^FSfpPn^h`F^AoOk4]gakԧ]oT]aX3pY@Qw!uთ;>eۧ;8y&f5 ~'47\j4x'9EOꮉḞ=*e:2tzP|׷Œ`LNZ:'u==LJ݀86w$d\>{Ï /OW?Gٽb7xDZbТs&*=hجV^7*Y\"by7ی"tz;g#F,O߯BPac\o^ŠR#Ő{J#G3`~GOc>?r-?\*V׈DIΉpDЀTB Z~= [q1D M\X0-bV31 ̌ k}z-4O,]f4Tצ^!B g("?P;?gϯx /|i-V0;6"u}_f/F3 aO⮼ |>>\nHgkZ>b̏7[:߁mW33dDB A m.Dxs?C[hiRd?"Rm>'|O~UxFoJB:} ЅTj-ے&0-p:(8+O"˻M+NϪpV& y VK-2n3\%cmxOלlԟ3d|/SNԼg#:U7\41kBunYbfExP!:DÚA(S=-VV4X99<PT_hx7gqix} J!;|͏""=\T=?i3&9UBmCB w%s`_Mjy@U}r^1*qhk/+KfBoH~GC NQȈBSrH5S6r#^@xGڿ~60^We~ ǿax7[q/eYLS0 yp4=0OXE3Te찅W 4N*Q&uq)ҩ2u̒/N2~!5?/w. Fh gqE@w.oZN@8X=E,w<7 k4f%&LB[tdcQ5ڡ'z Qa-ބa?/79}ßoH{5a٨oF?ȥ껈^,7!t 89Q! &(ҝ%*a8q)Eڭ8=%C篱r6Gg e}8}ge5@]'uRԌ)1=lPͦPD) Z( Ղ"Dt2hk9i TAgaaFF6Gz@bT;(/?xW3SCo(0RxNbA+Xl  h1 ˈ+ձ͚ETZ6B) 9zr}BU=`_EJ=Zp&yMთ;>Fo;\w`}gF QZhEۃX PJ ѭ4(ѷYFeY9b|!x(H{z3?Ғ~V,a٨%bAOlki֏PDg7nh 3' d!(D8@o@ #o_#,+4> wC׀EX˛ܫj2 cEnV^ [,4PبTX \>"hsϰ;^ ,G^}wr5 ixL.URP}(C7% JO[|Guq/`gtr}BzA}υɫWz^yEX6>/y:m=(@_~e9y@s03a)+*fy=w ;;W}kjK{b~?Bq!4RBnl f0r:sArU |؂QC ,'}]n ?=y1>o Fob/Q u#@"YQTfm s`#?q_} >ϏyOX6Ӡ5Aģ/y(‚..]Ek .8 đ@O*_-:~_7og)xݜMUǥ` @=ZIJ/A+ɫ񛊰lԟ3ast JF''70YEg:41Е_eZO_/w$,߼FoG7G3lt ,D:*BwPwItW__n^񛚰lb|4Dl ʱ$W8({ W.X,w_k,1~[(Ϗ h"6ѵt/쿫w˟_ Ÿۿ'ۀ>@"] \_Х\>x c;i`};3rL! BK_\_ 3~+Ww{$chNxs{=/֧1?κp?ZsauKcdIENDB`pioneers-14.1/client/gtk/data/themes/Tiny/gold-lorindol.png0000644000175000017500000012353207771100213020647 00000000000000PNG  IHDRt'bKGD pHYsCltIME 5)#G IDATxymU[ks77פRJY  - M p; p@-#7v2݀;3ihBBCU^Tz;Z>fBb%UI#n{9Y[No_~~0Onm͞~˿~t3}}lo |pl?zf[Sz/y8^u8&bS% Ͻғ t3q-|ӫ7+WN.E!Rӌ4~-^uG}>g[`u띯E !|Uǯ?6I~={ E".xNhwfw*ԑQ;?^ o\xh<;ʧ,3{WM7ƵKIL\s<ՎodfTۻ]qocO{zh`O~D̖'l6l7&0Hhq Eܨ+siGI|wyv붍a4eP~=>]o$ڟr;+$=O4HԻc\!KI@j=MvRZܺwV 3f9|?~GͭQ^6Pe U""=^@K@<Xt5ؖ6~gq C}=>`ڟCTt%}_/^$nJZσjL !nt8"RaRNF]钶nsvy" دA~?a o偈-|1>|£6aҗjBh;0%ߴ~Ts<#Yp7v5줠[O>g+hX}WͿ~K8a>l` |ӋMBТgBj![r3C,wUD:P *zyb۩b=y#wSQUo1_dSAYu?O/~+ ~q.- H 3"*- ]D D+44vr3ڕސPo%<} ׇ_~ͲK{okqj!##'['K*x%k^u|ck!"ꎖ&\䝬,>֠Ƒ~v>X"'s_kX7&Q|&"KЌader|KPҠgȎ` [Nj`(*Ǥ:Es6]Dէwo#ˈ}K/w}H›~Ep?%1&O^x8tVL%Р޺xFPchv2`AD'C U+`IW1zNK|-n'wnAp:szGz C7M;Ǯ?v)u\{XY-XuDX0} /=.;` "AD P[laּrѠ@UI}]/?>u0Mmeo\_iL$K)e<#qU tQEɎg/,7mA9f@TB'UH\U"RbQjݼ1<;} B}U}Uy)ć ڟ 0;Ƴ8<]NIB#[K3C 'trT w)B@"(37F%JHTQ ϨRB4q՝ԫ6ͳjqٷ#W_!!Oj"[rr723y'|s_yi;d.\=F;`L[ r3JǢXy\V8:aV'Qנ!ЭQ¥U5yDW4U9R=gBH$@(QfIspˉ[m\""nW鯿6`]xkn矍W-ӻoLn=a>nxTuE2pqrL""G:r#tVM] +W,d Hn` z Xk+V)4(X<&NFu A=@h$rb7:}m"ȻƳmm~Ӓ`=_x[KOL&ryzriH 2\K0pɅ-b"%]ǕVr1rVƽ|+rԾJZ-Yi/;*)AE42tWu ꕈ \d%o;<{ly%oy/j{ o]__ڦꁱ߳j,dAZ3[]B9k]i ` rF)Tv 0f%rxW)Tonᦪ1ly :֝.qHv]54;:DEQ *D7y۷c'hXT{C+ n8~cnhAo(^[&&fa؊kHJ⹋lt]E(3G2.D 6@99iQ!d' Zp}!j&*ZWڙkx?d%:gZ#GǗsgw'AN UAB VJA4DDr ЃTޙ7G~ 3wO&>?qڏwoӏ/\\qnʫz䐻I`κW={2E^Y&zh^[.Ä:M|  J5>ܪ $svxvIrCY'/wdɛ&#ookw5h>2I 4TuU%}Uݹ10rΤl&t]B,6AXrfזlõj2eVlꞃ4ujƟ9Oo?D9`*Up[úʭIȴ/) (JPZ@' UTc DJJ > F}A~w_}͓77p`=g/.2䰏":BR9Y+,|l!~h?\2؟x,BMZHvjR`Lb ) ɨ{BU^RR >%:f-hHES݇bO{bt n%bHK#7NN%Zw:ziKwj*)iVRJ@jAJ Ul^ܳ8urSJ~}7`OMEg77<굋d(2\,oAu-]1dg;T}YEiq+ĕ$]$PeVtJ)y rA;g'd \Pװ)s0'ᭇYlJJ ĜRߕ(7Ji櫂!A uT4!Z6|ę|wTϽlmQwXsA~1>~^n|t1oGf& -Јq/˚WҵWKJ%[2,%Y+G҂?ٰɠ򿫑EH1w"=D [QBTj:z-CK#U2%"ɓ0N3adk`!t_k+>J-BwhuQDDŻ tbDEB&➩"{a6ūŪsBϯ|'|ٽX_//|AUUr6]@hN{lyuLro |MuiӴŤ-ab78Xxz:Cm;m.ƒ?$pG<] RPՊ`E2EV].μ$ C"2\.zVlsӖ C-OnGR㯎ͣ +[b+RR^P12a2:޹m?q4{'mT3w DB/Z|5_rvb_;/On O"aCrLѥѦXWV:Pjc54vڒ[ɗ'l>|i6Ɉ8\dEڄ#PQ*@Oa~i&[Gf7L.$cg)J#5Z&+S2!p27dJu&x GPO)a@ w>9%,5A`kڼDr˰6N 3[54١YBiEI&7 kvЮ]?EQ'dhXWPGE3ځR("9t9YUmřW]X͹H1{͏U ޏfkf⳾ytmU∋tzSip6 9T#3%F\DInR2hT __UF!n%=zMD*£İIKϾY釫$ݛJt D8k"ڋϵwQzkPTaJtrTAN/]N,qQwMiZˣrumwv/ '/WKi;ߺ:e<0DPr!Jvv -ԯfd\1W ŊPYg `)(ãb*.-Ru%$)LQZ@ NmprTԱ(n0w=PhZT~MJ\ o'V:_YjV QNC(0P)Z[}81wvF'=VQD"M r">;'9:5O73b]xϪiJl,3Qtnq]gП$#] !KNmQkǣc;BocI%FZxm^dTp V쨕($nh_Mؗf]!ڑN F8U;z+oKܵ :ਈJ Je]8w8]Uoex׈{.چfVƕDa!"Kj@HD{WLJ9͌vٿ8ٯ>?" 1mp/.KՊR'q  $4ARZG_:BZ toN)EY#;1V%;90E3#j?,Ӓ0jH_p |)R]`ÊW?>c#ct< !BE DN.ҡNE͞o3C=3ͽ>FuDܝQ W ۦ4?zd;ᯩ?^;nXz/o{j5txꤵikp, L(MQZ d`Zg~c);7^yJ2o*RՊJ+,n5D2j TA !JM D +3Iw.§bG^3(l V͉lr PR:c WBHURڜe飓ֶl<:JZG$x ,qw *^W ܎٩Hv,B3'!ٸIڬYv'v>O4|o_~׬WxߋnKd_~8=W,,LYgb,Ү=v&0 *^R\!bi,o42zlͅw%PK,Y!%Fq#I-`jIiF2b=WF~uj[ BM􍁛;,Ӌ 10 rYd(h ai N%:sT#J!#v*Z.餄pLZ`jiGk.݄Pv:SܫbRvzLe5ctЫn;sg, z/vb8_mN,7"K[枊5|L!ܥuō%[3pbVᦈ #@aCsHLPH-48ҕ׉1]; Nc&MfcD  $LPq*-=A<ݜa\< 4"Q=ؑc%v3DAf12 ' M\48yn U5*Ak8>)SK&etK=cȎw++ۇ8lh|=;BTCè9{jS'n!eN4  ɲTMWwc[Ϣ] 4ي9Jһ, 4@\m*ѹBc uD::9MҦSxfШt}B/LgZ6< ^ Cu[]֎9ݻ2߽Y늖F'p\Y౫7jan\BgA񌘭u8}o+y\6xK"XMNTAYZ/q}2eVْeJz=rĨXPvN5\:c'H۔!we2OLidL,f#LQX6{=R plEX?!Kx5͊Uݩ yrN}ʉ+ w{IxT\Oa:'z/8nd(Dp'XɌ'O.toe5[7S@jÕqK7yb&3B%KȀA"8q2\~w<Iƕ;s'/Ɓqx8eLF yy= ZcMfyV=zwhS5]ȽX%Ԙ+E[d+i؊m5}&Z8S/ `8UM׆N  e,-7 R _)*HPJYo\bQݖ-p 7S?CVCom]i*nrW`.W9yUe2;h.""FL56FaՃ^ŋ_,Μd 3?ﱹ!جakxɡ1k;Oge{4 5%]618}qQLMXTye]@0&H.xPYklxd5L ҎZ UKBet[7aVg5E2{zz:!zmzJRGT*{ߡnlkQђbff,(čѮ-T\`r\a2g=._X&n3N&dx3.?vV{нLٷrqy0ag0Ą6P),1W9lWBK_T4Z,=4*di=QRF̩邙"aXqTVQ`7@54Z)ڋ{HBTNjr|z_4G#\ǐd \j/McrIz5-Cw2Bn ,eT&{[0a9h<]3.y ~_WZo%1KL> ɗ<{8ϕ'.1eaGs'x|b6dz3NըeܨHޖuus."fW y75,ᔃibmw&||1%-o 'wV+Xᝲ!x=n 7*HZ6(0tzȼMu}+"໊3DS1c:ZǶ9,["JC7.(ٺֆީm}ϣ\|"1w}* ?:/gx,qyhy<;KF|ɷ|ss;ǽyo4n9;!ׯ;WT1r׳ϲMOiҴ) 9Al©ӧHm;!wY&h8iRafқ@tJנz㺠<EquGE6PT>Gˢ5Y&ru,,dRk4 mn+b1Ke]DBb)̣[c%R4 qqK(GvMQw78oNm ?fu(9W,9aBWQ&iĥrKz#NHUv)s.sB<LG#,nz b5UnDEc 1 D2#h 5lDDHpB,ѭ%ʬ89=Ej$Jū"K,x‹S\[bM"z\yIʉF".LÀf!+&Qq6C^喳͍[XNW1S,c 5\1gs}tB>y?w u' <\iѠ!"QmSv 2[LicuHnLbڰ9x` Յ0!mRY ji=_'"q '5[;t;a!+ bT/SP""!tx'DDe&r\bT*I 5kXNuMD(e]2;8DWtuǝPsbq\kLXι[#4nFʶC}{;G1vzX&ڦ%g Nȣ Sxv g{ػU9v{*^6m@}mAfZpۦ93k$Q1$QU}֙-K*M"PkePmh9^Nn"X5\۲Wir3n6 ݜ$etY Ai-C d]~=BB"U4V׭sp 2 K*!dm_Lb̓\ɴQ' .!^LpDx93DQ\KWH<+ miEĨTpkqKĉB-\M Vh]iY`M&9`!%q3ga?sEஔN7Du<AQ$Vѐ909hdVX8;v-͊&sh 4^rN=lLՏx!m:rEzԖ՝R,ιXU2e>1*5qfkk&ф7b&) rNjLjl4d=Xb592ĀOFa_( LMaaj01S%~K $-Zh:K/.oNAJ*@w) C^ i~ GrV>Zy<)ˬ@L!R ^ppi!TUg𣴩N' iMfmfXNX9F ,fA6$ Sclo?^ز_2Zc*E+))H?_.鯳86+5IJ_䋶7RDkS8fyLMFi]^eh(ҹUGteR)q;Yw_5zS7ZT颴0d@0Ġ[zɉ$02obTX,;>0!ë&(#m1Zwrjh$Şin{C[U4:yBjh ;4AWE-7R iE3'犟kSLB|&(8GYXG0!d(B1LΞZTULGcabrtB*72nUd+{z8yQhITУlJ "1~ÖCD,0Z1xCukh~?Oެ=l1jcŦKMfb*B@.NqmMX;}sW9ڑeqs w>"İ"ޏ3Vfu!g~dZrYͅGQSDXaX[Rkd-V@9bMs$$f$`f"igc,rxQYcф&ʅ6b{Gn(2]1^#wtV@E.Y1LA (0i:U#+it.ת,!>%"*6x31t߬?ـ}:GbWg*bK4(6={Bӑ>j֊q1t+5v-zj~T|s6=,UƏVQgxpK0ŒMzȦȣ`PNikI5zݷG\1cu&ED k0h6cJ$VjYy^VA8рզ.VE|mib=flh"tۡ1 ]ߙ@Td&l ߮z0€}*B].4 QsRݣr1c}!<1u[A-)FH0(f+J1DI4b \i,?['sج '= {焜#cd41b.12RiYGDʕbݧ*Fr$2#z,b+3^{s /ݣ;Б]&:Gvb1Չm)ײ KM|,r*]0cJ?f9=rFtP\p@[hzDI:]&x!HFkMv 0Ȥ!l2עC}NGFԶn_4&?~ adB";AۺbJ4F'6bD6 W.3FpR8_9 :E8x*oeDZN3pб#bgᔟsy_wjq#f< P%%~k6'/~EwdNZ(D3DaF5Z8#ׂœѲT90RLdeݵ4MlVmXb',1S`! ^<޷"{ mmr[%@U:atmBd]cW՚(\yQy}/S_.HL&,(13ݝq)ό|<>y`kaGO>ç:ROҧVuWnUß!>w8c'[a*(*l-FJ8m.=Zp~p0pz6VA[ud=}/s%>/Z2! G*ؚ\dTm6+/TUՑ*OVXg1,=U&3GH)UV~ 9b6;PYsOZK&\U\1&CΉ6֞e:nL ML[NOy֫u|A? %J,ɶ99lH!:/jXBwݺ?.}udL#ӆَ׸vx QNRZ#_+̛~#i,Lj_xH L=YRs\ 5+0>WoΫ l) S9kcdo$c| ݹ/6!c4 sG=ٜ%Kp;oʞmrn3vqI^z;l-w{&Nޓ.g1#m7kP1Q`Iv=Ms^luР2*/Ăhg ;d<[YH)Sqkl%MrX$?)@1&SN5ijmM?x!%CybguSJqv0F6uMsd&hӈŶsMF 1 :b֑d֨AU U(cC{Wx o|jSn+D|/ɴc6u(y9?]W#7c>[z8£/VJ%,nk؜ۇk;%`i6G3!{76STG7&,NqpTgIa[8z#K-k"a1;೜`Xɍ$bN1j1Lഗ:t>2 |Q2IgWN.~!gjh!(,O|X,K3_r;X|Ȅoٯo|<;,&$u~8b0;\1qp}X׀O9Mm0*!k*zW$oոRi靬#oa|B骅xϣbǧ4.+^C](8L莦l6N}n5]8~~6b*E'UmNږL;6ʶr~l(mQ\]|Ģ%b04ԎcHF Q~mZKN ;A 8Ucyℏ֙Mz6'g5/gy=y^=Enxz,/|Pҧ^C<`X^gdjrH4reO#,&7-N=I0x6و6S"چl1Lqfkk.n4,x*;#t-00Gk( ˭RS\[#9MREMrdl!j{(uʟ1ar@ٷ1R<~Q RyeK'ST1(fSؙ*ih,NXUvlKG"KOt rxC9r7'&ԓOO}wr/IǕ[dXjU` C35&WT N61p|DљڵX㨜5;swfh ~SJB$bAk5ÛBʺ<0L"_'n`+tnYw_nCU\I͇Db_&%񡊁7uB_td)>Rʅ#3ϲ)GX!\:3O2jQA՜OU6@ơ8Y֣G2FŢ~ $p*h;gogn?/^Jk\eʜ-dX`3 )A..dReL)>b..%|Z%dž/Sr~c-| |姞~K#yfxt J43Ch&5iX=l} ƀ֩Y#)8ע'Yo8߼I? R)Twŧ~N_ 2ARIDnV@Di&ajP.1ĦM0DE©L5MhjjQJ"_)L 6f!`v-6ꇂ燃aХe.|p:a=L6"~Rr3ǔE9fDaZ4ɤ nh0xb̭*wf 0okRٜW+Jݗ^3U$ܻ?6ܻ{kvwrc7[l>ssfugg2SggCZ-[Ѭ8EBxf`9ՊŤlRJq4U50{U\89_:g4Ý#xulR"ZZ<[A;@rN뤀N02-{LN͟FہyLt\d8ַHPi߾bTѨFck5t.m'r'5C©Z ?{`z1zO|g>'D@j9úfR/{4MSѶ Jf<0iuYm+օ@2naҜë\~icvO2sYqt/VWg {bH[FbcĬH3aHSb{Ut9a}4>x4/GWD۲+셸)ǯHb#Qte?Ŭ(T[8ZC.,YCH=btk .p7EkW&=9?<~mʗ2sށ9+߻Mۡ >z3`M8y`C)ZG8H[+& hNC,iN̕65aa2V6zhZv>~t~ϭ;wos3 ȫ,yyQ_޿r)433Do9kMjҨ8z3=H(r&zԼb[oU.#tym T*--`.el5/0& tb~8cYt҂T a4u/IWgo'bP>{yVkx`i$ 9l6p%㠱vDnlš{ v-G+JRĨ8 HR)UTCTL[5]5evm;~6]"m yˊmc*M5،ݐ/m gxz՚I &SL#v4ΰm,5Аs_|O~r˿>,Z~B&%PŪmWxq1WR NwƯ3h(c H.eΨ 0V.e:E`H?X/g_4oaQ|;oX%OZ ɑq{ 4J˲ c(]s+MBJ"'o Mwl޹R{aꄝy'jG5怫{Wigj2Yƫ Ø&Si{zoػl7 >YFa>g RRGL"*h'kډyı |+_>fu+O_יH_D☩6eGj"ѸPAVD 03,LJ!ZL22쥋b\.)BϭDAVs3E"Yph0pe֒[Klk7|+wCӟ9-X|NZq>veF;ʼn;/sr$Rsr O\aZu[b:ضf0\-[fӖ -MS;&I耳S%HJ?|T=\EU)\..-N ~[A'9 ]6< ]Gd[o dmbǧ+b͊o/ƚNތɬ΃wf8/M&rSb,&aXњ:l5X+# 5ޗɀΨّ&TAp#G, Rti]uR]҆3 U6[bx3`G# ȑG%.lUWIݧ"yXk׵E cJ)ZO%CbZ97sCh*ǤԸre˖lV@xpQ몝.Aq|4[h( z. 8`l!b?LW2wzNNe<c@ǃa1ֳαdzc 8*{ZJBF>u Vr"RI01Od&IJqWcgKPQJ3t݊◟P9t%TӦDJ%oZgXCN{+4 kEPU.묨TQa<_L$Ez v7h\YirFtpuB5)PUYa9spx ^O4UH0xB|5X YǦ1J"N̸24};C)r12sF&UuѶry ~K ?<$fV34V3(->\(8[%VhՖ@$?2en i)}hondL,EeAKܒ.䟔 2 ̠BuqF˰xm:SSIgӕ+K9ݳ Q-Hk+VUJgeGӍ5cZr;f~go3.N=$FvcO8ѮőXBl B.&qrs#oh[ǚE*O&"=f̐19Yf4=;Nw/fKw9j`2NQ:.1mZ;|l6'j+/,S!tm]4oR}^2m'5b"EoR H7bMrI s/$ 5 (2Qqz=~ZUaIؼ~¿UL.3,iJ\.iuȍ7osi߱\-#5. L=jƣjG)̶6ɑj7 $T:H3؍lV'eUIƞ{KǞ}n,zuY.]9:?50qZѶ0e3#> TK?YNTu#UjXn4#:D ~fQU!b)MF̪dqS(9KB̚|G8ab\VHU9")q]V&^a=jmVjbm*chwj]Cq9^eʸPwg>rk!J0m<5&9̌j#AWT:u IDAT51%gp(ZM8õ.*="Wx]ra2V ̫/kSxvbt(#w`1+{|KWpu ig7G绬֯ps.ٰ&ŝU\}pͧܧsk2X;C tr.{.$vLۺ𥬤̆PbVmٲ)ɪ8DX!hsU[jqJ "cVThղ>_+{sgRJl:p;{¶ר ~ Er~|y@;1,#_FfqB U5訅G&E=sQT^I0{ udT=?/~uiūo9S$ZZ+\oq58?Wfi{t}dY/FNSf̈u4W  !E+]njo^W4ViƱ> kk!m[ŬH@E&IKFG)6 *CiqIqb_TSK=sTV+9(PNibMgT^i>“,9_t] >޽("fjQ!mNsT,ca+ʶOq+ "]ǯ.__?fVE3'>4m'_npƲ`m`pI6xpz*74b}\C,FoYD;*Ū3Tu_;o=b{3axɕ@ 5w!GεOeb)R\,9!ǛIhrB9yWjqZ+V:FWRܮFtEf^CX҇}ӁzkVdj1%|Y "YmIАF%[I^RzhVG.^075f^z9\%XfLTXRJ ){?zfbqvF ;iP5{3X,n]~Opm^)k' {Ĵ~ӴF__Gyc{넛7~s'qp(gy`fA&r#4-*Eo~7EۏlO0&=$ YmKΎzTXz#3N ϼy68t/]zb{{yy<_7|'[>8=屛^f#`".gy?ύxksm~#fy #"KWo}7' r5諷xwq±㹟ۯ´<~){uv+#Ӊ̼ !F0T18'\ۇ/ D<$<[hάDRwZ0!`L#" j`}Y/6tSn8%W |M{8rp=qwU;_}pi6qm6mjMUHhrqBW&$EJ (oZD.Z461k RO_*Jõ( U5./y3Xq!>'g_7,;k};9ʪR U Q-cvivm C цp!LQbpY0`(窜x{K@`#^e{sZp,Ooz/]x,orIL`I N01O&6 qZQp-o/0^AFU֒iSPIE$P&1T` &3XZvC=c<,1462RR* x7.% p;**zҚjϧi{ 5)]T|=P3:fZW4Wl_-8sl#geBiCs)_-m71ۆPD/yC9fŐrgg0R񵩍KU(UP*^bxbSyܤaC&1#lXSDh]MofP|c 4]HXbE1XX!0 !&n)SK ΔmB. h=:>c|-l;X=}qee%ZrR%u;73~뿏/ ڄ}qﯰvl4-HO];?dȝY^jzƞ͂ e2-N!,$) Q. u@ fUc5(UQwK9cÖ'UkE%h9H $$\ےD;+ V(a6U(Y_֥\|w|"gR˱c$Fpi+ԅ!I]?ғ>t/\{{}O78[Q͗7^dZmg^|e~?¥`M cmڽt% ITJd-C8&""B, v<_cDl=M1|vߟ+eo]gjscw _e5駇-ыS3JvFp/\Q2 OrQx4(RyR΋pX^*j)PJDuH캰>ȓl_5Μl1Xg}w=+_N]׃:ֶlo7$+W1 ZBA `A)ǁ@٥uani3|/|vzӿ}\7/lS ^}C_̰/{+_}F^VvvMbd [%+R %cI ط^SSZW9,t~!PwiI,A KαH{Y9ֵδti#cqXִEЪ <;XKxbe7Fp+a?Kqҙ'n1zw0x}tDV9y`Wx1_9ΜPzll$$Qوѱ6$U<΅LeVznȒoz9srj='0M#/c?o|^ȇYݨ _'y '_'~csO7>dY6t ^mh$G~2/@у!u,er2z~O}Z=oKq=I3nM SXyғz6z%)Sx)'{svlr rgYup#擟8zʣo懸m}ξfw};&K3&Zfi \r@os~8> ) ÝQdY1xe!υ >sL054 Ph9jŪW-%X&ZUzrSV^udK7εm=~gG7nt" ! 3Z3VizU՝p63YV zH}ә<1P]Lm4q]7Jn^푤%t 7Sm۬:ooHo\~~`2?sSc [o0y9PbHu4MzW33^ڄ7yۗ~N>tv/#q6NGV)iJKa#'`kU6&k -RsU+Fs<2f1\Ȗ3m/g7R]9i#cy=rJ5RoFuNa5;'K&JehFq.Cf7;-n?rAV[+ :k\yY"&կ̹6I x?s ^M1NU{WPIzȒ\ @kdr} V^ek!Mb.rkn]?wows^dUq޿ _#۝V{讯ܥ=6پAxZ7Bw\1ⵯNH[O<=t2pc}[c Z'sWKQE[C!X.uߍ$Rpa]JF=ե-R]hio5sr+. h:5G6nWе3=Ա :]NijqzC'ل!LZ\ P30(Fٰw'MX[OqsEzK ;-xݱ50i2LE8W$)td2auVz)vϦ򶄕'O ;!n;ox˷o-W_ ^O|C ^y_Gm'3Gˤ|p(/r8{*1 \K;KYj/{T0>BYneRqB@ gk^Di!;-n锃`S`񖮜tig)'8M1_qZ >JWRI2-[7i2ZC(ILLA|F9/ Tuկ'Hlk:OϘFtW\8dʐUdTSH,ԓ>Burl.̘ixbէLft]t68ls:rʣ›^9vq[qr+|⟿g.osN0\~^b[?q^0nᓏ|[t}}ܲ7HGOMg^L:\2֪ފ5m.#ԏՉ4't(cqyl%cu#S9s]ZM:MlY.F!4CpjVL+T]y|w%nvIwgnaIҠKBM`&Jg2ϰ&v& 7fHĠ"#Hq)"EEY/Y҂i9${_>]v/_O'3̦ ?],OnntNZnJrV'0aʬ*)@wvv *SOf@H6йlS,e ݎ[_ lzD"Iܦ[sRCGt?+8eesVwB'A8{,g7_uqcƔӿGqyM/];Z\ar/ ',awo,ݜQ8™Pԝx<6qPGl4Vs/U1+4MjNn-]=յ9Uq6g6QQc5[ͬLL `}}\SUccsig,H(23 {VΘnO)JV_xa22赶amٱqR`)lv+j)z0SfΙzń$V3LW\0FK{ěxe5ĹzX )gϴvcB)%{ Q*WYu\七> ǮyyU]?s<&?͗|LǞ|:*_a zzvT{ww|[tq:\M|e~BQ0&uΰ[VܘNttKt[hE:P#s!iکx6(ƅZazzFtNEJG&1낫b<ּ&ŋb橊 U,&V:: ;8V,94мi-C eQQ V^ݵ짣BfӊjY@7c-lNa} zp|e-qɌUG,'Fٺ8%)_IKTLm\ IDATb+*!`R9v;s*YX甽VC=!ί$&sdǟ|6UW|~cͧ^o8/<LT^_ ɘJkI,sǨ.VD 8|xvѻ%=ՕS-]ȵ?mCp.JVdk]5;"qXò:6l,M~2 *Jֹʭd8 bc,AN4UojE]eZn_T2L^ @O^ۛI2TR1nX^c ++9{wHlBk h `KFݤ*Fɭ IZD} I,Vb$Q-X zJ 1 "RQ"Aw/'!BJU1Ee@ƎzMAA)%rBlIB >RfJ%u_ε 㭩ʼnGCE7ݦovaW+ Z8$ %. d9L ŕ`CGx&@ZB'8~N·^kMnP򔙵bL=}SwX;ΠifDx FoT}W~s+]]J]&4V3n?-RƾNR8bhWbh3-94V  b52^T:ZW|WxhViB0[5Fm4*04df><@Tb钂 Z*Eb::zQ12VLFL%/ًH/HUBqBxre_MQ&91hlYeжt rWE^,ג+\-glܷ>7tYȵh٤{,ڪ1T {[@bo&v֚XtV$(-v%ӴՕ]v꨿|XG.cwwT|F-9 &nRjU-T ^E}S**cURި*@1 g22wφ'1լ.߿^p\GL[m<4i\'ޖ9]J½ be13mʨ"4U^_*lX;Vl0~Һ?={[?!!T_OE/n>4TuЃ"3S TQ biԾIE~~&[*6ËŨ*Z5JM:6A4wzh"M y,hXE1sIԛEB}GPk<7*'F%@H*-;S~g7?sꞇ#V`5Oɪ~xieY{0Ό[L1Al͜zV8_ajxgep7 Aрe|eqHaHZSg!>+WK5w+4_]'Di 꺀T퍩qC(Rw=vucY_^q8sw:oE,X34ui}]<Z$D2/ړT]'O?X/eZZ崺tԍ&Xo8K|MB.I@ՔF},0BR>&d#B /Z:qEcpf\cݚ^tRF]g=x "ll_,uN6㋫$EB49zC%"GTIA@* v36Nʠ_}$M?Ň*ÿD/߿wǵ+ ԎRC&*Sղקz[1*[ Z_]L_iHXj -q /CF gsp.wpfyjoc>1X|UFD F@Ḧ̭Ws$DT<WgԎ4@%%>-(^Ynݭoτ?u !7nl\z7;n9HLH)*3 Hv4Y :?޸G_您Y0еY+se}8kG_g<s7X>;25m[t l}XoȢ>n o8c[65Jјo<㍪ϼhR:S#mRݟy'U\?t㾸>+`5c{/'SͦewnL\ 3`[D~`^)N{JU`^\ݢ_z;cP?^ksl30gژP|k-~5iܩYwc/5b;eTmnaۘxEXŏD&J(P3zFm´E4n[p;Rzp`,Z#x}7VqZ5[㢹Zn9jt亚xTQJU|)RtP-wW{V7dy𿩟||Q珸jK*f6ڽ\0NyFU>:h "jC#N ڛ Z[|VQjŔ k̹CBi~B&qMpH|6z*9*' 7ܨZ%d^TFcz^o yBC~լ'~_/07G׶4J5f*eb@%:7ZP=h Pa"hoA4ڽ@MQ,:< ~ֈUsw[4cZ-mDws`y0ɡDS8{&TH],yxno) Fejy'Tv?Mǂ NPP?TL_z0ܑd `^dKJB hqTw|Ψz8t3skڅ[C ˙uTԏiG,b*VH޺C=(\ǨT!Ι6 6bsiRFQ)!W)[ *M^4ݾKw}}Nլ?s*_x.^`)h'8"똖kV$%TU}N]jSD0{xZ%)> fh(SqTe:L7@+B ^mCM9Y9rz+e071[.,G9f߱h::$6cٺQתv692{ `#JS *M.3-2`L.ɿ/k֟ .~=CV|t[fuϫI0#Si TDcibPj 6Y1uVlAduѲ͟\|(Eˣƥ55dXD=I ,GeH]G|V5NUWL7aI&a$Y>xE| Xͺ{ZBw w;{Av\e'[RE fh8-u@t4TT]tM:HkȁmܭDfmE Wf!j-Xf6 T|3+(j1[tJU *iIkVecOo3V.>{Cio;<, N[ogSQQ@(TA|lQ f@ Qsj@.xcPYJMCGP8R;l,zιZ F,X8Z 'Zj)Uߝdi+/Kgw[4gZ̀pkloNOi0c8ּB| Sw;hPGACIH#kK9 4 ]&M@Pި柡z$`t1qrGy=1u 6;ղv\ڝIJ%i;z^o f=џ_}?Ɲ*D8a-!hL"% g.2XC\jԬpk,בu+GEsI^GVnѤqu 8La FĶƃlyHϪݯ9>Xz㿴\T$Wg*jء-Le*zj4bKJlebk0ZФ5MbVdj9ZnCct{4[4Ts-B@tm5;CƥϹr XzC?}ƸGB_yYvtC:J+)7A*Uy8I=/9oq#wl:/eZ JZC+TXYdͨgbC BÜ ^}:+SŷUu K3-;+,w}_N|%1.Ϳb:ޱ=\;vꂩJJZJr(R"&nc6$`k:砢f tA;z顦QBh&=E=Ԃ<9Q%`Df)S HNҕtC>Y1v$ιgB|-̇~2 FlS|Ԍ]`jJ* *bHlA\}Qolz,j4 ht/ ]oAE*B XRĻ )'KF0X%kn$^c̿=ʷ)^Yu,KK<Kid mE!JnTbHlDM/L("1v*2UÀ"P;d眬mπy_iej騨Qg]];IWYKܫz 7j֓WYo*JNIDAT6Ǜە^Ro&J*Say#R8+-ZXsv[:!^sf~EXWsjgkPR|'K|ƹ`mb? _O)XOCCx*3:U*WPľ9)ZP?@~Lk8BXQKvPwH3aT"FMVA 趺f)0$8|j~gVݟ#3E,pWve2N  %J{"Iu9ުgvEgf`!o>H DXA?*" ? EI ]0;{[gP083y˗S=^("wy9W_Kªڴ:2q5;qQ>~JX"ih~*uSْ# |շ-g9*pH| %T*(R ҤyMj6вC!R0uV^yINI##r0>/tDT"~tt+ƺ|K!\ ?Y,Ft\M4ɽT " :^K):&5x55ÕPU_yИ-{ae}%RU/WFX K'xC(x8p2бD fB0TR˳\Fpg%7&N~Sh18peSp+tT_8tPE;nYհ+_w u(yp`L9|Jil`w=&.9*MoQI B$p&Xsg4N*ܾcYa)VX yOk#t{$0qET)PL6LZB- ib"N J i*1ojt#A+MؼFD~tV\Vu/, 6T7jÃ*n/\&+ &XbLLKK4dUZU`_DF"^pqndɦ8bg\*ö!3sяo}usذjk{. /BTT0uA= Z.0DbaLd3]'L(bZ'!0?ʛ֕}plxa5{YۋŒr8<,tQFb̬!fѶi蹞X=wGW^5>~kO|rh~ 6ҙ;}MtQg& vmVϲlNg:>HL#hGEHl:]ns&X>G7gӿwN~(Ky,/w >RԽބI^c[>-P8uhȫџzHA ;^Qj `.\ ۇ$J@gQ)a(TXS6hQtb\P0a OpKXjt𿀄CtB{A= c3t'rǎ=|z-b]We9Pm@51bs?G;RJpǶӚ僞B@^fw-Q>7â :C* oca8q?Ձ> W>[y-.BA$w%̅ցoCnXd,L̫s}OvoX&@aMuFv-yr ]hX p&@s'XhS[~|DiRw\&*N#;rѝ'n rkDKR6hdBtԤ R??_+at-D y@5g4<Ղn8(7MC.}ꕅfwOhIt<uat|µqK~6dGF΀܇pB d tm 8P=S<za@  m B23|'0A,ļ cPna*VS E<DZ(Isv ra 8 `Žik_ ?vL`7^ |'nB8rR?qO IĜ,d_{.`+@avT JToFߕi4b{.Ƹ}7š52JDpr(/KVj+s(ۂqj~g6zg]/وV _JD-pv!Q[}U7Bjd$OqAXt2 42@V@(6@o6.2 ˋ+<?Szh-Xa*PM#3BUP,t|F}VJ'$l Y4a^\kqoê/~f?3v?!h_=(BkDCxB+ܼ&7iErW-,7~ A.6;UЖЭU6N?{?bXWm^gLBT6-cNZ=DDhCEͷ5@xhI®Em0:(/C/NXRwAhUB@dLؾ\Pg@q=$T}@,S%e@K,f lg@6rh=fj #ʏ}&> )#ԎKdtO F-kPn؆y0rYhXZm,*sMCԷDZpǠTPeRѺI3Qx C}Q;6D&."B^)/Nv~ZB,gOSBr1(  ~'ŋ m=x/<>5V(a ZsjdBqD鷟.D"s̆& ]Lv \bEtfy1Gb޾ndp9A[=L!Pt7tayƊ̻T'~j`K ލDp8Km|JX`';`˥XENڬ\ NF`C^Ɂ\ѭ@j[K4Z{G,uNĭ-md FDyQ~|,(Ii_TYraFoʬRn,!G;%\ *BaHwnhAK:HAMDT{0xYFODKBN'M6X0,R_S[PZ|."+Qsmwg3=+Eo 4eGwN1_#EO|< Oԃo_\1c00l ֊䍡P䔴$z)sm^y͑$ H5Ats>ڃr!$ˮ`TfaG)rfQW󋾒9d^;̈o YD =21& [vy_h2K"n]Lgj>#DP)+CKA ̈́D.>l@/;QCBR,MS҅ ޅp/G2)˹! bk (=C"=(J@K[1r^h J)=shn%%~9@E: nFvADp9JPT Gf,P&J[A C81 Ly]"~Zs~r}*4FRJ#Cqch\`%.3j-̡R=AJ~z-B"PKv_%o*@m4I>x*u1;"jn逓AK9JK!"wibĵB6B$nsSn1qa5z^Ao{ϫ"u[@~ȒyH?VR]vh':z52[BՆJ`O*:D|" R-,SѠg% eJ_}jċ'퉰v! ]N+$GY\uЭ5硂vVOmxS.r #e7U⤟1 y2?7t ?e@4HzPތs^!o`$~0ڣꁷYvQ;ԅh)$Z6PskENf2%PhrɕL ?. VO)cfk/|4nKKE1E?9x{+rާͯGrch*h1 aȺ|:nj]>;zw3vvCѵ\@N۰>{M"u aF{$e}`jyL`bT[3LA޼XmBjK n;}Spb=]er>q͌b(R%G Le^פ}BPnj!q5iJ -W'B FQD6/ڦ?xjs;;НBwS7# c=iC qharZ)2-8gbGkm|i|uNƲ53RFHdv9jDP'D#6b %V)k*ZعBiH 1`P1MH6( x4g&t#nB1ܢ/_!h^O5>g2y9Eϧ/0Lec,lcE, h ys|Hs [-8|{@$X84KW3 f%ℇwũC ׁ5qqCT1H!J* Jk@ ykO5>\aa:& zol%ޚT`w@CG7[qJHk\tv2BNnmki;v3&r 1m!DڼP.© "ZD؂Fi9Seh A1?_b)Y:<(Ux>7ls0 sfL 4 Yk"V %C4UIxS nXmr\m6DLٚ:fC`ۂz6 .%ŗ}mp=anpք`C*A*zIp*T@ԛ m 0F5m^)\p^¹‚ѕd713t ,׆55 pcf4;Vuz6#DY{RXv WQ9܉\`u-GrZ%܌Wj8sD1&mPu.\jllt͌T$!0Y|2TÆh*@b9(fBAU3a5$HV:BӆEi?P]e$We Cly"OB ~_g@&sڳ1±<"Bc?#pݿ\e9*/a1*Cff! \>J ꢝS3s,xolđ&`'\SP_v ١-p#wFN ֘h$7(<99.AchkmhU{M-& -9soEcI!OYT5>x`7w&ZňX1Ԧ50Мfoiބ7lDsw`(G)SmEGIl).ᛎ5j'8 r!Epe20sif!$:HdR Ԓq,g Y `6!!%Wŝ{=XR0='h.&k;u0fؐg֧qE+g$]%y`1V8CfJSY"9DUҗ A(iD#$h66OVџ*,k*1x]%\sRJz @߂쥮@B 41gET) td5֕51ւS#Xb$7T}cṗD17Čsi:ـGDr-ZaP:h1v昗 JM!d ՗OS \MKjƖmp#XHL ^4 gz,S,rf#yDI*tm#ff N)*@{#I3p!TH-ټӒg [f-JjƃcSfK,J\nS[LHb24js+%tD; z!q :/-4f #Ȫ5f]لKlit-zE !P'CAgbEK߳~"j`dr_EٜO)L )'Ck|d[wK\b~^{ ;$~u_},6T<ŸgkDdm!: +ĆolKBw&DMM@"Slm;QmcõґZj]n@dLPӁ0Ԓ:2G-C]Jn_xWmD{ǠJ[ kNO~X~PZ^4֪oG;ÌoisL~tBg6sJ̮f ~+Gxkĥsζ⇟S5ә;$aT@f]3…e?-bi,3&H2ickX(n8c,nFxT& #}.7%Lv*Aw]c*Naע^i "B`*^뽧8(5n`lVf A^A*ayr /.ûs>D0BA@HQ hķ051;iq9{m]Fu5Dt".BܿdHM3БƹMD9p@x XI4Dvwg&N{v oO5ZvpAf @tm%L@n)yfO&Z)L1-arۤky%p˒ß XLj(58e>*n`O` b k&^p"ͥ9^ IDATgX`e3;Ku%Z_,3sXXJYRJ#e,AN"e2{`0Z$klՒu< cvtУp<@eC%_)KAkv8r] 9w]ؽUښs0XEM.8n5Zf/ۖ&| ͵>ƕ]D)(3s'}Wؿ;pbF?Vߺ;ٗ4ؼ!d%r#z%RQb.:3 $*ԛLÇiXNTȳ^ UbޔeYPѝ x 瀯$|퇣"'۝@~WVSYIk"̂[z0:8{Q [#0&^6lBǧ%Kv|{OKncS]UyOYtÊOƻd\1] @*=$N EP+j@0M05yjI;=`=Z!@ڎ,>]:(}տ1lq+^Ccd؆3G${'mnâN ɏU jadim/ЍG#:{@͡Xv]:j"SаA95sx~ 7?;˯γۜ-`ͪ`QGj9XjKgWgwBׂE|DٓALv;tc8p5ޣ.eg=xmw3_~|4g9*o # dbpF r S]ElBBVHC"M)I5X~D^b^gdie mgyGd)Ye ZaCE0' ^_k~R*xջ7Γe/,>o#]};%3?tNJqp: >~߱&k^٤r.!Œ%jzI!*Zs>r=|.F-y/GLΧ&5/=_^\غhj7YY5$Z$M iʆpLI&L.Y\A}T.晏 8<ذTSn| i-AWlO`"םJV*!ŽL!XUbm$Īf wESH2:F-` = 0܌f+D蹘2炰B!,:w儦Z2˪T`d3uΡ5:Yh 瞁(Ph$4ǜh#WW1+wG.{f"vұ\\IX?fv6wsgk~r5槙n%0׿w{XEċSa*V2Y?(+( Id&1?Ao"54̹ɲAڍAVA;P(lӏMZ {צ3D64>l٬8{=\쿅=N# C~GM8:R|qǧQkrimBeO&( t-XLĚO]V=8+ro\&B>ѻĉ01Ͷ8Q5XDuGX̺D7 aC[ݙZZ/ޜ& &J,陗_ N|A:[t<1p$`dn : Pցɢ ɴZuia'F938|w:WWK18K(d.,R&Fj5( -iޑUX_7w~ǧ9\l\ :g:hI36ٲ5bACTuM ӄ݉t%b,$N{>33/cÆ.cuzkˬjCDh*K^ho0JbMlҩ{9(Ikr$L{#\h˒)7^>V$)61ړŒN\ڼz}WAl#|^" z|;|T\썪ٸ&#6%}[?v7e=}Y3]jt{mӝuLXYaB>b.a%&TD\yÛ'A6WWZn|{͵?Y[X0_t#l` @0e|rB͡STdNVm X~W:ٞ2-#p{B|vbCmR~ #dK1~9LJ7e@̙Ȋlҫ$POjQA4=cQjd.\ߓ5&#֍lZP'f,iq$ީCL-)d+j "<_cXW',MykA hn ֶpK6Ͽ`gb?J7qg¬]'h+B/@+@#`!\ A';ZL!S2' ܌ȴ3dGedWń9ZCR+A|>5_6C`P vߵ 9v(_|Z%s{̷}:q%4F4>*b1JiJ cL7T/^:N~;]ze2;Σ6ld 'gZr6bvB$aۈX3Ԭz \:1' NbnR)m4AK^4%?x{O|Bq pY7hF 3%L+5XkrLI-tGujE2mg3MX"Sr(KKh d~LBgsaACZ\#Eg -mے'Qf9VV2mfcYmZ)Fz N]yԖϿ9/o~XcbDhB+xEO_⌭iFkMJN1,$1́dUM< F-f,D hQ3|n '()Q&@9SOO*%&ed5w&mc5Lc9-t-!9ܟJ F*i-{G7]W46:$Ye|g4:p_bZbmr:M=̶_.C6 M$ @/3P'FR_%?iKsAߧMq*,2x|JwN٣SEr5պ:PZѱ~W%vض)u~6Ni٢iDJhi- |Ϻ?aN˲Ō\8yk#ߏ!f~P=P^Џ'KD,X%L4`XM w9uSD8 \ʇĿ$ kA*[Z;3mvCNf0&s! y`CoL&02vȲPaL/lvmg(Uj5LJ R$iIlCgg'z願:m)B*D)'Tz2 X n8ܟ{ņ1)jbE(ܠb1q%-sԀo4rSy sMҁ$4iʀvWAh#myKL%F" c&[(S~,!P-YA{Rr5sWD5`S*5.T%$:=.7 U\p݁$_eԃ X7qjsOl&9/:^2)<I{Q3OY6˴ZluW!)]לf(kC=m6 :jqa PxE"c&-= )ԆWApwX_XBaO Q*B)a@\ ϷQFZ]IL+.*߈6F1gE:>Tajh2y03j`qW3rRPiUvl|fRYxuŰR j-\N!F& 3Pظl$ZTo%[d-wl߯i`R Xɜ0B',r|׹J=b6y!eA0>akI>c(-5k+1iDd(Zq5HSKH.hXU p"tt>FV١_ˍL˥g'1/-p q>TU}3nE`X4u!wZİqg 尾xf%özI}Bbx%Ũu/H0i&I5s4mDZT]L%6FZIE"'Al@!{иWdVv ;Pݞ3F3Y̑MɳZftSfk7PП"١zHU5f6(EhK6\wܻ^m]&iX"A*4tBz5I% d>/K FFXL::8]ksgص9'B''6̎#ڞTN"^Rʔ+;' cc+QÕ vI$+nqɓ*U _FsA"Ϙy8KS1D ҆͋S^:&e7#D !!ܒQa26N(`gu*̕1u斆An I-y[Qaa@yl4 &#=(I8iF2O J( -Dk=>587) ƫlOVEZ<96W1WQ"sJ&L{bF϶nzP̳ƐIN]z٥GѬbs  KFN%UGlRcS\O.yJUg/2>Y@/ LlJ FJTQ'0GjEЕa3 cp%qEmꕂ\NK?2ef"!r}A7V &$$o{ ]ee IDATC;`Ɏϙ3sν]ݽZI+V,l NLL%J_TU!L#cS 0$qb;eR.W?$CB \$$ڽ޽{wܙ3gGwgf+nݙ3}q_omX9dߞAMsښW'"˩ Z Ƚ(`'ϺBedL6Gd _MAȠ 40. Δ'Gn9ǀFV3ޝ ApA;Msak&3ZK%B:jGY3.Y1=t 1$/2ZmM]I:.rkbZ]0{]`Ho-j *ZˁUJY_gj~zJ1)!3( R9D C)\lo@B?$ݽ™j5ZnQ"cj|oirq}Fɇc̢ӑ1IX)p>;/=  HMutUXNэɀtbzKUTzCy5 /+'Dw!p.8S/xhٽ`\!d=!10L)Ҝ$4k -O_i|4NVD8udꩄoD9%Mz%Qj0QżFf(ML"UБ BG"5e`òنli^O#ط̍z9#(!\0: %EkOM*>q꓄P L VQ h*-h0B +2Ca}X TNcg#ws6NܺʏޣyH$!;8Q$nIƣ3~:ylK-Bʂ{2jix"Tu>uG!f&V]DXt^:WJmq &g6j#gϭaiFZg 팩IKʒ+(1IHai`JMcay[w6BCSYc, 3ڻeT0 >-_OK8ghd*d+ 9tvkBV(E1WI롲LfVeBDx3ײݢ;xޑg_e!@BPǕ$|[7H4$ \k7[+@ːZ9YO|p2hJ/1i&}6T%Dzq7k.˕Gka jKJjh^g*Gj];\KngmJ#X^deBF ~`LD~*NKk%6kMj/7/e> 2N"û 8Qb,ͻ2]g ?yG,o㾏Q5UHSc@oϘŜIz NK8/EeOamV{wRn(7ʒr2KnxOPM6Db ǾHTtg$/7bƤ( n䭽5Z3Q/*|vu< / 61DkcvCF}ѐ7$Zmj]q.sw^8AP0ƛ!J[о\M 0a[zxb$0jzvaD0gېc!Q v_0rbD:@JJ㝞8ot hhXa-?0X˝J1ǭ]sT?X 51{RL нMl8Ra9 &ч_-HzOK-DefojXY$q-{8_A݈Xg=TWw& {&%LwxfW^VM'z]YQڵber|IlFS02;d&p0bbwgEUC!3e(ll&'N+"V{0v)ͱ,e̢(6g0Zm[[ʰISL>H%~1a8TV`7 *|6y3zSl!ip\HI"H=eM$qO?L! ^)epzi+GDQ.d˩)"z(훐 ?G xSmK;K jvL8!q.VM٦gAz=O [{%F`EeI%wd IaѹC:FٽKBNW"ytEه?EZBz q S e>ڍ2@ Ñ72N;7جV]Qk(EUPrLa=TBafSL0kgB"1bc[/CPfüҷҹV@J gLy≪.iU88E!f" ͧ}c%=0"<,pI^,&\$*|Xf8Z gvYsĦ`d^^]I=cπ(lYcaL|}xe]ʈ55g+|`,:Qr;Fv:n2N{rhsH4#&zWc2S!_N2T^~O\H5"F Fx}&sd\)u˃hҹ3|c~ojҁ_e6G~BO߃C&oE4GۿW#&Ir|MΉA|d] Q`PKϬa$0 Ȼ1|@e0qi1D] <߇64k4M1u $|fLE=}Cꄏ<n4!4i{I(-ZwBVF[Ľ11sh:+%]U>E9vmcnc6QʎNJ$B 7N5*n'iˇ@g/zx=.qonςSSv[ϕ5-:/:..I)|i_>P!!hɔO2>/oEsϼ'~Q2?_Ƴ8KX8143=yG<=Ңֹu?cˁzUDv{ڀלϤ31vlŐ iMu0登=7<a܄79.!Fŝt"ҏW^`#ĻnGwYB~"{vA}? w͉=pn!'^"jzđ K=o،$01gYMУ;!yߗw?6pֈ@=҇گe " zpGy¾>b,*,8*ZdFR)OOf:gs1 hp1D%ZB;Xcq @=!]9m?| =6 V¾I!2Us.Ro"ZHA<5kX6.@dh5DϙK0AHdGOܽl}E,u䁄4}+_PPӈł<}:?7<; qqoNW¢iG[hɎbBq61霺IDq_#Qɾoݏ/m#PzB~ E 6PQ̪Nc$qr[KW<5Tͤcjā>@/7p!z>(ۨ#B2}po,&R S)p\s&W]+_S^og 2(ߐ|jFbW$b9PO;%| 5X"B_+m>UT ȡa49UbYl7Bs9K=W4b9PϾz*/3b:DS\Enu~ɐb{Jo<{\60.Mk"zaD~W̱IR'_Fxqf I-agďAnuj 7Vk~!E,ꅇn7 OT!Q9 Դ}8a9.:la oG͂s oA}61nw.Xкvĸ,#<[5땿l-o"-OoWb9P/|X2C$[\Aķ"D~h 3Ԋp.a%FZ:A"YEw'rau?ds G<Hr_E|w1x Zao"8rx溄cv88h0B ˫B >+=r1{W @=AltBzv?W"1. O1_<_L~tT6t-OM>r}Xw޹F~w3w(D诔@#yrb'o\,"A9|IDATy1lEw~ʸJ!MA>!˱ ?@yOlqE1e,br[^k[ lRfڕ/ZC]]vF,nՏ;N?P6i 64of(!Y] C/~/-zE~XV "`7Dke p;ݞ-iv&~RxG_#Ċz#d-y2`Tb9Q_h%bÏW!Fn'2eƃ3Q $}y葯]^#Ě < d~qO]]#ZSqkϕ&w`8]IENDB`pioneers-14.1/client/gtk/data/themes/Tiny/grain-port.png0000644000175000017500000000307107771100213020157 00000000000000PNG  IHDRW MbKGD pHYsiTStIME 3UʥIDATx[hg9eiZiWʲQm DLↆ8q q mCBk mh)I҇@< 4i@]MhuJo9_⸒r`g~g pӺ˨ַ5'bȮv;Dɻz+][FcbHV;wx?r_-rB~:-ՙZQ%oJwV TpgWsFڣs[ih N4J <[Y7w_/vU-RU4hLTLh/V9jWܲ2o{Y}Y#FcX>#G2>|5}QmƬ)~ޖr<7X/nJ̈́_R 5+R)Bw}s| Œr^ج\rFHM`@r0-~4_yIʀYBĝ iݏ00TkӚ=| SեR+O{'~ πk.ڥs85xK^;5==QȨ?.]>-uldyΟ>Qz* +g "(un~@3ɚԌ ?xA'`#}3˞J?3BcGv˘ifbocKZs/ h jmebs.2Zѳjװ|Ǔ, 2xb~E`H6O9+# 0 JPPn-b!/ڷ?[O4~X/v]kO^-,?n1J {OHS?\5M ~E/ZХ+k|wIds_%QoCD TW\LD1~Lb2]}LκK \D@3%PU퇪ʲ 2d@IlqFaO6$ƫOsN*˽ݣL[ZLvC]CXw!doPò4_ި@waÓIJsЌUK([/B[r@(܏ݙ16w-C맃H'@(t)uI`vAC[r@C@_GBRmJGyP9l&xڠ`y*T" XO]]Xo*" 9kdн ΰ!JLu@Ul Ŷ%0RS@[|mPIfmu/4d_P!y6XәftiZ>R˫vXF}y?:g /@[LIENDB`pioneers-14.1/client/gtk/data/themes/Tiny/lumber-lorindol.png0000644000175000017500000013547407771100213021220 00000000000000PNG  IHDRt'bKGD pHYsCltIME 5O IDATxyuU[ﰧsVF5# Ŗcd f(̜`@Q+eBH X MR[u}w^e3>ݲY_?lyc<\Z7ܽK4k 됩\UbszjXɈfD#qPNl]}G'v~?'L`>=-f/Wo'^_9Yqr*lX"7޿w |쫌bRFhgͼdivGI8X?ú,7Vo}h;__rϕ{- `9d}ǽx+$ḧ́Yĕ}ec,'_vγycqt 7XbcO  /.W?xGc}׾Y楟+/ܛ_ð'yl[n r,j{+EK=_/U9srpop8`~+uoy?02ocp]kT"3)xmvx/ARsv ^fnSÛV<ߊ~}$O~+/g+׆soAW6;e=w z؂m1`]1$*_٩qnn]]8dZQn1&~~e>o}Ž=>|L'|_z_ ys}ѣ,c6=FSr>&0Xj㹺qyq23ìuAQ+*˜ (ynμE@&De3hʬWaڀQ%ʠT\#Eg붚 rsъ[Ȭ^V0v_W?q}0 | >I+間w{YVzMr\ m15ǏV*'X1X#@bqyӰ.idُ)\0"Ѱ"Y`bU%x!+-sv>'=*^MZfEg d\>f6SF7Hv~QTJє~/=p?xBZsUT߸76b%#qΡo}x[;_¯}BPOz?Wf]bfyY}2$9K[7|i<$˼Xﰦua#gXr4a%E ͈5T;5g u jBTnӦ T95\Yp(i0F@\|vozΗ,<]WTG2e98茮*X4+v;Xt-ڥ,7-W988?yƍ4|ӗ`k`}+>M^Ϛ~u/[Fu7h߷QU Y)C fc+s;31beG2GKH o U' !дrԾb= 1EaaGS{|g ; l58bR]|j( >!!S+b9Y˳sW6vT֑ǂ ʥ9{MW?rW\ܱ\K`=K9|]/WUGln&/Q=c,$ rTDM02ߩh[BLZ11&j##J.gGʁՂ5a1rRX>P9l#Ƴ2٢,w]4%T-;5_u{_{QX_94UѽW\f+1}v̓*89qӨÆw?fKRtġ:UƊeX,5pg+cI9!3chcUtt _~=Ey&3zkggrΤjHS+r!ӞNU+;2&C=qC[5, 2%+ m||HBȓ\CZ 02L[0PP#cQ-q`i U+8cHIP QW9&RT=<yD:+F E#X0+ʔ ]M&XQ0ڮلv=$ ZU;pgi+Ǯ^GGw;}Lӿ _omL_g1oɕ|=Ǔ[5z\\eVrcۊ"zq1YcdoqTUS` BS ⅜ E 3%)BL\(Π"fԞ'*!Rg \{a1 N}($ 'B֊<{yں9K)zdQ2Qd鉙TbNP"f4P[iOJGi+xO΢ׯz[(*Fק^qS.}>,o|Ygw;k>Q\_oYkOjv9?zxZ؛/}R,<9 BW[ZNݱzjؐsvRfYoVlH yOD-:w3L *RKݳB*BZp|ejOWB)`*D j-o7oќKXmGlm:GJ`XG`0̛ݖaÈ% } X)yb1i/PwP>ƣsqjWNSyi}/o)ϹW_)}Y{~4CyCㆫWٌX+xB, cs|AB5qnQ73݌1'NpBJ9>;gII>\ Ik wo#E U.U7j;Ȅb6Ju21Tp3On0NМP0( "° ܸ&PזԱwiFT fּ58P)2#'ΏNu!p]V El3먫E7g\Zb4ݞr|A–|sOtUr2A_Bٟp5;;Os_zG+N6zwYüc#F%+$" 2ޭs)Bc >)9f=26JQRb@!*h1ӞOsէ-_1}ϻ~CXht+m| > #W1ӟ~# ⨫c E5Qr!G! o f,֌#h6HQ$$R)am`*!3*ں#h5>r~{ۚͶ'Lq3"F51F{bΩ\`L"7VP Eú߲^ }ĵ+ca񶦮;`&?=a(7xE<, *E@E7z%oqOg?i=ޝ=[Q_t—ȟ}(nw_sJ>{q~3I#\cAhyK)_B1%S$)&$6a;鄹 2#U11SBåu)oDڌk N`-a8kH٬AP~CݬqLX+'ÀjrЇ8$1 Y2X&k$|58.+n&|sffZzeLXzTĥi|IKaۂ(g=9$!b 8g9Q-J,0$HogfL Oyg]نFKH JKFsbl CXRFi'Bтr6C0 (:M>$fP_)+9',1!)+cqMi,k 2V0yijѱzHl6ԝ p+yoM2IGni4,[d* `wQK$դ5u@h(#9!PLk-@.lRF<2we-YkkHLJ*y֝;vx~ oǺQ/4f,Ш's9Y kZ d&Q: )N6:!Hfڐ$0_,2˪XcU3qKN%wƾIM1 '{JQ3uYUf-ݛ,JK R@ؿ<˳-M Taa'ISn( 0BI# R d 1(0ä75.)#1&#罏<Ƹ6MR2Lxߑ`e a3ɔ ) sqAŠ8y2NGU9X# *)q ܋N2s1l&28qTC_m!TO(Pĉfk:>GR8loa N静z^{|^яSҘcfP9)bՖUbJ 1Ӥ^ ؙq2 )&- ;T 0ꪚ>KCfH˳\6z:$<8ĒcuΣ Qٌ 2Fe5JQ@(:Po<"BbWaKI!4h3'JPxkqO(̺ &|m =8{Ni|a"ܚiHaTKa6XoN,ډG3UɣUK`y[ ,ƹ4c jg P4om[hSJIGkw.j@Eb;.,E@X*]iDRH" 6`V-e{*U*ĂWc@/@ZN)y$Ę6RR&1e iυL>G;d"Y!o T XwbVkce*9N^'\8;ºO侐,F:yJ?Lg[bPJ du [I]@djbsgT}-ﳶz''j-KZ5%OllcfHcxnK:$+q1_-,ށ2%e8LoQخGMh05LtiPc.&#p﬽yo]lwq,$!$2!  EL vhTU UЪQ[Lf CCYnk>y~9ϹNB5Kw~,JiK.X_үf9Z7T1W:֓=#8@UypZ5Sv?_41@7ZQOeCxmNͤJV=}nFZ+V[R!UWX]54F36/ Vv2M?RJDi'ebzZJRjo'f y˲ιސbRUoXJ3ZcH93n6svwf G->f kNn^I!ٌlDRL EQT ؕ/zN1VSKAPIdwٲy줥FΟ+8yr(("L?YDBi2=0^㜧E{dlI`a e,} "U/xH@m4SV}Rx8q4YӒ5T1rr&C&(5R 9c5AhnUb,՚q5RFAh L RIY2eUnKs7QQJ9kֶa,i W6;Eh-I`}l6u[v2R sFŁP -zB`6o(Z ThIlĘ(UsFP%Gr)s]h˽m1g2sƤA<4mfqRLH1gVԠ]ʰ4IY{ӯW[^8E#g/?ҟbf )jY#Jۼ۷4"̘n(2Ę ZE(%@6Hu#Y }i4Pu3ڦeF),}qS0FdL#q$8ڮc Bhq jZ_{mD*dxdD8^v~)MĶ)jR?g1s@W"76ǂQֵTIMA[%5*+p;JUC*I,##iS vD6gƒ*%x{I[(9JM%8[[6k>Ǭ9५ld9`3&BȌQf<~sf3HKϘ`WD %Qrccw{acY q9d3—ZJ )bUt1Hȕufupo^eN|kXt>1đkG[EKr#\q`0̼ex4-v9!o#(KZx5fc\nASIYz{ꆁ C?J=l(.Ln2%gFt&kfʬj0UP3XWh dyc(1A>"cVLP cGg.-gs:VId.c [NSr$JU9鬴sNY9ZnN3¸zPd@=&JtJ:2Lq" TQ1k9N~_H/ËU} |-%A)8v5Oq-! Z;ޒTa3̯Fd_ tЪPJ윂si&D,#F{98[1yTi XhN3k`t.<͖VVŞm_ϰBùX-SKN[rVbcJa,"+Cn)]I2Ƃ.^QehĪIbXf݌W_(m7yYھIݸgtmf Z$謅f;Y) Aq*UeDwJmK,*]x3hjѸ*7aȉ~d[)X2DT"e=#:ku*t_ tC#3J8+ySJ(+_F1NX WgjaflV[ Rk-z]ҋ@fh Ek55sxuu"2Y z"K$fGjV6v,L-"/^)ҠyOQrY>%eܲ-֊4~V!sxc؆хZŀԥJQTP$ =u-b6hgmkY0lB(T0R(GNlE0\]RP@~Ȯ?19qg߄au0_6 J t&Ci.E7mōca CaBFXg*`]34$JZm1‹RW*zW>o N{T@%A0 Hz##5kRi<πU @.@*׶1QB [=  aI ԔtE'LZ+ΨiW"EY; \P`=h#%zZ(Qjfgc7۴NPH;3uYpb$q/^Uvets5 tuCi-&R,!>C3% ޠRQz2K[+U,[CWXBޮ.}~3\LBa5KI5D0‚J(UQP`&d1mV": | r رU3(Қ ܡ(єpgеkylG1x)" ]Ȧ.Ja:2и=!n1Z&FZ|PIqLH%Aͤ$4?gfp*j1|}Ue Nc~uxx]1~S6QzBhJ. @H $ZnBSWJ =5b>>B6'qc뿲S!VE*nVgTP*a'F)*%-РatXoi %иL?@Te5޴+2Į2jo4 IDAT،[fNѹV1HEMdQyB[s/8yx˞W^9S;WWP3Y&9O8(|iu#Ha2lׄ [N.؆ 8>85ƌ vlZ@u3aM"LS=ŋɨ$ _yy~%G_CΆɻϡ<ē׾՟#L@2 eVP(#TZX5XGҹ˴u ַ+=2K>%Wbf3䢦C)Ahx k 8V i.J'ֳؙ]7ctsopγ#kL }v%LMTP92H[mWBZ跙HɊ5!Ed~J0?}# Ou=E~d.K^фӴMZOlI57+3Y3ct8ۈkku)+߳|0k&v8rvUU}J?@5?~ޒBa,X1kI(bְj5xYo4RKYB7'f /9otxrxzZUL\hP A)jB ) 1ټe1ӶGJdEVP3! J 7J Z\hQD(ܚM\ȝ0l ۲K{c|G{2o3yX_7.'妽Gq:= O)NjI4hU욥KcCqӀQ>QJJ-^h|DW3檃hSg K_]%gO TVRjb!JSknlQr;Gc N[MZv&"LĄ4ˀc8:޲^4aLIRT1Ȅb"&i̺nUxqR&Z6RX@DxqzZPTq(+ZY[ W},?t׮?}'{Vrc>$w|9÷'o[?Ckw>mܥ8rŋઔV4\P7;EHцRJ= ]XzK #y7Z~G?q]S[l2p81ut^EHLL"X%aA0&PhoDնbƻΒs qٌ[0&c./(oRh=E'PY\Ip"3k%l9I?4VTiҐ **/Ɉ(/\6<j?^MWCH +74rm8¹3^wgƛigHQB1v2k ="W_߻~1L P[󷃟U뉧e|Ǽl5}{Wi[1.WqbjCV0t[Hwdj˧b$%cT&h5KEW%/-oU-xyRnﶓ Ifi`3QHy@*PHUlPkIi*Q c> L\%ײBQbd~5BK5'ZClbm<[o Gj6LQsta$ mEZkC{Xҹ-ׅWW{ѯÕz=#iEoXl#9ٝL}F{b ZYro GAhJ(2:1%°/,e|zx;pnvYòӏcjHcZcbrUH(! JչH ԖqxNd*XкLmRM)RU3iLĐI08βXi5ΡÚl$3{s f+΢hj-w'*vʝ b]gpē| g/@R|rgai#4.=8HƗṛpfw*/ݦx{ߍl#rNܺڙ- Z{Z(rĨXz w]_g!_>܅%+o_ r μ<ϵCKpzyx1swB Whc@;Y+=D%0$R<RqҪr?ɱ2{0FJękW~]#Ga;?+|"ҭ ?'oWyl;U ȡz2ws嶧*+(pG#WSa{2^.ANbZONvsjoABCq[͙}rfDʕ1תmujM)6wՁNg-ˎ'3-{XbNĒUQb4%a92Up~zjYR0t3P !)}(JqLvm:. fSa~B`>FR 0Ƒv rva?EJ.Os`o7ܼ?#WOC,]_N&?8=:o{syQ;O~@2L|2̡hT<2,pmwN aecˇo8.SlqT^Z10(dIׯ跙٢e% TYgSC?ãg2gqkf1Z8ZxLx[+\_kVùЯĖ@F޶ᖬ1݇Wxr|gh|Vn{榷kV_[~ŵ7jVXp&C&E'8uin:lwA68Pu 9MђQ75|O,tũ5u/&aB`97F6c*#R5yiUcFM.ޜl7TN(6ӆTUe5Ͳ1D7 )XK)U*T/ERV0V\3J9<Q4;m4JK'40M%ZReZ3̖dU8oSOm_#.]x?+O~'|\j;DAo<"۹aܿ0٭,!̩ˊʙGᄭJ6n3dm?A_s8Rep)J,\!թƪZ5״.8^p҆n;@4pl84 Vùpx;G~`]o3pR٣o9-N )\N8aFԁ a6-KWN"Ѵ둏)evyiieEd~]vs-kM$\Se̊zfMBCn:y)S 1)EJN:0 -" cKQXMI6Y'e,[7Z寧4xQZO) vKgo Y"=}ߚ?O<äz.{<)Qo_i~c}zC-wƒ*>>+w^- xi]UÙQ^Gsp^ mU02BY^? 72T0N>k=VkP1~zVjyw Үy/њP\I1?X-̜t JiNתBE"5Ck]LFqACuϘњZ n7cy#?έ7osV]ͯf.{r\823֫|2|9ęTMF_Q<8;iXs  IDATYb<> 'ތ9e}ʳ{} ٔAE:*t8@U:FS Kc\] 4\v3t8A9^F&!L;/2mHLBSyʠ%gHSg^$Lᤩ'ʊ8=.N|H1$U}#UδgWCYlQ&N`iH3Ȍ(MkXXilo@""s\IB%V_eqSuV1GcάW٨X/(7,K:ʠBʏ JtM==]1: Np4\UpL P"Xdk< 95|ƙ&gk`XcgYvo|+/M$+|]}) v ^r;kC3V +a_ ^S{s|p :bOÅ??f:OASdҞ#-[EʆS+YZ=J%YG~~^w ˣk9%X0) B9u60hh6 AUL+]Ra*i !gAUԐw4'h3Z`T9ǔSYp!潈c%!j%wޅ G#f:i=m1Kvx8(Y/E  >elw8on3g(,0^)m520/XzC_~K7tVT\#{n{i`g׸uSm}Gby4VN N5Uc8U?:c4FRAR&R;xUwWھKhO{ma>˅b]yAdd:de rf&Y{Hc,2u:O!Kl0|Lsg-EGO tOHF%1hUyQ elTcNo `04: Dd:WK&! cPqٞ1A&Mx ݼt*"PVŌjwvZE#đe 9$S JH4Zl'kq z(>fKb"AP2hIIL[{=+sLMgWsjq$gaiGp<77 ʛ.Z5w}I>% 3 ey륛jӄ ,SĿPKlxk!T,~e&cmL*-6z)$&1Tkdk 6-1&Z\|ѴQK:iNn JG~Ji &Hphoxkeu\0)1eU_Vm. ʌ8tmtq-m>>-D|꜃56d=-O"23BxpuԚֈZ2We\Z;ߞB[q@PW}i>~?Ӄ˹hOӸ/)jGbO3|.*lz,/kgpTr޶̶y{{j]sˁ5o,tt?V NHl|_9~:Fi= S^r(45$?7W 8ǗӴU* djl(xwm`sR{EMY8F.'hra@D8Rjcd6]N"A Pz&bo 9T&/L!Ë(z1TjmFYӞjlӟ M5S]bTҸ&q-AX"ȬÇ !U d)hkCn 954,cer n`4Lu~?xdexow-pǽ4<|c{*8;ǧ+{c~So|gAS̓*#as>=p8Yo7^0I;;ϋ =3q7y,'?SDew: =6Hx4lTVPhO7%Pz+BO@Xq36 =J)MT.R*Mמ<. +gm.;;7"8y()_<4uARBhs>Ҁ}hZ,R87?R ^1qYCQe()Y[\k(_.ebh~v7yuX&2{0@XOqy'랻c`ݒm 5|c3c?=u˶_|cƷ|F; p$73K1 }J8E^~Vpx*AV`]Ccz~~CbhD< BoˁaO^1m)NLoi>PGXŨὣlYX2Cu^4>4Z s4,<,㭳iVVh h7JcNe%E'q)Z=GS tR:L(1YA4#$/'_T)`WɞU/óˁ8ݲg7[vu$ (_ߙWm5KZǃ|_b=  o᪭Շ|Rf>D7U,^y.&1t=fٲ NBD#h:uE0: GI)wV %^(@cIӌt uc*4CJXaoJvofuQ$P x-svhCFyALIu ㍥iEѐ(jGUERFW'H)5íʩ'HM<$.7_Ň}ldCf^QSkpN+3\ 4ң!+#;GAz \³/  "`bp .? [Fppq#!S>3S}BŬZu K|&%D &X]XGQ sx Nk_*8Z H5ziE֧eh-"6iW#ŨD_\c;diS8 RXlq! ʖz+Q#dU,ZH4D IQ(dKh"*zNg j} ˏ0t_bzzvnRlNqpo ݎfٶU(83 [uTLЯq)G?,l3+yЁWst&> /CݮmkF/?_kbLU <9OnR(Rw-P鄺)@QR8_bqۡ!4%˓]O(9%5vnIaT A"Uee)˚rPEA8m΃R1"VhS zM S6E xhU| (L&ēbBUIL%uAZL⚈U5!'ta&qrb'-\ \&5}]cOrO@XMMI 7]4ωx,M ? I } nPܱ}!A |Rq=w llwanMbϫd)|w; ްW:ضK}زLájc3Y/H3MRFUpU6-B($|}L4kSWHCjrFk.'5ucLeqNbOGj!8WG8e͋4( nIUE (36c;5 eDA[ X%W^I-QRGYZ[⾣jwL0=7,Er˞C)%+b6c yE)kmˁ.}9`iŕpAsA y`jE N =Gz`Z=?O- [ΒY Mc@HS75 4YevnMC?{W|]s% ^ kKM5O-9m+wq*H*<; =㵏+^gY5宄j2!xZ,$&=L^ =  :N (C:tg2QY"0.+vow;%UQlSnh!tX[J$%-8Bqc1Մim Q* 2dw :QQ4 MV%J Yn.@ħx‡c"]a6oMdf[VJbZhsE\E(=+h*dTӝNW /WOt.-?yҪC߂Mx%5<HE\ .#T)uT5*8TjxAO@jO5wd;w$O߁{/.0,lta.pOs6]`Upc^8Fs )%{$n~"G/;v>1{~ r XZ/<n3Xå[h-}03 Nw H47 O&vs$%M4J0J~ U$"H0Jd,Z)/OJ}N6DɄxخoѱpD A*u hv$vO-`x m5(u(7 u X{$e$ZA1g]Dr{h+֊*ƚ+lph~KC\\ ݊[^1j_s[8;zwz7[oV|c~kq\wq`k|F񻷿_CRMWK}S|e,?Sd_?B{ +JyW~kᮧ$Q6$" (JvmH # =_:dYBH#I&O LOA*s:z?kզa|UXueqeͨX'iA (턢lhRedzA8AP)CZr$4Rc/Bf>5Y h%h$[h҂T<Ĺlpֶ\qxi7!N/ râ~\|ޕZ}wGN/}ytqbmP'1Y@拟޾; ;vuxzv@z6|3]Gs['b?:P[o[ o‰Ò:'/[Xi4xCW}0Ӈb #z2 N԰T|TH%8NNx.Rb9!TDj 42՜<=AU¸hZ] i^ kp/jV' <&#ǹĨ UDe{[)1n]4\Y2CAB7SÜn']o&4{)ߙ=wBCUL,٦W1{c׎ˀ$RMK!7}"T{$a.}鳼Z͟}Xwo<?Իt ~~_Tg,O:<@y;to>8ϾRƾ5^MYGSa"\a ||nW|^Kٓ+ gϏt{^,;jZH1Cf ):=[2RQ"g?ω5&#ȓ1 Fݘ}@HxEӮ i}5 Ϥ8`Q)TX_978É[:GӨ* mV՜&*Do UtzDƼmJtң)ʢeWV͎oc'4 /C pm5@_xˮ狟7Y.")= g+e5M .+r䥖pۼ&?ܿNv5\x"~O!cI>bdoxvǮoK=+OP5`NXhb++Ӑ=pRW EQ4e#H D7(D-1>F4։I!Hzy%1R.SXYZQٞ\_ 4U x߅_<.> n(%l~6E-[i)tDYkjqDpЉ1Uz62t:Q=VmTA>2~U"e4"">^CLYx^-M]eQxp(@v*$iB [F87q_w݁_1kFX]gg ?r ?q1}ۜxn}O5fDpm5aH=îgo?)*KOsa#jS\qhV%;ٽ ړqk`כEҰpW̚cO9:·ۅu`ROse~ >?9^ӟbR m򛆹Mܺ"ޑ;H9/}-qdwI&uo{;c0g`:,pppo t;LO3v >RƛHy7E ʆ#~ESpjT7C͛2]#)k$3)*Ʒ(ٞk]yRk eQSWEYQEA]Y$s.%CAƶ8p.8EvH 1Lk$%Oͪ8&P5Z/ǺkT%.#z}Tç$ؽ/tS7]Z/pטz7lVbo<+bjKKp+v.l޲+/a54K4Ox[at 8e/S}.cOcxO3p2ƒ!88C]ޠpIS2 z]04G3hJEU8j7 &~W{t$F<$FA \ ㍆ՍQQ1(lxBUldiJeWRRT5듂&I<6Apܨ46PNAs8]9"X ~c'x \{%<{lr3pjF TV榶q-aUoM<zJXJqi>GHvcɾ':<7s䝌i<݄yUga"?ƫ93kCgcI8z ?t.[f~6L?W4%W<3LO Z44ֆ!%ng p\gˆLo1e Eb\jC+bB(*ܓLT橎u 栤DIAYXl (j΁T4*QW$͘dI$pH!IM}{93\Ed in&5y䥏IUЁ]FK18PoK:t)t<,";)R0=!ՐkQ*MdY-P}W<~(+%*%IB(몭Bp^z0:Z9[L|zkDgDEoK$T(PΔB')Z% &ձ+hAM@+@R@$:r68T-QYJKc$*08G8>(/a#wV\U1%nKNp+^ί~Q<Cx D#~]|_OKo~'k+ 5:Q  $렍*kz/9X?Q}υs玃<>iҝٌt3l޾@XF[ɒl, @Q[&t 9T+KZ+6Q xCDtp ݣ7&1~xj3уe}SPnxB&QbTb8dP4O < 5Q U%8T4#AĠިPzlV0YmPK s6X*5BjF>eQa(&)jK޲LKv痾1ջ脃|ۂQWK+(صSڃw1Fs>/}b}9CG~4-3RDAiEY]ffYX9ήoW`FY05=djnl>Ȼ]xB;TCd\V82jP¹)RLOb=af% )+wGD&x`FghѨ󳁺mFP2Y@6xZKlL.'4e:8"Ih̩uLl8҃Xmxذ3 gMl8?<\^X8|$!}:%gxQrZ{??ǯ?՜=Q>30}sLd a$_!d|S_ay]1:t?E&IPV McJUXd`]e4n4(`rͰ#I GY$o(ƮfTt{l@m' EO"0840alPS 4gTBIL4!iDSX2dgPdMiTf" Mt2$%F[U$!$IYcFAXʺlIjbc+w.X( #,}3%d.ΰ}stQWUTU2$ɐFqj*r%,4J+ht_EEG4dDF8, ϽB 1)#+D) +B\y'#x:iI]#O<2Ҵ`2Zm8CO4( ̑ҳ%S M3+!U Az2#hxRu bq(G ѪUd+*, $ɃY`脕3#hb_ eJCQy2f:@uoJ%Եec@"I%ADd70585uS ,MrTVka?Ǚ'Lk>Xܹ`vT:BR4!IRII20R$Ѥ Ckll,!D:bЍVhIP#Aþ#cwCc?4Q"~mjJ6];FiT>{[ 3/Px$ # $xɺ ?ƈ1 U{4/PvKgdY:&>h&mPT#<!\$Pel)G N ^g}o>cjMveYYRCfn*ɽIUKbpx6P'qTU[" σ$KX%[}ϼ;~XdܶKWzZ(SB)%B(R(1`UVL]f:D-vvQ"+ Qv- S$lAD\@ub Ĉm$5J2.Hq9KD >!B" IҐVV {)Ҥ+ei"[aU<ֹ9T&&G NC5l^j |(#i fcmr̍Fѻ~X̂USd沠,,_ΒѶ)0bn8E6Xg ELL"ˆd}ޯfslz9ot^`2`lGwNPjGFF !\Že7Ё & +M㬬LP*!L:E ,-jlAԺ`Ж>Kf=ݢgэd6͕b椓Y y)4 +򉤖KdtȔDDYA(>I#_LDQ&ua>'+E6]1xT+"Ycf6+|1.O "q1 m.n-uH(KM3G GYb'<am$ՒIYld7GED Q69A۵D?2 ɮ!ԅED$`cƵ4.yIdbF&6JLRkVR6XDŅ)F9":l!M9QPWMUgsLjzR8tl/"AYAYZ c:K@Y1裠R⸅1y=N1Ed%Ff.kF;*S@kꮗ* 0` ֒0'L) K.{y-@(ِQbG~$UQf ALܹ ",ыf (%-eVI Sllcem:H>Zh%iT_.5F R&f3\X`\dUjeY_)X5Dx]?;R YP5#8Xw]?Fb2)I%yQ 6 [|70 HtR4A\C"v c驓 1[h&C_1;zsGu=P@ilFV"PcOL7 pY:21b;̘@`sWmB%1R }"$!xNHH\R~GGS.L%}Q4uT K"Dbp]VGLUÃ;PߦL,$ӖkcJ6j&MJV*JQl9 ]·(dt蘰oy٭gxo^wXۼG?㘝9hYb\Ïl Ř(\QKsJD歍atI]X]h+9<豥 WBRRÐ2r)U">BiW08|ٜS#" I1ߣ?ѳ$>,T兄KYLD*E@5RLS&ga)YKY:*'^8#FB)E𑃫]u* dJ ܘo6,1!+1NZcU]K z5y\u[I27 6SH8D@kcƁ|+^d"fi|\>GOprR24u;\A DID1ƀ%}ĔB"Ls:s5898^[T!XY>=73"M~`<Lȷ籖j}jJv-/9yp Vk ! =xHIKV(b&K86-!OBQb0wt$ 'JQ}^D9#{tSli Id|{n̞":,8 HJQ$hRg9e]qd%NE\ 낡SiY[( |ȷ.>9|Rdz  .,% ]FPSUuzGȕGJNSiȮoa|Tu(K?qԪ~>/ďWQkuLg/}Xqހ !Hw$'Hq%I5-8~@Ř=f!Y+ m@%>\u/Jb=LdPZ10}eA7[ YEDbcyAFJ2ҶEL)bUeW=3>|B%7Ȭ"Y鬭*I8d_&. q ]aV| >BUal!a 9ijך,$.JKB'ؽȐWx`cCbF_ 7VXU$~G~|ٿ _s}o$6ߖV6uV3TԒtZ lK bWmKMOVxǢ1wOfxB0_'r>1XBaIU_2!ql%Äb 27ڌ],2PڒE PJƽɆcX8^ 5w8,#󃞕f|$Xњ4}GJyV5'Xbko զVh%W66Y$%(b~@$AI+CI݂IebZvX9nȓutccc,)F(tKQcSuV ]?O~}II&c kyK].FeӢaXX ȸt-7P 7)(n TV3m p-L+i9}BF0V$p1dzyFFG #{Ha.0tS'G/!:y.;h)I*I˽'Ay[ἇ >dX+u~SuÈQRy`xsTRdhÿk^G~7q>pmh5Cpqx::ty`y@Af#uY9&%kv֏'~|/4GOçު w6ƽgN/~a|9r=Qp3@+ A N]C)Ss.]m %RbR]p:!Oփ8oZ\K+ES{O7DTEC]Ԥ^.9y"e?8l癊2*!҈t|)"ίTSn>~g;GIyv)MJSڜ{F.8e NmBkѧ ,Ҕ,>sD:B# JѦލ`|kis⋒XG>_ؕ*w=O$7虷١.MUS 7uO^fgkӛgXݘD)] ``EaHt!1eAQ"2+Nsc?p궚͍<%Y7p5Hɱ) (Q&7ʅ/jbQ|?;vv=c TeE9jxO1 [WXADa5IKNrUM9.xdt_RE<Y,:"En-wŊˑЂLYQ ISj)Y>VețThiWٽ!c`賛G %J 3c RIOiuhӊBTҰw1ts"n>fͧ72DJYN[ ʷ6hejt{qduydYm:BSK;`cw'@KaRDVE NjBLnD nXrECa)A R"ʌ@H.FfYUйTfޔ@E|s}'O7ޘp>EϋnNgت/FpnEĨמzݟR,ߩ NKx۟JW^[PڠdAUIQdFY #P%VgC{WzY9F3đqyTK[ "' c#*Gye)B+|A2HOQڬEQ`\}>ȱSF; * Nc؉&kh8seݶ'f6wG+u#o^?vO~ûe߿^H:Ӳ{u3'[^d\Dn34P%)i9"*.1 9b$0;fN UYz{I^"]l R@(-^;[6yRW2㈏ E.R2܇{Ӎ11Bֹ&bOad>E R@4Je`fU(c̫T/KVNe,JYJ.8:;>lzJ# ?.oû"%RBK#=I g}+5VU\:TMlbL~Z\,0!F`Jނ Rg[*q2ۨ="8L)dž 8^r+(Yrl@HŌ٬Dgչ~Z/:7.Qw++̃9\8Ny`rւ(M#'l]lub1Ԃ0:]"KҒBȀ:mNpA=ɪ*dp"asY-#qױ;'$t` iXY)z .&t7rfŹıIlVR(eI7Giu6O-G?{!dف;r${>ٱsa*g_$SKE~3}yvːR*RW ۗL 2rQ@¬1qJg"Cz倮뱥DA1u'>-)}T1c 7oS5+U5hPJJ'oß}tRz _tz;.łÑ{>x'/ iYMAQh %A]B)I4" 'h !И)#ͤŬՖLjSQYE)Kr!v [1l4f2A1i UtHDjBVo5 RZz=LD1) zkl k׿~Ow<('wɫS|w{>ty) : @)%Nd}RB^Ycܵ$QPXCiRra"\^żີj&YE ~?ﴭ~HwŎgdbE૟KѼ Y$@%/=AނEA-+V p* YPX 8pl{9H[s{b+ibBJ_W>s+щ?z,X'%ykzo<Ɗ\$&UC(/ GiʉR"TV-s .p=YEA2ߣJsx'Qn} ?cWx 8}ac}< U0Rh oCٌ` xz1(j}|[n瞐rYBiQu]\K_5uS?x&@Š~>~25UGօϴ4k7⣟E]1\wkv؞{Y^pR 7).ܽor %zh/~/Y0ws`c&Ą~sb\wc:`OZ2TTZqKu?{gM}wYV!_g:x5}kr{'+myJ˧>quu}-1ޡjyϢ8]ƑF7lcVwHOg :70Q("H|HƎWxr.yrcWڴ}zċL:X+'^;Ҿ bqh\;1"pnn7ߵ _.=>&A&(p{$f/:J"a˻;_ٯ:%S5sr==ھR]jɟgb|-H|Na; uZl_g@7{ks|HXIENDB`pioneers-14.1/client/gtk/data/themes/Tiny/lumber-port.png0000644000175000017500000000215707771100213020351 00000000000000PNG  IHDRIbKGD pHYs~tIME 6)IDATx[oE3;ql'cbQT"B EJ߄~>xC+%Tiss|ػz;<\dh~sfho3(l ?/N$K8J`_.Qiavm~oENؠD9!x7? b,?)(W)/#vٽ]٣Db^ƨksrC*9,ŋ6=;upT^~ }%CIPNZzt峍%ŒV;L/vV[q!.i\IE]b3ZrBY +ch/}m+IˤS}vtXh63[Զcg s(H#uSʬLf׮]3'}ܻѣ;K>;ߺɽ JOow}e/hD.gG'y|?(wbb #:xh]qv/o<{wJ[!J_U9t6rT*oJ+/v~ ,7ćoqz/W'wuZ|GKcl=d6..WSsz16/JgxF7̻_޾w_}ݫ?:>z<Уc"KiJkJu:լXE1tƨ@Dv}/K{띇sj>~ɝ߾~ѽrrzDuaWf'Ԉ +@D(teZJs>q9BV+RRZo7LćOW}q|tWwtu\,euRdA B"MIJ‚BZ);b:zT4/vUߨUEO&;˯uGoW]}ޝ;:j~uF#̌( C @$ %J!Ѻey2Vh^IƕqiK>ǯ=N=ǗW>z䷾ܽݯwDT'*ٹjD)!?9औ $e).ʢ(8Oլ\,glTR8kn5ܙwW.?xr{ON{߼8ꑙ\ܢXǔdA$ŘcBJ1+1$$aBZ Wu/f#{>Qe5+ER"<+OZ|Uw;Guo[Ͽu˷]T(%UQb"C@ {FP $QRL -ROFd6)qepHOx~kՈMͣ;ٻ~o/Ͽq:]SbII R")$ .̩8zcD?`%H$ *鴶ӱ]*kQ+J+":U6zztg1zo'xr⿜d~g3Qj+3ERA($bR̠I 2BW~#X$A(PJIUYuiΦ#{>Pzk+ Zj&ӓߺx7.gߺsql% L)IJ$Rb0R I{J1p! Q ؃#H Nj\Z}<y}WqebR8<颠GS7wOjy^=9=i-^>HBL !CN}D A(!>B=G9=K2HHHIZfʞ'rVe1٤HO@Uu2t'/~w_oNVONhBJCDT5YJ$8!!4#("S >Jos ."*`y$$B糱=e]KH/W=+NIֽW?z|gg;?ѣ+ =IՔDAȩ{?"!qcPu@[\?3BH1!CD1%\}I1IIPBJʺhTڋȞv2˪W&=J儾hQ}qGo=,oYd*QP+C]![M@G8e@3 G/=ՐXň"ZMOGrZ,ge5UO*ϯ˒N~x9qg~ulr|2M9[bnS1A4Y(`D\>xث@2%Ч 9M$G%"~ ARB+k-ZC6$YтR#Dbʺ*d|t5|uvgWoFuyg7ϯiK Ѩ~p>;yrw׎拏zDca%T-,)$B( IdCw;hs$~*Be{x#U 1rDDJh[Xb BH!)0TRHea8r\Ulhb>o鳟Χ3%UX.NVg->8?^~<-b0鉊 !yH*@* Dn9=\\G)DZ_="8<:uLRFk \6%U\PH "Q(!ʑUMm(h4~|;go߻8>篚O—}K;y;gfٻE5+lDYD|uMC (` pޣ:xXٲ<T,m[v :ĔBQJʡ" ޣM@ 1$h]I(%ΨjTڔs>s?O~ӳ˟|B`ҁuu6Nj^gwϦW/go;}N߭(DžZTA :])@BC @"ygI1`|b^b_v-n[l[m"FZ1D21) d$¾M ) C))FPlH+;l>=>Yt{=?ϮUrt5Nj:M_./߼<}p;XSATC!h >%pqa4h;D>F:gЃ*K1DH)@ e]*CZl;n6Xl5!@JѨFU,:s34!3bof-%p^ "MIڄPBUUEu5o&l~|v4^uϾu8]Ϳ:E},UY'XhbB9!d9b:P dD"^rhCthfn``bݢi*E"07+CkD݃* <HIM!Zж*Lq:>YM>l9_uOB ˅:;-Nܻ)ႀ @ޣsp! BzE$RDSAHyӶhv \"ec@a-0¹m!ĀsJ3-bIgDsH A(4 lJdEL )G-;G (%F8|8w?w?y~Rz7_+5f<\>sޝWջ-'Saj:yOzQ4s'dn\ziA$`EQ(eU(,֐)A :ס55 REUB}Ӷ ^]_WhD$(EYBkܪ0xpI\DBJ:e1x<,oOjVyU?{女L]OG..޾y釳-+RU.)>utgA2\Q $V1AHn7[`EUyiDv$h P=ͤ|`k51khB9$Zkht6EUUxB`@BBicW1`(8i>mѸMI(M]U?Lϖ/OVϞ;lYe]ܻX=y䣋Z.ߪSe'uQ9jmkAJA+ 2hCq\o;w7"14,v;h5-PV֚ ,>"bHІO! fbPCJB >CTJ͔mH۵\)K) I!I$l")*[h>zdg_~G8ܸ>_XOdrq_{)S#2(Ρk[]x)$$VP-)6l5=<_]O{?z7㋟LGf(?`]rT>qW'_8=r<fZ&YE'4]Gm۾^V~WVlY(+h[B* m+d"6D>7yt'4J]200ƠuUcH[RHs U͑Z [qw@J )Tn;)CD}~8Fz`.W)D@@" RFUօ-b:gNjONo>);̋<]=?^G:]Vt4djuɽ_{J1HDCv5-en8}!AYV((aleKHcb kMĄH(RChm,LQ( kJr>"u## Z9 )|s0I> UxTn8i ޱ"E -eJv I BZmS\.zrV?|GY/6ܙIb~+/O~~zq1Z(J=-CunP~qHWڠjTEUCX([@hLH uLsbqF$%T2P@i&"냃kl׷h6k)%HH!,q!8-{5Fxӎ٘R}$R2*~d9]A\}Շǫ[ŒNF\(1E"Q̭08- %*/4жDQ(@"IH=r_ [UCk JZkز-Jhk9]y{(|pyV0 i1z! JwnLac YWҐgA>]agdpYXc`R&s%9~tr0ߘ12V@c, a GFʦ܏Ɗ<s/vMQu\ˋݻ?<|gui/XgV\Of,~{~|ztxuW˩(v*HQJ@'r^#1BR dWm H[@ʖP") O <"(& )ZPtpZ"s!%|w]ulS }e1BKat)8L{4;N]HNx'۶E6 IF+h)QQA@1Y1!>lt!Dxགּ%K .vb!!JJFV YJ)ƣʞ.&ՃմŤIrV'w~⟤׀uhV+/?:;hud("0HvoWHTb݇SRZ .@R# Hl.CN-&NZ*!zcSQQ%a,1 e @JR D%I a## l3I5KnW&{A AH+Acn]#eKJ9l52DFJ-YlYF_ե}xWɳOgǟq|p9;~x|rbז7GSS*QU*^|B"<~+źX`,HHR͚ RV!L $`RJo&)%P?'(埫$R' !H [b|444_@15Ǿj o$ZMOH=A( )$dN=5%I){bSQX,Ci I"/@{! K E= 3ڞNFռ~^ͪ6ozp9մ,_yxz/ΖwFՕ.WaD$]y)YWTK?=G검 B[@e=OA < e( ~04`Y#@Jr(cB .cǧ ɧ}0֚.:mL Z)(I) xA (aω (e tm77{_ )NM*yb YSNxD̀UBR^[c,.Fvr'WVeuѻO}|zrdvt˅(z*jļ'%oX9~2M,IWրZCjz W W_"J̈gI6Q_Vo`}5pG $Z!RHHp]9S7pX-ZvMڝ~ IDATsBei]ZAdA4$>OjS|:20ąČM D $(/PN)@ "HXA0R^GTFQU_LGO ًOշ~ỳV7ű(4WGW-"viM2t hNeOQ+ҷF+HaR,c~>}M*=D*@*LߑbffvCӴܶ4;G=bPC9#M(&ȏN8Ƞp. % kQV%BULX\UZ3rk]=@ Qi ADF7fl<\.o6B?l3Q)*E3@Z}/nbpEÞ!&%15$dFP`b.yXd]Nm$kod'AW}ϹR.4B.}.~Ui m hЋ"'o+u-v 65ַXFvC9!b@@DaJJvZ?b.Km=VD^sm|YO J\JD "JJQңj^;L yd=%=Ӽd"8"!щ_@)@%^wp$%jKs)88r\ꋁ# +j Oja}uy=Q?0}eB@׶!@*=DNm;H!ݢ10NPVRe0i貪02:ǜ'em/G>N 842Oyw;bh[j6A/kTc~/(W/HDD( !!U4<+!$%&H Eၛ`+[?9P(;JP>!c1SA{$0EPYȆ \ v : e7X,brcs77fO(D/|Ec]ǜzr:rg"WCj̅M?_!|gݮivجچ=\2NJy2(^ȎW:)icR vBQR&L(ADD&_)G}>?`IdA~YQX()x*% ?72B( 8HB@ZE>'ͤEC;v;tMYv6-ڦ\pmnp} (NX_.I&e޻C/[\z$#+ƀD6xsx{0ޣ})^k1 l^TH&@ 1!u GR@0^#=7Ae[lYB*vb}}kyB ZNaR #k !+!BU)1_9Ud{'rcZ:VLC1…c_Ϣ~|]fs%gqq=8 r)qhv;<XF0E/>Jj];vls˩,DhR}JDF&$%[3ҡt1oq#3o-((SIBS)ߟgL$aP% $8!$ʟg:(kwVȋ3:.Ri'W+9Bo@۰R#'O2NȺXD )8TJf (KDnީn7 s 9-El7[82ѹ cʝDӰxZ ɭbN b`lz4kI".}y?"X5gApNb09~3CΩD 䐓H 0Z>x[C֚ (K{wI opC|ﮊ) )bZI!Q&}v1 0L`ͭiZc}H~1~YdW]{<3ix}zZ+b@cPȯ::6jZyσk"B xxGy|DD%wJ&RJEҗ'S}院DGJ供n}^10Crtgye>9ZEyYF1^;W<塻"}@Kyc 11"aaL&e໎+`1ݛD{ÙF9ct^e[oR (@u v*ʕ( <шEr"'~  kPvr1B)>RʾLU,A>\ns0M3\mD}#1)w26]v&:8߹8M9EɋҌx H_YJ@&)ш=xksJ"3PYRx:!vӁLU > k6-ڦ'*H0Z#و&ITBؓS>̞yDJQ}l/-=$a/08D<9s1Dku|"~)ΜE)B*]gXjqŵmJY6`UŠ& ĀۛpXkc#HJ<5B 0xhsI5$!{B6eN%cVEUR(8'_뤂B|2۟`n^4e`E@DQD`շj}1_hwvzZd.SZW--27\CYoږOxL<(!CpGucKܵڋ9 aoĄ,ج׸f5]I# Ї0}h4BY0ZA}|Y '^+Dz rOH,z_H8 Y92Łik wTz"(R~/Px=R/by^8ԋ^V_{K<ڶY޳ W|=bSaJ ^rA\7%z"Brmw|9wc,ꪂ8:]kp$#ʊT ;j$И{_ }x)"ļ,Wc^-c &,n}@}@`?mSbه%@&[ UC:Dam2C%ANg`߯_\m yecR:({[ 6;M˫ŰXֹ] ;G5EXS$g?vË/h4t:C)w*"ޘl2)h!F9֩ro~}:.r[{Q$%U|vJ!o<ʱYDկFiB8iHP\c Qf??WWcR/Hڇ׈boӓ߃eoS9Okvf1!=_:6/EܓmaۋMYZswJk)ag h tMM?elMa%t6E!xׯ^-d̚U>7O>[ xsr:!,I,FD wxMJL짝ܙg =փ#2xgp;z as1O#Q? !oOƁ4[z|4+8xR\ۛ[\`״PӃiwpev \Uvm ,-[}xpC&DQ,K*bfe4&rBhY}eY(r?\`^xu͎<&&ϟ?G׵lYs %aRf)?=vH/ ?c@Izl5Fm~_sCY#Uzëw nn١kKFcTU#^<{non7t6|1ǰ $xhA24QP yz\~.SaOx>_jBR"$4w c5Ρ!~)e`E@ <>GQdq{@/8*%AA諗ʇKn⏪[iu-v%\.S&"^t] )hTvMӢlyJԣ&K9fOֵ`:FyڦWl1Qbax5 )!o<2>bye)]Ի5b*齸Mu!9 00Z @D&Ä@BG līףyƞ?/`a<'%7Qf vM4xTZnbZU D0`]@<jX!sȖX$BQVh0 ܕǻlQ,Kݸy ^6R|1aGzUǾ,1/"@%x!/:0 ezrΣi}qAtE U>/.DMzN dڋ) !׈D 1DW F_!,~ HVY1Eed*!{xzL&/x9._ }-%nX<f-mJL& f3-D)m(d:r@۹M&)ҘNNUE$8R"e?0!%|\u7а'_bb`ׄ| %_0M,]kهtxbOq e,0}a|Fe]R<$G)ma^vmQ%FuQ]h|08>~Je(,h#d?}[mSJPJa޵̛a4- L3|nǫs*WJb#v-n^BW}WU>Dvz*ߪA ht-ڦL1G/d)aAY(n5ܰS߹<=XIk}zrx_5ЀԜi.~g7lD7x[Tۉ>e˶ݛ5-v[d-Xl6OsG+x*7pHC#Ic,RvaװT6#¢ji C;pFЊvM-˗(Z+ejab}F]ۡ(JV %1ݎSenubؽ0tm7C(eNܾ "r۶ |țuC9)Z¾̽ ]&`PI   w bBL(/4_vPb qoI4z `-˂y یpekc+ ݐ݃+'*oQJ$f]Yk41vG|6vvggx z#|1Ǔ_T( n0]1w+R_*Ga TU`Rlv1 8¹B ja'q@}t$tNfYJB/Lc0zϛ+I%/L)S"s[ޠihT5@ &<79% 2Aq~݄C RծI_mӢlTƢvYbdiY X[Bk6z8/=fvg` h-Fee 1;4:t]J!Pu=B]PU5Vy}Rog.{/`{x|U^3/xp/]~<@ HQ&=!wp yƴE'E8)DaEZ'Q*;!o^r$"-n7x?I tVOX8e;|À0n; vnn6 o Tl,0Yb״l[iĴ{fa+lQU#Mf'\%*3 B /Bv]֡ݰ HC!AsgQ<12b& lSDH!)Ъ~^ !`NbOv nnoq^:(`FYpK<Dt? R#lps{n =T 4@L)HIpCV#1Tl6ج7hv zglQTh;f fw HA=aCuF"{y{EpdZӕ9&ߙubJ@\gD1 \Ű4QI>t{ bBD̠k .P($ ᬣHwRRWf]^qssfwr/ Q<}Lڳnf_4zOז ))aAp pc40 g*Jh<ͫko׃:m,.v̓ZA&u2^(^~ţ(h2gڕs77]ڼ;^f~a-=mdzh^ N$! +4 //'+2{/r"bD&R) Ε˸Wsv 6Y4?йBnp*\ck;I{OYv˷o929>ZQv2ۡEQGc\FTĻm;t7nQF hɳ{RT(Zx$[30xObiv[\zVk$|-w[4yS`jȃ~!q!}<'SAo^R=20ޏ5XS/ދ!F\1ޮ7E6@QӤMnР,pFR2| jC&د@g2YLwxX9֮-O T#h4FUrdY;}@SeuUW,A&qL -6I$$j+mH3IuSd7*3+3cgs#h&p|9J)MXX #C?4U=ٍ,ɪP2.~#q6@r@i:0æ9VThMmggxZ2m97e- ]Y?V*y4Nka {B造Њa@`@ӶTeUG=zb^pOӵZJn#jO? sN_3>$ufY,jvݎS\z{:캮M IDAT|c#}?r;޿cwk ᠵ?=SQ9ȓ6|Z͆ y& O|nY/Wݻ{ȇ⏾䋯>/X_",?s8yx0hcv{Q^(Kq#IAy =L̦RqeZm1R's 3?§RHq!&P6`x:a%y<~(0`71ks`rsZ'3K;\];O!,{;k 8Aڶh*X)y;)eQ‰Q.j~y!qqǻ?'9}jIk[wT/8>&ެR`i0/ 6v&zu~I5_j4=M_|P=rbp Ǎcab`Y Ԯp&+} >(*P'$У5*Hwf= yqG2^cچ<#UUӗw{c0>PW5U.hjd<ln>*ab !:[zFMGm8qt~$=a! g9Ji14KJj˶9 ;;ByxmN4>.DFh&@骜`,]s<8O*gQd,d|V%)Ș 7933^X_1I(TZ#Ȥ0)4w UʊU7b EzB]pBg5Pl%ݾ: fZdaOo,Ɔ76h@hagՓzM9XM6-]Mbl |Bi[r-uEd#ɉ$s.sY"&b q~ W4(i/3A$}ydi aN=xiU(Y}ۦ/~7 5Ñ݉ׯԑ:a{(+$ |->~ex" DiGG &LRxP*03Ɋ,`㎇cx6#@ɲehApLna BHɠ݀x~Ǽmۀl.nM趐(L 4IͲ )ymT؋h$HyT?b^n]˷n AA5sl{6yY0=ZLD*أGXt /JSY,7ixFB^$cׇ^=4="}g{10XBwSAZ*[㞦=ѥQqAt#H2[G|5Þ+FXW o=Rk2Cg۷MPE %&jqi!d8~݉_SWn\rSgw1U&ZX8 ֫89vt|Y_B#j?p{p$36V%R@oF> 񀳆&<ˋUYF i}°s9﹔~? -Kжm&nR tE" WB;IQ)kIˆ#d9Y| i ceǁqxfoF=푶l?l!0 VY2C đyt V9"d´UÍcthGCRWQlK\9Cxu:>H‘KA1@(3-ZXcX(Pe2/9tBIxZ\]GUEU4 deɋ/雖\W7(%p}c pX*HRʹX!$Nvկ nv'\]nx >}z=e*!ALspLal#X@f. ?f#Mq Ͷv y"bģiQ`J22F?f9ͤ>LGSV%%l.6EўaߥjM{b\{e.+g0TF.4kT݉Jɕt 3D!/qf 08zW/xC?r3A c RÈx[8)1c}lD꼠*T@cQ:p_bQAcc ł'\ss}r P MzٜOa'άU4ksܔB* k/ 0ugA/xVW9eQ<^8ǁg :9ܤXՓ%YQjb}../(;El۶r- Ʈgp2gS,Ze9PZo~|Ʋ֌џsDpH'!dX,.WgO %BYHi;l^pyy~ݖvH%0@WB )~^ >2,zT&Y-j..6, ʪ-5]ݧQEgXpzdɆ.mjR ME`q0Iha9d;tsݺYo=KE9=A/W,ח+AQU=%,({=WOVBp}yEӴ m( a eYֶ\ lBkaޒ+"+3Lތ\\l/P3%הљΡwZ`ћ|xEʌd拻Î~x:âX, O4iqpqSp*"xFO%$H nA+bb@8}@BPi٬dTL(R뜍C-d:WKz)H5Jn 3)᚞g7CrU#Q>)L< cXyiJM?28FyHUnoC\ wyp#$(hN=*xRt/ꚷ#S~`T 4~3':?p{b2 O\}xtzNM4t~`ޙN,@VVO'hdF 2%hgP6n1D-Aqc}0 s'O#={O,>Eeř c4YY%j3è,y蚆nKs80to=} x~PA)˂UU7%/ E "d@4>x8vߢ'$y^`1̮8QEm,_#odQ4](Cs MU60ОZ>ı=1ۚفwAZIǁ@"[$fFiE6GIr&z-˜aaOɨP&6H&z6d=3gvOj"a׉OTiM^Udih5 t_oᎡ;yI&:7Y4;ZdEHVJJk)/|gOY]K"g0&([%\0]X-:2#Q޸y_7O?cX`?ݻ<{3h:$sm/&O׶@mofGDiۘ}"!'7y{Cj i҃B g$QX;"A/tB0 +>wi孉Eϼu30/M} R:̩i^ e977/,/^<�=KԚzXSI!PY8N30^T LpYs{iuf"Ӓ,$zڡ]0ؐ *ܱx:t<ϯ_'?u۷|kUŻ;7WΎcma_w7?)SXh ը=]?v 0ܰjli82H(>^.ȏY:<B:xo9ʹ'#9lR?Ii &t4"8Y'.U0DQG3azܞ£g|8 |zc=LS-@/7Bpd Sh-B;0 Ӊ;24Rg%l4ft> B re^}ʸ;ʺ:~exլrfOQWXKl5Mh0vֆ&(i ֲ=4X먫}T9E'h5gT-TʤX?y#9)c?D?WQ:m6RtP*I*Bj|o 7l[fujŻo' |mx / REM@iF qY.W5S c"`dha1B 꺦mdQ~ h\Yyv-*-ϩ=b툐t@eh-3Ͽ+(TxoSj۵4]C%MMao?.<zdw3lրMВ$y<^?l̐aX~BaṈX$& =gSۄxI)$Q߳l۱8PK[tUKNBc{6u^2Ƕղ#ueI2iyU`Aj0**겢1d}s$ /fF,uQZ]2<|ĘgiGFԢ fSK!8zΩ0tVUW,΋`H`Q,5 yQNMRiH#^A8Jh #a;hmaP# qN8K  sTd:tФ<`M ;q‘咇1;zgYo$].Π$@ r)YV+kt"dY/>ܳ\HKXcHvjȪ@!\8Ǯ,B1 xvgoE^*q`97SKyӶG|Y7"Ǟ;~4NWutCJj΅\\y+^>^&*ޤgFN Ad S7!!hyKFHG}P)hYKFH +s#H%W, %0-gÈmFʢWXU+0wjefK60sRd.`IJ2cI0PuVᅥ,=hG }OUa a?˲D9fıHa=xЏ F.26/h1)E ߭bsr-%Zeg(qpTQR4_=W\WQrOJ>x/z|@:=Vn CgF҄TBx|djdH;,[1+f'Fݭ\2ۺpn-)LNVtC>3>ܩ< +fD38r!9t`*Ԗa,`UT56KQyo1TU։=[uQ/k5v)pv{KRTRCxE,Mд(in|9)):2g|<DzB2Yn"8Oד:A?3!S8Ya)#PP+:Ɣ.}ᄩB:ClcZh.f{,f,H#7Z+/6 ]qU)nE )s 9X7X '" [8}eajEe5c;d,BʚS#m+8:gθ(lp֑Es2xeQ,_#5́'P< # S^zI]W@ xZ1>"ݻ(-TǓHxw^ .0B/S8Vk:cFsSXQ/ 8M.110Ϗ0; el.xj)-F Y /FXok[Bg?" >yqð߳6=B*K,8@ 3*27dR )E,WVx8nOtmvR3Z<3Xx>EۆH9QN8y'/k.6>.5.Q/KiLsOX:k@i"2:vQf9_,~̊Cg"Njm4#OI{>d&9R^y7l;q2ҵMQkEFgyr @=L ?elQyrui'ZHoWRKM E{^4ΆoCpn[4J>x4ZǢ 84C(#8JN!2\_DOjIh{Ԑ9җ (:a0!$Gcgy]TDL#tDx#Ep\x% ! O^\, )ή 1? Ώ? x\OH>MIa C4L|_O*1j 3]kQfjJi8~VR+`]/V%˚Z ~'4ͩAѫ IDAT R # }װX"Ut YBn:DFQМ0faj~@tg /QY/-5^ 2E k9-"Z\5?5O|Z&däsD$~(2hG & x{go;OU {1?J]gy􋁊%`)˒5+ ޿7-BauQf9Y$ Rk݇[L^1dmsk5М<ućфTjJ h>R .kʲBtS…8r$o^PHsfL:wpYOxiՍǕ3jOϲlޠ  xaCPK̹W+0ܽ@]iݎiVՒ"+=8ģivjэ o&$iLOcъ VYn#ʑr86Isͳ+~?{J7uڰhKd5Bxp%-T 941K=:~$3qdz )Y1,'M9]*(l7^bۆzErJ]pGf'{5 g<{vG:ͲZ-wTde9WW5R~ j*ԍC+5KoX r)дV"0hpT\\ >z8HAc M>YJ%ܰ GJ +Z~ZxD}@ǁnqٸ N6٥8sёOqzܤGR/ˋ(+B9[U>8 ^ +2輢^]}xBءGzCtCO285'=/IZ2[d)"/AO %?_f8!Fxʼ?r<ޡC+nX13Ik5(rŋO7<{z=ٽ q4Ct32 ݝ5wS'HPAHX!vӟqҪI %epr['<'u51BOjI~ǿ5/3F1 j]PEUFém誤FD{=k\quYSn0Z.0.`tU'"g)rE-niNy`eBettϐ!rv-LʄVd؂>7^PyvϓΕ}ڹGJ4瓀҃)CJNa&>yl~>Dl<~TP[頁94sL󯔢.mOcYsTuSq̈́"@8qe? $m~߳J}K׵(%Ȋien=\眚n܏=* ^Hu0p(!ȔP9u@!> zgg)bxx8@0eբ^/>rBE`f2)͖"bG| HM/\STB )|`S:f,[B52秠1EQP-=PC2g;Ftg\\ȕg^蔡X5YM^дwc7X%CKjQ6,Ám۰l+/IpZ.QY ::?S>,ssL}Ͼ' آEuwdY w`U/k~Kh_ǯBgy9[7,=sVSsSqh*@ٜ ue_M8+(Ū' 7zAXqrX__ hV%@v Usl:Jȴf\Q茏wדqFTZpliځм|r釀$u]`iG&$$X˜C80<ϰ #(Ʉb:T]c\,OGg_٬5OhiL{'1W1N^Svt".'.A2xΏXCY% 3WqbTUʔg/` #p\wUU#xdTyZ>EZZr8X,t]GQ机nd9+,q(vclN4@ uFΠ\GgO(S~hLmC^Eγ̃ %J %uUO>_w \OA<7o4ғk)Sg/A% +7l雙Epcl$0V.1J ~^-x\`aɛ 0D>u닚7t5 FohCyFPq}VEw#Yuvmw<_._o'0=VhQqlS:>>PmD"1T9<#B;푺#;zra~&Y}Rrhz5e_|?GWns?o3bq"LBe:l?S2'XSIw#R !T!.-i$:$WEk$YU>kQ"3[YlKHL`ȴ/=+w]Z!ÌYtVp\Q*noGU-'؞^^Q L-wpXpÜT\.aSOn^^{E S8*a`w-U]ǬQJ[*1_  ⌧(uƱHa=5tڳذTvK/~³ׁ@zŞGw~SvFOĐUZ=>63Y#f xt`7VwsU9|,ɳږZZ1fsqɲ_5MFt-΍4 (!E0~5;`sq/.ȁ9uM/nW_ɫq&6Q*5VIf'&ᖳV9`V G`xS?o!gd)E3 &II75ETR(2a.4B=gW0ΐ2tM/nRh-Dߏ7$ bɯCs5XS*E-9ryp{سG|;PZi*m9".k 70(9BxX]R@.x _~)E]OWhR~HB*9≠:J(ο9 GN&1)u,]_if%*ea|\nJvo,3>aYPSȹoJ3gW 躆Q`FLOZm?G #R 4;\ a\_\K;6/(F>;4X;;5EDUv9 3 CG `ƑzUS:p{KYrӮA8Xk?}_|fϧ"t,MLo Ԥ97? R2hOռ2:NU$ZmtRI2'EeA Xϩ)P28,+n^<4eD~9أzF0v9-Ϟ]Q.}DkЂw?iop`zˢ vlG'O1YSh8Gq_~hCh Z,%_}9w~'/Ewvܹk;Y!=_Wq|OToe(BUObZ ф (RDyb/~O<9Ĕd2CkniB^ k+ŷ~? c =mׁXߐ%m"dUɬ[7]4#ZS5̹X.s[7}} Eɯ?߼2.h5yTρ6UGw^2FFu6z |v r䠛J.q)]Jh`S+2lUUW:bў$ GatDdyj߷huH!0cϡ;ǒB9eRkO#vi(kew?w< PlOOK -Y%*q`SLp:ԜxTe CԂ޿4Hժ?/S~G3~;pd97?( ^x|=΀,*Ӊ~9jKEH%c~0*: ^ٴO7+VO^駟pwqGu$Þh5_rKI^D!+5݉-n=o:Hg }b;qD˗tm8ra0Ci(j{{,ʜ?_oBwAJ As]\KQr~%L?>YQ=>}ϙ&"Ąn % ;p 6y8*8+3x z!'} jVq86!yqqO>Y5;zzɪZǦ+^;CߵT:o멫5VHOPJt}`2A,75 uzoR+FKv\o(grO9_s}s5\a$ k"kE({Y)E'ĸG`x.AdLUI%6%t$c0T]atFSҚ^܍z^پq&*+.1G)Ϟ=eِE @8 QS=hw@4r&iX}qp<`#j^SHlÚr\^p}syvJ;5Ѣ/E&D(yb߱yq?Y/q:?a\-{C|Q( 9G9-.€|LqB`[~Ȳ,%,T'# (a.,A>D`D`ѻ8< sw΀i`1dtidXEGE&wYV&"ڂJ0)ŋ.=АLYf;Φɨ-J([g;?^xIrx3yT[pGOomwfhco[7xnS/˼Rn(p=>ۀm,K 鉉Ꙏ臎>v:*+Wɛ,[ )[DX>.(gv*ݙdPI |,Y.jnhaCMJMsEGvctGa+TAh?+$ϷdC Ja(WXi0fV)P2>/17f}ϘuhJRg`U`oGK{^Htg֌K`wh,3&뼛]^DW28-a)oS_eUӍREP9s@z9A$-%q U*W7 47ۃw­۷{3d'."hK!s(!p=wN]dXykDLĐ_4nC"mVx.;9|gthwz3we, v-*7?pCBF'?3"N5U3ܩ^_u.+#e ȋ^KJT+$٬ϮљÅh$O놭!=G;.*ꢤDKհU7ͷnݾ {wwRJs{w߻;p[ կ2Һh 6!l!G)XJq~Vqͺiyv&[ ԡ32X̳9&Z pvbC@@S6Ty/lXEɳitu6)ua"rmf: pfjN@ %caрqFΨ]}ΰ٥!T0вt0ʠ(r( v@߻;8 6 t,L wz,M`ovݰ;f/Il-ӅIHtM"}Y<ٙ??mL+4tih֒W|_/僃WWONE>?iSBBl:d4l۷f_?wof7[DDtG\aw f{y(a]މmT1:j?@!@ɮV0~Np6h!jlU@EFn1P , GęhWSݜoED[Am&p4U*c/ji)e riM[J<)k?L :(k:w_^%- ou_s}$p Atov<lofzqk`@.|·<bpc,r<}щ0βH)V;-&H,AD76Ӕ7;;72dG ?3zgQܤ}q4 4Ml6,Wq]r"|s&N˨w8m*:8[f:IDATϤuP1GPsD-Hn׃=ukX_1D:^ArΡ3E}wށ3Ulڎh7˱ƨۯdlgF+|>@x|7 ޷nu Z`bpl_Xܝ-qL㐏9'Z* ,VM(hT4^çg뇏_yz~}&/j.XFM8xۄyVB!v%{$A-;vIngw6k/C4c& .94u .w>ܻsgGvxsӌḣ_F+g1t#`d7:ǽlrEAzg[O4]/5L6E0:{ .Rkhc%)0X˳7?Zɱr׫^, ~/VQWQ7YISo&dߜ_fWG4%ڹѻpa|p: >w;DVYO SW߽882v. fu2rHMlgz av!٦p4{us;s,Smm<ۗm|q(ߕ$j,[**Iv-_|Ÿ̴VJh :v;^B# ә vxyܻwn͝W87V?#ۮy!b5bWlhۺqjAw [C}(vlsLV7) N$yScT@t> @)D-<ˢux~P2y6Ż̌6>TRO4ōf KX aD9}0`emZJTm&&W~s/.?;x<:7˴XfG}(kaRɦMVi0q's@8.3CD췟/ )f=7j<.їY4h/5ѪͰޑv%}1-s;Fmck^ps3^CK4;iXC-l'o(f~tSj6.{w_,#E**8M-nZJQ8D#]G@8 M44Gwm8|^\i?8 vیH!Mo~0N6Q/4<hwh+|ڴD7W% 4@}2(y6J~w8>y|ɉM/1{XF6FU`ɶ7y5RKvNDU3CR݈~o=ss:e_ֽ<4)ұ#;gЕ s˟fYq:@Ee Yi]-,WM[a%WGEYeXe Lkմf%ͪLȕT2vb.b.hAP+&`+0}B.fsdS y^ekf20Hzy5iC_·chk1',lCY)Uy[6~|J<_l~wp=zWrq;HοF~p`)jWQ)PuVPru+u4T@OvL>3HnIj®L ,f0+FӨkJM0eS7LԼwS4l|@!MY:L]Ə'Oon./bËҏ>`2gn(YٖU"Jh+LEgDS(栖hiD$ݰT%}#}춥)k刬cZG8?MQky@oX0MN(s@klRu/.dՋO>8zr5,y͊6(Ju0t7qqbI!pC;{`Uh+=mw\ Rñ@|xֹFGyH7MYk%ۘul*ʿ_g/N*kG}H6$岉:MƯvKp(D۱':#MCDgGtw62AF-FךxHۥU7eq^mTN|{Gٷ'ӓbSc]%2lj=8dͦJHv;(5gts,;{# 0+ok]F l$*ı΀0bԎ4cCՀ<B#,nRIU::,qy~|Ef]HUr,/[R.VBP)Q戊{DqhtB G;ak8 FRռq`v yXt P+% KHk Z&n&m~|>?ZD=ZU"\o>x_QWa)PmZ,+[l1QqC4\Hd!(p<9>N-Gz"2;L /qk=4" 6Ҭ4> j7,˷(z~=|>><{z-WY~}G8m2:NM7n}YN+H%#\ h1Q 0Q|Ja&Pl;Y[4Ү;B,O٣yI"7~|@Ht02aQӕP"pY(wfyC$\L̔Ua1e:6>DC5f ␂YP@h@hJn"Ȋ2,|pU|^/~T. J5 Ylˆ)K.Yd۠l vF@?¾l75FzixI.LD`Ήf(D:J6yř_]e7?x>= ^\oUt-?I`+˰\:4+j&S :(=K6v "\6S=FVݤh63k-T[3@4"@H# m"膷Mgyv ep=z|<= /$Ae$NkL8e2NjUsVgқ?&1h, X ?3,9Zg9jB#@h`4jQzx6WON"N|hG,#}s*:,Ef]H~{:&Aӈ}S 6g`1bX ŚEJ mmnu|2nZƳ)ʦ +ΛPBQG4Ȏ짒[Y>`2mwj MS]Ck4KǰX)4mi}yoxx<]ޛ(璦&j]͒&FͨG0cZa`]kWsODڤ+k@)66im*L:{=|znhI/.3{g,#hLPƛx['EEWRj렐Ds;ؕt(ɟ8&{&`tr&yUe~=?Yrrx:"1w XFˌ+QJpVUMdzuuEY]4+XC+_&:]ťCP@6Pk_zim ΓͪhW?-8`57իmV4Y5l9duҜ%&m Іm=8m4/sjqy|~zp<{v={V|hEP=e&+UU5+ƛ-Qu]U9l&mr[~?>NX<9}v\I;'R ,#qZy{zxo}Gy[Aς4L8nH$(/qq:M9rSbj*Qeؚid,a;F{q] ,9d 84fCGϣBU56PkE3C]Z8=:e%I652,pCtE咪`uyI?Er̖܌NYovzG^=,'78NޣM\VaD`zaC<<A!:&nWUɳo0^,"?Cee@z<ifapVTuE_9H#EWYtڝ$I7@Ͽ9>|sz'|=I$Ӊ;=HTM\R ~;=?4g&djyfԶWӋȱnxz^n{hͦ~æԔ UKU֑^s/~TT i6q{n=-}2e+QcȎ>>|&ev6 AnXfm1Zr =H,'}h-13 33)3mLpiX !0|恷x& O`$FYTlIw'lI$ slhZ_끻<_b6ְdPD$`x󐌲B3YD9##)ژULb2Z-Fd0s,t8^!+ p=˨ d^,q*|O: AW!7Cv4  6u)*OXY!nu<0i,qYP{P4؎$v `n')4 ZH8c=dmX2dY&r wP aSNJ0\H-fwig sXIS35 7Iq0;1Ƒa-AOZkts7!, I)ւSlZ0`cɰ%YsYHwٓHjjՁ65CiY<À:F€ф^8ZdA%h$:8Hal1dDG1dGUȳ:6]DƱsv;HX .fFw%nF[\}N ONXf87=Ny˻u:wgY`]w6mm3<\^Z\{/i}>z(x iцYfK!W8|17MNGbe07 e:6-)(o ɞY4wBxDz@bD ξlϝrS5#V Pw$ւ#(o{Ŭ\kV\ r'JN/m=`ptIߕCYȠ2@>Y5Ȕ!4,!Ax-p%{Wޚl}43S*ZA ]\J^+Kn;A -,7T(JQ;;#6Fv$.,܃c 3{#i4tR;զ,8Ktg]Jx`!Ժ cc am3EBGrPjm1ոeiU࿻iߝ%_t:(> o+%"CWx:Qpˊ0}-[OR-~@DŊl,/$`30ʊ&/leb1}f(CFul>v`;f<6c?(G'qB_th+\n "eX[PXݛ*k(EWlZO&8q}xn;}g߃<Nhu&$- 0Fp&-Ad5؏`aߜQ7}V*euE.-^s$GܿmO2œK n?o?\V/2, ӌq걏R<ădW2Ce<^ķ@yh"ɇ|ޓ_gx(\5 .=]ۏ7zs.Wm&{B8݆!'(##wc{0U #L'ϐtr@Tܭ2= Vy2jfaj$gVU$E(IhACs yw8#[lQ/N#80a))y)_:6xn}Da0pc ֧rzݜx{7nW&uEX.kLKE ev3y|%.N[w<ݩ>!9mC 8ElQ1$8<Q6* JyPeT17ʲ 3121kѯtSK hTq~S50QMjZ18&}@||_Ui8@P@׷G /XupO ׫vK1-PTЛx5m0Mb*'9zЫ}۴qa!cq b*Iۇ*նj GVpǙ?L'p'CV:L6,g^PaNkxHCOcT&wx<3g?=x~%!#]v0BBqQu},y5GrJf^U墾2W5c{P픊ؔ=ЉaY,,TW[}cTUNɼqN 5-YF(L1Ќr6xno}1(:#SC/ָ\֞,=KGYtƾeXmAߒ#XW܋Vx1Yñˈg6|IPz4P??^cjpZD6Ƅ#3^ymK%H)5 ^<' A4ɣey,00Sc3Q/eYA,g۬~FT8Ϝt X rO= orP)i{LqkCkl,Guc]`>8_iɾ/Ɉ!z'[Ueo0/)Mdz]fnC}t0H=v8:~*E$9 c(=GQ!$MKY:OEa-j~Et>RiV'NJBR5R͈DL|8')r7U~F{|>`ޣ8o !q:7\mЛ\`k xncQHwxŘGcDXvxt KY絏 QYT)ge`E*$[JڣRgyev)nB@t1Q'c^2(\ՙeQ3^FPcY ~&+#z3M*2+[2!P⡒1?QZYۤlM pPfd-JTYt&W_um7Ǜb,.S]F^`)Z9=~$)Cy<~RLyz1ǀcӾH΃& aa䫒|)Ű$&08.4n/&v NQ\d1'qFdAd-C :Ž}MXr$s!H$U{18t-~zș]ᔁ0 Z~6qR d):Q'g $!m:-W.\[YixUCtwV~L!{ۤ8*a Ŗa:)^T妯ۻq{뛱^Exfg)GF+)'}>h-8ڊh1WW;+*Na^P;} Fđ81LiR5ǍVcso # $Z/mAWuyAT`z<ۚ*fN|.f 4[ uϕOL cfEWh=F0յZmEdкJmYu5ը:8%Nއe2<Հ*a2"']wWig7Czm$ېc;8^]^?EgK}Qo.݌fNTU)1bf9TԬˢ΢m ~ %ǟ$PC i0=?L>(|yNEsGNT^%DtBY,>]Է t7"_ eZ0`m$LJܒm&~yu5v-g]"qYJR2\>*AYݒHMҞܿDRnU?f1 'f9^ y$n\\UJ LsiGƑ\.,vk cuȥWH>ǧO??G7|.>Pc ƙM'wc`U_lJ6 PκB|pH 'DY|UQGjE,.]t_ᦥC_fTzW[ YF⺌eNDC$U%_xJ2$ /κ6R}.O7JĈ!#2f4,K҇պ9k~=e|}$lWoUFc6WWSܙ􍤃[jC+R<'Y@)&5cen4`,\^R͋e^j:9Ɯd3U cgQo5X9Z-aϤ}.̢D2em\.͹u4hj9PT1JZq8Fp~[R1ɿ||`ߍ)3AeU49I/<\4O4R3< Ϝw@ͺŚɠJccSWN ڼF mj<-Ob2Eၓ-YzMH@T+4\UnjV5ͪLrx5z͠*qZ|ݕI`iP3+z58#|ݍ_el #o%0=DNmE;hpғ /FdfeS۩ojߺsvy:ipoOP>>mz/XXjd(A RYngɥh0t6De Ӹ^_E 脬g%ӳN]k",3©r e9 -+Qˆ'y] Ÿ_s$b]WY3KZ/ƒj6TTym̥Shφ|fĺ#(%9l$7v=9xCtE6+ ^% Cn/LKak2UL&O7c5G}3{Z9 ˘RZnY+iLֲ%*--]mX5/ ŀﻝ(cӟc7Wտ = eZ9 {'Ԥ9po_k""N*Ӫ©:[04]YVdYQ()jR&'N0&:_aWaF fSy <\@_\j!?_S$^b8@k5{54Ij> 6دFPQYz5$hQW@1nAոp+RWbPO1MԞP6-3P E% SaOt=4)9)}/iCSY~+I@(Yq(RU㡗.CJkӘEwa}4_-WCFq|~aΨfQ9P荃}o6U9Ϊ=ۜ~, -8nga>S3N1vʉhBYzJm56SZp_IIE΂,@Ga4OGUJX,2ONͤvsͣtKuzRrmʾ*Yɶ*䌚Ϯ~[D4mCGwz>kuXc= ԂZ` oy7֯N__ѵ*%иӐ򨱙ztV[U0'm%͓pXHܜWXt*ɻg-zBCX^R(MBSTĘe`E̚nȋR^ +qu"Q1|*Jn:/[ n9>uzQccKvu5.uKC7 WYخp]ĄUܒGׯ_gV)|ФB}.#I~ =NauKY,Wo42Gf?6c${I9fS!̒QS@7 :²i)v 4כjA|eVKبԢeR6#"M/67WoF7[_P!olvvM6-`ѡ&9VtmO;8Jཻ{́J"o\/zA5^ߒ}54_jf<%93ztmDQ܄2LS(E"c + cNP sa4PTTA8R F MLstUF[` `S{yӨUS{ÀW/2uQny݊Q2?׷<-Ϧe6<vU{k0X6$$;H$v EaX]kWa{0MD.p8T`Y'd\La~H6'"94RsR/U1d\Ĕ fơ¯d<2HD`NS Tz^FEÂdd"9L y ꒣#sRJsnީEmQB/ ʂF^sߤGP{$O=Kjc}HO;DXtn ߓ%VG]Ds5&*&E1eP}pF{\1w~1Sj2z^wL]Բp~ٙ讕n\2YB=eѯb4geQ34x? 9qȫ\ָݼH4} ˗t؀=fY3) by9Ȝs0S馬Qp-.V}.4. tYJ,M>Y/""Pn\hABgx)qI҅MyYa >]4Rѡ;ofk!̮Ak}R,VVOZ!KEd _= f0c/LntzUue&tGTIRs  r4ˤqUYET?[KS\ʶTF~ڼc̦Qh^sÃ>en\u'Ͷ/o"s޽W5]\zakr]KY1M@ EAz=)ľu 2$"ĭMhsh}x5^t5VԒgà4{jqc0ګui+M",&Q^㼽^N؋eA:@_ ℘US4_ nF8{~t:u˺yje(GEG,wNE70ݺu- R@,i^c+sy"(\T`xXs#aݬKS'5wnjrjȧ1N'޼x-ﺌǻs۾TP52:F wb2Ekv(6~TR4yIaPvFΉ~a '`8ՃQ>3Ok]͘dr>)|R%$LͰ+f3^M5O étHM^gYXQ#ˎ(Rr橯⭼UD *"~rAmtӛ~[;[NV ]GqYʺ_W+KG4֘!3:!؜l"ּ8r sl[zӜRӇ5#25<*ecy#y$0Ń9Ź;ݓՓy+Q33úuXVoo8ퟍ7yOu{Mw¬EVR '䈄qhkϯkf78dg`WV]dYWLNf_!'dja;Yh{/nN:ggUmN=Vae*53*_F}2۔s),9 uMQ{j|jo wQ-ݹ-j|]jf'qk֞ mo?4vO.]_9tQNtݛ> s&syEׯ]z*pWd 16ceS3iua2/<"f?OWS B;MԤfa&.7g|6(?Jg5V{ZŸD [r %ݼNORoD}y&70uTu.~*?4Qo?T\/p??h?SRue)iqЁ^yUGW4]LF|U%zޮs*bzj(A6Ir CzK2g_oxykpep6Ep }cvgx`dx3Ii-4Y$A!b# Cfbьߔ/!y7x)=UpJ+V+_[~IV㶪 <Ȳ&kv??xwg/b/ Sib+P0DpY[e׫CLJ^n7] u͋[,b}5N2[tΚ34cy1ѪMc*c1Y#WY=bԥv8-`N5k:-xvB]Υ -vh^c8a է*Eyѓn) [pu~~?~?qt* &٨2% IDATp{+nu PAfdY gKD2=(셳ٜsjdql.t_Ɓ 7]582&v:9KU_PCrX5ϙQ,Ox.zqSA,6jJs`UvUX⌮-yD"oƏw׆>l^ K>AT@Ze$'tY%}֨9a5_~J{∓,X'g50=*+e=@s,KZkTSngP\,GBFDeˋ}Mƚwu#"b,q]5ρhgeҐETfؑzIju .s u\o2rUN 5Ӫ܂rTCy X!tI8K ./WI+ ;HFEsf;]Aw05;f5]W]"@p8WHpv˒j.o-ޅu8FᶺdQF+pQl2 @˂kS% eEE T] _k{n(gC4+XO13*z`@'1~M TJs/ @5P$˭Ms.6^/J_1e/)s@Ţ Ep("fRw5,k̭ax%5ZPnIpr2!}r&PeK<:P93.tZ tuuaz(%Y 1R07zt[%M:$~B/,`,.QxcsDbs)֪25BI#Z4& :uLLt*y?kf+nZFBbWpF.SZȬ*J-8W{ʕ_ -pt`3 .PfS\[Za`V]59lpy"*I0~(#YTR>hvR]cPg-z+4mCP˿1S}lLw|pOJbcj'u(y,MEUz{D "3f6ewl#`\uɲKJS~6>_rh6& w D >G~, 6PĆb'XhܙҖ/1 ATW͑R$v+pò(y,U"3)@7qI) l' L6fо!L[P\qbfZ.U8mX֧ o#6~3yKIK%p>ׁ10 冺TTײ0X~l;k2T/2Ms4t ?1p{<4]p +ֶ`+ c`mҦFV.[(;Ƌrp[[ pc9M4 $=)+a^Z~g׏<3x!]&՗wt⵮AGeP6كymU)JHlROi R, I}^͡)%(x 1[qJM|y־Cp KrkpAY~7lf8+^_x?3p9QH_y9.Y׊9WCm\r)Zx3;NRarڝg[PGXL;[,&z/r>:w}wP*5Q["6C7[(! A.ƋDT@$&% Āpd$[ :dtʰҞ-Nru*DAc-'@]QZui4[}lYta6=:?w:z{;~;SӾ.}=ǎNkz!:/ׂo:֊eq8 @߿WT'a.Μi/SBWk '&]@W6Gf)><6߶~5m,KbIMN0ĤmY[ùه?bIa+x$;NROu.s)~?8~w|~n}v}??~Ϸ>~qu>~ } pX=kjhv.8iqNVѮ/o:ˉx$  p,!ax:t8I)zR6E |)x R +FH H)x33~D͞y%+M'*+rϭV8XG؀ySG Qހӂ!hp~ ݱ= ~<{|O~Ѓq4D(5;*~ËgK۽`Y4N`ĠjYkŋq 锠+QļϠ7b,${qR nXne l#-=?8 J4y4LH&[TboIJgi>rO').eR9w(fñ}cۿ= pX'%<ԘGG_ {iXV?}86vaom ǁ}'e؂v*8 4V=v'DO)oj~/3dxa!Lfvk ފ=:98CR!D,+My.ހwDZ>5T47 }:hPL׽Pi+6w Pd'}HE}<}FyPc/ha{ -^A8m~*Xփ*ᣠ+o?x}Ǿ &NW$f)T,Vcݴ^nAqy #=JkSU5%nu0={0T Bh0.rc?(p̵MQN UQ`X=?;>>;>76.+uŲ$R8| pS>p:-h։\yU /Xd`(k|hN4<3K`p>eh;XG7l``ry]p>q=p9Nk li<-?px1p cY9҈,0 ȩ%FF# dslR膤,Yz|oAC=.P-#ҋDu)Xp>;Z:\^ZUg4:0ҼSgT{_РؕpnρT&.}A[a723r Om7g~PNW.\O'\/'\ ^+˩RpTD~}_ohαyÒHR󿤧󧉐9Yjr#-iܭ],sf5vϚ9yс#h) cq蚊`e>JV3 Wpv \ ^.Ӈiȡ$%v\ ԻPa(`:7#dz!֘!7{2#*S?*qNkA[+j hh +^g\V\ /Kem3QZ`@kuAD~k/kh *nOyqh7J9jJIae9/iEӺҒ/VŢ^gмr!hNM4tn]=9uɨ̚>i 28Vo>pwǾ>9._cxv&zc#PuϚϙ,l+(}S"a({`{r|}+^/gX1tOFa0z H+b@[bl~ `IN_e`aw5)od*֡$Cs*Ԭ+Xmb]y_@`h8{tb="i5:ܲIîRϷm)Xj7aV{"}`4Nv/SbF'|""@-ټ4X9$ ®cba۝ L[p(S3LMa$FE>DzXy`dff;u*e@$[DׇAPZ(_Wg:iTWޓyog|~.vm%+`V&P QP%ăn(ހhcc5p9"dZ,Sp;%ӗyh{`ģh8~!V7`: 駜sYwhQժmuIX+O> PG֨ g%63/Ev^MF7~ ~@@yڠ¢7'q >Rrr 2JTbaJtknµoo+,x6ʙTvItn8&}g]t@>Uk4Q orK ;ism7:ouE]*D7ɉ*'IfeD2@+8I.zB9ORiJv~:hѥvgQ?jTddR;ݞ7k_$}^CYn6?r:/Œ;Y8 jJ]~:/?ǂ*_g^/ sܦd±&wvwwf}wR;>>yY[ [Q@ #AucWt$R5!iw#L W>` 'DP'c`Y[) Ϋ Rn`./%#ð4U,K`kdDmFw,wڜoft$E L+LoCNLjw cF+4]QHbHJ8D&)L[nV ϿV\/KZf;p^axCz R UT s|:0g oӄC?4x".r p2NO"Zf:q:Uh*-Sz`AM;~PᙧG fLUAנ0i@"YFTfej\ғ;AYASy?@s`T/Hve^9^~jkYOB*} y(㲞x VIE(,G'M+HX@i|T,~b>T;X%/D!K=a zxGϖY[LEE4?0@,$k.Pf-t0L1 He TJtI.ڢ+)l\BSy5:@+@9l2z{١L Wg9Bݐr0" IDAT`0+[3bj}JNF1j=E~v쏁 7^+}qjՒH/kFK'PQ 6! ¬(H-]d`>/j,Aͦ SQxE %u<$1D{!̓]Eag/Rz=r/ёwL| ]cEIs>ZwH ) ~>2p^Q0nM ⑤d I_~~ ~w[QYc,ڋekˇƯ' 5X(1:PGJAD@5DS Vz *b h\Ct 8tsCD5ϲ_Kj|,1Jd+N,e!ܶQ-QC㓬3RZ)PA'(`9Ȅ -s,hjRn xSͥJE[:e27 w|~oo_vϟ~9nc5\54/#BE F:V@! QM& &E mkZQeXe[A1 BZUTnʓ7JL`Y Lwű 𘘓iF'QOgD"aǭڝWKD\PBqRPjU#Cfe;4~~ |>?NFHѢwPpYMirT֪00j+w 0C&8X e~dBV&ӽDӮ%F/b-YJ%RI |l\ηʕH H_fʣ$LhXFX)_q?%B섮voOӱmAhfS u \XKq{~ ixmxI?& dy6*g敯=;KW7C`vϠJ>k:7k|o 8\Cor;x"pVVZf"f ,s߲J|b@]T3>$g)\0{mo}5c"FWO>ay@9*APș,n7aHSS4;ԬĬHV6=l9?K\/l ui @|x~/#ּa0-D]Er܆뙮/j^2Խ;U m:7x܌K;^&Qwp Vl?"eA& `hX@5F&C?ǼTOEy&sSAZKYtJ ̔3VQܞES6b<=-/A-'IrRa:(ٱYFie{Odg1EW"Y~| zϫ| |&]0]gR0LźK}7C |~7fIDg>I),Ӿ&^˳ B_Kٴ8&JR-6Pu<9IKKzSQs2rvk\I @{~ݝ[6HnAׯ0؉eRU&&4\ע%נ T/;SAkJp^_חw|6 ,'GkAaA3a[@O Vem3͍`+̔`dF"(ap3-:g5h~@=AuUfUl+eLW/gH/\D@_ɼd4M -S)"X ]$4j_jՆ&/P=|(mڨfݵH:{YMrZ$YyY\%p97/NS3kӹtX߀؍3Rl|^(n&{fj(cEdYǂR5` -*}XÆTH DxvuJL5t؂9*]1 튜یyS!V?-Ϧ6 7jgº]'V ,65P)B4݄vf+LΫ㴐8gEمE^ }8kT4(3Զhz( #ڴ! C8.uXC-KQmnPRD"y9Յj)<Xͼ1i!$eYi |~of-Z4i0k58  9("Ж+r asfK |q\m麪>pP#ECw^14o1D"kaWPZPۂETcTTXa Vi6d}/p ŎW FUס߿\U63OdAU+8g {9̺]>̅ zvA)ܖcU5&,kM' JmZX9@iT#C ",8uz5հ?Ԟ=ISYF<T8|PG5qGjPD&.8Чf.hCÙ+Hl8[@πMHq4F6@W 9YfJÑ]_$Wevk:,F/ N~gn_44p lSm'9eКDP\Jn! `CZ^ +V+*>!=c7k4jȼR4˂`=]bap)HxIlUx˷kp>ϴ9d`yVfZ KJ} ׽6Q.VQM#QT\*J3Q[NѨ&NFx:>`~+K7zXۯ>}PmGPݦx\mIrKGoPjjyƳ6TAa9jg%A5@h!uEv6NE_8Q0&s֕uUh (ZwDE̝Y_ѧ(5S ha8OK׳OZd -It5lX,kpQp:Wukv{1ݟ|' G̜tM R0wuY ԕv[S?&}֠0bohET VxK^p^. ӹ`]RbmUו?-bqEI*UuNq媯i2ôsv\WK go<:p:9~?R6F aTvVvF6jVS AxG}k<#YJuc<#eG%EVkJ]Ff!QC=*bS/avF )Kc\|U\+_ү礿s:DzBCϬGz4B^lͩij%f9<XB=Hñ]8K\VrqbYGY%p^_ ^^>?bIz]@qun;7`Ԃ [}z^UP2ǃޏ m,ηi"1w4Т?o>C^ePoF/g Lp%_fu&gdy&8LCaOG)#UYa=XsiuΩ bXM@uB Q~ 6nLCmP[I|$yXgq[y[pZY+jx*=_ ەrn$HU@ 8qTV(&#gT.:jn]h3tF29#~MHUJbGuFjf!D:VC/p5G)Bb#S  jYLRRR̓U:\5XX̕AJG/T~6ן;~ |~8::p}Sǭ㏁?^*ΗuP'1V_jvvـޘYfyst{ KLm /T5Inʿ@)Ud(TQ\'"`[ߊCU MtȅdW:&zY6">H|y6$ShߟC瞢:Jf֎lչ3X0:&Fہo? 0o1ǂc?~T|{x}i$.EH&MweI(Gp)HAH2 }4KduvHv6.ـ?)>bn E)v$эA8W0"$ Bh39U}Sb4N^ hA{ %|̭CY^lW~ہgvCa0Cx+>?5Q:׊`Y*Pfќ!KU:x@)]:#\& S(}~TxhKhɩA+ y桃+y?r qg{h{Pi{pO*BH2Q_~Mӕ^1Tt@{^D|'̐ #Ը ȓcV0 dᩄv<`9qqգ)x:Rraǻ!2 64\vmPUql=Phx*}a7XSdi1ۣr{Rɓ>-JsҪe@<>EXG= kx0 ƾS>h̨pM̖'Z,cx85R[M(ʪ) >_ֹഒ;٠EQfСL<˧ts/<ǽс+nU4*ƒrϐd%xM{b,xEԐRuRK 4-k'er$zC: hG<&b6+A\-#=q>;dwȋ{v&'81wj2 e ͚3-R!K ēbㆳwwti߹8d\ ΋,~^ՐzօDtyfoAaTǐy4&Fxiq )KDݥiJ|Ôzlh7U@;βiv( tCN5VX1 vFfO\(yS(0CT]*RO6`N!p#] ,6ss#Hu0(q`$]\X/z'oYɄAF,R+v,GgNa Q Qq>֣)P+ZE]VnAhc0zp]^Tl. Zh(Up^ wjtcRG84 8;;\CR+kRKi"&_5TZ@ A H>eya:"_ NHfK, re8(KUbvSlKAk,=*\E4nRrIo^@atJQXPZE+k0q9xZzH9W|,y7K/+6̿!w dU]'W%PK5/kѡ\a1ˑ=uL t_ %мQ*y#>y`& 8l0j/j|ԩ4I9Q QK/"k@z YV.ejNwhmAkp9q/?zu |nGv^z8zc}nV48c'zy<l'O'Pˌ\XAh+Y2\ u6 >x*s!3i4 ʗ" ZƽbUԪ,D`"Z fl(r %YgFNlՐ \,p$u`Y +g,a=(c,f^Xy)Zm=gEi,|0x@|,YA3id:F=_s(r 3X=w9Jɗcuv/P1햼v융L ]gy]qB3+g\1H4-B-t] x`GIDAT(#AӍܶ6T<,At)D%L Cܠ|}%|I ׎^7Wк/q p48?DR;I\*fg-i+P sswv̄IE{&JHt1%MH4"߆)8yp `]E+ʭy3f,x P~^xfRjxV@궼ȚMz؉-Q*)Ä0@&*j)p$B5)tLzv/ىoXɅߔY(?QdjB"WǝPr%/E.]c0n@2 ZPPGa{PαGjY`wbWA~_噲Ǒpgв2VYӵ{_KZ.>vƐ>vsOXk< ށQ }?c`=*֕ϔpE(K̖1ۗs/iDhk` Kdɂ'= yW&r<&Z̭*3=ha.fAp^3Z{ѻ)0.kdjZ/za\;TAgLg@WtfƲY"Y ̶f 'o 2Wpf(nTR h#IR'Z 15s3و@l tat|T!580x-&qw'gܭuY)םAWaE>^H?^Ni^G!l E~3O*{ѵ\(6S)TՙU3뺨+ -# y}0b`N~E&( pt5 nφW:S!bgo4lMICEG -KWS]p,Zű F0:olhΤC?'_ T5Vم$=/F/ tW 4 ~^̏[9hL3AY%ey]>82蚹fMZr_R杦x$*@aV>U) w%eMǗ0]w 0Sse:\"1:9̈ P:IͲRNp3OITXa=sU`<,L%tҡWB @| o'J1 $03vfb7-}.io _ء嵬PS/]7 (kYו?3AR# y5h\l DY O d|E`:Ms\/,x&䥓-e_~j͗ԹHJRjFAw2@vQHf3;-R,@!`f>I՗4l]pN#"B|='&d6rHA@13Mg눙pY5MY:Y{DC9#@5@S\s c{69K# p|0 sB .P^DhnQib1Ӯߗ,+Vח'*CVPKfcab@ڬQ2BwŐnVg Dv.abX(!t#zI#K6g]y2 @x#(=Ӆ; <6_rHC\v7o5Z{9l_tGYg}' 5 (za!2铚\n/+(dfݧVSK[1[VQ]C[*K)ʼ ⓟY˄/%0*ڔDŽ!d8d$NIr=ּS[ O>dykL[^1RKZV(FӲSiwa(Ɍ2o!1$˙ )U1E'N*BN<JWoHuhtCRꁛjE1U1c7g p3b\U 2l?Q\-KИJ,Cxzb`|f:Wy+!,LW`@h יc4`6C"ăWmdG&PMR}ڈO_cK" ؇D9F"݅K"q# ieJK5[{ X< *] xfBo^U.]A|Ѓ<rn.huW*K.e/XsR~Pb'{ؒVm5 `-:.ɒ mS5KVDZ]<niU:?UT˜/D(@9{ Aԃ)R6ݐKJsZ4.+9tp!rI4NJ 4a;c8 U ct޶^zh25 ugH6s/>ϦmXtV NEsiD pJd#A6~˂ɕ4=JP-K(GN 74IYt"&#uX]jXЭnMy.hCal`Bz*1{Yv[Q˫G&&-h&b\ JܗR%3%]_ޗG 2]0sVS YZI 0,?l0݈ t-^/ H&/Us !PNH\`80ӊ48hȕxz]L/Lw[8;7:kRN eM.gr/>!pHh.y`*yQ.Oǰվ(ԁ>λ@K& $ JN]9]ɁZK<#,j%Mn)Ɋ_nl-| dI:pYಠ>n8Vp+d*a,kWi_9Bkm[.LV砡(Y<9L Y5~ߏrTi^+82|T$YW9욵p\$']27kuФHiN:WPMH ɭ7ЯQB^\tms0(XP'<PA'챲|&u Sa3(_ĜehMD>S4&@A գ9@\&!`vۜ|3N]k%Di׍Ĕ"4Y" k"/ȱf:15Sg݉5l%K#ǁ^ ֿV~*Q D9Nj{%n 8}n{ Zx$ ~}_`{ I' ʯ*mѸKF`5"JC8j h,ONoc =lpE ߅yOw.8}wp!߽ݓˬTw=L{^/VzΆ 8cXunAL:g1.r pcC0KGܩcWK.M.V.ޘ.;Fbkd; T*}&`c49x ߸gFjaUۃ"8PrK E`'}~n/n+9}=6~%?~~Z>iiFvs*ލW%74TfMd^ٍ)RlPq9YRPTS.y=i gm9J?O#v tK>7/4Qd#)fPBa{ *3p#gWC4G'6΄H7^n4uo xp (81f2o"C-Kŗ{)yuⱃǑ-q|n|~mGO௿߁_?FXT'i(Dw~}ss^cAsFy>%[, y&Ai.Y\roclNvEΊTđA rJ4I1 Cv܏KOB nx{_x{`weh+0Q S$$x7>=7;GOs ]{K+R7M|~>L{JJ]=Ǜ4V U|(%PYT ̖p`/ыˎ Z|A:TJ V57ᬅShzcC rE0u _$pT5S>XYOЙ=ɫչnnK*0FL†PvO>n﯍?nUxuGp>y]@ϗ`nYN <_Q#N`KSA 8n>PvBkڹVYryC嶤Hs:`g7i Y!1I1ݠ)ȧd b@V:nLu[qO<ށw&bM%G^nÛK?B@co|~% )XUL?? A5ŜR6k7h79ksk?$lz>i7XIENDB`pioneers-14.1/client/gtk/data/themes/Tiny/theme.cfg0000644000175000017500000000203407771100213017150 00000000000000# Theme created by Martin Brotzeller # 2 december 2003 scaling = always hill-tile = brick-lorindol.png none #000000 none #33b033 #e03030 field-tile = grain-lorindol.png none #000000 none #33b033 #ff3030 mountain-tile = ore-lorindol.png none #ffffff none #33b033 #ffb0b0 pasture-tile = wool-lorindol.png none #000000 none #33b033 #ff3030 forest-tile = lumber-lorindol.png none #ffffff none #33b033 #c03030 desert-tile = desert-lorindol.png gold-tile = gold-lorindol.png none #000000 none #33b033 #ff3030 sea-tile = sea-lorindol.png lumber-port-tile = lumber-port.png brick-port-tile = brick-port.png grain-port-tile = grain-port.png ore-port-tile = ore-port.png wool-port-tile = wool-port.png board-tile = board.png chip-bg-color = none chip-fg-color = #202020 chip-bd-color = none chip-hi-bg-color= #c0c0c0 chip-hi-fg-color= #000000 port-bg-color = #9080d0 port-fg-color = #000000 port-bd-color = #ffffff robber-fg-color = #700707 robber-bd-color = #000000 hex-bd-color = #ddbb55 pioneers-14.1/client/gtk/data/themes/Tiny/wool-lorindol.png0000644000175000017500000011152007771100213020674 00000000000000PNG  IHDRt'bKGD pHYs.tIME '<ӝ IDATxymuY뷇3C4σ%KXTPT HNT B vl K`CT qʁlmekl__;iOo{$ls=w^뻾~??'vc_.{z'lOp{m?^<7r=}[['~^8?Ífb?{O?r<~X̱ww.l_C\lh}𖋏ƃIE>X_Nǯ?fyz~L2Q=)M=lܻCCugL~b?=p:_o>Y-7U}[,2!#t y'Zx?2xb7GO=a?xOGxr3[,%x${3r}'Ӭ>gqJ9%wPM@BNt  lZɋAݱk_s~}r:gOܶk CAwcA[0Pqx0rQ3B6쪽nޮ$/2'w9ؿ5| -;`ۋ=Sgⴘ!%"$<9rEp@P暾NׂL-c; _W=?G}X]?O2{h/8-xaRKqQ7T[1SL{zUȲ6cf:~#] j>|-~p|Q_}䏈w@=v,?A[t88+0pE=(#Zьa.hf0sr/JZ"zNd0G] x=c_WۉZ),gu;^f 5ZLJ Q0S,@.q%F^nҠ$P4Aq: unB  [!C}]Wô86G[Go;}A_Z2 o,9xqv pAqT?2PCIsSMN9J< #}PKq , (w}d0bGwp|5A8?q%Bӿ^<6>8&dǁ 4Ў"T ,!6p~| 0! !> ܈~V% Hbݝs<R>If-?9|'l5awq}iun0Ë{b>D":0SЎe= !G8o9dfӣz˧Y=rV !Jb4"Ȫ˨;{|ъQP9; ``{z@`qE[Tmi٘#Eضy|6!EXeU>h|ż>V'r.Y+ 9hGS"Pc8J@ I6DK%ݲq_deʸ(S/]Y'B i4{hRZCqR"WBXeiŭÛ<i'赧$]^ ZaĔ$`TtQZiDiٰ=ZpnzHM:jfXV19X/gD4IV`Xj}.Iyz #k>xEDXO}a]V (7ե;S]dt@!C$5U&H8%"55,bV2M-PS!rF t) vI դIE+K@_sAE3=@^_i_Qy5!H>Hߍ!](oy|!/eq.,0=Ix0P)ANP"AR`DOd!Uꂪ39aXt4Q(rG(bG!ҿ_r"uxf=*2$Ybp^Íclױl<|#>_/`U?!!oW۳/h֒ h1E%WsTTRR*sG * CO<$ JUN11sʼfUe4l ԧ/4؇ Dbg3_kgh/EY@BQm]@hHi8sl~,#2tͽwU>Ffb)JYiF8cG`,֢(GJŜ@JeӵB D,;(4XOI,E @BzODH> c?JT 9d> 56x#WFWQ?@xh;蛢>H7{qϞx0u\F0`ޓg"XIj{y;!%H=<T#ۉ%9hҎI g p9`!W-YY =Xf!E+St* Fe2o(2G#dD @d#[{R8u9V)N@B l]_ቬAVV}$@W8{ 7wEuD>3[m`<:֊ Kb甃7d ܼK7aHj;?jf?6y__`տL\]5Wܝd|J]̬!"%7M>)BcNCw:*~z4 $?XҚ\a\;xTxsZrPTTB]ϥB ~3,3gSq8ZM8^5m3h$R-uD,+b;lqȅwLg?^b+<]l/ŏO/_kEVwYZ Eb~&Sഀ`՘8墘̚9ht(BL=Ahrml$ʜlObh_ΪkkM?b(!{7|z=ƾʋ}d0W^{-w`s6#!3n3l]r^s\<>5wquDb3-jEK_4`>iw? ~_.Q =LDQ3#Ffľ5" %9aڥY? Ћ3~ .NT8 nH>3@ziRCe|>Cqpt_F> ̔ qpoB;& ''+*Ɠ99LQ*Gb W1MW?!w1X_}1fI~B}ZUQTr T/Z\ J9BI' ՎCmbjz;U;4Z*!Eh!:ѧ:΀Yr£'wYC98lFg2V).(ť)]| i|QCڇX #\(_#]__H|SVCj5miWtI{ZY -f0W7ɹHo'.@g 9Pi;4(J4g{v= ä;ȧ* ҧ,߭P WKAz!Pww.3[8]xbعJU6d/pUjsP \| ʼlj+;EU\<еMwI_`5}q~Ģ;Dz [nj,%-*9bf̀Q^4)NEZ :`w{w0  dˏ#(c:Q, 0A"p%>De[4' X2<8ϭg78\N2AŊ*)ATUJ0wYK1ٹs.1(wr.۬>e/65Ż8H6Qbl~οsSV{QfO;;¼sc5Bfbf K{Pځ}8btZ1 16ȵkdlOPބ.▬‹.vWOs?@glV J#;U$KM0K\EO+LeCb㮩.!1O,$'wj\a8el]0j._X3vK$dqfvwE*f \^'gBeuۛRVL__6-Bh_Ol%{~=ѲPKk+ELT lՉښDz*T @eے*lW0@*'p@3\䘪Y5-Ʉb.0V~;`dP 8wM!YQ GŀО)%fxsJ,ж-"JY@rh`0`POy [|Sm2(.gxuZdžrDp(cg #MN}ɤPdd;-f㫜b%`cEEnιtE4{%DQhsk.}=ke^rYN+Gu9l{ ~z/b_W2O|>?Wߤۻ:oJ4H !Խ%QwUe([Bg->"U0?uWE }!RЬP1ƣ1 uPfD`[FI !jAt9t1(xJWר*Fʒ+mO/~\ ZOHLS'! WGLjaәרtI/$#Gl-XQlFԅj߈t\nܸ~|44W8Xh?=7W{f+pI8D3Ld"QD:ьd>@EpB dCDU\޹;7ĦfytȠ,7A- Vf 2%fJ[,)7FT]SQ1Ѷ-. |- yqyOM6vd҂,KLOyļ#!,zg'9M'%6Li vKYN (J%V(rt{lo0q3.}\qN=bZV~{mUv7 UmˣU_ioy/_{ӿMqgíY]ː2XꖫZ mUFƝP*G`pi!j`>I~+5xݫ߁W+{"SL',Q1&!d3LB 79ٹp1 Y͎;Okʭ$m"ǣ1 ٜ>s4UMl|Y-A{(w{Y1EqH$DBiݟU`.p1!Bw[p![ˏ,xYq+4t[_/iY{'xSSe=غ8S{KC8ѐك<0N}Nw7=[?q^,9ߪb"8FS hQiE$!{?>.n (A2 g"AG 6 ;3^g IDAT,B$#/fIz\ѮVtUM2jIvKd~.e&l_ y%Y&jI}`{-Gԫ.J^,Aoм$+Jm)傮|S 7fD!iYBZ_]]7ltM$Uj}D0pDrf VڿD3pfp<@zbk+kϫ4'r ̱cИ"âA5$]^ Gq#_U{\(_{՟y߶/WǙn4s,Њjusw77qOJ9..n>N5fg5?aXdYlrds2a B9ȅfyd9'HV{uMچ6Y9ptMC4`8mz!V ϓ: /V%K[f(ɚazN: @2ItY]Uë4-4B(k܉1#7édy% w=P\늼~@_>jqPvL@h(^SAa\ko꺏Tł>̏ F~)Ԯ̣Q,J*m~ T%ӟ.]& K tLP% -eI%Y0O~Ȃ1n4تb:Dغp7蚆87 ĺ4K,1ժ/, iK~B9:dGHnhva[X 1PQ%t],]fhfWerH4b,5z wVH)SR@~id 6y4- [jKJ▾DnY7_dCfhKɒ@QSX"Ҍ^Ru[ A.kKo"@2Kp\)c.l"wp]|ibU(],ЬNWV1Ed2akZkW\8_r4¬f~p+Wٿ"m4<q::$Ko 5;'Ąv HN%x *},:Ax]IP׶$P11"#zv`I ם@LVSQŒ6 fKTIc70\߹+Raibp\.i?uj{nFKs+d_s;;)󉹈 O;D""AD SC R {{ ) )U4U Ei- #o' s,,KgYb1yK:_ cdI_o Y4MXTlZ!R\:X u* y`t+l۳bLLEŜU&b&~o{uuwWQ,_?isGJTqI\J3Lٹ"~\ھ$8ZNnSN1wڶcq<f1C GKv64e{gh'0XuN\.fEsؑ7'ܿsyj+^yG?[;Y!xo1 JJm?@IJFƬwxv#RD/!@ИTz^bpݩTryq|pM(B,0Aqj|t"VױaU.L_D21|@mRL %] $i}POh%'8ZD n=iqo >7֔l! }xJyv8/ -Mf4b[[Y6#bUqD50JН &z9 gVid2ľB/)FEԮN'7:īq۬Վ0i@ ;Io"_IC8-np)MM,<d,Sn^ۃSx'94.sm$/ ɨJfns\0᳷w9^,Y!U0w2s_h+n?s:`1c8 iPN8k)7XՒ ѐZC5ú_Dì9gOE&àI?@Xp2O+$}2#!l*փfjCP#vմ > 褒 &Ѷ{"_&1YfcɊU汙5'5. M4:މ[ڃ5R7QT 1]rG'Ep9Yu9ݨy'#oNhg+:w 92lOP=bg JwpB(b옛7Ҵdc:`[NfGCAZRKma2d7].8::b F#e[ϲ*6iX 8k}(MPEJ'b@"hZW z潾fJ]P/_ DA?ёdw"N*|$#cLhA1_2=5"槥~Z?Ϲҿ'NpYJ]pn){ Fl>>Oʽ{Tyuys:ۛ3$^hepaǭ"#<"W\+=Hhv5x;9=[xc~& \djnL e{W}1-є&ݝ},y*-dkΚ]kI!.IkQ.H:KY"Z3aq-g$୙9YIgb1pdMqlNzwhIZOi=Hou{D:ZVT[^XW+n);'09Cw0|^I}.yaV0ew3Jٛ؊ˬ/8wO<2vT@^2Ns}^$t - 4ޙࠩ4W2E?^/=bT5~]k׃{vmv+C5=q\c\SfhituDr= [uLA>q7,5wqR"U:FuS^rabëĕG2ڹ­-L/˒g:kd{iϗz(̖\|dqv$._%y}ʹ+׸t:̳uBt'uڣ?d:W\Ja h^5 Z3D=KM\ "<`g8O?-}"-yǹ sm.mFb7`x@]hs"YAcU:"Q,G5+DSvBZ}8v :u{?(“Qi4Ɇپ&|rCu$7"-&o|>7>̫)"z<r~qœz5+4Ya8Ŗ ^u _i=) M$] Eja1$[O|ڑq,$ }^Dĵi8%U]Fޑ*W~E,nU5`grC2X#Hn:ܕ͗PN;dp>I" =. /Yoګq"2lw%/EQlI{؆_K 0`6 6lxX{zMɻ߳<[Uf_dFU]n7uԒlgj5# 4wPɲR 3(f&"+4Ċ*K?[JŹ@qwc#lvzx;.vLZj ?aw3x{+R6]lXzªg}0/R|r7W/W6?3|hC!U;y֥PRVuݫR+PD.d"hl^Dhk9#J*`Aܴ zh*|{R"l:3{[Tv@jY#5;R|C?O;k_0 ->7oGWW<~G#Eo97< CG 'ȪS63U.0wS^cp흽rTOZ5JjXXAV: 1ٺ?JĢU(94nz5="hZKg53W͐ UTw96KAX1N6otǟ}Zto5ӐZA<0 ;ݱ.8.\= J>1X`۟n4lR@['q!>fS A@<d 2$׆m)OyDchV`1%N^5؄%5xuРr|]z_Mh *Yn 9@:'z+d={GE# c{ t|.?q[,G H~ʊqeID":M#P)"%gbS3 'e1F>Lx|_Jv;L@=80$\A~[]P8 gA..y$BL)5o+v Ysf \pl :kiiXmPw>skH-, v0-F(Db3J^A(YXa {+R"(ݱ9nR~j\j0ըEKUoH[dZj<^vʼyabpL%d_#6rxڒ[x{p]p=> UjM_gS&&P%4vpa3HtAG$/kM:[=քW]x)BhhMqmPkaD؆g[ģNܽ]#'1ߍ@*zUp(=>Eo>aZR+SͥVW1wTB.s:XJ](Li`hWS'c}/~RD:7JV<whKܲ|MA|drŚ?yׇ!_c IjDaUo,{ڸF|5 RI<ڒg9}2) 0-CTtwf^i!X*nLPK 1&i^DSNBP] \t*:JS$Rg>W,#W7ɵ~5 fE?!P;8RIpw6Eq/m 2S *EVrww$*{BR:JYWR˙C)1c~qzwr~\jT [{׽V+(mIZRtn)(i,J-Rv!jv+CM$ B)qq)ߡBBKuSD{UeZ?g 38м: kʹӦ~7mӦj!Y'i ߙk4pL 2\Cm4I |slGXhtgZΈS3/VI,,]kKVPOV{^i(xY5Z@tpil=Heȴ U̸-M00dh Vb5\dLk'DgMS|nOni:r0ySkmi+T\@+] P[` LauB[-1P)PPIk{I#Q:ya@f^(K[cSdf/U?0~LRr+:Ɖ-.6s "jHQ޲.d֒̓?33TSfV܌Z#5ueMjʈZHkT3QbƵSz~:Anm:I1d 6/꒥X*d7fsۆJzEs^n>֍vҗ.Vcr)8Dhbq_`Aw5Y+55kY.eSjm&Z`\0 ;NK;$*4ㇿ5=u|jc.ʊHl)EmhNrlSH9!l0 XQ,kͤ-[$u'%{6،BGaWOSmum|#X#/}mk*Y.[ |7haR h%%&gТ{aҜKмejiιi\w8<8ڄ *mR1T%%a%HqAkvh6ms,SMM .ƝnCMUKLζh6?8:tav)ÅgpF|]Qh%3j))LaDZܓYL&C$rKA7[re[d>.\npkN΀Ǫ&٤yF7ľJTW&-C.nnܲ(=@ɵ!Q:s߰z`@RƑ0|m]dK#|a &hk%bو!O_ԥMf^NSlӖ$U]SM𶰎ænvi+@h յo|zkߝ\Y;aLd*nR'Z! ` L[zMHPJ"pnPDQ]Q{F-a&pQ7@)+h`*oJΑgF!G=o3p%T6g`VBn$/4p +uy.W\ϓ-@K/.tZ_К:a͚'e)`an%>ʪą}jF1S TO@8r`(Uȩ#3qG6'w}`!m?`Y!lytP5t.)VYPʀXme\!qDJ_q=`!Fb'rplwݍΥ}ǎ񂛛RW>;|nN^͋G\>:^|xxXqqybJ㛚qbзQ.S(Is]Öjk.$sNi^aIOWaPkO Z,z?ˎV4PF)Ӏ}-3)X yͺ;QBa!m25D8)dq:%:llRϨRc ( woS$x1(H&lI7FJiA@\HVȹK}q6rtن7XLl|5;6tw5C~x_^%ӉKFy>:]CBm,:B fU8V^fB3od Z.4_k!*"ߗ!"qt{" fc-%P,q xiaXX +NN7ʁ~]xxX =]n?* |_MM;ƶ6o\2'ܹi0ZI' |eD&%iR23;/f-۞ǃ8=Y-Q]C;NrgPco@4SXM~zK]=OwO9,}Mk+y YZʅCyXNP$vJfUeM\ꈾrMG\f֏qqa֤ܳ}|@ f=!F$$9!At JhGͫ(3 jp3LC&!j"uF}X(-eP6$Ü `TA+MBd) S鞚ɽ8k)&I /|ͼɵK:Hf!SdNSE1 ܟ6Kҭ<#O4tQ2Kr{6a;*"r2`yUկ&4 XuVJsmSxBkP5e"eTPZ5Ykk[JXal\H|MlA.-$lqq߈ Ʉ-=zv"i)c ]&o =cE wLq IDAT4H{œ綌2MO}KwpHwH-A,1"{D@ݨ\|`O2QOX< 3BqF!g\#zBUQa$Ծ2 9ɤTYmK R07Y5)N)4bxcrqOڬ%5=Ic6*,i'I('D29u\Xe QhR&@1Z\`5xc%z4z.\꺐xuQeVpOٿE.h{$%Z6%ן*㹰~u[ؐFT"EuA{d@О@ Ժ@&shWߦ$i9B #:m+ȕ֝oo;N? #'&4p}wy}Ǐ߁ -3Ck)L#o| SڨE&[n5n_b`U`ڝ5S ͵GYo nI ڳkT> p[,C~=CV-ɚ?na;8XwR/{eabN+JwZ60)/r31ݲ*g"]M*H8CY:PPDußZ[H%'`RG䀴]+Q9!EX'gLaf*/v{,!а Lͬ6\\2 &\<1֜0]XWkf>Tj1uSq~]=A[?CÚDLRf6u1F? M1^W"Iw?F!=ēf}uw5+J1^aҁ'*h'0DEdJ ہ4Љ-?VVkr x7{YN J XK>ɘ#BPo71;sm,avJa ND2|۾&"[fةB۵M7UMv 6榑Zqb=wҥP.Mk&}ٸN zn*\{|ҏBɡeBy'y'o29`8yY1;iWhYu`2rkjMZGQ@;D6C~< ޞ(9ߐ=x;x \H(!Ռș QUĪZ["n^k&iקr[0{QO ki&8u0&FUͫ0t2 Ҕo`{FiPl֐)>3%ΧRJa\q nͣ o)ȧLCdUuF!u29#C@dњQ c`?p;LFnV'S+(P<&!ݎݶJPG {uS)[8H Xi uƍyY E 0e6Sc'/ݛƘKlsb% ʙ"' f=pgք .ݵ$ҚOyvsøf7jXc;WLn!^@ cv'DGJLQ3ȑR"Zo>tjZϨ\g-`ldy1-|ߴ52/0 /ΉLe'B@Ӵ6 76.4i*hɹ2z{@рݦf_^R/XߟL~$DlVoD ce 9T3D:d ʁ#<qlZY)J&@F%Pǯ ~0< ^ODd#*&4MuҘi,4^GMog"j9x_Y ~-}7-bA(3_&D{8I'4{o|seaNB.v(y8{ȑ 2ZF4$˘ie>> R Մ@m$dN$T}PQ2mJs3FՌEvBq'w&ƢmDRj)$>ZX&' ]f7xm ,z-Pd œ۸dfۇ&& }>~mFAj?lnOvi l)ak-*=m!!ʺwibc楣Rj#y-$HBQXKG!նE@2d)(݀*Ť,B1 ^b_@wJ$SOMqMg+x1B(\tiwJ*f! bhTςYX/G+ׇ!YX.Y0+(=nmyTuCZE/b+7$R+ ݄c t&qտL`bl`a(3 ;nVSR&A7;#(u7hRqNɆe5usMiM<~qsrL2_wɋ} :e\Y#]׏.}G?$ɑ(ꚜ {BY4W\Jޗvg| x!4%iFV(MB㪭(Z@pQ 8P8@ZBI&Q%BMj6B 3ƀ3=5}] ~S-ʽ+BWdu4+bϪ#cCT e129 v3En%hpdc,rhؑ]/`T!ȲK1rv={l_O,/RJ )yR";ꆬqeA|wؚ{7xϗK+S.J"xS.By8A81 qŠɥr ].J3Lh`+_!!Jh,fGzt|SLW7u QTB[ $4B[D9kd@Bk1CmLB9k[ cO@d``h@H!,cBRf Wr׷8=p+>nV 7&n0ܐkBg~e*r@E0@ptaKXZWGU F !iݱ\UUs_^&UN`m`$0p$0HE@iض`lK;&0`r 2vp|SД.EYCgpgP6"yҗ`<,l0i8 VpƹBފh;F T@8_37{]_ _m&AβBZ">"DZ=a1j)NsRi=GOX0 })OPc7>b ~wf%봀<|F<>|˃l1*V O.RHd7w*0ٿ ONW: d!$Z\GǂL"OnW Q_%QY QGtLg2C^",Vk䏄';P7E~ KLF( D6oW1b'YCKS _X  mAv^ [R߹5q8|" %)W'A!J7ݧpt# h(wNq;.5d@S$ș]kAI$ }eћyNTmYM>f#?d6'?sϾ_9cR'!{" H[VI`246 +A@2 [֮OD0nMp=&Okga9@S dŊb&Dnu@t0ܡfMO[.fPq4^|G`5nY"CfvؠH3SGZ$u,7wm$鍊kAbpaLi'%w#QDVS,l[0Y !+)LGov$v˝ʶ'e2fR{\8EAl/)Jͅ[p:qa1>([I+t쪼m~h5 ElU^z*?B(zXα00\Xx_Z7K?n~/ ٣RNoz7:ΦGsaj)'239㍳ycCNjX#L4l % LfP8QOn 3@1!4-MЁs`p ! R4L2@۷ {(7V& 37҄ \}'/w"VTm#=tZגw,jgH6m051X|}bys=љ v䘲dJf:}3RA@o!\^؞m(:;.b  ft䟎؂.ɹ0AlK%B睒ykNʼP}_hCԹ0K{E3N!B,[E8a@E)z<8%Hnp铲Dw~j$oϤ?_DOo}OF?DrFWyHL\Y'"ic"u;;PR1tt"ˑ ey0)[r_}.{2DdC h 1OЃWp*\lق4Mh᭖B2l3v66)ВD$ 3Y&:AZV_D%qCSVGZcAdѺ[fMˋY~cx(k"6sFK= 7)C@BJa9p ~`;Dss]\'4QR&hw^)XP%ɳtDh$P5PP:+/61H80LS@(-3yC '+ s(4CMj2GT!sJ=BRau{"o띎dzKo'%-)[d?c8Sײ-qD1&/ޚ@T}rޝqr_]P\ qP\p]eD0M:@*>vc=RDhb s$a:"2&uԢ1h )9,saQQbeɲV&k!GkIJuoUW.I=z:GTa̪g0F +apx[A +L]WP1%:MZiC7q"۷yWS{߈Û+oɀ" }.l25p.ŨMx۱m U3$ D2B3Q 5tj,-j2&Y;鎏T+)ॗ3O~s gЅa=$$CXx4>|sW?_~/_Y¸׍ER߹\ ,SN+nYx7",~X2K;`Hb~ĔrhP\2b =d EI"TZr0%J3<Ώ_4#ߚ ?*û8?:h /#CLR$%0,P7鬋'Q= @ȍgPLdavg@I|&1ګMPmjv!aYFei!XGp}l@% 8En\{VDܣnj ZÛxڬ6!jS/|=$߶bywPTy} eH40J w2]2Q$bņuAJBo[T@77Y#ˁsxIDATXzUZa08zF3/@OԡaF3 4=gϳ"Ej'_ vYX+>\o-5>0FYs@k| G◣\gDH}t뇟>Ty 7M> G?8oFQ=$$-5n@3;cF8K Ps4O=}omz; fy T"M0W[ϰAg]-/?ʼn;H4@dn,dQ6diSp qŮ2 }IAUѸpեuP\#O.^~UU,/7~1$'"i8טfAp>qn2wy> A7'{QZ$ s:1IsdA+ {|C:a '޴]1/ZLߕfdcLZc\OTzKYyŒdl<`-2Brba`a! 1 pG`ݫIVZZ)1Ymߣ^{g/LQ,Ͼҿm IۯlG1f%)&)NBzIU:Ed0#-0hDDH2&zW@ xa#t'`*QQΑf^?-:zcZR|6S􀦟R)X!U3 =˷=T?B@L[5 $Ǩ6F+oSğm~o|;X^XWÍG k;4 fSl Htqc8E,uYmbr` CƀYa lfݒXX'afbP_dt 36c뇶lBFPuR^]΅:SH@Qv٣,o@sqڬ%A5!:wK[Gjv{+]2N;X^_8‰6*S؝yӯ`7E fۈ@m_g# y3 m梀 l?d cNTp˫gǡPJ,_DqbRYliI/#:A͍`ZEJHUE?O+X_'g?MاxKaП=*@"! FЄ R{]8s-JA r :j`ޠa}ubkҐ&"\+Q2gE=4p`3"l$n0hλh4+Ld5{\Q%1B}0vA0Iib>Gc A@pRq9\So"OTyN(~eP3L;(:~ʧ0S`FȴXK+5aC9 ٢S,1ƽE^@Lfig%RnA\#pu4['o<: n,\|VLة# HW,1ŷ,Q_a> ڵ%1qt?DC%M=<ˋ?9Q&~lo:] rgݎhAM0 $6IFK$;09`1 Lz*K(e@{jim`2T;* u/ڑmȊ A=OY#rD>FżS2oܵlkgcD$*"p&ܰ!;ſxKb@*>yֻf;?&I*0c 0ܸF00k }va{s4t@?_1p-{5RD*(=&tQqq=)*D8VǸ8haBɟ4N7;\ Lx;sGMT gxmO@D AHUSbDmW_< /R&H'űqJl!ӌ%W a9㹂%T8c0n S$P_HQoIb42֢qP_@u}(2=DAvB' hatڤ;;.*yU Nz*KŸz]%w%ӴݟPoaj}Si C YV¹'$Z)D!ۏ0D00L9D k~K7 8<vRmiǀ [U+ē%扔)!&Wt y^+n5XlW} {3ݡۄRSAEB@`<1Ty֢>aːjK!d@ ҩ9n4}PMkP+,кB`E, L&@8nWzL]yA(HHo{,$HgKgLR_GQ0,[dTܙrdi_"&- 0륨F Kns|i14tI Bà8"@΂_K?+8Ϫ->uQkݽٿz5V%DB !@Dl|00,@H ՅKǪb0=Ԩw yZ/ qm`{ɻ*`IX-;ɝXX8j43z IźX?~$m<ڕ=JgTcw,g ɼݝ::֎8ZNS9dhUec7f8|k="HHr1WkЩHEufG=ť\s^ RX^St ^?qlu>F{oNΗ^;Dwv-|*1Kmj`/L +OCBfIb=Biti~r#"j 7;RBd%Z+w##SU_&v.lwVn rwby1h?`LoMNϒCS{zyoX YtZ1BP!(J\Yrb8m>/d."Y}HM~ԕ~|W*$+ATOHF=7C$50MАX4yε!}VGl|2~+J?畒ZbEhg>hңOFK%jGN6ڰ+* C[N.|+O"73&;34z^u " UCgY3b#gȅwmfJ?sAX Hl/V;<Ѵ+5WiQMHQ]$d-t^{. yn{3 7-uNn?3jh6mVI01N yT5S,7~DlmhɄ>Ֆe\nb} wNywzŝyJs]cn{IENDB`pioneers-14.1/client/gtk/data/themes/Tiny/wool-port.png0000644000175000017500000000215007771100213020034 00000000000000PNG  IHDR!LbKGD pHYs~tIME $)uLLIDATx%[ke3dsИI"(x%K-Z<~Aj+j=<^~?懱`%(\y.B04xh`v @$ LP -}%o #mddyX ~biPNr["! $E"e#G;j  Zoogzu1{T4? uWOY{H$U4409ܞ|X[ 0 3wFɴ yo@|gqv~m=k?k&Qߟj/Kv)mvEqlۚ" }gC5Dl5}F |Uq:X)!I '@/ I[UA:Y4Um#f !@Y$fg9Q z%z#k6F1jvumG Hr.NSDj<~u%sPvqr7aUVleQU]Enn8YUeWj]xUV)lu}EӛjȬܹuΞ;;ntKEIKLk"QJEھs2n^jvbO_\\H{ӭCk󓿧{M'hf@G>,F[VgvjK;ySFkjO&WY% J Jp<UHD6Jd?7{?~Ha^E^Ll#~Z=s!DZPj 4I  ApHCȂ|$*<(ͷOfw_}dt@D?fUeq́^hD>Y3l}֗.X:QC } 껱;<X|@ݘ`t:2q/T8266DN7=@fOFLn %3D`tHc'_?c{xIENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/0000755000175000017500000000000011760646035017106 500000000000000pioneers-14.1/client/gtk/data/themes/Wesnoth-like/Makefile.am0000644000175000017500000000266010462166770021067 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA wesnoththemedir = $(pioneers_themedir)/Wesnoth-like wesnoththeme_DATA = \ client/gtk/data/themes/Wesnoth-like/board.png \ client/gtk/data/themes/Wesnoth-like/desert.png \ client/gtk/data/themes/Wesnoth-like/field.png \ client/gtk/data/themes/Wesnoth-like/forest.png \ client/gtk/data/themes/Wesnoth-like/gold.png \ client/gtk/data/themes/Wesnoth-like/hill.png \ client/gtk/data/themes/Wesnoth-like/mountain.png \ client/gtk/data/themes/Wesnoth-like/pasture.png \ client/gtk/data/themes/Wesnoth-like/sea.png \ client/gtk/data/themes/Wesnoth-like/theme.cfg EXTRA_DIST += $(wesnoththeme_DATA) pioneers-14.1/client/gtk/data/themes/Wesnoth-like/board.png0000644000175000017500000004046510355345405020630 00000000000000PNG  IHDR``mobKGDB pHYs  ~tIME0$4u IDATxT=$[z%vndƽ'2"2oUVWg{#XBd YZXHbB4rZGkDC 9H2(h!!9|󺳻nfDdWFd@gd|/@C Ot[  `G&3_W3ZxGpP\}Űak 3Sq$ IbVtϬXռ~_ n XM4+Ni/B!@~Q۳*`J @@Mk4JyrAf \D3\fk2CLG`u]xDM0;R =p$7!ibavלJ]p0LJZ5L x>ps/E .Cl G(H$=D^uAK3< b q9-4c@m0|+_-̟w`V,[_0,5u QJ>u .@:g3#`Wtp1 @ R5b..RR+،#}!Nk3FoCS0τAX՞h)9#NLt~e:&E9]d; X^ch/t-p(pPZJQ??3_1D4@Q{4] ZqH6ށ1FNؐ@|l!#kh| }&Vtf`]گDcXm(4ps4fI.\ƬB:1zotp (7]Ɯ\Z8'6޾ p 3'.dhGŖz٭G>W+^^v_.9B01Q[OC ”3 # hj9Q. uJ8-2 ,-+&8xW\s푽";!jVt _91p909 `\ ۅG39]A -R',4g%crǜ7>sY5LyRV,BDׯX%R'Mi4|oJG L1M_7^) kHj _wr=CKJ\ 4쌜+(p6{RNi- BrmD!g:beٿ M\ov(^)qS0'7*52+$avo?$$zιP Qs7?] t-x $DFWa2!dj']_bhz|[.)WKrR gB:J_ xT@4 {ts}66}NSwAj9p.bt귙@Ђ#BNA(]ҿ07H礽Gz`%CXc0 QGt=8o4ne#BI陹=@%p0<+ WX;" ft,.:fz|M+YbwWѾw7 -["$ O}P!`^ሕgYx6u!=b0' Ue #) t@Ld tD֬_Y+%JA [ಀ3ZSorwA) ;#I)y`O W\O4$ K 5z"Ì -62o Q: ` BlCh/%\"¯YZl̟XYPڣ<5ez $ 0WD\:-P gpK8<MՂ9t._];%\:w5DrN1L#\~ HgSx \hL`V62d& ,pB?5<[->[,[J.!u3b3o?"ݡy&(4\ =ffBKn #h PUw|wHU{co՚e)-iٳܳ0Df[q9K`QCR l!{f.1_#N}xKSLIKn=" LjI[jB;r=,J3l? _j{Jmp Ifec ($ 6rӾZ,9P,ɵR(-ֵ/c/ PP~r:*-_\W3DNBNFYf8 Roc%:/&L_` %l9;V7=b:x@<98+:f?<)&a(yBV:NG&+ %1O:&: =!I+1 س=I}װ̸9&Jseanȍh iJ'@Mcp50I-ke#b/XVt`U`̐O YQ󡐴;8AW8Cineh//w!Z~Nt+[Eˢ܎GI!6lSh?|7!`~ INwOW)UF8iL|ןH\04~\MNe.6`˙?PۇfHjERQ~sG{wA^JtRy[hu,N/0s 1GzF,_LgH?`n 3f Lf37N60%3JpCce GHb:*{qX=L!7_>yhs{=Ô; <L}GzF]zJ 'I`J_M[؋;XK ]I: -5pư ma1<=O7mC{dP1ma1aX2ݿ{0&3կkE8}fSGSjf9mDEznstWZ31Zl:]2_;4-^h/Ww:O\pCV/I \ovIXj{0"hpCL0ysa {Sg.KO1Jc# Q=GrK Isa>2'|JJ B#XP{!1^'<#"_P,fa,k{rn[أ.<:331/8kMvT\/lgݽ?mA2y Ą5 r3 a[̃ѵ% # pψ ɐ 7_oh#"\x t |A2<}_MJ=Mw~%==2_8)hݯ`o`/BX=G9vGO0ϙv9n{8+U~NY2?#7Nzp-sg0,0DڋbcOfpR V| m{ ^?ho7'8D+~ ~|'_LBsKnU_g䅿{q &fjrѠ€05$ +=cX͟]1p|PwQy}a]a 6t9چy$DMX%Y ͣ4AOѰ~!%oW!pf>8B89#a$]PFBs ^NvL7,V5Ba\[@xwF^\h$`Hs;gUAjC}EHW0lܛ@MgǷ= 6 Hڪ9U̟Yo| 핵)f#۷{ &4~C~}GKx W[V7y-ƥڞygc=HՂX`0tH839`~/C &B4h|8>H YT`X:_O՘1Ipb2ܵ#lS_᠔ Q ~n ++KK o{'dpFH$ +3Q<2ۿ;"Fp@LJgW "lKV\eYpYBm2^x K<4 f 9+߾`/uz 'r?eZ6\f1]́Xzh S~ad˜pS0bPw;-f;Sx'iPwes0Wz :M4ٕOvH+C}MӌV]%\c}Uj<+& 6Q홖ݰ4bn @B?vcxx~}tFKJ vw7H۟ov-`J˜C(h2,)A|h/a̛XR^0ˁ&,ZD'Dȍ"tqݬq3ބ pz 0+JjELN9\HRsF *F3mA9'4`. 6<%r cCQlfnn: ^L8Xif?zۿ 2nw1_i<|z @3k&"v0&9ΦoqP|i3 K ͚Mh{naS%n@%rfaz(?ϣܙ#t=fjs}l0uW~{ݾ Ivg m1f&\*J 3l UKWf9+Vs QrrlxF9;tՁ͊[5,xٿ{Rjwۍ?~2?E]6,'uq+ se@G_o)=UPYc:ɬ7tg3JkNyc`Kcc4Ġ8SgH. :`0~{êfj5O~R942?݄1C$VƥWP}23vZ,fZqmx٘rz%;AK ,mFS*N@å9F,p.4< &o=_|OB4jrł%ؼp֧=˕/6jt|45 ۿ%W;5JQ9 t_~Sr@UcqbA\Z ~i-p)<%v/v$C/u.3;ѯ0 2 on^"7t EnS)'}vLDS$Ga١"B+ՆQ'gY`V.77w^nٽzvaUp9\wbgik% m@g6&&qB ?gw#Fi ^ӳoP|d#V`J3{LkZ(.z5Op6+#.L巕ZA߽Pׄch_f7l-ίEAMh卑1ā"+0um# b x:F0KlfU"sG0DĞ' zn`[ANS{ܿkwK$wsQ~Co7BTliJnD_(eL/6 ˬ,,j?<1M,W,6ag`j&KѿGנ=Z3Gu]MNT>_j<`bᘢƤi!_&j}EkdipN[ki2LtI~6sX]%̂,C@`w#L<ɔVQg &W3f:=*~]/ cndyt W>uAUL^ m@|tK:. 9q?C:b}E+ ,_(  b. 7}{~7n^k>7*Hp~Oz QzK t/ˀ)[aOk& &4G[8D#lNo5G8@l[G$eeWLEhW򵿆0g++o citIyluI, /wo}~Uyk'׶Ta0 b 4(2=M$&$& Rs>U4/§o5LQcN˨ wvaι+= @^݆@|`#Ih7LپyO 44S XHG]a|Nus[cbU0~o7 n538>\)I SxF+^{^W0= g<͏@*1Lپ Y%.U7 V IDAT)ѫn& uQxDf:CKY~4W~6-0^h̕IPۇw[]3[TcBnfڞ/+̭Sf-LR~v/Bi3]nNnzx]&rm~?'+0(h' KN0h:o3J)v g Kk }4y#3cV 0d7~f]?KShAz'lݮe)GŨA3u͂ &gBAHBSKҰzC3"ЛKt5=ny/jWooiKV1&4JӛNM0EGSa4@[K1,݋~bt^q9py cİp`oYt8C7XHvs7`H'5'l#mΒF:Wr4?h~8.h&hgYJu:ƻ߮?׈3#7E8|{r=eh_w 1^׬_a6O%pzo;fZ_My5W>)Xl4B1v5\EU3;zGL+p)]ؘwnwo#rIcaxTJJ#;wlܭ7JǓJ_ۿWއC\{X}uϾer|4O<\WEؿ]b|d)%JWRmROS{z|7O=m1%_0x5ƒBۣ̏~Tjx JBsײ'h'f֑>xw-?A'H{/4pS0 _~ Bh:bh|U#6cUJaZjfl*? ]A[f2A f-lң@#?vu/lҪbEij\Az<*% vBw0%mb8e(쏽wW~<ͯpu5h8ZV *AoiK̒ Xjx[neBVL9S$ ?a7Ot] <-a# W/_zϼAs7Q7g͞7Ě@ /|} 3BƯ7_"LސDI]}:!g-CΛ^̪[WQ4{U3vwtV WaM©=4'  @Ki?dQgV-5ui~s]BQ 8#%u6ۆo *%İw ?oZBxh>KZYt+T*9S{F0%5A,O\z Du{rWq^!ümY q˰gE4Jq4/:}@ca{ L)bC%-:1>]Usc W:\:Sh#b,9FnxSe9*lְYS& vIJZaT: zܽJiqFC'? [2SU#Y%cR!pqe:kϫ \%f(@jyB ="BsU+߅]+cgo4@C!'o+жM'ݽ̈́aZ*u~ VoA7q^ OA}J?ogs Mx'P$kP܂g ^w/h:Ig?; KdKBa*M^"2cC8 h/㗸ͺ fn,"Ӽ@ṗq\v56H$ ѿ3 [hʼn.wߖKY(6׭rk#mFq'K @{^ѭxĐв0bhnq١KO0 :4Jv>URzM=\oREyço]5WuORa: vT`=`+ -!IOlޘp:ڿ͎V'L$45w/,^ G^Cb9Ri#fW/_o*>^ؽ]3klT6^7IY&)dJWs"׏[_o]`Cs`35ԭYj XC rq9hnCs1 ٿ߇GV݋ "߿k4􊝚aR?\j(i3FCy_uvK_Bsdi5˯vn8 Q)I>Ha6Ώ(>boo|E_-fHGP4ORXO$C߫})Էdh:څ:^╴1(M~UޭP{=BÓ?N]a6k! zTsVi"I_{n=ЊH{W#?Ss)L hͿ7j7w7iCh.OvlbbD_JG NcQw4EX62ۄ><ί_vVC19<< ^Is 27/ D{Z78eZ COpP{.fݩ1,EsXC&#U{ӳڑ=RḆ@B$g쮵(Br֔c9!9*M{jEf@&i&#H$p}{5!y*W<'[ٙ+铨M/ VB\i׎"s>7!HV z>Ng0ibuB *@c{f5>ϜɎV'XU} G82Pw7צ=2L ")N anXD8%ZSX Yo6BI'9]`V_ĢJ\$Ō=squUKb`5֢2Jmyoួա}-8NdkaZ_$pN+Ӟz6EtTTY%q$-B<+Vaz,zs6Ysu^A>mEDgT- 5FP=wI:l?OV9 +L҈PӜmE /-:ۿ2p*`EHr0ٔcv+PȯEHT C8cIPZGf JGlED8=lϘZZ+yizĴyEZ[>Ib+'W7o[3Q(sr@ʲ|doe9l @ ;_=o V]\}了Bx_֕8DZD)l'H"3-$(%81vP lǮ`2ooC%/rq躧9%^#hhdCF΅]8y/V/A$Jq\lUo&wN=Q+z3y| OM}:%퀎AEg.}ĩb3gyh9vklx78,O'~Td;}q@*N3fXD Ǩ=3Hʦ}^x8?^dij"Q N"'wՆXgnJH4#K@t/_J೛VЛ`ڔ8y:pAZfXlDDH$p;{K/+q+cPֵ9kΎC%5vN:8xJ] }1`s#^6hʇN! #\v-v¶AhW-N4mT2zq2.wx[Qn!^"q`ڱ|ٴJ":͟AB%+0D-R\znh-$q-DE3&96""V_LS $eضEP;S,ŷZGfw.B;KcXʃ!1i8W_;Ïg5ħl ښ0xClj7N*[~}u]Z)}}_]$zGkti3܍f(@}tA@J4։Hi8פ-kτNơxMCT %Ѯ>r1y\UH_iwfG:Aa0]DR\nO;sM KkYUyi@b}Q@_:t}MY8|$$möguÃ9ΰ=FܛQ$W"Xy\w{m\[S**/778ipgAg{zP(BzX:}Q/ӝF8fNvzsvkҖ̱⢸n)kz؝h'6s*Y+ލ7]FXvO8]{L'ó$W"ZL]Gd`b+cvG*^z[ Vi':9p^^J%c[~/!K2i{-tq~0/;CՎXrvo;֛۟%m=uDs %Ʌi8n$<;j=F+a]5̡¹7}6L' 9/:Sl4#$4 H%D=nb}u?..e _Q$"}fyt9vy IKfy(us:Pt.] w>-+;CI"\@iԁ|p.AצbT ><8??U] ºsd{ohis̄":czvwl\ôAg{"p4Kم.Rw1Vh, IVOpB]r &G!Lqpu٫!mvd C70́ÈӨCṠ:Xh A8 '"Zn[Wg^xq͟x֘CEHr>Pߠ\q(`VJn_qhO'*:ݯ lC`0'K=ݮ=D1~֊倭lT@n$60 <E3O N[lOME6/SJbEB[MͶVy1c?b۲F1itp0W)%mXDA5Fˁkm1+WTeLӸ|bj7Cyxˆ'O轛ecU Sr->OL.u nW"IEIx'VŒl<ה v@o-]+> yKRbE<@:mXJa3-0:"[dm 1DUTp q)r.^|Qd)Zgh%9+³|"-OUqs J`{If98z4d!EP@L3L9 :k=$K,se ˧@ZT&""9P_0Ak9hT09STȊȕj8~aIENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/desert.png0000644000175000017500000002053310355345405021021 00000000000000PNG  IHDRHHUGbKGD pHYs  tIME  4̱) IDATxڽKIGK9\3r]ݕ F=T */^%$j35sy.),19"Ddl')%j-QUgGgIl)'ۚՉ[s}ݑahX7#w03R^i,* }0P;ۚ !`>'^v]:fc``ɉ;9ERBg\.l a<[q̌oޯR>Xr"yR Ӊ h"E E1k!rF}5 ͧ(Q9'j=Qubr>h^9ϓNo4t-r^i}P%.{F ,RJf yYA(qI0ƛ~x/}~'nsm lu$ \w>}898 qw'/+uPI }|>4㪸uooh@H.lۆ٠Whg#Ⱥ,<ɺ,KǷijWb(%"1p;tbVz ۽1,Fo/>+k3uÇWJ1%$QI+%ǿP\(JoD6W{FkNXu-$5(!%plFmů2%А`Y6ҨC`TpkGe>+$ _NbqaX+!d@3|4 ߌ >KYL͑5rFd C=;ߡ!z+ dDVfE.<h8Ά)1_*n;b랸Jlܹz`6[u]I18*H}*YLX޽9[%-0ONO&`b 4<񡴣0q? cfzlja8H=`]ba朵s;f0F^=c Z+lKb u]ic d6:'#Pg H)SuC3N Z+A9AaxNJc|z{ Hg:gEYwRJ\/fFBYO} *QGc\ӻsV  YF@78+hTOjwrRê,V q8QV ]V Y@oaBBؗ:(È1LI%)>SBĭ2Mne>0Y ~+n@ $#3qv^.;qpԊğǰP8묁:ȤҚhgBDZ +!?ȷμ%2`8QY@ 11ܸ? 2j]I) :طIJYN F'F%BΙ^mM9rOqLnMNN?>X~$bbIB4q,KB>Ϝ*UYgZwR `ԷԚMI j??u`>XB(YrdJg? pp=[`Ue(ըOE7.9fɨIѡлUf !qT0 hQ&J  0PqRN9K܌T23ead]ԆsW#(qb$3Bq|~C~GϣPe!H^2!"$k R+Y s HkO&~bcPʉ>\?hz#03(I;rJ.t|8T2šÓ_j Iӌ1f!h J$-qv4'Td&1yF= !}56;^o4>|nnO*< >0G3Zea M9%u싲dy6r t>FJZde?g]*,)|5w#! A6|@?j)(2 /,S t<X|@GOOk'Ā)-unmsѡ7g,Up7Zn<OJk7=r 3?u *|(l9>XrwlV1=R,-WeI5p P*! QY,'&U)*X ϛ>e#3_@GyIe./d C0KF5"3 í(NR@!J}dwm!ۺìȏbGq/&5s̚Uhc`cWHsA.[ׁI2g)t@UIp:h x;*5ϖ#HOT|}V)b uɟ?}K hrt 9Gh|w]}J-3=Q8Yׅq<ۗe@jY*g;2u<r`[yߌNgY?èq/1pqMV3RP^H̜`"h l!`ӭӭ@_e.וZNֈ;ȪWD~:yWu*9GR\ގ107z]eO qEnGe[C9PkaY"uY>O̔0DU~{VGao?$|ZAІQ@$N%TD0 HJ@f<0u^9⿎f Íڌ;2UR_]Y:;a8PJ\Qހʚqו?xBƚ^qZ#0foFS!\JpSmz|3d_#)P`q$*N2R F5T#;3fmJ8=r< DoƾhӏSS'fB|wBݔTy?kRYI u$>*[V{<NpU^2v6;sO*ϢiN\2c8f}Hf0DU,@zjk09wY"|+74캱9nwgBT)1\s#QCs#2c7Kqy*ljm ĘXwŇx=y~c^1ȥҝA8J?{VhuLW줴AVt3A:hTN8m+9B9 ͜n+o^w_P%c Rʴi1nFLF9 {v޽d6932t/axy_)EZ%ƌgi^O˻)*cXZfj2+YBZB89)*nƲcq}_]E &yVM4U#V/ׅFaʧG;hv:AxY"2ƚW8);dY7b uXFT&)vF ҌG=XqmaL!*2u݇bz_.3˒IO e]f)?QȚط,-ea5bq6Hyʅw$$΅S`!)"Vglq6R+tƉ1FzHg__^O>r1&9V!EܜZ-Dm!%ӽq+}&V~$ NGYDS" ztnJNRyor̴HQQͅ-Y3GQy>p{#>Qq40 L :;Lp G]ؖ$}Bʓ4wu9C8#e) g̠(9gZz JZ֕3?|">94xۧ;* d* ON6 ގcvS63wγӺsMq)-Za24݄6/w٨Ow޽l^'cBl vf!@ÇF^.|eѧzq~Y0kL4b^X`2]mODDzC zzqY2脜]8nӡxng +1d.ʣ0a 1ъRxt=Q JGٙ`t᧟+9E|ۦt" oƉ.U@Lc A 4m뒹Py!B$3gT?۬k!DgԺr]yu2tk:%"!)b`_"9Q鿜,A"2fmGΎPAD "l zTB^T,κ., L!MӠb9$#_cR#Qpٵ/Kd[:E[-3B;b<Jm,?T`koo ҶC8JXVxw4Dh}zee4#J3їp@ DeY}a$G4󕆲,BS{AlpM`6sDA7uD"!oo! Yeb5bʜXBzŽ#Ú#L<¾h:A|*cpyyޞyfnB8w  뉨m 2B욹~5~ qbXisDhKU庢6vO?Ϻ!!$⢈M߉LWyF,%(B,kUuc[4%+uZC&ezMnN )&'JHDA\z|Gk 9?kS;CcNd ӃlRZJob̴^yyy,a AƽT)xŇr?dE>͟sFN16p^ow;G< ܲO@2ecaZpƴ6u}MJ5Q9-ILdbXp, ev?Q63?͙j#crmJD!LIňƉ 3`K^ AEZ!qΣc sEC{;Ia6\`jX!{MXw5ûӛS qYBNY 9٩? \8iDP`L`]Xcw7ٛqmVޜ_q9K' ylKW0Z6iKO/`zݹ1 ༻(Hbr5_Oeg+9{i.}qGçV+"J9sO7|t dISHx;'VQ*p{inqwrLgtA)um6ܳs9BOB&QPo Pgzeǜ 9 TU./J(c6r '6P|!qǽ!g6a9ϡjFL]>}V 4.6m/x2Ɯs8m~o 0;> ֖nn^0OSœA14 ݷeCa|h)}bB=v{pwjۺy#N@N9+)x8>'T^Sm2cns(G8 <Z'-D-??K81E[qq4. >Zk!ps&_ڷFmq+ضq&L"ʾ/@ǘ@k:{"yl6@oa6%?GPy3N{:<="f6KfNJy݈9B tz43bx+61 -wP3v9K#!be-Ƙ]~OeYf.*e!r"bLX;49"Y)fY/=x7 cTtZmG-'9N8N'iBY)=N 2"1D9&L@E;qvn zozasu?%}3Z0\srYz2j~,ϡ9;=f1ӧ7nG,Qg;R#`sdЏ+5Ss6Jshm*t|7y%Oc]"4r Yi6/|S/t 7CT/+Ɯ5>i(g-+חw: 9{oiMsaPM1s˻FA:sBJӅs~_x]u/M(ºO1IDAT(?sR(sϷ?>ld8"f{'hEC~1EBkm)9PD} 3Ctz5ڟ$ٿM6@unN<ӽ>yiFH1Lr9'"=|5ĚZLTH˅SS;?|dN6ɑdNosQBp 6IENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/field.png0000644000175000017500000001515510355345405020622 00000000000000PNG  IHDRHHUGgAMA abKGD pHYs  tIME % ,IDATxڭr[I?j-J{f9S1nKZHy[mB̢': Hw߰hސ}BW$1@sbXFl+3HrJ zMDnԯ q B+!o #C,с6^07B"Sp~ŷ;'8ÁWc1`8 3dL|_߰?:oX:xUȃ<֋]b9<2 (`3v )ybGԊV MT"~DlZ "JSB~y!R`L)tE ́d _`v-d @Ah'+szCLc# 21e% V{:cGV1-!؎!"6}bafc>'haB@_8@9t"};O%!iϸ-d ؅H$ÿGܐwp , Yx'A7\o,=!g%OnZo܀Q@CĬwV&r"U;S#зxݪГ,d}a1nLM~ "kbn{X|tI٨YG'iD.'RT-No8*!P Ai2(X`}LΪlY0,aX>vGml^4a)Vʣ. iVײGR: tԱXUqwX@ܾȍH!fƬy-ᵀ8"XHN3N*0yu d{uX$Syź:y%lXדM$NFx+`HX&b'5V`Y4c |mϤ``lk 1(D,݌ 0uD0,^AWb]d0xŸΥBOo?f~ވ8a>ZX2'"50&xu:nLpqFݍPX0z`!BKlx w'ȯԁ5]|D\0N`A^!4HUYj풆VC]ͼ1{sMcPD60SL4voZ;Cs>H$ !.^Z- \Pq]Ew22_``j0 ok*֏=hրYi7 d0FErج^^ 7x~Bl0nh%dEf~ʪU#jcBs{|Ls!7c9@W^2QH^+#Y%zdMgca6٦Z_p0wu4J'SML޷P16Vr&݋_KAYךs8U#3 K6[3 itlK;N ~#<+9/踕:Nb0^+VcPd?< R![Wp1CgbIZq1X.dpQ:}0[OQu縢8O/" ]zW  YOJ< 9 XB8;p` c:Tu!m?/B4p7̄E 'l +=wgJT62}: q&gqL$ ~,cʹY*t) 'nVȇs><}8 ͉ib ́bnϘndf{ktꊗLviep/SgIh$ֵŤih6sh[|xw>&v_cDhzùB%\ ml3R D<_{qKi,ܼ3ZGQkmr#MxxH.t@D^kZHË61#梻& >FTBZ"dS_Ǎ1.KǷ F_8\ۭv2ƜFw4puk l/tqG,7M<0Tΰ.RLoK3̘] YPW*=|YY߆'dޅ[>fume3f?b,OF":ol/,J _YIX3֕r`i1+K1ameJ1C= b$׵`>0  O(fsf¼(ȺUl*6e:)anFb܍6MD+Y9_v7=É;stol*ʔ7,]\^ujB ;`\FZ8Jbϒ鬕53ʢr [O>GO g+qb"C#9[.>@XX QåNƂF뿕9Οľ;qq 11ڋZ5r7? ~Fܛ0PreOD(!3~1,jz8`]k@6 tb0u4u.\ttI%9G'XS)؂U.z9&Oc5!k` 57X{ךYIjYإ0ݰ%FLH'IԂRٶI ƃ"K"F}=!nkjLZpDb#K5ʄnjrkKKy+ $o'Dzޛms 2!X/^C/2^(obڪޙ</ƚ 3r;sMLg-HGpZq'mFw3GkYYṡvB=b(z{M˼>`OQlA#&I<`yӥۨk&yŴe aͣGӻ^xtJG-TTGq q ⹞[ iU{o8e0K~-WBh RHok᥵|FMb[dču|edN,2ҁKH7 *W gZp`#Ѣg~[T%`z,Z5r&y6NdS(aȜxb~b 4/V7lp 7ުeuG;ZGunlVԓ^^FBFtƚwqwwl޷jԇ_*:G5s%mr+cm59{%#yC=!lY#'Z7/M9v 7mզMձ_5*eΚ͚/89,%FV^DW:7Me<{JQ5**FdA /c)$kX^jx[6;Xp}elힼK#D5ω Oes'tۉ=cXx[K)K;X^ʞSݣSzmzp47Wyvut7Ģ֫RK0ӻS(wn\e4&i1~{!XZ?1|ƚJVb^˙g"({vGc?v{x7"] EV: YO(ߍUT.7sn["?!edd|)0/1DyOHslWz0[ylk^ `V3~n-5YIH.ĽSСiq]JP6tL6wtߡtb<6=!~A5[9<-o>wvթ7uw/ŚvC*D}jkG)6$Tۺ{-UTBx({P|땞5X01[V5Xr/c 8a٬Ř^+fKav{7Z'NJ ԭ/lܰ8v'踵Ar E:b:-K!cL,o`g>N];=a]b1yy_̲&P/Ad~ouGFy,k nv,#E߿CqB͙hq&TU-^k]n̞IS"KhPemi[h:*|8{bldΒ4(pV'u_~iq/GʣԀ\ޜp\My,[=jl{OxB+jDby달^q/F+0t4XG<\b]+y]5R[(oq>Fb}h =W}gQo^3P&؞MQضl}-Sź88 1'y^qhXq\(igsۀ:ޘyg"9݌vH2αa eBpOlFN)&d0{bhn o+Y uW:bk8IENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/forest.png0000644000175000017500000001245310355345405021037 00000000000000PNG  IHDRHHUGbKGD pHYs 4)$tIME 85IDATx\r%uZnXg! -8lٲD g\ܭn"%< f ɓu՗PQ0 XZkT1н`ז0`x?@&}­**vޡ9ol|(>PiV_ޘ@{ ʩ@Y(}A>dSF* @'hѽTA9SB PU{}dA (<L[ mB{m5o3!ʩa0WB)0(PsE \SA9 ?L-U.-*3w Ft(4 j3,64~QK0u9KZ+G/KVn4Qna6 | -K(@9qh^4 )(p4 f-qm5 nп p Ϩ\.IPcp; X4n`;X'jB;焩˩@ >"3P n#t֎"| Hۄx!ERJʭiإ **S@Yr*wi>h4 t<嶵K HDŽ!@iX*4pGR]9<'L\7^#mʱ J_ PF!mRh[(`o&@,YjHs4/ #VPFRAA ;4[֒#,"/O+X@ |^wӜٛt5T,\" 'HHȺ:>TJkc^SEPaÇ|zx7@,G阠-^ 6ΫB>fh͂rQ Qx_-O.A ]x sטV+}( ĻxQkHyށ. 3J=5)w/,X{tL=Iinҁ\@ }T "z!Yp2nI>1]ptz>vabLp)v1~<26x2ﹽxˑaZhá t9-7K4s]lVDW?tf&*cbj̡gUhhp+?+InL]a$z5VH&ɃGc%`%T=4]`4$ ?wV>f(EE.܅y+JS J(\i(@:p8{9~Ծ9ʣ9)5V]'Q=|LL\6o œ\aW1´lQh.4W -Ec?.UEvnwR;y׎lYk.9USF֛YNt(&XڮNgU s(@AYԌq^ChcF  zYh#wn ߝ~Ĕ[ Ou11R@=6rfak ILP#3V_ዯ,4$p7q1|b̩BpqѾjӚ E[;!:$zcB:$"&rf=wU>P2pO.,.!ޏcҲ薊WԍN.j@N=:&]HK,h_0GVoou mH-ʉ CB_1feH[vw@jY* HjOrniܮGːA|n,rЭP lt9k~@*ܹCEu+m5r-!ÿTvłsT)8NL (_=!Bq4L6C>j!׍Fh2 ͧD'1!Vo#.];(GǴ-y5 Gv8Ngtr+ܹ-viѿ1T:% ܒ~${5Ĝno}uQa;i6njGqyxYre0O8.dXGS&D~ e(ԏ?ѽfYwj?Ȣ\CQ*s;fԸ/<55tH4bQgZ|`(ѴSFqW_%ly,1MkgpKܐc)QV/s{/[m*HVefP=(B: hz1 [i8dsC> 6cQu0 _}?6SW5UH9ɥ 'zYWPt<oP\Y1\6h3Aa:: ϝԡDҌ<z?a}|H!ͣIc2҈c^5۸Yg(zDi̥Cs0.7 sR+2P&=: :7QuT/MSJ/4Y |kU1ίzyT* rk iᖁGb$LccX8?iOȜXuWt4 ` 0mMԟ'l K2[-h2fsnH@CL8/ڎVM]~ HVByН*0 ֊2w8)0dkOr"8bdi;j^aIhO26c(kcbnsFU´ҞЮ-=r,v+E8"MB ܒkrI`sk"X4"1#2b\6tCk]EAӖX|+Msf#[5U(Q>RhY(P5< 1Dvx1,(}È L 9]1-|rcņa77=ϩ&IRvPH CF1wܘP9+G*i|>f]9f:C"GYaX,Mwln=fY0Wjf7L>\t@n)7S9M<(9e3%m0 ܅s32MiZH[:%]yœP9M*`>1\7\y!cx?0Q:rHra!vt:(-XMhWPOyǎbp`״AlCD6Iճbj% *%9tB)EKc~.sKYl=qQ i=H9eޤ HGυeSvbt]4̩RAlk\6F1"2qa2g '7%N_}5+M}IO~F$131yL ELQ o҂)0z/U:7ONx%FLrEOPWgfKnbvzMlef (@450/͓Ŵ5#ja/[Zn;;ڗ-}$ 9#CR-*!5vOSDD)L]CϟYUECI`,RximW*>-9/M|Ei^l,< LMlOOĵ/C漁6p[NWFCngW 튷pD”4YQEuVÇ $k没=s1K, S!dʙH e'ªOa> K9I:hҞw0^?;vLo0ˁd='L;U?gџ{pp?Xz.zsی3d "3iܙzi|5lPN -<^;: \0_|cvc+pk|V"ϱci.m?{U9 <]PNQzDr,s4_$8-KݩOHrkY"Y, %ݦ]œ3LJz&s~Es$=zIu[0b~4s hڙآpϗ~ՖΙe3.|A 5n*yV;݉)&M<'"bg, ̙W"3=bS>Qrkb4U٨cJ~c k1AIENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/gold.png0000644000175000017500000002677410355345405020475 00000000000000PNG  IHDRHHUGgAMA abKGDn pHYs  tIME "3h&B IDATxڭy\u9w-u< @3cL؎38s<yIx$?f f4n =]sݺ?vzի{> b5CbxQ8Ka͇vx{+NjKIȮ>Pu5| 0`E`a9xHff¦^&P@|1yy&=OLlK3 g@/~׸~SI-/ p nK~U!/F ctc7y6 ܬ ]pg@z J[< հw34ρw:;љ[i4A f> ݱFO`bȣi6,^~J3:/ vt B(e@`WA~&OC$x p=`+-a7tZw t%L7!~x1x4\>V[р:gTm@Gl6'u]лm[Y$ 1h1p F f͵&'Xop)}_3ޔ&JWO:ZE .JZ!?#Gil>L&eE#f:y&EH { v\+ʵ'[0?9 &`v0YIe0+-?ƶw⎕0kމ}OE>s@C C0 ֢Xi[95|NJ%,Ճ/ }aȜ0k%`(nܢ&= w3g?8p?߅8^.\ \7pr0{pIP ɕ( ~6h[M&aSo: $ B f0|_~a*Rk]끡`R(d!QW|50odaBKT̅+U;qxܓk]e(0Ƚ^^#a%`iNeԔ ~S jL pTVʋP /ܫ )בGd;*_ P BaE4싡n96'`4,ئIac`(Rڗx&]Qp]Qٱ2L>\ gϖé,L@18+lO0~=EfR0u-l격A"r^ TtS iȤ"iS"Eй,RN p<(W<`ZmJ@{n ۱eyV:/g,0 9y5gadvd7C uXV{E|/i.G3 uP.F\rb_>P>M欇/)ӄPL1Mem7 >?3c~:7i}Kz 4.DW(y,U@@qa&Yi;~w mRd ';i01qdfp#_JX\v* R)$a xLtC0~pW e E(}кa^OAρRvqK9ZXavkբn+P6@%hnUNWe덍 1z.$OÁ=)\,S : KP: AJY [dCaPp  S"䵛` Pg0W7Yp>Mf͂u\˂o6yɵ5[ʁH5d@P385گ~hlÄ9X}G`"=p*.7}j0@*2!g1-sa(v0CиFN@U%t-Kԩ1ܼC\VHs WqIU[M_œ%|,F}~g js̻ J)? m4Ķ!Dְ!66)x50p6?"9e=//,re %U(`.0/F.EGԶ4V7_nn'V=t>l}kpю#̲5rc$3W= o*F-_*1R:G!|&_,P~rc cm+nAݲr!4ÓİQaH4ǼOݢt)Qʃ}ia+~6]+\`I}l?tF^Uʿj0Y,';yUp` gjMNAj1XuT5[2Ѿ ScٔǞWd&߆E%t]f0!K%`[j1C6{>n4qSGw-S:!1@fJ%qBV]7͜S\"A/x4T oy0}_22}Fu6/ZMbF\Ŵ@_~s0'O'?h0%_ .8,lhI/![v0Tu3":a j;eEF!gp~M%xx[+'\"RƏ|O܈~3_ ՟ޝמ:tj@fMh4%gD:> :GF?_Ͽ [4`<83w&J1 ,<%S}LM,ce`؂;px ' ئ|\u v@ JM,^A~SbvD!$9'߿*F^ .D„-P`[' c(Eȏߍ&$a7a,vm?)[̫$GatD8l,Ew$\n(EܿeVѹߋ&`խf@q9 ̚[R_s>g}B-nʸuWKYa (LC;$ECgRmexn4ah`x4.jǡ7 q H46ݷ:zC:|p(=$/Z +|JQVqk6| lLCp=hWTׂ'yt]_ 8m.z7i. ;~ ~v?lP {˼]!ae*8U7X*mrhM\UAx%h9 EM#V7 KC0EpuP "0'*l4ln0hl7PBмS#.}04 ~֦c <$C۸o)o:UM>L{.Lןs")+!dJ+m_e0qs}I/1U gg0!p8|_ *ya0r\dprत/W#)¨=x~:V( [9 2@˂Σ=ȍLnEv>,DŽ˸NRNJǯڍw@u=Ԭ^",\"e@? aW@n īg|St' p`;\y/. )WPJ00/4`I?kዀ @u(=40=`mP.}ۡq?5|`> l&= ;>Db^ty^{8Gl@ Oɔhǯ;4Q6aH5)BE$@QXu^P1K  j*] t7C"vҚ}~ofZXɩ74Us\3Ńx }'`Ifxl>IsEMM]G *1x`_?ch}pu4+K>p3lWO в t@1w[ >e-:.M8rH 5x- hǯijj\mۂ"1hp+](5L’D)L=0>!Rlj%rih.,Oz[%xjImm9wJ+™P}9~J\[?{^lN8'(+YIi*`9)w [a/ੇ!E]"woU`jB} q[%t ! '+HFpbK6/aWZAfPߥ iD/bӟh2  'z |^|ښ}4=|6^eaz~]_p21?־{x*3X =a "2|g APIy'ex/?-.=Q Mb1R#;RjEz8,}?\1xB)fH!$ZQ{NbKu20pf+Z$vXq6F>wcBmwZX@z^}\ܷUnh,oe9,$-u]e~9H,wR1+AYyKŋm _,)v+j&AɃïCl)pmp`t?ÃH« p͇ad `m߄'~ W_ZѠf/%r GoO6iD3= !j|1L#/¢tS—R([9!Dw*%h,%)" dNI[Qq`zr\i,MNn`_e+D_c48Vd4*lX koRV66}|Z\yֹ0{T*M..Br 1Xt0nt7]8%7!ƛ][y5ĚaV!p4:/_P;V\僰g =d=hQHly4 񅉷 ,X>8.KpUϳ g+8fzEQRtR5unP?|!4LR*~hTRpw{ݟEGw}SVY;Pv''qhn &8=F(D9 :`F.g=p^*ןиpػ .Z4{>$LSRb^*łdk nUD#ȧ !*(^ (|O$B=Զz EN/=,d2" j 2H< w-3ׁB|1?7ka |>!e`zI<1+nK,/(^~Z߉$|3a 矿L:gwGߖę/C}N@ˇ޽Ȏ]pLtv`NdJVtbq( P¥ h@6oX=0qYȠ%qi(tAUƥNy{X\y.2AY|֯;vZwdE\ AOVS*u$넋n `n'ab }`ߛP&VO:֚ nY-p4 w[Q B)4˒Lrb'^q&B&+|3EtOĄ_L6!ڵ57OQ+ l^>;dJ:@gF̗Ζ:)h\'K3[g:3lSXL'Q mj1ErP s/F|!m*tgQ*Qn =h(s!pǥ9FajO >#\nXPc%9KC.̛ ]ka>-OLQB) ?'4.?" H!ѶNJ5бZ4j":Wt8OQW> eaM. [u9Qa W~g= Jl?@Lg_@oTFzg{aлP}F 7Bnz!3Ii-', ym=?KiE%`LŠ046*7\}e#mL{;_~峠*YI{h]iв@s.MRdԌ¦߃΍2>n?0P@lHuhH [Q-EIjAƤiGmD,D"8ФҤ91``KkOH O("sh㒽p"e_~^dYWyV9iWPLk<X W(Eku љ1fFl"f7WB. =x hIbq]m )^dr-;B $6WKrn9+n+?ǡEzn# ğPܡلYiw,k>-&FydG%?+Ex+ XYަMh?gwRxGpD gLkE߹Vn9dճn Tp(BOoC-H9aĀ6R0\L YA46jטg|n/J#)\QS ?hWRsoc ƴ5  I᰾LA1g J(_?!h^)%<eŤɟ☜B\ɹ'56nq ^s?=z+"m!6;g<6Ca#XT,rd"zИG];Cr~u!s8y/&.))P;pX,?**YPr{䀋]ǰ,WMrE + P&F#V{Nݰb)xɴvi3gMo;Բw:YK+s"iҼN`dP:ѳ $ϓfp\R '}Z*rR`v;r!Mk~[D$ZrN9ۀS9*YxP6U‘eZN%% rf&5Ѯ2>eA+dݛKīqc ySqbA*-*ctLm=|3"+cp3y,*+}V(ȊK4;-s]im3Q>(XKtu-%7jo`m2)\,ZG;%:]>+?ݢ@z"'=BC{,kᾠ`~eJ']L N19.g=9l=/Ü #̗>~id%Mc 9VlڶY*!˺,ׅQ4bxӐlۯd/~?a^HRBhr`nȅg(WHv_"յw:&%a?T wJ;HsxjY8c-7`@L{W6ÂEp-jp3iGϑ#J@X? l7#G%5C h=kjvs{.XyŁ09ie[W-@f,4͂fST>&UԶޏ1| ,5SpX1gj+h"P ;D V.ˊK!0\ye FCH`پf@zGa[^H*#S6a Bz NX)__[Ž%Է$|`,^,lM n_U2I6Hs4X<`hģ@6cpךbRk2d+?s h@\/ ܨKZd^gBM>j_yo1g|H%y{;Oo~,_%&'i@vXJ9eK%q<)ĽudfKwmMP1}Cr+5;DRlKL(apܴb!?I +1!g8 ~[vA8 iYcq` }_!hS߂7g<fo<歄"e ٭1=ccϕ], f%+o> .qb ?A?WZZ"zlǸN:x~_G?>@2h ֟`dwle/_@a<0%?"e7,bssk[k]ԝՙHerpHGf%2백 On%{9;88/"k0[nm{%q6\o?AYVW"`W#^ :#[`O`iTsS.Kr6v-B0`l8߫. ̢ :--r}0\}E`׿金_óK|jADؙk3!%pq ~~!)Xe[)` ޷`EԺɘ %iIűtvxMsRNyKfCHm4a: AY¤5K<7WJ^Sh[A.)&`F3L"i?~nṧ^|fT\}:y^|e AdBʄ`Wzlh)MԀJ!,iNHda(i([;5,< Z ' % Zw\أwg%uV"̐?`f!D(x&|uےM=#@ք)Nɹ+m¦ORyn0 EP|Cq"j-ML0#-ցTD⿽gFh272mԡu:jb "vB|Xߟg{ܚOTX 2miߴZyW\Q\e;Jg-ܻY=Y:\] ߐ˼qNU+ lT]Y CÎN-7kє8ImE@ ?kizÐa2K-̶"l +Ù֦Ud%%-.7"ے\$/KP`*2=Hޢ7T Iwz.;'g+Zľ(IoTӁۊ: nî.U}]spV)s"W'X ^z<A ϵa%yn/7a@{(Ręd3yLU! ޒҦ—+U8OPkCEiY!eA݇(M7r 8 t E^ΐP=E .<}V?~={"7z8hfs l~ zJr@q8rx^vNa0ts]QaS`Re.ɍ'|߂u]:RрZoЮ K>p+oL&܄Ŧ@'?UUXM?AFxc`' l "(uQq{L K.<[3YM~ <^ &bn@G A)g>3[H[`,plp$R><k5fw>8Mv{ 8G>=p 7 Մ.\ϛ6RXV[%S:: OWES|.ZG᏾йUh(tQ`6OL+* omQ&8dSфŭ\O ƒcЗ v&ֶ0||Ӈ8Pp#[<#:SjRw7y놏`8 ?VPߐxGaDH'feBwVWFAaӡ x-yE. մǫyc x] ݂-@yNLF&1ɉB񝭸uOpD'l&sYd u'×Y57]M|:~ϵyq%}G5xlv)Bdl\lHCɅ_ܟ`οgӄ-#00- +%xEK28ķMvp8㣤K\} f"~L=%A}Mt(UKG/{0Հ)XtKJU*^y~)@bip +"ಀ'<7|kU;[yJ>9c]gAm lpw Yy(Gf&4L2ˊ>7$ d$geWYz.sqNn%zn8tj!̻;GIh4"JfH[ zGcuwv~ *z%3sp9Z̯<.\E(8 %ȴCƕ˥%]xrZH"Yx6,Ǔ 8k>Jqu8'; ҖCo6<ةF[Zb|D7 (ňr.紶S4>0fjϛ0ۂ/w &{+<^ՁKޑ+ВR1WA3S MZK@[B -@T0d.4 ߍh5#Z*'$=d26u^%NߗUϗ/&ú :/$Z"L8 f⦁#`5x~ ̸`ژyMmC% uϬRSK73d,_|C-E#(X:,A7A:[z|p0`D.zI=ƞҢ@ztd?,E0[y;0ҝ!p/C [VyqyV І|Ftc@U8OԠsPЬ.煬* :OvUP׿zMɆt:u+`e ;ǡ+ O@I֋naQYe$9+k"o2Mx#9W/F ύ\'DŽ)x$ Va OA.kz>xbed@h2;#T1pSY>׆ӫ(w3f< j5meq'0!aBWM0Y$bg *z3"- th42[,,p =!-T^Rg`9ayI(8KF:0u|r}^)r>>=*T- ^ߜ'iA*1RL r_Iنz "6P-b;Za,dIA,q1k: uG dK6\z)?Y]9pOETXco r߀3>,Zq4n9Q8֟'/:pOފgHBsz[;ng'e-p|6|uu"4XiHBkZ=h?녬⭱7?]v)e)q4Tpe5ǡN#֛K .]}ock\>C'oųO<َ v zt'QRѨx4Jj͚7q} '&g:'V;~ K˟nڞ_@Ԧ?]rABkZ!\lD/'t̅:Iy=}tO V]䏹n8n =(=h{HsYE=0%`g#ݶBw#/Í88snm8W+uRƽ<BCPf][wvS3cu`{S6~M2 AxzZa\_e'61Wzf+ݎbUDkյNx}FGcЕ7iV 2zPnJ #TGJy-xe86+P,뉛wcC S׺D>A*C}q.;vv./+ֶL~#: Poc)ܲIDATC]RcGc d18.=2b‚kB k6wihwʓO1$ ]\t&ף$IM&y eOF؞Xwet0a)Xvv=B#R~ZW=bof' &M):~R,H͖^vmqrb8oqd2Dto*Omp-rt$sDR;k'ލ8 -r3u#YWJnG5CFUH^DJ pZvŶLPtt?cz'z%C@0]Il,x vx<8PGu,KP-zeaj>TCx"'6]&,(t;,<4/TNI C赠h ZAB\u/ZMtoȻ岶Cg,AK) FC`CB, )CЄ#7* hVDAx"+k9Sp, B BO}oRa"Onp_*dLZ8& wu]Ƹ%l=t=TDN!)w@BW\iRBR8|/6$Bx_.BOtOt}ޟ1ƔNR6{ۊ-x;ԭ[ K-2wˣn^pȩL|hCP@3Oƒ ({Z쇋 fhj!˯z\<'#[&GqaЀ@A=(x7<2F2)NЌ܈dzZ֍^,V]Rv`]_mٺ) xy/P׮n=ٓ`h0>ӠH УݗoZn+.=•W na86s/Z8[i# YOz ʂn|M0]2LfbqfZ+Z0f,[IENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/mountain.png0000644000175000017500000003231410355345405021365 00000000000000PNG  IHDRHHUGbKGD pHYs  #utIME  v IDATxڴga|rHG]fW\ dHB`"&ɹ7@&ZBl\UduY]G{-ܕd`C'>yx%)yB!,>nW̹=w= w.׾KT{8|LB{؋#Ih#> CR\dDƇ16jUc$2 bLI;$3P,U(KTZuFG1M"\gA5B,xԴN5@od#~_*`w*H[:Zd6@Zߴ\Bv r8v6*lj)lrP'Z WE R6 /p _s0h J%SjUvi(JzeY(V@[x\,IZHxð-v$|[Cz48sEPT 7QyNk l}+=J*NQCu:$AVGyeubB(tvzt)(NaZE%[2.)d06є * 9T'vА3D;XhtÀp(DWg', hMɢ+҉KqUb9^?uQy,ݛ=TV`Ox:cgy]G0( Hthm2!k+ɔ[;>{BO00N\z%bB>\.t+Sc)բZ 66FPv<,i5ZTjE8^Lˢ^cZ.h(^L!)*bHpGK3W.ſAD 3oGힻ;Er ك&`C:\R^dm%(3)ѰT5[vupmq o@" ZZt.E5arhR i!iHo+Or_adVv'=F٧ѿyO'mNg$L(aquтWg_kpχ)a ,#C+/LgG?I|)q9:[cǟl8ppzԠHdEf*a$Qo5B @m`w0GO_exV~{O Lz ܣ&OSeپc// iTNzZZ¹ ~Wپu ҥVop16uw׃%89y$WoLs/GǿqrGߎUmbp;K&"rA֯PCi朘 'NӇ7낡a7uAoL@DV!t0v&GW$4:8<ܜ }1~ q&oaj3Tm ۯ~^| -q ֯TZ2orc4Ke,by>$MFF䯝c"r%B/Rɷ NlMX+υ 4 fqF^&n[\eL:AG(z?p 6j=]z(Σ؋s uw ɕi5҉%l"L062il/{>T|t&/";5rBD6$sojR;3gؿw_Ѩ``١Z)akUq(c&^>$WˡR$pRn&Z"ߘSCu(q(L>_Vk vNVU;@FXjba[q1&v=E•?rG B+UDMff$!J]=X@"N;mav5^=0\ZƮ 5Ԧ:>0;>>Ⱦ};1ZAmc40 []=L֠T.S,"]j"ߎ&ɦWX_[eFIRcnw?-nbhŧضc/AѬVmcw*MBL , qZU}*Z]fmmn`:[7]rϡ\^Pn5JN;`ť$U͈I$//386 0[#>rMAI8J{;lYU(xA$9R/Z*܌(4JյD񧘟/#׬t%I]W ,ChF Ua%Yӑ$ 6.iv܆˱kI,'p(*Ci5(84рr HDAC[6"B 7[)MsET b2ϋY,Y!ڛ-9׍YsvŎIXIPTh" &WqLv#^'Rpix}U/dkVVE<ij+t,\o-"n E.nY: @a8%$I, ^n TZ\[c vG;2BD, o,Q,i#~rѴhU'8PmzaJCvrl2>.[D0"Qm:;Ƒo\, ȣ#1.Mϣ$ZZ>&0vYohjBa;-l 5.]'v ao0F./P+k`Ih-`Det K)bĆ1^8 L]N"l7)"k π ׇde=0ٓ% XTY(l}訌ӭ[ǐ(J7¥+׸veB .dI \e j}7 ;XXYZq}L]I(WA 2+IJ'h7m<> ӍarppyT 99t/^Xwo΃.` * W h*N#3)EH2wK,śV9rG] p|NH'%=cd4]\vcg#o{' Ceɣ4&"2/P-箳 B1?#[,/$Mk}X$D ܃*0 p|Ȟ}9U54HĴ4 s߃}|gn^ "38٪7ٳe[$3<'_bE2F;nGђ3)_B˶ٻP)YyL@-g4ay:o{;?|T6E&&nQ016 Q5@SRN3cwq98=vOy[LKk`DbKY+Z~^} ch|&8u~˗G'ToP}JXl7ljH&Y4%s( CBD0( kHAheJgYvju͖"+skc7#1\;ʵyA)5 I. x]/$*ZkG_wz[qHenfHW=x*2ZK_)ŐW۷5S#LsGTmb)q#H4JnS+0±2*! >tnSӢ;3ޠѨaP.3iIUg0Df]GBKin}=EaͤPi4]U|18n\I'tZKuml`W\=^ <]$x?3"j͆>fDz 0q]Zm| ņ,T$  ȲC&ը'pb8l6v/~fK(؁eok1d"'8y2NrX>3? 1 -}}h5Z+kMq۰`xG?@~LEdշD6;uD`~i0L:mbd`TMNʍrQennVQ$< fow`jjZKyIo&o\1@сfi0\%_l}{>;mL{mpyߣg d!Po@of(]l^k!J2N(Kt(D;dEBNSh w9x|. IH& X3 S(QQ)ظeGE *\yC݄B*6TvAU̬]F:';q t];ġGH7۷lCGq j3CK\1[u,Q|S.Lb UiZ/\&:hK-ٵbxd7Uhk,,,_]gptٛ RDd\IfN txQ ##Z %&A4Qǭ;uC.gL6E*a1k3|Ӽ#[w9ԋlYtwD=BɱSsuxjaX/jд ;\0hSY\?'G5V4,Oç Tj(tKHD"Na-rt ^tRZT7}>vq&=L$igӸ*A SuғO_ZηG^ح(C] #}|7l+'N^C۱lȒS$ ÎeX&eygӗq; $3幛M3KlܽD:]]oɤ]& fW߸ d{>Uh*ID'b]4}[x]7G"Q"tګt\òڔM8y%]4\ K;xLNJ44k @VH h0?x,7M>O1ͫHS,xǭϓ^'+in!gzDpoMJ}w?t?|Ç^?OLAm,Ku`S$nĩ&s5efnav=3{,UؘD!59Ba4@ rWegNp|;݈-:Prtcݜxcf} , ?ATFɕb.GH"!k/9|Qls@~˧.bSlL21uc3fӦ;Q B+\eۡajnT 믜P5b nQ.ȥDlŇ޳@OH }ZrR,W:rc۽[l"#o"\#Ery8y;ZI7f-$fft:iZ_?p5L\j[[C' ;ty|O^JgĆH&_J]JS/0}=(o\Yho.qgqS&5A] ys_X_g-;%uK0e w?HR4:dK1hOsgHNS8uu6:p$ &hrJK)6BKt%RQ.͐]k\9?Cm{8{7lNleLJ,j$&۶ N:# O~?Bv $Wtz֧gx&w}'Llݶ[\*v% , WN?!]Gk>x#.-seW5ݾv{쒍թ$k3'."e[v;At\No>B"D4.]zz2ڸ}^N6hCZ!v^8v[vn畗rE*HOhz݁\PiuvQl`4\,Lex7o\Ӷ2n㍋'4ϳaNnK 6 ן4_ eڭaJEb`@ Z% AdњU%&ef~TxUDvemDSWI4<קa6D:Eɳ?;K\aght7(K+EtAD-$K&'o\cj)n;Kgj6N .B8URġ;}n^sApvCȂìbsez{@<\9_B\<ӧo@Qm6=uAnί`&]1'--&W| /yK Fy;P4["z$r$6SWꜻ*aF8޾9AWg?+7ؽ6YB\65g?FUaZm@.ѤUSVn8UV35ٹers+klfSHMp*J i#韨+>n\v'dZ+n5p\t rx=e$SdKӽ% A]e]k)]okpp~%n _b~5 ?2AR΋$rb!Hwx2OOmpk)?6 0Dž` #Qt]`m%IRE,Uaoc!_A^#UnkU(U-hѨ{֛r 5B.\rJ|jӋMl/)\Qo8Ē`(4MpC8½wmwS1Zt}K3\TɎ 2 tg!a!(9~>kV옆@*r:<5F"<;?QL(26<̅Y6B>d=U"W ɷ \%`6$&-C@kAGO}a]CV$zbl޵G۲#BT^Xҩ ۏOn{X<<~vÁK?N!vz{x=̚YufMFٶk'%Ϝ4RI0uilI_?Vo?ÒBHi*m#[]^g"S |5oGW:)O/Po40^>C.Wxo2ĖÿO-·^M[&ߎ%_Kr9OvҦMwR4,drQOqto=-f.g_c^?9_v4pߵ+Z,:CE_'/NwcCxhb4(߸ڮvm׭b<ʍTwoC m)015zqeAE jSj1>vˢ}$qNrZ"\UŠ" Ȕ>q6f>_ !Q+NA*Tg BiJq/YtZakHB6)3]DU?fK/98ztU՘ΦAHU]lF*!RMNO;38m,.LR浉* gSAIENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/pasture.png0000644000175000017500000001645310355345405021224 00000000000000PNG  IHDRHHUGgAMA abKGD pHYs  tIME +gBXIDATxڵY\ɕCN UdMI-IfzU/A{"3mA ^bS"$rN>!(0d>eqsϺ'\*xz;&@ c u6s$HUU쮷< ?+O'U: OrbK߾_Sdfm !قiiy3z͖YQ7 d*&9a儭-e t33gɱⰴJ%?rٲQm-ؠ0š ]eldqC,eU\mesΚJ)|HͲ7^(d)% d Bbj1V8 īH8vh\`3jaIm0g򚶭dڪd(0Og븻~QQڣB=_@2\pqS p#76\WBX,хƈFN{&xس9(JqpueZkJl@IP@Xѕ痗TY(&9XvMB>ܱNJe {bΔ$Fj,ߝ-e((Z63|}Ogs&K¤IWw<`NBERt=*ar$ ZH1R@E,fQRD{57q'12ԕ_t<-o.@jʞ(RG:E VXQ=n`CGKb, BK8m:cUDOqmnv7u嗄Ex7"ĔgL!XLg-] & 1zLt1TQ-Ra8)K](L + p%1P{Z)LVZӔ#z} ~~Dv ndM2Y"j Ruwe1$5p?VkCI|U(ƐsQڒa} ZPU"H̙" j^1gRv0 .aƝb5dERY0xte)2~iLiQXJ Z2\.#$O#0 :1&>Mɀ-2\#7 'P1B/;ɘ3e6Xk Yxàt2ŋsp)25;WjuP5s>G3R-#ĥ(9U\V;P4H.##I1בBc&CNPkVwW= Oސu3:s3r'ۖڱ/=]R3鱮#!FMJ 8!aJlbdN#+J7XkVffl6hVqtdUhd]@Z1F!Nq}U"H#<9˂?xFꬉΕJ]*{W+͖zd\ Uͳ' f!MPGamNq^) `e@ij{,k_PsCrDۓ ~@Ғ>C 1IeZD{(S8Y%cJ@2Ј8L ̼NO< Sn̬=UO(GzEª)f`&b7#mA=D AXBNVj@W}DsVjZX7"';#]ITZ[E, U`D~030[90qJL! J"ꈟ9$dJ$-tuAe¨R1+Ǹr i/p:b'g6%RP9 H`vVkM pw71'B!QB0N٠H)`uFxuY"&kϔ 0z@vWSB$ȼRc"ڀq7~0N2FJl$1ͬMC^n Ea鵧r;9-)fƠFAUȚwQ E!1U@n0G1`]<ƕ(a(B;Y*s&TM!0  ),AFIcPfbJ!S"فQ UjMi:)Y@ ^v aB{A\V Pf[6 fg' !G*,U(,K<1J>yu1R*V@'>G}iʸ$UDMd)P6曡ӷLZ (0t$D-5HhlDm4"~ [U=Ð ӁU;Skł+AGP2j3 &X6|.HUx%&'Hv":Û}O۶iqoxK𬴠QnPZ0 MÔb+Lo!{mc f?:\r|[t NtFiK왳'"<=??^)!DMQ-FiGxAX58{)1 !$ǏC] ѩ^GMlq tz7q~޽Gg?<˲$JbxoQT]fGM ͤtT)zPCGw̒ -j!,?TSYV'-?Ӌ])fl*:[2H,طn?@?Aq[-9̷,{T@y"r5G)=aMQRxa;}(2QBAS3-E$rˀ2L-%t]JfGQY"@\RP'WUGΈO4B #HZ'd'υ]_LHf7yY*c Jפ`amejttk#CGY<*T`Uh(@3k } w>uiI:Q+ԣ Uqр/A *P=y7a*,|m}>=KvD#: RF#*p3r)&p) [+s(,TU^Xth?Y*-Z3"#³Zm?~RrD)( KqH<9Ƿ2_4 $U(ѕNhXoJԢiK7dH٣f[(fpo!-jʪ0dFɨ[2N#8(lbߏ'̓4PEHoP}ϋ5͆NTFHS U' SHfg{HHlas?GB[["v@0+(#-8Ҡkru BJ4A'3XI߿xp@{ ([9B_SUEAzA8k 2i9YA<Πwtx Kt_PUY?W!6)F&@]׈Km,UgC=( F!EDP +S<2(ȷ&B[ai89\Όcdn$Qg^n7 q?N5]¾萩+*D`qrQWoNFp wqR#bu?OSձ|7n"JQyȉnQR.8gb3n1ۮT}aTF ͙DJlΔbԍ58@ I͘jhDhi.d*Ei.yJ{WGWMqV>6 V> [;0ʶE2l>:0  \= C;ic¬*F3*+:.`V>WM/fؐtEBĢ0JQ)'}pQdQѕݺ8$P: =*>_6&_$m(J`xa'rMHr9gp!fOc> w n,<E"Ha5ubPTm8น)hzMHb氛{pw5r`x:H]ESG슈Iқ]bwH2SR$3B!a?Ki6؂E1fPB0CIn/r3N;&Ă (*n!eC#U wbxL륦,5Y6-^ЍA%M\mjthUng=HF+s&XSL߈ |IXAKo{^[~̔gB!e>,_t-7=}?FMI1 o.x.Hgp>XlKlb'vϟ2Xòn]Se&J'ia }"M-wdR5SUxfJ{P3Ǒjm?_7Mq{XWr*`AJnh=tC^$J )Rwk~7\V{+?6]B$vVc\R6; ;+ɿ}9A*JOm_̺kڶl;XK+;\u:!{dmh׆Z}vmjMK; - 9U%q&E;A=W qSL`4H*\fkp!K]5~xw_j( \H;DxiTfUԤ6rV7oإ~SZ(c%F]QGY[n7 4+iF"V"`B&.G8\9aȘ/VGf.5H(F?^9RjB\Yݱ(J4SYnt*Q.YjƏ CuQ RR$-<[Qq~~I*@UdW77{LzC5ݎhtNS W?kX\bAP"ݘ_|Ɇ"2Nw;|^k"gjk(\@*舮GKad!hIf #P:e_$d<hK5eTYT sЮƃ". *jk]p씘5kpt U'tf}$yȒ3;3͂"nǺ,>* 6bF/2ԟ.>WEԿWyQ8i11%Sz]?R;0?^U"͊L'4/1愸M* \.Yqw{V|; jSb= -n;?yW9a嗬tu9'!~Z {KAn;~t<ҭ deHIENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/sea.png0000644000175000017500000001643610355345405020312 00000000000000PNG  IHDRHHUGgAMAOX2bKGD pHYs  tIME  @}IDATxڭ]I?qdUuOϘf0 BͣviZ*QF;= XdwEY&?8?" ipYC!8I9y" 9i"T,1ғddh%ΜIf=v{8.dN}}P 36R8--7e1/> kH(9O "xuއ HUqHBk8i2J9 A, ;G넯Dt\#i FCNGd6"@> 2b'x]ĺ"K>(+R` 8@fG1u0 'C7R;d#ŎX}<%vu[hMBUyćѶ7UqC•#I00]ld*` I2d&;"f1IK4O kjCM:NaNث I[ӿxt2I5Zv!EH:"]6 gytTG@Wrփ*b2D4@'J;*ځ 4!t" tlʉNpQA'bBnDX-JM r&>&CN﯊ X!فD%0sHqmoIMr'^;kz-LC$x,ui?_6j#2^ǭ~4AUi>C K &*ٔ;)';y_vbN']7*Axm4PLub!12K@X١/Zm{毊I[nI[o3L$@ua-,Zix4|Ot٘S/@d)`ސ깺Hs3/;24ebQ1 'C@k5<~_7J9GՎL9/SylH T @Z=ո&|i^DIu1Ѿ׮^*0G})'v@bX@vr'̝xYzߑ  2HHLdR[0nlu]m%!m;"o@7mDވ\Ic?hTB;Zj>; —^-ۤ::7]Cɹ*NoB̍tbDX N8(-]PH#,:N򼆤#K'& ȒN4b~e6iEni#ARun+8hXvq ~,s0"mZ+1;_w/`8O%0TIz/Ŷɺy{AN%.v,&*jDu/B<1ѱ w4/i& mi) ɜN;180u 'C3oe_Gm&@0 H,x/jLL,5 bZsz+ ŧ0ǁ$-n^ x BPwod4Bh >Jb*'X m'~_\AMVz4?!3Vl`JH/!}\7*RdVytS s!4DVݰ' M;;2_QG< 8^\BPj i,W+;ë|U1¬ziQ[ F^F9pRSCۂU GBdޕ9Jb}Q}ģD-GUx$BHavlYp]lnZe2[#Λ"վDaHg=fP2 cP30) j\|`'âi05DgFn`D@ͪ9!Y A'mۢ1d1߲lׇ6PT Dox^>IX5N`1'z8-YP`HrNQ߉iTH㤐33Jczd[r:oCj@%HE0fuaY;bL s@F:*;Kk}]?IxQ.)[ɂ^t5tQlQV ݱ~= kKml\oOO 1e~kltZW2c9#|0cpt5 }G}џLI, 7dFkR 3Ͻ1y<@tbE`#038\9'-ba9du"3NxLBլx>?88`[m"OL B4X7)(UXȉ c"Ȩby1EAE ‚\8Q;ZUBpj*L+qc# (6J`ZchiD_0툜4?xHLoxqj%?kĞXߠ}$4vc1f9Q^:j[qߊz )H튬F~q$h'i+ UR0fau A /G:UgD Ϋ-cqb4k+ًÞbјdž#/,f^A(yYBud3i8&+*Lg+%V02j[Hv`ƂJrQ ˆdQ C H*)Fx0IU0}rI 609s0)$J,ܱ#| .d!ұ>Qs4̅P#aT[8)zq+mҖ/nE=d\X ?Qq2hx,L}Kzg-ӑ>R4%O4_Pk+,Ī1 "A V#л! 4̣pdxz[P cj4-h}N'Ԧ$g;p R_M]SBIW@_iU:<_R%"Zm%(wus#iAϋaҤV.)>0iijDjWFGu)GtG0[jյ[! xn貐TsrG֕vCڍt%Iw|@;Qα@CjŪwET5l1Lz[7;G E/%UKǵf$c"Ԏ6D6ںt`;cb (W8m{XQQT&,ҾL 9N0C :Qa"2KV0 :5fZ9,R76υSlmF3=5R?L $ *bm֎^@zȺf? 2IqC"N!t50a5?<]9g]^`º]7щy}]q5B1IĄ/L˯x΄QZ#4uD.0.vs.`NsMP[mŏt (9[G[Z#nXv57$n D "&Iv؍ K95C2ra&^xODXmcيlYt$G՘G£ P8޼'ywe 'Dd/vnnu.5P|Qs,`\GؤI/ r$by [rbnNs"j(YrzD#'*.|6o!A+~6D###YpU[Zu"΅cfb"KgRfT"D$bRˮn v&Hsj6:H^H}FBVͧ c~6qVbOcNkCD&9|5F8HF@ag㴧ڮ!8]z>Ur|,4SKjvky , 73 J+y) ͙6AzAR ?{Q!DvW㴾naΉ;x)&, %ڍ8$ 9Ĝ_$: fuNЙ絎Hb&pU'ѐ(/\:?}Ihͪ 99:NӦ fJFKI=1jVk7h]z!t')E4Q}Yyk>pGrD-9Ҍ-eSN# |h|u6omh}dDF_IN텦5L_"Я\uԬX*֗獟=wNGaXXH ו.XY[ uq@t58^N Q3m"5z+ⴡ@gw|0>av/vDyQʝ!E+B+wݶT;2$dؙYDŽe ̕s}fo!ggdv2Ob4:6ݢU ژ^{0\f9PvG[Bfyp~0qUg]f_8y^rX%+ק\;=ds\Kp8舱StӴBQ遭ƸA!:16,J ZYލ{@sd8T6ETwDγVɋT!xw gx#聮 %#K#1蚤yD$i`'8ᩦi2(b g} зfo?p|tzvۘf=-F_(Ͳ*8p{W:K:ai4Agufh3zN<&l,eq'6dN?}ѷOrLsvVMӱV7+h?e^{(B)SK•i16y]jB7S@‰a..ysVK|3激s^iöj nIENDB`pioneers-14.1/client/gtk/data/themes/Wesnoth-like/theme.cfg0000644000175000017500000000103511346155101020575 00000000000000scaling = always hill-tile = hill.png field-tile = field.png mountain-tile = mountain.png pasture-tile = pasture.png forest-tile = forest.png gold-tile = gold.png desert-tile = desert.png sea-tile = sea.png board-tile = board.png chip-bg-color = #ffdab9 chip-fg-color = #000000 chip-bd-color = #000000 chip-hi-bg-color= #00ff00 chip-hi-fg-color= #ff0000 port-bg-color = #0000ff port-fg-color = #ffffff port-bd-color = #000000 robber-fg-color = #000000 robber-bd-color = #ffffff hex-bd-color = #ffdab9 pioneers-14.1/client/gtk/data/themes/Makefile.am0000644000175000017500000000222111346241564016504 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA include client/gtk/data/themes/ccFlickr/Makefile.am include client/gtk/data/themes/Classic/Makefile.am include client/gtk/data/themes/FreeCIV-like/Makefile.am include client/gtk/data/themes/Iceland/Makefile.am include client/gtk/data/themes/Tiny/Makefile.am include client/gtk/data/themes/Wesnoth-like/Makefile.am pioneers-14.1/client/gtk/data/Makefile.am0000644000175000017500000000456011715251527015227 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # Copyright (C) 2006 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA include client/gtk/data/themes/Makefile.am icon_DATA += client/gtk/data/pioneers.png icons += client/gtk/data/pioneers.svg pixmap_DATA += \ client/gtk/data/bridge.svg \ client/gtk/data/city.svg \ client/gtk/data/city_wall.svg \ client/gtk/data/develop.svg \ client/gtk/data/dice.svg \ client/gtk/data/finish.svg \ client/gtk/data/road.svg \ client/gtk/data/settlement.svg \ client/gtk/data/ship.svg \ client/gtk/data/ship_move.svg \ client/gtk/data/splash.png \ client/gtk/data/trade.svg \ client/gtk/data/brick.png \ client/gtk/data/grain.png \ client/gtk/data/lumber.png \ client/gtk/data/ore.png \ client/gtk/data/wool.png \ client/gtk/data/style-human.png \ client/gtk/data/style-human-1.png \ client/gtk/data/style-human-2.png \ client/gtk/data/style-human-3.png \ client/gtk/data/style-human-4.png \ client/gtk/data/style-human-5.png \ client/gtk/data/style-human-6.png \ client/gtk/data/style-human-7.png \ client/gtk/data/style-ai.png EXTRA_DIST += client/gtk/data/splash.svg MAINTAINERCLEANFILES += client/gtk/data/splash.png client/gtk/data/splash.png: client/gtk/data/splash.svg @mkdir_p@ $(dir $@) $(svg_renderer_path) $(svg_renderer_width)400$(svg_renderer_height)400 $< $(svg_renderer_output) $@ if USE_WINDOWS_ICON pioneers_LDADD += client/gtk/data/pioneers.res CLEANFILES += client/gtk/data/pioneers.res endif windows_resources_output += client/gtk/data/pioneers.ico windows_resources_input += client/gtk/data/pioneers.rc pioneers-14.1/client/gtk/data/splash.svg0000644000175000017500000047267111760643043015220 00000000000000 image/svg+xml IONEER IONEER Version 14 P P S S pioneers-14.1/client/gtk/data/bridge.svg0000644000175000017500000000353711652323243015146 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/city.svg0000644000175000017500000000357411652323243014663 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/city_wall.svg0000644000175000017500000000335711652323243015701 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/develop.svg0000644000175000017500000000401111652323243015334 00000000000000 image/svg+xml ? pioneers-14.1/client/gtk/data/dice.svg0000644000175000017500000001546111652323243014615 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/finish.svg0000644000175000017500000000435011652323243015164 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/road.svg0000644000175000017500000000314411652323243014631 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/settlement.svg0000644000175000017500000000341011652323243016064 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/ship.svg0000644000175000017500000000413611652323243014651 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/ship_move.svg0000644000175000017500000000506111652323243015675 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/splash.png0000644000175000017500000007774111760646030015203 00000000000000PNG  IHDRݡbKGD IDATxw$E{{etG82r*|EEQDE1̈HA2p .Ǎgggf'rztWWUWxwU ACN3 A"!  $ A!$H0dV j  UQJA;O#! < TuIJ AiHT JD2 H"H:O@&H` J A&HP{$NH+AIIgĚΓ A=A#"V#9 XVy$H`#Q $=nX b-a%> Έ5a%'A60AC$Hg$$HP"]aW@BXB$(;V JD&HP"wW@BXB$(;0A"Q $(л !!? FX D]RT l$!Ak +< $QB5G2U b-a%> Έ5a%'A6? jXKX $3bMXII D%L HaaHzNQoJ:O4]ҜJ!) ʎ=A%"q4Aґ #:nj;%C/n{l{غuKT, < bvF9Q? 'Ezѳlek /з9n ¡&hWWFf1㕻ٹ&L ^dL:hꤩ3d˫_yᆬ+hߵV;(&NC{eo噫ر&#[ɡc"aeMayL/yw,]=tM*E[3m-s!̳dRrxΝԷrcSP@Y}/(M/s3oelAKC?,k 3nޭlyMKk :bk _?v^mט,ga:y#6d` & ]n6}Sxi!Zp!ǃ_kzE\v /~?s};ݣm [eXokYVf+wT3!8(F7^Fq!׳)>]AW;cF򱳙:1<R϶41Sh6% =Ř)z U/Ͷ[-YƯnHYWC`>u~MXZg!}0gCys$}+be‘\2Zk/!pV>yŽpХ8aa=_♗1~=dع;/f56vJ^}MwwL?vgX wv+S}3Wr暑43wr^xb k`RFF)c;T2.Dΐ#Ӝ#8s~v=RYQ)XUAw)xOͣX#1ɍ8_iFY8"|ޭ.7gZS!cy=ps*ٺ=_z$;$˗+U\Xa9ᅂ'v_r_Ğ2 _ϾR[ g쐴4  ա/M|HɔjbR0)&88|>|Vv c8 y!dclaap\ X`2L0OK6OTP6.h8̸0KOqlQfM ( lqoc{yW2& Gl8Z!bsl D9 t&

B% r-3+rhyGh+X;tN36R m[P7s#cSeKg~Ka܋е"zs#G[]H}N] 4hh'U&I'n)zZ;U0 =ye,G~˔D0صxz'9~~} >rg?_b:' ,s7+ߧ?l}c,\5mBzE6F?2.'Ų 1]]^;Rs9b[/#S8rN#3Π|/X MVa6=ޝ}W&ث܄<*֒LN D֬4FBgG> GMwХj [2!.;ANQJ6aJzC -crR xa+eX(sqy\\K7e5tk( 9;=ujcIyi֞obAςUfd/4lU'2>s[a$ 8y ۆ(;m ,OSlv|59I4w76N$u"l;[lf`ɟ@W=J8:zoN9}|3YX0.eEϗ;a2+G0<72EV*c#:1UY0w{\”w3ڦ㤙|Sz R,ƔX1d-k<^-3mLpoL?/(d9LZ?ge4(+!釕Sm块r}>BoGںA}ѓЭͬhʰiNi`Z7/аUӦ|ϸh `IL:".JxlBwۨomssB >u^Xۘ]*oq5DlIӠy ų?y9ڗTNhkay?$7O ݝL*t)W1.V{FΨm$zj'[U:?O=XQoaC~ u ~V^B&%=hs>;5r[?Φw0T»et;F])m;ؼM}^zǟgxv0:;87ʹ? kGIrݠ#O1bh"v}/.xWȭ)xi+vk]dz/3wvd>Gҿϰq[ %`}hlcgrkms! ϕ#U 8{{[/pL5ङ9)CL%\ste st#se8sɰVzVȊ߀772ɧqzz@A#< iӧk?|/Fr59nb"?L@^E8()r0xr ?q!+:ǰ ēt#-8<]<^sr&,={=T JUe$#qI,hqhK1uL|WIеhmbOaw@ pdN#hm?K8pOUk3\z Qw;Z'=0W,VT!s'} .yY~9.A_'SUzO]daIEQ Kú~Zgs`0rX%˝+lo}³4Dub&.c;(5djS'~y{.aOVO ڡ=46b&$lXF.SXG8v* C4,>3$ vIT䭽g|[{![)D0aݦpMO$nၧ}c疁=DU'wOJqv9*ӌYwrq!݂ǔ:΢^~W9Y5mccͼ 9 .(Z<1obN.Y 6"c+:s#]ε,+ܦ~ή`D7Aa4P]h| s_S\^o`rg6a̬ʂP IV\, kzFB:𰘁8b`.v%;sk_)(2s#Jt{sHWRu)`!= +QaybA;y63Q @[5G :iF#\s{Nat{o ăϲ!I4-8˧2sBh;U.;›~d΢) zMݬ)ɜَ$Δ9h_nngESG=ftNZL-_^9ؐ[.Y̥H3FE]+@KTne2.:U̖Ȣ¡?xg=,1;hڀ '3(޼ua0To_-%<~ CVGBQpFr(^{͊R8;7^1s\^~+feL8t B9̕/ԃrOw#>B"X_1>bЈꭍ@wvsS% t Nb1/_;6#Y\no<ocC--,/{ο%.)fa[rOqT`[vc%>;:bl>kxm5g%D"\f㦂y3=a@ZdRtSc%N 3&nvͶ}xQvsJMw3)+*£>Ør3?F@J3,l17/H3B|>sTG~A*8 WAy}ư# `qGWtWu L `#kzp<5V|BlBy0/e7c 81SBOy-d|Hp>ebUH7}wjFϨ4\3?͢8N y¹Ar nꉊ!IK!SzM2]id͓Aж[hIn?dH:]t#>H6ɂۮìw1tڭw~S*!itlD{zIm)Fͅ_ iv3gϒji`)̸Ʊ!}EFO QwvKTPnQ>'EGmҔSB%#?D0\<+o5eL< Z9m,wW?~{sA`(m8e`\ iz| H3Cn~C|We&T=p!ȐW?]+;$´4+q+ݏs6k_A MBCl5θgr99_N7nt9jr%N7}=ۭGM̞ wg|D:t=:RiZ/˸Ư}Iu8zRiRu8'I&q4$F}SOb{kÃwNCCnySY,F|kށ<"NF7ѽ Ota=0>–˝.sf.k ,addfUJw4Y)3pagPwmczztMw|ݼrl+/d~$^v綍YQPMh^ˀ>fd,[])Y?XsasȻpW9e}Cܴ<43f'[d= Oc3sB%ݰuU@ah# SÆUu蕬0:z<|6_Hs^=K!CgFUJCS|Xf ]\W;][X_P{^KB0wvs}8_ձq03b_S(̜G_l}_# WV ſ Վs҂ϴqՌ:ɲl %zaG3Q)fʷŢ] #Osgr<W IDAT]Մ:.t/TMϧx{3 BZg֗Fgas̩FƟ3.{#ϽF}x܍X5X^Iu+t>y:џcU6N.,4EK9^utf>edL]Vƪdn+y&e3f^߮ ܲӓ6p7joy5i>chm&ٸ[ذ/"z5ph#n-1R =-?eA&C};á{򯧸qx2hٜ6$ Uüi~(7?MtV(zf~WKOmƒ]<>dp@<󆠘7{lW'MM1↘IXo= 9Wp3 ذ ض6F9)c8roIC:,7êDMsUܳzXWh1Z8qcS0cOXC:)ƝȈ+Dv5A§6=⨞ a ~Vgؐ[-qqm6  qC$( F&MwĄO"X?)vT!nLhd9q[1ie=WAn\ TO643Pm0^'3]=#J*cfm^^YVun(&Wx%{,A3*чY7y 691OK&+\ ? $t57'r=ۻ3FN>ySKDJ%<Ǘ ~_Ko0 W.6(z\w/_fD~qg{Kk:ΰ#}<[xϞHke&9}~v*ͿpǓ&sҁ6Jn㽼h.;G_'|&OogeM/ a2xs3+Ryc3)c8k~l&w}|:0@K#8jn~_8v.<6r0ԯb\iW/7qs٦pD 0}\syiotzkg%NHlXcB.Ge!>bYzg~5. gƯgkp%SFqu?[?+|)]| =dlFn|<<@{3zﳭ>ņ{~dii N?.I6Zk=}|<SFO05$=[B.f1-%Ct,G3b"X>>wWW@x)?[\(`mCzb*c= S\|c3}y@N~Soj~SޕQlm>[3sQ\ӃI`/əח UŠgR'$9[+|ތ>ͷ"1;]!lck79~.u!%`w/y2}E'p'I=Ϩ_C9qښX QB nh轂6f}-#sn?}pb(O୾ ,a~ ƶG?[h:;@jk>6tq80-LޒɮOʛy }:bsdWC9R$z?=5[m7{ VlD:EG;q"}>ekِ޻hoY݊)L+icyȻs/`u2PJƳ fPS |1(Nq϶ȿEi&3<}%7Yȏ s20ƝJ}EUq% ƞN2'p!O]zx3.߽Vux9W;ù?;q1r=v.ڭvᾸ{Yś}imq҈ˈOgP\OwV, s K1]EYӯ~L7q%o hM6xb7ӑsWpL$uMOJ8/ĖGQ|~-;9JNϔѬxeG)w~y7yxyfct;Eђlgc6n~ k?#[򴝺vƜ·H`CZ>[G0bA ˯Gu9X#zLgF0~ؽi3[x1|w*^^ml݉+lsƩ0g2#ȎHmz6mg&dXN9=rUo KTl ߟZX]@(S \%*ץG3?#zaT"}Vٵ*0NX, yt1+:e+Ò#,^T=ѝV:"QY㑑% H\ol %"* "ȀG/^]]*A9Ȅb>(6Xb꧗a43-Fs eUFbt6uT7+EZlX!q d6pq=Y) ¥ߨoNHSXV*uPz}޼Pc2.lrH h4M-*]9ZGkhʑ>Ai߲aDR5@bRH}^y6+5X}R Q(Բ&>~R3aKb )MLVƍsR?-Pk*-Q ˤfG;:^@¾hۧ@i4auF +6(4' wҗ*}var6/o7G46E'me4GƅM4.F+8ȱGp̥( e1תl2e=R$+N+r%@IK=gaTE_T=}7guLRaŮ2 &H§!E2ィ,寝ƨ aY^cP~JPr<uRԵHڂcLx M VvH)̮(԰VBR Uвwva>0$:mY|$m|/rFAdf;pyvMj RMܡ8Ba*i[ NPT &@*S!PF -D9_41Vtu*j0@5)Xl#UC/R*pA{ܩV8І0=M&<")M& Z![¾_UBu,wA P[cT1Ju{yvjީR1gq7Z0<}22L%H_ʚIn9zmyP7uȌm!1C%95G+BAZcU¦i5\`*+XU>bB55[HACɘY<-?MSZSq%d4ycŔKV5)TB:IqK%> &j)+ayu)1$q2N%WUQ늢f1R OI94N+:oE *oSk]aoX1-UIM A<4 =Zy`ZS?uQTLA§Y[ um4 'V1uп6WV4:\Nqo_ޕ@Z'*n N6FƩ02JT/I}e($;VZgkPP)MZ> *8ZϥN TމL0U3 6Le+.F3z8*[# d@>n8@hT'P)Ugo톺ؾa &-]SZ+zbS U`҆Il&V[_%L$T$"0Q-/ zң{lnu{KX~11!>/8V',!gz9PTWH~<(ƱlH%&ʛAԾS&Y  Eҟ4O2&z Zh'xt ~l"GKoF\txJ-WYՏ'E1$RQ7l`} q~ߊ7&lk"Mj-9qg8\ZH)!@X%ےG5"x3|2Q R<Wjz5ӿIE#퇬D}4wFZ!B/6V]g<⳱AetIrZ:Y:>}%I&}x|_Y%n;YCEze2hb&ssLY(U"^D{=Bo d|oj}vt@24')di-%YƧIM}:$Fh¤g%UZLwW6H]7p!zJVPʿA1LuG@ԉb xQa+$H,&R4SZ4\\YUKp8\kF*4 gLM uȌEL+:'CKn>,^i![|V~Ϲh Ҝj),k f}qPm5PSU1&#HO>\#&i|ĵD6yPSJ%W)"2%aE==<%}"秉/J31"⓫7F5欋LhG" + 4zÄ QwM8H4y󚣥TYի;.ZS>5㥰m7Z X"qBq|*tiK+ [g,I U7鶪2XOGЂa:ǏDwiCA}5T 5]Ag|*R|PςzC l%>[,Ҏ/piot5p9شYEՌ{^1\\ "'y}=iv_ P^u(#0דJ#3E$AQl5%+Yӓ~W$H!+pt0ͤ&6s/pZF8x$H2F?*{1'ۭe`Wז볤W~̦ʃCMv(/"0&’<s2?6EsKr!PhIV!e0 DJNP[T-ٓ\xg )P ]ѿY ;]O<4+]T lt枋/@!paۨ&Xiz['~k~! A( IDAT0M\ iʸ$ՈۯG׋ aE϶@ PJA5n~b4h+yROGuE:!TO+B)02M]X7lyLj(:$n6?Y}&ʡewdkwG‘%Hq%i%c;8UO _6m/4ꂓJE E8HWFA_ Dn,d-i{{._KUW<>╟Ϡ%a.uczcDǼkW(G(@Vsnu(R)+,0T{@Jz ,u0^ت56eTy[2ϵZn%0+#fJ]-T!V>c]K_?@Mvƪ]v 3oR{$Z!AیXl>ZP@$jeFTb|+mk8jg.Ұs`R'x$XJr HC2إ5q ףr؃U3bO['TIlI<R^J-? e>M@X2mKtcBjC%k|5Q8*rPZt7~9 t,{IaŚPᤚZ]Ԧ0kGL$Ybw?+|dlzK -,GEԼpZ ʧDk" JtHzJjI_m^$|)ͼ6RV#6rP{ǣT{hT;#y[H،W{̀jY:BɬH|ȾNء#G4W:/Vlb=="S[|jDNk)OfD=ȇlmúoE]6 #ƬZcѢ1ڊz2Yrv$<mni?JaU4=XĢ q1Ȫ\7{?/w#3)ɤԊ2dPk6Ty+g'lEVqMcdQymPj늞kiː%L೘`vU2kii!L"Jaݕ<rk^[x-Hl^UDC,J1׀R2j)5+nqd>9*J1 y]7c^v|?*/zKz_~AO6]Yv+roz&Z!@Xũ)p27.#v,R% 7zo>FgG]4EA,29BOfIDf,t+:$gG+W 7{=MvYg9g/GDaќWڃYsctuφQZrPWۮ)  O|JӻHG~h+ q.TBw|NXf/᳃k6{[  O, kRk?,Cjdu|*](Kpw|XqJza~-D_#H%施چ [i3] J2bxADve ]][ ;4wUs'2 HAae'Բf%WsW). H詊B 3Zf+Hh WXO·scfَ]\i7(`-԰lHX* |C|K!`Yi0@ ZBN?3[HP}7|v_+>0uˁ=,fP;yޡ15@PWf;uQdEIKRuAd%7B3+l`0dh@S Q5#[NǮ^\WupuPVf$ E۰|.GU}|QDL9bL~zyIG%ȆMOF6Hƿ E>]bfL\𷦒BcxDKޠ=p@dăjʆ:qu2㛽f֮!iuJkPhrD%Br17~Vs3=%4rSX# ER \}Nd.|E-ذ.DTիap@D$h0q ?iRhj0JK1oCDŽJ#rG͗TQF?eEKJos]ƌ哚w]ógR y 1c%l[YNM(MW;D6.{DץwnRPFZ;zuRa^ݛfфed9a2!tscml[ Hd%"JV^9I"/NT]M.&*Вcn9mť -:':ݬ\FHQ/I}DMVRŧ~lʧB,ώ9Г2 —뀂ق˒$]BɘM2ꖑ"/LX7W ؞~#ЧHOp^[؜`0X &=A&o iJ.Qk4PR5fzEi.y;mPz|S M Z )BץgrAd|qR+P{3j`hW"ȧFA1+p7~OQtf䬌&PJ_X`yvcqBw$01]F;%g[{ER{mw^Cלdž₏2]͊S*2R9Te# +IJaC`~& wU-ɘ\3 .|7t5iemrZVkj/iG9qޥ3#p!ҳG.ufk2o{\#Pza0ւk~/a7 ySL׬i38~3sPdOM滍j%TcОSA6?7+~yiK.OU{HW*Ȥ[![yXo!MJ1R) ),53}](,s˰gȤqankŦYSmr\Y!3jlDZ&ʐlE׾zS!pR|i0w.xg;ys_R+jf{)P@& YO0Ӝ):쵦?Edf6sؕ\DY0S[| j+BI[Bk~J]8d.߷KB6Zݛk^{g334: K=o$n=" ?m`T-hqwU´r|{2cu~}̵=Y`%lauڸd0ٓ$ c)ptª.M߰i`B SL j@^00ܢQ#SZ=$g\MqZl|=܌ML2 R*iZzK˱<얪j7v3뿥3|4fMY#o52Rb^З$| )Zl/&S/oҰ51ͯY[\ܾGB'2;=a!u0նTCz[&Mahy[?~@&(EsP KBдkvlMl2 um EBQ2Oh"ATҍ\BJOJVBR֔Z)ωTaFW֜Yaﴤ P5fxtOωܕU[CyDq{v귽lAь.,#&_ϒ~Y1L,P057-2؃0y%aӦepYl"jfWϤLdٶJ*+G05` k>2i #|qտB0TeiE eTT#4&TE c{C 镗=!f!Ͱ-I'Ws ~ UYw wtv'[}PvL`|sM|Eޕ~` XJ "XL.i%bésk;I7+@_?î~;S1m\K53 8-}R =t]FBMu@jXڨpﹴZB\ )u2 4U>b%AkW>Ϡj' sr8SʥK5{.>nk-,ha>[ ?9?M+jΚ'zoF+fWnRT~o/#))7Z1's/셚,,: ^oMOp/,֏ь?lMУzל%bȌA~ Ӻ>E@XmR<7$BI@{g%QOdU_R[,!cp3f3Xsc̹; 0k <`e2>$YlY-[}_udYGwUuUVTIYq|;zMkڶ?ZS3~VKi IZۨ43jfO/AGuixvm4OO\C2}1=@KD"|&ʵ1AU..Z_Z*fDPA]DyX’WQ䦢kwTKKGO 4sQI%q ,ʃ㯛χV L̾ -Re ۀRt<s[޵acD=VgheD(~Op ,LXE=3- ֗]=Sb)J(Zh>jfӸS8@ @\tO, ەsh*̆q܉߰#RD dJNM*% 2kBi Cx FZ[C0\ يȑv P "6 )|xhy ,x}%]yE8m><P (RjrwH>#zL2Vkh :ֺV~RoBUS6d,eq ΣR/IS&̊EH2\]caUePǛ{ƶ%э j’RC.\-s%,j))XC70'c'`믡z3FiѸiKtR=ƞhq+jSj3Ҡdv67r.E9*zVSO֬@,)ycVyMj0 Ueyx9| mGy+6FC9jQh@wl-رEmӢTFFJtqIuUt!XS4 wCbȊ;` D+MRxԶEXVL"ِi;޴`L,C3`K͞&,\@[.k28xuġΎ%zeg@\:fav-MzZM"e=7m+X4NMM1hʹzSmsYԴ9le3ši/zMO=,ۃ,ZKUn8K:={'ez$;,ǝI~˞EvL٢er7x XX5M-I>҇-jC䤎m:eAZBjyTR5V&z[WKUi!Դ:,oojlM[q'H;q` Я,.{%Ҋ,$/ӄ gl" zPE[YX`.!Au۳n ZNOb aV=p~p!\B2OX>kI6r=NZ,ͰZE XX'U]l҆45ZylVM/m- X Y~MV1G{jRi KA$UZG-΂y4AV]\8e{&-]\5)YZj3sBJ.SN6 %|ovt9[,g}ԛ'Ӑl5`5EK$"=jfwm#SfB Z[UeNYhcXaI&L+xa=ȵ5q KGo4j Wj-4q $ǫ{:h9>IʵB%6q K㹠{]i7)YtJe-,fAٲˇUWmUf*e4kF׬-ΒTS):."˵k͚ φZ\2܆ԥ/Bd k.MO%zVL^Ğlql[sԚZhdнV*l[-ouz.K ،aYMBFaO;iuզS4w3eDf/gH&귄Y'eN%J XG\B.FHi_Iy#e.d K(b(1KA\B,m, o[J>lA>1la:{ 4'I_UQo^xm?uU*Q­MB),n_[*%ZK?W55+Bȣ9` ,,!qZPVۖKZP\to0RJ.QP7aiGy'Kh"-2&аg\L[8OW*88[9Jc#C5N'/1]YK`Z|o [y&Ufq<ֽ\2n+8<;מȸvv|w7'/gdmC5f?rO ɺ|y{0 [7UL7p6lg𮻸hXO:ph^ڞDm?p qpoe<7G0>|?O"rᮣ_Σ_f"^灂^;ΥrӋYِd2.n !Xl .ă{/>ZEWm%*P+[nocsG[ <-7{,Rt^qP=gdžyݭL%5>՜6aivc-7κ!>HEW~|Y љZTߕo-k-"@+cŖkO쟬^{U5 owU犿g+dʔeVP-ba%Y$ {H-Uq_sɺE ?/\K|YUٲe5yg8wk*u"pE]=z֋{{*u"t;駯;r 2=P32xokz7$2X,ݼI 8˃fw:R0u:O\?3bGl*OWMG]|'>G|v/|=Oo7y֯^>ufP?~7}] Ls- DG~s+-lgs YְI);9M <}O_vDž>s/i ??3x"䏭Ϻ1:d`*뷲wWwa1WlCK?Bg'/tI;Og?۾/~?޾??:ov$.aciҝ=ە7WT ;HXm۸r.j> ?rk)L;8uc9r]7>sρ}~gf??xo*R##?};?tܱW̕psYQf͋y,Kp[$ y 6m?e:K.,7?yqm/zQenN?} 8L.tw;8Pvhho@_#Ko+^S?x] /'8x+6\O];t;;aG'b)K9m$.U-pTRpgq#@O*OGGs lT=qOWˍeg.6}yW|啗]sk߰u`@JG/%˲c`-A+BԪ1ct]9Lך77o+>^P׎}kGn:8#]O~c-]AOu߉i Kh| ׳r%=:8U6[MpEY۶1:ʱc\5D!n_|wG3Αq:x}.=A}G8ws8N.kw6;x[ң<}%?POӵ2`Y#0ah C3L0c"x,c&Ld2fS+!uSydQˉy;gr!z)%//xy`ٕ%Kc F/b8žq®QFΖ88y)'/ᔥӗy <~GB=K;A8tILI1Vwӓf4ws)NҜ}g0ۇnq`z(:Vlɽl^el^Y+['5i+Yp/oibY'/ce7{8a1yrQtsCgzc%ލ,D +shUo BywKb'/lZټӗQ;F4cYfrd4K&Ϣ43.i<S0eɳ{ΫԜ[%(wᑡ-/ o}ܰ7}՜ wa KZBaeYe#!08Cx١bK8#urQd Dcšnt0Ӥ]s gs0 0!"%&rtSK:@r/4^wsjҡx p{? H=Oq,iq[qa ޵R$q!n9Гky t84ɉbql9!N>~ǭ g94ɳWsn*MBhTz(fxapr^s2?,k<ˍ{.E NJT.:=}f7{l B=Jyi\!zhN?8kon]㑂  eqo8* deOyqe322@|{l.B3YśN3yRy cOFAOOǎ[} xZANTvAW?                                         09'\uIENDB`pioneers-14.1/client/gtk/data/trade.svg0000644000175000017500000000414311652323243015003 00000000000000 image/svg+xml pioneers-14.1/client/gtk/data/brick.png0000644000175000017500000000031110434245071014753 00000000000000PNG  IHDRabKGD_ pHYs  tIME 41FOVIDAT8c`h>VC #0A1R/0Q= Μ9W ~F4ylN tIdVd-W2IENDB`pioneers-14.1/client/gtk/data/grain.png0000644000175000017500000000032610434245071014767 00000000000000PNG  IHDRabKGDH pHYs  tIME FޯcIDAT8œ1 )3NFK8 C3r#8.j>_K=+".(B..#^^ CxN߽rn-IENDB`pioneers-14.1/client/gtk/data/ore.png0000644000175000017500000000035510434245071014456 00000000000000PNG  IHDRabKGDAT pHYs  tIME /1NKzIDAT8˭K DvALIAEYRkL! C zwX2| ^bsz ŶX&&ⶇw#L< [z1'PF_6dun7IENDB`pioneers-14.1/client/gtk/data/wool.png0000644000175000017500000000040010434245071014640 00000000000000PNG  IHDRabKGD pHYs  tIME(oIDAT8SA kǾQW< ~aND R,M !]7ܥJZ:IENDB`pioneers-14.1/client/gtk/data/style-human.png0000644000175000017500000000061710650446620016143 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME'9IDATx홋 C @OALiؚJRTEˇ0E #76' .l~a3 ׉ED(D9U)(Л)"=]M@ků^Cp)DkS^t4d "DxoLɅ'\gV:,b{0~j+8:oҀ\! 9i~B @Ƕ򛿆Гe~'zѿnuh9{#JM} H_GHo]DIENDB`pioneers-14.1/client/gtk/data/style-human-1.png0000644000175000017500000000041410650446620016274 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME(%Z IDATx n= bAzΣPybm ,OW??3p"x">|5͌V@mKەq·)a0|k0Tj{0릭c)~#QCu~.Th?I=-F'&IENDB`pioneers-14.1/client/gtk/data/style-human-2.png0000644000175000017500000000053610650446620016302 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME(8x6IDATx D]SgӪ $rΣn"`b4`N oү; o^aNcMP q&VJe߿ 堔Lj6/cm_k|ցGE=/oay\T@rd/kPa򯂐N3,8= 0-҃SXF'd h]]mlc)Q `N7,j8IENDB`pioneers-14.1/client/gtk/data/style-human-3.png0000644000175000017500000000044710650446620016304 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME) 73ñIDATx0P.Lј@[{Β\fxmrZm庢ןhu=V[-gN.>W|mv^.X| Zchݬ@^6O.u|,B5ky tQ8CBvG;:;<IENDB`pioneers-14.1/client/gtk/data/style-human-4.png0000644000175000017500000000034610650446620016303 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME):fsIDATx @;V-@ߣ0Ybm1Xn?ƌn$-!z+ahs5[`z~؀w /kBqIENDB`pioneers-14.1/client/gtk/data/style-human-5.png0000644000175000017500000000030410650446620016276 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME*QIDATx @A_٦y̶҇ Ns/   8=}_t!!s 3IENDB`pioneers-14.1/client/gtk/data/style-human-6.png0000644000175000017500000000041210650446620016277 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME*DIDATx 0 F:H5"mR1rw-?勅r>{-a^Wg\~̒Z_wv L@M )8ւgr9M aGjp+hIU̟IENDB`pioneers-14.1/client/gtk/data/style-human-7.png0000644000175000017500000000057310650446620016310 00000000000000PNG  IHDR@@iqbKGDC pHYs  tIME/.EIDATxQ DC_~t#wuAL }v,67ߤò;БxOޣ´j%j$ag(sdW"n?"%XV 0! N?8/{E ~OozTzl> H7;x |J_ck}%j0~@+k- m6?57Œצk/ʗH-F7IENDB`pioneers-14.1/client/gtk/data/style-ai.png0000644000175000017500000001217310650446620015424 00000000000000PNG  IHDR@@iqbKGD pHYs  ~tIME:ƅIDATxYdWZK{֚UUv{kqwza$ /,C3 bAHhZ-pn]N׾r.[h\.gGJ݌+E{1=3 0W|>ÏכZ0-6Jo{{>5xB=hGfg[)jE㺸K:u2b^!m"IRʙå?,,`1ڵzݭ5Z*M̳쫾Eq\z8!-*՛ىNўj{m:.QeA? pm ݭM._й{yig/'h6c\}^wf8m4 u}131=m5juaۖZ1,(,MQJa6mt&HF j؎C$X1f8 \7\;l6'_x'OvHK $24EjeYfoߥѠB)(mJSJ6 J*F0Źi/j $kXV]׿tDTs-!BkRRiT䥤(%J*J))__Am[Hp}q@$@ALa+.c[XT[`1ϲ%@W~jFiMVZ:QaFōv XNy<㏫0V8 )4EQHrlێ]/g˓}uMcc;@YJ-2~| s=i;>B%=qm{`"`! 7;V) @iUUgPA~j=qx)O'++,ʷY vhٙyZ.] lL!<˪Uyb5G8&kLNIȪe!mYE6%%i1`OU G=ܜn[WdyVo`҆\j(UJU H%)BikPp1*I%) JgƘ3x/0{@јhjFnZͦ ָa[6JJ*eYfT$YNeI$YQUTRjʲ(i1i'pYyȲjmo0 h0[ϝS]²\" ͈C Sh]z@Jiz{8dFi YJq@%,Ƙ0Zo2|?y#y8f5Qqs] Ͷ-\ql'nu(cP`4ضmC*%,i%h7ܸv/n\/i[l۞cO=p@#",bobJJwvQ}YeYXfƜaTE*˷u޵P 5V% Rc$^^9^9+1_O~ɖ%nKyUq]<# j8q]w7ߙn|uC)PJUq/e_?|8Q}qmYHR<ݢ(4M-qC._!`4a8eYQ9eY"5^e˲] ( 83t0$4E`0zW '*S|O<!eQTqMN)E6csb˶)2,EAip4b42 Ɲi.;Uq<Ӄ ~w] ^]U=O+="W xѣ ~ގuW.^N4MK&c$%M$!!s,#2je0nUj@mYQD^D#ˠYrcc?㗨5e4 ,ǵy4j5z AqL٬jQPy)ѐ~6iH,HF#<'O34y9EQ9Ha:h0,6R{+ q񡿽M6,Jaռ K$Y{C☉6,r>/jsSZ#K T$Ew^]Ν(Yy^KQ.l6f5wux~iY7g:.<ߧ>u258BlBX`͕uxrJ9[[\pav~(F Uˠ1mlٙJ)z }<c&BZVuGk{h=6>i̎56>Zk1 B$a}c[7oq54ebC7JwĪu˲afvGNJRZR=/ (z[G߫O+PcsU^;sM;}~ueY$ƒXaT}wH=jx1|Jڥx;AJc[,믽h0$ Cu&VKKf.!E&"N> F22dEޡ.!eFStzϝCJU>_eљp5R_Oܽ}@EEc AVBؖ~^IeYLF<Mv*/^d]>繌l$ ш(@~@Z33lZW˲VcOyj`L%ye!*ZØoy_}[]:ˏ<癝c Ο{V<V~c@r߳^^VӟzӋ @F#K)%48-B`6Fk!RJ hШ 2>JjjoY֭[k|u,,Kz[[uؠqQ,#s\%"f p0 /<ԣOѥ'O s4ul}"!,TJF 9>Zi I)~y>FJ)qơ", 0ڐ)csp=DQ ضd`0ưEk J]Y߿~B~qС8q/~+O,/y *w],"e,Ŷm8R~:ueI^}pǕ!O,BYLu:x}4ӼLNN>yn!M%׹|?ϼ/2T&꾢a8U.K,&s$5zZkץ 21E'c4e8.S33x_Uz^ Xn"3 ʥKܺy/Mk}yV~kYϭ~ƥg]*mZVFI^'Bm.Qx2JjBh8 Z01@eRR)soKfaav M>kb0خ,8 8&%|/_nlVɻN=wƍ VGǛ/4[-3OO<z /zAyNY01 plQZ˗hOLp)榦q,-n&K*sa[k\r,sgr7^e|d,8NѤQoeYb8ie#duuK/r{mO<ӝ(fףQ%eqy]g3EY\p _LΞ=c=L/6[Qt> Q86qqי_\}I`8$OSč:Yޢ;\XY<0ʕ+\7WV.K AVnwb0Nwt2J^׮qʕ~2vQ>jcg|͛7W/_>R]17?ymh4no ˇ#וH'CgNIENDB`pioneers-14.1/client/gtk/data/pioneers.png0000644000175000017500000000437411760646030015525 00000000000000PNG  IHDR00WbKGDIDATh{P?fY䍀 j5 Ĩ3c4QZ614ѪC 5$> ,}vDaw{9߽{υ$!28ԗ@E-Lb/dZ# & (?Zp7LM ~0vn7 nֹUA"HPzQ="[3{ Sr %wmyGIz6$NAfNDFBhʰqj6H>ݻh LXPlc.يd-8$ĈmRIØ>:1(R/Djx0 tݸor 2•Ң:;\t7Fu#*w5y37aɐٽ{b(dۑJˌ9HĘU#qgL4G蝚̂ys8mc0[%wh1Q_JeK@@Jt^m=XJ̡Z}"~ =`[w1%3H$|2mZ Tl xM_$DPhҨZahsbSl^6 ge~#NlWLkb]CC2| Pt9*BtZL3ES0h$\(.]C2f%|!u%̝Ͷ^ S"d8_zr43F1|VZ=yz*;w޹@ վZMF\'6Fx -'wyyoy'GHne5Fu9xrAXFtkF3:q#Ӂڟ744#gH<\ef5\;YU4öPR(1<›PPAP6~ as\).DN>3؉:.춈֫uhdzг [IQ5IENDB`pioneers-14.1/client/gtk/data/pioneers.svg0000644000175000017500000000525110344761033015531 00000000000000 849 pioneers-14.1/client/gtk/data/pioneers.rc0000644000175000017500000000006210462167431015334 000000000000001 ICON DISCARDABLE "client/gtk/data/pioneers.ico" pioneers-14.1/client/gtk/data/pioneers.ico0000644000175000017500000001635611760646031015517 00000000000000006 h(0` AhZy E}VfwsEQ_:YQxo z?|Cdo;s  ]4z+$d2 `qH5aJ  2" (\u (z(Mv ;jj~-?W_ۄIlo,|PG\:-lͿLc_u\GQjvekLpo,?pƿ[jreUMjiOUĿHj7׻@U5%ڑHj^КU Hj"ǻU//3yHj UE3ǰTӿHj!*"ǺUKٷ VHj / UHTǹHju+ *7U%Ǐ0Hj<Ǎ)UTVHj)xs(U .yHjssUJ55EHjUHj={ʿIbl$њvkKjkhu8[P&FʿKnDzW6;]ƿjh4N`qm8[jd'Ft!AS+ǩ@ wTC}}CǓ'g22gǟB9C}CئxCCdt9'YT dSY BR4a#fR>̾~]XZ#1f⁕??( @! hzoAuTjo6?{0ILY" >a%FoGKYh:DP ~zdCqu$t1>w5h*-+IVq!?$7"6w Yi{v%+T(/x]jdvx|{}fxqx}{ys)R}Aqo2b "c_]8|M@{L{hZy?{O  5!!@aPt?=1` ^n`q38pFDm#7+25P'T{%#!+km) ( cCA~@~"gy1M|+S};sERyN\,L7 + ?aGu:qew u}=x{}k~A:/`?K0pQ`\9r4>y3=k(NxxfxZj| v bu(SrV*@&Ls}~|1K|ewgt=bj&|4Td |?T/NGu@w62GLq=`bڳj1%0q=t竫!q74Si$&[Jc'+w]| (WBfTOUY;M@l5ư CsIڷ9xsFspڼs/0s)-xsNHs2h Ԛ׺3 ??( 4Qj})P{}>yAL(Nwh{}C}1Mdut&Jr^b#)}>^-X?^W W&#,;v!.Wfx}{o2bI][-YUOK*P{A9 xFxA~@~|B{@'6&Jq*ce*T%$;AQ:Bw_HEQ "/Gb$Em6iYEz ~Nj;sfVFd2a:q3E.,$gMR- g+,idDD]<;kb$\\_.6DDDDDTE\\\\\\+)D !`D\OI\')D^49D\j ^P\')DL3QD\fZS\'DD8GDDeE\\0W\\*C DD5@:Y"\\#ah%> 2(/U=B2HHAMcH^^cHN Kc17X&F?[JVlpioneers-14.1/client/gtk/data/pioneers.48x48_apps.png0000644000175000017500000000437411760646032017350 00000000000000PNG  IHDR00WbKGDIDATh{P?fY䍀 j5 Ĩ3c4QZ614ѪC 5$> ,}vDaw{9߽{υ$!28ԗ@E-Lb/dZ# & (?Zp7LM ~0vn7 nֹUA"HPzQ="[3{ Sr %wmyGIz6$NAfNDFBhʰqj6H>ݻh LXPlc.يd-8$ĈmRIØ>:1(R/Djx0 tݸor 2•Ң:;\t7Fu#*w5y37aɐٽ{b(dۑJˌ9HĘU#qgL4G蝚̂ys8mc0[%wh1Q_JeK@@Jt^m=XJ̡Z}"~ =`[w1%3H$|2mZ Tl xM_$DPhҨZahsbSl^6 ge~#NlWLkb]CC2| Pt9*BtZL3ES0h$\(.]C2f%|!u%̝Ͷ^ S"d8_zr43F1|VZ=yz*;w޹@ վZMF\'6Fx -'wyyoy'GHne5Fu9xrAXFtkF3:q#Ӂڟ744#gH<\ef5\;YU4öPR(1<›PPAP6~ as\).DN>3؉:.춈֫uhdzг [IQ5IENDB`pioneers-14.1/client/gtk/Makefile.am0000644000175000017500000000617311712461037014314 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA bin_PROGRAMS += pioneers desktop_in_files += client/gtk/pioneers.desktop.in # if anyone knows a cleaner way to do this, be my guest. Automake screamed # at me when I tried to do it more directly. if ADMIN_GTK_SUPPORT ADMIN_GTK = -DADMIN_GTK ADMIN_GTK_FILES_ACTIVE = client/gtk/admin-gtk.c ADMIN_GTK_FILES_INACTIVE = else ADMIN_GTK = ADMIN_GTK_FILES_ACTIVE = ADMIN_GTK_FILES_INACTIVE = client/gtk/admin-gtk.c endif pioneers_CPPFLAGS = -I$(top_srcdir)/client -I$(top_srcdir)/client/common $(LIBNOTIFY_CFLAGS) $(gtk_cflags) $(ADMIN_GTK) $(avahi_cflags) EXTRA_pioneers_SOURCES = $(ADMIN_GTK_FILES_INACTIVE) pioneers_SOURCES = \ $(ADMIN_GTK_FILES_ACTIVE) \ client/callback.h \ client/gtk/audio.h \ client/gtk/avahi.h \ client/gtk/avahi-browser.h \ client/gtk/frontend.h \ client/gtk/gui.h \ client/gtk/histogram.h \ client/gtk/audio.c \ client/gtk/avahi.c \ client/gtk/avahi-browser.c \ client/gtk/callbacks.c \ client/gtk/chat.c \ client/gtk/connect.c \ client/gtk/develop.c \ client/gtk/discard.c \ client/gtk/frontend.c \ client/gtk/gameover.c \ client/gtk/gold.c \ client/gtk/gui.c \ client/gtk/histogram.c \ client/gtk/identity.c \ client/gtk/interface.c \ client/gtk/legend.c \ client/gtk/monopoly.c \ client/gtk/name.c \ client/gtk/notification.c \ client/gtk/notification.h \ client/gtk/offline.c \ client/gtk/plenty.c \ client/gtk/player.c \ client/gtk/quote.c \ client/gtk/quote-view.c \ client/gtk/quote-view.h \ client/gtk/resource.c \ client/gtk/resource-view.gob \ client/gtk/resource-view.gob.stamp \ client/gtk/resource-view.c \ client/gtk/resource-view.h \ client/gtk/resource-view-private.h \ client/gtk/resource-table.c \ client/gtk/resource-table.h \ client/gtk/settingscreen.c \ client/gtk/state.c \ client/gtk/trade.c pioneers_LDADD = libpioneersclient.a $(gtk_libs) $(avahi_libs) $(LIBNOTIFY_LIBS) # Include the data here, not at the top, # it can add extra resources to the executable include client/gtk/data/Makefile.am BUILT_SOURCES += \ client/gtk/resource-view.gob.stamp \ client/gtk/resource-view.c \ client/gtk/resource-view.h \ client/gtk/resource-view-private.h MAINTAINERCLEANFILES += \ client/gtk/resource-view.gob.stamp \ client/gtk/resource-view.c \ client/gtk/resource-view.h \ client/gtk/resource-view-private.h pioneers-14.1/client/gtk/admin-gtk.c0000644000175000017500000002724711256060305014300 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file has not been maintained for a long time */ #include #include #include #include #include "driver.h" #include "game.h" #include "cards.h" #include "map.h" #include "network.h" #include "log.h" #include "buildrec.h" #include "common_gtk.h" static GtkWidget *game_combo; /* select game type */ static GtkWidget *terrain_toggle; /* random terrain Yes/No */ static GtkWidget *victory_spin; /* victory point target */ static GtkWidget *players_spin; /* number of players */ static GtkWidget *register_toggle; /* register with meta server? */ static GtkWidget *port_spin; /* server port */ static GtkWidget *clist; /* currently connected players */ static Session *_admin_session = 0; /* this really needs to be eliminated from here */ static gchar *server_port = "5556"; static gint server_port_int = 5556; /* network event handler, just like the one in meta.c, state.c, etc. */ void admin_net_event(NetEvent event, Session * admin_session, gchar * line) { #ifdef PRINT_INFO g_print ("admin_event: event = %#x, admin_session = %p, line = %s\n", event, admin_session, line); #endif switch (event) { case NET_READ: /* there is data to be read */ #ifdef PRINT_INFO g_print("admin_event: NET_READ: line = '%s'\n", line); #endif break; case NET_CONNECT: /* connect() succeeded */ #ifdef PRINT_INFO g_print("admin_event: NET_CONNECT\n"); #endif break; case NET_CONNECT_FAIL: /* connect() failed */ #ifdef PRINT_INFO g_print ("admin_event: NET_CONNECT_FAIL (falling through to NET_CLOSE...)\n"); #endif /* fall through to NET_CLOSE */ case NET_CLOSE: /* connection has been closed */ #ifdef PRINT_INFO g_print("admin_event: NET_CLOSE\n"); #endif net_free(&admin_session); break; default: } } static void admin_open_session(void) { _admin_session = net_new(admin_net_event, NULL); _admin_session->user_data = _admin_session; /* TODO: tie the connect dialog to this */ net_connect(_admin_session, "localhost", 5555); } static void admin_close_session(void) { if (_admin_session) { net_close(_admin_session); _admin_session = 0; } } #define ADMIN_BUFSIZE 4096 #define ADMIN_PREFIX_LEN 6 static void admin_write(gchar * fmt, ...) { char buff[ADMIN_BUFSIZE]; va_list ap; strncpy(buff, "admin ", ADMIN_PREFIX_LEN); if (!_admin_session) { admin_open_session(); } va_start(ap, fmt); g_vsnprintf(&buff[ADMIN_PREFIX_LEN], ADMIN_BUFSIZE - ADMIN_PREFIX_LEN, fmt, ap); va_end(ap); net_write(_admin_session, buff); } static void port_spin_changed_cb(GtkWidget * widget, gpointer user_data) { gint server_port_int = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); snprintf(server_port, sizeof(server_port), "%d", server_port_int); admin_write("set-port %s\n", server_port); } static void register_toggle_cb(GtkToggleButton * toggle, gpointer user_data) { GtkWidget *label = GTK_BIN(toggle)->child; gint register_server = gtk_toggle_button_get_active(toggle); gtk_label_set_text(GTK_LABEL(label), register_server ? _("Yes") : _("No")); admin_write("set-register-server %d\n", register_server); } static void players_spin_changed_cb(GtkWidget * widget, gpointer user_data) { admin_write("set-num-players %d\n", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON (widget))); } static void victory_spin_changed_cb(GtkWidget * widget, gpointer user_data) { admin_write("set-victory-points %d\n", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON (widget))); } static void game_select_cb(GtkWidget * list, gpointer user_data) { } static void terrain_toggle_cb(GtkToggleButton * toggle, gpointer user_data) { GtkWidget *label = GTK_BIN(toggle)->child; gint random_terrain = gtk_toggle_button_get_active(toggle); gtk_label_set_text(GTK_LABEL(label), random_terrain ? _("Random") : _("Default")); admin_write("set-random-terrain %d\n", random_terrain); } static void start_clicked_cb(GtkWidget * start_btn, gpointer user_data) { admin_write("start-server\n"); } void show_admin_interface() { GtkWidget *admin_if; GtkDialog *dialog; dialog = gtk_dialog_new(); gtk_window_set_title("Administration"); admin_if = build_admin_interface(dialog->vbox); gtk_widget_show_all(dialog); admin_open_session(); } GtkWidget *build_admin_interface(GtkWidget * vbox) { GtkWidget *hbox; GtkWidget *frame; GtkWidget *table; GtkWidget *label; GtkObject *adj; GtkWidget *start_btn; GtkWidget *scroll_win; GtkWidget *message_text; static gchar *titles[2]; if (!vbox) vbox = gtk_vbox_new(FALSE, 0); if (!titles[0]) { titles[0] = _("Name"); titles[1] = _("Location"); } gtk_widget_show(vbox); gtk_container_border_width(GTK_CONTAINER(vbox), 5); hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); frame = gtk_frame_new(_("Server Parameters")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0); table = gtk_table_new(6, 3, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(frame), table); gtk_container_border_width(GTK_CONTAINER(table), 3); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 5); label = gtk_label_new(_("Game Name")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); game_combo = gtk_combo_new(); gtk_editable_set_editable(GTK_EDITABLE (GTK_COMBO(game_combo)->entry), FALSE); gtk_widget_set_usize(game_combo, 100, -1); gtk_signal_connect(GTK_OBJECT(GTK_COMBO(game_combo)->list), "select_child", GTK_SIGNAL_FUNC(game_select_cb), NULL); gtk_widget_show(game_combo); gtk_table_attach(GTK_TABLE(table), game_combo, 1, 3, 0, 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); label = gtk_label_new(_("Map Terrain")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); terrain_toggle = gtk_toggle_button_new_with_label(""); gtk_widget_show(terrain_toggle); gtk_table_attach(GTK_TABLE(table), terrain_toggle, 1, 2, 1, 2, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_signal_connect(GTK_OBJECT(terrain_toggle), "toggled", GTK_SIGNAL_FUNC(terrain_toggle_cb), NULL); label = gtk_label_new(_("Number of Players")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); adj = gtk_adjustment_new(0, 2, MAX_PLAYERS, 1, 1, 0); players_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); gtk_widget_show(players_spin); gtk_table_attach(GTK_TABLE(table), players_spin, 1, 2, 2, 3, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_signal_connect(GTK_OBJECT(players_spin), "changed", GTK_SIGNAL_FUNC(players_spin_changed_cb), NULL); label = gtk_label_new(_("Victory Point Target")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); adj = gtk_adjustment_new(10, 5, 20, 1, 5, 0); victory_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); gtk_widget_show(victory_spin); gtk_table_attach(GTK_TABLE(table), victory_spin, 1, 2, 3, 4, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_signal_connect(GTK_OBJECT(victory_spin), "changed", GTK_SIGNAL_FUNC(victory_spin_changed_cb), NULL); label = gtk_label_new(_("Register Server")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); register_toggle = gtk_toggle_button_new_with_label(_("No")); gtk_widget_show(register_toggle); gtk_table_attach(GTK_TABLE(table), register_toggle, 1, 2, 4, 5, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_signal_connect(GTK_OBJECT(register_toggle), "toggled", GTK_SIGNAL_FUNC(register_toggle_cb), NULL); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(register_toggle), TRUE); /* gtk_toggle_button_toggled(GTK_TOGGLE_BUTTON(register_toggle)); */ label = gtk_label_new("Server Port"); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); adj = gtk_adjustment_new(server_port_int, 1024, 32767, 1, 10, 0); port_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); gtk_widget_show(port_spin); gtk_table_attach(GTK_TABLE(table), port_spin, 1, 2, 5, 6, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_usize(port_spin, 60, -1); gtk_signal_connect(GTK_OBJECT(port_spin), "changed", GTK_SIGNAL_FUNC(port_spin_changed_cb), NULL); start_btn = gtk_button_new_with_label(_("Start Server")); gtk_widget_show(start_btn); gtk_table_attach(GTK_TABLE(table), start_btn, 0, 2, 6, 7, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, 0, 0); gtk_signal_connect(GTK_OBJECT(start_btn), "clicked", GTK_SIGNAL_FUNC(start_clicked_cb), NULL); frame = gtk_frame_new(_("Players Connected")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); gtk_widget_set_usize(frame, 250, -1); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scroll_win); gtk_container_add(GTK_CONTAINER(frame), scroll_win); gtk_container_border_width(GTK_CONTAINER(scroll_win), 3); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); clist = gtk_clist_new_with_titles(2, titles); gtk_widget_show(clist); gtk_container_add(GTK_CONTAINER(scroll_win), clist); gtk_clist_set_column_width(GTK_CLIST(clist), 0, 80); gtk_clist_set_column_width(GTK_CLIST(clist), 1, 80); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_clist_column_titles_passive(GTK_CLIST(clist)); frame = gtk_frame_new(_("Messages")); gtk_widget_show(frame); gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scroll_win); gtk_container_add(GTK_CONTAINER(frame), scroll_win); gtk_container_border_width(GTK_CONTAINER(scroll_win), 3); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); return vbox; } pioneers-14.1/client/gtk/audio.h0000644000175000017500000000241110771502214013516 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2008 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __audio_h #define __audio_h #include gboolean get_announce_player(void); void set_announce_player(gboolean announce); gboolean get_silent_mode(void); void set_silent_mode(gboolean silent); typedef enum { SOUND_BEEP, ///< Some player beeps you SOUND_TURN, ///< It is your turn SOUND_ANNOUNCE, ///< Another player enters the game } SoundType; void play_sound(SoundType sound); #endif pioneers-14.1/client/gtk/avahi.h0000644000175000017500000000213711403511531013505 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2009 Andreas Steinel * Copyright (C) 2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __AVAHI_H__ #define __AVAHI_H__ #include #include "avahi-browser.h" void avahi_register(AvahiBrowser * widget); void avahi_unregister(void); #endif pioneers-14.1/client/gtk/avahi-browser.h0000644000175000017500000000452711403541277015205 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2009 Andreas Steinel * Copyright (C) 2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __AVAHI_BROWSER_H__ #define __AVAHI_BROWSER_H__ #include #include #include G_BEGIN_DECLS #define AVAHIBROWSER_TYPE (avahibrowser_get_type ()) #define AVAHIBROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AVAHIBROWSER_TYPE, AvahiBrowser)) #define AVAHIBROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AVAHIBROWSER_TYPE, AvahiBrowserClass)) #define IS_AVAHIBROWSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AVAHIBROWSER_TYPE)) #define IS_AVAHIBROWSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), AVAHIBROWSER_TYPE)) typedef struct _AvahiBrowser AvahiBrowser; typedef struct _AvahiBrowserClass AvahiBrowserClass; struct _AvahiBrowser { GtkTable table; GtkWidget *combo_box; GtkListStore *data; GtkWidget *connect_button; }; struct _AvahiBrowserClass { GtkComboBoxClass parent_class; }; GType avahibrowser_get_type(void); GtkWidget *avahibrowser_new(GtkWidget * connect_button); void avahibrowser_refresh(AvahiBrowser * ab); void avahibrowser_add(AvahiBrowser * ab, const char *service_name, const char *resolved_hostname, const char *host_name, const gchar * port, const char *version, const char *title); void avahibrowser_del(AvahiBrowser * ab, const char *service_name); gchar *avahibrowser_get_server(AvahiBrowser * ab); gchar *avahibrowser_get_port(AvahiBrowser * ab); G_END_DECLS #endif /* __AVAHI_BROWSER_H__ */ pioneers-14.1/client/gtk/frontend.h0000644000175000017500000002545411652323243014252 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003,2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _frontend_h #define _frontend_h #include #include #include #include "callback.h" #include "colors.h" #include "quoteinfo.h" /* All graphics events. */ typedef enum { GUI_UPDATE, GUI_CONNECT, GUI_CONNECT_TRY, GUI_CONNECT_CANCEL, GUI_DISCONNECT, GUI_CHANGE_NAME, GUI_QUIT, GUI_ROLL, GUI_TRADE, GUI_UNDO, GUI_FINISH, GUI_ROAD, GUI_SHIP, GUI_MOVE_SHIP, GUI_BRIDGE, GUI_SETTLEMENT, GUI_CITY, GUI_CITY_WALL, GUI_BUY_DEVELOP, GUI_PLAY_DEVELOP, GUI_MONOPOLY, GUI_PLENTY, GUI_DISCARD, GUI_CHOOSE_GOLD, GUI_TRADE_CALL, GUI_TRADE_ACCEPT, GUI_TRADE_FINISH, GUI_QUOTE_SUBMIT, GUI_QUOTE_DELETE, GUI_QUOTE_REJECT } GuiEvent; #include "gui.h" /* Information about a GUI component */ typedef struct { GtkWidget *widget; /* the GTK widget */ GuiEvent id; /* widget id */ gboolean destroy_only; /* react to destroy signal */ const gchar *signal; /* signal attached */ gboolean current; /* is widget currently sensitive? */ gboolean next; /* should widget be sensitive? */ } GuiWidgetState; /** all widgets are inactive while waiting for network. */ extern gboolean frontend_waiting_for_network; /** set all widgets to their programmed state. */ void frontend_gui_update(void); /** program the state of a widget for when frontend_gui_update is called. */ void frontend_gui_check(GuiEvent event, gboolean sensitive); /** initialise the frontend_gui_register_* functions */ void frontend_gui_register_init(void); /** register a new destroy-only widget. */ void frontend_gui_register_destroy(GtkWidget * widget, GuiEvent id); /** register an action. */ void frontend_gui_register_action(GtkAction * action, GuiEvent id); /** register a new "normal" widget. */ void frontend_gui_register(GtkWidget * widget, GuiEvent id, const gchar * signal); /** route an event to the gui event function */ void frontend_gui_route_event(GuiEvent event); /* callbacks */ void frontend_init_gtk_et_al(int argc, char **argv); void frontend_init(void); void frontend_new_statistics(gint player_num, StatisticType type, gint num); void frontend_new_points(gint player_num, Points * points, gboolean added); void frontend_spectator_name(gint spectator_num, const gchar * name); void frontend_player_name(gint player_num, const gchar * name); void frontend_player_style(gint player_num, const gchar * style); void frontend_player_quit(gint player_num); void frontend_spectator_quit(gint player_num); void frontend_disconnect(void); void frontend_offline(void); void frontend_discard(void); void frontend_discard_add(gint player_num, gint discard_num); void frontend_discard_remove(gint player_num); void frontend_discard_done(void); void frontend_gold(void); void frontend_gold_add(gint player_num, gint gold_num); void frontend_gold_remove(gint player_num, gint * resources); void frontend_gold_choose(gint gold_num, const gint * bank); void frontend_gold_done(void); void frontend_setup(unsigned num_settlements, unsigned num_roads); void frontend_quote(gint player_num, gint * they_supply, gint * they_receive); void frontend_roadbuilding(gint num_roads); void frontend_monopoly(void); void frontend_plenty(const gint * bank); void frontend_turn(void); void frontend_trade_player_end(gint player_num); void frontend_trade_add_quote(gint player_num, gint quote_num, const gint * they_supply, const gint * they_receive); void frontend_trade_remove_quote(int player_num, int quote_num); void frontend_quote_player_end(gint player_num); void frontend_quote_add(gint player_num, gint quote_num, const gint * they_supply, const gint * they_receive); void frontend_quote_remove(gint player_num, gint quote_num); void frontend_quote_start(void); void frontend_quote_end(void); void frontend_quote_monitor(void); void frontend_rolled_dice(gint die1, gint die2, gint player_num); void frontend_bought_develop(DevelType type); void frontend_played_develop(gint player_num, gint card_idx, DevelType type); void frontend_resource_change(Resource type, gint new_amount); void frontend_robber(void); void frontend_steal_building(void); void frontend_steal_ship(void); void frontend_robber_done(void); void frontend_game_over(gint player, gint points); Map *frontend_get_map(void); void frontend_set_map(Map * map); /* connect.c */ const gchar *connect_get_server(void); const gchar *connect_get_port(void); gboolean connect_get_spectator(void); void connect_set_server(const gchar * server); void connect_set_port(const gchar * port); void connect_set_spectator(gboolean spectator); void connect_set_meta_server(const gchar * meta_server); void connect_create_dlg(void); /* trade.c */ GtkWidget *trade_build_page(void); gboolean can_call_for_quotes(void); gboolean trade_valid_selection(void); const gint *trade_we_supply(void); const gint *trade_we_receive(void); const QuoteInfo *trade_current_quote(void); void trade_finish(void); void trade_add_quote(int player_num, int quote_num, const gint * they_supply, const gint * they_receive); void trade_delete_quote(int player_num, int quote_num); void trade_player_finish(gint player_num); void trade_begin(void); void trade_format_quote(const QuoteInfo * quote, gchar * buffer); void trade_new_trade(void); void trade_perform_maritime(gint ratio, Resource supply, Resource receive); void trade_perform_domestic(gint player_num, gint partner_num, gint quote_num, const gint * they_supply, const gint * they_receive); void frontend_trade_domestic(gint partner_num, gint quote_num, const gint * we_supply, const gint * we_receive); void frontend_trade_maritime(gint ratio, Resource we_supply, Resource we_receive); /* quote.c */ GtkWidget *quote_build_page(void); gboolean can_submit_quote(void); gboolean can_delete_quote(void); gboolean can_reject_quote(void); gint quote_next_num(void); const gint *quote_we_supply(void); const gint *quote_we_receive(void); const QuoteInfo *quote_current_quote(void); void quote_begin_again(gint player_num, const gint * they_supply, const gint * they_receive); void quote_begin(gint player_num, const gint * they_supply, const gint * they_receive); void quote_add_quote(gint player_num, gint quote_num, const gint * they_supply, const gint * they_receive); void quote_delete_quote(gint player_num, gint quote_num); void quote_player_finish(gint player_num); void quote_finish(void); void frontend_quote_trade(gint player_num, gint partner_num, gint quote_num, const gint * they_supply, const gint * they_receive); /* legend.c */ GtkWidget *legend_create_dlg(void); GtkWidget *legend_create_content(void); /* gui_develop.c */ GtkWidget *develop_build_page(void); gint develop_current_idx(void); void develop_reset(void); /* discard.c */ GtkWidget *discard_build_page(void); gboolean can_discard(void); void discard_get_list(gint * discards); void discard_begin(void); void discard_player_must(gint player_num, gint discard_num); void discard_player_did(gint player_num); void discard_end(void); /* gold.c */ GtkWidget *gold_build_page(void); gboolean can_choose_gold(void); void choose_gold_get_list(gint * choice); void gold_choose_begin(void); void gold_choose_player_prepare(gint player_num, gint gold_num); void gold_choose_player_must(gint gold_num, const gint * bank); void gold_choose_player_did(gint player_num, gint * resource_list); void gold_choose_end(void); /* identity.c */ GtkWidget *identity_build_panel(void); void identity_draw(void); void identity_set_dice(gint die1, gint die2); void identity_reset(void); /* resource.c */ GtkWidget *resource_build_panel(void); /* player.c */ GtkWidget *player_build_summary(void); GtkWidget *player_build_turn_area(void); void player_clear_summary(void); void player_init(void); /** The colour of the player, or spectator */ GdkColor *player_or_spectator_color(gint player_num); /** The colour of the player */ GdkColor *player_color(gint player_num); /** Create an icon of the player, suitable for display on widget, * for player_num, who is connected. * You should unref the pixbuf when it is no longer needed */ GdkPixbuf *player_create_icon(GtkWidget * widget, gint player_num, gboolean connected); void player_show_current(gint player_num); void set_num_players(gint num); /* chat.c */ /** Create the chat widget */ GtkWidget *chat_build_panel(void); /** Determine if the focus should be moved to the chat widget */ void chat_set_grab_focus_on_update(gboolean grab); /** Set the focus to the chat widget */ void chat_set_focus(void); /** A player/spectator has changed his name */ void chat_player_name(gint player_num, const gchar * name); /** A player/spectator has changed his style */ void chat_player_style(gint player_num); /** A player has quit */ void chat_player_quit(gint player_num); /** A spectator has quit */ void chat_spectator_quit(gint spectator_num); /** Clear all names */ void chat_clear_names(void); /** Parse the chat for commands */ void chat_parser(gint player_num, const gchar * chat_str); /* name.c */ /** Create a dialog to change the name */ void name_create_dlg(void); /* settingscreen.c */ void settings_init(void); GtkWidget *settings_create_dlg(void); /* monopoly.c */ Resource monopoly_type(void); void monopoly_destroy_dlg(void); void monopoly_create_dlg(void); /* plenty.c */ void plenty_resources(gint * plenty); void plenty_destroy_dlg(void); void plenty_create_dlg(const gint * bank); gboolean plenty_can_activate(void); /* gameover.c */ GtkWidget *gameover_create_dlg(gint player_num, gint num_points); #define PIONEERS_PIXMAP_DICE "pioneers/dice.svg" #define PIONEERS_PIXMAP_TRADE "pioneers/trade.svg" #define PIONEERS_PIXMAP_ROAD "pioneers/road.svg" #define PIONEERS_PIXMAP_SHIP "pioneers/ship.svg" #define PIONEERS_PIXMAP_SHIP_MOVEMENT "pioneers/ship_move.svg" #define PIONEERS_PIXMAP_BRIDGE "pioneers/bridge.svg" #define PIONEERS_PIXMAP_SETTLEMENT "pioneers/settlement.svg" #define PIONEERS_PIXMAP_CITY "pioneers/city.svg" #define PIONEERS_PIXMAP_CITY_WALL "pioneers/city_wall.svg" #define PIONEERS_PIXMAP_DEVELOP "pioneers/develop.svg" #define PIONEERS_PIXMAP_FINISH "pioneers/finish.svg" #endif pioneers-14.1/client/gtk/gui.h0000644000175000017500000000545611613330306013212 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __gui_h #define __gui_h #include "guimap.h" void set_color_summary(gboolean flag); GtkWidget *gui_get_dialog_button(GtkDialog * dlg, gint button); void gui_reset(void); void gui_set_instructions(const gchar * text); void gui_set_vp_target_value(gint vp); void gui_set_net_status(const gchar * text); void gui_show_trade_page(gboolean show); void gui_show_quote_page(gboolean show); void gui_show_legend_page(gboolean show); /** Show or hide the splash page. * @param show Show or hide * @param chat_widget When this function is called for the first time, * registers the chat widget */ void gui_show_splash_page(gboolean show, GtkWidget * chat_widget); void gui_discard_show(void); void gui_discard_hide(void); void gui_gold_show(void); void gui_gold_hide(void); void gui_prompt_show(const gchar * message); void gui_prompt_hide(void); void gui_cursor_none(void); void gui_cursor_set(CursorType type, CheckFunc check_func, SelectFunc select_func, CancelFunc cancel_func, const MapElement * user_data); void gui_draw_hex(const Hex * hex); void gui_draw_edge(const Edge * edge); void gui_draw_node(const Node * node); void gui_set_game_params(const GameParams * params); void gui_setup_mode(gint player_num); void gui_double_setup_mode(gint player_num); void gui_highlight_chits(gint roll); GtkWidget *gui_build_interface(void); void show_admin_interface(GtkWidget * vbox); gint hotkeys_handler(GtkWidget * w, GdkEvent * e, gpointer data); extern GtkWidget *app_window; /* main application window */ /* gui states */ typedef void (*GuiState) (GuiEvent event); #define set_gui_state(A) do \ { debug("New GUI_state: %s %p\n", #A, A); \ set_gui_state_nomacro(A); } while (0) void set_gui_state_nomacro(GuiState state); GuiState get_gui_state(void); void route_gui_event(GuiEvent event); void gui_rules_register_callback(GCallback callback); void gui_set_show_no_setup_nodes(gboolean show); #endif pioneers-14.1/client/gtk/histogram.h0000644000175000017500000000212110363024766014420 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __histogram_h #define __histogram_h void histogram_dice_rolled(gint roll, gint playernum); GtkWidget *histogram_create_dlg(void); void histogram_init(void); void histogram_reset(void); #endif pioneers-14.1/client/gtk/audio.c0000644000175000017500000000300310771502214013507 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2008 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "audio.h" static gboolean silent_mode = FALSE; static gboolean announce_player = TRUE; gboolean get_announce_player(void) { return announce_player; } void set_announce_player(gboolean announce) { announce_player = announce; } gboolean get_silent_mode(void) { return silent_mode; } void set_silent_mode(gboolean silent) { silent_mode = silent; } void play_sound(SoundType sound) { if (get_silent_mode()) { return; } switch (sound) { case SOUND_BEEP: gdk_beep(); break; case SOUND_TURN: gdk_beep(); break; case SOUND_ANNOUNCE: if (get_announce_player()) gdk_beep(); break; } } pioneers-14.1/client/gtk/avahi.c0000644000175000017500000001402411437534051013507 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2008 Roland Clobus * Copyright (C) 2009 Andreas Steinel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "network.h" #include "avahi.h" #ifdef HAVE_AVAHI #include #include #include #include #include #include static AvahiGLibPoll *glib_poll = NULL; static AvahiClient *client = NULL; static AvahiServiceBrowser *sb = NULL; static AvahiBrowser *zcsptr = NULL; static void resolve_callback(AvahiServiceResolver * r, AVAHI_GCC_UNUSED AvahiIfIndex interface, AVAHI_GCC_UNUSED AvahiProtocol protocol, AvahiResolverEvent event, const char *name, const char *type, const char *domain, const char *host_name, AVAHI_GCC_UNUSED const AvahiAddress * address, uint16_t port, AvahiStringList * txt, AVAHI_GCC_UNUSED AvahiLookupResultFlags flags, AVAHI_GCC_UNUSED void *userdata) { g_assert(r); /* Called whenever a service has been resolved successfully or timed out */ switch (event) { case AVAHI_RESOLVER_FAILURE: debug ("Avahi: Failed to resolve service '%s' of type '%s' in domain '%s': %s", name, type, domain, avahi_strerror(avahi_client_errno (avahi_service_resolver_get_client (r)))); break; case AVAHI_RESOLVER_FOUND:{ gchar *version = NULL; gchar *title = NULL; // Parse the text part AvahiStringList *iter = txt; while (iter != NULL) { gchar *text = g_strdup((gchar *) avahi_string_list_get_text (iter)); if (g_str_has_prefix(text, "version=")) { version = g_strdup(text + 8); } else if (g_str_has_prefix(text, "title=")) { title = g_strdup(text + 6); } g_free(text); iter = avahi_string_list_get_next(iter); } if (zcsptr != NULL) { gchar *sport = g_strdup_printf("%" G_GUINT16_FORMAT, port); char resolved_hostname [AVAHI_ADDRESS_STR_MAX]; avahi_address_snprint(resolved_hostname, sizeof (resolved_hostname), address); avahibrowser_add(zcsptr, name, resolved_hostname, host_name, sport, version, title); g_free(sport); } g_free(version); g_free(title); } } avahi_service_resolver_free(r); } static void browse_callback(AvahiServiceBrowser * b, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AVAHI_GCC_UNUSED AvahiLookupResultFlags flags, void *userdata) { AvahiClient *c = userdata; g_assert(b); /* Called whenever a new service becomes available on the LAN or is removed from the LAN */ switch (event) { case AVAHI_BROWSER_FAILURE: debug("Avahi browser: failure %s", avahi_strerror(avahi_client_errno (avahi_service_browser_get_client (b)))); return; case AVAHI_BROWSER_NEW: /* We ignore the returned resolver object. In the callback function we free it. If the server is terminated before the callback function is called the server will free the resolver for us. */ if (! (avahi_service_resolver_new (c, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, 0, resolve_callback, c))) debug ("Avahi browser: Failed to resolve service '%s': %s", name, avahi_strerror(avahi_client_errno(c))); break; case AVAHI_BROWSER_REMOVE: avahibrowser_del(zcsptr, name); break; case AVAHI_BROWSER_ALL_FOR_NOW: case AVAHI_BROWSER_CACHE_EXHAUSTED: break; } } static void client_callback(AvahiClient * c, AvahiClientState state, AVAHI_GCC_UNUSED void *userdata) { g_assert(c); /* Called whenever the client or server state changes */ if (state == AVAHI_CLIENT_FAILURE) { debug("Avahi server connection failure: %s", avahi_strerror(avahi_client_errno(c))); } } void avahi_register(AvahiBrowser * widget) { const AvahiPoll *poll_api; zcsptr = widget; int error; glib_poll = avahi_glib_poll_new(NULL, G_PRIORITY_DEFAULT); poll_api = avahi_glib_poll_get(glib_poll); /* Allocate main loop object */ if (!poll_api) { debug("Avahi: Failed to create glib poll object."); avahi_unregister(); return; } client = avahi_client_new(poll_api, 0, client_callback, NULL, &error); /* Check wether creating the client object succeeded */ if (!client) { debug("Avahi: Failed to create client: %s", avahi_strerror(error)); avahi_unregister(); return; } /* Create the service browser */ if (! (sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC, AVAHI_NETWORK_PROTOCOL, AVAHI_ANNOUNCE_NAME, NULL, 0, browse_callback, client))) { debug("Failed to create service browser: %s"), avahi_strerror(avahi_client_errno(client)); avahi_unregister(); } } void avahi_unregister(void) { /* Cleanup things */ if (sb) { avahi_service_browser_free(sb); sb = NULL; } if (client) { avahi_client_free(client); client = NULL; } if (glib_poll) { avahi_glib_poll_free(glib_poll); glib_poll = NULL; } } #endif pioneers-14.1/client/gtk/avahi-browser.c0000644000175000017500000001277011461571231015174 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2009 Andreas Steinel * Copyright (C) 2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "avahi-browser.h" static void avahibrowser_class_init(AvahiBrowserClass * klass); static void avahibrowser_init(AvahiBrowser * ab); /* Register the class */ GType avahibrowser_get_type(void) { static GType sg_type = 0; if (!sg_type) { static const GTypeInfo sg_info = { sizeof(AvahiBrowserClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) avahibrowser_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AvahiBrowser), 0, (GInstanceInitFunc) avahibrowser_init, NULL }; sg_type = g_type_register_static(GTK_TYPE_TABLE, "AvahiBrowser", &sg_info, 0); } return sg_type; } static void avahibrowser_class_init(G_GNUC_UNUSED AvahiBrowserClass * klass) { } /* Build the composite widget */ static void avahibrowser_init(AvahiBrowser * ab) { GtkCellRenderer *cell; /* Create model */ ab->data = gtk_list_store_new(7, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); ab->combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ab->data)); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(ab->combo_box), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(ab->combo_box), cell, "text", 6, NULL); gtk_widget_show(ab->combo_box); gtk_widget_set_tooltip_text(ab->combo_box, _ ("Select an automatically discovered game")); gtk_table_resize(GTK_TABLE(ab), 1, 1); gtk_table_attach_defaults(GTK_TABLE(ab), ab->combo_box, 0, 1, 0, 1); } /* Create a new instance of the widget */ GtkWidget *avahibrowser_new(GtkWidget * connect_button) { AvahiBrowser *ab = AVAHIBROWSER(g_object_new(avahibrowser_get_type(), NULL)); ab->connect_button = connect_button; gtk_widget_set_sensitive(ab->connect_button, FALSE); return GTK_WIDGET(ab); } void avahibrowser_add(AvahiBrowser * ab, const char *service_name, const char *resolved_hostname, const char *host_name, const gchar * port, const char *version, const char *title) { GtkTreeIter iter; if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ab->data), &iter)) { gchar *old; gboolean found = FALSE; gboolean atend = FALSE; do { gtk_tree_model_get(GTK_TREE_MODEL(ab->data), &iter, 0, &old, -1); if (!strcmp(service_name, old)) found = TRUE; else atend = !gtk_tree_model_iter_next (GTK_TREE_MODEL(ab->data), &iter); g_free(old); } while (!found && !atend); if (!found) { gtk_list_store_append(ab->data, &iter); } } else { /* Was empty */ gtk_list_store_append(ab->data, &iter); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(ab->combo_box), &iter); } gchar *nice_text = g_strdup_printf( /* $1=Game title, $2=version, $3=host_name, $4=port */ _("%s (%s) on %s:%s"), title, version, host_name, port); gtk_list_store_set(ab->data, &iter, 0, service_name, 1, resolved_hostname, 2, host_name, 3, port, 4, version, 5, title, 6, nice_text, -1); g_free(nice_text); gtk_widget_set_sensitive(GTK_WIDGET(ab->connect_button), TRUE); } void avahibrowser_del(AvahiBrowser * ab, const char *service_name) { GtkTreeIter iter; if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ab->data), &iter)) { gchar *old; gboolean found = FALSE; gboolean atend = FALSE; do { gtk_tree_model_get(GTK_TREE_MODEL(ab->data), &iter, 0, &old, -1); if (!strcmp(service_name, old)) found = TRUE; else atend = !gtk_tree_model_iter_next (GTK_TREE_MODEL(ab->data), &iter); g_free(old); } while (!found && !atend); if (found) gtk_list_store_remove(ab->data, &iter); } // If there is more than one server available, select the first one if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ab->data), &iter)) { gtk_combo_box_set_active_iter(GTK_COMBO_BOX(ab->combo_box), &iter); } else { // if no server is available, disable the join button gtk_widget_set_sensitive(GTK_WIDGET (ab->connect_button), FALSE); } } gchar *avahibrowser_get_server(AvahiBrowser * ab) { GtkTreeIter iter; gchar *text; gtk_combo_box_get_active_iter(GTK_COMBO_BOX(ab->combo_box), &iter); gtk_tree_model_get(GTK_TREE_MODEL(ab->data), &iter, 1, &text, -1); return text; } gchar *avahibrowser_get_port(AvahiBrowser * ab) { GtkTreeIter iter; gchar *text; gtk_combo_box_get_active_iter(GTK_COMBO_BOX(ab->combo_box), &iter); gtk_tree_model_get(GTK_TREE_MODEL(ab->data), &iter, 3, &text, -1); return text; } pioneers-14.1/client/gtk/callbacks.c0000644000175000017500000001254511734527211014344 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "histogram.h" static void frontend_network_status(const gchar * description) { gui_set_net_status(description); frontend_gui_update(); } static void frontend_instructions(const gchar * message) { gui_set_instructions(message); frontend_gui_update(); } static void frontend_network_wait(gboolean is_waiting) { frontend_waiting_for_network = is_waiting; frontend_gui_update(); } static void frontend_init_game(void) { player_clear_summary(); chat_clear_names(); develop_reset(); histogram_reset(); gui_reset(); } static void frontend_start_game(void) { gui_set_game_params(get_game_params()); set_num_players(num_players()); identity_reset(); gui_set_show_no_setup_nodes(TRUE); frontend_gui_update(); } static void frontend_draw_edge(Edge * edge) { gui_draw_edge(edge); frontend_gui_update(); } static void frontend_draw_node(Node * node) { gui_draw_node(node); frontend_gui_update(); } static void frontend_draw_hex(Hex * hex) { gui_draw_hex(hex); frontend_gui_update(); } static void frontend_update_stock(void) { identity_draw(); frontend_gui_update(); } static void frontend_player_turn(gint player) { gui_set_show_no_setup_nodes(FALSE); player_show_current(player); } static void frontend_trade(void) { frontend_gui_update(); } static void frontend_robber_moved(G_GNUC_UNUSED Hex * old, G_GNUC_UNUSED Hex * new) { } static void frontend_new_bank(G_GNUC_UNUSED const gint * new_bank) { #ifdef DEBUG_BANK debug("New bank: %d %d %d %d %d", new_bank[0], new_bank[1], new_bank[2], new_bank[3], new_bank[4]); #endif } /* set all the callbacks. */ void frontend_set_callbacks(void) { callbacks.init_glib_et_al = &frontend_init_gtk_et_al; callbacks.init = &frontend_init; callbacks.network_status = &frontend_network_status; callbacks.instructions = &frontend_instructions; callbacks.network_wait = &frontend_network_wait; callbacks.offline = &frontend_offline; callbacks.discard = &frontend_discard; callbacks.discard_add = &frontend_discard_add; callbacks.discard_remove = &frontend_discard_remove; callbacks.discard_done = &frontend_discard_done; callbacks.gold = &frontend_gold; callbacks.gold_add = &frontend_gold_add; callbacks.gold_remove = &frontend_gold_remove; callbacks.game_over = &frontend_game_over; callbacks.init_game = &frontend_init_game; callbacks.start_game = &frontend_start_game; callbacks.setup = &frontend_setup; callbacks.quote = &frontend_quote; callbacks.roadbuilding = &frontend_roadbuilding; callbacks.monopoly = &frontend_monopoly; callbacks.plenty = &frontend_plenty; callbacks.turn = &frontend_turn; callbacks.player_turn = &frontend_player_turn; callbacks.trade = &frontend_trade; callbacks.trade_player_end = &frontend_trade_player_end; callbacks.trade_add_quote = &frontend_trade_add_quote; callbacks.trade_remove_quote = &frontend_trade_remove_quote; callbacks.trade_domestic = &frontend_trade_domestic; callbacks.trade_maritime = &frontend_trade_maritime; callbacks.quote_player_end = &frontend_quote_player_end; callbacks.quote_add = &frontend_quote_add; callbacks.quote_remove = &frontend_quote_remove; callbacks.quote_start = &frontend_quote_start; callbacks.quote_end = &frontend_quote_end; callbacks.quote_monitor = &frontend_quote_monitor; callbacks.quote_trade = &frontend_quote_trade; callbacks.rolled_dice = &frontend_rolled_dice; callbacks.gold_choose = &frontend_gold_choose; callbacks.gold_done = &frontend_gold_done; callbacks.draw_edge = &frontend_draw_edge; callbacks.draw_node = &frontend_draw_node; callbacks.bought_develop = &frontend_bought_develop; callbacks.played_develop = &frontend_played_develop; callbacks.resource_change = &frontend_resource_change; callbacks.draw_hex = &frontend_draw_hex; callbacks.update_stock = &frontend_update_stock; callbacks.robber = &frontend_robber; callbacks.robber_moved = &frontend_robber_moved; callbacks.steal_building = &frontend_steal_building; callbacks.steal_ship = &frontend_steal_ship; callbacks.robber_done = &frontend_robber_done; callbacks.new_statistics = &frontend_new_statistics; callbacks.new_points = &frontend_new_points; callbacks.spectator_name = &frontend_spectator_name; callbacks.player_name = &frontend_player_name; callbacks.player_style = &frontend_player_style; callbacks.player_quit = &frontend_player_quit; callbacks.spectator_quit = &frontend_spectator_quit; callbacks.incoming_chat = &chat_parser; callbacks.new_bank = &frontend_new_bank; callbacks.get_map = &frontend_get_map; callbacks.set_map = &frontend_set_map; } pioneers-14.1/client/gtk/chat.c0000644000175000017500000002116611575444700013347 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "common_gtk.h" #include "audio.h" static GtkWidget *chat_entry; /* messages text widget */ static GtkListStore *chat_completion_model = NULL; static gboolean chat_grab_focus_on_update = FALSE; /**< Flag to indicate * whether the chat widget should grab the focus whenever a GUI_UPDATE is sent */ enum { CHAT_PLAYER_NUM, /**< Player number */ CHAT_PLAYER_ICON, /**< The player icon */ CHAT_BEEP_TEXT, /**< Text for the completion */ CHAT_COLUMN_LAST }; static void chat_cb(GtkEntry * entry, G_GNUC_UNUSED gpointer user_data) { const gchar *text = gtk_entry_get_text(entry); if (text[0] != '\0') { gchar buff[MAX_CHAT + 1]; gint idx; strncpy(buff, text, sizeof(buff) - 1); buff[sizeof(buff) - 1] = '\0'; /* Replace newlines in message with spaces. In a line * oriented protocol, newlines are a bit confusing :-) */ for (idx = 0; buff[idx] != '\0'; idx++) if (buff[idx] == '\n') buff[idx] = ' '; cb_chat(buff); gtk_entry_set_text(entry, ""); } } GtkWidget *chat_build_panel(void) { GtkWidget *hbox; GtkWidget *label; GtkEntryCompletion *completion; GtkCellRenderer *cell; hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); label = gtk_label_new(NULL); /* Label text */ gtk_label_set_markup(GTK_LABEL(label), _("Chat")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); chat_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(chat_entry), MAX_CHAT); g_signal_connect(G_OBJECT(chat_entry), "activate", G_CALLBACK(chat_cb), NULL); gtk_widget_show(chat_entry); gtk_box_pack_start(GTK_BOX(hbox), chat_entry, TRUE, TRUE, 0); completion = gtk_entry_completion_new(); gtk_entry_set_completion(GTK_ENTRY(chat_entry), completion); chat_completion_model = gtk_list_store_new(CHAT_COLUMN_LAST, G_TYPE_INT, GDK_TYPE_PIXBUF, G_TYPE_STRING); gtk_entry_completion_set_model(completion, GTK_TREE_MODEL (chat_completion_model)); g_object_unref(chat_completion_model); /* In GTK 2.4 the text column cannot be set with g_object_set yet. * Set the column, clear the renderers, and add our own. */ gtk_entry_completion_set_text_column(completion, CHAT_BEEP_TEXT); gtk_cell_layout_clear(GTK_CELL_LAYOUT(completion)); cell = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(completion), cell, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(completion), cell, "pixbuf", CHAT_PLAYER_ICON, NULL); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(completion), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(completion), cell, "text", CHAT_BEEP_TEXT, NULL); gtk_entry_completion_set_minimum_key_length(completion, 2); g_object_unref(completion); return hbox; } void chat_set_grab_focus_on_update(gboolean grab) { chat_grab_focus_on_update = grab; } void chat_set_focus(void) { if (chat_grab_focus_on_update && !gtk_widget_is_focus(chat_entry)) { gtk_widget_grab_focus(chat_entry); gtk_editable_set_position(GTK_EDITABLE(chat_entry), -1); } } void chat_player_name(gint player_num, const gchar * name) { GtkTreeIter iter; enum TFindResult found; GdkPixbuf *pixbuf; found = find_integer_in_tree(GTK_TREE_MODEL(chat_completion_model), &iter, CHAT_PLAYER_NUM, player_num); switch (found) { case FIND_NO_MATCH: gtk_list_store_append(chat_completion_model, &iter); break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(chat_completion_model, &iter, &iter); break; case FIND_MATCH_EXACT: break; }; /* connected icon */ pixbuf = player_create_icon(chat_entry, player_num, TRUE); gtk_list_store_set(chat_completion_model, &iter, CHAT_PLAYER_NUM, player_num, CHAT_PLAYER_ICON, pixbuf, CHAT_BEEP_TEXT, g_strdup_printf("/beep %s", name), -1); g_object_unref(pixbuf); } void chat_player_style(gint player_num) { GtkTreeIter iter; enum TFindResult found; GdkPixbuf *pixbuf; found = find_integer_in_tree(GTK_TREE_MODEL(chat_completion_model), &iter, CHAT_PLAYER_NUM, player_num); g_return_if_fail(found == FIND_MATCH_EXACT); /* connected icon */ pixbuf = player_create_icon(chat_entry, player_num, TRUE); gtk_list_store_set(chat_completion_model, &iter, CHAT_PLAYER_ICON, pixbuf, -1); g_object_unref(pixbuf); } void chat_player_quit(gint player_num) { GtkTreeIter iter; enum TFindResult found; found = find_integer_in_tree(GTK_TREE_MODEL(chat_completion_model), &iter, CHAT_PLAYER_NUM, player_num); if (found == FIND_MATCH_EXACT) { /* not connected icon */ GdkPixbuf *pixbuf = player_create_icon(chat_entry, player_num, FALSE); gtk_list_store_set(chat_completion_model, &iter, CHAT_PLAYER_ICON, pixbuf, -1); g_object_unref(pixbuf); } } void chat_spectator_quit(gint spectator_num) { GtkTreeIter iter; enum TFindResult found; found = find_integer_in_tree(GTK_TREE_MODEL(chat_completion_model), &iter, CHAT_PLAYER_NUM, spectator_num); if (found == FIND_MATCH_EXACT) { gtk_list_store_remove(chat_completion_model, &iter); } } void chat_clear_names(void) { gtk_list_store_clear(chat_completion_model); } /** Beep a player (if the name is found) * @param beeping_player The player that sent the /beep * @param name The name of the beeped player */ static void beep_player(gint beeping_player, const gchar * name) { gint beeped_player = find_player_by_name(name); if (beeped_player != -1) { if (beeped_player == my_player_num()) { play_sound(SOUND_BEEP); frontend_gui_update(); if (beeping_player == my_player_num()) log_message(MSG_BEEP, _("Beeper test.\n")); else log_message(MSG_BEEP, _("%s beeped you.\n"), player_name(beeping_player, TRUE)); } else if (beeping_player == my_player_num()) { log_message(MSG_BEEP, _("You beeped %s.\n"), name); } } else { if (beeping_player == my_player_num()) { /* No success */ log_message(MSG_BEEP, _("You could not beep %s.\n"), name); } } } void chat_parser(gint player_num, const gchar * chat) { int tempchatcolor = MSG_INFO; gchar *chat_str; gchar *chat_alloc; const gchar *joining_text; /* If the chat matches chat from the AI, translate it. * FIXME: There should be a flag to indicate the player is an AI, * so that chat from human players will not be translated */ chat_alloc = g_strdup(_(chat)); chat_str = chat_alloc; if (!strncmp(chat_str, "/beep", 5)) { chat_str += 5; chat_str += strspn(chat_str, " \t"); if (chat_str != NULL) { beep_player(player_num, chat_str); } g_free(chat_alloc); return; } else if (!strncmp(chat_str, "/me", 3)) { /* IRC-compatible /me */ chat_str += 3; chat_str += strspn(chat_str, " \t") - 1; chat_str[0] = ':'; } switch (chat_str[0]) { case ':': chat_str += 1; joining_text = " "; break; case ';': chat_str += 1; joining_text = ""; break; default: joining_text = _(" said: "); break; } if (color_chat_enabled) { if (player_is_spectator(player_num)) tempchatcolor = MSG_SPECTATOR_CHAT; else switch (player_num) { case 0: tempchatcolor = MSG_PLAYER1; break; case 1: tempchatcolor = MSG_PLAYER2; break; case 2: tempchatcolor = MSG_PLAYER3; break; case 3: tempchatcolor = MSG_PLAYER4; break; case 4: tempchatcolor = MSG_PLAYER5; break; case 5: tempchatcolor = MSG_PLAYER6; break; case 6: tempchatcolor = MSG_PLAYER7; break; case 7: tempchatcolor = MSG_PLAYER8; break; default: g_assert_not_reached(); break; } } else { tempchatcolor = MSG_CHAT; } log_message_chat(player_name(player_num, TRUE), joining_text, tempchatcolor, chat_str); g_free(chat_alloc); return; } pioneers-14.1/client/gtk/connect.c0000644000175000017500000013534111671101536014054 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003,2006 Bas Wijnen * Copyright (C) 2004,2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include "frontend.h" #include "network.h" #include "log.h" #include "config-gnome.h" #include "select-game.h" #include "game-settings.h" #include "game-rules.h" #include "metaserver.h" #include "avahi.h" #include "avahi-browser.h" #include "client.h" #include "gtkcompat.h" #include "common_gtk.h" const int PRIVATE_GAME_HISTORY_SIZE = 10; static gboolean connect_spectator; /* Prefer to be a spectator */ static gboolean connect_spectator_allowed; /* Spectator allowed */ static gchar *connect_server; /* Name of the server */ static gchar *connect_port; /* Port of the server */ static GtkWidget *connect_dlg; /* Dialog for starting a new game */ static GtkWidget *name_entry; /* Name of the player */ static GtkWidget *spectator_toggle; /* Prefer to be a spectator */ static GtkWidget *meta_server_entry; /* Name of the metaserver */ static GtkWidget *meta_dlg; /* Dialog for joining a public game */ static GtkWidget *server_status; /* Description of the current metaserver */ static GtkListStore *meta_games_model; /* The list of the games at the metaserver */ static GtkWidget *meta_games_view; /* The view on meta_games_model */ enum { META_RESPONSE_NEW = 1, /* Response for new game */ META_RESPONSE_REFRESH = 2 /* Response for refresh of the list */ }; enum { /* The columns of the meta_games_model */ C_META_HOST, C_META_PORT, C_META_HOST_SORTABLE, /* Invisible, used for sorting */ C_META_VERSION, C_META_MAX, C_META_CUR, C_META_TERRAIN, C_META_VICTORY, C_META_SEVENS, C_META_MAP, META_N_COLUMNS }; static Session *ses; static GtkWidget *cserver_dlg; /* Dialog for creating a public game */ static GtkWidget *select_game; /* select game type */ static GtkWidget *game_settings; /* game settings widget */ static GtkWidget *aiplayers_spin; /* number of AI players */ static GtkWidget *game_rules; /* Adjust some rules */ static gboolean cfg_terrain; /* Random terrain */ static guint cfg_num_players, cfg_victory_points, cfg_sevens_rule; static guint cfg_ai_players; static const gchar *cfg_gametype; /* Will be set be the widget */ static GtkWidget *connect_private_dlg; /* Join a private game */ static GtkWidget *host_entry; /* Host name entry */ static GtkWidget *port_entry; /* Host port entry */ static enum { GAMETYPE_MODE_SIGNON, GAMETYPE_MODE_LIST } gametype_mode; static enum { CREATE_MODE_SIGNON, CREATE_MODE_WAIT_FOR_INFO } create_mode; static enum { MODE_SIGNON, MODE_REDIRECT, MODE_LIST, MODE_CAPABILITY } meta_mode; static Session *gametype_ses; static Session *create_ses; /** Information about the metaserver */ static struct { /** Server name */ gchar *server; /** Port */ gchar *port; /** Major version number of metaserver protocol */ gint version_major; /** Minor version number of metaserver protocol */ gint version_minor; /** Number of times the metaserver has redirected */ gint num_redirects; /** The metaserver can create remote games */ gboolean can_create_games; /** The metaserver can send information about a game */ gboolean can_send_game_settings; } metaserver_info = { NULL, NULL, 0, 0, 0, FALSE, FALSE}; #define STRARG_LEN 128 #define INTARG_LEN 16 static gchar server_host[STRARG_LEN]; static gchar server_port[STRARG_LEN]; static gchar server_version[STRARG_LEN]; static gchar server_max[INTARG_LEN]; static gchar server_curr[INTARG_LEN]; static gchar server_vpoints[STRARG_LEN]; static gchar *server_sevenrule = NULL; static gchar *server_terrain = NULL; static gchar server_title[STRARG_LEN]; static void query_meta_server(const gchar * server, const gchar * port); static void show_waiting_box(const gchar * message, const gchar * server, const gchar * port); static void close_waiting_box(void); static void connect_set_field(gchar ** field, const gchar * value); static void connect_close_all(gboolean user_pressed_ok, gboolean can_be_spectator); static void set_meta_serverinfo(void); static void connect_private_dialog(G_GNUC_UNUSED GtkWidget * widget, GtkWindow * parent); static void connect_set_field(gchar ** field, const gchar * value) { gchar *temp = g_strdup(value); if (*field) g_free(*field); *field = g_strdup(g_strstrip(temp)); g_free(temp); } /* Reset all pointers to the destroyed children of the dialog */ static void connect_dlg_destroyed(GtkWidget * widget, GtkWidget ** widget_pointer) { name_entry = NULL; spectator_toggle = NULL; meta_server_entry = NULL; gtk_widget_destroyed(widget, widget_pointer); } static void connect_name_change_cb(G_GNUC_UNUSED gpointer ns) { gchar *name = notifying_string_get(requested_name); if (name_entry != NULL) gtk_entry_set_text(GTK_ENTRY(name_entry), name); g_free(name); } /* Public functions */ gboolean connect_get_spectator(void) { return connect_spectator && connect_spectator_allowed; } void connect_set_spectator(gboolean spectator) { connect_spectator = spectator; connect_spectator_allowed = TRUE; if (spectator_toggle != NULL) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (spectator_toggle), connect_spectator); } const gchar *connect_get_server(void) { return connect_server; } void connect_set_server(const gchar * server) { connect_set_field(&connect_server, server); } static gchar *connect_get_meta_server(void) { if (meta_server_entry == NULL) return NULL; return metaserver_get(METASERVER(meta_server_entry)); } void connect_set_meta_server(const gchar * meta_server) { connect_set_field(&metaserver_info.server, meta_server); if (meta_server_entry != NULL) metaserver_add(METASERVER(meta_server_entry), metaserver_info.server); } const gchar *connect_get_port(void) { return connect_port; } void connect_set_port(const gchar * port) { connect_set_field(&connect_port, port); } static void connect_close_all(gboolean user_pressed_ok, gboolean can_be_spectator) { connect_spectator_allowed = can_be_spectator; if (user_pressed_ok) { gchar *meta_server; notifying_string_set(requested_name, gtk_entry_get_text(GTK_ENTRY (name_entry))); connect_spectator = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (spectator_toggle)); /* Save connect dialogue entries */ meta_server = connect_get_meta_server(); config_set_string("connect/meta-server", meta_server); g_free(meta_server); frontend_gui_register_destroy(connect_dlg, GUI_CONNECT_TRY); } else { frontend_gui_register_destroy(connect_dlg, GUI_CONNECT_CANCEL); } if (connect_dlg) gtk_widget_destroy(GTK_WIDGET(connect_dlg)); if (meta_dlg) gtk_widget_destroy(GTK_WIDGET(meta_dlg)); if (cserver_dlg) gtk_widget_destroy(GTK_WIDGET(cserver_dlg)); if (connect_private_dlg) gtk_widget_destroy(GTK_WIDGET(connect_private_dlg)); } /* Messages explaining some delays */ static void show_waiting_box(const gchar * message, const gchar * server, const gchar * port) { if (meta_dlg) { gchar *s = g_strdup_printf(_("Meta-server at %s, port %s"), server, port); gtk_label_set_text(GTK_LABEL(server_status), s); g_free(s); } log_message(MSG_INFO, message); } static void close_waiting_box(void) { log_message(MSG_INFO, _("Finished.\n")); } /* -------------------- get game types -------------------- */ static void meta_gametype_notify(NetEvent event, G_GNUC_UNUSED void *user_data, char *line) { switch (event) { case NET_CONNECT: break; case NET_CONNECT_FAIL: net_free(&gametype_ses); break; case NET_CLOSE: if (gametype_mode == GAMETYPE_MODE_SIGNON) log_message(MSG_ERROR, _("Meta-server kicked us off\n")); net_free(&gametype_ses); close_waiting_box(); break; case NET_READ: switch (gametype_mode) { case GAMETYPE_MODE_SIGNON: net_printf(gametype_ses, "listtypes\n"); gametype_mode = GAMETYPE_MODE_LIST; break; case GAMETYPE_MODE_LIST: /* A server description looks like this: * title=%s\n */ if (strncmp(line, "title=", 6) == 0) select_game_add(SELECTGAME(select_game), line + 6); break; } break; } } static void get_meta_server_games_types(gchar * server, gchar * port) { show_waiting_box(_("Receiving game names from the meta server.\n"), server, port); gametype_ses = net_new(meta_gametype_notify, NULL); if (net_connect(gametype_ses, server, port)) gametype_mode = GAMETYPE_MODE_SIGNON; else { net_free(&gametype_ses); close_waiting_box(); } } /* -------------------- create game server -------------------- */ static void meta_create_notify(NetEvent event, G_GNUC_UNUSED void *user_data, char *line) { switch (event) { case NET_CONNECT: break; case NET_CONNECT_FAIL: net_free(&create_ses); break; case NET_CLOSE: if (create_mode == CREATE_MODE_SIGNON) log_message(MSG_ERROR, _("Meta-server kicked us off\n")); net_free(&create_ses); break; case NET_READ: switch (create_mode) { case CREATE_MODE_SIGNON: net_printf(create_ses, "create %d %d %d %d %d %s\n", cfg_terrain, cfg_num_players, cfg_victory_points, cfg_sevens_rule, cfg_ai_players, cfg_gametype); create_mode = CREATE_MODE_WAIT_FOR_INFO; break; case CREATE_MODE_WAIT_FOR_INFO: if (strncmp(line, "host=", 5) == 0) connect_set_field(&connect_server, line + 5); else if (strncmp(line, "port=", 5) == 0) connect_set_field(&connect_port, line + 5); else if (strcmp(line, "started") == 0) { log_message(MSG_INFO, _("" "New game server requested on %s port %s\n"), connect_server, connect_port); /* The meta server is now busy creating the new game. * UGLY FIX: Wait for some time */ g_usleep(500000); connect_close_all(TRUE, FALSE); } else log_message(MSG_ERROR, _("" "Unknown message from the metaserver: %s\n"), line); break; } } } /* -------------------- get running servers info -------------------- */ static gboolean check_str_info(const gchar * line, const gchar * prefix, gchar * data) { gint len = strlen(prefix); if (strncmp(line, prefix, len) != 0) return FALSE; strncpy(data, line + len, STRARG_LEN); return TRUE; } static gboolean check_int_info(const gchar * line, const gchar * prefix, gchar * data) { gint len = strlen(prefix); if (strncmp(line, prefix, len) != 0) return FALSE; sprintf(data, "%d", atoi(line + len)); return TRUE; } static void server_end(void) { GtkTreeIter iter; if (meta_dlg) { gtk_list_store_append(meta_games_model, &iter); gtk_list_store_set(meta_games_model, &iter, C_META_HOST, server_host, C_META_PORT, server_port, C_META_HOST_SORTABLE, g_strdup_printf("%s:%s", server_host, server_port), C_META_VERSION, server_version, C_META_MAX, server_max, C_META_CUR, server_curr, C_META_TERRAIN, server_terrain, C_META_VICTORY, server_vpoints, C_META_SEVENS, server_sevenrule, C_META_MAP, server_title, -1); } } static void meta_notify(NetEvent event, G_GNUC_UNUSED void *user_data, char *line) { gchar argument[STRARG_LEN]; switch (event) { case NET_CONNECT: break; case NET_CONNECT_FAIL: /* Can't connect to the metaserver, don't show the GUI */ if (meta_dlg) gtk_widget_destroy(GTK_WIDGET(meta_dlg)); /* Close the dialog */ break; case NET_CLOSE: if (meta_mode == MODE_SIGNON) log_message(MSG_ERROR, _("Meta-server kicked us off\n")); close_waiting_box(); net_free(&ses); break; case NET_READ: switch (meta_mode) { case MODE_SIGNON: case MODE_REDIRECT: if (strncmp(line, "goto ", 5) == 0) { gchar **split_result; const gchar *port; meta_mode = MODE_REDIRECT; net_close(ses); if (metaserver_info.num_redirects++ == 10) { log_message(MSG_INFO, _("" "Too many meta-server redirects\n")); return; } split_result = g_strsplit(line, " ", 0); g_assert(split_result[0] != NULL); g_assert(!strcmp(split_result[0], "goto")); if (split_result[1]) { if (metaserver_info.server) g_free (metaserver_info. server); metaserver_info.server = g_strdup(split_result[1]); if (metaserver_info.port) g_free (metaserver_info.port); port = PIONEERS_DEFAULT_META_PORT; if (split_result[2]) port = split_result[2]; metaserver_info.port = g_strdup(port); query_meta_server (metaserver_info.server, metaserver_info.port); } else { log_message(MSG_ERROR, _("" "Bad redirect line: %s\n"), line); }; g_strfreev(split_result); break; } metaserver_info.version_major = metaserver_info.version_minor = 0; metaserver_info.can_create_games = FALSE; metaserver_info.can_send_game_settings = FALSE; if (strncmp(line, "welcome ", 8) == 0) { char *p = strstr(line, "version "); if (p) { p += 8; metaserver_info.version_major = atoi(p); p += strspn(p, "0123456789"); if (*p == '.') metaserver_info. version_minor = atoi(p + 1); } } if (metaserver_info.version_major < 1) { log_message(MSG_INFO, _("" "Meta server too old to create " "servers (version %d.%d)\n"), metaserver_info.version_major, metaserver_info.version_minor); } else { net_printf(ses, "version %s\n", META_PROTOCOL_VERSION); } if ((metaserver_info.version_major > 1) || (metaserver_info.version_major == 1 && metaserver_info.version_minor >= 1)) { net_printf(ses, "capability\n"); meta_mode = MODE_CAPABILITY; } else { net_printf(ses, metaserver_info.version_major >= 1 ? "listservers\n" : "client\n"); meta_mode = MODE_LIST; } gtk_dialog_set_response_sensitive(GTK_DIALOG (meta_dlg), META_RESPONSE_REFRESH, TRUE); break; case MODE_CAPABILITY: if (!strcmp(line, "create games")) { metaserver_info.can_create_games = TRUE; } else if (!strcmp(line, "send game settings")) { metaserver_info.can_send_game_settings = TRUE; } else if (!strcmp(line, "end")) { gtk_dialog_set_response_sensitive (GTK_DIALOG(meta_dlg), META_RESPONSE_NEW, metaserver_info.can_create_games); net_printf(ses, metaserver_info.version_major >= 1 ? "listservers\n" : "client\n"); meta_mode = MODE_LIST; } break; case MODE_LIST: if (strcmp(line, "server") == 0); /* Information will come shortly */ else if (strcmp(line, "end") == 0) { server_end(); } else if (check_str_info(line, "host=", server_host)) break; else if (check_str_info (line, "port=", server_port)) break; else if (check_str_info (line, "version=", server_version)) break; else if (check_int_info(line, "max=", server_max)) break; else if (check_int_info (line, "curr=", server_curr)) break; else if (check_str_info (line, "vpoints=", server_vpoints)) break; else if (check_str_info (line, "sevenrule=", argument)) { if (server_sevenrule) g_free(server_sevenrule); if (!strcmp(argument, "normal")) { server_sevenrule = g_strdup(_("Normal")); } else if (!strcmp (argument, "reroll first 2")) { server_sevenrule = g_strdup(_("" "Reroll on 1st 2 turns")); } else if (!strcmp(argument, "reroll all")) { server_sevenrule = g_strdup(_("Reroll all 7s")); } else { g_warning("Unknown seven rule: %s", argument); server_sevenrule = g_strdup(argument); } break; } else if (check_str_info (line, "terrain=", argument)) { if (server_terrain) g_free(server_terrain); if (!strcmp(argument, "default")) server_terrain = g_strdup(_("Default")); else if (!strcmp(argument, "random")) server_terrain = g_strdup(_("Random")); else { g_warning ("Unknown terrain type: %s", argument); server_terrain = g_strdup(argument); } break; } else if (check_str_info (line, "title=", server_title)) break; /* meta-protocol 0 compat */ else if (check_str_info (line, "map=", server_terrain)) break; else if (check_str_info (line, "comment=", server_title)) break; break; } break; } } static void query_meta_server(const gchar * server, const gchar * port) { if (metaserver_info.num_redirects > 0) log_message(MSG_INFO, _("" "Redirected to meta-server at %s, port %s\n"), server, port); show_waiting_box(_("" "Receiving a list of Pioneers servers from the meta server.\n"), server, port); ses = net_new(meta_notify, NULL); if (net_connect(ses, server, port)) meta_mode = MODE_SIGNON; else { net_free(&ses); close_waiting_box(); } } /* -------------------- create server dialog -------------------- */ static void player_change_cb(GameSettings * gs, G_GNUC_UNUSED gpointer user_data) { guint players; guint ai_players; GtkSpinButton *ai_spin; ai_spin = GTK_SPIN_BUTTON(aiplayers_spin); players = game_settings_get_players(gs); ai_players = gtk_spin_button_get_value_as_int(ai_spin); gtk_spin_button_set_range(ai_spin, 0, players - 1); if (ai_players >= players) gtk_spin_button_set_value(ai_spin, players - 1); } static GtkWidget *build_create_interface(void) { GtkWidget *vbox; GtkWidget *label; GtkObject *adj; guint row; vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 3); select_game = select_game_new(); gtk_widget_show(select_game); gtk_box_pack_start(GTK_BOX(vbox), select_game, FALSE, FALSE, 3); /* The meta server does not send information about the game, * so don't adjust the game settings when another game is chosen. g_signal_connect(G_OBJECT(select_game), "activate", G_CALLBACK(game_select_cb), NULL); */ if (!metaserver_info.can_send_game_settings) { label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), _("Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself.")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); } game_settings = game_settings_new(FALSE); gtk_widget_show(game_settings); gtk_box_pack_start(GTK_BOX(vbox), game_settings, FALSE, FALSE, 3); /* Dynamically adjust the maximum number of AI's */ g_signal_connect(G_OBJECT(game_settings), "change-players", G_CALLBACK(player_change_cb), NULL); gtk_table_get_size(GTK_TABLE(game_settings), &row, NULL); /* Label */ label = gtk_label_new(_("Number of computer players")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(game_settings), label, 0, 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); adj = gtk_adjustment_new(0, 0, game_settings_get_players(GAMESETTINGS (game_settings)) - 1, 1, 4, 0); aiplayers_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(aiplayers_spin), TRUE); gtk_widget_show(aiplayers_spin); gtk_entry_set_alignment(GTK_ENTRY(aiplayers_spin), 1.0); gtk_table_attach(GTK_TABLE(game_settings), aiplayers_spin, 1, 2, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_tooltip_text(aiplayers_spin, /* Tooltip */ _("The number of computer players")); game_rules = game_rules_new_metaserver(); gtk_widget_show(game_rules); gtk_box_pack_start(GTK_BOX(vbox), game_rules, FALSE, FALSE, 3); get_meta_server_games_types(metaserver_info.server, metaserver_info.port); return vbox; } static void create_server_dlg_cb(GtkDialog * dlg, gint arg1, G_GNUC_UNUSED gpointer user_data) { GameSettings *gs = GAMESETTINGS(game_settings); SelectGame *sg = SELECTGAME(select_game); GameRules *gr = GAMERULES(game_rules); switch (arg1) { case GTK_RESPONSE_OK: log_message(MSG_INFO, _("Requesting new game server\n")); cfg_terrain = game_rules_get_random_terrain(gr); cfg_num_players = game_settings_get_players(gs); cfg_victory_points = game_settings_get_victory_points(gs); cfg_sevens_rule = game_rules_get_sevens_rule(gr); cfg_ai_players = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON (aiplayers_spin)); cfg_gametype = select_game_get_active(sg); create_ses = net_new(meta_create_notify, NULL); if (net_connect (create_ses, metaserver_info.server, metaserver_info.port)) create_mode = CREATE_MODE_SIGNON; else net_free(&create_ses); break; case GTK_RESPONSE_CANCEL: default: /* For the compiler */ gtk_widget_destroy(GTK_WIDGET(dlg)); break; }; } /** Launch the server gtk. */ static void launch_server_gtk(G_GNUC_UNUSED GtkWidget * widget, G_GNUC_UNUSED GtkWindow * parent) { gchar *child_argv[3]; GSpawnFlags flags = G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL; GError *error = NULL; gint i; child_argv[0] = g_strdup(PIONEERS_SERVER_GTK_PATH); child_argv[1] = g_strdup(PIONEERS_SERVER_GTK_PATH); child_argv[2] = NULL; if (!g_spawn_async(NULL, child_argv, NULL, flags, NULL, NULL, NULL, &error)) { /* Error message when program %1 is started, reason is %2 */ log_message(MSG_ERROR, _("Error starting %s: %s\n"), PIONEERS_SERVER_GTK_PATH, error->message); g_error_free(error); } for (i = 0; child_argv[i] != NULL; i++) g_free(child_argv[i]); } static void create_server_dlg(G_GNUC_UNUSED GtkWidget * widget, GtkWindow * parent) { GtkWidget *dlg_vbox; GtkWidget *vbox; if (cserver_dlg) { gtk_window_present(GTK_WINDOW(cserver_dlg)); return; } set_meta_serverinfo(); cserver_dlg = /* Dialog caption */ gtk_dialog_new_with_buttons(_("Create a Public Game"), parent, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(G_OBJECT(cserver_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &cserver_dlg); gtk_widget_realize(cserver_dlg); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(cserver_dlg)); gtk_widget_show(dlg_vbox); vbox = build_create_interface(); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); g_signal_connect(G_OBJECT(cserver_dlg), "response", G_CALLBACK(create_server_dlg_cb), NULL); gtk_widget_show(cserver_dlg); } /* -------------------- select server dialog -------------------- */ static gint meta_click_cb(G_GNUC_UNUSED GtkWidget * widget, G_GNUC_UNUSED GdkEventButton * event, G_GNUC_UNUSED gpointer user_data) { if (event->type == GDK_2BUTTON_PRESS) { gtk_dialog_response(GTK_DIALOG(meta_dlg), GTK_RESPONSE_OK); }; return FALSE; } static void meta_select_cb(G_GNUC_UNUSED GtkTreeSelection * selection, G_GNUC_UNUSED gpointer user_data) { gtk_dialog_set_response_sensitive(GTK_DIALOG(meta_dlg), GTK_RESPONSE_OK, TRUE); } static void meta_dlg_cb(GtkDialog * dlg, gint arg1, G_GNUC_UNUSED gpointer userdata) { GtkTreePath *path; GtkTreeViewColumn *column; GtkTreeIter iter; gchar *host; gchar *port; switch (arg1) { case META_RESPONSE_REFRESH: /* Refresh the list */ gtk_list_store_clear(meta_games_model); metaserver_info.num_redirects = 0; query_meta_server(metaserver_info.server, metaserver_info.port); break; case META_RESPONSE_NEW: /* Add a server */ create_server_dlg(NULL, GTK_WINDOW(dlg)); break; case GTK_RESPONSE_OK: /* Select this server */ gtk_tree_view_get_cursor(GTK_TREE_VIEW(meta_games_view), &path, &column); if (path != NULL) { gtk_tree_model_get_iter(GTK_TREE_MODEL (meta_games_model), &iter, path); gtk_tree_model_get(GTK_TREE_MODEL (meta_games_model), &iter, C_META_HOST, &host, C_META_PORT, &port, -1); connect_set_field(&connect_server, host); connect_set_field(&connect_port, port); g_free(host); g_free(port); gtk_tree_path_free(path); connect_close_all(TRUE, TRUE); } break; case GTK_RESPONSE_CANCEL: /* Cancel */ default: gtk_widget_destroy(GTK_WIDGET(dlg)); break; } } static void set_meta_serverinfo(void) { gchar *meta_tmp; meta_tmp = metaserver_get(METASERVER(meta_server_entry)); metaserver_info.server = meta_tmp; /* Take-over of the pointer */ if (!metaserver_info.port) metaserver_info.port = g_strdup(PIONEERS_DEFAULT_META_PORT); } static void create_meta_dlg(G_GNUC_UNUSED GtkWidget * widget, GtkWidget * parent) { GtkWidget *dlg_vbox; GtkWidget *vbox; GtkWidget *scroll_win; GtkTreeViewColumn *column; GtkCellRenderer *renderer; set_meta_serverinfo(); if (meta_dlg != NULL) { if (ses == NULL) { metaserver_info.num_redirects = 0; query_meta_server(metaserver_info.server, metaserver_info.port); } return; } if (meta_dlg) { gtk_window_present(GTK_WINDOW(meta_dlg)); return; } /* Dialog caption */ meta_dlg = gtk_dialog_new_with_buttons(_("Join a Public Game"), GTK_WINDOW(parent), 0, GTK_STOCK_REFRESH, META_RESPONSE_REFRESH, /* Button text */ _("_New Remote Game"), META_RESPONSE_NEW, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(G_OBJECT(meta_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &meta_dlg); g_signal_connect(G_OBJECT(meta_dlg), "response", G_CALLBACK(meta_dlg_cb), NULL); gtk_widget_realize(meta_dlg); gtk_widget_set_tooltip_text(gui_get_dialog_button (GTK_DIALOG(meta_dlg), 0), /* Tooltip */ _("Refresh the list of games")); gtk_widget_set_tooltip_text(gui_get_dialog_button (GTK_DIALOG(meta_dlg), 1), /* Tooltip */ _("" "Create a new public game at the meta server")); gtk_widget_set_tooltip_text(gui_get_dialog_button (GTK_DIALOG(meta_dlg), 2), /* Tooltip */ _("Don't join a public game")); gtk_widget_set_tooltip_text(gui_get_dialog_button (GTK_DIALOG(meta_dlg), 3), /* Tooltip */ _("Join the selected game")); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(meta_dlg)); gtk_widget_show(dlg_vbox); vbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); server_status = gtk_label_new(""); gtk_widget_show(server_status); gtk_box_pack_start(GTK_BOX(vbox), server_status, FALSE, TRUE, 0); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_IN); gtk_widget_show(scroll_win); gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0); meta_games_model = gtk_list_store_new(META_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); meta_games_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(meta_games_model)); gtk_widget_show(meta_games_view); gtk_container_add(GTK_CONTAINER(scroll_win), meta_games_view); gtk_widget_set_tooltip_text(meta_games_view, /* Tooltip */ _("Select a game to join")); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Map Name"), gtk_cell_renderer_text_new (), "text", C_META_MAP, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_MAP); /* Tooltip for column 'Map Name' */ set_tooltip_on_column(column, _("Name of the game")); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "xalign", 1.0f, NULL); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Curr"), renderer, "text", C_META_CUR, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_CUR); /* Tooltip for column 'Curr' */ set_tooltip_on_column(column, _("Number of players in the game")); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "xalign", 1.0f, NULL); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Max"), renderer, "text", C_META_MAX, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_MAX); /* Tooltip for column 'Max' */ set_tooltip_on_column(column, _("Maximum players for the game")); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Terrain"), gtk_cell_renderer_text_new (), "text", C_META_TERRAIN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_TERRAIN); /* Tooltip for column 'Terrain' */ set_tooltip_on_column(column, _("Random of default terrain")); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "xalign", 1.0f, NULL); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Vic. Points"), renderer, "text", C_META_VICTORY, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_VICTORY); /* Tooltip for column 'Vic. Points' */ set_tooltip_on_column(column, _("Points needed to win")); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Sevens Rule"), gtk_cell_renderer_text_new (), "text", C_META_SEVENS, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_SEVENS); /* Tooltip for column 'Sevens Rule' */ set_tooltip_on_column(column, _("Sevens rule")); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Host"), gtk_cell_renderer_text_new (), "text", C_META_HOST, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_HOST_SORTABLE); /* Tooltip for column 'Host' */ set_tooltip_on_column(column, _("Host of the game")); renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "xalign", 1.0f, NULL); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Port"), renderer, "text", C_META_PORT, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_HOST_SORTABLE); /* Tooltip for column 'Port' */ set_tooltip_on_column(column, _("Port of the game")); column = /* Column name */ gtk_tree_view_column_new_with_attributes(_("Version"), gtk_cell_renderer_text_new (), "text", C_META_VERSION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(meta_games_view), column); gtk_tree_view_column_set_sort_column_id(column, C_META_VERSION); /* Tooltip for column 'Version' */ set_tooltip_on_column(column, _("Version of the host")); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (meta_games_model), C_META_HOST_SORTABLE, GTK_SORT_ASCENDING); /* Register double-click */ g_signal_connect(G_OBJECT(meta_games_view), "button_press_event", G_CALLBACK(meta_click_cb), NULL); g_signal_connect(G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW(meta_games_view))), "changed", G_CALLBACK(meta_select_cb), NULL); /* This button will be enabled when a game is selected */ gtk_dialog_set_response_sensitive(GTK_DIALOG(meta_dlg), GTK_RESPONSE_OK, FALSE); /* These buttons will be enabled when the metaserver has responded */ gtk_dialog_set_response_sensitive(GTK_DIALOG(meta_dlg), META_RESPONSE_NEW, FALSE); gtk_dialog_set_response_sensitive(GTK_DIALOG(meta_dlg), META_RESPONSE_REFRESH, FALSE); gtk_widget_show(meta_dlg); metaserver_info.num_redirects = 0; query_meta_server(metaserver_info.server, metaserver_info.port); /* Workaround: Set the size of the widget as late as possible, to avoid a strange display */ gtk_widget_set_size_request(scroll_win, -1, 150); } static void connect_dlg_cb(G_GNUC_UNUSED GtkDialog * dlg, G_GNUC_UNUSED gint arg1, G_GNUC_UNUSED gpointer userdata) { connect_close_all(FALSE, FALSE); } #ifdef HAVE_AVAHI static void connect_avahi_cb(G_GNUC_UNUSED GtkWidget * widget, GtkWidget * avahibrowser_entry) { gchar *server = avahibrowser_get_server(AVAHIBROWSER(avahibrowser_entry)); gchar *port = avahibrowser_get_port(AVAHIBROWSER(avahibrowser_entry)); connect_set_field(&connect_server, server); connect_set_field(&connect_port, port); g_free(server); g_free(port); // connect connect_close_all(TRUE, TRUE); } #endif void connect_create_dlg(void) { GtkWidget *dlg_vbox; GtkWidget *table; GtkWidget *lbl; GtkWidget *hbox; GtkWidget *btn; GtkWidget *sep; #ifdef HAVE_AVAHI GtkWidget *avahibrowser_entry; #endif // HAVE_AVAHI gchar *fullname; gchar *name; gint row; if (connect_dlg) { gtk_window_present(GTK_WINDOW(connect_dlg)); return; } g_signal_connect(requested_name, "changed", G_CALLBACK(connect_name_change_cb), NULL); /* Dialog caption */ connect_dlg = gtk_dialog_new_with_buttons(_("Start a New Game"), GTK_WINDOW(app_window), 0, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); g_signal_connect(G_OBJECT(connect_dlg), "response", G_CALLBACK(connect_dlg_cb), NULL); g_signal_connect(G_OBJECT(connect_dlg), "destroy", G_CALLBACK(connect_dlg_destroyed), &connect_dlg); gtk_widget_realize(connect_dlg); gdk_window_set_functions(gtk_widget_get_window(connect_dlg), GDK_FUNC_MOVE | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(connect_dlg)); gtk_widget_show(dlg_vbox); table = gtk_table_new(4, 3, FALSE); row = 0; gtk_widget_show(table); gtk_box_pack_start(GTK_BOX(dlg_vbox), table, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 5); /* Label */ lbl = gtk_label_new(_("Player name")); gtk_widget_show(lbl); gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); name = notifying_string_get(requested_name); name_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(name_entry), MAX_NAME_LENGTH); gtk_widget_show(name_entry); gtk_entry_set_text(GTK_ENTRY(name_entry), name); g_free(name); gtk_table_attach(GTK_TABLE(table), name_entry, 1, 2, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); /* Tooltip */ gtk_widget_set_tooltip_text(name_entry, _("Enter your name")); /* Check button */ spectator_toggle = gtk_check_button_new_with_label(_("Spectator")); gtk_widget_show(spectator_toggle); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(spectator_toggle), connect_spectator); gtk_table_attach(GTK_TABLE(table), spectator_toggle, 2, 3, row, row + 1, 0, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_tooltip_text(spectator_toggle, /* Tooltip for checkbox Spectator */ _ ("Check if you want to be a spectator")); row++; sep = gtk_hseparator_new(); gtk_widget_show(sep); gtk_table_attach(GTK_TABLE(table), sep, 0, 3, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 6); row++; #ifdef HAVE_AVAHI /* Label */ lbl = gtk_label_new(_("Avahi")); gtk_widget_show(lbl); gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); /* Button */ btn = gtk_button_new_with_label(_("Join")); gtk_widget_show(btn); gtk_widget_set_tooltip_text(btn, /* Tooltip for button Join */ _("" "Join an automatically discovered game")); gtk_table_attach(GTK_TABLE(table), btn, 2, 3, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); avahibrowser_entry = avahibrowser_new(btn); gtk_widget_show(avahibrowser_entry); gtk_table_attach(GTK_TABLE(table), avahibrowser_entry, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); row++; g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(connect_avahi_cb), avahibrowser_entry); // enable avahi // storing the pointer to this widget for later use avahi_register(AVAHIBROWSER(avahibrowser_entry)); sep = gtk_hseparator_new(); gtk_widget_show(sep); gtk_table_attach(GTK_TABLE(table), sep, 0, 3, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 6); row++; #endif // HAVE_AVAHI /* Label */ lbl = gtk_label_new(_("Meta server")); gtk_widget_show(lbl); gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); meta_server_entry = metaserver_new(); gtk_widget_show(meta_server_entry); gtk_table_attach(GTK_TABLE(table), meta_server_entry, 1, 3, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); metaserver_add(METASERVER(meta_server_entry), metaserver_info.server); row++; hbox = gtk_hbox_new(FALSE, 3); gtk_widget_show(hbox); gtk_table_attach(GTK_TABLE(table), hbox, 0, 3, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 3); row++; /* Button */ btn = gtk_button_new_with_label(_("Join Public Game")); gtk_widget_show(btn); gtk_box_pack_start(GTK_BOX(hbox), btn, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(create_meta_dlg), app_window); /* Tooltip */ gtk_widget_set_tooltip_text(btn, _("Join a public game")); gtk_widget_set_can_default(btn, TRUE); gtk_widget_grab_default(btn); /* Button */ btn = gtk_button_new_with_label(_("Create Game")); gtk_widget_show(btn); gtk_box_pack_start(GTK_BOX(hbox), btn, TRUE, TRUE, 0); /* Tooltip */ gtk_widget_set_tooltip_text(btn, _("Create a game")); g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(launch_server_gtk), app_window); fullname = g_find_program_in_path(PIONEERS_SERVER_GTK_PATH); if (fullname) { g_free(fullname); } else { gtk_widget_set_sensitive(GTK_WIDGET(btn), FALSE); } /* Button */ btn = gtk_button_new_with_label(_("Join Private Game")); gtk_widget_show(btn); gtk_box_pack_start(GTK_BOX(hbox), btn, TRUE, TRUE, 0); /* Tooltip */ gtk_widget_set_tooltip_text(btn, _("Join a private game")); g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(connect_private_dialog), app_window); gtk_entry_set_activates_default(GTK_ENTRY(name_entry), TRUE); gtk_widget_show(connect_dlg); gtk_widget_grab_focus(name_entry); } /* ------------ Join a private game dialog ------------------- */ static void update_recent_servers_list(void) { gchar keyname1[50], keyname2[50]; gchar *temp_name, *temp_port; gchar *cur_name, *cur_port; gchar *conn_name, *conn_port; gboolean default_used; gboolean done; gint i; done = FALSE; i = 0; conn_name = g_strdup(connect_get_server()); conn_port = g_strdup(connect_get_port()); temp_name = g_strdup(conn_name); temp_port = g_strdup(conn_port); do { sprintf(keyname1, "favorites/server%dname=", i); sprintf(keyname2, "favorites/server%dport=", i); cur_name = g_strdup(config_get_string(keyname1, &default_used)); cur_port = g_strdup(config_get_string(keyname2, &default_used)); if (temp_name) { sprintf(keyname1, "favorites/server%dname", i); sprintf(keyname2, "favorites/server%dport", i); config_set_string(keyname1, temp_name); config_set_string(keyname2, temp_port); } else { g_free(cur_name); g_free(cur_port); break; } if (strlen(cur_name) == 0) { g_free(cur_name); g_free(cur_port); break; } g_free(temp_name); g_free(temp_port); if (!strcmp(cur_name, conn_name) && !strcmp(cur_port, conn_port)) { temp_name = NULL; temp_port = NULL; } else { temp_name = g_strdup(cur_name); temp_port = g_strdup(cur_port); } i++; if (i > PRIVATE_GAME_HISTORY_SIZE) { done = TRUE; } g_free(cur_name); g_free(cur_port); } while (!done); g_free(temp_name); g_free(temp_port); g_free(conn_name); g_free(conn_port); } static void host_list_select_cb(GtkWidget * widget, gpointer user_data) { GPtrArray *host_entries = user_data; gint idx; gchar *entry; gchar **strs; idx = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); entry = g_ptr_array_index(host_entries, idx); strs = g_strsplit(entry, ":", 2); connect_set_field(&connect_server, strs[0]); connect_set_field(&connect_port, strs[1]); gtk_entry_set_text(GTK_ENTRY(host_entry), connect_server); gtk_entry_set_text(GTK_ENTRY(port_entry), connect_port); g_strfreev(strs); } static void connect_private_dlg_cb(GtkDialog * dlg, gint arg1, G_GNUC_UNUSED gpointer user_data) { switch (arg1) { case GTK_RESPONSE_OK: connect_set_field(&connect_server, gtk_entry_get_text(GTK_ENTRY (host_entry))); connect_set_field(&connect_port, gtk_entry_get_text(GTK_ENTRY (port_entry))); update_recent_servers_list(); config_set_string("connect/server", connect_server); config_set_string("connect/port", connect_port); connect_close_all(TRUE, TRUE); break; case GTK_RESPONSE_CANCEL: default: /* For the compiler */ gtk_widget_destroy(GTK_WIDGET(dlg)); break; }; } static void connect_private_dialog(G_GNUC_UNUSED GtkWidget * widget, GtkWindow * parent) { GtkWidget *dlg_vbox; GtkWidget *table; GtkWidget *lbl; GtkWidget *hbox; GtkWidget *host_list; GPtrArray *host_entries; gint i; gchar *host_name, *host_port, *host_name_port, temp_str[50]; gboolean default_returned; if (connect_private_dlg) { gtk_window_present(GTK_WINDOW(connect_private_dlg)); return; } connect_private_dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("" "Join a private game"), GTK_WINDOW (parent), 0, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(connect_private_dlg), GTK_RESPONSE_OK); g_signal_connect(G_OBJECT(connect_private_dlg), "response", G_CALLBACK(connect_private_dlg_cb), NULL); g_signal_connect(G_OBJECT(connect_private_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &connect_private_dlg); gtk_widget_realize(connect_private_dlg); gdk_window_set_functions(gtk_widget_get_window (connect_private_dlg), GDK_FUNC_MOVE | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(connect_private_dlg)); gtk_widget_show(dlg_vbox); table = gtk_table_new(3, 2, FALSE); gtk_widget_show(table); gtk_box_pack_start(GTK_BOX(dlg_vbox), table, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 5); /* Label */ lbl = gtk_label_new(_("Server host")); gtk_widget_show(lbl); gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, 0, 1, GTK_FILL, GTK_EXPAND, 0, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); host_entry = gtk_entry_new(); gtk_widget_show(host_entry); gtk_table_attach(GTK_TABLE(table), host_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_entry_set_text(GTK_ENTRY(host_entry), connect_server); gtk_widget_set_tooltip_text(host_entry, /* Tooltip */ _("Name of the host of the game")); connect_set_field(&connect_server, connect_server); /* Label */ lbl = gtk_label_new(_("Server port")); gtk_widget_show(lbl); gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, 1, 2, GTK_FILL, GTK_EXPAND, 0, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); hbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox); gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 1, 2, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); port_entry = gtk_entry_new(); gtk_widget_show(port_entry); gtk_box_pack_start(GTK_BOX(hbox), port_entry, FALSE, TRUE, 0); gtk_entry_set_text(GTK_ENTRY(port_entry), connect_port); gtk_widget_set_tooltip_text(port_entry, /* Tooltip */ _("Port of the host of the game")); connect_set_field(&connect_port, connect_port); host_list = gtk_combo_box_text_new(); host_entries = g_ptr_array_new(); gtk_widget_show(host_list); for (i = 0; i < PRIVATE_GAME_HISTORY_SIZE; i++) { sprintf(temp_str, "favorites/server%dname=", i); host_name = config_get_string(temp_str, &default_returned); if (default_returned || !strlen(host_name)) { g_free(host_name); break; } sprintf(temp_str, "favorites/server%dport=", i); host_port = config_get_string(temp_str, &default_returned); if (default_returned || !strlen(host_port)) { g_free(host_name); g_free(host_port); break; } host_name_port = g_strconcat(host_name, ":", host_port, NULL); g_free(host_name); g_free(host_port); g_ptr_array_add(host_entries, host_name_port); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT (host_list), host_name_port); } if (i > 0) gtk_combo_box_set_active(GTK_COMBO_BOX(host_list), 0); g_signal_connect(G_OBJECT(host_list), "changed", G_CALLBACK(host_list_select_cb), host_entries); gtk_table_attach(GTK_TABLE(table), host_list, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); /* Tooltip */ gtk_widget_set_tooltip_text(host_list, _("Recent games")); /* Label */ lbl = gtk_label_new(_("Recent games")); gtk_widget_show(lbl); gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, 2, 3, GTK_FILL, GTK_EXPAND, 0, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); gtk_entry_set_activates_default(GTK_ENTRY(host_entry), TRUE); gtk_entry_set_activates_default(GTK_ENTRY(port_entry), TRUE); gtk_widget_show(connect_private_dlg); } pioneers-14.1/client/gtk/develop.c0000644000175000017500000001767211461571231014067 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "common_gtk.h" /** Reorder the development types: * Road building * Monopoly * Year of Plenty * Soldier * Victory points */ static gint develtype_to_sortorder(DevelType type) { switch (type) { case DEVEL_ROAD_BUILDING: return 0; case DEVEL_MONOPOLY: return 1; case DEVEL_YEAR_OF_PLENTY: return 2; case DEVEL_SOLDIER: return 10; case DEVEL_CHAPEL: return 20; case DEVEL_UNIVERSITY: return 21; case DEVEL_GOVERNORS_HOUSE: return 22; case DEVEL_LIBRARY: return 23; case DEVEL_MARKET: return 24; default: g_assert_not_reached(); return 99; }; }; enum { DEVELOP_COLUMN_TYPE, /**< Development card type */ DEVELOP_COLUMN_ORDER, /**< Sort order */ DEVELOP_COLUMN_NAME, /**< Name of the card */ DEVELOP_COLUMN_DESCRIPTION, /**< Description of the card */ DEVELOP_COLUMN_AMOUNT, /**< Amount of the cards */ DEVELOP_COLUMN_LAST }; static GtkListStore *store; /**< The data for the GUI */ static gint selected_card_idx; /**< currently selected development card */ gint develop_current_idx(void) { return selected_card_idx; } static gint develop_click_cb(G_GNUC_UNUSED GtkWidget * widget, G_GNUC_UNUSED GdkEventButton * event, gpointer play_develop_btn) { if (event->type == GDK_2BUTTON_PRESS) { if (can_play_develop(develop_current_idx())) gtk_button_clicked(GTK_BUTTON(play_develop_btn)); }; return FALSE; } static void develop_select_cb(GtkTreeSelection * selection, G_GNUC_UNUSED gpointer user_data) { GtkTreeIter iter; GtkTreeModel *model; g_assert(selection != NULL); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { DevelType type; gtk_tree_model_get(model, &iter, DEVELOP_COLUMN_TYPE, &type, -1); selected_card_idx = deck_card_oldest_card(get_devel_deck(), type); } else selected_card_idx = -1; frontend_gui_update(); } GtkWidget *develop_build_page(void) { GtkWidget *label; GtkWidget *vbox; GtkWidget *scroll_win; GtkWidget *bbox; GtkWidget *alignment; GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkWidget *play_develop_btn; GtkWidget *develop_list; vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 3, 3); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), /* Caption for list of bought development cards */ _("Development cards")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_container_add(GTK_CONTAINER(alignment), label); /* Create model */ store = gtk_list_store_new(DEVELOP_COLUMN_LAST, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_size_request(scroll_win, -1, 100); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_IN); gtk_widget_show(scroll_win); gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); /* Create graphical representation of the model */ develop_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(develop_list), DEVELOP_COLUMN_DESCRIPTION); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(develop_list), FALSE); gtk_container_add(GTK_CONTAINER(scroll_win), develop_list); /* First create the button, it is used as user_data for the listview */ play_develop_btn = gtk_button_new_with_label( /* Button text: play development card */ _("" "Play Card")); /* Register double-click */ g_signal_connect(G_OBJECT(develop_list), "button_press_event", G_CALLBACK(develop_click_cb), play_develop_btn); g_signal_connect(G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW(develop_list))), "changed", G_CALLBACK(develop_select_cb), NULL); /* Now create columns */ column = gtk_tree_view_column_new_with_attributes( /* Not translated: it is not visible */ "Development Cards", gtk_cell_renderer_text_new (), "text", DEVELOP_COLUMN_NAME, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(develop_list), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( /* Not translated: it is not visible */ "Amount", renderer, "text", DEVELOP_COLUMN_AMOUNT, NULL); g_object_set(renderer, "xalign", 1.0f, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(develop_list), column); gtk_widget_show(develop_list); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); frontend_gui_register(play_develop_btn, GUI_PLAY_DEVELOP, "clicked"); gtk_widget_show(play_develop_btn); gtk_container_add(GTK_CONTAINER(bbox), play_develop_btn); selected_card_idx = -1; return vbox; } static void update_model(GtkTreeIter * iter, DevelType type) { gchar amount_string[16]; gint amount; /* Only show the amount when you have more than one */ amount = deck_card_amount(get_devel_deck(), type); if (amount == 1) amount_string[0] = '\0'; else snprintf(amount_string, sizeof(amount_string), "%d", amount); gtk_list_store_set(store, iter, DEVELOP_COLUMN_NAME, get_devel_name(type), DEVELOP_COLUMN_DESCRIPTION, get_devel_description(type), DEVELOP_COLUMN_AMOUNT, amount_string, DEVELOP_COLUMN_TYPE, type, DEVELOP_COLUMN_ORDER, develtype_to_sortorder(type), -1); } void frontend_bought_develop(DevelType type) { GtkTreeIter iter; enum TFindResult found; found = find_integer_in_tree(GTK_TREE_MODEL(store), &iter, DEVELOP_COLUMN_ORDER, develtype_to_sortorder(type)); switch (found) { case FIND_MATCH_EXACT: /* Don't add new items */ break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(store, &iter, &iter); break; case FIND_NO_MATCH: gtk_list_store_append(store, &iter); }; update_model(&iter, type); } void frontend_played_develop(gint player_num, G_GNUC_UNUSED gint card_idx, DevelType type) { GtkTreeIter iter; enum TFindResult found; if (player_num == my_player_num()) { found = find_integer_in_tree(GTK_TREE_MODEL(store), &iter, DEVELOP_COLUMN_ORDER, develtype_to_sortorder(type)); g_assert(found == FIND_MATCH_EXACT); if (deck_card_amount(get_devel_deck(), type) == 0) gtk_list_store_remove(store, &iter); else update_model(&iter, type); }; } void develop_reset(void) { selected_card_idx = -1; gtk_list_store_clear(store); } pioneers-14.1/client/gtk/discard.c0000644000175000017500000002102511657430613014032 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "resource-table.h" #include "gtkbugs.h" #include "common_gtk.h" enum { DISCARD_COLUMN_PLAYER_ICON, /**< Player icon */ DISCARD_COLUMN_PLAYER_NUM, /**< Internal: player number */ DISCARD_COLUMN_PLAYER_NAME, /**< Player name */ DISCARD_COLUMN_AMOUNT, /**< The amount to discard */ DISCARD_COLUMN_LAST }; static GtkListStore *discard_store; /**< the discard data */ static GtkWidget *discard_widget; /**< the discard widget */ static struct { GtkWidget *dlg; GtkWidget *resource_widget; } discard; /* Local function prototypes */ static GtkWidget *discard_create_dlg(gint num); gboolean can_discard(void) { if (discard.dlg == NULL) return FALSE; return resource_table_is_total_reached(RESOURCETABLE (discard.resource_widget)); } static void amount_changed_cb(G_GNUC_UNUSED ResourceTable * rt, G_GNUC_UNUSED gpointer user_data) { frontend_gui_update(); } static void button_destroyed(G_GNUC_UNUSED GtkWidget * w, gpointer num) { if (callback_mode == MODE_DISCARD) discard_create_dlg(GPOINTER_TO_INT(num)); } static GtkWidget *discard_create_dlg(gint num) { GtkWidget *dlg_vbox; GtkWidget *vbox; gchar *text; discard.dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("" "Discard Resources"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(G_OBJECT(discard.dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &discard.dlg); gtk_widget_realize(discard.dlg); /* Disable close */ gdk_window_set_functions(gtk_widget_get_window(discard.dlg), GDK_FUNC_ALL | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(discard.dlg)); gtk_widget_show(dlg_vbox); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); text = g_strdup_printf(ngettext("You must discard %d resource", "You must discard %d resources", num), num); discard.resource_widget = resource_table_new(text, RESOURCE_TABLE_LESS_IN_HAND, FALSE, TRUE); g_free(text); resource_table_set_total(RESOURCETABLE(discard.resource_widget), /* Label */ _("Total discards"), num); gtk_widget_show(discard.resource_widget); gtk_box_pack_start(GTK_BOX(vbox), discard.resource_widget, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(discard.resource_widget), "change", G_CALLBACK(amount_changed_cb), NULL); frontend_gui_register(gui_get_dialog_button (GTK_DIALOG(discard.dlg), 0), GUI_DISCARD, "clicked"); /* This _must_ be after frontend_gui_register, otherwise the * regeneration of the button happens before the destruction, which * results in an incorrectly sensitive OK button. */ g_signal_connect(gui_get_dialog_button(GTK_DIALOG(discard.dlg), 0), "destroy", G_CALLBACK(button_destroyed), GINT_TO_POINTER(num)); gtk_widget_show(discard.dlg); frontend_gui_update(); return discard.dlg; } void discard_get_list(gint * discards) { if (discard.dlg != NULL) resource_table_get_amount(RESOURCETABLE (discard.resource_widget), discards); else memset(discards, 0, sizeof(discards)); } void discard_player_did(gint player_num) { GtkTreeIter iter; enum TFindResult found; /* check if the player was in the list. If not, it is not an error. * That happens if the player auto-discards. */ found = find_integer_in_tree(GTK_TREE_MODEL(discard_store), &iter, DISCARD_COLUMN_PLAYER_NUM, player_num); if (found == FIND_MATCH_EXACT) { gtk_list_store_remove(discard_store, &iter); if (player_num == my_player_num()) { gtk_widget_destroy(discard.dlg); discard.dlg = NULL; } } } void discard_player_must(gint player_num, gint num) { GtkTreeIter iter; GdkPixbuf *pixbuf; enum TFindResult found; /* Search for a place to add information about the player */ found = find_integer_in_tree(GTK_TREE_MODEL(discard_store), &iter, DISCARD_COLUMN_PLAYER_NUM, player_num); switch (found) { case FIND_NO_MATCH: gtk_list_store_append(discard_store, &iter); break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(discard_store, &iter, &iter); break; case FIND_MATCH_EXACT: break; default: g_error("unknown case in discard_player_must"); }; pixbuf = player_create_icon(discard_widget, player_num, TRUE); gtk_list_store_set(discard_store, &iter, DISCARD_COLUMN_PLAYER_ICON, pixbuf, DISCARD_COLUMN_PLAYER_NUM, player_num, DISCARD_COLUMN_PLAYER_NAME, player_name(player_num, TRUE), DISCARD_COLUMN_AMOUNT, num, -1); g_object_unref(pixbuf); if (player_num != my_player_num()) return; discard_create_dlg(num); } void discard_begin(void) { gtk_list_store_clear(GTK_LIST_STORE(discard_store)); gui_discard_show(); } void discard_end(void) { if (discard.dlg) { gtk_widget_destroy(discard.dlg); discard.dlg = NULL; } gui_discard_hide(); } GtkWidget *discard_build_page(void) { GtkWidget *vbox; GtkWidget *label; GtkWidget *alignment; GtkWidget *scroll_win; GtkCellRenderer *renderer; GtkTreeViewColumn *column; vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 3, 3); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), /* Caption for list of player that must discard cards */ _("Waiting for players to discard")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_container_add(GTK_CONTAINER(alignment), label); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_IN); gtk_widget_show(scroll_win); gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); discard_store = gtk_list_store_new(DISCARD_COLUMN_LAST, GDK_TYPE_PIXBUF, /* player icon */ G_TYPE_INT, /* player number */ G_TYPE_STRING, /* text */ G_TYPE_INT); /* amount to discard */ discard_widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(discard_store)); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_pixbuf_new (), "pixbuf", DISCARD_COLUMN_PLAYER_ICON, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(discard_widget), column); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_text_new (), "text", DISCARD_COLUMN_PLAYER_NAME, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(discard_widget), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("", renderer, "text", DISCARD_COLUMN_AMOUNT, NULL); g_object_set(renderer, "xalign", 1.0f, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(discard_widget), column); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(discard_widget), FALSE); gtk_widget_show(discard_widget); gtk_container_add(GTK_CONTAINER(scroll_win), discard_widget); return vbox; } pioneers-14.1/client/gtk/frontend.c0000644000175000017500000001235411653247721014247 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "gtkbugs.h" #include static const int MAX_NUMBER_OF_WIDGETS_PER_EVENT = 2; GHashTable *frontend_widgets; gboolean frontend_waiting_for_network; static void set_sensitive(G_GNUC_UNUSED void *key, GuiWidgetState * gui, G_GNUC_UNUSED void *user_data) { if (gui->destroy_only) /* Do not modify sensitivity on destroy only events */ return; if (frontend_waiting_for_network) gui->next = FALSE; if (gui->widget != NULL && gui->next != gui->current) { if (GTK_IS_ACTION(gui->widget)) action_set_sensitive(GTK_ACTION(gui->widget), gui->next); else widget_set_sensitive(gui->widget, gui->next); } if (gui->next != gui->current) { switch (gui->id) { case GUI_ROAD: guimap_single_click_set_road_mask(gui->next); break; case GUI_SHIP: guimap_single_click_set_ship_mask(gui->next); break; case GUI_BRIDGE: guimap_single_click_set_bridge_mask(gui->next); break; case GUI_SETTLEMENT: guimap_single_click_set_settlement_mask(gui->next); break; case GUI_CITY: guimap_single_click_set_city_mask(gui->next); break; case GUI_CITY_WALL: guimap_single_click_set_city_wall_mask(gui->next); break; case GUI_MOVE_SHIP: guimap_single_click_set_ship_move_mask(gui->next); break; default: break; } } gui->current = gui->next; gui->next = FALSE; } void frontend_gui_register_init(void) { frontend_widgets = g_hash_table_new(NULL, NULL); } void frontend_gui_update(void) { route_gui_event(GUI_UPDATE); g_hash_table_foreach(frontend_widgets, (GHFunc) set_sensitive, NULL); } void frontend_gui_check(GuiEvent event, gboolean sensitive) { GuiWidgetState *gui; gint i; gint key = event * MAX_NUMBER_OF_WIDGETS_PER_EVENT; /* Set all related widgets */ for (i = 0; i < MAX_NUMBER_OF_WIDGETS_PER_EVENT; ++i) { gui = g_hash_table_lookup(frontend_widgets, GINT_TO_POINTER(key + i)); if (gui != NULL) gui->next = sensitive; } } static GuiWidgetState *gui_new(void *widget, gint id) { gint i; gint key = id * MAX_NUMBER_OF_WIDGETS_PER_EVENT; GuiWidgetState *gui = g_malloc0(sizeof(*gui)); gui->widget = widget; gui->id = id; /* Find an empty key */ i = 0; while (i < MAX_NUMBER_OF_WIDGETS_PER_EVENT) { if (g_hash_table_lookup(frontend_widgets, GINT_TO_POINTER(key + i))) ++i; else break; } g_assert(i != MAX_NUMBER_OF_WIDGETS_PER_EVENT); g_hash_table_insert(frontend_widgets, GINT_TO_POINTER(key + i), gui); return gui; } static void gui_free(GuiWidgetState * gui) { gint i; gint key = gui->id * MAX_NUMBER_OF_WIDGETS_PER_EVENT; /* Find an empty key */ for (i = 0; i < MAX_NUMBER_OF_WIDGETS_PER_EVENT; ++i) { g_hash_table_remove(frontend_widgets, GINT_TO_POINTER(key + i)); } g_free(gui); } static void route_event(G_GNUC_UNUSED void *widget, GuiWidgetState * gui) { route_gui_event(gui->id); } static void destroy_event_cb(G_GNUC_UNUSED void *widget, GuiWidgetState * gui) { gui_free(gui); } static void destroy_route_event_cb(G_GNUC_UNUSED void *widget, GuiWidgetState * gui) { route_gui_event(gui->id); gui_free(gui); } void frontend_gui_register_destroy(GtkWidget * widget, GuiEvent id) { GuiWidgetState *gui = gui_new(widget, id); gui->destroy_only = TRUE; g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(destroy_route_event_cb), gui); } void frontend_gui_register_action(GtkAction * action, GuiEvent id) { GuiWidgetState *gui = gui_new(action, id); gui->signal = NULL; gui->current = TRUE; gui->next = FALSE; } void frontend_gui_register(GtkWidget * widget, GuiEvent id, const gchar * gui_signal) { GuiWidgetState *gui = gui_new(widget, id); gui->signal = gui_signal; gui->current = TRUE; gui->next = FALSE; g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(destroy_event_cb), gui); if (gui_signal != NULL) g_signal_connect(G_OBJECT(widget), gui_signal, G_CALLBACK(route_event), gui); } gint hotkeys_handler(G_GNUC_UNUSED GtkWidget * w, GdkEvent * e, G_GNUC_UNUSED gpointer data) { GuiWidgetState *gui; GuiEvent arg; switch (e->key.keyval) { case GDK_Escape: arg = GUI_QUOTE_REJECT; break; default: return 0; /* not handled */ } gui = g_hash_table_lookup(frontend_widgets, GINT_TO_POINTER(arg * MAX_NUMBER_OF_WIDGETS_PER_EVENT)); if (!gui || !gui->current) return 0; /* not handled */ route_gui_event(arg); return 1; /* handled */ } pioneers-14.1/client/gtk/gameover.c0000644000175000017500000000421611657430613014231 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" GtkWidget *gameover_create_dlg(gint player_num, gint num_points) { GtkWidget *dlg; GtkWidget *dlg_vbox; GtkWidget *vbox; GtkWidget *lbl; char buff[512]; dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("Game Over"), GTK_WINDOW(app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_widget_realize(dlg); gdk_window_set_functions(gtk_widget_get_window(dlg), GDK_FUNC_MOVE | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(dlg)); gtk_widget_show(dlg_vbox); vbox = gtk_vbox_new(FALSE, 50); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 20); sprintf(buff, _("%s has won the game with %d victory points!"), player_name(player_num, TRUE), num_points); lbl = gtk_label_new(buff); gtk_widget_show(lbl); gtk_box_pack_start(GTK_BOX(vbox), lbl, FALSE, TRUE, 0); sprintf(buff, _("All praise %s, Lord of the known world!"), player_name(player_num, TRUE)); lbl = gtk_label_new(buff); gtk_widget_show(lbl); gtk_box_pack_start(GTK_BOX(vbox), lbl, FALSE, TRUE, 0); gtk_widget_show(dlg); g_signal_connect(dlg, "response", G_CALLBACK(gtk_widget_destroy), NULL); return dlg; } pioneers-14.1/client/gtk/gold.c0000644000175000017500000002104011657430613013343 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "resource-table.h" #include "gtkbugs.h" #include "common_gtk.h" enum { GOLD_COLUMN_PLAYER_ICON, /**< Player icon */ GOLD_COLUMN_PLAYER_NUM, /**< Internal: player number */ GOLD_COLUMN_PLAYER_NAME, /**< Player name */ GOLD_COLUMN_AMOUNT, /**< The amount to choose */ GOLD_COLUMN_LAST }; static GtkListStore *gold_store; /**< the gold data */ static GtkWidget *gold_widget; /**< the gold widget */ static struct { GtkWidget *dlg; GtkWidget *resource_widget; } gold; static void amount_changed_cb(G_GNUC_UNUSED ResourceTable * rt, G_GNUC_UNUSED gpointer user_data) { frontend_gui_update(); } /* fill an array with the current choice, to send to the server */ void choose_gold_get_list(gint * choice) { if (gold.dlg != NULL) resource_table_get_amount(RESOURCETABLE (gold.resource_widget), choice); } static void button_destroyed(G_GNUC_UNUSED GtkWidget * w, gpointer num) { if (callback_mode == MODE_GOLD) gold_choose_player_must(GPOINTER_TO_INT(num), get_bank()); } void gold_choose_player_must(gint num, const gint * bank) { GtkWidget *dlg_vbox; GtkWidget *vbox; gchar *text; gold.dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("" "Choose Resources"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(G_OBJECT(gold.dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &gold.dlg); gtk_widget_realize(gold.dlg); /* Disable close */ gdk_window_set_functions(gtk_widget_get_window(gold.dlg), GDK_FUNC_ALL | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(gold.dlg)); gtk_widget_show(dlg_vbox); vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); text = g_strdup_printf(ngettext("You may choose %d resource", "You may choose %d resources", num), num); gold.resource_widget = resource_table_new(text, RESOURCE_TABLE_MORE_IN_HAND, TRUE, TRUE); g_free(text); resource_table_set_total(RESOURCETABLE(gold.resource_widget), /* Text for total in choose gold dialog */ _("Total resources"), num); resource_table_limit_bank(RESOURCETABLE(gold.resource_widget), TRUE); resource_table_set_bank(RESOURCETABLE(gold.resource_widget), bank); gtk_widget_show(gold.resource_widget); gtk_box_pack_start(GTK_BOX(vbox), gold.resource_widget, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(gold.resource_widget), "change", G_CALLBACK(amount_changed_cb), NULL); frontend_gui_register(gui_get_dialog_button (GTK_DIALOG(gold.dlg), 0), GUI_CHOOSE_GOLD, "clicked"); /* This _must_ be after frontend_gui_register, otherwise the * regeneration of the button happens before the destruction, which * results in an incorrectly sensitive OK button. */ g_signal_connect(gui_get_dialog_button(GTK_DIALOG(gold.dlg), 0), "destroy", G_CALLBACK(button_destroyed), GINT_TO_POINTER(num)); frontend_gui_update(); gtk_widget_show(gold.dlg); } void gold_choose_player_prepare(gint player_num, gint num) { GtkTreeIter iter; GdkPixbuf *pixbuf; enum TFindResult found; /* Search for a place to add information about the player */ found = find_integer_in_tree(GTK_TREE_MODEL(gold_store), &iter, GOLD_COLUMN_PLAYER_NUM, player_num); switch (found) { case FIND_NO_MATCH: gtk_list_store_append(gold_store, &iter); break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(gold_store, &iter, &iter); break; case FIND_MATCH_EXACT: break; default: g_error("unknown case in gold_choose_player_prepare"); }; pixbuf = player_create_icon(gold_widget, player_num, TRUE); gtk_list_store_set(gold_store, &iter, GOLD_COLUMN_PLAYER_ICON, pixbuf, GOLD_COLUMN_PLAYER_NUM, player_num, GOLD_COLUMN_PLAYER_NAME, player_name(player_num, TRUE), GOLD_COLUMN_AMOUNT, num, -1); g_object_unref(pixbuf); } void gold_choose_player_did(gint player_num, G_GNUC_UNUSED gint * resources) { GtkTreeIter iter; enum TFindResult found; /* check if the player was in the list. If not, it is not an error. * That happens if the player auto-discards. */ found = find_integer_in_tree(GTK_TREE_MODEL(gold_store), &iter, GOLD_COLUMN_PLAYER_NUM, player_num); if (found == FIND_MATCH_EXACT) { gtk_list_store_remove(gold_store, &iter); if (player_num == my_player_num()) { gtk_widget_destroy(gold.dlg); gold.dlg = NULL; } } } void gold_choose_begin(void) { gtk_list_store_clear(GTK_LIST_STORE(gold_store)); gui_gold_show(); } void gold_choose_end(void) { gtk_list_store_clear(GTK_LIST_STORE(gold_store)); gui_gold_hide(); if (gold.dlg != NULL) { /* shouldn't happen */ gtk_widget_destroy(gold.dlg); gold.dlg = NULL; } } GtkWidget *gold_build_page(void) { GtkWidget *vbox; GtkWidget *label; GtkWidget *alignment; GtkWidget *scroll_win; GtkCellRenderer *renderer; GtkTreeViewColumn *column; vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 3, 3); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), /* Caption for list of player that must choose gold */ _("Waiting for players to choose")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_container_add(GTK_CONTAINER(alignment), label); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_IN); gtk_widget_show(scroll_win); gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gold_store = gtk_list_store_new(GOLD_COLUMN_LAST, GDK_TYPE_PIXBUF, /* player icon */ G_TYPE_INT, /* player number */ G_TYPE_STRING, /* text */ G_TYPE_INT); /* amount to choose */ gold_widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gold_store)); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_pixbuf_new (), "pixbuf", GOLD_COLUMN_PLAYER_ICON, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(gold_widget), column); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_text_new (), "text", GOLD_COLUMN_PLAYER_NAME, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(gold_widget), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("", renderer, "text", GOLD_COLUMN_AMOUNT, NULL); g_object_set(renderer, "xalign", 1.0f, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(gold_widget), column); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(gold_widget), FALSE); gtk_widget_show(gold_widget); gtk_container_add(GTK_CONTAINER(scroll_win), gold_widget); return vbox; } gboolean can_choose_gold(void) { if (gold.dlg == NULL) return FALSE; return resource_table_is_total_reached(RESOURCETABLE (gold.resource_widget)); } pioneers-14.1/client/gtk/gui.c0000644000175000017500000014032411704110435013177 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004-2005 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #ifdef HAVE_HELP #include #endif #include "aboutbox.h" #include "frontend.h" #include "cards.h" #include "cost.h" #include "log.h" #include "common_gtk.h" #include "histogram.h" #include "theme.h" #include "config-gnome.h" #include "gtkbugs.h" #include "audio.h" #include "notification.h" #include "gtkcompat.h" static GtkWidget *preferences_dlg; GtkWidget *app_window; /* main application window */ #define MAP_WIDTH 350 /* default map width */ #define MAP_HEIGHT 200 /* default map height */ #define PIONEERS_ICON_FILE "pioneers.png" static GuiMap *gmap; /* handle to map drawing code */ enum { MAP_PAGE, /* the map */ TRADE_PAGE, /* trading interface */ QUOTE_PAGE, /* submit quotes page */ LEGEND_PAGE, /* legend */ SPLASH_PAGE /* splash screen */ }; static GtkWidget *map_notebook; /* map area panel */ static GtkWidget *trade_page; /* trade page in map area */ static GtkWidget *quote_page; /* quote page in map area */ static GtkWidget *legend_page; /* legend page in map area */ static GtkWidget *splash_page; /* splash page in map area */ static GtkWidget *develop_notebook; /* development card area panel */ static GtkWidget *messages_txt; /* messages text widget */ static GtkWidget *prompt_lbl; /* big prompt messages */ static GtkWidget *app_bar; static GtkWidget *net_status; static GtkWidget *vp_target_status; static GtkWidget *main_paned; /* Horizontal for 16:9, Vertical for 4:3 mode */ static GtkWidget *chat_panel = NULL; /* Panel for chat, placed below or to the right */ static GtkUIManager *ui_manager = NULL; /* The manager of the GtkActions */ static GtkWidget *toolbar = NULL; /* The toolbar */ static gboolean toolbar_show_accelerators = TRUE; static gboolean color_messages_enabled = TRUE; static gboolean legend_page_enabled = TRUE; static GList *rules_callback_list = NULL; #define PIONEERS_PIXMAP_SPLASH "pioneers/splash.png" static const gchar *pioneers_pixmaps[] = { PIONEERS_PIXMAP_DICE, PIONEERS_PIXMAP_TRADE, PIONEERS_PIXMAP_ROAD, PIONEERS_PIXMAP_SHIP, PIONEERS_PIXMAP_SHIP_MOVEMENT, PIONEERS_PIXMAP_BRIDGE, PIONEERS_PIXMAP_SETTLEMENT, PIONEERS_PIXMAP_CITY, PIONEERS_PIXMAP_CITY_WALL, PIONEERS_PIXMAP_DEVELOP, PIONEERS_PIXMAP_FINISH }; static void gui_set_toolbar_visible(void); static void gui_toolbar_show_accelerators(gboolean show_accelerators); static void game_new_cb(void) { route_gui_event(GUI_CONNECT); } static void game_leave_cb(void) { frontend_quote_end(); route_gui_event(GUI_DISCONNECT); } static void playername_cb(void) { route_gui_event(GUI_CHANGE_NAME); } static void game_quit_cb(void) { route_gui_event(GUI_QUIT); } static void roll_dice_cb(void) { route_gui_event(GUI_ROLL); } static void trade_cb(void) { route_gui_event(GUI_TRADE); } static void undo_cb(void) { route_gui_event(GUI_UNDO); } static void finish_cb(void) { route_gui_event(GUI_FINISH); } static void build_road_cb(void) { route_gui_event(GUI_ROAD); } static void build_ship_cb(void) { route_gui_event(GUI_SHIP); } static void move_ship_cb(void) { route_gui_event(GUI_MOVE_SHIP); } static void build_bridge_cb(void) { route_gui_event(GUI_BRIDGE); } static void build_settlement_cb(void) { route_gui_event(GUI_SETTLEMENT); } static void build_city_cb(void) { route_gui_event(GUI_CITY); } static void buy_development_cb(void) { route_gui_event(GUI_BUY_DEVELOP); } static void build_city_wall_cb(void) { route_gui_event(GUI_CITY_WALL); } static void showhide_toolbar_cb(void); static void preferences_cb(void); static void help_about_cb(void); static void game_legend_cb(void); static void game_histogram_cb(void); static void game_settings_cb(void); #ifdef HAVE_HELP static void help_manual_cb(void); #endif /** Toggles full screen mode. * @param GtkToggleAction The calling action. * @param main_window The window to toggle full screen mode. */ static void toggle_full_screen_cb(GtkToggleAction * caller, gpointer main_window) { if (gtk_toggle_action_get_active(caller)) { gtk_window_fullscreen(GTK_WINDOW(main_window)); } else { gtk_window_unfullscreen(GTK_WINDOW(main_window)); } } static void zoom_normal_cb(void) { guimap_zoom_normal(gmap); } static void zoom_center_map_cb(void) { guimap_zoom_center_map(gmap); } /* Normal items */ static GtkActionEntry entries[] = { {"GameMenu", NULL, /* Menu entry */ N_("_Game"), NULL, NULL, NULL}, {"GameNew", GTK_STOCK_NEW, /* Menu entry */ N_("_New Game"), "N", /* Tooltip for New Game menu entry */ N_("Start a new game"), game_new_cb}, {"GameLeave", GTK_STOCK_STOP, /* Menu entry */ N_("_Leave Game"), NULL, /* Tooltip for Leave Game menu entry */ N_("Leave this game"), game_leave_cb}, #ifdef ADMIN_GTK {"GameAdmin", NULL, /* Menu entry */ N_("_Admin"), "A", /* Tooltip for Admin menu entry */ N_("Administer Pioneers server"), show_admin_interface}, #endif {"PlayerName", NULL, /* Menu entry */ N_("_Player Name"), "P", /* Tooltip for Player Name menu entry */ N_("Change your player name"), playername_cb}, {"Legend", GTK_STOCK_DIALOG_INFO, /* Menu entry */ N_("L_egend"), NULL, /* Tooltip for Legend menu entry */ N_("Terrain legend and building costs"), game_legend_cb}, {"GameSettings", GTK_STOCK_DIALOG_INFO, /* Menu entry */ N_("_Game Settings"), NULL, /* Tooltip for Game Settings menu entry */ N_("Settings for the current game"), game_settings_cb}, {"DiceHistogram", GTK_STOCK_DIALOG_INFO, /* Menu entry */ N_("_Dice Histogram"), NULL, /* Tooltip for Dice Histogram menu entry */ N_("Histogram of dice rolls"), game_histogram_cb}, {"GameQuit", GTK_STOCK_QUIT, /* Menu entry */ N_("_Quit"), "Q", /* Tooltip for Quit menu entry */ N_("Quit the program"), game_quit_cb}, {"ActionsMenu", NULL, /* Menu entry */ N_("_Actions"), NULL, NULL, NULL}, {"RollDice", PIONEERS_PIXMAP_DICE, /* Menu entry */ N_("Roll Dice"), "F1", /* Tooltip for Roll Dice menu entry */ N_("Roll the dice"), roll_dice_cb}, {"Trade", PIONEERS_PIXMAP_TRADE, /* Menu entry */ N_("Trade"), "F2", /* Tooltip for Trade menu entry */ N_("Trade"), trade_cb}, {"Undo", GTK_STOCK_UNDO, /* Menu entry */ N_("Undo"), "F3", /* Tooltip for Undo menu entry */ N_("Undo"), undo_cb}, {"Finish", PIONEERS_PIXMAP_FINISH, /* Menu entry */ N_("Finish"), "F4", /* Tooltip for Finish menu entry */ N_("Finish"), finish_cb}, {"BuildRoad", PIONEERS_PIXMAP_ROAD, /* Menu entry */ N_("Road"), "F5", /* Tooltip for Road menu entry */ N_("Build a road"), build_road_cb}, {"BuildShip", PIONEERS_PIXMAP_SHIP, /* Menu entry */ N_("Ship"), "F6", /* Tooltip for Ship menu entry */ N_("Build a ship"), build_ship_cb}, {"MoveShip", PIONEERS_PIXMAP_SHIP_MOVEMENT, /* Menu entry */ N_("Move Ship"), "F7", /* Tooltip for Move Ship menu entry */ N_("Move a ship"), move_ship_cb}, {"BuildBridge", PIONEERS_PIXMAP_BRIDGE, /* Menu entry */ N_("Bridge"), "F8", /* Tooltip for Bridge menu entry */ N_("Build a bridge"), build_bridge_cb}, {"BuildSettlement", PIONEERS_PIXMAP_SETTLEMENT, /* Menu entry */ N_("Settlement"), "F9", /* Tooltip for Settlement menu entry */ N_("Build a settlement"), build_settlement_cb}, {"BuildCity", PIONEERS_PIXMAP_CITY, /* Menu entry */ N_("City"), "F10", /* Tooltip for City menu entry */ N_("Build a city"), build_city_cb}, {"BuyDevelopment", PIONEERS_PIXMAP_DEVELOP, /* Menu entry */ N_("Develop"), "F11", /* Tooltip for Develop menu entry */ N_("Buy a development card"), buy_development_cb}, {"BuildCityWall", PIONEERS_PIXMAP_CITY_WALL, /* Menu entry */ N_("City Wall"), NULL, /* Tooltip for City Wall menu entry */ N_("Build a city wall"), build_city_wall_cb}, {"SettingsMenu", NULL, /* Menu entry */ N_("_Settings"), NULL, NULL, NULL}, {"Preferences", GTK_STOCK_PREFERENCES, /* Menu entry */ N_("Prefere_nces"), NULL, /* Tooltip for Preferences menu entry */ N_("Configure the application"), preferences_cb}, {"ViewMenu", NULL, /* Menu entry */ N_("_View"), NULL, NULL, NULL}, {"Full", GTK_STOCK_ZOOM_FIT, /* Menu entry */ N_("_Reset"), "0", /* Tooltip for Reset menu entry */ N_("View the full map"), zoom_normal_cb}, {"Center", NULL, /* Menu entry */ N_("_Center"), NULL, /* Tooltip for Center menu entry */ N_("Center the map"), zoom_center_map_cb}, {"HelpMenu", NULL, /* Menu entry */ N_("_Help"), NULL, NULL, NULL}, {"HelpAbout", NULL, /* Menu entry */ N_("_About Pioneers"), NULL, /* Tooltip for About Pioneers menu entry */ N_("Information about Pioneers"), help_about_cb}, #ifdef HAVE_HELP {"HelpManual", GTK_STOCK_HELP, /* Menu entry */ N_("_Help"), "H", /* Tooltip for Help menu entry */ N_("Show the manual"), help_manual_cb} #endif }; /* Toggle items */ static GtkToggleActionEntry toggle_entries[] = { {"FullScreen", GTK_STOCK_FULLSCREEN, /* Menu entry */ N_("_Fullscreen"), "Return", /* Tooltip for Fullscreen menu entry */ N_("Set window to full screen mode"), G_CALLBACK(toggle_full_screen_cb), FALSE}, {"ShowHideToolbar", NULL, /* Menu entry */ N_("_Toolbar"), NULL, /* Tooltip for Toolbar menu entry */ N_("Show or hide the toolbar"), showhide_toolbar_cb, TRUE} }; /* *INDENT-OFF* */ static const char *ui_description = "" " " "

" " " " " #ifdef ADMIN_GTK " " #endif " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " #ifdef HAVE_HELP " " #endif " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; /* *INDENT-ON* */ GtkWidget *gui_get_dialog_button(GtkDialog * dlg, gint button) { GList *list; g_return_val_if_fail(dlg != NULL, NULL); g_assert(gtk_dialog_get_action_area(dlg) != NULL); list = gtk_container_get_children(GTK_CONTAINER (gtk_dialog_get_action_area(dlg))); list = g_list_nth(list, button); if (list != NULL) { g_assert(list->data != NULL); return GTK_WIDGET(list->data); } return NULL; } void gui_reset(void) { guimap_reset(gmap); } void gui_set_instructions(const gchar * text) { gtk_statusbar_push(GTK_STATUSBAR(app_bar), 0, text); } void gui_set_vp_target_value(gint vp) { gchar *vp_text; /* Victory points target in statusbar */ vp_text = g_strdup_printf(_("Points needed to win: %i"), vp); gtk_label_set_text(GTK_LABEL(vp_target_status), vp_text); g_free(vp_text); } void gui_set_net_status(const gchar * text) { gtk_label_set_text(GTK_LABEL(net_status), text); } void gui_cursor_none(void) { MapElement dummyElement; dummyElement.pointer = NULL; guimap_cursor_set(gmap, NO_CURSOR, -1, NULL, NULL, NULL, &dummyElement, FALSE); } void gui_cursor_set(CursorType type, CheckFunc check_func, SelectFunc select_func, CancelFunc cancel_func, const MapElement * user_data) { guimap_cursor_set(gmap, type, my_player_num(), check_func, select_func, cancel_func, user_data, FALSE); } void gui_draw_hex(const Hex * hex) { if (gmap->pixmap != NULL) guimap_draw_hex(gmap, hex); } void gui_draw_edge(const Edge * edge) { if (gmap->pixmap != NULL) guimap_draw_edge(gmap, edge); } void gui_draw_node(const Node * node) { if (gmap->pixmap != NULL) guimap_draw_node(gmap, node); } void gui_highlight_chits(gint roll) { guimap_highlight_chits(gmap, roll); } static gint button_press_map_cb(GtkWidget * area, GdkEventButton * event, G_GNUC_UNUSED gpointer user_data) { if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; if (event->button == 1 && event->type == GDK_BUTTON_PRESS) { guimap_cursor_select(gmap, event->x, event->y); return TRUE; } return FALSE; } static GtkWidget *build_map_area(void) { GtkWidget *map_area = guimap_build_drawingarea(gmap, MAP_WIDTH, MAP_HEIGHT); gtk_widget_add_events(map_area, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(map_area), "button_press_event", G_CALLBACK(button_press_map_cb), NULL); return map_area; } static GtkWidget *build_messages_panel(void) { GtkWidget *vbox; GtkWidget *label; GtkWidget *scroll_win; vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); /* Label for messages log */ label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), _("Messages")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_size_request(scroll_win, -1, 80); gtk_widget_show(scroll_win); gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); messages_txt = gtk_text_view_new(); gtk_widget_show(messages_txt); gtk_container_add(GTK_CONTAINER(scroll_win), messages_txt); gtk_text_view_set_editable(GTK_TEXT_VIEW(messages_txt), FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(messages_txt), GTK_WRAP_WORD); message_window_set_text(messages_txt); return vbox; } void gui_show_trade_page(gboolean show) { /* Normal keyboard focus when visible */ chat_set_grab_focus_on_update(!show); if (show) { gtk_widget_show(trade_page); gtk_notebook_set_current_page(GTK_NOTEBOOK(map_notebook), TRADE_PAGE); } else { gtk_notebook_prev_page(GTK_NOTEBOOK(map_notebook)); gtk_widget_hide(trade_page); } } void gui_show_quote_page(gboolean show) { /* Normal keyboard focus when visible */ chat_set_grab_focus_on_update(!show); if (show) { gtk_widget_show(quote_page); gtk_notebook_set_current_page(GTK_NOTEBOOK(map_notebook), QUOTE_PAGE); } else { gtk_notebook_prev_page(GTK_NOTEBOOK(map_notebook)); gtk_widget_hide(quote_page); } } static void gui_theme_changed(void) { g_assert(legend_page != NULL); gtk_widget_queue_draw(legend_page); gtk_widget_queue_draw_area(gmap->area, 0, 0, gmap->width, gmap->height); } void gui_show_legend_page(gboolean show) { if (show) { gtk_widget_show(legend_page); gtk_notebook_set_current_page(GTK_NOTEBOOK(map_notebook), LEGEND_PAGE); } else gtk_widget_hide(legend_page); } void gui_show_splash_page(gboolean show, GtkWidget * chat_widget) { static GtkWidget *widget = NULL; if (chat_widget != NULL) widget = chat_widget; g_assert(widget != NULL); chat_set_grab_focus_on_update(TRUE); if (show) { gtk_widget_show(splash_page); gtk_notebook_set_current_page(GTK_NOTEBOOK(map_notebook), SPLASH_PAGE); gtk_widget_hide(widget); } else { gtk_widget_hide(splash_page); gtk_notebook_set_current_page(GTK_NOTEBOOK(map_notebook), MAP_PAGE); gtk_widget_show(widget); } } static GtkWidget *splash_build_page(void) { GtkWidget *pm; GtkWidget *viewport; gchar *filename; filename = g_build_filename(DATADIR, "pixmaps", "pioneers", "splash.png", NULL); pm = gtk_image_new_from_file(filename); g_free(filename); /* The viewport avoids that the pixmap is drawn up into the tab area if * it's too large for the space provided. */ viewport = gtk_viewport_new(NULL, NULL); gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE); gtk_widget_show(viewport); gtk_widget_set_size_request(pm, 1, 1); gtk_widget_show(pm); gtk_container_add(GTK_CONTAINER(viewport), pm); return viewport; } static GtkWidget *build_map_panel(void) { GtkWidget *lbl; GtkWidget *legend_content; GtkWidget *hbox; GtkWidget *close_button; map_notebook = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(map_notebook), GTK_POS_TOP); gtk_widget_show(map_notebook); /* Tab page name */ lbl = gtk_label_new(_("Map")); gtk_widget_show(lbl); gtk_notebook_insert_page(GTK_NOTEBOOK(map_notebook), build_map_area(), lbl, MAP_PAGE); hbox = create_label_with_close_button( /* Tab page name */ _("Trade"), /* Tooltip */ _("Finish trading"), &close_button); frontend_gui_register(close_button, GUI_TRADE_FINISH, "clicked"); trade_page = trade_build_page(); gtk_notebook_insert_page(GTK_NOTEBOOK(map_notebook), trade_page, hbox, TRADE_PAGE); gtk_widget_hide(trade_page); hbox = create_label_with_close_button( /* Tab page name */ _("Quote"), /* Tooltip */ _("" "Reject domestic trade"), &close_button); frontend_gui_register(close_button, GUI_QUOTE_REJECT, "clicked"); quote_page = quote_build_page(); gtk_notebook_insert_page(GTK_NOTEBOOK(map_notebook), quote_page, hbox, QUOTE_PAGE); gtk_widget_hide(quote_page); /* Tab page name */ lbl = gtk_label_new(_("Legend")); gtk_widget_show(lbl); legend_content = legend_create_content(); legend_page = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(legend_page), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (legend_page), GTK_SHADOW_NONE); gtk_widget_show(legend_page); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (legend_page), legend_content); gtk_notebook_insert_page(GTK_NOTEBOOK(map_notebook), legend_page, lbl, LEGEND_PAGE); if (!legend_page_enabled) gui_show_legend_page(FALSE); theme_register_callback(G_CALLBACK(gui_theme_changed)); /* Tab page name, shown for the splash screen */ lbl = gtk_label_new(_("Welcome to Pioneers")); gtk_widget_show(lbl); splash_page = splash_build_page(); gtk_notebook_insert_page(GTK_NOTEBOOK(map_notebook), splash_page, lbl, SPLASH_PAGE); return map_notebook; } void gui_discard_show(void) { gtk_notebook_set_current_page(GTK_NOTEBOOK(develop_notebook), 1); } void gui_discard_hide(void) { gtk_notebook_set_current_page(GTK_NOTEBOOK(develop_notebook), 0); } void gui_gold_show(void) { gtk_notebook_set_current_page(GTK_NOTEBOOK(develop_notebook), 2); } void gui_gold_hide(void) { gtk_notebook_set_current_page(GTK_NOTEBOOK(develop_notebook), 0); } void gui_prompt_show(const gchar * message) { gtk_label_set_text(GTK_LABEL(prompt_lbl), message); /* Force resize of the notebook, this is needed because * GTK does not redraw when the text in a label changes. */ gtk_container_check_resize(GTK_CONTAINER(develop_notebook)); gtk_notebook_set_current_page(GTK_NOTEBOOK(develop_notebook), 3); } void gui_prompt_hide(void) { gtk_notebook_set_current_page(GTK_NOTEBOOK(develop_notebook), 0); } static GtkWidget *prompt_build_page(void) { prompt_lbl = gtk_label_new(""); gtk_widget_show(prompt_lbl); return prompt_lbl; } static GtkWidget *build_develop_panel(void) { develop_notebook = gtk_notebook_new(); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(develop_notebook), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(develop_notebook), FALSE); gtk_widget_show(develop_notebook); gtk_notebook_insert_page(GTK_NOTEBOOK(develop_notebook), develop_build_page(), NULL, 0); gtk_notebook_insert_page(GTK_NOTEBOOK(develop_notebook), discard_build_page(), NULL, 1); gtk_notebook_insert_page(GTK_NOTEBOOK(develop_notebook), gold_build_page(), NULL, 2); gtk_notebook_insert_page(GTK_NOTEBOOK(develop_notebook), prompt_build_page(), NULL, 3); return develop_notebook; } static gboolean get_16_9_layout(void) { GtkWidget *paned; g_return_val_if_fail(main_paned != NULL, FALSE); g_return_val_if_fail(chat_panel != NULL, FALSE); paned = gtk_paned_get_child1(GTK_PANED(main_paned)); if (gtk_widget_get_parent(chat_panel) == paned) return FALSE; return TRUE; } static void set_16_9_layout(gboolean layout_16_9) { GtkWidget *paned; gboolean can_remove; g_return_if_fail(main_paned != NULL); g_return_if_fail(chat_panel != NULL); paned = gtk_paned_get_child1(GTK_PANED(main_paned)); /* Increase reference count, otherwise it will be destroyed */ g_object_ref(chat_panel); /* Initially the widget has no parent, and cannot be removed */ can_remove = gtk_widget_get_parent(chat_panel) != NULL; if (layout_16_9) { if (can_remove) gtk_container_remove(GTK_CONTAINER(paned), chat_panel); gtk_container_add(GTK_CONTAINER(main_paned), chat_panel); } else { if (can_remove) gtk_container_remove(GTK_CONTAINER(main_paned), chat_panel); gtk_container_add(GTK_CONTAINER(paned), chat_panel); } g_object_unref(chat_panel); } static GtkWidget *build_main_interface(void) { GtkWidget *vbox; GtkWidget *hpaned; GtkWidget *vpaned; GtkWidget *panel; hpaned = gtk_hpaned_new(); gtk_widget_show(hpaned); vbox = gtk_vbox_new(FALSE, 3); gtk_widget_show(vbox); gtk_paned_pack1(GTK_PANED(hpaned), vbox, FALSE, TRUE); gtk_box_pack_start(GTK_BOX(vbox), identity_build_panel(), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), resource_build_panel(), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), build_develop_panel(), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), player_build_summary(), TRUE, TRUE, 0); main_paned = gtk_hpaned_new(); gtk_widget_show(main_paned); vpaned = gtk_vpaned_new(); gtk_widget_show(vpaned); gtk_paned_pack1(GTK_PANED(main_paned), vpaned, TRUE, TRUE); gtk_paned_pack1(GTK_PANED(vpaned), build_map_panel(), TRUE, TRUE); chat_panel = gtk_vbox_new(FALSE, 0); gui_show_splash_page(TRUE, chat_panel); panel = chat_build_panel(); frontend_gui_register(panel, GUI_DISCONNECT, NULL); gtk_box_pack_start(GTK_BOX(chat_panel), panel, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(chat_panel), build_messages_panel(), TRUE, TRUE, 0); set_16_9_layout(config_get_int_with_default ("settings/layout_16_9", FALSE)); gtk_paned_pack2(GTK_PANED(hpaned), main_paned, TRUE, TRUE); return hpaned; } static void quit_cb(G_GNUC_UNUSED GtkWidget * widget, G_GNUC_UNUSED void *data) { guimap_delete(gmap); gtk_main_quit(); } static void theme_change_cb(GtkWidget * widget, G_GNUC_UNUSED void *data) { gint idx = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); MapTheme *theme = g_list_nth_data(theme_get_list(), idx); if (theme != theme_get_current()) { config_set_string("settings/theme", theme->name); theme_set_current(theme); if (gmap->pixmap != NULL) { g_object_unref(gmap->pixmap); gmap->pixmap = NULL; } theme_rescale(2 * gmap->x_point); } } static void show_legend_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { legend_page_enabled = gtk_toggle_button_get_active(widget); gui_show_legend_page(legend_page_enabled); config_set_int("settings/legend_page", legend_page_enabled); } static void message_color_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { color_messages_enabled = gtk_toggle_button_get_active(widget); config_set_int("settings/color_messages", color_messages_enabled); log_set_func_message_color_enable(color_messages_enabled); } static void chat_color_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { color_chat_enabled = gtk_toggle_button_get_active(widget); config_set_int("settings/color_chat", color_chat_enabled); } static void summary_color_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { gboolean color_summary = gtk_toggle_button_get_active(widget); config_set_int("settings/color_summary", color_summary); set_color_summary(color_summary); } static void silent_mode_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { GtkToggleButton *announce_button = user_data; gboolean silent_mode = gtk_toggle_button_get_active(widget); config_set_int("settings/silent_mode", silent_mode); set_silent_mode(silent_mode); gtk_toggle_button_set_inconsistent(announce_button, silent_mode); gtk_widget_set_sensitive(GTK_WIDGET(announce_button), !silent_mode); } static void announce_player_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { gboolean announce_player = gtk_toggle_button_get_active(widget); config_set_int("settings/announce_player", announce_player); set_announce_player(announce_player); } static void toggle_16_9_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { gboolean layout_16_9 = gtk_toggle_button_get_active(widget); config_set_int("settings/layout_16_9", layout_16_9); set_16_9_layout(layout_16_9); } static void toggle_notifications_cb(GtkToggleButton * widget, G_GNUC_UNUSED gpointer user_data) { gboolean show_notifications = gtk_toggle_button_get_active(widget); config_set_int("settings/show_notifications", show_notifications); set_show_notifications(show_notifications); } static void showhide_toolbar_cb(void) { gui_set_toolbar_visible(); } static void toolbar_shortcuts_cb(void) { gui_toolbar_show_accelerators(!toolbar_show_accelerators); } static void preferences_cb(void) { GtkWidget *silent_mode_widget; GtkWidget *widget; GtkWidget *dlg_vbox; GtkWidget *theme_label; GtkWidget *theme_list; GtkWidget *layout; guint row; gint color_summary; GList *theme_elt; int i; if (preferences_dlg != NULL) { gtk_window_present(GTK_WINDOW(preferences_dlg)); return; }; /* Caption of preferences dialog */ preferences_dlg = gtk_dialog_new_with_buttons(_("" "Pioneers Preferences"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); gtk_dialog_set_default_response(GTK_DIALOG(preferences_dlg), GTK_RESPONSE_CLOSE); g_signal_connect(G_OBJECT(preferences_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &preferences_dlg); g_signal_connect(G_OBJECT(preferences_dlg), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show(preferences_dlg); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(preferences_dlg)); gtk_widget_show(dlg_vbox); layout = gtk_table_new(6, 2, FALSE); gtk_widget_show(layout); gtk_box_pack_start(GTK_BOX(dlg_vbox), layout, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(layout), 5); row = 0; theme_list = gtk_combo_box_text_new(); /* Label for changing the theme, in the preferences dialog */ theme_label = gtk_label_new(_("Theme:")); gtk_misc_set_alignment(GTK_MISC(theme_label), 0, 0.5); gtk_widget_show(theme_list); gtk_widget_show(theme_label); for (i = 0, theme_elt = theme_get_list(); theme_elt != NULL; ++i, theme_elt = g_list_next(theme_elt)) { MapTheme *theme = theme_elt->data; gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT (theme_list), theme->name); if (theme == theme_get_current()) gtk_combo_box_set_active(GTK_COMBO_BOX(theme_list), i); } g_signal_connect(G_OBJECT(theme_list), "changed", G_CALLBACK(theme_change_cb), NULL); gtk_table_attach_defaults(GTK_TABLE(layout), theme_label, 0, 1, row, row + 1); gtk_table_attach_defaults(GTK_TABLE(layout), theme_list, 1, 2, row, row + 1); gtk_widget_set_tooltip_text(theme_list, /* Tooltip for changing the theme in the preferences dialog */ _("Choose one of the themes")); row++; /* Label for the option to show the legend */ widget = gtk_check_button_new_with_label(_("Show legend")); gtk_widget_show(widget); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), legend_page_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(show_legend_cb), NULL); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to show the legend */ _("" "Show the legend as a page beside the map")); row++; /* Label for the option to display log messages in color */ widget = gtk_check_button_new_with_label(_("Messages with color")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_messages_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(message_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display log messages in color */ _("Show new messages with color")); row++; widget = gtk_check_button_new_with_label( /* Label for the option to display chat in color of player */ _("" "Chat in color of player")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_chat_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(chat_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display chat in color of player */ _("" "Show new chat messages in the color of the player")); row++; /* Label for the option to display the summary with colors */ widget = gtk_check_button_new_with_label(_("Summary with color")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); color_summary = config_get_int_with_default("settings/color_summary", TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_summary); /* @todo RC use correct variable */ g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(summary_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display the summary with colors */ _("Use colors in the player summary")); row++; widget = /* Label for the option to display keyboard accelerators in the toolbar */ gtk_check_button_new_with_label(_("Toolbar with shortcuts")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), toolbar_show_accelerators); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toolbar_shortcuts_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display keyboard accelerators in the toolbar */ _("" "Show keyboard shortcuts in the toolbar")); row++; silent_mode_widget = /* Label for the option to disable all sounds */ gtk_check_button_new_with_label(_("Silent mode")); gtk_widget_show(silent_mode_widget); gtk_table_attach_defaults(GTK_TABLE(layout), silent_mode_widget, 0, 2, row, row + 1); gtk_widget_set_tooltip_text(silent_mode_widget, /* Tooltip for the option to disable all sounds */ _("" "In silent mode no sounds are made")); row++; widget = /* Label for the option to announce when players/spectators enter */ gtk_check_button_new_with_label(_("Announce new players")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_announce_player()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(announce_player_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to use sound when players/spectators enter */ _("" "Make a sound when a new player or spectator enters the game")); row++; /* Silent mode widget is connected an initialized after the announce button */ g_signal_connect(G_OBJECT(silent_mode_widget), "toggled", G_CALLBACK(silent_mode_cb), widget); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(silent_mode_widget), get_silent_mode()); #ifdef HAVE_NOTIFY /* Label for the option to use the notifications. */ widget = gtk_check_button_new_with_label(_("Show notifications")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_show_notifications()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggle_notifications_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for notifications option. */ _("Show notifications when it's your " "turn or when new trade is available")); row++; #endif /* Label for the option to use the 16:9 layout. */ widget = gtk_check_button_new_with_label(_("Use 16:9 layout")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_16_9_layout()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggle_16_9_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for 16:9 option. */ _("" "Use a 16:9 friendly layout for the window")); row++; } static void help_about_cb(void) { const gchar *authors[] = { AUTHORLIST }; aboutbox_display( /* Caption of about box */ _("About Pioneers"), authors); } static void game_legend_cb(void) { legend_create_dlg(); } static void game_histogram_cb(void) { histogram_create_dlg(); } static void game_settings_cb(void) { settings_create_dlg(); } #ifdef HAVE_HELP static void help_manual_cb(void) { GError *error = NULL; gnome_help_display("pioneers", NULL, &error); if (error) { log_message(MSG_ERROR, "%s: %s\n", _("Show the manual"), error->message); g_error_free(error); } } #endif static GtkAction *getAction(GuiEvent id) { const gchar *path = NULL; gchar *full_path; GtkAction *action; #ifdef ADMIN_GTK frontend_gui_register_action(gtk_ui_manager_get_action (manager, "ui/MainMenu/GameMenu/GameAdmin"), GUI_CONNECT); #endif switch (id) { case GUI_CONNECT: path = "GameMenu/GameNew"; break; case GUI_DISCONNECT: path = "GameMenu/GameLeave"; break; case GUI_CHANGE_NAME: path = "GameMenu/PlayerName"; break; case GUI_ROLL: path = "ActionsMenu/RollDice"; break; case GUI_TRADE: path = "ActionsMenu/Trade"; break; case GUI_UNDO: path = "ActionsMenu/Undo"; break; case GUI_FINISH: path = "ActionsMenu/Finish"; break; case GUI_ROAD: path = "ActionsMenu/BuildRoad"; break; case GUI_SHIP: path = "ActionsMenu/BuildShip"; break; case GUI_MOVE_SHIP: path = "ActionsMenu/MoveShip"; break; case GUI_BRIDGE: path = "ActionsMenu/BuildBridge"; break; case GUI_SETTLEMENT: path = "ActionsMenu/BuildSettlement"; break; case GUI_CITY: path = "ActionsMenu/BuildCity"; break; case GUI_BUY_DEVELOP: path = "ActionsMenu/BuyDevelopment"; break; case GUI_CITY_WALL: path = "ActionsMenu/BuildCityWall"; break; default: break; }; if (!path) return NULL; full_path = g_strdup_printf("ui/MainMenu/%s", path); action = gtk_ui_manager_get_action(ui_manager, full_path); g_free(full_path); return action; } /** Set the visibility of the toolbar */ static void gui_set_toolbar_visible(void) { GSList *list; gboolean visible; list = gtk_ui_manager_get_toplevels(ui_manager, GTK_UI_MANAGER_TOOLBAR); g_assert(g_slist_length(list) == 1); visible = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (ui_manager, "ui/MainMenu/SettingsMenu/ShowHideToolbar"))); if (visible) gtk_widget_show(GTK_WIDGET(list->data)); else gtk_widget_hide(GTK_WIDGET(list->data)); config_set_int("settings/show_toolbar", visible); g_slist_free(list); } /** Show the accelerators in the toolbar */ static void gui_toolbar_show_accelerators(gboolean show_accelerators) { GtkToolbar *tb; gint n, i; toolbar_show_accelerators = show_accelerators; tb = GTK_TOOLBAR(toolbar); n = gtk_toolbar_get_n_items(tb); for (i = 0; i < n; i++) { GtkToolItem *ti; GtkToolButton *tbtn; gchar *text; gint j; ti = gtk_toolbar_get_nth_item(tb, i); tbtn = GTK_TOOL_BUTTON(ti); g_assert(tbtn != NULL); if (gtk_major_version == 2 && gtk_minor_version == 10) { /* Work around a gtk+ 2.10 bug (#434261) that * mishandles strings like (Fn) in labels. */ /** @todo BW 2007-04-29 Remove this when gtk 2.10 * is no longer supported. */ gtk_tool_button_set_use_underline(tbtn, FALSE); } text = g_strdup(gtk_tool_button_get_label(tbtn)); if (strchr(text, '\n')) *strchr(text, '\n') = '\0'; /* Find the matching entry */ for (j = 0; j < G_N_ELEMENTS(entries); j++) { if (strcmp(text, _(entries[j].label)) == 0) { if (show_accelerators) { gchar *label; if (entries[j].accelerator == NULL || strlen(entries[j].accelerator) == 0) label = g_strdup_printf("%s\n", text); else { gchar *accelerator_text; guint accelerator_key; GdkModifierType accelerator_mods; gtk_accelerator_parse (entries [j].accelerator, &accelerator_key, &accelerator_mods); accelerator_text = gtk_accelerator_get_label (accelerator_key, accelerator_mods); label = g_strdup_printf ("%s\n(%s)", text, accelerator_text); g_free(accelerator_text); } gtk_tool_button_set_label(tbtn, label); g_free(label); } else { gtk_tool_button_set_label(tbtn, _(entries [j]. label)); } break; } } g_free(text); } config_set_int("settings/toolbar_show_accelerators", toolbar_show_accelerators); } /** Show or hide a button in the toolbar */ static void gui_toolbar_show_button(const gchar * path, gboolean visible) { gchar *fullpath; GtkWidget *w; GtkToolItem *item; fullpath = g_strdup_printf("ui/MainToolbar/%s", path); w = gtk_ui_manager_get_widget(ui_manager, fullpath); if (w == NULL) { g_assert(!"Widget not found"); return; } item = GTK_TOOL_ITEM(w); if (item == NULL) { g_assert(!"Widget is not a tool button"); return; } gtk_tool_item_set_visible_horizontal(item, visible); g_free(fullpath); } void gui_rules_register_callback(GCallback callback) { rules_callback_list = g_list_append(rules_callback_list, callback); } void gui_set_game_params(const GameParams * params) { GList *list; GtkWidget *label; gmap->map = params->map; gmap->player_num = my_player_num(); gtk_widget_queue_resize(gmap->area); gui_toolbar_show_button("BuildRoad", params->num_build_type[BUILD_ROAD] > 0); gui_toolbar_show_button("BuildShip", params->num_build_type[BUILD_SHIP] > 0); gui_toolbar_show_button("MoveShip", params->num_build_type[BUILD_SHIP] > 0); gui_toolbar_show_button("BuildBridge", params->num_build_type[BUILD_BRIDGE] > 0); /* In theory, it is possible to play a game without cities */ gui_toolbar_show_button("BuildCity", params->num_build_type[BUILD_CITY] > 0); gui_toolbar_show_button("BuildCityWall", params->num_build_type[BUILD_CITY_WALL] > 0); identity_draw(); gui_set_vp_target_value(params->victory_points); list = rules_callback_list; while (list) { G_CALLBACK(list->data) (); list = g_list_next(list); } label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(map_notebook), legend_page); g_object_ref(label); gtk_widget_destroy(legend_page); legend_page = legend_create_content(); gtk_notebook_insert_page(GTK_NOTEBOOK(map_notebook), legend_page, label, LEGEND_PAGE); if (!legend_page_enabled) gui_show_legend_page(FALSE); g_object_unref(label); } static GtkWidget *build_status_bar(void) { GtkWidget *vsep; app_bar = gtk_statusbar_new(); gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(app_bar), TRUE); gtk_widget_show(app_bar); vp_target_status = gtk_label_new(""); gtk_widget_show(vp_target_status); gtk_box_pack_start(GTK_BOX(app_bar), vp_target_status, FALSE, TRUE, 0); vsep = gtk_vseparator_new(); gtk_widget_show(vsep); gtk_box_pack_start(GTK_BOX(app_bar), vsep, FALSE, TRUE, 0); /* Network status: offline */ net_status = gtk_label_new(_("Offline")); gtk_widget_show(net_status); gtk_box_pack_start(GTK_BOX(app_bar), net_status, FALSE, TRUE, 0); vsep = gtk_vseparator_new(); gtk_widget_show(vsep); gtk_box_pack_start(GTK_BOX(app_bar), vsep, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(app_bar), player_build_turn_area(), FALSE, TRUE, 0); /* Initial text in status bar */ gui_set_instructions(_("Welcome to Pioneers!")); return app_bar; } static void register_pixmaps(void) { gint idx; GtkIconFactory *factory = gtk_icon_factory_new(); for (idx = 0; idx < G_N_ELEMENTS(pioneers_pixmaps); idx++) { gchar *filename; GtkIconSet *icon; icon = NULL; /* determine full path to pixmap file */ filename = g_build_filename(DATADIR, "pixmaps", pioneers_pixmaps[idx], NULL); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { GdkPixbuf *pixbuf; GError *error = NULL; pixbuf = gdk_pixbuf_new_from_file(filename, &error); if (error != NULL) { g_warning("Error loading pixmap %s\n", filename); g_error_free(error); } else { icon = gtk_icon_set_new_from_pixbuf(pixbuf); } } else { /* Missing pixmap */ g_warning("Pixmap not found: %s", filename); } gtk_icon_factory_add(factory, pioneers_pixmaps[idx], icon); g_free(filename); gtk_icon_set_unref(icon); } gtk_icon_factory_add_default(factory); g_object_unref(factory); } GtkWidget *gui_build_interface(void) { GtkWidget *vbox; GtkWidget *menubar; GtkActionGroup *action_group; GtkAccelGroup *accel_group; GError *error = NULL; gchar *icon_file; player_init(); gmap = guimap_new(); register_pixmaps(); app_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* The name of the application */ gtk_window_set_title(GTK_WINDOW(app_window), _("Pioneers")); prepare_gtk_for_close_button_on_tab(); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_container_add(GTK_CONTAINER(app_window), vbox); action_group = gtk_action_group_new("MenuActions"); gtk_action_group_set_translation_domain(action_group, PACKAGE); gtk_action_group_add_actions(action_group, entries, G_N_ELEMENTS(entries), app_window); gtk_action_group_add_toggle_actions(action_group, toggle_entries, G_N_ELEMENTS(toggle_entries), app_window); ui_manager = gtk_ui_manager_new(); gtk_ui_manager_insert_action_group(ui_manager, action_group, 0); accel_group = gtk_ui_manager_get_accel_group(ui_manager); gtk_window_add_accel_group(GTK_WINDOW(app_window), accel_group); error = NULL; if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &error)) { g_message("building menus failed: %s", error->message); g_error_free(error); return NULL; } icon_file = g_build_filename(DATADIR, "pixmaps", PIONEERS_ICON_FILE, NULL); if (g_file_test(icon_file, G_FILE_TEST_EXISTS)) { gtk_window_set_default_icon_from_file(icon_file, NULL); } else { /* Missing pixmap, main icon file */ g_warning("Pixmap not found: %s", icon_file); } g_free(icon_file); color_chat_enabled = config_get_int_with_default("settings/color_chat", TRUE); color_messages_enabled = config_get_int_with_default("settings/color_messages", TRUE); log_set_func_message_color_enable(color_messages_enabled); set_color_summary(config_get_int_with_default ("settings/color_summary", TRUE)); set_silent_mode(config_get_int_with_default ("settings/silent_mode", FALSE)); set_announce_player(config_get_int_with_default ("settings/announce_player", TRUE)); set_show_notifications(config_get_int_with_default ("settings/show_notifications", TRUE)); legend_page_enabled = config_get_int_with_default("settings/legend_page", FALSE); menubar = gtk_ui_manager_get_widget(ui_manager, "/MainMenu"); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); toolbar = gtk_ui_manager_get_widget(ui_manager, "/MainToolbar"); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), build_main_interface(), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), build_status_bar(), FALSE, FALSE, 0); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (ui_manager, "ui/MainMenu/SettingsMenu/ShowHideToolbar")), config_get_int_with_default ("settings/show_toolbar", TRUE)); g_signal_connect(G_OBJECT(app_window), "key_press_event", G_CALLBACK(hotkeys_handler), NULL); gtk_widget_show(app_window); frontend_gui_register_action(getAction(GUI_CONNECT), GUI_CONNECT); frontend_gui_register_action(getAction(GUI_DISCONNECT), GUI_DISCONNECT); #ifdef ADMIN_GTK /** @todo RC 2005-05-26 Admin interface: Not tested */ frontend_gui_register_action(gtk_ui_manager_get_action (manager, "ui/MainMenu/GameMenu/GameAdmin"), GUI_ADMIN); #endif frontend_gui_register_action(getAction(GUI_CHANGE_NAME), GUI_CHANGE_NAME); frontend_gui_register_action(getAction(GUI_ROLL), GUI_ROLL); frontend_gui_register_action(getAction(GUI_TRADE), GUI_TRADE); frontend_gui_register_action(getAction(GUI_UNDO), GUI_UNDO); frontend_gui_register_action(getAction(GUI_FINISH), GUI_FINISH); frontend_gui_register_action(getAction(GUI_ROAD), GUI_ROAD); frontend_gui_register_action(getAction(GUI_SHIP), GUI_SHIP); frontend_gui_register_action(getAction(GUI_MOVE_SHIP), GUI_MOVE_SHIP); frontend_gui_register_action(getAction(GUI_BRIDGE), GUI_BRIDGE); frontend_gui_register_action(getAction(GUI_SETTLEMENT), GUI_SETTLEMENT); frontend_gui_register_action(getAction(GUI_CITY), GUI_CITY); frontend_gui_register_action(getAction(GUI_BUY_DEVELOP), GUI_BUY_DEVELOP); frontend_gui_register_action(getAction(GUI_CITY_WALL), GUI_CITY_WALL); #if 0 frontend_gui_register_destroy(gtk_ui_manager_get_action (manager, "GameQuit"), GUI_QUIT); #endif gui_toolbar_show_button("BuildShip", FALSE); gui_toolbar_show_button("MoveShip", FALSE); gui_toolbar_show_button("BuildBridge", FALSE); gui_toolbar_show_accelerators(config_get_int_with_default ("settings/toolbar_show_accelerators", TRUE)); gtk_ui_manager_ensure_update(ui_manager); gtk_widget_show(app_window); g_signal_connect(G_OBJECT(app_window), "delete_event", G_CALLBACK(quit_cb), NULL); return app_window; } void gui_set_show_no_setup_nodes(gboolean show) { guimap_set_show_no_setup_nodes(gmap, show); } Map *frontend_get_map(void) { g_return_val_if_fail(gmap != NULL, NULL); return gmap->map; } void frontend_set_map(Map * map) { g_assert(gmap != NULL); gmap->map = map; } pioneers-14.1/client/gtk/histogram.c0000644000175000017500000002102211657430613014413 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2004,2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "histogram.h" #include "theme.h" static const int DIALOG_HEIGHT = 270; static const int DIALOG_WIDTH = 450; static const int GRID_DIVISIONS = 4; static const int BAR_SEPARATION = 3; static const int CHIT_DIAGRAM_SEPARATION = 3; static const int SPACING_AROUND = 6; static void histogram_update(gint roll); static GtkWidget *histogram_dlg; static GtkWidget *histogram_area; static gint last_roll; static int histogram[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* * * Non-Gui stuff -- maintain dice histogram state * */ void histogram_dice_rolled(gint roll, G_GNUC_UNUSED gint playernum) { g_assert(roll >= 2 && roll <= 12); ++histogram[roll]; if (histogram_dlg) histogram_update(roll); } static gint histogram_dice_retrieve(gint roll) { g_assert(roll >= 2 && roll <= 12); return histogram[roll]; } /* * * GUI Stuff -- draw a pretty histogram picture * */ /* Draw the histogram */ static gboolean expose_histogram_cb(GtkWidget * area, G_GNUC_UNUSED GdkEventExpose * event, gpointer terrain) { gint w; gint h; gint total; gint max; gdouble le; gdouble mi; gdouble ri; gint grid_width; gint grid_height; gint grid_offset_x; gint grid_offset_y; gdouble by_36; gdouble expected_low_y, expected_high_y; gint i; gchar buff[30]; gint label_width, label_height; /* Maximum size of the labels of the y-axis */ gint width, height; /* size of the individual labels */ gdouble bar_width; PangoLayout *layout; gboolean seven_thrown; gboolean draw_labels_and_chits; gint CHIT_RADIUS; GdkPixmap *pixmap; cairo_t *histogram_cr; GtkAllocation allocation; if (gtk_widget_get_window(area) == NULL) return TRUE; pixmap = theme_get_terrain_pixmap(GPOINTER_TO_INT(terrain)); histogram_cr = gdk_cairo_create(gtk_widget_get_window(area)); cairo_set_line_width(histogram_cr, 1.0); gtk_widget_get_allocation(area, &allocation); w = allocation.width; h = allocation.height; /* Calculate the highest dice throw */ max = 0; for (i = 2; i <= 12; i++) { if (histogram_dice_retrieve(i) > max) { max = histogram_dice_retrieve(i); } /* Make max a multiple of GRID_DIVISIONS */ if (max % GRID_DIVISIONS != 0) max += GRID_DIVISIONS - (max % GRID_DIVISIONS); } if (max == 0) max = GRID_DIVISIONS; /* Calculate size of the labels of the y-axis */ sprintf(buff, "%d", max); layout = gtk_widget_create_pango_layout(area, buff); pango_layout_get_pixel_size(layout, &label_width, &label_height); CHIT_RADIUS = guimap_get_chit_radius(layout, TRUE); /* Determine if the drawing area is large enough to draw the labels */ draw_labels_and_chits = TRUE; if (label_width + (CHIT_RADIUS + 1) * 2 * 11 > w) draw_labels_and_chits = FALSE; if (label_height * 5 + CHIT_RADIUS * 2 > h) draw_labels_and_chits = FALSE; grid_offset_x = (draw_labels_and_chits ? label_width : 0) + SPACING_AROUND; grid_width = w - grid_offset_x - SPACING_AROUND; grid_offset_y = (draw_labels_and_chits ? label_height : 0); grid_height = h - grid_offset_y - (draw_labels_and_chits ? 2 * CHIT_RADIUS : 0) - CHIT_DIAGRAM_SEPARATION; /* horizontal grid */ for (i = 0; i <= GRID_DIVISIONS; ++i) { gdouble y = grid_offset_y + grid_height - 0.5 - (gdouble) i * grid_height / GRID_DIVISIONS; gdk_cairo_set_source_color(histogram_cr, &lightblue); cairo_move_to(histogram_cr, grid_offset_x, y); cairo_line_to(histogram_cr, w - SPACING_AROUND, y); cairo_stroke(histogram_cr); if (draw_labels_and_chits) { sprintf(buff, "%d", i * max / GRID_DIVISIONS); pango_layout_set_text(layout, buff, -1); pango_layout_get_pixel_size(layout, &width, &height); gdk_cairo_set_source_color(histogram_cr, &black); cairo_move_to(histogram_cr, label_width - width + SPACING_AROUND, y - height / 2.0); pango_cairo_show_layout(histogram_cr, layout); } } bar_width = (grid_width - 12 * BAR_SEPARATION) / 11.0; grid_offset_x += BAR_SEPARATION; /* histogram bars */ for (i = 2; i <= 12; i++) { gdouble bh = (gdouble) grid_height * histogram_dice_retrieve(i) / max + 0.5; gdouble x = grid_offset_x + (i - 2) * (bar_width + BAR_SEPARATION); gdk_cairo_set_source_pixmap(histogram_cr, pixmap, 0.0, 0.0); cairo_pattern_set_extend(cairo_get_source(histogram_cr), CAIRO_EXTEND_REPEAT); cairo_rectangle(histogram_cr, x, grid_height + grid_offset_y - bh, bar_width, bh); cairo_fill(histogram_cr); if (draw_labels_and_chits) { sprintf(buff, "%d", histogram_dice_retrieve(i)); pango_layout_set_markup(layout, buff, -1); pango_layout_get_pixel_size(layout, &width, &height); gdk_cairo_set_source_color(histogram_cr, &black); cairo_move_to(histogram_cr, x + (bar_width - width) / 2, grid_height + grid_offset_y - bh - height); pango_cairo_show_layout(histogram_cr, layout); draw_dice_roll(layout, histogram_cr, x + bar_width / 2, h - CHIT_RADIUS - 1, CHIT_RADIUS, i, SEA_TERRAIN, i == last_roll); } } /* expected value */ seven_thrown = histogram_dice_retrieve(7) != 0; total = 0; for (i = 2; i <= 12; i++) { total += histogram_dice_retrieve(i); } by_36 = total * grid_height / max / (seven_thrown ? 36.0 : 30.0); expected_low_y = grid_height + grid_offset_y - 1 - by_36; expected_high_y = grid_height + grid_offset_y - 1 - (seven_thrown ? 6 : 5) * by_36; le = grid_offset_x + bar_width / 2; mi = le + 5 * (bar_width + BAR_SEPARATION); ri = mi + 5 * (bar_width + BAR_SEPARATION); gdk_cairo_set_source_color(histogram_cr, &red); cairo_move_to(histogram_cr, le, expected_low_y); cairo_line_to(histogram_cr, mi - (seven_thrown ? 0 : bar_width + BAR_SEPARATION), expected_high_y); cairo_move_to(histogram_cr, mi + (seven_thrown ? 0 : bar_width + BAR_SEPARATION), expected_high_y); cairo_line_to(histogram_cr, ri, expected_low_y); cairo_stroke(histogram_cr); g_object_unref(layout); cairo_destroy(histogram_cr); return TRUE; } static void histogram_destroyed_cb(GtkWidget * widget, gpointer arg) { gtk_widget_destroyed(histogram_area, &histogram_area); gtk_widget_destroyed(widget, arg); } GtkWidget *histogram_create_dlg(void) { GtkWidget *dlg_vbox; if (histogram_dlg != NULL) { return histogram_dlg; } /* Dialog caption */ histogram_dlg = gtk_dialog_new_with_buttons(_("Dice Histogram"), GTK_WINDOW(app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); g_signal_connect(G_OBJECT(histogram_dlg), "destroy", G_CALLBACK(histogram_destroyed_cb), &histogram_dlg); gtk_window_set_default_size(GTK_WINDOW(histogram_dlg), DIALOG_WIDTH, DIALOG_HEIGHT); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(histogram_dlg)); histogram_area = gtk_drawing_area_new(); g_signal_connect(G_OBJECT(histogram_area), "expose_event", G_CALLBACK(expose_histogram_cb), GINT_TO_POINTER(SEA_TERRAIN)); gtk_box_pack_start(GTK_BOX(dlg_vbox), histogram_area, TRUE, TRUE, SPACING_AROUND); gtk_widget_show(histogram_area); gtk_widget_show(histogram_dlg); g_signal_connect(histogram_dlg, "response", G_CALLBACK(gtk_widget_destroy), NULL); histogram_update(0); return histogram_dlg; } static void histogram_update(gint roll) { last_roll = roll; gtk_widget_queue_draw(histogram_area); } static void histogram_theme_changed(void) { if (histogram_dlg) gtk_widget_queue_draw(histogram_area); } void histogram_init(void) { theme_register_callback(G_CALLBACK(histogram_theme_changed)); } void histogram_reset(void) { gint i; for (i = 2; i <= 12; ++i) histogram[i] = 0; if (histogram_dlg) histogram_update(0); } pioneers-14.1/client/gtk/identity.c0000644000175000017500000002245411657430613014261 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include static GtkWidget *identity_area; static GuiMap bogus_map; static int die_num[2]; static void calculate_width(GtkWidget * area, const Polygon * poly, gint num, gint * fixedwidth, gint * variablewidth) { GdkRectangle rect; char buff[10]; gint width, height; PangoLayout *layout; poly_bound_rect(poly, 0, &rect); sprintf(buff, "%d", num); layout = gtk_widget_create_pango_layout(area, buff); pango_layout_get_pixel_size(layout, &width, &height); g_object_unref(layout); *fixedwidth += width + 10; *variablewidth += rect.width; } static void calculate_optimum_size(GtkWidget * area, gint size) { const GameParams *game_params = get_game_params(); GdkPoint points[MAX_POINTS]; Polygon poly; gint new_size; gint fixedwidth; /* Size of fixed part (digits + spacing) */ gint variablewidth; /* Size of variable part (polygons) */ GtkAllocation allocation; if (game_params == NULL) return; guimap_scale_with_radius(&bogus_map, size); if (bogus_map.hex_radius <= MIN_HEX_RADIUS) return; fixedwidth = 0; variablewidth = 0; poly.points = points; if (game_params->num_build_type[BUILD_ROAD] > 0) { poly.num_points = MAX_POINTS; guimap_road_polygon(&bogus_map, NULL, &poly); calculate_width(area, &poly, stock_num_roads(), &fixedwidth, &variablewidth); } if (game_params->num_build_type[BUILD_SHIP] > 0) { poly.num_points = MAX_POINTS; guimap_ship_polygon(&bogus_map, NULL, &poly); calculate_width(area, &poly, stock_num_ships(), &fixedwidth, &variablewidth); } if (game_params->num_build_type[BUILD_BRIDGE] > 0) { poly.num_points = MAX_POINTS; guimap_bridge_polygon(&bogus_map, NULL, &poly); calculate_width(area, &poly, stock_num_bridges(), &fixedwidth, &variablewidth); } if (game_params->num_build_type[BUILD_SETTLEMENT] > 0) { poly.num_points = MAX_POINTS; guimap_settlement_polygon(&bogus_map, NULL, &poly); calculate_width(area, &poly, stock_num_settlements(), &fixedwidth, &variablewidth); } if (game_params->num_build_type[BUILD_CITY] > 0) { poly.num_points = MAX_POINTS; guimap_city_polygon(&bogus_map, NULL, &poly); calculate_width(area, &poly, stock_num_cities(), &fixedwidth, &variablewidth); } if (game_params->num_build_type[BUILD_CITY_WALL] > 0) { poly.num_points = MAX_POINTS; guimap_city_wall_polygon(&bogus_map, NULL, &poly); calculate_width(area, &poly, stock_num_city_walls(), &fixedwidth, &variablewidth); } gtk_widget_get_allocation(area, &allocation); new_size = bogus_map.hex_radius * (allocation.width - 75 - fixedwidth) / variablewidth; if (new_size < bogus_map.hex_radius) { calculate_optimum_size(area, new_size); } } static int draw_building_and_count(cairo_t * cr, GtkWidget * area, gint offset, Polygon * poly, gint num) { GdkRectangle rect; char buff[10]; gint width, height; PangoLayout *layout; GtkAllocation allocation; gtk_widget_get_allocation(area, &allocation); poly_bound_rect(poly, 0, &rect); poly_offset(poly, offset - rect.x, allocation.height - 5 - rect.y - rect.height); poly_draw(cr, FALSE, poly); offset += 5 + rect.width; sprintf(buff, "%d", num); layout = gtk_widget_create_pango_layout(area, buff); pango_layout_get_pixel_size(layout, &width, &height); cairo_move_to(cr, offset, allocation.height - height - 5); pango_cairo_show_layout(cr, layout); g_object_unref(layout); offset += 5 + width; return offset; } static void show_die(cairo_t * cr, GtkWidget * area, gint x_offset, gint num, GdkColor * die_border_color, GdkColor * die_color, GdkColor * die_dots_color) { static GdkPoint die_points[4] = { {0, 0}, {30, 0}, {30, 30}, {0, 30} }; static Polygon die_shape = { die_points, G_N_ELEMENTS(die_points) }; static GdkPoint dot_pos[7] = { {7, 7}, {22, 7}, {7, 15}, {15, 15}, {22, 15}, {7, 22}, {22, 22} }; static gint draw_list[6][7] = { {0, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 1, 0, 0, 1}, {1, 1, 0, 0, 0, 1, 1}, {1, 1, 0, 1, 0, 1, 1}, {1, 1, 1, 0, 1, 1, 1} }; GtkAllocation allocation; gint y_offset; gint *list = draw_list[num - 1]; gint idx; gtk_widget_get_allocation(area, &allocation); y_offset = (allocation.height - 30) / 2; poly_offset(&die_shape, x_offset, y_offset); gdk_cairo_set_source_color(cr, die_color); poly_draw(cr, TRUE, &die_shape); gdk_cairo_set_source_color(cr, die_border_color); poly_draw(cr, FALSE, &die_shape); poly_offset(&die_shape, -x_offset, -y_offset); gdk_cairo_set_source_color(cr, die_dots_color); for (idx = 0; idx < 7; idx++) { if (list[idx] == 0) continue; cairo_move_to(cr, x_offset + dot_pos[idx].x - 3, y_offset + dot_pos[idx].y - 3); cairo_arc(cr, x_offset + dot_pos[idx].x, y_offset + dot_pos[idx].y, 3, 0.0, 2 * M_PI); cairo_fill(cr); } } static void identity_resize_cb(GtkWidget * area, G_GNUC_UNUSED GtkAllocation * allocation, G_GNUC_UNUSED gpointer user_data) { calculate_optimum_size(area, 50); } static gint expose_identity_area_cb(GtkWidget * area, G_GNUC_UNUSED GdkEventExpose * event, G_GNUC_UNUSED gpointer user_data) { GdkPoint points[MAX_POINTS]; Polygon poly; gint offset; GdkColor *colour; const GameParams *game_params; gint i; cairo_t *cr; GtkAllocation allocation; if (gtk_widget_get_window(area) == NULL || my_player_num() < 0) return FALSE; cr = gdk_cairo_create(gtk_widget_get_window(area)); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_width(cr, 1.0); colour = player_or_spectator_color(my_player_num()); gdk_cairo_set_source_color(cr, colour); gtk_widget_get_allocation(area, &allocation); cairo_rectangle(cr, 0, 0, allocation.width, allocation.height); cairo_fill(cr); if (my_player_spectator()) colour = &white; else colour = &black; gdk_cairo_set_source_color(cr, colour); game_params = get_game_params(); if (game_params == NULL) return TRUE; offset = 5; poly.points = points; if (game_params->num_build_type[BUILD_ROAD] > 0) { poly.num_points = MAX_POINTS; guimap_road_polygon(&bogus_map, NULL, &poly); offset = draw_building_and_count(cr, area, offset, &poly, stock_num_roads()); } if (game_params->num_build_type[BUILD_SHIP] > 0) { poly.num_points = MAX_POINTS; guimap_ship_polygon(&bogus_map, NULL, &poly); offset = draw_building_and_count(cr, area, offset, &poly, stock_num_ships()); } if (game_params->num_build_type[BUILD_BRIDGE] > 0) { poly.num_points = MAX_POINTS; guimap_bridge_polygon(&bogus_map, NULL, &poly); offset = draw_building_and_count(cr, area, offset, &poly, stock_num_bridges()); } if (game_params->num_build_type[BUILD_SETTLEMENT] > 0) { poly.num_points = MAX_POINTS; guimap_settlement_polygon(&bogus_map, NULL, &poly); offset = draw_building_and_count(cr, area, offset, &poly, stock_num_settlements()); } if (game_params->num_build_type[BUILD_CITY] > 0) { poly.num_points = MAX_POINTS; guimap_city_polygon(&bogus_map, NULL, &poly); offset = draw_building_and_count(cr, area, offset, &poly, stock_num_cities()); } if (game_params->num_build_type[BUILD_CITY_WALL] > 0) { poly.num_points = MAX_POINTS; guimap_city_wall_polygon(&bogus_map, NULL, &poly); offset = draw_building_and_count(cr, area, offset, &poly, stock_num_city_walls()); } if (die_num[0] > 0 && die_num[1] > 0) { { /* original dice */ for (i = 0; i < 2; i++) show_die(cr, area, allocation.width - 70 + 35 * i, die_num[i], &black, &white, &black); } } cairo_destroy(cr); return TRUE; } void identity_draw(void) { gtk_widget_queue_draw(identity_area); } void identity_set_dice(gint die1, gint die2) { die_num[0] = die1; die_num[1] = die2; gtk_widget_queue_draw(identity_area); } GtkWidget *identity_build_panel(void) { identity_area = gtk_drawing_area_new(); g_signal_connect(G_OBJECT(identity_area), "expose_event", G_CALLBACK(expose_identity_area_cb), NULL); g_signal_connect(G_OBJECT(identity_area), "size-allocate", G_CALLBACK(identity_resize_cb), NULL); gtk_widget_set_size_request(identity_area, -1, 40); identity_reset(); gtk_widget_show(identity_area); return identity_area; } void identity_reset(void) { gint i; for (i = 0; i < 2; i++) { die_num[i] = 0; }; /* 50 seems to give a good upper limit */ if (identity_area != NULL) calculate_optimum_size(identity_area, 50); } pioneers-14.1/client/gtk/interface.c0000644000175000017500000005433311704110435014357 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* This file consists of gui state functions and callbacks to set them */ #include "config.h" #include "frontend.h" #include "cost.h" #include "histogram.h" #include "audio.h" #include "notification.h" /* local functions */ static void frontend_state_robber(GuiEvent event); static void frontend_state_turn(GuiEvent event); static void build_road_cb(MapElement edge, MapElement extra); static void build_ship_cb(MapElement edge, MapElement extra); static void build_bridge_cb(MapElement edge, MapElement extra); static void move_ship_cb(MapElement edge, MapElement extra); static void build_settlement_cb(MapElement node, MapElement extra); static void build_city_cb(MapElement node, MapElement extra); static void build_city_wall_cb(MapElement node, MapElement extra); static void dummy_state(G_GNUC_UNUSED GuiEvent event) { } /* for gold and discard, remember the previous gui state */ static GuiState previous_state = dummy_state; static gboolean discard_busy = FALSE, robber_busy = FALSE; static void frontend_state_idle(G_GNUC_UNUSED GuiEvent event) { /* don't react on any event when idle. */ /* (except of course chat and name change events, but they are * handled in route_event) */ } void build_road_cb(MapElement edge, G_GNUC_UNUSED MapElement extra) { cb_build_road(edge.edge); } void build_ship_cb(MapElement edge, G_GNUC_UNUSED MapElement extra) { cb_build_ship(edge.edge); } static void do_move_ship_cb(MapElement edge, MapElement ship_from) { cb_move_ship(ship_from.edge, edge.edge); gui_prompt_hide(); } /** Edge cursor check function. * * Determine whether or not a ship can be moved to this edge by the * specified player. Perform the following checks: * 1 - Ship cannot be moved to where it comes from * 2 - A ship must be buildable at the destination if the ship is moved away * from its current location. */ static gboolean can_ship_be_moved_to(MapElement ship_to, G_GNUC_UNUSED gint owner, MapElement ship_from) { return can_move_ship(ship_from.edge, ship_to.edge); } void build_bridge_cb(MapElement edge, G_GNUC_UNUSED MapElement extra) { cb_build_bridge(edge.edge); } static void cancel_move_ship_cb(void) { callbacks.instructions(_("Ship movement canceled.")); gui_prompt_hide(); } void move_ship_cb(MapElement edge, G_GNUC_UNUSED MapElement extra) { MapElement ship_from; ship_from.edge = edge.edge; callbacks.instructions(_("Select a new location for the ship.")); gui_prompt_show(_("Select a new location for the ship.")); gui_cursor_set(SHIP_CURSOR, can_ship_be_moved_to, do_move_ship_cb, cancel_move_ship_cb, &ship_from); } void build_settlement_cb(MapElement node, G_GNUC_UNUSED MapElement extra) { cb_build_settlement(node.node); } void build_city_cb(MapElement node, G_GNUC_UNUSED MapElement extra) { cb_build_city(node.node); } void build_city_wall_cb(MapElement node, G_GNUC_UNUSED MapElement extra) { cb_build_city_wall(node.node); } /* trade */ static void frontend_state_trade(GuiEvent event) { static gboolean trading = FALSE; const QuoteInfo *quote; switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_TRADE_CALL, can_call_for_quotes()); frontend_gui_check(GUI_TRADE_ACCEPT, trade_valid_selection()); frontend_gui_check(GUI_TRADE_FINISH, TRUE); frontend_gui_check(GUI_TRADE, TRUE); gui_cursor_none(); /* Finish single click build */ break; case GUI_TRADE_CALL: trading = TRUE; trade_new_trade(); cb_domestic(trade_we_supply(), trade_we_receive()); return; case GUI_TRADE_ACCEPT: quote = trade_current_quote(); g_assert(quote != NULL); if (quote->is_domestic) { trade_perform_domestic(my_player_num(), quote->var.d.player_num, quote->var.d.quote_num, quote->var.d.supply, quote->var.d.receive); } else { trade_perform_maritime(quote->var.m.ratio, quote->var.m.supply, quote->var.m.receive); } return; case GUI_TRADE_FINISH: case GUI_TRADE: /* stop trading. Only let the network know about it if it * knew we were trading in the first place. */ if (trading) cb_end_trade(); trading = FALSE; trade_finish(); set_gui_state(frontend_state_turn); return; default: break; } } void frontend_trade_add_quote(int player_num, int quote_num, const gint * they_supply, const gint * they_receive) { trade_add_quote(player_num, quote_num, they_supply, they_receive); frontend_gui_update(); } void frontend_trade_remove_quote(int player_num, int quote_num) { trade_delete_quote(player_num, quote_num); frontend_gui_update(); } void frontend_trade_player_end(gint player_num) { trade_player_finish(player_num); frontend_gui_update(); } static void frontend_state_quote(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_QUOTE_SUBMIT, can_submit_quote()); frontend_gui_check(GUI_QUOTE_DELETE, can_delete_quote()); frontend_gui_check(GUI_QUOTE_REJECT, can_reject_quote()); break; case GUI_QUOTE_SUBMIT: cb_quote(quote_next_num(), quote_we_supply(), quote_we_receive()); return; case GUI_QUOTE_DELETE: cb_delete_quote(quote_current_quote()->var.d.quote_num); return; case GUI_QUOTE_REJECT: quote_player_finish(my_player_num()); cb_end_quote(); return; default: break; } } void frontend_quote(gint player_num, gint * they_supply, gint * they_receive) { if (get_gui_state() == frontend_state_quote) { quote_begin_again(player_num, they_supply, they_receive); } else { quote_begin(player_num, they_supply, they_receive); set_gui_state(frontend_state_quote); } frontend_gui_update(); } void frontend_quote_add(int player_num, int quote_num, const gint * they_supply, const gint * they_receive) { quote_add_quote(player_num, quote_num, they_supply, they_receive); frontend_gui_update(); } void frontend_quote_remove(int player_num, int quote_num) { quote_delete_quote(player_num, quote_num); frontend_gui_update(); } void frontend_quote_player_end(gint player_num) { quote_player_finish(player_num); frontend_gui_update(); } void frontend_quote_end(void) { if (get_gui_state() == frontend_state_quote) { quote_finish(); set_gui_state(frontend_state_idle); } } void frontend_quote_start(void) { /*set_gui_state (frontend_state_quote); */ } void frontend_quote_monitor(void) { } static gboolean check_road(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_road_be_built(element.edge, owner); } static gboolean check_ship(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_ship_be_built(element.edge, owner); } static gboolean check_ship_move(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_ship_be_moved(element.edge, owner); } static gboolean check_bridge(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_bridge_be_built(element.edge, owner); } static gboolean check_settlement(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_settlement_be_built(element.node, owner); } static gboolean check_city(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_settlement_be_upgraded(element.node, owner); } static gboolean check_city_wall(MapElement element, gint owner, G_GNUC_UNUSED MapElement extra) { return can_city_wall_be_built(element.node, owner); } /* turn */ static void frontend_state_turn(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_ROLL, !have_rolled_dice()); frontend_gui_check(GUI_UNDO, can_undo()); frontend_gui_check(GUI_ROAD, turn_can_build_road()); frontend_gui_check(GUI_SHIP, turn_can_build_ship()); frontend_gui_check(GUI_MOVE_SHIP, turn_can_move_ship()); frontend_gui_check(GUI_BRIDGE, turn_can_build_bridge()); frontend_gui_check(GUI_SETTLEMENT, turn_can_build_settlement()); frontend_gui_check(GUI_CITY, turn_can_build_city()); frontend_gui_check(GUI_CITY_WALL, turn_can_build_city_wall()); frontend_gui_check(GUI_TRADE, turn_can_trade()); frontend_gui_check(GUI_PLAY_DEVELOP, can_play_develop(develop_current_idx ())); frontend_gui_check(GUI_BUY_DEVELOP, can_buy_develop()); frontend_gui_check(GUI_FINISH, have_rolled_dice()); guimap_single_click_set_functions(check_road, build_road_cb, check_ship, build_ship_cb, check_bridge, build_bridge_cb, check_settlement, build_settlement_cb, check_city, build_city_cb, check_city_wall, build_city_wall_cb, check_ship_move, move_ship_cb, cancel_move_ship_cb); break; case GUI_ROLL: cb_roll(); break; case GUI_UNDO: cb_undo(); return; case GUI_ROAD: gui_cursor_set(ROAD_CURSOR, check_road, build_road_cb, NULL, NULL); return; case GUI_SHIP: gui_cursor_set(SHIP_CURSOR, check_ship, build_ship_cb, NULL, NULL); return; case GUI_MOVE_SHIP: gui_cursor_set(SHIP_CURSOR, check_ship_move, move_ship_cb, NULL, NULL); return; case GUI_BRIDGE: gui_cursor_set(BRIDGE_CURSOR, check_bridge, build_bridge_cb, NULL, NULL); return; case GUI_SETTLEMENT: gui_cursor_set(SETTLEMENT_CURSOR, check_settlement, build_settlement_cb, NULL, NULL); return; case GUI_CITY: gui_cursor_set(CITY_CURSOR, check_city, build_city_cb, NULL, NULL); return; case GUI_CITY_WALL: gui_cursor_set(CITY_WALL_CURSOR, check_city_wall, build_city_wall_cb, NULL, NULL); return; case GUI_TRADE: trade_begin(); set_gui_state(frontend_state_trade); return; case GUI_PLAY_DEVELOP: cb_play_develop(develop_current_idx()); return; case GUI_BUY_DEVELOP: cb_buy_develop(); return; case GUI_FINISH: cb_end_turn(); gui_cursor_none(); /* Finish single click build */ set_gui_state(frontend_state_idle); return; default: break; } } void frontend_turn(void) { /* if it already is our turn, just update the gui (maybe something * happened), but don't beep */ if (get_gui_state() == frontend_state_turn || get_gui_state() == frontend_state_trade || get_gui_state() == frontend_state_robber) { /* this is in the if, because it gets called from set_gui_state * anyway. */ frontend_gui_update(); return; } set_gui_state(frontend_state_turn); play_sound(SOUND_TURN); /* Notification */ notification_send(_("It is your turn."), PIONEERS_PIXMAP_DICE); } /* development card actions */ /* road building */ static void frontend_state_roadbuilding(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_UNDO, can_undo()); frontend_gui_check(GUI_ROAD, road_building_can_build_road()); frontend_gui_check(GUI_SHIP, road_building_can_build_ship()); frontend_gui_check(GUI_BRIDGE, road_building_can_build_bridge()); frontend_gui_check(GUI_FINISH, road_building_can_finish()); guimap_single_click_set_functions(check_road, build_road_cb, check_ship, build_ship_cb, check_bridge, build_bridge_cb, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); break; case GUI_UNDO: cb_undo(); return; case GUI_ROAD: gui_cursor_set(ROAD_CURSOR, check_road, build_road_cb, NULL, NULL); return; case GUI_SHIP: gui_cursor_set(SHIP_CURSOR, check_ship, build_ship_cb, NULL, NULL); return; case GUI_BRIDGE: gui_cursor_set(BRIDGE_CURSOR, check_bridge, build_bridge_cb, NULL, NULL); return; case GUI_FINISH: cb_end_turn(); gui_cursor_none(); /* Finish single click build */ set_gui_state(frontend_state_turn); gui_prompt_hide(); return; default: break; } } void frontend_roadbuilding(gint num_roads) { gui_prompt_show(road_building_message(num_roads)); if (get_gui_state() == frontend_state_roadbuilding) return; set_gui_state(frontend_state_roadbuilding); } /* monopoly */ static void frontend_state_monopoly(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_MONOPOLY, TRUE); break; case GUI_MONOPOLY: cb_choose_monopoly(monopoly_type()); monopoly_destroy_dlg(); set_gui_state(frontend_state_turn); return; default: break; } } void frontend_monopoly(void) { monopoly_create_dlg(); set_gui_state(frontend_state_monopoly); } /* year of plenty */ static void frontend_state_plenty(GuiEvent event) { gint plenty[NO_RESOURCE]; switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_PLENTY, plenty_can_activate()); break; case GUI_PLENTY: plenty_resources(plenty); cb_choose_plenty(plenty); plenty_destroy_dlg(); set_gui_state(frontend_state_turn); return; default: break; } } void frontend_plenty(const gint * bank) { plenty_create_dlg(bank); set_gui_state(frontend_state_plenty); } /* general actions */ /* discard */ static void frontend_state_discard(GuiEvent event) { gint discards[NO_RESOURCE]; switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_DISCARD, can_discard()); break; case GUI_DISCARD: discard_get_list(discards); cb_discard(discards); return; default: break; } } void frontend_discard(void) { /* set state to idle until we must discard (or discard ends) */ if (!discard_busy) { discard_busy = TRUE; discard_begin(); g_assert(previous_state == dummy_state); previous_state = get_gui_state(); set_gui_state(frontend_state_idle); gui_cursor_none(); /* Clear possible cursor */ } } void frontend_discard_add(gint player_num, gint discard_num) { if (player_num == my_player_num()) g_assert(callback_mode == MODE_DISCARD); discard_player_must(player_num, discard_num); if (player_num == my_player_num()) set_gui_state(frontend_state_discard); frontend_gui_update(); } void frontend_discard_remove(gint player_num) { if (discard_busy) { discard_player_did(player_num); if (player_num == my_player_num()) set_gui_state(frontend_state_idle); } frontend_gui_update(); } void frontend_discard_done(void) { discard_busy = FALSE; discard_end(); if (previous_state != dummy_state) { set_gui_state(previous_state); previous_state = dummy_state; } } /* gold */ static void frontend_state_gold(GuiEvent event) { gint gold[NO_RESOURCE]; switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_CHOOSE_GOLD, can_choose_gold()); break; case GUI_CHOOSE_GOLD: choose_gold_get_list(gold); cb_choose_gold(gold); return; default: break; } } void frontend_gold(void) { if (get_gui_state() != frontend_state_gold) { gold_choose_begin(); g_assert(previous_state == dummy_state); previous_state = get_gui_state(); set_gui_state(frontend_state_gold); gui_cursor_none(); /* Clear possible cursor */ } } void frontend_gold_add(gint player_num, gint gold_num) { gold_choose_player_prepare(player_num, gold_num); frontend_gui_update(); } void frontend_gold_choose(gint gold_num, const gint * bank) { gold_choose_player_must(gold_num, bank); frontend_gui_update(); } void frontend_gold_remove(gint player_num, gint * resources) { gold_choose_player_did(player_num, resources); frontend_gui_update(); } void frontend_gold_done(void) { gold_choose_end(); if (previous_state != dummy_state) { set_gui_state(previous_state); previous_state = dummy_state; } } void frontend_game_over(gint player, gint points) { gui_cursor_none(); /* Clear possible (robber) cursor */ if (robber_busy) { robber_busy = FALSE; gui_prompt_hide(); } gameover_create_dlg(player, points); set_gui_state(frontend_state_idle); } void frontend_rolled_dice(gint die1, gint die2, gint player_num) { histogram_dice_rolled(die1 + die2, player_num); identity_set_dice(die1, die2); gui_highlight_chits(die1 + die2); frontend_gui_update(); } static void frontend_state_robber(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_UNDO, callback_mode == MODE_ROB); break; case GUI_UNDO: cb_undo(); /* restart robber placement. */ frontend_robber(); break; default: break; } } static void rob_building(MapElement node, G_GNUC_UNUSED MapElement extra) { cb_rob(node.node->owner); } static void rob_edge(MapElement edge, G_GNUC_UNUSED MapElement extra) { cb_rob(edge.edge->owner); } /* Return TRUE if the node can be robbed. */ static gboolean can_building_be_robbed(MapElement node, G_GNUC_UNUSED int owner, MapElement robber) { gint idx; /* Can only steal from buildings that are not owned by me */ if (node.node->type == BUILD_NONE || node.node->owner == my_player_num()) return FALSE; /* Can only steal if the owner has some resources */ if (player_get(node.node->owner)->statistics[STAT_RESOURCES] == 0) return FALSE; /* Can only steal from buildings adjacent to hex with robber */ for (idx = 0; idx < G_N_ELEMENTS(node.node->hexes); idx++) if (node.node->hexes[idx] == robber.hex) return TRUE; return FALSE; } /** Returns TRUE if the edge can be robbed. */ static gboolean can_edge_be_robbed(MapElement edge, G_GNUC_UNUSED int owner, MapElement pirate) { gint idx; /* Can only steal from ships that are not owned by me */ if (edge.edge->type != BUILD_SHIP || edge.edge->owner == my_player_num()) return FALSE; /* Can only steal if the owner has some resources */ if (player_get(edge.edge->owner)->statistics[STAT_RESOURCES] == 0) return FALSE; /* Can only steal from edges adjacent to hex with pirate */ for (idx = 0; idx < G_N_ELEMENTS(edge.edge->hexes); idx++) if (edge.edge->hexes[idx] == pirate.hex) return TRUE; return FALSE; } /* User just placed the robber */ static void place_robber_or_pirate_cb(MapElement hex, G_GNUC_UNUSED MapElement extra) { cb_place_robber(hex.hex); } void frontend_steal_ship(void) { MapElement hex; hex.hex = map_pirate_hex(callbacks.get_map()); gui_cursor_set(STEAL_SHIP_CURSOR, can_edge_be_robbed, rob_edge, NULL, &hex); gui_prompt_show(_("Select the ship to steal from.")); } void frontend_steal_building(void) { MapElement hex; hex.hex = map_robber_hex(callbacks.get_map()); gui_cursor_set(STEAL_BUILDING_CURSOR, can_building_be_robbed, rob_building, NULL, &hex); gui_prompt_show(_("Select the building to steal from.")); } void frontend_robber_done(void) { robber_busy = FALSE; if (previous_state != dummy_state) { set_gui_state(previous_state); previous_state = dummy_state; } gui_prompt_hide(); } static gboolean check_move_robber_or_pirate(MapElement element, G_GNUC_UNUSED int owner, G_GNUC_UNUSED MapElement extra) { return can_robber_or_pirate_be_moved(element.hex); } void frontend_robber(void) { if (!robber_busy) { /* Do this only once. */ robber_busy = TRUE; g_assert(previous_state == dummy_state); previous_state = get_gui_state(); } /* These things are redone at undo. */ set_gui_state(frontend_state_robber); gui_cursor_set(ROBBER_CURSOR, check_move_robber_or_pirate, place_robber_or_pirate_cb, NULL, NULL); gui_prompt_show(_("Place the robber.")); frontend_gui_update(); } static gboolean check_road_setup(MapElement element, G_GNUC_UNUSED gint owner, G_GNUC_UNUSED MapElement extra) { return setup_check_road(element.edge); } static gboolean check_ship_setup(MapElement element, G_GNUC_UNUSED gint owner, G_GNUC_UNUSED MapElement extra) { return setup_check_ship(element.edge); } static gboolean check_bridge_setup(MapElement element, G_GNUC_UNUSED gint owner, G_GNUC_UNUSED MapElement extra) { return setup_check_bridge(element.edge); } static gboolean check_settlement_setup(MapElement element, G_GNUC_UNUSED gint owner, G_GNUC_UNUSED MapElement extra) { return setup_check_settlement(element.node); } static void frontend_mode_setup(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_UNDO, can_undo()); frontend_gui_check(GUI_ROAD, setup_can_build_road()); frontend_gui_check(GUI_BRIDGE, setup_can_build_bridge()); frontend_gui_check(GUI_SHIP, setup_can_build_ship()); frontend_gui_check(GUI_SETTLEMENT, setup_can_build_settlement()); frontend_gui_check(GUI_FINISH, setup_can_finish()); guimap_single_click_set_functions(check_road_setup, build_road_cb, check_ship_setup, build_ship_cb, check_bridge_setup, build_bridge_cb, check_settlement_setup, build_settlement_cb, NULL, NULL, NULL, NULL, NULL, NULL, NULL); break; case GUI_UNDO: /* The user has pressed the "Undo" button. Send a * command to the server to attempt the undo. The * server will respond telling us whether the undo was * successful or not. */ cb_undo(); return; case GUI_ROAD: gui_cursor_set(ROAD_CURSOR, check_road_setup, build_road_cb, NULL, NULL); return; case GUI_SHIP: gui_cursor_set(SHIP_CURSOR, check_ship_setup, build_ship_cb, NULL, NULL); return; case GUI_BRIDGE: gui_cursor_set(BRIDGE_CURSOR, check_bridge_setup, build_bridge_cb, NULL, NULL); return; case GUI_SETTLEMENT: gui_cursor_set(SETTLEMENT_CURSOR, check_settlement_setup, build_settlement_cb, NULL, NULL); return; case GUI_FINISH: cb_end_turn(); gui_cursor_none(); /* Finish single click build */ set_gui_state(frontend_state_idle); return; default: break; } } void frontend_setup(G_GNUC_UNUSED unsigned num_settlements, G_GNUC_UNUSED unsigned num_roads) { if (get_gui_state() == frontend_mode_setup) { frontend_gui_update(); return; } set_gui_state(frontend_mode_setup); play_sound(SOUND_TURN); /* Notification */ notification_send(_("It is your turn to setup."), PIONEERS_PIXMAP_SETTLEMENT); } pioneers-14.1/client/gtk/legend.c0000644000175000017500000002066511657430613013670 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2005 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "theme.h" #include "cost.h" #include "resource-view.h" /* The order of the terrain_names is EXTREMELY important! The order * must match the enum Terrain. */ static const gchar *terrain_names[] = { N_("Hill"), N_("Field"), N_("Mountain"), N_("Pasture"), N_("Forest"), N_("Desert"), N_("Sea"), N_("Gold") }; static GtkWidget *legend_dlg = NULL; static gboolean legend_did_connect = FALSE; static void legend_theme_changed(void); static void legend_rules_changed(void); static void add_legend_terrain(GtkWidget * table, guint row, guint col, Terrain terrain, Resource resource) { GtkWidget *area; GtkWidget *label; area = gtk_drawing_area_new(); gtk_widget_show(area); gtk_table_attach(GTK_TABLE(table), area, col, col + 1, row, row + 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_FILL, 0, 0); gtk_widget_set_size_request(area, 30, 34); g_signal_connect(G_OBJECT(area), "expose_event", G_CALLBACK(expose_terrain_cb), GINT_TO_POINTER(terrain)); label = gtk_label_new(_(terrain_names[terrain])); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, col + 1, col + 2, row, row + 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); if (resource < NO_RESOURCE) { label = resource_view_new_single_resource(resource); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, col + 2, col + 3, row, row + 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); label = gtk_label_new(resource_name(resource, TRUE)); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, col + 3, col + 4, row, row + 1, (GtkAttachOptions) GTK_FILL, (GtkAttachOptions) GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); } } static void add_legend_cost(GtkWidget * table, guint row, const gchar * iconname, const gchar * item, const gint * cost) { GtkWidget *label; GtkWidget *icon; icon = gtk_image_new_from_stock(iconname, GTK_ICON_SIZE_MENU); gtk_widget_show(icon); gtk_table_attach(GTK_TABLE(table), icon, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); label = gtk_label_new(item); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); label = resource_view_new(); resource_view_set(RESOURCE_VIEW(label), cost); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); } GtkWidget *legend_create_content(void) { GtkWidget *hbox; GtkWidget *vbox; GtkWidget *label; GtkWidget *table; GtkWidget *vsep; GtkWidget *alignment; guint num_rows; hbox = gtk_hbox_new(FALSE, 6); vbox = gtk_vbox_new(FALSE, 6); gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); label = gtk_label_new(NULL); /* Label */ gtk_label_set_markup(GTK_LABEL(label), _("Terrain yield")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); table = gtk_table_new(4, 9, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(alignment), table); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 6); add_legend_terrain(table, 0, 0, HILL_TERRAIN, BRICK_RESOURCE); add_legend_terrain(table, 1, 0, FIELD_TERRAIN, GRAIN_RESOURCE); add_legend_terrain(table, 2, 0, MOUNTAIN_TERRAIN, ORE_RESOURCE); add_legend_terrain(table, 3, 0, PASTURE_TERRAIN, WOOL_RESOURCE); vsep = gtk_vseparator_new(); gtk_widget_show(vsep); gtk_table_attach(GTK_TABLE(table), vsep, 4, 5, 0, 4, GTK_FILL, GTK_FILL, 0, 0); add_legend_terrain(table, 0, 5, FOREST_TERRAIN, LUMBER_RESOURCE); add_legend_terrain(table, 1, 5, GOLD_TERRAIN, GOLD_RESOURCE); add_legend_terrain(table, 2, 5, DESERT_TERRAIN, NO_RESOURCE); add_legend_terrain(table, 3, 5, SEA_TERRAIN, NO_RESOURCE); label = gtk_label_new(NULL); /* Label */ gtk_label_set_markup(GTK_LABEL(label), _("Building costs")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); num_rows = 4; if (have_ships()) num_rows++; if (have_bridges()) num_rows++; if (have_city_walls()) num_rows++; table = gtk_table_new(num_rows, 3, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(alignment), table); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 5); num_rows = 0; add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_ROAD, _("Road"), cost_road()); if (have_ships()) add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_SHIP, _("Ship"), cost_ship()); if (have_bridges()) add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_BRIDGE, _("Bridge"), cost_bridge()); add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_SETTLEMENT, _("Settlement"), cost_settlement()); add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_CITY, _("City"), cost_upgrade_settlement()); if (have_city_walls()) add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_CITY_WALL, _("City wall"), cost_city_wall()); add_legend_cost(table, num_rows++, PIONEERS_PIXMAP_DEVELOP, _("Development card"), cost_development()); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); gtk_widget_show(hbox); return hbox; } GtkWidget *legend_create_dlg(void) { GtkWidget *dlg_vbox; GtkWidget *vbox; if (legend_dlg != NULL) { gtk_window_present(GTK_WINDOW(legend_dlg)); return legend_dlg; } /* Dialog caption */ legend_dlg = gtk_dialog_new_with_buttons(_("Legend"), GTK_WINDOW(app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); g_signal_connect(G_OBJECT(legend_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &legend_dlg); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(legend_dlg)); gtk_widget_show(dlg_vbox); vbox = legend_create_content(); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, TRUE, TRUE, 0); gtk_widget_show(legend_dlg); if (!legend_did_connect) { theme_register_callback(G_CALLBACK(legend_theme_changed)); gui_rules_register_callback(G_CALLBACK (legend_rules_changed)); legend_did_connect = TRUE; } /* destroy dialog when OK is clicked */ g_signal_connect(legend_dlg, "response", G_CALLBACK(gtk_widget_destroy), NULL); return legend_dlg; } static void legend_theme_changed(void) { if (legend_dlg) gtk_widget_queue_draw(legend_dlg); } static void legend_rules_changed(void) { if (legend_dlg) { GtkWidget *dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(legend_dlg)); GtkWidget *vbox; GList *list = gtk_container_get_children(GTK_CONTAINER(dlg_vbox)); if (g_list_length(list) > 0) gtk_widget_destroy(GTK_WIDGET(list->data)); vbox = legend_create_content(); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, TRUE, TRUE, 0); g_list_free(list); } } pioneers-14.1/client/gtk/monopoly.c0000644000175000017500000001013411657430613014274 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" static GtkWidget *monop_dlg; static Resource monop_type; static void monop_toggled(GtkToggleButton * btn, gpointer type) { if (gtk_toggle_button_get_active(btn)) monop_type = GPOINTER_TO_INT(type); } static GSList *add_resource_btn(GtkWidget * vbox, GSList * grp, Resource resource) { GtkWidget *btn; gboolean active; active = grp == NULL; btn = gtk_radio_button_new_with_label(grp, resource_name(resource, TRUE)); grp = gtk_radio_button_get_group(GTK_RADIO_BUTTON(btn)); gtk_widget_show(btn); gtk_box_pack_start(GTK_BOX(vbox), btn, TRUE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(btn), active); g_signal_connect(G_OBJECT(btn), "toggled", G_CALLBACK(monop_toggled), GINT_TO_POINTER(resource)); if (active) monop_type = resource; return grp; } static void monopoly_destroyed(G_GNUC_UNUSED GtkWidget * widget, G_GNUC_UNUSED gpointer data) { if (callback_mode == MODE_MONOPOLY) monopoly_create_dlg(); } Resource monopoly_type(void) { return monop_type; } void monopoly_create_dlg(void) { GtkWidget *dlg_vbox; GtkWidget *vbox; GtkWidget *lbl; GSList *monop_grp = NULL; if (monop_dlg != NULL) { gtk_window_present(GTK_WINDOW(monop_dlg)); return; }; /* Dialog caption */ monop_dlg = gtk_dialog_new_with_buttons(_("Monopoly"), GTK_WINDOW(app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(G_OBJECT(monop_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &monop_dlg); gtk_widget_realize(monop_dlg); /* Disable close */ gdk_window_set_functions(gtk_widget_get_window(monop_dlg), GDK_FUNC_ALL | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(monop_dlg)); gtk_widget_show(dlg_vbox); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); /* Label */ lbl = gtk_label_new(_("Select the resource you wish to " "monopolize.")); gtk_widget_show(lbl); gtk_box_pack_start(GTK_BOX(vbox), lbl, TRUE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 0, 0.5); monop_grp = add_resource_btn(vbox, monop_grp, BRICK_RESOURCE); monop_grp = add_resource_btn(vbox, monop_grp, GRAIN_RESOURCE); monop_grp = add_resource_btn(vbox, monop_grp, ORE_RESOURCE); monop_grp = add_resource_btn(vbox, monop_grp, WOOL_RESOURCE); monop_grp = add_resource_btn(vbox, monop_grp, LUMBER_RESOURCE); frontend_gui_register(gui_get_dialog_button (GTK_DIALOG(monop_dlg), 0), GUI_MONOPOLY, "clicked"); gtk_dialog_set_default_response(GTK_DIALOG(monop_dlg), GTK_RESPONSE_OK); /* This _must_ be after frontend_gui_register, otherwise the * regeneration of the button happens before the destruction, which * results in an incorrectly sensitive OK button. */ g_signal_connect(gui_get_dialog_button(GTK_DIALOG(monop_dlg), 0), "destroy", G_CALLBACK(monopoly_destroyed), NULL); gtk_widget_show(monop_dlg); frontend_gui_update(); } void monopoly_destroy_dlg(void) { if (monop_dlg == NULL) return; gtk_widget_destroy(monop_dlg); monop_dlg = NULL; } pioneers-14.1/client/gtk/name.c0000644000175000017500000002217711657430613013352 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003,2006 Bas Wijnen * Copyright (C) 2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "frontend.h" #include "player-icon.h" #include "config-gnome.h" #include "client.h" typedef struct { GtkWidget *dlg; GtkWidget *name_entry; GtkWidget *check_btn; GtkWidget *image; GtkWidget *style_hbox; GtkWidget *color_btn1; GtkWidget *color_btn2; GtkWidget *variant_btn; gchar *original_name; gchar *original_style; gchar *current_style; gulong name_change_cb_id; } DialogData; static DialogData name_dialog; static GdkPixbuf *create_icon(GtkWidget * widget, const gchar * style); static void name_change_name_cb(NotifyingString * name) { gchar *nm = notifying_string_get(name); gtk_entry_set_text(GTK_ENTRY(name_dialog.name_entry), nm); g_free(nm); } static void change_name_cb(G_GNUC_UNUSED GtkDialog * dlg, int response_id, gpointer user_data) { DialogData *dialog = user_data; g_signal_handler_disconnect(requested_name, dialog->name_change_cb_id); if (response_id == GTK_RESPONSE_OK) { const gchar *new_name = gtk_entry_get_text(GTK_ENTRY(dialog->name_entry)); const gchar *new_style = dialog->current_style; if (0 != strcmp(new_name, dialog->original_name)) { notifying_string_set(requested_name, new_name); } if (0 != strcmp(new_style, dialog->original_style)) { notifying_string_set(requested_style, new_style); } } g_free(dialog->original_name); g_free(dialog->original_style); g_free(dialog->current_style); gtk_widget_destroy(GTK_WIDGET(dialog->dlg)); } static void change_style_cb(G_GNUC_UNUSED GtkWidget * widget, gpointer user_data) { GdkPixbuf *icon; DialogData *dialog = user_data; g_free(dialog->current_style); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->check_btn))) { GdkColor c1; GdkColor c2; gint variant; gtk_color_button_get_color(GTK_COLOR_BUTTON (dialog->color_btn1), &c1); gtk_color_button_get_color(GTK_COLOR_BUTTON (dialog->color_btn2), &c2); variant = gtk_range_get_value(GTK_RANGE(dialog->variant_btn)) - 1; dialog->current_style = playericon_create_human_style(&c1, variant, &c2); } else { dialog->current_style = g_strdup(default_player_style); } icon = create_icon(dialog->image, dialog->current_style); gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->image), icon); g_object_unref(icon); } static void activate_style_cb(GtkWidget * widget, gpointer user_data) { DialogData *dialog = user_data; gtk_widget_set_sensitive(dialog->style_hbox, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dialog->check_btn))); change_style_cb(widget, user_data); } void name_create_dlg(void) { GtkWidget *dlg_vbox; GtkWidget *hbox; GtkWidget *lbl; GdkPixbuf *icon; GdkColor face_color, variant_color; gint variant; gboolean parse_ok; if (name_dialog.dlg != NULL) { gtk_window_present(GTK_WINDOW(name_dialog.dlg)); return; }; name_dialog.dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("" "Change Player Name"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(name_dialog.dlg), GTK_RESPONSE_OK); g_signal_connect(G_OBJECT(name_dialog.dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &name_dialog.dlg); gtk_widget_realize(name_dialog.dlg); gdk_window_set_functions(gtk_widget_get_window(name_dialog.dlg), GDK_FUNC_MOVE | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(name_dialog.dlg)); gtk_widget_show(dlg_vbox); hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), hbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); /* Label */ lbl = gtk_label_new(_("Player name:")); gtk_widget_show(lbl); gtk_box_pack_start(GTK_BOX(hbox), lbl, FALSE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 1, 0.5); name_dialog.name_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(name_dialog.name_entry), MAX_NAME_LENGTH); gtk_widget_show(name_dialog.name_entry); gtk_box_pack_start(GTK_BOX(hbox), name_dialog.name_entry, TRUE, TRUE, 0); gtk_entry_set_width_chars(GTK_ENTRY(name_dialog.name_entry), MAX_NAME_LENGTH); name_dialog.original_name = notifying_string_get(requested_name); gtk_entry_set_text(GTK_ENTRY(name_dialog.name_entry), name_dialog.original_name); gtk_entry_set_activates_default(GTK_ENTRY(name_dialog.name_entry), TRUE); name_dialog.name_change_cb_id = g_signal_connect(requested_name, "changed", G_CALLBACK(name_change_name_cb), NULL); name_dialog.original_style = notifying_string_get(requested_style); name_dialog.current_style = notifying_string_get(requested_style); parse_ok = playericon_parse_human_style(name_dialog.current_style, &face_color, &variant, &variant_color); hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), hbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); name_dialog.style_hbox = gtk_hbox_new(FALSE, 5); gtk_widget_set_sensitive(name_dialog.style_hbox, FALSE); name_dialog.check_btn = gtk_check_button_new(); gtk_widget_show(name_dialog.check_btn); gtk_box_pack_start(GTK_BOX(hbox), name_dialog.check_btn, FALSE, TRUE, 0); g_signal_connect(name_dialog.check_btn, "toggled", G_CALLBACK(activate_style_cb), &name_dialog); icon = create_icon(hbox, name_dialog.original_style); name_dialog.image = gtk_image_new_from_pixbuf(icon); g_object_unref(icon); gtk_widget_show(name_dialog.image); gtk_box_pack_start(GTK_BOX(hbox), name_dialog.image, FALSE, TRUE, 0); gtk_widget_show(name_dialog.style_hbox); gtk_box_pack_start(GTK_BOX(hbox), name_dialog.style_hbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER (name_dialog.style_hbox), 5); /* Label: set player icon preferences */ lbl = gtk_label_new(_("Face:")); gtk_widget_show(lbl); gtk_box_pack_start(GTK_BOX(name_dialog.style_hbox), lbl, FALSE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 1, 0.5); name_dialog.color_btn1 = gtk_color_button_new(); gtk_color_button_set_color(GTK_COLOR_BUTTON (name_dialog.color_btn1), &face_color); gtk_widget_show(name_dialog.color_btn1); gtk_box_pack_start(GTK_BOX(name_dialog.style_hbox), name_dialog.color_btn1, FALSE, TRUE, 0); g_signal_connect(name_dialog.color_btn1, "color-set", G_CALLBACK(change_style_cb), &name_dialog); /* Label: set player icon preferences */ lbl = gtk_label_new(_("Variant:")); gtk_widget_show(lbl); gtk_box_pack_start(GTK_BOX(name_dialog.style_hbox), lbl, FALSE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(lbl), 1, 0.5); name_dialog.color_btn2 = gtk_color_button_new(); gtk_color_button_set_color(GTK_COLOR_BUTTON (name_dialog.color_btn2), &variant_color); gtk_widget_show(name_dialog.color_btn2); gtk_box_pack_start(GTK_BOX(name_dialog.style_hbox), name_dialog.color_btn2, FALSE, TRUE, 0); g_signal_connect(name_dialog.color_btn2, "color-set", G_CALLBACK(change_style_cb), &name_dialog); name_dialog.variant_btn = gtk_hscale_new_with_range(1.0, 7.0, 1.0); gtk_scale_set_digits(GTK_SCALE(name_dialog.variant_btn), 0); gtk_scale_set_value_pos(GTK_SCALE(name_dialog.variant_btn), GTK_POS_LEFT); gtk_range_set_value(GTK_RANGE(name_dialog.variant_btn), variant + 1); gtk_widget_show(name_dialog.variant_btn); gtk_box_pack_start(GTK_BOX(name_dialog.style_hbox), name_dialog.variant_btn, TRUE, TRUE, 0); g_signal_connect(name_dialog.variant_btn, "value-changed", G_CALLBACK(change_style_cb), &name_dialog); /* destroy dialog when OK or Cancel button gets clicked */ g_signal_connect(name_dialog.dlg, "response", G_CALLBACK(change_name_cb), &name_dialog); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (name_dialog.check_btn), parse_ok); gtk_widget_show(name_dialog.dlg); gtk_widget_grab_focus(name_dialog.name_entry); } GdkPixbuf *create_icon(GtkWidget * widget, const gchar * style) { return playericon_create_icon(widget, style, player_or_spectator_color (my_player_num()), my_player_spectator(), TRUE, TRUE); } pioneers-14.1/client/gtk/notification.c0000644000175000017500000000210211652323243015075 00000000000000#include "config.h" #include "notification.h" #include "frontend.h" #ifdef HAVE_NOTIFY #include #include #endif static gboolean show_notifications = TRUE; void notification_init(void) { #ifdef HAVE_NOTIFY notify_init(g_get_application_name()); #endif } gboolean get_show_notifications(void) { return show_notifications; } void set_show_notifications(gboolean notify) { show_notifications = notify; } void notification_send(const gchar * text, const gchar * icon) { #ifdef HAVE_NOTIFY if (show_notifications) { NotifyNotification *notification; gchar *filename; filename = g_build_filename(DATADIR, "pixmaps", icon, NULL); #ifdef HAVE_OLD_NOTIFY notification = notify_notification_new(g_get_application_name(), text, filename, NULL); #else notification = notify_notification_new(g_get_application_name(), text, filename); g_free(filename); #endif notify_notification_set_urgency(notification, NOTIFY_URGENCY_LOW); notify_notification_show(notification, NULL); } #endif } pioneers-14.1/client/gtk/notification.h0000644000175000017500000000037711652323243015116 00000000000000#ifndef _notification_h #define _notification_h #include void notification_init(void); void notification_send(const gchar * text, const gchar * icon); gboolean get_show_notifications(void); void set_show_notifications(gboolean notify); #endif pioneers-14.1/client/gtk/offline.c0000644000175000017500000002047111746474234014055 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003,2006 Bas Wijnen * Copyright (C) 2004,2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "frontend.h" #ifdef HAVE_LIBGNOME #include #endif #include "common_gtk.h" #include "config-gnome.h" #include "theme.h" #include "histogram.h" #include "version.h" #include "notification.h" #include "client.h" static gboolean have_dlg = FALSE; static gboolean connectable = FALSE; static const gchar *name = NULL; static gboolean spectator = FALSE; static const gchar *server = NULL; static const gchar *port = NULL; static const gchar *meta_server = NULL; static gboolean server_from_commandline = FALSE; static gboolean quit_when_offline = FALSE; static gboolean enable_debug = FALSE; static gboolean show_version = FALSE; static GOptionEntry commandline_entries[] = { /* Commandline option of client: hostname of the server */ {"server", 's', 0, G_OPTION_ARG_STRING, &server, N_("Server host"), PIONEERS_DEFAULT_GAME_HOST}, /* Commandline option of client: port of the server */ {"port", 'p', 0, G_OPTION_ARG_STRING, &port, N_("Server port"), PIONEERS_DEFAULT_GAME_PORT}, /* Commandline option of client: name of the player */ {"name", 'n', 0, G_OPTION_ARG_STRING, &name, N_("Player name"), NULL}, /* Commandline option of client: do we want to be a spectator */ {"spectator", 'v', 0, G_OPTION_ARG_NONE, &spectator, N_("Connect as a spectator"), NULL}, /* Commandline option of client: hostname of the meta-server */ {"meta-server", 'm', 0, G_OPTION_ARG_STRING, &meta_server, N_("Meta-server Host"), PIONEERS_DEFAULT_META_SERVER}, {"debug", '\0', 0, G_OPTION_ARG_NONE, &enable_debug, /* Commandline option of client: enable debug logging */ N_("Enable debug messages"), NULL}, {"version", '\0', 0, G_OPTION_ARG_NONE, &show_version, /* Commandline option of client: version */ N_("Show version information"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; static void frontend_offline_start_connect_cb(void) { connect_create_dlg(); have_dlg = TRUE; gui_set_instructions(_("Select a game to join.")); frontend_gui_update(); } /* gui function to handle gui events in offline mode */ static void frontend_offline_gui(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_CONNECT_TRY, TRUE); frontend_gui_check(GUI_CONNECT, !have_dlg && connectable); frontend_gui_check(GUI_DISCONNECT, !have_dlg && !connectable); break; case GUI_CONNECT_TRY: gui_show_splash_page(FALSE, NULL); gui_set_net_status(_("Connecting")); connectable = FALSE; have_dlg = FALSE; cb_connect(connect_get_server(), connect_get_port(), connect_get_spectator()); frontend_gui_update(); break; case GUI_CONNECT: frontend_offline_start_connect_cb(); break; case GUI_CONNECT_CANCEL: have_dlg = FALSE; gui_set_instructions(_("Welcome to Pioneers!")); frontend_gui_update(); break; default: break; } } void frontend_disconnect(void) { quit_when_offline = FALSE; cb_disconnect(); } /* this function is called when offline mode is entered. */ void frontend_offline(void) { connectable = TRUE; if (have_dlg) return; gui_cursor_none(); /* Clear possible cursor */ frontend_discard_done(); frontend_gold_done(); /* set the callback for gui events */ set_gui_state(frontend_offline_gui); if (quit_when_offline) { route_gui_event(GUI_QUIT); } /* Commandline overrides the dialog */ if (server_from_commandline) { server_from_commandline = FALSE; quit_when_offline = TRUE; route_gui_event(GUI_CONNECT_TRY); } else { frontend_offline_start_connect_cb(); } } static void frontend_main(void) { gtk_main(); themes_cleanup(); } /* this function is called to let the frontend initialize itself. */ void frontend_init_gtk_et_al(int argc, char **argv) { GOptionContext *context; GError *error = NULL; frontend_gui_register_init(); set_ui_driver(>K_Driver); config_init("pioneers"); /* Long description in the commandline for pioneers: help */ context = g_option_context_new(_("- Play a game of Pioneers")); g_option_context_add_main_entries(context, commandline_entries, PACKAGE); g_option_context_add_group(context, gtk_get_option_group(TRUE)); g_option_context_parse(context, &argc, &argv, &error); g_option_context_free(context); if (error != NULL) { g_print("%s\n", error->message); g_error_free(error); exit(1); } if (show_version) { g_print(_("Pioneers version:")); g_print(" "); g_print(FULL_VERSION); g_print("\n"); exit(0); } #if defined(HAVE_HELP) && defined(HAVE_LIBGNOME) gnome_program_init(PACKAGE, FULL_VERSION, LIBGNOME_MODULE, argc, argv, GNOME_PARAM_APP_DATADIR, DATADIR, NULL); #endif /* HAVE_HELP && HAVE_LIBGNOME */ #if ENABLE_NLS /* Gtk+ handles the locale, we must bind the translations */ bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); bind_textdomain_codeset(PACKAGE, "UTF-8"); #endif /* Name of the application */ g_set_application_name(_("Pioneers")); callbacks.mainloop = &frontend_main; callbacks.quit = >k_main_quit; } static void frontend_change_name_cb(NotifyingString * name) { gchar *nm = notifying_string_get(name); config_set_string("connect/name", nm); if (callback_mode != MODE_INIT) { cb_name_change(nm); } g_free(nm); } static void frontend_change_style_cb(NotifyingString * style) { gchar *st = notifying_string_get(style); config_set_string("connect/style", st); if (callback_mode != MODE_INIT) { cb_style_change(st); } g_free(st); } /* this function is called to let the frontend initialize itself. */ void frontend_init(void) { gboolean default_returned; gchar *style; set_enable_debug(enable_debug); /* save the new settings when changed */ g_signal_connect(requested_name, "changed", G_CALLBACK(frontend_change_name_cb), NULL); g_signal_connect(requested_style, "changed", G_CALLBACK(frontend_change_style_cb), NULL); /* Create the application window */ themes_init(); settings_init(); histogram_init(); notification_init(); gui_build_interface(); /* in theory, all windows are created now... * set logging to message window */ log_set_func_message_window(); if (!name) { name = config_get_string("connect/name", &default_returned); if (default_returned) { name = g_strdup(g_get_user_name()); } /* If --spectator is used, we are now a spectator. If not, get the * correct value from the config file. * To allow specifying "don't be a spectator", only check the * config file if --name is not used. */ if (!spectator) { spectator = config_get_int_with_default ("connect/spectator", 0) ? TRUE : FALSE; } } style = config_get_string("connect/style", &default_returned); if (default_returned) { style = g_strdup(default_player_style); } notifying_string_set(requested_name, name); connect_set_spectator(spectator); notifying_string_set(requested_style, style); g_free(style); if (server && port) { server_from_commandline = TRUE; } else { if (server || port) g_warning("Only server or port set, " "ignoring command line"); server_from_commandline = FALSE; server = config_get_string("connect/server=" PIONEERS_DEFAULT_GAME_HOST, &default_returned); port = config_get_string("connect/port=" PIONEERS_DEFAULT_GAME_PORT, &default_returned); } connect_set_server(server); connect_set_port(port); if (!meta_server) meta_server = config_get_string("connect/meta-server=" PIONEERS_DEFAULT_META_SERVER, &default_returned); connect_set_meta_server(meta_server); } pioneers-14.1/client/gtk/plenty.c0000644000175000017500000001003211657430613013730 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "resource-table.h" static struct { GtkWidget *dlg; GtkWidget *resource_widget; gint bank[NO_RESOURCE]; } plenty; static void amount_changed_cb(G_GNUC_UNUSED ResourceTable * rt, G_GNUC_UNUSED gpointer user_data) { frontend_gui_update(); } void plenty_resources(gint * resources) { resource_table_get_amount(RESOURCETABLE(plenty.resource_widget), resources); } static void plenty_destroyed(G_GNUC_UNUSED GtkWidget * widget, G_GNUC_UNUSED gpointer data) { if (callback_mode == MODE_PLENTY) plenty_create_dlg(NULL); } void plenty_create_dlg(const gint * bank) { GtkWidget *dlg_vbox; GtkWidget *vbox; const char *str; gint r; gint total; plenty.dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("" "Year of Plenty"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_signal_connect(GTK_OBJECT(plenty.dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &plenty.dlg); gtk_widget_realize(plenty.dlg); /* Disable close */ gdk_window_set_functions(gtk_widget_get_window(plenty.dlg), GDK_FUNC_ALL | GDK_FUNC_CLOSE); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(plenty.dlg)); gtk_widget_show(dlg_vbox); vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); total = 0; for (r = 0; r < NO_RESOURCE; ++r) { if (bank != NULL) plenty.bank[r] = bank[r]; total += plenty.bank[r]; } if (total == 1) str = _("Please choose one resource from the bank"); else if (total >= 2) { total = 2; str = _("Please choose two resources from the bank"); } else str = _("The bank is empty"); plenty.resource_widget = resource_table_new(str, RESOURCE_TABLE_MORE_IN_HAND, TRUE, TRUE); resource_table_set_total(RESOURCETABLE(plenty.resource_widget), /* Text for total in year of plenty dialog */ _("Total resources"), total); resource_table_limit_bank(RESOURCETABLE(plenty.resource_widget), TRUE); resource_table_set_bank(RESOURCETABLE(plenty.resource_widget), plenty.bank); gtk_widget_show(plenty.resource_widget); gtk_box_pack_start(GTK_BOX(vbox), plenty.resource_widget, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(plenty.resource_widget), "change", G_CALLBACK(amount_changed_cb), NULL); frontend_gui_register(gui_get_dialog_button (GTK_DIALOG(plenty.dlg), 0), GUI_PLENTY, "clicked"); /* This _must_ be after frontend_gui_register, otherwise the * regeneration of the button happens before the destruction, which * results in an incorrectly sensitive OK button. */ g_signal_connect(gui_get_dialog_button(GTK_DIALOG(plenty.dlg), 0), "destroy", G_CALLBACK(plenty_destroyed), NULL); gtk_widget_show(plenty.dlg); frontend_gui_update(); } void plenty_destroy_dlg(void) { if (plenty.dlg == NULL) return; gtk_widget_destroy(plenty.dlg); plenty.dlg = NULL; } gboolean plenty_can_activate(void) { return resource_table_is_total_reached(RESOURCETABLE (plenty.resource_widget)); } pioneers-14.1/client/gtk/player.c0000644000175000017500000004660311657430613013726 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * Copyright (C) 2004-2008 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "colors.h" #include "frontend.h" #include "log.h" #include "gtkbugs.h" #include "common_gtk.h" #include "player-icon.h" #include "audio.h" static void player_show_connected_at_iter(gint player_num, gboolean connected, GtkTreeIter * iter); static GdkColor ps_settlement = { 0, 0xbb00, 0x0000, 0x0000 }; static GdkColor ps_city = { 0, 0xff00, 0x0000, 0x0000 }; static GdkColor ps_city_wall = { 0, 0xff00, 0x0000, 0x0000 }; static GdkColor ps_largest = { 0, 0x1c00, 0xb500, 0xed00 }; static GdkColor ps_soldier = { 0, 0xe500, 0x8f00, 0x1600 }; static GdkColor ps_resource = { 0, 0x0000, 0x0000, 0xFF00 }; static GdkColor ps_development = { 0, 0xc600, 0xc600, 0x1300 }; static GdkColor ps_building = { 0, 0x0b00, 0xed00, 0x8900 }; typedef struct { const gchar *singular; const gchar *plural; GdkColor *textcolor; } Statistic; static Statistic statistics[] = { {N_("Settlement"), N_("Settlements"), &ps_settlement}, {N_("City"), N_("Cities"), &ps_city}, {N_("City wall"), N_("City walls"), &ps_city_wall}, {N_("Largest army"), NULL, &ps_largest}, {N_("Longest road"), NULL, &ps_largest}, {N_("Chapel"), N_("Chapels"), &ps_building}, {N_("Pioneer university"), N_("Pioneer universities"), &ps_building}, {N_("Governor's house"), N_("Governor's houses"), &ps_building}, {N_("Library"), N_("Libraries"), &ps_building}, {N_("Market"), N_("Markets"), &ps_building}, {N_("Soldier"), N_("Soldiers"), &ps_soldier}, {N_("Resource card"), N_("Resource cards"), &ps_resource}, {N_("Development card"), N_("Development cards"), &ps_development} }; enum { SUMMARY_COLUMN_PLAYER_ICON, /**< Player icon */ SUMMARY_COLUMN_PLAYER_NUM, /**< Internal: player number */ SUMMARY_COLUMN_TEXT, /**< Description of the items */ SUMMARY_COLUMN_TEXT_COLOUR, /**< Colour of the description */ SUMMARY_COLUMN_SCORE, /**< Score of the items (as string) */ SUMMARY_COLUMN_STATISTIC, /**< enum Statistic value+1, or 0 if not in the enum */ SUMMARY_COLUMN_POINTS_ID, /**< Id of points, or -1 */ SUMMARY_COLUMN_LAST }; static Player players[MAX_PLAYERS]; static GtkListStore *summary_store; /**< the player summary data */ static GtkWidget *summary_widget; /**< the player summary widget */ static gboolean summary_color_enabled = TRUE; /** Structure to find combination of player and statistic */ struct Player_statistic { enum TFindResult result; GtkTreeIter iter; gint player_num; gint statistic; }; /** Structure to find combination of player and points */ struct Player_point { enum TFindResult result; GtkTreeIter iter; gint player_num; gint point_id; }; static GtkWidget *turn_area; /** turn indicator in status bar */ /** Width for each icon */ static const gint turn_area_icon_width = 28; /** Separation between each icon */ static const gint turn_area_icon_separation = 2; void player_init(void) { colors_init(); playericon_init(); } GdkColor *player_color(gint player_num) { return colors_get_player(player_num); } GdkColor *player_or_spectator_color(gint player_num) { if (player_is_spectator(player_num)) { /* spectator color is always black */ return &black; } return colors_get_player(player_num); } GdkPixbuf *player_create_icon(GtkWidget * widget, gint player_num, gboolean connected) { return playericon_create_icon(widget, player_get_style(player_num), player_or_spectator_color (player_num), player_is_spectator(player_num), connected, FALSE); } /** Locate a line suitable for the statistic */ static gboolean summary_locate_statistic(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data) { struct Player_statistic *ps = (struct Player_statistic *) user_data; gint current_player; gint current_statistic; gtk_tree_model_get(model, iter, SUMMARY_COLUMN_PLAYER_NUM, ¤t_player, SUMMARY_COLUMN_STATISTIC, ¤t_statistic, -1); if (current_player > ps->player_num) { ps->result = FIND_MATCH_INSERT_BEFORE; ps->iter = *iter; return TRUE; } else if (current_player == ps->player_num) { if (current_statistic > ps->statistic) { ps->result = FIND_MATCH_INSERT_BEFORE; ps->iter = *iter; return TRUE; } else if (current_statistic == ps->statistic) { ps->result = FIND_MATCH_EXACT; ps->iter = *iter; return TRUE; } } return FALSE; } /** Locate a line suitable for the statistic */ static gboolean summary_locate_point(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data) { struct Player_point *pp = (struct Player_point *) user_data; gint current_player; gint current_point_id; gint current_statistic; gtk_tree_model_get(model, iter, SUMMARY_COLUMN_PLAYER_NUM, ¤t_player, SUMMARY_COLUMN_STATISTIC, ¤t_statistic, SUMMARY_COLUMN_POINTS_ID, ¤t_point_id, -1); if (current_player > pp->player_num) { pp->result = FIND_MATCH_INSERT_BEFORE; pp->iter = *iter; return TRUE; } else if (current_player == pp->player_num) { if (current_statistic >= STAT_SOLDIERS) { pp->result = FIND_MATCH_INSERT_BEFORE; pp->iter = *iter; return TRUE; } if (current_point_id > pp->point_id) { pp->result = FIND_MATCH_INSERT_BEFORE; pp->iter = *iter; return TRUE; } else if (current_point_id == pp->point_id) { pp->result = FIND_MATCH_EXACT; pp->iter = *iter; return TRUE; } } return FALSE; } /** Function to redisplay the running point total for the indicated player */ static void refresh_victory_point_total(int player_num) { gchar points[16]; GtkTreeIter iter; enum TFindResult found; if (player_num < 0 || player_num >= G_N_ELEMENTS(players)) return; found = find_integer_in_tree(GTK_TREE_MODEL(summary_store), &iter, SUMMARY_COLUMN_PLAYER_NUM, player_num); if (found == FIND_MATCH_EXACT) { snprintf(points, sizeof(points), "%d", player_get_score(player_num)); gtk_list_store_set(summary_store, &iter, SUMMARY_COLUMN_SCORE, points, -1); } } /** Apply colors to the summary */ static gboolean summary_apply_colors_cb(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, G_GNUC_UNUSED gpointer user_data) { gint current_statistic; gint point_id; gtk_tree_model_get(model, iter, SUMMARY_COLUMN_STATISTIC, ¤t_statistic, SUMMARY_COLUMN_POINTS_ID, &point_id, -1); if (current_statistic > 0) gtk_list_store_set(summary_store, iter, SUMMARY_COLUMN_TEXT_COLOUR, summary_color_enabled ? statistics[current_statistic - 1].textcolor : &black, -1); else if (point_id >= 0) gtk_list_store_set(summary_store, iter, SUMMARY_COLUMN_TEXT_COLOUR, summary_color_enabled ? &ps_largest : &black, -1); return FALSE; } void set_color_summary(gboolean flag) { if (flag != summary_color_enabled) { summary_color_enabled = flag; if (summary_store) gtk_tree_model_foreach(GTK_TREE_MODEL (summary_store), summary_apply_colors_cb, NULL); } } void frontend_new_statistics(gint player_num, StatisticType type, G_GNUC_UNUSED gint num) { Player *player = player_get(player_num); gint value; gchar points[16]; GtkTreeIter iter; struct Player_statistic ps; value = player->statistics[type]; if (stat_get_vp_value(type) > 0) refresh_victory_point_total(player_num); ps.result = FIND_NO_MATCH; ps.player_num = player_num; ps.statistic = type + 1; gtk_tree_model_foreach(GTK_TREE_MODEL(summary_store), summary_locate_statistic, &ps); if (value == 0) { if (ps.result == FIND_MATCH_EXACT) gtk_list_store_remove(summary_store, &ps.iter); } else { gchar *desc; if (value == 1) { if (statistics[type].plural != NULL) desc = g_strdup_printf("%d %s", value, gettext(statistics [type]. singular)); else desc = g_strdup(gettext (statistics [type].singular)); } else desc = g_strdup_printf("%d %s", value, gettext(statistics [type].plural)); if (stat_get_vp_value(type) > 0) sprintf(points, "%d", value * stat_get_vp_value(type)); else strcpy(points, ""); switch (ps.result) { case FIND_NO_MATCH: gtk_list_store_append(summary_store, &iter); break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(summary_store, &iter, &ps.iter); break; case FIND_MATCH_EXACT: iter = ps.iter; break; default: g_error("unknown case in frontend_new_statistics"); }; gtk_list_store_set(summary_store, &iter, SUMMARY_COLUMN_PLAYER_NUM, player_num, SUMMARY_COLUMN_TEXT, desc, SUMMARY_COLUMN_TEXT_COLOUR, summary_color_enabled ? statistics[type].textcolor : &black, SUMMARY_COLUMN_STATISTIC, type + 1, SUMMARY_COLUMN_POINTS_ID, -1, SUMMARY_COLUMN_SCORE, points, -1); g_free(desc); } frontend_gui_update(); } void frontend_new_points(gint player_num, Points * points, gboolean added) { GtkTreeIter iter; struct Player_point pp; gchar score[16]; refresh_victory_point_total(player_num); pp.result = FIND_NO_MATCH; pp.player_num = player_num; pp.point_id = points->id; gtk_tree_model_foreach(GTK_TREE_MODEL(summary_store), summary_locate_point, &pp); if (!added) { if (pp.result != FIND_MATCH_EXACT) g_error("cannot remove point"); gtk_list_store_remove(summary_store, &pp.iter); frontend_gui_update(); return; } switch (pp.result) { case FIND_NO_MATCH: gtk_list_store_append(summary_store, &iter); break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(summary_store, &iter, &pp.iter); break; case FIND_MATCH_EXACT: iter = pp.iter; break; default: g_error("unknown case in frontend_new_points"); }; snprintf(score, sizeof(score), "%d", points->points); gtk_list_store_set(summary_store, &iter, SUMMARY_COLUMN_PLAYER_NUM, player_num, SUMMARY_COLUMN_TEXT, _(points->name), SUMMARY_COLUMN_TEXT_COLOUR, summary_color_enabled ? &ps_largest : &black, SUMMARY_COLUMN_STATISTIC, 0, SUMMARY_COLUMN_POINTS_ID, points->id, SUMMARY_COLUMN_SCORE, score, -1); frontend_gui_update(); } static void player_create_find_player(gint player_num, GtkTreeIter * iter) { GtkTreeIter found_iter; enum TFindResult result; /* Search for a place to add information about the player/spectator */ result = find_integer_in_tree(GTK_TREE_MODEL(summary_store), &found_iter, SUMMARY_COLUMN_PLAYER_NUM, player_num); switch (result) { case FIND_NO_MATCH: gtk_list_store_append(summary_store, iter); gtk_list_store_set(summary_store, iter, SUMMARY_COLUMN_PLAYER_NUM, player_num, SUMMARY_COLUMN_POINTS_ID, -1, -1); break; case FIND_MATCH_INSERT_BEFORE: gtk_list_store_insert_before(summary_store, iter, &found_iter); gtk_list_store_set(summary_store, iter, SUMMARY_COLUMN_PLAYER_NUM, player_num, SUMMARY_COLUMN_POINTS_ID, -1, -1); break; case FIND_MATCH_EXACT: *iter = found_iter; break; default: g_error("unknown case in player_create_find_player"); }; } void frontend_player_name(gint player_num, const gchar * name) { GtkTreeIter iter; player_create_find_player(player_num, &iter); gtk_list_store_set(summary_store, &iter, SUMMARY_COLUMN_TEXT, name, -1); player_show_connected_at_iter(player_num, TRUE, &iter); if (callback_mode != MODE_INIT) play_sound(SOUND_ANNOUNCE); chat_player_name(player_num, name); } void frontend_player_style(gint player_num, G_GNUC_UNUSED const gchar * style) { GtkTreeIter iter; player_create_find_player(player_num, &iter); player_show_connected_at_iter(player_num, TRUE, &iter); chat_player_style(player_num); } void frontend_spectator_name(gint spectator_num, const gchar * name) { GtkTreeIter iter; player_create_find_player(spectator_num, &iter); gtk_list_store_set(summary_store, &iter, SUMMARY_COLUMN_TEXT, name, -1); if (callback_mode != MODE_INIT) play_sound(SOUND_ANNOUNCE); chat_player_name(spectator_num, name); } void frontend_player_quit(gint player_num) { GtkTreeIter iter; player_create_find_player(player_num, &iter); player_show_connected_at_iter(player_num, FALSE, &iter); chat_player_quit(player_num); } void frontend_spectator_quit(gint spectator_num) { GtkTreeIter iter; player_create_find_player(spectator_num, &iter); gtk_list_store_remove(summary_store, &iter); chat_spectator_quit(spectator_num); } static void player_show_connected_at_iter(gint player_num, gboolean connected, GtkTreeIter * iter) { GdkPixbuf *pixbuf = player_create_icon(summary_widget, player_num, connected); gtk_list_store_set(summary_store, iter, SUMMARY_COLUMN_PLAYER_ICON, pixbuf, -1); g_object_unref(pixbuf); } /* Get the top and bottom row for player summary and make sure player * is visible */ static void player_show_summary(gint player_num) { GtkTreeIter found_iter; enum TFindResult result; gboolean scroll_to_end = FALSE; result = find_integer_in_tree(GTK_TREE_MODEL(summary_store), &found_iter, SUMMARY_COLUMN_PLAYER_NUM, player_num + 1); if (result == FIND_NO_MATCH) { scroll_to_end = TRUE; } else { GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(summary_store), &found_iter); if (gtk_tree_path_prev(path)) gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (summary_widget), path, NULL, FALSE, 0.0, 0.0); gtk_tree_path_free(path); } result = find_integer_in_tree(GTK_TREE_MODEL(summary_store), &found_iter, SUMMARY_COLUMN_PLAYER_NUM, player_num); if (result != FIND_NO_MATCH) { GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(summary_store), &found_iter); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(summary_widget), path, NULL, scroll_to_end, 0.0, 0.0); gtk_tree_view_set_cursor(GTK_TREE_VIEW(summary_widget), path, NULL, FALSE); gtk_tree_path_free(path); } } GtkWidget *player_build_summary(void) { GtkWidget *vbox; GtkWidget *label; GtkWidget *scroll_win; GtkWidget *alignment; GtkCellRenderer *renderer; GtkTreeViewColumn *column; vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 3, 3); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); label = gtk_label_new(NULL); /* Caption for the overview of the points and card of other players */ gtk_label_set_markup(GTK_LABEL(label), _("Player summary")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_container_add(GTK_CONTAINER(alignment), label); summary_store = gtk_list_store_new(SUMMARY_COLUMN_LAST, GDK_TYPE_PIXBUF, /* player icon */ G_TYPE_INT, /* player number */ G_TYPE_STRING, /* text */ GDK_TYPE_COLOR, /* text colour */ G_TYPE_STRING, /* score */ G_TYPE_INT, /* statistic */ G_TYPE_INT); /* points */ summary_widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(summary_store)); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_pixbuf_new (), "pixbuf", SUMMARY_COLUMN_PLAYER_ICON, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(summary_widget), column); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_text_new (), "text", SUMMARY_COLUMN_TEXT, "foreground-gdk", SUMMARY_COLUMN_TEXT_COLOUR, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(summary_widget), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("", renderer, "text", SUMMARY_COLUMN_SCORE, "foreground-gdk", SUMMARY_COLUMN_TEXT_COLOUR, NULL); g_object_set(renderer, "xalign", 1.0f, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(summary_widget), column); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(summary_widget), FALSE); gtk_widget_show(summary_widget); scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_IN); gtk_widget_show(scroll_win); gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scroll_win), summary_widget); return vbox; } static gint expose_turn_area_cb(GtkWidget * area, G_GNUC_UNUSED GdkEventExpose * event, G_GNUC_UNUSED gpointer user_data) { cairo_t *cr; gint offset; gint idx; GtkAllocation allocation; if (gtk_widget_get_window(area) == NULL) return FALSE; cr = gdk_cairo_create(gtk_widget_get_window(area)); gtk_widget_get_allocation(area, &allocation); offset = 0; for (idx = 0; idx < num_players(); idx++) { gdk_cairo_set_source_color(cr, player_color(idx)); cairo_rectangle(cr, offset, 0, turn_area_icon_width, allocation.height); cairo_fill(cr); gdk_cairo_set_source_color(cr, &black); if (idx == current_player()) { cairo_set_line_width(cr, 3.0); cairo_rectangle(cr, offset + 1.5, 1.5, turn_area_icon_width - 3, allocation.height - 3); } else { cairo_set_line_width(cr, 1.0); cairo_rectangle(cr, offset + 0.5, 0.5, turn_area_icon_width - 1, allocation.height - 1); } cairo_stroke(cr); offset += turn_area_icon_width + turn_area_icon_separation; } cairo_destroy(cr); return FALSE; } GtkWidget *player_build_turn_area(void) { turn_area = gtk_drawing_area_new(); g_signal_connect(G_OBJECT(turn_area), "expose_event", G_CALLBACK(expose_turn_area_cb), NULL); gtk_widget_set_size_request(turn_area, turn_area_icon_width * num_players() + turn_area_icon_separation * (num_players() - 1), -1); gtk_widget_show(turn_area); return turn_area; } void set_num_players(gint num) { gtk_widget_set_size_request(turn_area, turn_area_icon_width * num + turn_area_icon_separation * (num - 1), -1); } void player_show_current(gint player_num) { gtk_widget_queue_draw(turn_area); player_show_summary(player_num); } void player_clear_summary(void) { gtk_list_store_clear(GTK_LIST_STORE(summary_store)); } pioneers-14.1/client/gtk/quote.c0000644000175000017500000002601211652323243013552 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "quoteinfo.h" #include "resource-table.h" #include "quote-view.h" #include "notification.h" static gint trade_player; static GtkWidget *player_icon; static GtkWidget *desc_lbl; static GtkWidget *submit_btn; static GtkWidget *delete_btn; static GtkWidget *reject_btn; static GtkWidget *quoteview; static GtkWidget *want_table; static GtkWidget *give_table; static gint next_quote_num; static gint we_supply[NO_RESOURCE]; static gint we_receive[NO_RESOURCE]; static gboolean can_delete_this_quote(const QuoteInfo * quote) { g_assert(quote->is_domestic); return quote->var.d.player_num == my_player_num();; } gboolean can_submit_quote(void) { gint want_quote[NO_RESOURCE]; gint give_quote[NO_RESOURCE]; resource_table_get_amount(RESOURCETABLE(want_table), want_quote); resource_table_get_amount(RESOURCETABLE(give_table), give_quote); if (resource_count(want_quote) == 0 && resource_count(give_quote) == 0) return FALSE; return !quote_view_trade_exists(QUOTEVIEW(quoteview), give_quote, want_quote) && !player_is_spectator(my_player_num()); } gboolean can_delete_quote(void) { const QuoteInfo *selected_quote = quote_current_quote(); return selected_quote != NULL && can_delete_this_quote(selected_quote); } gboolean can_reject_quote(void) { return !player_is_spectator(my_player_num()) && !quote_view_has_reject(QUOTEVIEW(quoteview), my_player_num()); } const QuoteInfo *quote_current_quote(void) { return quote_view_get_selected_quote(QUOTEVIEW(quoteview)); } const gint *quote_we_supply(void) { static gint we_supply[NO_RESOURCE]; resource_table_get_amount(RESOURCETABLE(give_table), we_supply); return we_supply; } const gint *quote_we_receive(void) { static gint we_receive[NO_RESOURCE]; resource_table_get_amount(RESOURCETABLE(want_table), we_receive); return we_receive; } gint quote_next_num(void) { return next_quote_num; } static void quote_update(void) { resource_table_update_hand(RESOURCETABLE(want_table)); resource_table_update_hand(RESOURCETABLE(give_table)); } static void lock_resource_tables(void) { gint idx; gint filter[NO_RESOURCE]; /* Lock the UI */ for (idx = 0; idx < NO_RESOURCE; idx++) filter[idx] = 0; resource_table_set_filter(RESOURCETABLE(want_table), filter); resource_table_set_filter(RESOURCETABLE(give_table), filter); resource_table_clear(RESOURCETABLE(want_table)); resource_table_clear(RESOURCETABLE(give_table)); } static void set_resource_tables_filter(const gint * we_receive, const gint * we_supply) { if (player_is_spectator(my_player_num())) { lock_resource_tables(); } else { resource_table_set_filter(RESOURCETABLE(want_table), we_receive); resource_table_set_filter(RESOURCETABLE(give_table), we_supply); resource_table_clear(RESOURCETABLE(want_table)); resource_table_clear(RESOURCETABLE(give_table)); } } void quote_add_quote(gint player_num, gint quote_num, const gint * we_supply, const gint * we_receive) { quote_view_add_quote(QUOTEVIEW(quoteview), player_num, quote_num, we_supply, we_receive); next_quote_num++; } void quote_delete_quote(gint player_num, gint quote_num) { quote_view_remove_quote(QUOTEVIEW(quoteview), player_num, quote_num); } void quote_player_finish(gint player_num) { quote_view_reject(QUOTEVIEW(quoteview), player_num); if (player_num == my_player_num()) { /* Lock the UI */ lock_resource_tables(); } } void quote_finish(void) { quote_view_finish(QUOTEVIEW(quoteview)); gui_show_quote_page(FALSE); } static void show_quote_params(gint player_num, const gint * they_supply, const gint * they_receive) { gchar we_supply_desc[512]; gchar we_receive_desc[512]; gchar desc[512]; GdkPixbuf *icon; trade_player = player_num; resource_format_type(we_supply_desc, they_receive); resource_format_type(we_receive_desc, they_supply); g_snprintf(desc, sizeof(desc), _("%s has %s, and is looking for %s"), player_name(player_num, TRUE), we_receive_desc, we_supply_desc); gtk_label_set_text(GTK_LABEL(desc_lbl), desc); icon = player_create_icon(player_icon, player_num, TRUE); gtk_image_set_from_pixbuf(GTK_IMAGE(player_icon), icon); g_object_unref(icon); memcpy(we_supply, they_receive, sizeof(we_supply)); memcpy(we_receive, they_supply, sizeof(we_receive)); } void quote_begin_again(gint player_num, const gint * we_receive, const gint * we_supply) { gchar *msg; /* show the new parameters */ show_quote_params(player_num, we_receive, we_supply); /* throw out reject rows: everyone can quote again */ quote_view_remove_rejected_quotes(QUOTEVIEW(quoteview)); /* check if existing quotes are still valid */ quote_view_check_validity_of_trades(QUOTEVIEW(quoteview)); /* update everything */ quote_update(); set_resource_tables_filter(we_receive, we_supply); frontend_gui_update(); msg = g_strdup_printf( /* Notification */ _("New offer from %s."), player_name(player_num, FALSE)); notification_send(msg, PIONEERS_PIXMAP_TRADE); g_free(msg); } void quote_begin(gint player_num, const gint * we_receive, const gint * we_supply) { gchar *msg; /* show what is asked */ show_quote_params(player_num, we_receive, we_supply); /* reset variables */ next_quote_num = 0; /* clear the gui list */ quote_view_begin(QUOTEVIEW(quoteview)); /* initialize our offer */ quote_update(); set_resource_tables_filter(we_receive, we_supply); frontend_gui_update(); /* finally, show the page so the user can see it */ gui_show_quote_page(TRUE); msg = g_strdup_printf( /* Notification */ _("Offer from %s."), player_name(player_num, FALSE)); notification_send(msg, PIONEERS_PIXMAP_TRADE); g_free(msg); } static void quote_selected_cb(G_GNUC_UNUSED QuoteView * quoteview, G_GNUC_UNUSED gpointer user_data) { /** @todo RC 2006-05-27 Update the resource tables, * to show the effect of the selected quote */ frontend_gui_update(); } static void quote_dblclick_cb(G_GNUC_UNUSED QuoteView * quoteview, gpointer delete_btn) { if (can_delete_quote()) gtk_button_clicked(GTK_BUTTON(delete_btn)); } static void amount_changed_cb(G_GNUC_UNUSED ResourceTable * rt, G_GNUC_UNUSED gpointer user_data) { quote_view_clear_selected_quote(QUOTEVIEW(quoteview)); frontend_gui_update(); } GtkWidget *quote_build_page(void) { GtkWidget *scroll_win; GtkWidget *panel_vbox; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *bbox; scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_NONE); gtk_widget_show(scroll_win); panel_vbox = gtk_vbox_new(FALSE, 3); gtk_widget_show(panel_vbox); gtk_container_set_border_width(GTK_CONTAINER(panel_vbox), 6); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scroll_win), panel_vbox); hbox = gtk_hbox_new(FALSE, 6); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(panel_vbox), hbox, FALSE, TRUE, 0); player_icon = gtk_image_new(); gtk_widget_show(player_icon); gtk_box_pack_start(GTK_BOX(hbox), player_icon, FALSE, FALSE, 0); desc_lbl = gtk_label_new(""); gtk_widget_show(desc_lbl); gtk_box_pack_start(GTK_BOX(hbox), desc_lbl, TRUE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(desc_lbl), 0, 0.5); hbox = gtk_hbox_new(FALSE, 6); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(panel_vbox), hbox, TRUE, TRUE, 0); vbox = gtk_vbox_new(FALSE, 3); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); want_table = resource_table_new( /* Label */ _("I want"), RESOURCE_TABLE_MORE_IN_HAND, FALSE, FALSE); gtk_widget_show(want_table); gtk_box_pack_start(GTK_BOX(vbox), want_table, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(want_table), "change", G_CALLBACK(amount_changed_cb), NULL); give_table = resource_table_new( /* Label */ _("Give them"), RESOURCE_TABLE_LESS_IN_HAND, FALSE, FALSE); gtk_widget_show(give_table); gtk_box_pack_start(GTK_BOX(vbox), give_table, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(give_table), "change", G_CALLBACK(amount_changed_cb), NULL); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); /* Button text */ submit_btn = gtk_button_new_with_label(_("Quote")); frontend_gui_register(submit_btn, GUI_QUOTE_SUBMIT, "clicked"); gtk_widget_show(submit_btn); gtk_container_add(GTK_CONTAINER(bbox), submit_btn); /* Button text */ delete_btn = gtk_button_new_with_label(_("Delete")); frontend_gui_register(delete_btn, GUI_QUOTE_DELETE, "clicked"); gtk_widget_show(delete_btn); gtk_container_add(GTK_CONTAINER(bbox), delete_btn); vbox = gtk_vbox_new(FALSE, 3); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); quoteview = quote_view_new(FALSE, can_delete_this_quote, GTK_STOCK_DELETE, NULL); gtk_widget_show(quoteview); gtk_box_pack_start(GTK_BOX(vbox), quoteview, TRUE, TRUE, 0); g_signal_connect(QUOTEVIEW(quoteview), "selection-changed", G_CALLBACK(quote_selected_cb), NULL); g_signal_connect(G_OBJECT(quoteview), "selection-activated", G_CALLBACK(quote_dblclick_cb), delete_btn); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); /* Button text */ reject_btn = gtk_button_new_with_label(_("Reject Domestic Trade")); frontend_gui_register(reject_btn, GUI_QUOTE_REJECT, "clicked"); gtk_widget_show(reject_btn); gtk_container_add(GTK_CONTAINER(bbox), reject_btn); return scroll_win; } void frontend_quote_trade(G_GNUC_UNUSED gint player_num, gint partner_num, gint quote_num, G_GNUC_UNUSED const gint * they_supply, G_GNUC_UNUSED const gint * they_receive) { /* a quote has been accepted, remove it from the list. */ quote_view_remove_quote(QUOTEVIEW(quoteview), partner_num, quote_num); quote_update(); frontend_gui_update(); } pioneers-14.1/client/gtk/quote-view.c0000644000175000017500000005176111657430613014540 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2004-2006 Roland Clobus * Copyright (C) 2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "quote-view.h" #include "map.h" /* For NO_RESOURCE */ #include "game.h" #include "quoteinfo.h" #include #include #include #include "colors.h" #include "frontend.h" #include "theme.h" #include "common_gtk.h" #include "gtkcompat.h" enum { TRADE_COLUMN_PLAYER, /**< Player icon */ TRADE_COLUMN_POSSIBLE, /**< Good/bad trade icon */ TRADE_COLUMN_DESCRIPTION, /**< Trade description */ TRADE_COLUMN_QUOTE, /**< Internal data: contains the quotes. Not for display */ TRADE_COLUMN_REJECT, /**< Internal data: contains the rejected players. Not for display */ TRADE_COLUMN_PLAYER_NUM, /**< The player number, or -1 for maritime trade */ TRADE_COLUMN_LAST }; /** The quote is found here */ static GtkTreeIter quote_found_iter; /** Has the quote been found ? */ static gboolean quote_found_flag; /** Icon for rejected trade */ static GdkPixbuf *cross_pixbuf; /** Icon for the maritime trade */ static GdkPixbuf *maritime_pixbuf; /* The signals */ enum { SELECTION_CHANGED, SELECTION_ACTIVATED, LAST_SIGNAL }; static void quote_view_class_init(QuoteViewClass * klass); static void quote_view_init(QuoteView * qv); static gint quote_click_cb(GtkWidget * widget, GdkEventButton * event, gpointer user_data); static void quote_select_cb(GtkTreeSelection * selection, gpointer user_data); static void load_pixmaps(QuoteView * qv); static void set_selected_quote(QuoteView * qv, const QuoteInfo * quote); static gboolean trade_locate_quote(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data); /* All signals */ static guint quote_view_signals[LAST_SIGNAL] = { 0, 0 }; /* Register the class */ GType quote_view_get_type(void) { static GType rt_type = 0; if (!rt_type) { static const GTypeInfo rt_info = { sizeof(QuoteViewClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) quote_view_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(QuoteView), 0, (GInstanceInitFunc) quote_view_init, NULL }; rt_type = g_type_register_static(GTK_TYPE_SCROLLED_WINDOW, "QuoteView", &rt_info, 0); } return rt_type; } /* Register the signals. * QuoteView will emit these signals: * 'selection-changed' when the selection changes. * 'selection-activated' when the selection is double-clicked */ static void quote_view_class_init(QuoteViewClass * klass) { quote_view_signals[SELECTION_CHANGED] = g_signal_new("selection-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (QuoteViewClass, selection_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); quote_view_signals[SELECTION_ACTIVATED] = g_signal_new("selection-activated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (QuoteViewClass, selection_activated), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /* Initialise the composite widget */ static void quote_view_init(QuoteView * qv) { GtkTreeViewColumn *column; gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (qv), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(qv), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(qv), NULL); gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(qv), NULL); /* Create model */ qv->store = gtk_list_store_new(TRADE_COLUMN_LAST, GDK_TYPE_PIXBUF, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_INT); /* Create graphical representation of the model */ qv->quotes = gtk_tree_view_new_with_model(GTK_TREE_MODEL(qv->store)); gtk_container_add(GTK_CONTAINER(qv), qv->quotes); /* Register double-click */ g_signal_connect(G_OBJECT(qv->quotes), "button_press_event", G_CALLBACK(quote_click_cb), qv); g_signal_connect(G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW(qv->quotes))), "changed", G_CALLBACK(quote_select_cb), qv); /* Now create columns */ /* Table header: Player who trades */ column = gtk_tree_view_column_new_with_attributes(_("Player"), gtk_cell_renderer_pixbuf_new (), "pixbuf", TRADE_COLUMN_PLAYER, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(qv->quotes), column); column = gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_pixbuf_new (), "pixbuf", TRADE_COLUMN_POSSIBLE, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(qv->quotes), column); /* Table header: Quote */ column = gtk_tree_view_column_new_with_attributes(_("Quotes"), gtk_cell_renderer_text_new (), "text", TRADE_COLUMN_DESCRIPTION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(qv->quotes), column); gtk_widget_show(qv->quotes); load_pixmaps(qv); qv->with_maritime = FALSE; qv->quote_list = NULL; } /* Create a new QuoteView */ GtkWidget *quote_view_new(gboolean with_maritime, CheckQuoteFunc check_quote_func, const gchar * true_pixbuf_id, const gchar * false_pixbuf_id) { QuoteView *qv; qv = g_object_new(quote_view_get_type(), NULL); qv->with_maritime = with_maritime; qv->check_quote_func = check_quote_func; if (true_pixbuf_id) qv->true_pixbuf = gtk_widget_render_icon(qv->quotes, true_pixbuf_id, GTK_ICON_SIZE_MENU, NULL); else qv->true_pixbuf = NULL; if (false_pixbuf_id) qv->false_pixbuf = gtk_widget_render_icon(qv->quotes, false_pixbuf_id, GTK_ICON_SIZE_MENU, NULL); else qv->false_pixbuf = NULL; return GTK_WIDGET(qv); } static gint quote_click_cb(G_GNUC_UNUSED GtkWidget * widget, GdkEventButton * event, gpointer quoteview) { if (event->type == GDK_2BUTTON_PRESS) { g_signal_emit(G_OBJECT(quoteview), quote_view_signals[SELECTION_ACTIVATED], 0); }; return FALSE; } static void quote_select_cb(GtkTreeSelection * selection, gpointer quoteview) { GtkTreeIter iter; GtkTreeModel *model; QuoteInfo *quote; g_assert(selection != NULL); if (gtk_tree_selection_get_selected(selection, &model, &iter)) gtk_tree_model_get(model, &iter, TRADE_COLUMN_QUOTE, "e, -1); else quote = NULL; set_selected_quote(QUOTEVIEW(quoteview), quote); } /** Load/construct the images */ static void load_pixmaps(QuoteView * qv) { static gboolean init = FALSE; int width, height; GdkPixmap *pixmap; cairo_t *cr; if (init) return; gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); pixmap = gdk_pixmap_new(gtk_widget_get_window(qv->quotes), width, height, gdk_visual_get_depth(gtk_widget_get_visual (qv->quotes))); cr = gdk_cairo_create(pixmap); gdk_cairo_set_source_pixmap(cr, theme_get_terrain_pixmap(SEA_TERRAIN), 0.0, 0.0); cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); gdk_cairo_set_source_color(cr, &black); cairo_set_line_width(cr, 1.0); cairo_rectangle(cr, 0.5, 0.5, width - 1, height - 1); cairo_stroke(cr); maritime_pixbuf = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, 0, 0, 0, 0, -1, -1); g_object_unref(pixmap); cairo_destroy(cr); cross_pixbuf = gtk_widget_render_icon(qv->quotes, GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU, NULL); init = TRUE; } static void trade_format_maritime(const QuoteInfo * quote, gchar * desc) { /* trade: maritime quote: %1 resources of type %2 for * one resource of type %3 */ sprintf(desc, _("%d:1 %s for %s"), quote->var.m.ratio, resource_name(quote->var.m.supply, FALSE), resource_name(quote->var.m.receive, FALSE)); } /** Add a maritime trade */ static void add_maritime_trade(QuoteView * qv, G_GNUC_UNUSED gint ratio, G_GNUC_UNUSED Resource receive, G_GNUC_UNUSED Resource supply) { QuoteInfo *quote; QuoteInfo *prev; gchar quote_desc[128]; GtkTreeIter iter; for (quote = quotelist_first(qv->quote_list); quote != NULL; quote = quotelist_next(quote)) if (quote->is_domestic) break; else if (quote->var.m.ratio == ratio && quote->var.m.supply == supply && quote->var.m.receive == receive) return; quote = quotelist_add_maritime(qv->quote_list, ratio, supply, receive); trade_format_maritime(quote, quote_desc); prev = quotelist_prev(quote); quote_found_flag = FALSE; if (prev != NULL) gtk_tree_model_foreach(GTK_TREE_MODEL(qv->store), trade_locate_quote, prev); if (quote_found_flag) gtk_list_store_insert_after(qv->store, &iter, "e_found_iter); else gtk_list_store_prepend(qv->store, &iter); gtk_list_store_set(qv->store, &iter, TRADE_COLUMN_PLAYER, maritime_pixbuf, TRADE_COLUMN_POSSIBLE, NULL, TRADE_COLUMN_DESCRIPTION, quote_desc, TRADE_COLUMN_QUOTE, quote, TRADE_COLUMN_PLAYER_NUM, -1, /* Maritime trade */ -1); } /** Locate the QuoteInfo* in user_data. Return TRUE if is found. The iter * is set in quote_found_iter. The flag quote_found_flag is set to TRUE */ static gboolean trade_locate_quote(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data) { QuoteInfo *wanted = user_data; QuoteInfo *current; gtk_tree_model_get(model, iter, TRADE_COLUMN_QUOTE, ¤t, -1); if (current == wanted) { quote_found_iter = *iter; quote_found_flag = TRUE; return TRUE; } return FALSE; } /** Remove a quote from the list */ static void remove_quote(QuoteView * qv, QuoteInfo * quote) { if (quote == qv->selected_quote) set_selected_quote(qv, NULL); quote_found_flag = FALSE; gtk_tree_model_foreach(GTK_TREE_MODEL(qv->store), trade_locate_quote, quote); if (quote_found_flag) gtk_list_store_remove(qv->store, "e_found_iter); quotelist_delete(qv->quote_list, quote); } /** Locate the Player* in user_data. Return TRUE if is found. The iter * is set in quote_found_iter. The flag quote_found_flag is set to TRUE */ static gboolean trade_locate_reject(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data) { Player *wanted = user_data; Player *current; gtk_tree_model_get(model, iter, TRADE_COLUMN_REJECT, ¤t, -1); if (current == wanted) { quote_found_iter = *iter; quote_found_flag = TRUE; return TRUE; } return FALSE; } /** Player player_num has rejected trade */ void quote_view_reject(QuoteView * qv, gint player_num) { Player *player = player_get(player_num); QuoteInfo *quote; GtkTreeIter iter; enum TFindResult found; GdkPixbuf *pixbuf; if (qv->quote_list == NULL) return; while ((quote = quotelist_find_domestic(qv->quote_list, player_num, -1)) != NULL) { remove_quote(qv, quote); } quote_found_flag = FALSE; gtk_tree_model_foreach(GTK_TREE_MODEL(qv->store), trade_locate_reject, player); if (quote_found_flag) /* Already removed */ return; /* work out where to put the reject row */ for (quote = quotelist_first(qv->quote_list); quote != NULL; quote = quotelist_next(quote)) if (!quote->is_domestic) continue; else if (quote->var.d.player_num >= player_num) break; found = find_integer_in_tree(GTK_TREE_MODEL(qv->store), &iter, TRADE_COLUMN_PLAYER_NUM, player_num); if (found != FIND_NO_MATCH) gtk_list_store_insert_before(qv->store, &iter, &iter); else gtk_list_store_append(qv->store, &iter); pixbuf = player_create_icon(GTK_WIDGET(qv), player_num, TRUE); gtk_list_store_set(qv->store, &iter, TRADE_COLUMN_PLAYER, pixbuf, TRADE_COLUMN_POSSIBLE, cross_pixbuf, /* Trade: a player has rejected trade */ TRADE_COLUMN_DESCRIPTION, _("Rejected trade"), TRADE_COLUMN_QUOTE, NULL, TRADE_COLUMN_REJECT, player, TRADE_COLUMN_PLAYER_NUM, player_num, -1); g_object_unref(pixbuf); } /** How many of this resource do we need for a maritime trade? If the trade is * not possible, return 0. */ static gint maritime_amount(QuoteView * qv, gint resource) { if (qv->maritime_info.specific_resource[resource]) { if (resource_asset(resource) >= 2) return 2; } else if (qv->maritime_info.any_resource) { if (resource_asset(resource) >= 3) return 3; } else if (resource_asset(resource) >= 4) return 4; return 0; } /** Check if all existing maritime trades are valid. * Add and remove maritime trades as needed */ static void check_maritime_trades(QuoteView * qv) { QuoteInfo *quote; gint idx; gboolean check_supply = FALSE; gint maritime_supply[NO_RESOURCE]; if (!qv->with_maritime) return; /* Check supply whenever any supply box is selected. */ for (idx = 0; idx < NO_RESOURCE; ++idx) { if (qv->maritime_filter_supply[idx]) check_supply = TRUE; } /* Check how many of which resources can be used for maritime supply. */ for (idx = 0; idx < NO_RESOURCE; ++idx) { if (check_supply && !qv->maritime_filter_supply[idx]) maritime_supply[idx] = 0; else maritime_supply[idx] = maritime_amount(qv, idx); } /* Remove invalid quotes. */ quote = quotelist_first(qv->quote_list); while (quote != NULL) { QuoteInfo *curr = quote; quote = quotelist_next(quote); if (curr->is_domestic) break; /* Is the current quote valid? */ if (qv->maritime_filter_receive[curr->var.m.receive] == 0 || maritime_supply[curr->var.m.supply] == 0) remove_quote(qv, curr); } /* Add all of the maritime trades that can be performed */ for (idx = 0; idx < NO_RESOURCE; idx++) { gint supply_idx; if (!qv->maritime_filter_receive[idx]) continue; for (supply_idx = 0; supply_idx < NO_RESOURCE; supply_idx++) { if (supply_idx == idx) continue; if (!maritime_supply[supply_idx]) continue; if (resource_asset(supply_idx) >= maritime_supply[supply_idx]) add_maritime_trade(qv, maritime_supply [supply_idx], idx, supply_idx); } } } /** Check if the quote still is valid. Update the icon. */ static gboolean check_valid_trade(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data) { QuoteView *quoteview = QUOTEVIEW(user_data); QuoteInfo *quote; gtk_tree_model_get(model, iter, TRADE_COLUMN_QUOTE, "e, -1); if (quote != NULL) if (quote->is_domestic) { gtk_list_store_set(quoteview->store, iter, TRADE_COLUMN_POSSIBLE, quoteview->check_quote_func (quote) ? quoteview->true_pixbuf : quoteview->false_pixbuf, -1); } return FALSE; } /** Add a quote from a player */ void quote_view_add_quote(QuoteView * qv, gint player_num, gint quote_num, const gint * supply, const gint * receive) { GtkTreeIter iter; enum TFindResult found; QuoteInfo *quote; gchar quote_desc[128]; GdkPixbuf *pixbuf; if (qv->quote_list == NULL) quotelist_new(&qv->quote_list); /* If the trade is already listed, don't duplicate */ if (quotelist_find_domestic(qv->quote_list, player_num, quote_num) != NULL) return; quote = quotelist_add_domestic(qv->quote_list, player_num, quote_num, supply, receive); trade_format_quote(quote, quote_desc); found = find_integer_in_tree(GTK_TREE_MODEL(qv->store), &iter, TRADE_COLUMN_PLAYER_NUM, player_num + 1); if (found != FIND_NO_MATCH) gtk_list_store_insert_before(qv->store, &iter, &iter); else gtk_list_store_append(qv->store, &iter); pixbuf = player_create_icon(GTK_WIDGET(qv), player_num, TRUE); gtk_list_store_set(qv->store, &iter, TRADE_COLUMN_PLAYER, pixbuf, TRADE_COLUMN_POSSIBLE, qv->check_quote_func(quote) ? qv-> true_pixbuf : qv->false_pixbuf, TRADE_COLUMN_DESCRIPTION, quote_desc, TRADE_COLUMN_QUOTE, quote, TRADE_COLUMN_PLAYER_NUM, player_num, -1); g_object_unref(pixbuf); } void quote_view_remove_quote(QuoteView * qv, gint partner_num, gint quote_num) { QuoteInfo *quote; if (qv->quote_list == NULL) return; g_assert(qv->quote_list != NULL); quote = quotelist_find_domestic(qv->quote_list, partner_num, quote_num); if (quote == NULL) return; g_assert(quote != NULL); remove_quote(qv, quote); } void quote_view_begin(QuoteView * qv) { quotelist_new(&qv->quote_list); if (qv->with_maritime) { map_maritime_info(callbacks.get_map(), &qv->maritime_info, my_player_num()); } gtk_list_store_clear(qv->store); } void quote_view_finish(QuoteView * qv) { if (qv->quote_list != NULL) quotelist_free(&qv->quote_list); } void quote_view_check_validity_of_trades(QuoteView * qv) { check_maritime_trades(qv); /* Check if all quotes are still valid */ gtk_tree_model_foreach(GTK_TREE_MODEL(qv->store), check_valid_trade, qv); } /** Activate a new quote. * If the quote == NULL, clear the selection in the listview too */ static void set_selected_quote(QuoteView * qv, const QuoteInfo * quote) { if (qv->selected_quote == quote) return; /* Don't do the same thing again */ qv->selected_quote = quote; if (quote == NULL) gtk_tree_selection_unselect_all(gtk_tree_view_get_selection (GTK_TREE_VIEW (qv->quotes))); g_signal_emit(G_OBJECT(qv), quote_view_signals[SELECTION_CHANGED], 0); } void quote_view_clear_selected_quote(QuoteView * qv) { set_selected_quote(qv, NULL); } const QuoteInfo *quote_view_get_selected_quote(QuoteView * qv) { return qv->selected_quote; } void quote_view_remove_rejected_quotes(QuoteView * qv) { gint idx; for (idx = 0; idx < num_players(); idx++) { Player *player = player_get(idx); quote_found_flag = FALSE; gtk_tree_model_foreach(GTK_TREE_MODEL(qv->store), trade_locate_reject, player); if (quote_found_flag) gtk_list_store_remove(qv->store, "e_found_iter); } } void quote_view_set_maritime_filters(QuoteView * qv, const gboolean * filter_supply, const gboolean * filter_receive) { gint idx; for (idx = 0; idx < NO_RESOURCE; idx++) { qv->maritime_filter_supply[idx] = filter_supply[idx]; qv->maritime_filter_receive[idx] = filter_receive[idx]; } check_maritime_trades(qv); } void quote_view_theme_changed(QuoteView * qv) { int width, height; GdkPixmap *pixmap; cairo_t *cr; QuoteInfo *quote; if (!qv->with_maritime) return; gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); pixmap = gdk_pixmap_new(gtk_widget_get_window(qv->quotes), width, height, gdk_visual_get_depth(gtk_widget_get_visual (qv->quotes))); cr = gdk_cairo_create(pixmap); gdk_cairo_set_source_pixmap(cr, theme_get_terrain_pixmap(SEA_TERRAIN), 0.0, 0.0); cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); gdk_cairo_set_source_color(cr, &black); cairo_set_line_width(cr, 1.0); cairo_rectangle(cr, 0.5, 0.5, width - 1, height - 1); cairo_stroke(cr); if (maritime_pixbuf) g_object_unref(maritime_pixbuf); maritime_pixbuf = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, 0, 0, 0, 0, -1, -1); cairo_destroy(cr); g_object_unref(pixmap); /* Remove all maritime quotes */ quote = quotelist_first(qv->quote_list); while (quote != NULL) { QuoteInfo *curr = quote; quote = quotelist_next(quote); if (curr->is_domestic) break; remove_quote(qv, curr); } /* Add all of the maritime trades that can be performed */ check_maritime_trades(qv); } gboolean quote_view_trade_exists(QuoteView * qv, const gint * supply, const gint * receive) { const QuoteInfo *quote; gboolean match; gint idx; /* Find the quote which equals the parameters */ for (quote = quotelist_first(qv->quote_list); quote != NULL; quote = quotelist_next(quote)) { if (quote->var.d.player_num != my_player_num()) continue; /* Does this quote equal the parameters? */ match = TRUE; for (idx = 0; idx < NO_RESOURCE && match; idx++) if (quote->var.d.supply[idx] != supply[idx] || quote->var.d.receive[idx] != receive[idx]) match = FALSE; if (match) return TRUE; } return FALSE; } gboolean quote_view_has_reject(QuoteView * qv, gint player_num) { Player *player = player_get(player_num); if (qv->quote_list == NULL) return FALSE; quote_found_flag = FALSE; gtk_tree_model_foreach(GTK_TREE_MODEL(qv->store), trade_locate_reject, player); return quote_found_flag; } pioneers-14.1/client/gtk/quote-view.h0000644000175000017500000000705211246205071014527 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2006 Roland Clobus * Copyright (C) 2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __quoteview_h #define __quoteview_h #include #include "map.h" /* For NO_RESOURCE */ #include "quoteinfo.h" G_BEGIN_DECLS #define QUOTEVIEW_TYPE (quote_view_get_type ()) #define QUOTEVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QUOTEVIEW_TYPE, QuoteView)) #define QUOTEVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), QUOTEVIEW_TYPE, QuoteViewClass)) #define IS_QUOTEVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), QUOTEVIEW_TYPE)) #define IS_QUOTEVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), QUOTEVIEW_TYPE)) typedef struct _QuoteView QuoteView; typedef struct _QuoteViewClass QuoteViewClass; typedef gboolean(*CheckQuoteFunc) (const QuoteInfo * quote); struct _QuoteView { GtkScrolledWindow scrolled_window; /** The data */ GtkListStore *store; /** The tree view widget */ GtkWidget *quotes; /** All quotes */ QuoteList *quote_list; /** Show maritime quotes? */ gboolean with_maritime; /** Information about available maritime trades */ MaritimeInfo maritime_info; gboolean maritime_filter_supply[NO_RESOURCE]; gboolean maritime_filter_receive[NO_RESOURCE]; CheckQuoteFunc check_quote_func; /** The currently selected quote, or NULL */ const QuoteInfo *selected_quote; /** CheckQuoteFunc returns true */ GdkPixbuf *true_pixbuf; /** CheckQuoteFunc returns false */ GdkPixbuf *false_pixbuf; }; struct _QuoteViewClass { GtkScrolledWindowClass parent_class; void (*selection_changed) (QuoteView * qv); void (*selection_activated) (QuoteView * qv); }; GType quote_view_get_type(void); GtkWidget *quote_view_new(gboolean with_maritime, CheckQuoteFunc check_quote_func, const gchar * true_pixbuf_id, const gchar * false_pixbuf_id); void quote_view_begin(QuoteView * qv); void quote_view_add_quote(QuoteView * qv, gint player_num, gint quote_num, const gint * supply, const gint * receive); void quote_view_remove_quote(QuoteView * qv, gint partner_num, gint quote_num); void quote_view_reject(QuoteView * qv, gint player_num); void quote_view_finish(QuoteView * qv); void quote_view_check_validity_of_trades(QuoteView * qv); void quote_view_clear_selected_quote(QuoteView * qv); const QuoteInfo *quote_view_get_selected_quote(QuoteView * qv); void quote_view_remove_rejected_quotes(QuoteView * qv); void quote_view_set_maritime_filters(QuoteView * qv, const gboolean * filter_supply, const gboolean * filter_receive); void quote_view_theme_changed(QuoteView * qv); gboolean quote_view_trade_exists(QuoteView * qv, const gint * supply, const gint * receive); gboolean quote_view_has_reject(QuoteView * qv, gint player_num); G_END_DECLS #endif pioneers-14.1/client/gtk/resource.c0000644000175000017500000001016711613330306014243 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Giancarlo Capella * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "gtkbugs.h" #include "resource-view.h" /* 'total' label widget */ static GtkWidget *asset_total_label; static GtkWidget *resource[NO_RESOURCE]; static void rebuild_single_resource(Resource type) { resource_view_set_amount_of_single_resource(RESOURCE_VIEW (resource[type]), type, resource_asset(type)); } static void create_resource_image(GtkTable * table, Resource type, guint column, guint row) { GtkWidget *box; resource[type] = box = resource_view_new(); gtk_widget_show(box); gtk_table_attach(table, box, column, column + 1, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 0); } GtkWidget *resource_build_panel(void) { GtkWidget *table; GtkWidget *label; GtkWidget *alignment; GtkWidget *total; PangoLayout *layout; gint width_00, height_00; table = gtk_table_new(4, 2, TRUE); gtk_widget_show(table); gtk_table_set_col_spacings(GTK_TABLE(table), 5); alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 3, 3); gtk_widget_show(alignment); gtk_table_attach_defaults(GTK_TABLE(table), alignment, 0, 2, 0, 1); label = gtk_label_new(NULL); /* Caption for overview of the resources of the player */ gtk_label_set_markup(GTK_LABEL(label), _("Resources")); gtk_widget_show(label); gtk_container_add(GTK_CONTAINER(alignment), label); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); create_resource_image(GTK_TABLE(table), BRICK_RESOURCE, 0, 1); create_resource_image(GTK_TABLE(table), GRAIN_RESOURCE, 0, 2); create_resource_image(GTK_TABLE(table), ORE_RESOURCE, 0, 3); create_resource_image(GTK_TABLE(table), WOOL_RESOURCE, 1, 1); create_resource_image(GTK_TABLE(table), LUMBER_RESOURCE, 1, 2); total = gtk_hbox_new(FALSE, 0); gtk_widget_show(total); /* Label */ label = gtk_label_new(_("Total")); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(total), label, TRUE, TRUE, 3); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); asset_total_label = label = gtk_label_new("-"); /* Measure the size of '00' to avoid resizing problems */ layout = gtk_widget_create_pango_layout(label, "00"); pango_layout_get_pixel_size(layout, &width_00, &height_00); g_object_unref(layout); gtk_widget_set_size_request(label, width_00, height_00); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(total), label, TRUE, TRUE, 3); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); gtk_table_attach(GTK_TABLE(table), total, 1, 2, 3, 4, (GtkAttachOptions) GTK_EXPAND | GTK_FILL, (GtkAttachOptions) GTK_FILL, 3, 0); return table; } void frontend_resource_change(Resource type, G_GNUC_UNUSED gint new_amount) { if (type < NO_RESOURCE) { char buff[16]; snprintf(buff, sizeof(buff), "%d", resource_total()); gtk_label_set_text(GTK_LABEL(asset_total_label), buff); /* Force resize of the table, this is needed because * GTK does not correctly redraw a label when the amounts * cross the barrier of 1 or 2 positions. */ gtk_container_check_resize(GTK_CONTAINER (gtk_widget_get_parent (asset_total_label))); rebuild_single_resource(type); } frontend_gui_update(); } pioneers-14.1/client/gtk/resource-view.gob0000644000175000017500000001402511715726041015545 00000000000000requires 2.0.0 %alltop{ /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2006 Giancarlo Capella * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ %} %headertop{ #include #include "config.h" #include "callback.h" #include "client.h" %} %privateheader{ #include "map.h" #include "frontend.h" %} class Resource:View from Gtk:Misc { private gint resource[NO_RESOURCE]; private gdouble distance; private gint max_width; classwide cairo_surface_t *surface[NO_RESOURCE]; class_init(klass) { gint i; static const gchar *resources_pixmaps[] = { "brick.png", "grain.png", "ore.png", "wool.png", "lumber.png" }; for (i = 0; i < NO_RESOURCE; i++) { gchar *filename; /* determine full path to pixmap file */ filename = g_build_filename(DATADIR, "pixmaps", "pioneers", resources_pixmaps[i], NULL); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { klass->surface[i] = cairo_image_surface_create_from_png (filename); } g_free(filename); } } public GtkWidget *new(void) { return (GtkWidget *) GET_NEW; } public GtkWidget *new_single_resource(Resource resource) { ResourceView *rv; gint width; gint height; rv = GET_NEW; rv->_priv->resource[resource] = 1; resource_view_calculate_size(rv, &width, &height); gtk_widget_set_size_request(GTK_WIDGET(rv), width, height); gtk_widget_set_tooltip_text(GTK_WIDGET(rv), resource_name(resource, TRUE)); return GTK_WIDGET(rv); } init(self) { gint width; gint height; self->_priv->distance = 16; self->_priv->max_width = -1; resource_view_calculate_size(self, &width, &height); gtk_widget_set_size_request(GTK_WIDGET(self), width, height); g_signal_connect(G_OBJECT(self), "expose_event", G_CALLBACK(resource_view_expose), NULL); g_signal_connect(G_OBJECT(self), "size_allocate", G_CALLBACK(resource_view_allocate), NULL); } private void calculate_size(self, gint * width, gint * height) { gint i; gint num_res; gint tot_res; gint xpad; gint ypad; num_res = tot_res = 0; for (i = 0; i < NO_RESOURCE; i++) { if (self->_priv->resource[i]) { num_res++; tot_res += self->_priv->resource[i]; } } if (tot_res == 0) { tot_res = 1; /* Avoid division by zero */ } gint size = 16; //gui_get_resource_pixmap_res(); if (self->_priv->max_width <= 0 || tot_res == num_res || self->_priv->max_width >= size * tot_res) { self->_priv->distance = size; } else { self->_priv->distance = (gdouble) (self->_priv->max_width - num_res * size) / (tot_res - num_res); } /* Set the optimal size as a request */ gtk_misc_get_padding(GTK_MISC(self), &xpad, &ypad); if (width != NULL) { *width = size * tot_res + xpad * 2; } if (height != NULL) { *height = size + ypad * 2; } } public void set(self, const gint * resource) { gint i; gchar *tooltip; gint width; gint height; for (i = 0; i < NO_RESOURCE; i++) { self->_priv->resource[i] = resource[i]; } resource_view_calculate_size(self, &width, &height); gtk_widget_set_size_request(GTK_WIDGET(self), width, height); tooltip = resource_format_num(resource); gtk_widget_set_tooltip_text(GTK_WIDGET(self), tooltip); g_free(tooltip); } public void set_amount_of_single_resource(self, Resource type, guint amount) { gchar *tooltip; memset(self->_priv->resource, 0, sizeof(self->_priv->resource)); self->_priv->resource[type] = amount; resource_view_calculate_size(self, NULL, NULL); gtk_widget_queue_draw(GTK_WIDGET(self)); tooltip = g_strdup_printf("%s: %d", resource_name(type, TRUE), amount); gtk_widget_set_tooltip_text(GTK_WIDGET(self), tooltip); g_free(tooltip); } private gboolean allocate(GtkWidget * self, GtkAllocation * allocation, gpointer user_data) { /* Remove compiler warning */ user_data = user_data; RESOURCE_VIEW(self)->_priv->max_width = allocation->width; resource_view_calculate_size(RESOURCE_VIEW(self), NULL, NULL); return FALSE; } private gboolean expose(GtkWidget * self, GdkEvent * event, gpointer user_data) { cairo_t *cr; gint i; GtkRequisition r; GtkAllocation allocation; if (!gtk_widget_get_mapped(self)) { return FALSE; } /* Remove compiler warnings */ event = event; user_data = user_data; gtk_widget_size_request(GTK_WIDGET(self), &r); gtk_widget_get_allocation(GTK_WIDGET(self), &allocation); gfloat xalign; gfloat yalign; gtk_misc_get_alignment(GTK_MISC(self), &xalign, &yalign); gdouble yoffset = (allocation.height - r.height) * yalign; if (allocation.width != -1) { r.width = allocation.width; } if (allocation.height != -1) { r.height = allocation.height; } cr = gdk_cairo_create(gtk_widget_get_window (GTK_WIDGET(self))); gdouble offset = 0; for (i = 0; i < NO_RESOURCE; i++) { gint n; for (n = 0; n < RESOURCE_VIEW(self)->_priv->resource[i]; n++) { cairo_set_source_surface(cr, SELF_GET_CLASS (self)->surface [i], offset, yoffset); cairo_rectangle(cr, 0, 0, r.width, r.height); cairo_fill(cr); offset += RESOURCE_VIEW(self)->_priv->distance; } }; cairo_destroy(cr); return FALSE; } } pioneers-14.1/client/gtk/resource-view.gob.stamp0000644000175000017500000000000011760646027016661 00000000000000pioneers-14.1/client/gtk/resource-view.c0000644000175000017500000003047211760646027015231 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ /* End world hunger, donate to the World Food Programme, http://www.wfp.org */ #line 3 "client/gtk/resource-view.gob" /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2006 Giancarlo Capella * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #line 30 "resource-view.c" #define GOB_VERSION_MAJOR 2 #define GOB_VERSION_MINOR 0 #define GOB_VERSION_PATCHLEVEL 18 #define selfp (self->_priv) #include /* memset() */ #include "resource-view.h" #include "resource-view-private.h" #ifdef G_LIKELY #define ___GOB_LIKELY(expr) G_LIKELY(expr) #define ___GOB_UNLIKELY(expr) G_UNLIKELY(expr) #else /* ! G_LIKELY */ #define ___GOB_LIKELY(expr) (expr) #define ___GOB_UNLIKELY(expr) (expr) #endif /* G_LIKELY */ /* self casting macros */ #define SELF(x) RESOURCE_VIEW(x) #define SELF_CONST(x) RESOURCE_VIEW_CONST(x) #define IS_SELF(x) RESOURCE_IS_VIEW(x) #define TYPE_SELF RESOURCE_TYPE_VIEW #define SELF_CLASS(x) RESOURCE_VIEW_CLASS(x) #define SELF_GET_CLASS(x) RESOURCE_VIEW_GET_CLASS(x) /* self typedefs */ typedef ResourceView Self; typedef ResourceViewClass SelfClass; /* here are local prototypes */ #line 44 "client/gtk/resource-view.gob" static void resource_view_class_init (ResourceViewClass * klass) G_GNUC_UNUSED; #line 66 "resource-view.c" #line 88 "client/gtk/resource-view.gob" static void resource_view_init (ResourceView * self) G_GNUC_UNUSED; #line 69 "resource-view.c" #line 103 "client/gtk/resource-view.gob" static void resource_view_calculate_size (ResourceView * self, gint * width, gint * height) G_GNUC_UNUSED; #line 72 "resource-view.c" #line 180 "client/gtk/resource-view.gob" static gboolean resource_view_allocate (GtkWidget * self, GtkAllocation * allocation, gpointer user_data) G_GNUC_UNUSED; #line 75 "resource-view.c" #line 193 "client/gtk/resource-view.gob" static gboolean resource_view_expose (GtkWidget * self, GdkEvent * event, gpointer user_data) G_GNUC_UNUSED; #line 78 "resource-view.c" /* pointer to the class of our parent */ static GtkMiscClass *parent_class = NULL; /* Short form macros */ #define self_new resource_view_new #define self_new_single_resource resource_view_new_single_resource #define self_calculate_size resource_view_calculate_size #define self_set resource_view_set #define self_set_amount_of_single_resource resource_view_set_amount_of_single_resource #define self_allocate resource_view_allocate #define self_expose resource_view_expose GType resource_view_get_type (void) { static GType type = 0; if ___GOB_UNLIKELY(type == 0) { static const GTypeInfo info = { sizeof (ResourceViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) resource_view_class_init, (GClassFinalizeFunc) NULL, NULL /* class_data */, sizeof (ResourceView), 0 /* n_preallocs */, (GInstanceInitFunc) resource_view_init, NULL }; type = g_type_register_static (GTK_TYPE_MISC, "ResourceView", &info, (GTypeFlags)0); } return type; } /* a macro for creating a new object of our type */ #define GET_NEW ((ResourceView *)g_object_new(resource_view_get_type(), NULL)) /* a function for creating a new object of our type */ #include static ResourceView * GET_NEW_VARG (const char *first, ...) G_GNUC_UNUSED; static ResourceView * GET_NEW_VARG (const char *first, ...) { ResourceView *ret; va_list ap; va_start (ap, first); ret = (ResourceView *)g_object_new_valist (resource_view_get_type (), first, ap); va_end (ap); return ret; } static void ___finalize(GObject *obj_self) { #define __GOB_FUNCTION__ "Resource:View::finalize" ResourceView *self G_GNUC_UNUSED = RESOURCE_VIEW (obj_self); gpointer priv G_GNUC_UNUSED = self->_priv; if(G_OBJECT_CLASS(parent_class)->finalize) \ (* G_OBJECT_CLASS(parent_class)->finalize)(obj_self); } #undef __GOB_FUNCTION__ #line 44 "client/gtk/resource-view.gob" static void resource_view_class_init (ResourceViewClass * klass G_GNUC_UNUSED) { #line 149 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::class_init" GObjectClass *g_object_class G_GNUC_UNUSED = (GObjectClass*) klass; g_type_class_add_private(klass,sizeof(ResourceViewPrivate)); parent_class = g_type_class_ref (GTK_TYPE_MISC); g_object_class->finalize = ___finalize; { #line 44 "client/gtk/resource-view.gob" gint i; static const gchar *resources_pixmaps[] = { "brick.png", "grain.png", "ore.png", "wool.png", "lumber.png" }; for (i = 0; i < NO_RESOURCE; i++) { gchar *filename; /* determine full path to pixmap file */ filename = g_build_filename(DATADIR, "pixmaps", "pioneers", resources_pixmaps[i], NULL); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { klass->surface[i] = cairo_image_surface_create_from_png (filename); } g_free(filename); } #line 185 "resource-view.c" } } #undef __GOB_FUNCTION__ #line 88 "client/gtk/resource-view.gob" static void resource_view_init (ResourceView * self G_GNUC_UNUSED) { #line 193 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::init" self->_priv = G_TYPE_INSTANCE_GET_PRIVATE(self,RESOURCE_TYPE_VIEW,ResourceViewPrivate); { #line 88 "client/gtk/resource-view.gob" gint width; gint height; self->_priv->distance = 16; self->_priv->max_width = -1; resource_view_calculate_size(self, &width, &height); gtk_widget_set_size_request(GTK_WIDGET(self), width, height); g_signal_connect(G_OBJECT(self), "expose_event", G_CALLBACK(resource_view_expose), NULL); g_signal_connect(G_OBJECT(self), "size_allocate", G_CALLBACK(resource_view_allocate), NULL); #line 212 "resource-view.c" } } #undef __GOB_FUNCTION__ #line 70 "client/gtk/resource-view.gob" GtkWidget * resource_view_new (void) { #line 222 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::new" { #line 70 "client/gtk/resource-view.gob" return (GtkWidget *) GET_NEW; }} #line 229 "resource-view.c" #undef __GOB_FUNCTION__ #line 74 "client/gtk/resource-view.gob" GtkWidget * resource_view_new_single_resource (Resource resource) { #line 236 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::new_single_resource" { #line 74 "client/gtk/resource-view.gob" ResourceView *rv; gint width; gint height; rv = GET_NEW; rv->_priv->resource[resource] = 1; resource_view_calculate_size(rv, &width, &height); gtk_widget_set_size_request(GTK_WIDGET(rv), width, height); gtk_widget_set_tooltip_text(GTK_WIDGET(rv), resource_name(resource, TRUE)); return GTK_WIDGET(rv); }} #line 253 "resource-view.c" #undef __GOB_FUNCTION__ #line 103 "client/gtk/resource-view.gob" static void resource_view_calculate_size (ResourceView * self, gint * width, gint * height) { #line 261 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::calculate_size" #line 103 "client/gtk/resource-view.gob" g_return_if_fail (self != NULL); #line 103 "client/gtk/resource-view.gob" g_return_if_fail (RESOURCE_IS_VIEW (self)); #line 267 "resource-view.c" { #line 103 "client/gtk/resource-view.gob" gint i; gint num_res; gint tot_res; gint xpad; gint ypad; num_res = tot_res = 0; for (i = 0; i < NO_RESOURCE; i++) { if (self->_priv->resource[i]) { num_res++; tot_res += self->_priv->resource[i]; } } if (tot_res == 0) { tot_res = 1; /* Avoid division by zero */ } gint size = 16; //gui_get_resource_pixmap_res(); if (self->_priv->max_width <= 0 || tot_res == num_res || self->_priv->max_width >= size * tot_res) { self->_priv->distance = size; } else { self->_priv->distance = (gdouble) (self->_priv->max_width - num_res * size) / (tot_res - num_res); } /* Set the optimal size as a request */ gtk_misc_get_padding(GTK_MISC(self), &xpad, &ypad); if (width != NULL) { *width = size * tot_res + xpad * 2; } if (height != NULL) { *height = size + ypad * 2; } }} #line 310 "resource-view.c" #undef __GOB_FUNCTION__ #line 144 "client/gtk/resource-view.gob" void resource_view_set (ResourceView * self, const gint * resource) { #line 317 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::set" #line 144 "client/gtk/resource-view.gob" g_return_if_fail (self != NULL); #line 144 "client/gtk/resource-view.gob" g_return_if_fail (RESOURCE_IS_VIEW (self)); #line 323 "resource-view.c" { #line 144 "client/gtk/resource-view.gob" gint i; gchar *tooltip; gint width; gint height; for (i = 0; i < NO_RESOURCE; i++) { self->_priv->resource[i] = resource[i]; } resource_view_calculate_size(self, &width, &height); gtk_widget_set_size_request(GTK_WIDGET(self), width, height); tooltip = resource_format_num(resource); gtk_widget_set_tooltip_text(GTK_WIDGET(self), tooltip); g_free(tooltip); }} #line 342 "resource-view.c" #undef __GOB_FUNCTION__ #line 161 "client/gtk/resource-view.gob" void resource_view_set_amount_of_single_resource (ResourceView * self, Resource type, guint amount) { #line 349 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::set_amount_of_single_resource" #line 161 "client/gtk/resource-view.gob" g_return_if_fail (self != NULL); #line 161 "client/gtk/resource-view.gob" g_return_if_fail (RESOURCE_IS_VIEW (self)); #line 355 "resource-view.c" { #line 162 "client/gtk/resource-view.gob" gchar *tooltip; memset(self->_priv->resource, 0, sizeof(self->_priv->resource)); self->_priv->resource[type] = amount; resource_view_calculate_size(self, NULL, NULL); gtk_widget_queue_draw(GTK_WIDGET(self)); tooltip = g_strdup_printf("%s: %d", resource_name(type, TRUE), amount); gtk_widget_set_tooltip_text(GTK_WIDGET(self), tooltip); g_free(tooltip); }} #line 375 "resource-view.c" #undef __GOB_FUNCTION__ #line 180 "client/gtk/resource-view.gob" static gboolean resource_view_allocate (GtkWidget * self, GtkAllocation * allocation, gpointer user_data) { #line 382 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::allocate" { #line 182 "client/gtk/resource-view.gob" /* Remove compiler warning */ user_data = user_data; RESOURCE_VIEW(self)->_priv->max_width = allocation->width; resource_view_calculate_size(RESOURCE_VIEW(self), NULL, NULL); return FALSE; }} #line 395 "resource-view.c" #undef __GOB_FUNCTION__ #line 193 "client/gtk/resource-view.gob" static gboolean resource_view_expose (GtkWidget * self, GdkEvent * event, gpointer user_data) { #line 402 "resource-view.c" #define __GOB_FUNCTION__ "Resource:View::expose" { #line 194 "client/gtk/resource-view.gob" cairo_t *cr; gint i; GtkRequisition r; GtkAllocation allocation; if (!gtk_widget_get_mapped(self)) { return FALSE; } /* Remove compiler warnings */ event = event; user_data = user_data; gtk_widget_size_request(GTK_WIDGET(self), &r); gtk_widget_get_allocation(GTK_WIDGET(self), &allocation); gfloat xalign; gfloat yalign; gtk_misc_get_alignment(GTK_MISC(self), &xalign, &yalign); gdouble yoffset = (allocation.height - r.height) * yalign; if (allocation.width != -1) { r.width = allocation.width; } if (allocation.height != -1) { r.height = allocation.height; } cr = gdk_cairo_create(gtk_widget_get_window (GTK_WIDGET(self))); gdouble offset = 0; for (i = 0; i < NO_RESOURCE; i++) { gint n; for (n = 0; n < RESOURCE_VIEW(self)->_priv->resource[i]; n++) { cairo_set_source_surface(cr, SELF_GET_CLASS (self)->surface [i], offset, yoffset); cairo_rectangle(cr, 0, 0, r.width, r.height); cairo_fill(cr); offset += RESOURCE_VIEW(self)->_priv->distance; } }; cairo_destroy(cr); return FALSE; }} #line 461 "resource-view.c" #undef __GOB_FUNCTION__ pioneers-14.1/client/gtk/resource-view.h0000644000175000017500000000601211760646027015227 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2006 Giancarlo Capella * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include "config.h" #include "callback.h" #include "client.h" #ifndef __RESOURCE_VIEW_H__ #define __RESOURCE_VIEW_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Type checking and casting macros */ #define RESOURCE_TYPE_VIEW (resource_view_get_type()) #define RESOURCE_VIEW(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), resource_view_get_type(), ResourceView) #define RESOURCE_VIEW_CONST(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), resource_view_get_type(), ResourceView const) #define RESOURCE_VIEW_CLASS(klass) G_TYPE_CHECK_CLASS_CAST((klass), resource_view_get_type(), ResourceViewClass) #define RESOURCE_IS_VIEW(obj) G_TYPE_CHECK_INSTANCE_TYPE((obj), resource_view_get_type ()) #define RESOURCE_VIEW_GET_CLASS(obj) G_TYPE_INSTANCE_GET_CLASS((obj), resource_view_get_type(), ResourceViewClass) /* Private structure type */ typedef struct _ResourceViewPrivate ResourceViewPrivate; /* * Main object structure */ #ifndef __TYPEDEF_RESOURCE_VIEW__ #define __TYPEDEF_RESOURCE_VIEW__ typedef struct _ResourceView ResourceView; #endif struct _ResourceView { GtkMisc __parent__; /*< private >*/ ResourceViewPrivate *_priv; }; /* * Class definition */ typedef struct _ResourceViewClass ResourceViewClass; struct _ResourceViewClass { GtkMiscClass __parent__; cairo_surface_t * surface[NO_RESOURCE]; }; /* * Public methods */ GType resource_view_get_type (void) G_GNUC_CONST; #line 70 "client/gtk/resource-view.gob" GtkWidget * resource_view_new (void); #line 87 "resource-view.h" #line 74 "client/gtk/resource-view.gob" GtkWidget * resource_view_new_single_resource (Resource resource); #line 90 "resource-view.h" #line 144 "client/gtk/resource-view.gob" void resource_view_set (ResourceView * self, const gint * resource); #line 94 "resource-view.h" #line 161 "client/gtk/resource-view.gob" void resource_view_set_amount_of_single_resource (ResourceView * self, Resource type, guint amount); #line 99 "resource-view.h" #ifdef __cplusplus } #endif /* __cplusplus */ #endif pioneers-14.1/client/gtk/resource-view-private.h0000644000175000017500000000317211760646027016703 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2006 Giancarlo Capella * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #line 3 "client/gtk/resource-view.gob" #line 28 "resource-view-private.h" #ifndef __RESOURCE_VIEW_PRIVATE_H__ #define __RESOURCE_VIEW_PRIVATE_H__ #include "resource-view.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #line 33 "client/gtk/resource-view.gob" #include "map.h" #include "frontend.h" #line 44 "resource-view-private.h" struct _ResourceViewPrivate { #line 39 "client/gtk/resource-view.gob" gint resource[NO_RESOURCE]; #line 40 "client/gtk/resource-view.gob" gdouble distance; #line 41 "client/gtk/resource-view.gob" gint max_width; #line 52 "resource-view-private.h" }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif pioneers-14.1/client/gtk/resource-table.c0000644000175000017500000003030511461571231015331 00000000000000/* A custom widget for selecting resources * * The code is based on the TICTACTOE and DIAL examples * http://www.gtk.org/tutorial/app-codeexamples.html * http://www.gtk.org/tutorial/sec-gtkdial.html * * Adaptation for Pioneers: 2004 Roland Clobus * */ #include "config.h" #include #include #include #include #include "resource-table.h" #include "gtkbugs.h" #include "callback.h" /* The signals */ enum { CHANGE, LAST_SIGNAL }; static void resource_table_class_init(ResourceTableClass * klass); static void resource_table_init(ResourceTable * rt); static void resource_table_update(ResourceTable * rt); static void less_resource_cb(GtkButton * widget, gpointer user_data); static void more_resource_cb(GtkButton * widget, gpointer user_data); static void value_changed_cb(GtkSpinButton * widget, gpointer user_data); /* All signals */ static guint resource_table_signals[LAST_SIGNAL] = { 0 }; /* Register the class */ GType resource_table_get_type(void) { static GType rt_type = 0; if (!rt_type) { static const GTypeInfo rt_info = { sizeof(ResourceTableClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) resource_table_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(ResourceTable), 0, (GInstanceInitFunc) resource_table_init, NULL }; rt_type = g_type_register_static(GTK_TYPE_TABLE, "ResourceTable", &rt_info, 0); } return rt_type; } /* Register the signals. * ResourceTable will emit this signal: * 'change' when any change in the amount occurs. */ static void resource_table_class_init(ResourceTableClass * klass) { resource_table_signals[CHANGE] = g_signal_new("change", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (ResourceTableClass, change), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /* Initialise the composite widget */ static void resource_table_init(ResourceTable * rt) { gint i; for (i = 0; i < NO_RESOURCE; i++) { rt->row[i].hand = 0; rt->row[i].bank = 0; rt->row[i].amount = 0; rt->row[i].hand_widget = NULL; rt->row[i].bank_widget = NULL; rt->row[i].amount_widget = NULL; rt->row[i].less_widget = NULL; rt->row[i].more_widget = NULL; } rt->total_target = 0; rt->total_current = 0; rt->total_widget = NULL; rt->limit_bank = FALSE; rt->with_bank = FALSE; rt->with_total = FALSE; rt->direction = RESOURCE_TABLE_MORE_IN_HAND; } static void resource_table_set_limit(ResourceTable * rt, gint row) { gint limit; if (rt->with_total) limit = rt->with_bank ? MIN(rt->total_target, rt->row[row].bank) : MIN(rt->total_target, rt->row[row].hand); else limit = rt->with_bank ? rt->row[row].bank : rt->direction == RESOURCE_TABLE_MORE_IN_HAND ? 99 : rt->row[row].hand; rt->row[row].limit = limit; gtk_spin_button_set_range(GTK_SPIN_BUTTON (rt->row[row].amount_widget), 0, limit); gtk_widget_set_sensitive(rt->row[row].amount_widget, limit > 0); } /* Create a new ResourceTable */ GtkWidget *resource_table_new(const gchar * title, ResourceTableDirection direction, gboolean with_bank, gboolean with_total) { ResourceTable *rt; gchar *temp; GtkWidget *widget; gint i; gint row; rt = g_object_new(resource_table_get_type(), NULL); rt->direction = direction; rt->with_bank = with_bank; /* Don't set rt->with_total yet, wait for _set_total */ rt->bank_offset = with_bank ? 1 : 0; gtk_table_resize(GTK_TABLE(rt), NO_RESOURCE + 1 + with_total ? 1 : 0, 5 + rt->bank_offset); gtk_table_set_row_spacings(GTK_TABLE(rt), 3); gtk_table_set_col_spacings(GTK_TABLE(rt), 6); temp = g_strconcat("", title, "", NULL); widget = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(widget), temp); g_free(temp); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 0, 5 + rt->bank_offset, 0, 1); gtk_misc_set_alignment(GTK_MISC(widget), 0, 0.5); row = 1; for (i = 0; i < NO_RESOURCE; i++) { rt->row[i].filter = FALSE; widget = rt->row[i].label_widget = gtk_label_new(resource_name(i, TRUE)); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 0, 1, row, row + 1); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); widget = rt->row[i].hand_widget = gtk_entry_new(); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 1, 2, row, row + 1); gtk_entry_set_width_chars(GTK_ENTRY(widget), 3); gtk_widget_set_sensitive(widget, FALSE); gtk_entry_set_alignment(GTK_ENTRY(widget), 1.0); gtk_widget_set_tooltip_text(widget, /* Tooltip for the amount of resources in the hand */ _("Amount in hand")); rt->row[i].hand = resource_asset(i); widget = rt->row[i].less_widget = /* Button for decreasing the selected amount */ gtk_button_new_with_label(_("row[i]); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 2, 3, row, row + 1); gtk_widget_set_tooltip_text(widget, /* Tooltip for decreasing the selected amount */ _("" "Decrease the selected amount")); if (with_bank) { rt->row[i].bank = get_bank()[i]; widget = rt->row[i].bank_widget = gtk_entry_new(); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 3, 4, row, row + 1); gtk_entry_set_width_chars(GTK_ENTRY(widget), 3); gtk_widget_set_sensitive(widget, FALSE); gtk_entry_set_alignment(GTK_ENTRY(widget), 1.0); gtk_widget_set_tooltip_text(widget, /* Tooltip for the amount of resources in the bank */ _("" "Amount in the bank")); } widget = rt->row[i].more_widget = /* Button for increasing the selected amount */ gtk_button_new_with_label(_("more>")); gtk_widget_set_sensitive(widget, FALSE); g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(more_resource_cb), &rt->row[i]); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 3 + rt->bank_offset, 4 + rt->bank_offset, row, row + 1); gtk_widget_set_tooltip_text(widget, /* Tooltip for increasing the selected amount */ _("" "Increase the selected amount")); widget = rt->row[i].amount_widget = gtk_spin_button_new_with_range(0, 99, 1); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 4 + rt->bank_offset, 5 + rt->bank_offset, row, row + 1); gtk_entry_set_width_chars(GTK_ENTRY(widget), 3); gtk_entry_set_alignment(GTK_ENTRY(widget), 1.0); g_signal_connect(G_OBJECT(widget), "value-changed", G_CALLBACK(value_changed_cb), &rt->row[i]); gtk_widget_set_tooltip_text(widget, /* Tooltip for the selected amount */ _("Selected amount")); resource_table_set_limit(rt, i); row++; } resource_table_update(rt); return GTK_WIDGET(rt); } void resource_table_limit_bank(ResourceTable * rt, gboolean limit) { rt->limit_bank = limit; resource_table_update(rt); } void resource_table_set_total(ResourceTable * rt, const gchar * text, gint total) { GtkWidget *widget; gint row; gint i; g_assert(IS_RESOURCETABLE(rt)); rt->with_total = TRUE; rt->total_target = total; rt->total_current = 0; row = NO_RESOURCE + 1; widget = gtk_label_new(text); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 0, 4 + rt->bank_offset, row, row + 1); gtk_misc_set_alignment(GTK_MISC(widget), 1.0, 0.5); widget = rt->total_widget = gtk_spin_button_new_with_range(0, total, 1); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(rt), widget, 4 + rt->bank_offset, 5 + rt->bank_offset, row, row + 1); gtk_entry_set_width_chars(GTK_ENTRY(widget), 3); gtk_widget_set_sensitive(widget, FALSE); gtk_entry_set_alignment(GTK_ENTRY(widget), 1.0); gtk_widget_set_tooltip_text(widget, /* Tooltip for the total selected amount */ _("Total selected amount")); for (i = 0; i < NO_RESOURCE; i++) { resource_table_set_limit(rt, i); } resource_table_update(rt); } void resource_table_set_bank(ResourceTable * rt, const gint * bank) { gint i; for (i = 0; i < NO_RESOURCE; i++) { rt->row[i].bank = bank[i]; resource_table_set_limit(rt, i); if (rt->limit_bank && rt->with_total && bank[i] > rt->total_target) { gtk_widget_set_tooltip_text(rt->row[i].bank_widget, /* Tooltip when the bank cannot be emptied */ _("" "The bank cannot be emptied")); } } resource_table_update(rt); } /* Update the display to the current state */ static void resource_table_update(ResourceTable * rt) { gchar buff[16]; gint i; struct _ResourceRow *row; gboolean less_enabled; gboolean more_enabled; g_assert(IS_RESOURCETABLE(rt)); rt->total_current = 0; for (i = 0; i < NO_RESOURCE; i++) rt->total_current += rt->row[i].amount; if (rt->with_total) { sprintf(buff, "%d", rt->total_current); gtk_entry_set_text(GTK_ENTRY(rt->total_widget), buff); } for (i = 0; i < NO_RESOURCE; i++) { row = &rt->row[i]; sprintf(buff, "%d", row->amount); gtk_entry_set_text(GTK_ENTRY(row->amount_widget), buff); less_enabled = row->amount > 0; more_enabled = row->amount < row->limit; if (rt->with_total && rt->total_current >= rt->total_target) more_enabled = FALSE; if (rt->direction == RESOURCE_TABLE_MORE_IN_HAND) sprintf(buff, "%d", row->hand + row->amount); else sprintf(buff, "%d", row->hand - row->amount); gtk_entry_set_text(GTK_ENTRY(row->hand_widget), buff); if (rt->with_bank) { if (rt->limit_bank && rt->with_total && row->bank > rt->total_target) sprintf(buff, "%s", "++"); else sprintf(buff, "%d", row->bank - row->amount); gtk_entry_set_text(GTK_ENTRY(row->bank_widget), buff); } gtk_widget_set_sensitive(row->label_widget, !row->filter); gtk_widget_set_sensitive(row->less_widget, less_enabled && !row->filter); gtk_widget_set_sensitive(row->more_widget, more_enabled && !row->filter); gtk_widget_set_sensitive(row->amount_widget, (less_enabled || more_enabled) && !row->filter); } } static void less_resource_cb(GtkButton * widget, gpointer user_data) { struct _ResourceRow *row = user_data; ResourceTable *rt = RESOURCETABLE(gtk_widget_get_parent(GTK_WIDGET(widget))); row->amount--; resource_table_update(rt); g_signal_emit(G_OBJECT(rt), resource_table_signals[CHANGE], 0); } static void more_resource_cb(GtkButton * widget, gpointer user_data) { struct _ResourceRow *row = user_data; ResourceTable *rt = RESOURCETABLE(gtk_widget_get_parent(GTK_WIDGET(widget))); row->amount++; resource_table_update(rt); g_signal_emit(G_OBJECT(rt), resource_table_signals[CHANGE], 0); } static void value_changed_cb(GtkSpinButton * widget, gpointer user_data) { struct _ResourceRow *row = user_data; ResourceTable *rt = RESOURCETABLE(gtk_widget_get_parent(GTK_WIDGET(widget))); row->amount = gtk_spin_button_get_value_as_int(widget); resource_table_update(rt); g_signal_emit(G_OBJECT(rt), resource_table_signals[CHANGE], 0); } void resource_table_get_amount(ResourceTable * rt, gint * amount) { gint i; g_assert(IS_RESOURCETABLE(rt)); for (i = 0; i < NO_RESOURCE; i++) amount[i] = rt->row[i].amount; } gboolean resource_table_is_total_reached(ResourceTable * rt) { g_assert(IS_RESOURCETABLE(rt)); return (rt->total_current == rt->total_target); } void resource_table_update_hand(ResourceTable * rt) { gint i; g_assert(IS_RESOURCETABLE(rt)); for (i = 0; i < NO_RESOURCE; i++) { rt->row[i].hand = resource_asset(i); resource_table_set_limit(rt, i); } resource_table_update(rt); } void resource_table_set_filter(ResourceTable * rt, const gint * resource) { gint i; g_assert(IS_RESOURCETABLE(rt)); for (i = 0; i < NO_RESOURCE; i++) { rt->row[i].filter = resource[i] == 0; } resource_table_update(rt); } void resource_table_clear(ResourceTable * rt) { gint i; g_assert(IS_RESOURCETABLE(rt)); for (i = 0; i < NO_RESOURCE; i++) { rt->row[i].amount = 0; } resource_table_update(rt); } pioneers-14.1/client/gtk/resource-table.h0000644000175000017500000000500311246205071015330 00000000000000/* A custom widget for selecting resources * * The code is based on the TICTACTOE and DIAL examples * http://www.gtk.org/tutorial/app-codeexamples.html * http://www.gtk.org/tutorial/sec-gtkdial.html * * Adaptation for Pioneers: 2004 Roland Clobus * */ #ifndef __RESOURCETABLE_H__ #define __RESOURCETABLE_H__ #include #include #include #include "map.h" /* For NO_RESOURCE */ G_BEGIN_DECLS #define RESOURCETABLE_TYPE (resource_table_get_type ()) #define RESOURCETABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RESOURCETABLE_TYPE, ResourceTable)) #define RESOURCETABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RESOURCETABLE_TYPE, ResourceTableClass)) #define IS_RESOURCETABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RESOURCETABLE_TYPE)) #define IS_RESOURCETABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RESOURCETABLE_TYPE)) typedef struct _ResourceTable ResourceTable; typedef struct _ResourceTableClass ResourceTableClass; struct _ResourceRow { gboolean filter; gint hand; gint bank; gint amount; GtkWidget *label_widget; GtkWidget *hand_widget; GtkWidget *bank_widget; GtkWidget *amount_widget; gint limit; GtkWidget *less_widget; GtkWidget *more_widget; }; enum _ResourceTableDirection { RESOURCE_TABLE_MORE_IN_HAND, RESOURCE_TABLE_LESS_IN_HAND }; typedef enum _ResourceTableDirection ResourceTableDirection; struct _ResourceTable { GtkTable table; struct _ResourceRow row[NO_RESOURCE]; gint total_target; gint total_current; GtkWidget *total_widget; gboolean limit_bank; gboolean with_bank; gboolean with_total; gint bank_offset; ResourceTableDirection direction; }; struct _ResourceTableClass { GtkTableClass parent_class; void (*change) (ResourceTable * rt); }; GType resource_table_get_type(void); GtkWidget *resource_table_new(const gchar * title, ResourceTableDirection direction, gboolean with_bank, gboolean with_total); void resource_table_limit_bank(ResourceTable * rt, gboolean limit); void resource_table_set_total(ResourceTable * rt, const gchar * text, gint total); void resource_table_set_bank(ResourceTable * rt, const gint * bank); void resource_table_get_amount(ResourceTable * rt, gint * amount); gboolean resource_table_is_total_reached(ResourceTable * rt); void resource_table_update_hand(ResourceTable * rt); void resource_table_set_filter(ResourceTable * rt, const gint * resource); void resource_table_clear(ResourceTable * rt); G_END_DECLS #endif /* __RESOURCETABLE_H__ */ pioneers-14.1/client/gtk/settingscreen.c0000644000175000017500000003053611657430613015305 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2005 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "gui.h" static GtkWidget *settings_dlg = NULL; enum { TYPE_NUM, TYPE_BOOL, TYPE_STRING }; static void add_setting_desc(GtkWidget * table, gint row, gint col, const gchar * desc) { GtkWidget *label; label = gtk_label_new(desc); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, col, col + 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); } static void add_setting_desc_with_image(GtkWidget * table, gint row, gint col, const gchar * desc, const gchar * iconname) { GtkWidget *icon; icon = gtk_image_new_from_stock(iconname, GTK_ICON_SIZE_MENU); gtk_widget_show(icon); gtk_table_attach(GTK_TABLE(table), icon, col, col + 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); add_setting_desc(table, row, col + 1, desc); } static void add_setting_val(GtkWidget * table, gint row, gint col, gint type, gint int_val, const gchar * char_val, gboolean right_aligned) { GtkWidget *label; gchar *label_var; switch (type) { case TYPE_NUM: label_var = g_strdup_printf("%i", int_val); break; case TYPE_BOOL: if (int_val != 0) { label_var = g_strdup(_("Yes")); } else { label_var = g_strdup(_("No")); } break; case TYPE_STRING: if (char_val == NULL) { char_val = " "; } label_var = g_strdup_printf("%s", char_val); break; default: label_var = g_strdup(_("Unknown")); break; } label = gtk_label_new(label_var); g_free(label_var); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, col, col + 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), (right_aligned ? 1.0 : 0.0), 0.5); } static GtkWidget *settings_create_content(void) { const GameParams *game_params; GtkWidget *dlg_vbox; GtkWidget *alignment; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *table; GtkWidget *label; gchar *sevens_desc; gchar *island_bonus; guint row; /* Create some space inside the dialog */ dlg_vbox = gtk_vbox_new(FALSE, 6); gtk_container_set_border_width(GTK_CONTAINER(dlg_vbox), 6); gtk_widget_show(dlg_vbox); game_params = get_game_params(); if (game_params == NULL) { label = gtk_label_new(_("No game in progress...")); gtk_box_pack_start(GTK_BOX(dlg_vbox), label, TRUE, TRUE, 6); gtk_widget_show(label); return dlg_vbox; } label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), /* Label */ _("General settings")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(dlg_vbox), label, FALSE, TRUE, 0); alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(dlg_vbox), alignment, FALSE, FALSE, 0); table = gtk_table_new(10, 2, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(alignment), table); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 6); row = 0; add_setting_desc(table, row, 0, _("Number of players:")); add_setting_val(table, row, 1, TYPE_NUM, game_params->num_players, NULL, FALSE); row++; add_setting_desc(table, row, 0, _("Victory point target:")); add_setting_val(table, row, 1, TYPE_NUM, game_params->victory_points, NULL, FALSE); row++; add_setting_desc(table, row, 0, _("Random terrain:")); add_setting_val(table, row, 1, TYPE_BOOL, game_params->random_terrain, NULL, FALSE); row++; add_setting_desc(table, row, 0, _("Allow trade between players:")); add_setting_val(table, row, 1, TYPE_BOOL, game_params->domestic_trade, NULL, FALSE); row++; add_setting_desc(table, row, 0, _("Allow trade only before building or buying:")); add_setting_val(table, row, 1, TYPE_BOOL, game_params->strict_trade, NULL, FALSE); row++; add_setting_desc(table, row, 0, _("Check victory only at end of turn:")); add_setting_val(table, row, 1, TYPE_BOOL, game_params->check_victory_at_end_of_turn, NULL, FALSE); row++; add_setting_desc(table, row, 0, _("Amount of each resource:")); add_setting_val(table, row, 1, TYPE_NUM, game_params->resource_count, NULL, FALSE); if (game_params->sevens_rule == 0) { sevens_desc = g_strdup(_("Normal")); } else if (game_params->sevens_rule == 1) { sevens_desc = g_strdup(_("Reroll on 1st 2 turns")); } else if (game_params->sevens_rule == 2) { sevens_desc = g_strdup(_("Reroll all 7s")); } else { sevens_desc = g_strdup(_("Unknown")); } row++; add_setting_desc(table, row, 0, _("Sevens rule:")); add_setting_val(table, row, 1, TYPE_STRING, 0, sevens_desc, FALSE); g_free(sevens_desc); row++; add_setting_desc(table, row, 0, _("Use the pirate to block ships:")); add_setting_val(table, row, 1, TYPE_BOOL, game_params->use_pirate, NULL, FALSE); if (game_params->island_discovery_bonus) { gint idx; island_bonus = g_strdup_printf("%d", g_array_index (game_params->island_discovery_bonus, gint, 0)); for (idx = 1; idx < game_params->island_discovery_bonus->len; idx++) { gchar *old = island_bonus; gchar *number = g_strdup_printf("%d", g_array_index (game_params-> island_discovery_bonus, gint, idx)); island_bonus = g_strconcat(island_bonus, ", ", number, NULL); g_free(old); g_free(number); } } else { island_bonus = g_strdup(_("No")); } row++; add_setting_desc(table, row, 0, _("Island discovery bonuses:")); add_setting_val(table, row, 1, TYPE_STRING, 0, island_bonus, FALSE); g_free(island_bonus); /* Double space, otherwise the columns are too close */ hbox = gtk_hbox_new(FALSE, 24); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(dlg_vbox), hbox, TRUE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), /* Label */ _("Building quotas")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, TRUE, 0); table = gtk_table_new(6, 3, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(alignment), table); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 6); row = 0; add_setting_desc_with_image(table, row, 0, _("Roads:"), PIONEERS_PIXMAP_ROAD); add_setting_val(table, row, 2, TYPE_NUM, game_params->num_build_type[BUILD_ROAD], NULL, TRUE); row++; add_setting_desc_with_image(table, row, 0, _("Settlements:"), PIONEERS_PIXMAP_SETTLEMENT); add_setting_val(table, row, 2, TYPE_NUM, game_params->num_build_type[BUILD_SETTLEMENT], NULL, TRUE); row++; add_setting_desc_with_image(table, row, 0, _("Cities:"), PIONEERS_PIXMAP_CITY); add_setting_val(table, row, 2, TYPE_NUM, game_params->num_build_type[BUILD_CITY], NULL, TRUE); row++; add_setting_desc_with_image(table, row, 0, _("City walls:"), PIONEERS_PIXMAP_CITY_WALL); add_setting_val(table, row, 2, TYPE_NUM, game_params->num_build_type[BUILD_CITY_WALL], NULL, TRUE); row++; add_setting_desc_with_image(table, row, 0, _("Ships:"), PIONEERS_PIXMAP_SHIP); add_setting_val(table, row, 2, TYPE_NUM, game_params->num_build_type[BUILD_SHIP], NULL, TRUE); row++; add_setting_desc_with_image(table, row, 0, _("Bridges:"), PIONEERS_PIXMAP_BRIDGE); add_setting_val(table, row, 2, TYPE_NUM, game_params->num_build_type[BUILD_BRIDGE], NULL, TRUE); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), /* Label */ _("Development card deck")); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 12, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, TRUE, 0); table = gtk_table_new(9, 2, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(alignment), table); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 6); add_setting_desc(table, 0, 0, _("Road building cards:")); add_setting_val(table, 0, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_ROAD_BUILDING], NULL, TRUE); add_setting_desc(table, 1, 0, _("Monopoly cards:")); add_setting_val(table, 1, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_MONOPOLY], NULL, TRUE); add_setting_desc(table, 2, 0, _("Year of plenty cards:")); add_setting_val(table, 2, 1, TYPE_NUM, game_params->num_develop_type [DEVEL_YEAR_OF_PLENTY], NULL, TRUE); add_setting_desc(table, 3, 0, _("Chapel cards:")); add_setting_val(table, 3, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_CHAPEL], NULL, TRUE); add_setting_desc(table, 4, 0, _("Pioneer university cards:")); add_setting_val(table, 4, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_UNIVERSITY], NULL, TRUE); add_setting_desc(table, 5, 0, _("Governor's house cards:")); add_setting_val(table, 5, 1, TYPE_NUM, game_params->num_develop_type [DEVEL_GOVERNORS_HOUSE], NULL, TRUE); add_setting_desc(table, 6, 0, _("Library cards:")); add_setting_val(table, 6, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_LIBRARY], NULL, TRUE); add_setting_desc(table, 7, 0, _("Market cards:")); add_setting_val(table, 7, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_MARKET], NULL, TRUE); add_setting_desc(table, 8, 0, _("Soldier cards:")); add_setting_val(table, 8, 1, TYPE_NUM, game_params->num_develop_type[DEVEL_SOLDIER], NULL, TRUE); return dlg_vbox; } static void settings_rules_changed(void) { if (settings_dlg) { GtkWidget *vbox; GtkWidget *dlg_vbox; GList *list; dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(settings_dlg)); list = gtk_container_get_children(GTK_CONTAINER(dlg_vbox)); if (g_list_length(list) > 0) gtk_widget_destroy(GTK_WIDGET(list->data)); g_list_free(list); vbox = settings_create_content(); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, FALSE, 0); } } GtkWidget *settings_create_dlg(void) { GtkWidget *dlg_vbox; GtkWidget *vbox; if (settings_dlg != NULL) return settings_dlg; settings_dlg = gtk_dialog_new_with_buttons( /* Dialog caption */ _("" "Current Game Settings"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); g_signal_connect(GTK_OBJECT(settings_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &settings_dlg); dlg_vbox = gtk_dialog_get_content_area(GTK_DIALOG(settings_dlg)); gtk_widget_show(dlg_vbox); vbox = settings_create_content(); gtk_box_pack_start(GTK_BOX(dlg_vbox), vbox, FALSE, FALSE, 0); g_signal_connect(settings_dlg, "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show(settings_dlg); return settings_dlg; } void settings_init(void) { gui_rules_register_callback(G_CALLBACK(settings_rules_changed)); } pioneers-14.1/client/gtk/state.c0000644000175000017500000000321210470301723013526 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" static GuiState current_state; void set_gui_state_nomacro(GuiState state) { current_state = state; frontend_gui_update(); } GuiState get_gui_state(void) { return current_state; } void route_gui_event(GuiEvent event) { switch (event) { case GUI_UPDATE: frontend_gui_check(GUI_CHANGE_NAME, TRUE); frontend_gui_check(GUI_QUIT, TRUE); /* The routed event could disable disconnect again */ frontend_gui_check(GUI_DISCONNECT, TRUE); break; case GUI_CHANGE_NAME: name_create_dlg(); return; case GUI_DISCONNECT: frontend_disconnect(); return; case GUI_QUIT: debug("quitting"); gtk_main_quit(); return; default: break; } current_state(event); /* set the focus to the chat window, no matter what happened */ chat_set_focus(); } pioneers-14.1/client/gtk/trade.c0000644000175000017500000004267211704116646013533 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * Copyright (C) 2004,2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "frontend.h" #include "cost.h" #include "theme.h" #include "common_gtk.h" #include "quote-view.h" #include "notification.h" static void trade_update(void); typedef struct { GtkWidget *chk; /**< Checkbox to activate trade in this resource */ GtkWidget *curr; /**< Amount in possession of this resource */ Resource resource; /**< The resource */ gboolean enabled; /**< Trading enabled */ } TradeRow; static GtkWidget *quoteview; static TradeRow we_supply_rows[NO_RESOURCE]; static TradeRow we_receive_rows[NO_RESOURCE]; static gint active_supply_request[NO_RESOURCE]; static gint active_receive_request[NO_RESOURCE]; static gboolean trade_since_selection_changed; /** This button can be hidden in games without interplayer trade */ static GtkWidget *call_btn; /** This frame can be hidden in games without interplayer trade */ static GtkWidget *we_receive_frame; /** The last quote that is called */ static GtkWidget *active_quote_label; /** @return TRUE is we can accept this domestic quote */ static gboolean is_good_quote(const QuoteInfo * quote) { gint idx; gboolean interested; g_assert(quote != NULL); g_assert(quote->is_domestic); interested = FALSE; for (idx = 0; idx < NO_RESOURCE; idx++) { gint we_supply = quote->var.d.receive[idx]; gint we_receive = quote->var.d.supply[idx]; /* Asked for too many, or we don't want to give it anymore */ if (we_supply > resource_asset(idx) || (we_supply > 0 && !we_supply_rows[idx].enabled)) return FALSE; /* We want one of the offered resources */ if (we_receive > 0 && we_receive_rows[idx].enabled) { interested = TRUE; } } return interested; } /** @return TRUE if at least one resource is asked/offered */ gboolean can_call_for_quotes(void) { gint idx; gboolean have_we_receive; gboolean have_we_supply; gboolean different_call; different_call = FALSE; have_we_receive = have_we_supply = FALSE; for (idx = 0; idx < NO_RESOURCE; idx++) { if (we_receive_rows[idx].enabled != active_receive_request[idx]) different_call = TRUE; if (we_supply_rows[idx].enabled != active_supply_request[idx]) different_call = TRUE; if (we_receive_rows[idx].enabled) have_we_receive = TRUE; if (we_supply_rows[idx].enabled) have_we_supply = TRUE; } /* don't require both supply and receive, for resources may be * given away for free */ return (have_we_receive || have_we_supply) && can_trade_domestic() && (different_call || trade_since_selection_changed); } /** @return the current quote */ const QuoteInfo *trade_current_quote(void) { return quote_view_get_selected_quote(QUOTEVIEW(quoteview)); } /** Show what the resources will be if the quote is accepted */ static void update_rows(void) { gint idx; gint amount; gchar str[16]; const QuoteInfo *quote = trade_current_quote(); for (idx = 0; idx < G_N_ELEMENTS(we_supply_rows); idx++) { Resource resource = we_receive_rows[idx].resource; if (!trade_valid_selection()) amount = 0; else if (quote->is_domestic) amount = quote->var.d.receive[idx] - quote->var.d.supply[idx]; else amount = (quote->var.m.supply == resource ? quote->var.m.ratio : 0) - (quote->var.m.receive == resource ? 1 : 0); sprintf(str, "%d", resource_asset(resource) - amount); gtk_entry_set_text(GTK_ENTRY(we_receive_rows[idx].curr), str); gtk_entry_set_text(GTK_ENTRY(we_supply_rows[idx].curr), str); } } /** @return all resources we supply */ const gint *trade_we_supply(void) { return active_supply_request; } /** @return all resources we want to have */ const gint *trade_we_receive(void) { return active_receive_request; } /** @return TRUE if a selection is made, and it is valid */ gboolean trade_valid_selection(void) { const QuoteInfo *quote; quote = quote_view_get_selected_quote(QUOTEVIEW(quoteview)); if (quote == NULL) return FALSE; if (!quote->is_domestic) return TRUE; return is_good_quote(quote); } static void trade_theme_changed(void) { quote_view_theme_changed(QUOTEVIEW(quoteview)); } static void format_list(gchar * desc, const gint * resources) { gint idx; gboolean is_first; is_first = TRUE; for (idx = 0; idx < NO_RESOURCE; idx++) if (resources[idx] > 0) { if (!is_first) *desc++ = '+'; if (resources[idx] > 1) { sprintf(desc, "%d ", resources[idx]); desc += strlen(desc); } strcpy(desc, resource_name(idx, FALSE)); desc += strlen(desc); is_first = FALSE; } } void trade_format_quote(const QuoteInfo * quote, gchar * desc) { const gchar *format = NULL; gchar buf1[128]; gchar buf2[128]; if (resource_count(quote->var.d.supply) == 0) { /* trade: you ask for something for free */ format = _("ask for %s for free"); format_list(buf1, quote->var.d.receive); sprintf(desc, format, buf1); } else if (resource_count(quote->var.d.receive) == 0) { /* trade: you give something away for free */ format = _("give %s for free"); format_list(buf1, quote->var.d.supply); sprintf(desc, format, buf1); } else { /* trade: you trade something for something else */ format = _("give %s for %s"); format_list(buf1, quote->var.d.supply); format_list(buf2, quote->var.d.receive); sprintf(desc, format, buf1, buf2); } } /** A new trade is started. Keep old quotes, and remove rejection messages. */ void trade_new_trade(void) { gint idx; gchar we_supply_desc[512]; gchar we_receive_desc[512]; gchar desc[512]; quote_view_remove_rejected_quotes(QUOTEVIEW(quoteview)); for (idx = 0; idx < G_N_ELEMENTS(active_supply_request); idx++) { active_supply_request[idx] = we_supply_rows[idx].enabled; active_receive_request[idx] = we_receive_rows[idx].enabled; } trade_since_selection_changed = FALSE; resource_format_type(we_supply_desc, active_supply_request); resource_format_type(we_receive_desc, active_receive_request); /* I want some resources, and give them some resources */ g_snprintf(desc, sizeof(desc), _("I want %s, and give them %s"), we_receive_desc, we_supply_desc); gtk_label_set_text(GTK_LABEL(active_quote_label), desc); } /** A resource checkbox is toggled */ static void toggled_cb(GtkWidget * widget, TradeRow * row) { gint idx; gboolean filter[2][NO_RESOURCE]; row->enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); for (idx = 0; idx < NO_RESOURCE; idx++) { filter[0][idx] = we_supply_rows[idx].enabled; filter[1][idx] = we_receive_rows[idx].enabled; } quote_view_clear_selected_quote(QUOTEVIEW(quoteview)); quote_view_set_maritime_filters(QUOTEVIEW(quoteview), filter[0], filter[1]); trade_update(); frontend_gui_update(); } /** Add a row with widgets for a resource */ static void add_trade_row(GtkWidget * table, TradeRow * row, Resource resource) { gint col; col = 0; row->resource = resource; row->chk = gtk_check_button_new_with_label(resource_name(resource, TRUE)); g_signal_connect(G_OBJECT(row->chk), "toggled", G_CALLBACK(toggled_cb), row); gtk_widget_show(row->chk); gtk_table_attach(GTK_TABLE(table), row->chk, col, col + 1, resource, resource + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); col++; row->curr = gtk_entry_new(); gtk_entry_set_width_chars(GTK_ENTRY(row->curr), 3); gtk_entry_set_alignment(GTK_ENTRY(row->curr), 1.0); gtk_widget_set_sensitive(row->curr, FALSE); gtk_widget_show(row->curr); gtk_table_attach(GTK_TABLE(table), row->curr, col, col + 1, resource, resource + 1, GTK_FILL, GTK_FILL, 0, 0); } /** Set the sensitivity of the row, and update the assets when applicable */ static void set_row_sensitive(TradeRow * row) { gtk_widget_set_sensitive(row->chk, resource_asset(row->resource) > 0); } /** Actions before a domestic trade is performed */ void trade_perform_domestic(G_GNUC_UNUSED gint player_num, gint partner_num, gint quote_num, const gint * they_supply, const gint * they_receive) { cb_trade(partner_num, quote_num, they_supply, they_receive); } /** Actions after a domestic trade is performed */ void frontend_trade_domestic(gint partner_num, gint quote_num, G_GNUC_UNUSED const gint * we_supply, G_GNUC_UNUSED const gint * we_receive) { quote_view_remove_quote(QUOTEVIEW(quoteview), partner_num, quote_num); trade_update(); } /** Actions before a maritime trade is performed */ void trade_perform_maritime(gint ratio, Resource supply, Resource receive) { cb_maritime(ratio, supply, receive); } /** Actions after a maritime trade is performed */ void frontend_trade_maritime(G_GNUC_UNUSED gint ratio, G_GNUC_UNUSED Resource we_supply, G_GNUC_UNUSED Resource we_receive) { quote_view_clear_selected_quote(QUOTEVIEW(quoteview)); trade_update(); } /** Add a quote from a player */ void trade_add_quote(gint player_num, gint quote_num, const gint * supply, const gint * receive) { gchar *msg; quote_view_add_quote(QUOTEVIEW(quoteview), player_num, quote_num, supply, receive); msg = g_strdup_printf( /* Notification */ _("Quote received from %s."), player_name(player_num, FALSE)); notification_send(msg, PIONEERS_PIXMAP_TRADE); g_free(msg); } void trade_delete_quote(gint player_num, gint quote_num) { quote_view_remove_quote(QUOTEVIEW(quoteview), player_num, quote_num); } /** A player has rejected the trade. Removes all quotes, and adds a reject * notification. */ void trade_player_finish(gint player_num) { quote_view_reject(QUOTEVIEW(quoteview), player_num); } /** The trade is finished, hide the page */ void trade_finish(void) { quote_view_finish(QUOTEVIEW(quoteview)); gui_show_trade_page(FALSE); } /** Start a new trade */ void trade_begin(void) { gint idx; quote_view_begin(QUOTEVIEW(quoteview)); for (idx = 0; idx < G_N_ELEMENTS(we_supply_rows); idx++) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (we_supply_rows[idx].chk), FALSE); we_supply_rows[idx].enabled = FALSE; set_row_sensitive(we_supply_rows + idx); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (we_receive_rows[idx].chk), FALSE); we_receive_rows[idx].enabled = FALSE; active_receive_request[idx] = 0; active_supply_request[idx] = 0; } if (!can_trade_domestic()) { gtk_widget_hide(we_receive_frame); gtk_widget_hide(call_btn); gtk_widget_hide(active_quote_label); } else { gtk_widget_show(we_receive_frame); gtk_widget_show(call_btn); gtk_widget_show(active_quote_label); gtk_label_set_text(GTK_LABEL(active_quote_label), ""); } quote_view_clear_selected_quote(QUOTEVIEW(quoteview)); update_rows(); /* Always update */ gui_show_trade_page(TRUE); } static void quote_dblclick_cb(G_GNUC_UNUSED QuoteView * quoteview, gpointer accept_btn) { if (trade_valid_selection()) gtk_button_clicked(GTK_BUTTON(accept_btn)); } static void quote_selected_cb(G_GNUC_UNUSED QuoteView * quoteview, G_GNUC_UNUSED gpointer user_data) { update_rows(); frontend_gui_update(); } /** Build a trade resources composite widget. * @param title The title for the composite widget. * @param trade_rows Pointer to TradeRow to store each row's data. * @return Returns the composite widget. */ static GtkWidget *build_trade_resources_frame(const gchar * title, TradeRow * trade_rows) { /* vbox */ /* label */ /* alignment */ /* table */ /* trade rows */ GtkWidget *vbox; GtkWidget *label; GtkWidget *alignment; GtkWidget *table; gchar *title_with_markup; gint idx; vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); label = gtk_label_new(NULL); title_with_markup = g_strdup_printf("%s", title); gtk_label_set_markup(GTK_LABEL(label), title_with_markup); g_free(title_with_markup); gtk_widget_show(label); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 3, 0 * 12, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, FALSE, 0); table = gtk_table_new(NO_RESOURCE, 2, FALSE); gtk_widget_show(table); gtk_container_add(GTK_CONTAINER(alignment), table); gtk_container_set_border_width(GTK_CONTAINER(table), 0); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 3); /* trade rows, one for each resource */ for (idx = 0; idx < NO_RESOURCE; ++idx) add_trade_row(table, trade_rows + idx, idx); return vbox; } /** Build the trading page. * @return Returns the composite widget. */ GtkWidget *trade_build_page(void) { /* scroll window */ /* hbox - panel_mainbox */ /* vbox */ /* trade_resources_frame */ /* trade_resources_frame */ /* hbox - bbox */ /* call_btn */ /* vbox */ /* active_quote_label */ /* quoteview */ /* hbox - bbox */ /* accept_btn */ /* finish_btn */ GtkWidget *scroll_win; GtkWidget *panel_mainbox; GtkWidget *vbox; GtkWidget *bbox; GtkWidget *finish_btn; GtkWidget *accept_btn; scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scroll_win), GTK_SHADOW_NONE); gtk_widget_show(scroll_win); panel_mainbox = gtk_hbox_new(FALSE, 6); gtk_widget_show(panel_mainbox); gtk_container_set_border_width(GTK_CONTAINER(panel_mainbox), 6); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scroll_win), panel_mainbox); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(panel_mainbox), vbox, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), /* Frame title, trade: I want to trade these resources */ build_trade_resources_frame(_("I want"), we_receive_rows), FALSE, TRUE, 0); we_receive_frame = /* Frame title, trade: I want these resources in return */ build_trade_resources_frame(_("Give them"), we_supply_rows); gtk_box_pack_start(GTK_BOX(vbox), we_receive_frame, FALSE, TRUE, 0); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); /* Button text, trade: call for quotes from other players */ call_btn = gtk_button_new_with_mnemonic(_("_Call for Quotes")); frontend_gui_register(call_btn, GUI_TRADE_CALL, "clicked"); gtk_widget_show(call_btn); gtk_container_add(GTK_CONTAINER(bbox), call_btn); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(panel_mainbox), vbox, TRUE, TRUE, 0); active_quote_label = gtk_label_new(""); gtk_widget_show(active_quote_label); gtk_misc_set_alignment(GTK_MISC(active_quote_label), 0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), active_quote_label, FALSE, FALSE, 0); quoteview = quote_view_new(TRUE, is_good_quote, GTK_STOCK_APPLY, GTK_STOCK_CANCEL); gtk_widget_show(quoteview); gtk_box_pack_start(GTK_BOX(vbox), quoteview, TRUE, TRUE, 0); g_signal_connect(QUOTEVIEW(quoteview), "selection-changed", G_CALLBACK(quote_selected_cb), NULL); bbox = gtk_hbutton_box_new(); gtk_widget_show(bbox); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); /* Button text: Trade page, accept selected quote */ accept_btn = gtk_button_new_with_mnemonic(_("_Accept Quote")); frontend_gui_register(accept_btn, GUI_TRADE_ACCEPT, "clicked"); gtk_widget_show(accept_btn); gtk_container_add(GTK_CONTAINER(bbox), accept_btn); /* Button text: Trade page, finish trading */ finish_btn = gtk_button_new_with_mnemonic(_("_Finish Trading")); frontend_gui_register(finish_btn, GUI_TRADE_FINISH, "clicked"); gtk_widget_show(finish_btn); gtk_container_add(GTK_CONTAINER(bbox), finish_btn); g_signal_connect(G_OBJECT(quoteview), "selection-activated", G_CALLBACK(quote_dblclick_cb), accept_btn); theme_register_callback(G_CALLBACK(trade_theme_changed)); return scroll_win; } /** A trade is performed/a new trade is possible */ static void trade_update(void) { gint idx; for (idx = 0; idx < G_N_ELEMENTS(we_supply_rows); idx++) { if (resource_asset(idx) == 0) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (we_supply_rows [idx].chk), FALSE); we_supply_rows[idx].enabled = FALSE; } set_row_sensitive(we_supply_rows + idx); } quote_view_check_validity_of_trades(QUOTEVIEW(quoteview)); trade_since_selection_changed = TRUE; } pioneers-14.1/client/gtk/pioneers.desktop.in0000644000175000017500000000025511711560445016101 00000000000000[Desktop Entry] Version=1.0 _Name=Pioneers _Comment=Play a game of Pioneers Exec=pioneers Icon=pioneers Terminal=false Type=Application Categories=Game;BoardGame;GNOME;GTK; pioneers-14.1/client/help/0000755000175000017500000000000011760646036012503 500000000000000pioneers-14.1/client/help/Makefile.am0000644000175000017500000000174110462166770014462 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # I don't know enough about the po build system, so I'll use a recursive # make for it. SUBDIRS += client/help/C pioneers-14.1/client/help/C/0000755000175000017500000000000011760646036012665 500000000000000pioneers-14.1/client/help/C/Makefile.am0000644000175000017500000000276710745435323014652 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # see http://developer.gnome.org/dotplan/porting/ar01s06.html figdir = images docname = pioneers lang = C omffile = pioneers-C.omf entities = legal.xml include $(top_srcdir)/xmldocs.make dist-hook: app-dist-hook # HTMLHelp is the compressed help format for Microsoft Windows htmlhelp: pioneers.xml xmlto -m custom.xsl htmlhelp pioneers.xml -/cygdrive/c/Program\ Files/HTML\ Help\ Workshop/hhc.exe htmlhelp.hhp rm htmlhelp.hhp rm toc.hhc rm *.html simplehtml: pioneers.xml xmlto -m custom.xsl html pioneers.xml html: pioneers.xml xsltproc /usr/share/xml/gnome/xslt/docbook/html/db2html.xsl pioneers.xml > index.html cp /usr/share/gnome-doc-utils/icons/hicolor/48x48/admon-note.png . pioneers-14.1/client/help/C/Makefile.in0000644000175000017500000004612011760645766014666 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # see http://developer.gnome.org/dotplan/porting/ar01s06.html # # No modifications of this Makefile should be necessary. # # To use this template: # 1) Define: figdir, docname, lang, omffile, and entities in # your Makefile.am file for each document directory, # although figdir, omffile, and entities may be empty # 2) Make sure the Makefile in (1) also includes # "include $(top_srcdir)/xmldocs.make" and # "dist-hook: app-dist-hook". # 3) Optionally define 'entities' to hold xml entities which # you would also like installed # 4) Figures must go under $(figdir)/ and be in PNG format # 5) You should only have one document per directory # 6) Note that the figure directory, $(figdir)/, should not have its # own Makefile since this Makefile installs those figures. # # example Makefile.am: # figdir = figures # docname = scrollkeeper-manual # lang = C # omffile=scrollkeeper-manual-C.omf # entities = fdl.xml # include $(top_srcdir)/xmldocs.make # dist-hook: app-dist-hook # # About this file: # This file was taken from scrollkeeper_example2, a package illustrating # how to install documentation and OMF files for use with ScrollKeeper # 0.3.x and 0.4.x. For more information, see: # http://scrollkeeper.sourceforge.net/ # Version: 0.1.2 (last updated: March 20, 2002) # # # No modifications of this Makefile should be necessary. # # This file contains the build instructions for installing OMF files. It is # generally called from the makefiles for particular formats of documentation. # # Note that you must configure your package with --localstatedir=/var # so that the scrollkeeper-update command below will update the database # in the standard scrollkeeper directory. # # If it is impossible to configure with --localstatedir=/var, then # modify the definition of scrollkeeper_localstate_dir so that # it points to the correct location. Note that you must still use # $(localstatedir) in this or when people build RPMs it will update # the real database on their system instead of the one under RPM_BUILD_ROOT. # # Note: This make file is not incorporated into xmldocs.make because, in # general, there will be other documents install besides XML documents # and the makefiles for these formats should also include this file. # # About this file: # This file was derived from scrollkeeper_example2, a package # illustrating how to install documentation and OMF files for use with # ScrollKeeper 0.3.x and 0.4.x. For more information, see: # http://scrollkeeper.sourceforge.net/ # Version: 0.1.3 (last updated: March 20, 2002) # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/omf.make $(top_srcdir)/xmldocs.make subdir = client/help/C ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVAHI_CLIENT_CFLAGS = @AVAHI_CLIENT_CFLAGS@ AVAHI_CLIENT_LIBS = @AVAHI_CLIENT_LIBS@ AVAHI_GLIB_CFLAGS = @AVAHI_GLIB_CFLAGS@ AVAHI_GLIB_LIBS = @AVAHI_GLIB_LIBS@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB2_CFLAGS = @GLIB2_CFLAGS@ GLIB2_LIBS = @GLIB2_LIBS@ GLIB_DEPRECATION = @GLIB_DEPRECATION@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME2_CFLAGS = @GNOME2_CFLAGS@ GNOME2_LIBS = @GNOME2_LIBS@ GOB2 = @GOB2@ GOBJECT2_CFLAGS = @GOBJECT2_CFLAGS@ GOBJECT2_LIBS = @GOBJECT2_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK_DEPRECATION = @GTK_DEPRECATION@ GTK_OPTIMAL_VERSION_CFLAGS = @GTK_OPTIMAL_VERSION_CFLAGS@ GTK_OPTIMAL_VERSION_LIBS = @GTK_OPTIMAL_VERSION_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBNOTIFY_OPTIMAL_VERSION_CFLAGS = @LIBNOTIFY_OPTIMAL_VERSION_CFLAGS@ LIBNOTIFY_OPTIMAL_VERSION_LIBS = @LIBNOTIFY_OPTIMAL_VERSION_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@ SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ # ********** Begin of section some packagers may need to modify ********** # This variable (docdir) specifies where the documents should be installed. # This default value should work for most packages. docdir = $(datadir)/gnome/help/$(docname)/$(lang) dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pioneers_datadir = @pioneers_datadir@ pioneers_localedir = @pioneers_localedir@ pioneers_themedir = @pioneers_themedir@ pioneers_themedir_embed = @pioneers_themedir_embed@ pngtopnm = @pngtopnm@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ svg_renderer_height = @svg_renderer_height@ svg_renderer_output = @svg_renderer_output@ svg_renderer_path = @svg_renderer_path@ svg_renderer_width = @svg_renderer_width@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ whitespace_trick = @whitespace_trick@ figdir = images docname = pioneers lang = C omffile = pioneers-C.omf entities = legal.xml # ********** You should not have to edit below this line ********** xml_files = $(entities) $(docname).xml EXTRA_DIST = $(xml_files) $(omffile) CLEANFILES = omf_timestamp omf_dest_dir = $(datadir)/omf/@PACKAGE@ scrollkeeper_localstate_dir = $(localstatedir)/scrollkeeper all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/xmldocs.make $(top_srcdir)/omf.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu client/help/C/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu client/help/C/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/xmldocs.make $(top_srcdir)/omf.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html-am: info: info-am info-am: install-data-am: install-data-local @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ clean-local dist-hook distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-local # At some point, it may be wise to change to something like this: # scrollkeeper_localstate_dir = @SCROLLKEEPER_STATEDIR@ omf: omf_timestamp omf_timestamp: $(omffile) -for file in $(omffile); do \ scrollkeeper-preinstall $(docdir)/$(docname).xml $(srcdir)/$$file $$file.out; \ done; \ touch omf_timestamp install-data-hook-omf: $(mkinstalldirs) $(DESTDIR)$(omf_dest_dir) for file in $(omffile); do \ $(INSTALL_DATA) $$file.out $(DESTDIR)$(omf_dest_dir)/$$file; \ done -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir) -o $(DESTDIR)$(omf_dest_dir) uninstall-local-omf: -for file in $(srcdir)/*.omf; do \ basefile=`basename $$file`; \ rm -f $(DESTDIR)$(omf_dest_dir)/$$basefile; \ done -rmdir $(DESTDIR)$(omf_dest_dir) -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir) clean-local-omf: -for file in $(omffile); do \ rm -f $$file.out; \ done all: omf $(docname).xml: $(entities) -ourdir=`pwd`; \ cd $(srcdir); \ cp $(entities) $$ourdir app-dist-hook: if test "$(figdir)"; then \ $(mkinstalldirs) $(distdir)/$(figdir); \ for file in $(srcdir)/$(figdir)/*.png; do \ basefile=`echo $$file | sed -e 's,^.*/,,'`; \ $(INSTALL_DATA) $$file $(distdir)/$(figdir)/$$basefile; \ done \ fi install-data-local: omf $(mkinstalldirs) $(DESTDIR)$(docdir) for file in $(xml_files); do \ cp $(srcdir)/$$file $(DESTDIR)$(docdir); \ done if test "$(figdir)"; then \ $(mkinstalldirs) $(DESTDIR)$(docdir)/$(figdir); \ for file in $(srcdir)/$(figdir)/*.png; do \ basefile=`echo $$file | sed -e 's,^.*/,,'`; \ $(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \ done \ fi install-data-hook: install-data-hook-omf uninstall-local: uninstall-local-doc uninstall-local-omf uninstall-local-doc: -if test "$(figdir)"; then \ for file in $(srcdir)/$(figdir)/*.png; do \ basefile=`echo $$file | sed -e 's,^.*/,,'`; \ rm -f $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \ done; \ rmdir $(DESTDIR)$(docdir)/$(figdir); \ fi -for file in $(xml_files); do \ rm -f $(DESTDIR)$(docdir)/$$file; \ done -rmdir $(DESTDIR)$(docdir) clean-local: clean-local-doc clean-local-omf # for non-srcdir builds, remove the copied entities. clean-local-doc: if test $(srcdir) != .; then \ rm -f $(entities); \ fi dist-hook: app-dist-hook # HTMLHelp is the compressed help format for Microsoft Windows htmlhelp: pioneers.xml xmlto -m custom.xsl htmlhelp pioneers.xml -/cygdrive/c/Program\ Files/HTML\ Help\ Workshop/hhc.exe htmlhelp.hhp rm htmlhelp.hhp rm toc.hhc rm *.html simplehtml: pioneers.xml xmlto -m custom.xsl html pioneers.xml html: pioneers.xml xsltproc /usr/share/xml/gnome/xslt/docbook/html/db2html.xsl pioneers.xml > index.html cp /usr/share/gnome-doc-utils/icons/hicolor/48x48/admon-note.png . # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pioneers-14.1/client/help/C/legal.xml0000644000175000017500000000022607742513336014414 00000000000000 This document can be freely redistributed according to the terms of the GNU General Public License. pioneers-14.1/client/help/C/pioneers.xml0000644000175000017500000020210411575444700015150 00000000000000 ]> Pioneers player's guide Dave Cole Andy Heroff Roland Clobus Documentation in progress 2000 Andy Heroff 2004, 2006 Roland Clobus &legal; For players Introduction Obtaining newer versions New versions of Pioneers are regularly made available. See the homepage for latest version. Reporting Bugs If you encounter a bug, report it with the bug tracker on SourceForge. ( https://sourceforge.net/tracker/?group_id=5095&atid=105095 ). Please check first if you have the latest version. Authors and History Pioneers is a GNOME game based upon the board game Settlers of Catan created by Mayfair Games. Pioneers was originally authored by Dave Cole in the spring and summer of 1999, under the name Gnocatan. Dave wanted to be able to play the game without having to travel, so he developed a computer implementation of the game. The Pioneers project stalled in the late summer of 1999 and saw little development until the early spring of 2000 when the project was taken over by Andy Heroff and moved to SourceForge. Andy recruited several developers (including Dave) and they improved upon the original game as well as fixed bugs that have been found in older versions. After summer 2002 the Pioneers project lay dormant again, when in summer 2003 Bas Wijnen found some security bugs, and started programming new features. A little later he was joined by Roland Clobus. Bas made the split between the core code and the user interface, while Roland was working on the user interface. In June 2005 the project was renamed from Gnocatan to Pioneers. To be continued... The Pioneers user interface When you start Pioneers, the main window is displayed. The user interface is built up from a number of panels.
The client user interface
The identity panel Before you have connected to a server, this panel will not be displayed. Once you have connected, the panel is painted with your player color. It also shows how many roads, settlements, and cities are still available to be built. Once the game play starts, the last dice roll performed by a player is also displayed.
The identity panel
The actions panel The waiting prompt When it is not your turn, a message is displayed in the status line at the very bottom for whom the game is waiting. The actions buttons When it is your turn, one more more of the buttons in the action toolbar are active. Only the actions that you are allowed to perform will be enabled.
The actions buttons
Action panel buttons Button Description Roll Dice Roll the dice to start your turn. Trade Perform trade with either the bank (maritime), or with other players (domestic). Undo You can undo road, settlement, and city building that has just been performed. As soon as you buy a development card, play a development card, or finish your turn, you will not be able to undo building. Finish Indicate that you have finished performing setup, your turn, or road building. Road Build a road segment. It must join one of your own settlements or cities, or one of your own roads. It can be built on land or on the coast. Ship Build a ship. It must join one of your own settlements or cities at the coast, or one of your own ships. It can be built on water or on the coast. Move Ship Move a ship that is at the end of the line to another place. Bridge Build a bridge. It must join one of you own settlements or cities on the coast, one of your own bridges, or a road. It can only be built on water. Settlement Build a settlement. City Upgrade a settlement to a city. Develop Purchase a development card from the bank. City Wall Build a wall around a city. Each city can have at most one wall. For each wall you are allowed to keep two more resource cards when a seven is thrown.
The robber prompt If you roll 7 on the dice, all players who are holding more than 7 resources will be prompted to discard half of them (rounded down). While there are still players who have to discard resources, the actions panel will be replaced by a list of those players. Next to each player name is the number of resources that they must discard.
The discard list
The place robber prompt After all excess resources have been discarded, if you were the player who rolled 7 on the dice, you must place the robber on the map. The actions panel is replaced by a prompt to that effect. When you play a soldier development card, you must place the robber on the map. The actions panel is replaced by a prompt to that effect.
The place robber prompt
The steal from prompt If you ever place the robber on a hex which has buildings owned by more than one other player, and more than one of them is holding resources, you will need to select the player from which you wish to steal resources. The actions panel will be replaced by a prompt which instructs you to chose the victim of the robber by selecting one of the buildings on the hex.
The steal from prompt
The resources panel As the game progresses you will accumulate resources. The resources panel displays how many of each resource type you are holding.
The resources panel
The development cards panel If you spend the right combination of resources, you can purchase development cards from the bank. All of the development cards that you are currently holding are displayed in this list. Note that any cards in this list are not yet in play. Other players only know how many development cards you are holding, not the types of those cards. Once you play a development card, it will be removed from this list.
The development cards panel
The player summary panel This panel contains a summary of public statistics about all players in the game. Some of the rows in the summary have a number displayed on the right. This number represents the number of victory points that have been earned by that statistic. If the panel grows too large to fit in the available space, it will automatically scroll to display the summary about the current player.
The player summary panel
The Pioneers map
The Pioneers map
Pioneers is played on a map which is built up from a grid of terrain hexes. Each hex on the map has a terrain type which defines the resources, if any, that are produced by that hex. Settlements and cities are built on the corners of land hexes, while roads are built along the edges of land hexes. In the center of resource producing hexes, there is a circle containing a number. At the start of each turn, two dice are rolled, all hexes that are labeled with a number equaling the sum of the two dice will produce resources for buildings on that hex. Underneath the number in the circle are some dots. The number of dots is equal to the number of different dice combinations that will generate this number. To highlight the two most commonly rolled numbers, the 6 and 8 are displayed in red (there is no label with the number 7). In addition, the hexes that produced resources this turn are painted with a green background. The sea hexes which have a circle in them have building sites for ports where maritime trading can be performed. The location of the building sites is indicated by a dashed line drawn from the circle to a hex corner. The image in the circle indicates the resource type which may be traded at the ports. At the blue circles all resource types can be traded. The brown bottle shape is the robber. The following table shows each terrain type, and the resources produced by that terrain. Pioneers terrain types Graphic Terrain Graphic Resource Description Hill Brick Bricks are produced from the clay found in hills. Field Grain Grain is produced by crops grown in fields. Mountain Ore Ore is produced by quarries in mountains. Pasture Wool Wool is produced by sheep in pastures. Forest Lumber Lumber is produced by trees in forests. Gold mine Any Any resource can be bought from the mined gold. Desert No resources are produced in the desert. Sea No resources are produced in the sea, but maritime trading may be performed at ports.
The chat panel Underneath the map is a field where you can enter messages that will be broadcast to all other players. When you type a message and press Return, the message will be broadcast to all players.
The chat panel
Normally, text that you type will appear with your player name, for example "player1 said: foo". If you start your text with ":" the output will omit the "said", like "player1 needs more lumber". The chat also knows some special commands that start with "/". The commands currently defined are: Chat Commands Command Arguments Description ; chat message The chat message is added directly behind the name of the player. Example: ;'s victory is imminent will become player name's victory is imminent : chat message The chat message is added after the name of the player with a space in between. Example: :needs lumber will become player name needs lumber /me chat message This is the same as the ":" described above, but IRC addicts might prefer this variant. /beep player name Let player name's client beep.
If you want to send a smiley that starts with a : or ;, type a space before the smiley.
The messages panel Underneath the chat panel is a message area where all interesting game events are logged.
The messages panel
The status bar The status bar is used for providing instructions about the current state of the game. To the right of the instructional message is an indicator which shows when the client program is waiting for response to a command sent to the server. When packets are dropped between the server and client, the indicator will display the text "Waiting", and the game will be temporarily unresponsive. Rightmost in the status bar is the turn indicator. This area identifies the player turn sequence. The current player is highlighted with a thick black border.
The status bar
Playing Pioneers Joining a Pioneers game The Pioneers client program is "pioneers". When you run this program, you will be presented with the connect dialog. The connect dialog Using the connect dialog, you identify the game which you wish to join. This dialog is automatically invoked when you start Pioneers. If the initial connection fails, you can invoke the dialog from the Game New game menu, or by using the CtrlN keyboard shortcut.
The connect dialog
Enter your name, and join an existing game or create a new game. Only if pioneers-server-gtk is installed, you can create new games.
Join public game The dialog displays a list of Pioneers games that are currently running on the Internet. The default meta server is pioneers.debian.net
The Join a public game dialog
You join a game by selecting it and pressing the OK button in the connect dialog. To obtain an updated list, push the Refresh button. Enter the 'Lobby' to meet other players and arrange that one player will start the server with the game you've agreed upon. Some meta servers also allow you to start new games on their host (e.g. pioneers.game-host.org). If this is possible, the New remote game button will be active and will bring you to the Create a public game dialog.
The Create a public game dialog In this dialog, you can select various parameters for the new game: board name (available types will be retrieved from the meta-server), the number of players, victory points to reach, how many computer players should join the game, which sevens rule to apply and whether the terrain should be randomized.
The Create a public game dialog
Once you're satisfied with your choices, press the OK button. The game will be started once enough players have entered the game. The new game will of course be registered to the meta server it was started from. Other players can see it in the list if they press the Join public game button, or refresh the list of public games. The server started remotely will terminate itself automatically when the game is finished, or if sits around for more than 20 minutes without any connected players. Please also note that adding computer players will silently fail if the pioneersai program is not installed on the meta server.
Join private game You can manually specify the game that you wish to join by entering the server host and port in the Server Host and Server Port fields. The hostname/port combinations you used recently are remembered. You can recall them quickly with the Recent Games button at the bottom.
The Join a private game dialog
Pioneers setup phase Once you have successfully connected to a Pioneers game server, the game map will be downloaded from the server and displayed in the map area of the display. You will be assigned a player color, which will be displayed in the identity panel, the player summary, and in the status bar. As soon as all other players have connected to the server, the setup phase will begin. During the setup phase you must build one settlement and one road segment on the map. The settlement can be built on any land hex, and the road must be built on a land edge connected to the settlement. Once you have built both your settlement and road, you must press the Finish Setup button. The next player will then enter the setup phase. The last player performs a double setup, that is, they build two settlements, each with a connecting road. Once the last player has completed setup, all other players perform a second setup in reverse sequence. Once the first player has completed their second setup, the game will begin. Pioneers turn sequence When it is your turn, the actions panel will show all of the actions that you can perform. Some care must be exercised, as some actions can only be performed once per turn, and other actions can only be performed in strict sequence. Simplified turn sequence Roll the dice. Optionally trade with the bank, or other players. Optionally build roads, settlements, and cities. Optionally buy development cards. Finish your turn. You may play one non-victory point development card at any time during your turn, even before you roll the dice. You may play as many victory point cards as you like at any time during your turn. As soon as you have built a road, settlement, or city, you will not be able to trade for the rest of the turn. Likewise, if you buy a development card, you will not be able to trade for the rest of the turn. Dice roll / resource collection When the dice are rolled, they are added together, the total determines the resources that each player collects during that turn. In the center of each land hex (except for the desert) is a number. Whenever the dice roll matches the number in the hex, all buildings on the corners of that hex will collect resources of the type generated by that hex. Settlements collect one resource, and cities receive two resources. If a player has multiple buildings on a hex, each of those buildings will collect resources. The hex containing the robber never generates resources. If you roll 7 on the dice, all players with excess resources must discard them, then you must move the robber. Discarding resources If you roll 7 on the dice, all players holding more than 7 resources must discard half of them. The discard resources dialog will be displayed for all players who must discard.
The discard dialog
You must choose the resources to be given back to the bank. Once all players have discarded their excess resources, the player who rolled the 7 will have to move the robber.
Moving the robber The robber begins the game in the desert, but can never be moved back into the desert. If you roll 7 on the dice, you must move the robber to a new location on the map. Whenever you play a soldier development card, you must move the robber to a new location on the map. Once you have moved the robber to a new hex, the robber will steal a random resource from another player who has a building on that hex. If there are multiple potential victims for the robber, you will need to choose the victim by selecting one of the buildings on the hex. When the robber steals the resource, only the players involved in the transaction will be told which resource was stolen.
Trade You may trade resources only after you have rolled the dice, but before you build anything, or buy a development card. When you wish to trade resources, press the Trade button in the actions panel and the trade interface will be displayed.
The trade interface
On the left side of the interface are two tables; the top table is where you specify which resources you wish to receive in a trade, and the bottom table is where you optionally specify which resources you wish to give to other players during a trade. Each row of the table describes one resource. From left to right, the columns are: Trade resource controls Check Controls whether or not this resource will be involved in the trade. Trade quotes submitted by either the bank or other players can only include resource types that are checked. Name The resource type. In hand Shows how many of each resource type you have in hand. If you select a valid trade, you see the amount you will have if you accept the quote.
The Call for Quotes button underneath the two tables is used to invite other players to trade resources with you. To the right of the tables is the list where all quotes will be displayed. The bank quotes are listed first, followed by all quotes supplied by other players. Next to each quote is tick or cross which indicates whether or not you have the resources to perform the trade. As you select quotes from the list, the Accept Quote button sensitivity will also indicate whether or not you have the resources required to perform the trade. Also the amount of each resource shows a preview how many you will have if you accept the quote. To finish trading, press the Finish Trading button at the bottom right of the trading interface. Trading with the bank Maritime trade is trade performed with the bank. To perform maritime trading, check one or more resources in the I Want table. If you have sufficient resources to perform maritime trading, the bank will quote for each possible trade. You don't have to press the Call for Quotes button. Players who have built on a port with a resource label may trade two identical resources of that type for single resource of their choice. Players who have built on a port with the question mark label may trade three identical resources of any type for single resource of their choice. All players may trade four identical resources of any type for a single resource of their choice. Select the trade that you wish to perform, then press the Accept Quote button. Trading with other players Domestic trade is trade performed with other players. To perform domestic trading, check one or more resources in the I Want table, and one or more resources in the Give Them table. Once you have specified the resources that you wish to exchange in the trade, click the Call For Quotes button. All other players will then use the quote interface to submit quotes within the trade parameters you have set. Select the trade that you wish to perform, then press the Accept Quote button. Submitting trade quotes When another player presses the Call For Quotes button in the trade interface, the quote interface will be displayed.
The quote interface
The top of the interface has an indicator to show which player initiated the trade. It also describes the trade parameters. On the left side of the interface are two tables; the top table is where you specify which resources you wish to receive in a trade, and the bottom table is where you specify which resources you wish to give to the player who initiated the trade exchange. Each row of the table describes one resource. The player who initiated the trade controls which rows in each table can be used. If the initiating player calls for a resource that you do not have, the corresponding row in the Give Them table will be disabled. From left to right, the columns are: Quote resource controls Name The resource type. In hand Shows how many of each resource type you will have in hand after performing trade. Less Press this to decrease the number of the resource you wish to receive / give. More Press this to increase the number of the resource you wish to receive / give. Number to trade Shows how many of the resource you wish to trade.
Underneath the tables are two buttons. Press the Quote button to submit a new quote, or press the Delete button to retract a quote. Note that the Quote button will be disabled if you have already submitted a matching quote. To the right of the tables is the list where all quotes will be displayed. Quotes from all players are listed. The first quote from each player is highlighted with an indicator. To decline the offer to perform trading, press the Reject Domestic Trade button at the bottom right of the interface.
Development cards There are 24 development cards in the game, they are shuffled at the start of the game. When you buy a development card from the bank, it is held secret in your hand. Other players only learn how many development cards you have, not the types of those cards. When you play a development card, all other players will see the card. There are victory point, and non victory point development cards. Victory point development cards earn you one victory point as soon as you play them. Non-victory point development cards have special effects as described below. Development cards VP Card Number Description Road Building 2 When you play this card, you can build two road segments for free. The normal limits on road building apply. Monopoly 2 When you play this card, you choose a resource type that you want to monopolize. All resources of that type that are held by other players will transferred to your hand. Year of Plenty 2 When you play this card you can take any two resource cards from the bank. Soldier 13 When you play this card, you must move the robber to a new hex. The first player to play three soldiers will earn the largest army award. 1 Chapel 1 No special effects. 1 Pioneer University 1 No special effects. 1 Governors House 1 No special effects. 1 Library 1 No special effects. 1 Market 1 No special effects.
The monopoly development card When you play the monopoly development card, the monopoly dialog will be displayed.
The monopoly dialog
You must choose the resource type that you wish to monopolize. When you press OK, all resources of the selected type held by other players will be transferred to your hand.
The year of plenty development card When you play the year of plenty development card, the year of plenty dialog will be displayed.
The year of plenty dialog
You must select any two resource cards that you wish to take from the bank. If the bank has enough cards, ++ is shown between the less and more buttons. Otherwise, the amount in the bank is shown.
Largest army award The first player to play three soldier cards will earn the largest army award. This award is worth 2 victory points. Only one player can have the largest army award at a time. Ownership of the largest army award will change only when another player builds a larger army.
Building By spending the right combination of resources, you can build roads, settlements, and cities. At any time during the game you can check the resource cost of each type of building by consulting the legend dialog.
The legend dialog
At the start of the game, you have 15 road segments, five settlements, and four cities available. You will not be able to build more of any item than you have available. The identity panel tells you how many of each item you currently have available. A city is built by upgrading a settlement. When you upgrade an existing settlement, that settlement is again available for building somewhere else on the map. Buildings must not be placed next to each other. This means that a hex can have, at most, three buildings on it. During game play, you can only place a building adjacent to one of your road segments. Roads must be placed adjacent to one of your buildings, or one of your roads. You cannot extend your road through a building owned by another player. Longest road The first player to build a continuous path of five or more road segments will earn the longest road award. The length of your road is measured by determining the greatest distance that can be traveled from one point on your road to another without traveling over the same segment more than once, and without backtracking. This award is worth 2 victory points. Only one player can have the longest road award at a time. If another player builds a longer road, the longest road award will be transferred to that player. If the longest road is cut by a player placing a building which divides the road, the ownership of the longest road award is re-evaluated. If after the longest road has been cut, and more than one player has the longest road, the award is temporarily removed from play. If no player has a road of five or more segments, the award is temporarily removed from play.
Game objective The objective of the game is to achieve a certain number of victory points before all other players. There are several ways to earn victory points. For each settlement you have on the map, you earn 1 victory point. For each city you have on the map, you earn 2 victory points. The player with the longest road of five or more segments earns 2 victory points. The player with the largest number of soldiers in play (minimum of three) earns 2 victory points. There are a number of special development cards which when played are each worth 1 victory point. The game over dialog Once you have won the game, all players will to notified of your glorious victory.
The game over dialog
Frequently asked questions Playing games Where can I find games? You can find games at the metaserver (pioneers.debian.net) But there hardly are any games present? Perhaps people don't register their games (it is optional), or use their own metaservers. I've seen a game at the metaserver, but I cannot join? Is the Host something like 'localhost' or without dots? In that case someone did register the game, but it is not accessible from the outside of the intranet that hosts the game. I get the error: Error connecting to host 'AA.BB.CC.DD': Connection refused, what now? The person hosting the game has incorrectly configured his firewall. See also 'Creating games'. The button 'New remote game' is always disabled. Why? The metaserver at pioneers.debian.net acts only as a point where games can register. It has been configured not to create new games. How can I play against the computer players, without starting a server? You can play games at an alternative metaserver pioneers.game-host.org. It has a limited number of games that can be started. New remote game is available on this metaserver. The Lobby Why is nobody responding? If you enter the lobby, and see several squares in the icon before the name of a player, it means that that player is disconnected. Perhaps they are playing another game, and don't monitor the Lobby. This game will never start. How can I play? One person has to create a new game. If it is set up, you can leave the lobby, and join that game (Game Leave game). Creating games How do I do create new games? Start pioneers-server-gtk. In the Server Parameters: Choose a Server Port that is publicly accessible (create a hole in your firewall if needed) Set Register Server to 'yes', so other people can find the game Select a Meta Server Leave Reported hostname empty Select a game of your liking, and click on Start Server What exactly does 'Reported hostname' do? It overrides the hostname that is automatically detected by the metaserver. Only in special cases do you need to enter something: You have an extra DNS name, and would like to show that name instead of your normal DNS name. You run a private, publicly accessible metaserver, and start a game from inside your local network. In all other cases, you are advised to keep it empty. How do I configure my router? Henner Keßler wrote a small HOWTO describing a possible way to configure your router, using dyndns. What if I only want to play against the computer players? Start pioneers-server-gtk, and set Register Server to 'no', and add as many computer players as needed. In the client, choose 'Join private game', the host is 'localhost', and use the port you have selected in the server. You can play games at an alternative metaserver pioneers.game-host.org. It has a limited number of games that can be started. What if I only want to play games inside my own intranet? Do not register your game at the metaserver, and choose 'Join private game' on each computer that joins the game. Use the ip address of the server, and the port you have selected in the server.
For game masters The Computer Player Pioneers comes with a computer player, pioneersai. This player isn't too bad at the moment, but not finished yet. Most notably, it cannot initiate domestic trade, and use the maritime rules yet. pioneersai is a terminal application without GUI. Its command line options are: <application>pioneersai</application> command line options Option Arguments Description -s servername Connect to servername -p port Connect to port port -n name Set the player name. If this option is absent, a random name will be choosen. -a playertype Choose the type of computer player. Currently, there is only one type greedy, which is obviously also the default. -t milliseconds Set time to wait between turns. -c Stop the computer player from giving comments.
However, most of the time you won't start pioneersai manually. Both game servers offer ways to start a number of computer players.
Configuration This chapter is included for the people who wish to control exactly the way Pioneers is running. The extra configuration options are processed in this order: Command line Settings file Environment Built-in settings <application>pioneers</application> The client is controlled by the command line, the environment and the settings file. <application>pioneers</application> command line options Short Long Description -s --server Hostname of the server -p --port Port of the server -n --name Player name -v --spectator Connect as a spectator -m --meta-server Meta-server host
When both the server and port are set, the client will not display the connect dialog, but will directly connect to this port. When the connection is closed (because the game is over, or the connection fails), the client quits. Server and port need both to be set, or not at all. Settings file <application>$XDG_CONFIG_HOME/pioneers</application> Section Key Type Description connect server string Last used server for private game connect port string Last used port for private game connect meta-server string Address of the meta server connect name string Last used player name favorites server%dname string History entry of private server games favorites server%dport string History entry of private server games settings color_chat boolean Display chat messages in user's color settings color_messages boolean Display colors in the message log settings color_summary boolean Use colors in the summary settings toolbar_show_accelerators boolean Show the keyboard accelerators in the toolbar settings show_toolbar boolean Show the toolbar settings legend_page boolean Display the legend page beside the map settings theme string The theme
<application>pioneers</application> environment Variable Description PIONEERS_META_SERVER The host name of the meta server
When the host name is not provided in the client, this environment variable will be used. If it is not set, the default (pioneers.debian.net) will be used.
<application>pioneers-server-console</application> <application>pioneers-server-console</application> command line M Short Long Type Description -h --help-all Show help * -r --register Register with meta-server -m --meta-server string Register at meta-server name (implies -r) -n --hostname string Use this hostname when registering at the meta-server * -x --auto-quit Quit after a player has won * -k --empty-timeout integer Kill after n seconds with no player -t --tournament integer Tournament mode. Computer players are added after %d minutes -a --admin-port integer Admin port to listen on -s --admin-wait Don't start game immediately, wait for command on admin port --fixed-seating-order Give players numbers according to the order they enter the game --debug Enable debug messages * -g --game-title string Game name to use --file string Game file to use * -p --port string Port to listen on * -P --players integer Number of players * -v --point integer Number of points needed to win -R --seven-rule 0|1|2 Seven rule * -T --terrain 0|1 Select terrain type (0=default, 1=random) * -c --computer-players integer Number of computer players to add --version Show version information
The column 'M' shows whether the switch is used by the meta-server <application>pioneers-server-console</application> environment Variable Description PIONEERS_DIR The location of the *.game files and the computer_names file PIONEERS_META_SERVER The host name of the meta server
Server admin interface protocol When the server is started with the command line switch -a, the following commands can be sent to that port: Admin interface commands Command Argument type admin set-game string admin set-register-server integer admin set-num-players integer admin set-sevens-rule integer admin set-victory-points integer admin set-random-terrain integer admin set-port integer admin start-server none admin stop-server none admin quit none admin send-message string admin help none admin info none admin fix-dice none
admin set-game should be used before the other game parameters are changed, because it changes all game parameters. If a game was running while a game parameter is changed, it will be aborted. When no game is running when admin quit is issued, the server will quit.
pioneers-14.1/client/help/C/pioneers-C.omf0000644000175000017500000000215410260712456015310 00000000000000 Dave Cole Andy Heroff Pioneers Player's Guide 2000-05-03 Pioneers is an Internet playable implementation of the Settlers of Catan board game. user's guide pioneers-14.1/client/help/C/images/0000755000175000017500000000000011760646037014133 500000000000000pioneers-14.1/client/help/C/images/actions.png0000644000175000017500000001343511760646036016226 00000000000000PNG  IHDRT,v& pHYs+tIME1FtEXtCommentCreated with The GIMPd%nIDATxw\SI*[P p "("jkjzZ^XQk^v\m:谵޺eW d?hb!9INB3<>{~9oN8E92AAz%AA :(?.h  BwXP W*J!) ,bAdgIȢc敪yxï3n^%N#=zͽ*XZCeQe/QE:yN (0ns1 aDԘ*SDYUdR]! ܍#(ILY O䡴 С} 8ayf ST6cAE/U2i%rSf®3|{m,N g51UPP1q{/Um,̹/*!QE!u<ȼ0vma'Z%1er7 1E4شϜ#G5K7H$*uJMӀ7$L],qh-P]kn: nCyc<>m|  Tma[?04zQTL)o7ꎮs>=:#L(4h -Jp]56-Ьe YGS=kAȾuVzfpuEPʘwg4jSJ-(t jZLK{$(Szb @32i>xC`zlց4-A&)FUGt={@AL";г=U^b g.<I_]Tp~pFm -[ájJvBGzأ${QTU^tgJ^-***AMHL)OvӉ* RSeFpѦf_!,p-!,gaQ^A}P]~6%(/JATTE.vMED6sUI ub>U{mY)%Z&8Al߲=ZK1( -K`mTW<1,WTUmB9$SMXPYEeJ >vƽ T |W쁪J2Bv=_8+uWUU*}.56|LŠ`{.!e(?GECɍULq#]&@eIy59F֪T,Vh1="E:ݔ0ҪE5+_FHQ;7rURR2 2 ֎QD"18\O ?@R>N O|trA_P_l0DŽ*sSb2RF\ɤ5XR̕@UxWAT f:XY;>TvRkOdV Aߤl/8D/40H$H$5J"X"T"D"V#{B`OK'Y ݢ!,go Xorpuq<=`:oN6b:>3>h.i̅s}(/"G=}.3ޘΛw.z7ne2"`~0aTde4X!St9&NmUU:cn}_[)űE9e΍dl!**+A1W\\j8ו)gA,Ƒ?qv:._8#[;[vmv횴#ƕ gISfm>SLY f zX+"=k8|Q!ͧ..'NVRZDQqbO@XX(\]\'۷93z_E-\>◡ #еKglx bMjju+V BO"` ϶:}6={]ŽϿDpdfe&ۯ=<0  /|"a D!g*me>}jF/n3c]9&ԟ;|={mƄ&Ο+[W y ~<ϵuu O -sVm;T}S,;Q"C7_RZN!(--9??x+~RjG?S[|TVVbE[P9>Ԧ+F.zF/?DKoEUݝtjgb6mƂy1y8;9oc!zuH]bF rsѱk(˟}Ml皶9P1Oǎ?RJbR)c2 TOmtIm݆!/?I!9u/'}x;R̶֬] B]30q0sܿ{S߮VzOqPTT 8I;J{lڦ+u#޿Ƣe6XkOsbxd=LO")^Ƅ&ð(~QYYiI$]@a?- {B!$&|態(.)CŊ#_{=r8ts-УGw2cM(//GJE?._N4hNa3Mm֮׷M69{Ǐô=j8ƍ###b6{&6+:w#bWjx|lߐJ6}3M}K\c27W (r% /Wjrɓ<ܾs_hNgtU=TUN|/@n=p OѮ1}.ބn`dfRا|lא?w^2m|vبk(++o'V`,]:]K<|QpFq{^~~ cbڰW11nghWZZ:FC󰲲X,FX(?z^:GCG]|;::c>(yD3G0t|T222ѣWs ikSݼm6݀b|lS;&m2{M{"7+ VVVbu2hfΘ#+ʅ3Ӝw^1OV oo/̜>bFa^?-oGAќDp5=M|p-žB!ж7 `|8;;ߗ_3799ؠ/MmD"}sfrM6skޘڧǎBT]2EII D" ^xN7ÁO[|V,Yxڪ+͒ WWvto_( YYVJDԮ)o$󲑙~WOnnT|]>lၻJ5ܾs^fZBa]:6_#=%Z=ИžlX/^һʟZ2>ocS'c܅1m 66u毙ӧ/v>b'̞J~0lcQr/QMl)s~Q}pO1x@X[cHLJo|Mrkޘڧ]^Ʊo v~f|b?9 A%ã z G#b]BBb5F6AqVoۏ-Q~5oFG᝕k0zp_8s3`毗ӧO_yڥan)/O>?Fa#FEurgtpGz:ی9Ѧ6,{k1lEIi)D"\R9յpx|l3/^?T隨l_׼iƎ}@`f9AcjZ"gB{FukwRC΍N! | Μ:XRK#0 }_׋ĵys+< #F'gZ geb|3b,zOXЭ{/D*ٶmx},_vۮ/Y7g&vXʐ!0ibӭ.qnhLh8|z6v6f??_9=N4B#Kvy\.|Q>D&g#ט䴮y>=j>{>X0z󌪿Ѹaccx9"FP4rҏ#A!\2bk B*oCFF&FļFi>!"0?UU2h ^ON Zi ov~ηSzGAa $  * - N IENDB`pioneers-14.1/client/help/C/images/brick.png0000644000175000017500000000031111760646036015645 00000000000000PNG  IHDRabKGD_ pHYs  tIME 41FOVIDAT8c`h>VC #0A1R/0Q= Μ9W ~F4ylN tIdVd-W2IENDB`pioneers-14.1/client/help/C/images/chat.png0000644000175000017500000000353011760646036015500 00000000000000PNG  IHDR,= pHYsxa+StIME"IDATxiTGn !E4-VQPBk@R-VϫJ (xR  Ԋϓs@~DVݙٷf[ Mrнq¡gR*}8 i\.A0 .A!G#2AzJ?hHěkjgq>ۈJC&$.ҺϦLޘ|3p+E҂} վS?<(o]?O$‡'S#]=="]ٴ4qV56:X%3}.G׫פ/vd:9{ v\5 i_jljF0 0S&TKe*]7Dq3# [(}aذă"P|1t xzP[!ۺ{(/^%j0_c@1!HЩdOPlh [ojyT"f%]KfT&Xp:ؔkgx5&0)^">*ɉY6"J%BȐ 'o:ue$2!T*js*3~Q'jO}T"g;D?,ۚ') AFn37\\w#F:.5md iAq{gf4yN] F j^u“n?s*&l1ޞ,LjycŶ]eov8OWMJ c">X㨖~{u1"2`6}*'%?&F,Km$eTBo&d8ri)ZE/Ʉ9fԴcB&cM0) Ōq! $,lA(3>|VPѾq58͉yoYC~ΚvPbI* c& /Wo|oj9NRGvCj|*_d"Q^c].zm 4:^5U՘0>Fqƍ }݆ߟ遨bqc[\6~nj{l*x}tfZPDQ"H{cp {/:o™C{>Iï߃#c^cW<`jPX2a/WaKj6dXii6&i}+˵>]ߙ_tň05r7=l)|~/$EƄANo=Rgw|{юۘF ;s~ U5PUJޤXҾs1FwIO^9"cج[;"ٹ]EWqIy}Ȼ|Dͧ|/'L`qzVo[a1x%ԧǍ]t!5K A:GM?LP{@=(]}5#{%_syK~L~,_uݱNySe J1o=3~[خP ɣz`/·^-@VFgw<8 y0O~Km ٥??ul4`0ɨp$R=pw$~o_JA(,hI]'nǏrr?ȫ0e54 .z%OZs(lTt޳iLXlZ2T*='?]Hbm3Y =!l9tF8Nagau<?cLO%9Rڥ=^I͐Ҳd|*]WnVAڒ>ψgԎ[qb;#t_[y( M_pzN821CVJ0< 6fxbptS{&vW j%)Sһ@EUQo_pg(r7!/Rr>]tޖɀnuٗ-Ԍnx 70tNA܏rP+2ch#Bq!MSOyisy(/8w.4U{g#kp}g }N m7%los_Fg]wE/-lxakMw5ewLȻn3 ϼb=Fvq+뀱/"s-U<26[9~i[?ʱƣ5;f^g\8ձ{`xqkK*J ]uE@++K5%%J՞&~ݕIN}BZ/Ngh$w˽E[.YQRrzZ6Fv}9*o:56xW8Sj ](^\TMJq=ZQT%,Ms(<{.ho ` A{nG(t鬰Ed^4 )9SRY@+wG]|jΑЮ)uRbsrhtFɘ;8; I4?J-9C(ئ=oyp$q:AϹC) 'e(դWՎ H`q :޽{.A1u)7'15Z G2HSL8N0r&]GJH亮09Lqc G9&Ai{ŅwXWs=ysԒe 3{zn[- AA'YqieeW AAڪ5?,6l  ϝV:~-  Hrߚ>0>Q4g>??vM<_x˭wuϳݞ?-ƞ:i)O팉+WoG=#;י/ؾc,U{~wwFR2"n%%I Q"O|)coٺ5vΘk)c?ϗMM˖?C]ftÑtؤNHC 4t=3zG,qf*_wqҠy=Ogƃ܌ .K_(5_])tˍݺa ?svXdg\4`ѷ_~kۆI;G`M[~-W<܋O>zu_?moܹ{W-@Y9cP^ʋSWT,_`^xXVovn]9gR≯g?~嚵ÇxkևBήzmR'dk^oŋrXH'+W-eTV9_xfT\p\:Rn葋}'rdw]{^V3rzh?ʋ  u*-Mk$m{^'^oP0lԸ>(?;T9gu+*,*>oV.EQ!#]s`1~i~nga`]9eZHRݔ9v[ΝxVffF3Yw?߼E))9{ؤYm(w_vƞ?ΌC3/9=/-//)W~NA j?4a*gUfFknEYfݳ^޼uk0:x$h$uV%.//?KZ^]q'}*+rwzuT9sfksT|h I_6}MJf}o3 ޽Û&,)&ʙΊ?ΌĪđ¥g{Gל,wל쪪* r?YOC>nW|iFy]3xY- Ыءմ9?|qHA?$W~j٢C](*.9oθGŴ¢GQJIjD/,,Jq8> G6NXܲ?3&񘴑 (E%-z,^T\_B9i˜f'7E XB)EBQq=ZPʃM=ZPX(;o&C 5'k?<]qŏ6 'xʧMg݊aA\fϩrVEʁ{C5n:)o(# %|fr\3Ri|vӳ|K.cp\pldҲ /[G?򳏴̧{W\;|&Js-# :;;wMG|vu)|g`=wI#N=3K[nxř]{Iܛ2j̄Qc&d{Oij&L<;w^qqW}qIyCi(͸l2=eܸ32xAo4*Q.Z1|>z|R}wcS\p9%QcfeD҉Þ\?{J>PKADF$&Gcf%w#=PWFiKd?.O=9gO8-S=p Rx9P#//&/q/}Sǟ-xྻ\-T=P  kJ8^P^Z ҘF|AA(PAID~AAQ(ދFAA312 F 14 =idn  &@A5  jAAP  FAAo68CNg(f (ݛrt l/GiΝGLIƘKrr\(񀮔ľwtիBbћ#z4As.47a)*Sk\Fbj<ϻ\U:`0fGيu# kG(HZٳgkc7&7%UUVb(chzf#5j8w:+~_ N t$uCO|q5CM(utZoNۑ&5DD"3)%`!rHrl6-w]cm w].x$H H'(G={v7ő3p,۸$xu G P [HXVU0<ج~ج(Kf,Cn;ю8zy2qHփ:3 M4ʘ`8KNNUU@F!A4 "c,-6 QҪdg7 ik4A3 Ӻ:ajM@C=mHD6jg`0"Y@oI f:Qq@7 zSV0jfptJ$vIIqMJJ*Q'˲bGdcH84A' 5Jhr^=B%b dtz bu3 thiWeI2ctAP Qj f|ژMq9#q>t:lrb &H(Ϛׄ`(hyu"ޠPm+%a(#Hg(3׎5ؑ/S:Pf~ `1<!WDM 4J$#eJ(9Q5EQbUѐlyK,4ٕ#Qt)j2%9Ph;T( ZfEQdX"1b# Q:Lw@=8NAvIĄMy\)DAwwh(M!MpG\AN\mANX1<AAHu~ tA:CΉsCQ 9-:M-v: A:6HNo'>dFYre 3|w[z?pa<;V,,X^f!_t^=-: ˲NIYTHF(+ػ몎FՖ3%Kn*A4,s^n>/r Q`5w@$޷c2>D}bhQ%ذrccmKcz^˾*N?uڝh)ܹy51=ϖF;7ddGr,A*X&.o3F]{ۺ.]rv7 yjZ0ܳwfCלNB:7M{,Tgn-ٶa9ٳ}S&`Qk~ :}m/--ܫmdٶ_-s󚨢}{ɃGdt¢\;k>]rZөwߗ׫Oo~,z4}z e)+ٿya"sLݵmݲW.pO,o+9$9}頡2~9l O=̌nĎPo6fN㶝;w6|}ף3jլE5Y,>OSm2ipv^;!xET(%w6N{/;s_TU--cQ%HI*/6m(ڷ#:cIr:PRu:らE{[oFk/gy\3nq׶ ;n葟Okaj׆5˖,ϥέ뉑<̬)r 3qSڿ{No=ەpx9? |,]ݷks}={pFᾝv͚uqjm^[o׿IsϿT^QfŒ˗:t-ij5kR+J+Ya9䭩ji6&_skHNˮZȍ`7ԉ/kn~mWԸpSsUF]IFqUA3UƔH祈uSuN׫`A48r{dp\;Ay픫-^Pw$I'ɧ/"Ij+1oÚeUU^|/Hi^aŢ9e%(*/7h1i5oY>!$ Q#fWU^ohry^奅6[ϕW^Zh[:>d% Ǝ9bYkۿYLIIIMMy٧bq?g=ӥKbyG~KOؤ&%%[Sm&@eEIAL}kA˔o3&/4+33d2M֣="jguvVgK?{cڼUشbK۹E|xssU~QgGړ4%2,=9Ivy\NZ6j.+ IDATP20 vU$98_]Ѡvp@4z}oͣ('lm7w5T{@۞2뙙~^bQ~φ h(D²ݑw;UUE1L@LA鈄CzLa&9jU@6./ n dd~Zgfmڼ5 BUVVuz:5|䩧Vq;s6gR-]ͫf-  ]v; `w6418[#p=E|h0Dܞqڹ;7֋-v+*+zѧOr~=waYY] ^Ү]s*+FCczaSƝA@4  y;JyiHW $t.s$&sӞy3ǟnZ@!gCZZjQQqnyPTT\&&?fffq:sW{DZVb oL% 1~{?gY$ΛgN<ic,KjjJ8WZ Ԡ.bwU^]-5HJN--HI_$fYw";mlm˯^||/>gP*$55/qҜfOv*9KMڼfq4};7e4CF>[*:iX2r6CDHd߮-̜ +ﮮ(*޷mfD= Q"" `l_O;N#όm Sl۾[no۰b~S2qٶKnO5ژ 5={%嘩8˷];vQXTIvy '?Lt:~K.ܼj"l^4cڳs. B#Mo0ګ165zCh6]޳m]UyID LykoZ}̓fػcc~Ah4, mڼf~ŗ?tO|fypVW?S]r^bv(%pVr{5?[w xnY6 g\(9Bo09LuY6"@VnOy ܲ&%#[{èyW{⩜^^|cv>p);ѣbSF ҫzr?mJ4'gzvޞV,b=7ft;jV kOmG=wu9'Sz7*mMOy055eȱCGHWZJv9._lϛV/a,:xԙneXױ7hZ_kmjlr5KX8gMYr}>hC'#='%ky QkFnǞ0rSO0h訤䤘BBfÍ=rԙ uUpgJh ܚo3:15D”}g=p&]$& &h:>(//m 1ZDY{*UPcl85I1,Z)_3aDh1"imnFijjVoƧWiv:htzl3"DhЧ͏Im\=5K! BEioFAA1Vq@ޱ/viqGC KDzCB qAe>F )PЉFAI\9 <AAQJ vm۸ضqeqķko5/M}w'#:MYtti{5uքF5;pd[ϓʊDS"" x3>cOJi"dT)Nߺ2mli5!' G,'%'tT¡/>Y{{l Mq愝Zc_N9eDnyjOic/X;Zd4N8sO?݇ 2՞o\Ί>wNzI,vƟyn Uq楡 Y^3J$gF\2suާVLCV^ZYy=l5uƷֻ=ZHʍDsO Fi:3,92ˊ82a' 9 ] 5}:CKvӭKmM5A4J%UZ'[̜ٻkm Mؕ%OYhߧp3^1q"4K9#ۈ^h4y0@>7SUT%Muvk` xT5j}WLյŚڃIB&$g= 7Z߼o,3wIiA6%"'NISXR] œo4ݱs#ͬrV?̓VgSҶmXϘZ{kTW"6hMGF1jItQ%[bMiQ$4= ߎwee]ݪ.[~{?ML3LЖo禝W<*qJ*xɧ_~qqGGOhRt'>e16yXg۪%:}fN7uAk:^SQTMVX5I$TkBP4ŖT,$1hʌ^jwԾI4 f-^Ϗ=kРYnA&ґk-[S %OYl۾ɗԾeȉS׫6}O1^' |ʙiȉߺۦ5dTWu:Ԁdiz,Ԛ' ՚xǣ8RK 4@jfv=n<̻sS/'vn] S#a`V SREuEqls˘8eg^n;v*p3&O:Oٽm 5{ٱiU^JX(U-i7JX{vdt*JY, 5!Qni]jJ$x?Q A'\@.8oժ54'.)-5f#=G[۷_q#%}uYbU<# 'NIS Peg^.8[ݙsEg8/=yӚ?Wˁ:ҳue2٥Kn)9%`Zbq֚n葋{YRզ 3JګʒmWړRN2S]ȳdTG6= - JxaV())]`AA? I8PI:1a/A#FAcpq`GrqA5 r\õDGsکY[:# 9+*k7wuNT7cmfOh/ '8ɶ0H@<h籬APtu24 X,1( Q:@)S9Ћ;# cė)\-Z6pUe;a;TCUe;ZJA5J(eJb*:RqѤ)mRF/2{\ttȦ.EAJLsǠG2ukko{]p(d+uɥWVU:6)7=w%p#o;# Q:@TPEU>ը+R.|~ӹr*?]5ɓ΋⪿>}{ݵg?x,eW,]eʪq, j-PPF@'R 8鷿W_{;WiV._|1DV듏?`Xf=HIq0뙯#xA(-'K$L3Z㳮5)p;q|0+׭ݺuUW\ V\}y3ٓ3]]jsv<ʍ8|A5J dԑ -ݪ2A}cf0A4zM>[oDCl;vԛoiꎭje;P]X\zя e(S:yUyzNgE=wO!(¢ソG{v:y/h݆QAP@@GicSw< xG /9bxl;2rĨSǝCo _AZ \4wf;~:͉$RͱS֖2eҕ7AZEu6v$Ru R{FNżQDM"AR/E#h8 b !9 {ĖG!*S X`$FD *QO%h'Me612 AVi yBxb#h@)%bQ_YA.-pBP<#E,*L@C.ɞBeDP(!,83,@}*dP>h'3Gw>?COH6);qCkDc,aM @D81YGʁhJ89`#++̒hOR=rH;* 39JUb2؈jvV)S@ @ 6 he(AVAASF# sSj ԧ_d3N0GI uQ DNwGxdH*A$}#A5JӠMb6;QI2/H$[oփ%B:}L< Z\bQ ,H}L&aQQ@ A6]#4)R~paR F$k !Xz*hA,HCA`!IBpFb)0"$eبK8r 2UnOITQ*Eh.Tɪ@TQA}>H q!gbAYv"Z@g~ @FÀpF>D! ~Jm$, HN|AeHV;%ꠛ%D9/!*2"ppp~92Y.UJ<1Zb`pDP(J# dbՄ71Vn_Zœԥ;@#^AAV nA}> j(H'GJBC>e/a TfɡC2aFJ QlYOyP R Hz @+nQ aANlf" e~BlDRJPJ(Ʉy)  F1q%D &ѐ#4䣊# XgQϰvLa%EqRA}>(vm`_B(0JDfp;5/%U4$@`TJd=@O(pf*A橇EqH²[ `@>h'A iw8pm5 ׮ӷPY`)c ~ @Pg"I1V>MKa|-mS&b:|srI7Tu|4"0T83E ,pf ǹ@l@$d +hQQhXO T(cD+8*rD4k~ bVABDОBD0R,@X8NJUbgFe؍D'jE95"pO+WP/Ba! 趄i>g/, 燚ɼݨʜWot5`4.L۶ϞщP^_idwr["ԟNo5}(jsC=<$$Jy™AP<S``@4y0hu 0^YM@$d*(bu*Aąh C3nP%Q&" .~ 4j"!bK D@z R@0< ܮތnJv,38 )8`HJ΢r"J4yx")SA8E#*Sjg=KƷ}~zV<Ϝ۷" DAottLWPxyrS$)I-(*2d\9OOD۾Lf!,n,m;zlnPdp+NFAN?0(! %+$Q"~DܴD(@:*A847v/bQ J,>y4gd7n*F @F"$F N " GZ`!˫*N'22@42FlF/dFtYJ#f0paVI,T %@pAq=>׼&'S:N0DYTaQq^FpB9Q/Q*mBLCtۧW_ְ#Wڮ>55_>=4֨?vw8l_ ~6҂[ߏzNŎM; jE^A?ֲi{bO^s/nٴZ^+9wI 鶟 zϽ WgP _D`b=YU2 QۦPwD4@ @#@,ּt;k3D(YN+d ` QLeFDj3b, %#S H̩F3K64X$H 'Ȫۥ}qCB :A*`2I5TfVCL~JnqřyYUYU}Twϩ[Hh0\l  c,a-!d>,Xl|~%k$!ꮞʪʪFcB0ٙz晈ȈȈAJ|P]p>!&`nq!d)gffêVeX'm enM(}+&aSR Yڷ ]& 1<۝B\_1# hE#ӟsG_L*?G+z}m|l[Ҽ3 OJaU3C R R(5pjl%Mgu@  0Iج$(.4LXH* zK8:]^c2YE4$w0fu9 h_F 0 Za`Gq6%rZ@4o.-B#IhvGH+O#RE0pW}²jY33VeT,!% q@=gX~~ǀ>~+7k#fNaWe|kn'MrpUج+3Y WpGk=jd \(ȱvTP93OS!U8/IgyT ɭs\Sg: (. =ŒrfD U<n;vk+ DkQraDpsޕ,!,[XB;R*%=rw?9lӾ6W|c ٘w.~s׾|\l>e/𒗽Y|g߹w=mx/}wk/7]7^fq+_~t?n}|_}赯_x%-#)3ٱDR%OΈ30I$RUI;4c(lTλu 2(L3Fp[p ^Um_aNjH9c Y 8EXm!2Gv)aX`#;C@Au&dpkO58κt{rp~ڳŻFDݖ[2|{a0oӰZY%MDž"\Qdz\vV Q DP+B;b$VN3bGcز(Xu,iJyiR Gґ@E_Km=6iL)pd엽2h%oH(x{:fy{︲ <}%^<-_:Sg?qڗwN8۶~_,i\'?p333鬜[\|eYP[o5~Oٻ[_  m,}=gΠ"0f3"JM Bz'RɚIÌkMziSqYNM܂ Ng 烰dRkD4CsKG@לTٌwx 5 <'Q$\= -(3Bj3(pj2n1yk1/MY ϓGf9vpr̾&W_?oe=g^>@geT Nށ(,-O3GiSn(a@I6J$M! HA‡*B5y6 R DicaY> )) ͐ȥGA\J~]$+P"9Fq*@JjV~Ez$\W@ z=:r[wy M{КA*P K)iY0cJcr,)%\TW챍8lGzW(00B:-"4͍@6oMթ6;ҶW̶{ܫx,{Ï7FǕ}mPs=(>Wg>;0?g7^;6)/}yneՋxK^[oZwffzm `o eR./e{W mq,*䡄U\c  L$P T'p?%@H3.B:q0 QGQ¡G׊zPT]ldج5Sz,g*ۀVH RYbtP;5ٯe=dYab t (3Oa"QR3NLǑcȕ)QFKzhT _No]'ܴ0V& &aВ\4ɴ5nc |8X!/`Z]\k!J.q~ؾvi?7t3ܲtnt*nZG1]{É;69@# /{x%_Iҗ_E\z%Y׿}?u%vƣ?쥓?yqŗ~B1ܒ>8S&!N(e. ]D>-#Ki  4!8rj@xexRCG J[D8mX4i!*iU1_# P)^r*Ij֎ ""56i=l(!,[LMLZzSm00l98=Dge!ph~-'\YOΊlq7uV^[;DZ4M;.f_z=)g%f Q!W 3 ׮7!̈$J r%ըȃ fޢ}rQ :T"PP6 p?(@BM~s8edp! b;FV{ '!l+\Wض:mQj@4+޷h{Ҿ;F i )!$%ZFp,MZB,dշ\ {wwkihcFkJz,5;kUTjF. NF; =AZSHCr ԈYtnO 2|"᪰zh*"ɬF/Zʄ1,v (z1H"AMΜbe$EATeak@XAxv2̘T"e#RPjmIh8BnMQ ePx s t c R:$%ǂ1ICL)y׮'>4/Ua4Z#E!DQ`F+RFK*% ,ذU5'Łxl2SpڶWR( -Y^C<מ;nڽ.8LG17̤hO>S d<΋ p68I'7:oqe_UgS6ec4C QRMR2"^$Qԉ"@I"TULGxh 4 {2 Gk IDATW3P uF501!YwF rJ#ppzvlpaʾ6ٌQ68G L$08cv6)F>5)RV;U h\Q4` Ą*hm!%ZkO5 !FR-'yJGJnAe@n ͙:Ep\0('FF` !#HC׃[pf8wI{xK1j~"B ip -)]%*]MsmݚҶS$]eNQcaSXyY!,pH ۔N.CO;̊VM|H!Li\¯`˼T\mBv輋,7t`5՜m=.hwn;"4[yىo,=O;6݌Q6_聤vFQwu73 "{^(,Gl (PjfMHzW8<( $D8; HvpT6c? @u A| <'xPG>Ay=&ِ hӞ9us /.w;;YtV,2r]&lzU3\#!\Ìڭ< 7hc(K#mXVmq\XRG!ssԴ}eY> 2~#Bcx,~(Yfh #aI Z*\m+ǖFe˝|gͰj嵚6Tn%`iy߀smI_Q:R.c}pyuM[w74uX,ضXFhFe_lQ6xhF<PUPPkSb׹.hўoh7m>cx9I}42 2 D+A0f(ZDCAv)ٞ&9NŕV)T9aPcu6k)<*–%~cG>cN J^s<&YivaARt;hah [tilx,s/ʶfmh6Jm5,yۿ/_О7wOxA6s_8CzuWCNmt:\>k0 M9ϛt:Cng*=;N<1"`esn9O&\ЖD3:4Z6%%z7 ѡ7a-@@ư3z6ǠI 6QC * ^?4w\\;vߚt{󪘲ػ?}mk}긲TҚ{I5TU4LШsC46Yqڅ+١NwkݨQIcH~{O;aQ% #Pj!z;}/5=+e^ۗr檁c u7cR:q,H<%sۭExJd*5S X0ei$ϟPډzl\ޞzu\?c4@&}Ye kno%) a˄(pac$''xD&Kr"E36@?X@ZaZ4ZzGu;(!7apVAPeШL#-Yh0&fl{J< uv-50~t`RVz 3DZ15Eg=ꬍ9][Оj3yY=&ĭ]OWs\*r1NxR /βK'<oG#r0[-s ӾX -? ±`hy¯.gy $:KMNh~Yɣ~>Q:ms"lG .gEtհqϮ[[ۊt L-[jm+I2 @g/HKlhޢ4;kX,+@9P7Ô#Gy *hgyiЃw9dD1ܰj|! d$D{Fur$%DKpU #Q qɕaӃ׀I"<eT4C#K>ufB  +9&@n@bQiNc8YAnWp>$f=tc=&)Qg SQcdFK"N7GUy1ʵ(oz҉s'lm4[8`dbűSW,dK"D 2Mdl6(J#㘰ηaLtQ +E^id:=&kUW:h8-0uVCNF=7wsnάRAX*43pGzr[n;o2}דy;ktW5ַu|cgOn#P̡)xsફڤ% QINI3>*ƒIp7Q0 3Zp)a>fshd;XۮRI\nG-u\6gph ṿ E;5d"l5 NT#{€jwQ:_ ]䙐"jWz&F?0֋t_{+~G$غ=cwZRO9!@/Z[]_߱BIܵo?nj]qykp|?Iњz6Í)V6S@\u+oF'p:l7r;fc&^۵90Ѐq03elDuB7eaN!sRHjo(a#!G( \$%)9Ɉ-XTC΢qᅮEsZc_!OqŒswȮ:R3ףA &/rVEM*5v̵y؏d{K|q|Ls9+r+J'dHpn 4qPˑ/da'N=;(>ݷǤ\28ElZ 1o <ף'\W֪ز k5.Ge^$16a!l#6RJ%`Բ 6;wz]ͯ_w͹QxWh) f;me_s7Nqi֦)qq¶O|C> 6k=ǖ\u+&?7_ps{3g=k3;Ξq֏򴪷`~GXTpGSP {.1 bc)F:!au|DQAD8żZa38d\;s*.>(i^[zq(;w1'$:Y }j!S!(f9 1E>Hrja,鎩0T S"jRgA?߽mvJ1M?&R,*q}b+O[q_Ȏ-gqYgUmX-ww‚XPl!q9?UcCt!%j56*kr8,,3RXҔZB!l!L%)묳hh4V<<_sݍvk6Չ݇000g||gw;}kwܴ}g\lhxWAfr,ʛ?{(zֳ6AKMB=NM4L- &E` 9eBNb3Xdq2H%j{ fD򹟰&>&q:F=yLM^H@' 1 eD1:ÛAzP. JR59Nv̟)H)ĈO)1dR 6H% |8dchn4Gc,W@t.4E.g]]{~|)Oȧ_Yq^ko]^y_{OQ_ugk;زm*[6ITOJP$$8$m#`Bڎf̍e.Z2Ҷ#t!m;33GmzՕg_ooO]O] :8eշ_q9}_ ˾6y1nCg}ϪЦшQ=#& \Ea G0WkdJ4X)s (bd>)}HI &Iʏbpj\*ssH sY ]!BT)T pH: KnR"RJa[ -ڽw7xAM*Z\ܶW߰{t>=.*riöP:֏()vmyRpI2 !LYB Fò]O,5ЌbirT0*Nf{]Ԫy&KˮfYY}d>Gp|Q~e]kYr@wJd487$ aIF9鸲 \Q,>DR.!MWJs2619cԡ(.4-.dǐ592R b2G\8 /02Ѓhd8g=? 5eN\Ӂwr\;~eT41Wus7ܞW]xۊ9Jl?Y$;k]ټe#M9ZIhm #> tϩaPЦ@'@`EW1pj᡹B$-IAO  1|AEaڋ7[VgM$ɮ2g5wss ܳJJm-h$4jԂ4hM4@ h }f.DI $TUYan˵gf͏RWk)UUfjɛ9_{ V8" ⺕0Y,E2<1%l)Hl2/c'BImzRu 8ED"ͣ12Mu9(tC/d\xqpэ]ܼR[ozcG~ wu4Ab#g5yJczNyN)(qimM;;0AGah=Ż10Q{>'|r}=~ꍻۻ\vh`wwUzG 8#GNXuAVy\lf0|ϭQޮۧ7Oz( Џ%Y! aj+ji~ R\ra9 %gNG@czDL Cv* $#9@d.drR ZPC,$X,l,ðg$/A1 K.p%(NHݙKR^]Id@6>: IDAT= LL'=G?㱭kk2m2ֽp]7yk%x˔z=g/K5َy c(d@j[0F=xlY Qԣ8Ҕz1#b$4 uYZ8V+#ip |ל8?WtzyQNdZswYE{y~Xb>}N8~Ͼcx{>ew^|Bc5\F9>%2W\i)Y]rT4Jޡ(J*;`Vhi2>sH3B ͖+4~ӓ)ǙqR(}Y s**G%RvnoE=uv(;>\l5^,_'7Oz+(c΁2* {rZQ!IَO\Pɼ:6fɛOm&lw`Tt0^0sj rbs<_it0q}'D K!Y^K+mqq0ck4R029>8b-Y3!00S>қn[S)t6=u!ڤ "p  ıSs#:W#v*`jZ4A=xJ奷3>?3?+8}0U/EڴU}\2GZY׶$bZv0؅nP~GIϞʢ+KWUc<9" x/{ɫ?:X֋eyM?|t(mӚ_͟}}2lB*(  .Sbcz㤎rJ9r(B z(dMv3& r&;u;?9}N'$Ygϰ&Ֆ  /E0╀yy639FFy6CDrW<+L+,k,k, `l w"  \hZ5(E"](-ZC }=/햃'+75;n._.9:u*Z;ı|i|y?eY{ۭ˷/s0u-I9)r6lظ-tn[|) ?565no|γߣ̼e?-jQxًgg_ =:y'T|=F~GoӾqc73J 4t]2QjB7ٔҰt}#)aԍK3t2MS-r/[^8c ^γ}'8OOACyGyzq'[`',wwz(O^g+J;d[^_]IqDkWRRYޞ{266iE:GtZڃ1YTmoc_o}ƞ>ۣ7ɟX?5u??NWW'Gx8i.tdf';>`iضPVZ~3pthΧ+)yʧ.p|۴Sy3Zu^a_KXby?Svդ/JEsdZ(i c_{ Wvbƛis{0`~!Fn{s'g+@- {q"M9hu y GWRQvOls:9d1Y].2cd ~`H l'`21K8`'oz䕘fc:dK9pF~~~К&_Y/3?3#4|qTֵl'P5Զn[g;O:y#rZ:,vI3g=u]QՑaQy?AO=wO'ųG)*Vn-ʍWoo_9۱/q*J_|ͷ=x Ck*7ύoc=?lunكf\?smx?wkcނZf,/ LdE>p` `f>dd80bPV閭Ź,oӄ'PW,MVrnk6FJCJTjjD'O={ )bPf*H݆ 8(%T.]~/§/xγ3۾Ǯv̛woz;o9w^t wllWz,XHm:; ɹ}y v=G|=ny_5)}oIZȔ >E|-?>4ʻ sIb3'ɳD\:W+ ӑ8[Χ/s%Yܽ%Csd G}/]=9;Oc>Ly3YI(>&'O2! 3lo? ZA`}CR^YPanLe{Xm8 J>G=%d$?_sS;]۹I{O |Һ=Ws六jsw9[-t @;G=?T۹&֡q< k-F <幠V7uvGwm,;&OARzsk{,z]4s&,7|#TtYQDm,3a{J56Gۑ?m[RN긗 [L z} 4f۫>%zg[?^xu]-85wE\޸'a {n& .&1R? qƓj6=cAK "fOB"Jk3%.D5lAL!;yx8qBJb})|>.tP -KD1\%ZdA31^XΗ $y!8çG߀Yεjq4M-ܮiof.\]=gWJ[w(5|M:lj5FQ:ooUHN5-|оn ㄝwEG﩮u˨m׵KA|=ّA'?_yՃGί)S6mʲ̋kE++s|1lGV:tMY25UWՌC˪@iאklC[ӿ_3{re 9, ǁetСQ "B*7-T:)ò- Si|4Y2:h$ [b? jіJ\&*ae9`iɂaF]Cf.ivE3nAQT@eFd 8f0Ne![}Fja!G+h \g\7:۔/n6AеZkIp)jc+@ցX9J;_)yjXKNYX,ζ@>9 6l%r2kjE(Զ.}{ wY?7_^#l85 `,SY_eY[;-QvVWab>o~7ߺv؎^ꌔE^,s[מV)E v{4">>sWwZ` +inMw̭_z柇ycJ)=mqJts6-H,'#wsdu#f%C38x<8qjZ sZ{R) U  dqϱژmI@KHkk@x[,P#[QeLx2Mmpz @\%&YJ^89|F(|9|ʊ`i@ |o#ulۂ"֣K,UcGA^cowxC|bz;|b™CZr)ukMG΢ >YEruZh&vu&7oK3wpZ%ui6/*L<|)|ۭ^7Pʳ .v_mۮ.{f/:/h*Kخ1uelwwtkVkkazR:Q}ǵv8Dٶ#âvnBV==Ϯ^~))|l˯:6(*[?S|>Eh5qE:Y?=s[/^-w?뿦|5"Ϸ8`诎Cc?MTU ;>lNm:ȃ=G֢̩Ѩk_m}x{}j 9ZXӵ~i\gnl|::#yd vN^ ]O.SEj^ԋ`cc%-k[TyQ}@,iVGㅊC;C~/y#?%;?l?Nʪ㞧ɈfE^+7xMӜp#GPkO)p)s:+_}Sb{M7u`pZgFLCEQ+ZA{֞"Hy־ݷ^9oVY8O)}%j_5R5=9;_>}?bb yWtu*ɶ>4ݫ-*]xaWHAbRkb",@%3RU(/p53sオtUom[u@6ud#_x%7]~Otc vjY5IclW"1xzUiU,LX RYAP~4]=uw~6 ?ɰhû/m;͝~=@l^Vu:Z=q㍣tPKk M/4wi"/ :OSvx|(M+ޙ-ljkr^5^50lӞtRcZFY}S\Kyȋi;ѿI_良'HjQ5(RF\:J!HA,&8}O)[ӳHWAzv̄Ys?M0$;f!UY(+*s51:[Yts',^KUL A}T{p 3UKp,.ZLk/]FSRv`tqo)g-+aRr8F0)0 RLV8D1fM" (wW')Fԏi~Ӑ$P+18{qg|$[lO| \O*e=.Rd#M#YUe[ U%Rs2`0+&[2THpj$%C֠C s B_3HX1.=L4ݜf'C0PVdtzy)cikxϏoEB C B0S}5ky7_fnD=f䉠k6|eh?<[vBߋ** #UYR uڹ0~?'A41{؎/GUGU :)|ޖ\PY*NiڹEmʶўsq~臊4~@DtaOe?H3|>np!=_Io=,ρJt3n"4D$[9NJL9X ' >aB4sqND yw E2 ];mnKѥ44 <‰]!eY5ܚO6+?KG"!IT` ű(bTV؜V,aN0i С5b Yjs7UYS9KօL?>hE0vM]rQui*I#[o>2?g}xxuBKU )wdgFХ *9y4'!$4\d&y)UTӁ8E qetYe.i%s0c3B0! 󞿗:e[(~:JXY8~iļ&n.&ӈyL8Ng瘆R P>rcFPfi6k&'O8&daO;,%[gw:]]eOI(:YOJ{sZFK] @ pwklNb8}pdT dHJǼp%Q :_wp΃,Nu u|Uʹw^w_?{S'kiˮ^iR*TpU&r@?<88}ueK|цAKݛi$Sr^,ˮE/IV.Ѩ^2/ؒӯiiDJ)5Kԏ|+ƴ C:y1TRyU緭Y;g<9/^٫ʪ,"۵UU2ʈC봧q{=tˠY.\lO~v('瀶5u4Rm@]WMkV(F%0=/aF~/R:g|h: WBygo@ڣGN_.zfWAɎ]>'8ՓC)At JV IW#|!CH&'V% a<)/ٳ"rƓRC3UH$cДMDCHRg>sf(Mw9_;ylR`-YuNvZrfL, | [ m&)`Cwadb4G4Ḩ;"; aeE N8JWd>?<~o[fBPkYMwZcn5.=YP)se]T5]-)E*Omk#!sB940P"?om^ߵ(Iz_6^yJ/gS9Ok)g UmVV_rו_^4Gǁ}JP_vULgw;sV=t4`(Fqrc=[Hԓ!]JN&tm,~!;Us9P/QP=x`/XjartSnh=+g)0pE:J3DÄ}%O>zz $AvV )mmԶCl[j<Qӄ~qNJ#s%vי{ɟ:)+꒷?o`xzQ> ^/~2%)}Wο|ͫn񆇰׳1IÚW 0,lkSzlQD~󲝏LϕY̶&NZSeV̋l.2?5{!"lJN4Ȗla9e{Y'oHCgl)FEHH<69yA-Eͷ9e 4Ys r}M'`:5ݼ}2^IW'<'pH8&qxxv6U$Q\Qꁯ/lmO!ᘇC%E7۳k;Elga:KFM4u8GЩq`K:]DJZ)wWz/GF ]ߙgE%}joD;*[Ra-͋%3Ea܏1@զ]qO.A+4]݈+Ez>=+t"Sz^I׵ȏp:GQ~ٮk^EkeH)jf9_el3L'N.E~yR׏u-y2G љ "&Aܵm6Jrr(pl[e1U}jvmX[?pqU)Lv8||GG3mu:_޼6~2'8FVZA()~g-o=rh&ldж~g5{zkN=T˖u=F{+_y_-_*Qq}M^_z/~}>og^>HG'0=y9ϖ,`4p;Pqq|1]4l?I~:p4HHj!a2qѶ\eo>jcU{{wNۆnh+*m_%H#A: PDD+*`BH$9ds{窵V=fU9>ڄ2=?kY5V}}7})c]qZJ"=&6mUZkhRJuVSa'QPsÀRJ ' 4|\]=^VyzZ ϥKY>NRϩ9hKO#(' #*+<{|ͱN,gfhd3̜Slup5Kθ#gYs`֗6w:-Ęi,5q Jr~ea퉎bIR6hZu-3I9Y庝(JB6w2~I-P(e'q @<&u//}N:bִδkZgVq`Hb:F2О\7eQOcgǯ䗿cG]UU9thqnFij]EQܘVk 8vtjZ㬵%y˧M>_7{ߩ՟w)*\]MD=VʇJR.Pn7i"1ı´mIS9Z뜳88{=ߟL֠ռm8Q۞m̌5zѤC6a,1!''c྄N^[WaL3=lL\"!|"\ s>#ֵ(#$/!< +mN^_?߲G޿.oT3{ i47ps[?I_}k_ߍk-?7wio_wmgG~~}:*?Q12xXQBE,۩t,.Z5E"1G͵q*"G\BgyndtrnHkR-g osT SŘv#%䬫+g\z89H,A0KD:7'{= nkϺ1z`(?~77+BtJfu&rΓP k%sDD9ʗΏz r.ka <Ά[YNZH6SCEO\Oa ԗxģ( mqYh(13m5-XXcF6W⣑duΘ.\(dg{gk{ǝ5(ڶf{Z]U͠m͍nr >{;:a;ꦝRa<ӛNsӶ#c1:6M[¶/OqN8"fם؋#6j#cI0"ɹ.v:1p8#)K4xkhTc]BzZ>@ @V 9Ds÷7q&F}v,CPP3!%@_00_Z7:68ns~qM􈯿}>o(r~y/׽5|٧?n_x+n|ܓ9._ӳ7p|᫫f`1K;B@Fkғ;\M2mK~ڙ N_SBO;PMqZ(9Rt+^B{S*^b0*]4‘9l=}hpYŽRJibXM.V;Ie5b *t,ӛiOzBz @SkP[M;ɦ3_PHPg4 RR\Jf$ے k DlOIQ7hv]s{u⢈BF@YMvcg\0E`qFDZX @tnov7=f@jdYףBJY a`.9V7s)<ȶ1uM+tSFOv[Y?'~km bӼn7+5p9g]4鄁lj4˾'F{#Mȹ*J΢(+=~|{8UF7pÅ5zC]G77Jĩ(QOE]t&51XksnjGͬGs`Iɼq8/o&8cpG2`BW'rDs 8guimmdĎqK0 ^(<=_x+%c}ßHL+|cB#&eq*8hʹBҟ-{+_v[>u9.:M7UBRQ< w>Çwe}׽eYe?3/xK~t_җ?}?:6VDyZkIOkq;$ '.,(E5VWcڸږnx1||pRYJWγY@nUR]g SNpT1N&p8Pp1M+=TcUtu]OBD> ZtI%P7ý=p!*5Uό7>qH NSPu/>+%s]-*'@$*݌H a!HBs!󉹰fʒW\/ d1a @ؽ=;suk;%HS$ #9-k4 cl )HŽPU6.'Mhu j$|*xQPNÌhvFiD$@-i;w÷}.Uܕʥܽkljslr/WWNz,E ]N0 Դ$5tW \Xv~_LU>HJ 8sZczsF;+IUUxW^uܹ3c{nQm[-.,)dq,Ng?#B*J$;QXC֑s $%19lϬstq qN DDD1fspYIV&2 IDAT,9c55>c\ /g[8++_~~3F%QxVC+dUf{k[ Ԍ#;~/?$TFs*x/Aϝ;w#Ξ=777/.{_$y^9~7zgރzǯ}x{=aG dk1qрVq) ] RZ qtU0VTM;A:{TD~õ,wlUNO)'*`l:ֻ#\S:jRdQGf avCb ^5]tnfЍפSeT%<˭X7Zw"b:zʣ4 IJIi4 FKFpg9“ 'IHE)5iu3gna9b>3G7881{+C" c#0`iٖ[YsBKhۖcD5 O*jچ`ƱiIF.RU-4#۶9l-kF(Jm-Rz>Ln;WOJ(s&_X)3BU|),qi&TΉuU0 {Ɓ'vrΪU*gm4(tlmWw8um?wgWloikOJUeO'QAzeۦɲ(4$ a>0\v&4 Jm"脞I!쐳Α#Έsb5Xk`10AI逺n@p9 Rs/a{—ܻ eo%_{d-4`lлjeUonZ"s\00 +[>u9nak Isn^㻞}=uW\VZA7MsW_}[7^\(x-lG]_ScZg-(,FXVumZ!ssNm'|Z.x,dZmťSw[J?㿸?뮹fSfEQMSOP/{@T('n”S[k55 P֡/7nc<se9I9Yjk&< AQ(GīA<z=0y7Dh_'j)0cZc3fm묓\ꦗt{Gzw} e8#Y$oyp{=_<ܷM)moy?Y3??9~s?OT;+O{ɇG#H@2?beug0eʬ*llgSjO1ЉkеȦc#;HhKH;PJiֳ:`fp>FynGJrZCWzrn&t-t3R^i T>頣elwML给gU/U *Χ~Thnxó[f?ֻܚ [?c9x^n \Y۰:F )c8pKs1.М]5m33c8,-3j` |k_>q5jʁpUWpnmؚAOr+4v\ ӍN@M۴ʹfm[ai݉G_X SݽM>zmq*[NKʓ3u{ TUhȥa}~J !z{4Tt:hSyrdOݲ5^/?S TGzmo};B~S|+СCMUJ} 9cq8N"*]"0Ԥ]52E4@OZUj\oU wTogulתe&B :` )2UE}0Rfid喞#Uٟ SAWE9h5tn8d==)u`5X5@(sG6:˪l'v=;W 5~&2%gD8ef,Qu9cpĈ2 UIϹ|lgz,k`F{g`tmږvB ;}Uךf8ta՘,3wݳ{6Ϝ߭FZ k,4DW\uP86eKuuΨ rbm lg&DWoxٛe4*;~7>vpc;?3v-*󡋀zoktz>^&4'wP7")pNEy…m{n2˲s.$q(0#TF|s'y7_O}iUllw4iM^nEah1lskz$93K|Q[Y2s%kKjk0"O:g1^/s_@0k;F{Wڇ^]OyO?I~y1!'n&A'o/Q.8хf7K6oy;\J"q)9c;O2`ǖs~xcy5sd|}~k|r"7\Zq9)W%_X2BۑRF'n*ioBz6@ڍ٥a=U}0blT)(`38j϶nLh98@gAEf aĺI ZgucW6 E }Z\ץ t.EbnАs=ꂶ$EU,3"4pcxrg쓝;wʍ*pk\4q8gsO'Q7L%ӽ| vxK!kmɴ$8>NƖ4ٽi?>:6vZ$`w]xޕ8v`QE^QⰓ(ҨXU^5BLLJAp(J"^(5}o> iS|ϫke̬ &\]^eDeR^t0AUUi$mz`(J842e1PhOp>'ɭw >}Y[(Rlloe?t[;VV9ۚv9| W/!FMͬb4p5%䨭]9qYg!%}2cN@ִZάx o6{};[8q`9gR0qd'8ȏpC syr'g*Λ_c!XG?x+G8obo`׋箿53Yj{B~$sٳNmO++䜱kӶM]"Ÿȴ`1pHJP*P~đȁ*s}kg=]5ٹl=gdWþc3`c<_ ړ:}%w6Nx to;:YKiwC7f8GW</}n5vÏ]?JsG6/j @6eajţC8pf_tv"]*ݯ:^~ S?A ЍRQX()ktrtP#X9dx5Wi7U(UjM}E )| H"ic+lg]Ot?Bהy6nҐ*YTL)/>Võf6=Zfc.ϩjDZ#+$GD|*Hx_cRx1Ƙ7\,MF[斦X;nʻ_6wdooph̉δO3nwz</}|rI;9eM_7S*:e=M4 p4d 9uvyD_׆ iQqdJᅵVSS#ФTvQk d2L-.`ct^dTh)*5|%s IJ9;l*=i#KzJPQzsP*M.8@~=YcKcL0mшcm@lX'AUS]S1c[^&( QnXYi1kj2 $N C&-D1;x};uT^UV+j/ JM6sp}. BTDemmک5@i .;mz6٧~ϏSddzO ^Y=y"Z]g?Pwfkx?^YM /jfm:HΤaq,Nɥ7|`pOz/EiFz~kA dAjg9[?'n;;h:mlQc= *TsrNJ).BBx>ZRơcu6͑?|'|ZG<׽pȬ}-Ս{tb]5g;ۇց¤W"'pq@C g>Vp<'{gO}η_H}r@Ĝh=4Xkp"|_oK]?ыrrTX]ӅN(eWVO Ht|CYcӓ٤֓SJuTҹ^)Ql<W)5,Wiw TLtҹ0V+M~hMSmй֍n5 ++Qb@/T,]HL n z3 N7m涴aP t::K;  כt?;8P8y2vZ7bZ3zT|>_ds9G#^U,ncЅqe>vpKg,/lk\Up.8<$qs0P WiO^}UӧX?K67g]:UVeUl3fƑ!D^ aRz鞶4o.V;ftw_xn?zӁ/mIײ-uN,bz=?% |,}ޖ u9ƙ UB)=)1m6 8B۴w~ 2 m-aiXXWLhicc묐 `i0ng}_ỵڞIS)R8( \z\ضu~on.b.dQ57>/W/z<ٴ16Ա~΍[Ãa6p< qm&[fqݟ^k] "_*086o#!ӝN~o?y :N2)9wt>ߙIk;Am۬Y=pj>k퇾Gܿ.9e|#T6Bt`yqA6X z::yv{& IDATMyd &  I),J;\3@R*MP]lsMB)@-WAϟU=%=ͲARY@OlCe3@oꪹd; R6S i(%TW]}K6M8HkYymܔSvy9;Rk{stQ$n>ab'NI+X;7'^:;yoϷdE1& Bg׍yn4b4XqY&tȑT` p *t5 z)P0=thSuP^6Xa:0ۆJ:遃@@u+ Gt>SAWjN2\><><\8u}iiv890l-L˚UY;QґgUhUH$8D1ƥGE!ے Fp18q)ǜ2h?ԟBu +s!%' iwn#sD-9vrLjÐ!6Zմea7=Ȝ_O7WW;8?ų53UڷǮqA;Nn=8=9fH"HP0y՟,洮 ̫fu]W1bZ]]W3Īdf=tw=n{gEt~u֩{sgUmbA '[6n4hET_QRQɌz{<+T_%K⩙do]c3f7吜c@ݶSs=;\UzB !@L:z/ pjr1<$IuQGh`'8OW:XWG]uG2UPY0Z-/'^x11ǭ/d|!+|p]2  |l'A'ݕ=S??ԣخf8J3&IMNM%JSWb}„-FU,Agt!dLJ{dm4Rךhd'I& N>qW`R!!>iUrRR&Q&D` Y)s{HIAH0ȹA_p WDZ5hrU[vaUSBAITΗ D֨5z"˜EdR.sjur yUV :å=}:'>MI~+V>f,M_LM!ւۿErwGF5,~TM{~cS{O#Pc]3 cE/kgM:u{Z0n?Rhַti_ܾqevO倈LL,EZf ElJ- B@=(OHfZ1̑S Yqkmڟ3&(Mfٰdfҥid@cvvŁ1٥k&0Υ{¤1v;o&s– MKxX۶o1Ң5jټVH[fe3H-|#a$ ̒!dP|!PZz-$LޱgUJҒuKk' ').Kl 7dKl,Jϕ2 dk/~>*"U 6wY>Zqm|cERww {C粝 ]şyuᐱE=h,ZN+Kv%nU }PрH!PUZgLq\'`t1'eWal{R-k *:ﲢPA@$. eBHƃ>c8G͊ R*)w-<} <-Q=?; ʕE99$ ̋1W£2ƧHH_B l BPDr Uck(-(r|db\gju,WBx^9VU™Fp洍bepfC2e"QcmO{ʓZq J1ڏ~orkQSSmxїp ~?TR&4!V+im3Xk&"*G@޷60I KQSlf-2ls- 406%iA6ꨕQgX3W]tZR׊rˇ%DacBJ* @jq\cσ /X^RU%f$M.v{R+d!E6䤔zWx$33HJ!TJ A} A%sx0Do-: ӡVE!=@-H2Sɨ&ZB u˗]-j6-VQL0gO "r W:A$ 1}Yy._ ld)߃Y6*Ql+7˥JOW APIv;7S}?_O{v{Q޺^/WOcޓNM7s9'k?OonI$SdjZgIkÖC)MC>ð@Ϣit6Fj衪4Yߵ5ԣdrŢݝ0um'H{ ȁ06u3ciN&u2 6`hc3Ef[pjv81"֧9F{6cÆ!JL݆!fn41[vls%t2Aؒlji{'`"b Xz'f1{x&Eؓ !$<Pr򲒐R# Eh5Ւ˦\6_~ݺEAYB) "I2P䫊y =+"ዲbǵFhF^o8aN rʂV]6 d9A8;7q)'Oܶi]iLWKڵz5J!\sd|Boi%ɪ$\ "?"B82&RJJ!jZRIUїR[Eӛ7/ =aP+gQ3^f?|v]S/|^3Nȣ/kXl=QkLZ?y?xGs_3;;l>ٯ|KGQ&#| >u|K^;9>w=7\~UXXXشq{{$:?wa{ΓOzCwMy{{o~;˃O>'.6!cFGwӞ/_K/}n3N=abM+ҼH{m &ؠi(,f!4LH E>ZJl34Zn]D̠/Jpvf`Ҵ!PhzvڀAYY挨s@/1v lm%8%zD&mi{Nc VJ$IҾ7nF4^v w g/tغ[waKr^ /  fH Q?:bEB hMa(RJѢ "e 1ȱK۴- H5<6]׊{}!( <p{^]UVy;͙Y hΐ%|QZɉQ{۴;22S#)_=~==}5?=wڽmIǴ][^?XՙTomsuJ;\ BD G! fKJJ_jQ-Rm8d ׍ݶmoт)~?`Iz 'i'̭Kz>q>Ek5*?J^RJ+)PR޾S 'm|ˋO~`WZ;ݸ> sU3Qp1bYӓ+Ez$7,`^ף$II!G]XwRȝ;?K+R2U)Qse}oxA5۞=@{&0Gɱ ~*/_}sU?o3Sq:neo(_b}xSw~C}VJ3/|}/;_ιg?cIr?'oӃο^ҿ{z;OWl|ED׼Mo9GI:m8e̚eYUWjnٹ;V< RW9/kإGq\fa Wei'gԼJȻ jq]'?U7ka|jfmu0 !h#TJP$N~Ȇg QT<~ܚN4"DXBxsߔ(.}"= (.&79K]BB֞!*W,&lԅ$4$BnЍoJdO߸sOzwqhVfBϪ]Ɖ^n#%bf<@|r;þΥCN:gjqλS{Q̪{v }Ϋ~u: vk7?:M?G޸_۴N;ܵ믙;VZ5W^vjnN^nUb՛nĈ[{Ԥ~jZ"(,'˗ό&ןQfV/jnVL眛^nb|?7^71>>Nv;=谲({71 ɏ.⟼e>Mm$Fy-KkͬrQ3qCdLz&4l,1:c1*  PH&bkٝޘhV32XC\ZAͶ&2#gm@2ѴEvaˮM[KyEIeIB^Fya`"H8Td̈́ Hj61h6բF")yom=u16UW"/ZcyQ|Qxka-lNyNEO};iݍi/vY^J%PWCfZ= nvlf'V4y@Kֻv,H7'JP -3QP\mC;jr4ʍs0 iBmk^1GhƑ\ MWdUYrk\~,4Zz-v:ڏ:Wv*Fee{a1zI+zo2'= /}߬YlI hI)PJJҽneG ̮ꤽuޮyRB(|O{ġ+#;NMM:U Htc3}I9ʢNhIF`t-Jz]$ mH)(1;uHv>jeeu(ŕ+;af7ힿW\BV G3nu/n_>= O19kK^{G3; `ff{fc.'K/ozȃO>lƻN4;7`rrGU+W񇝻`ɉ Z{ "xr|I)9c޵{|{t藿~a0\\Z]Mӛڷ>Guo~1dK%%IL&Ƙ9!틴7oj3*Ӣؘ}TnǐHB <0iP ݵe;#`LҬ eN{E]ECu#lHM8LS74I6D02Ah4;?͸NI[muSK^i;r'Ӧ l3DF7͸Y6I@ IDAT@Y<'Z7ؘ9a0 -z}_x H5TQhP87( VLݞ_XY;v^M-=.:xCfNZbr޳[{0W,EAy bn}S0H=lMŃaʼ$< \2V0,/|anmIjWhM'I򱬧ԄV7\mh4"A>+k{UQ2WY8V%4*a ͆5DƘ8=3˖}N:L+t9I#QeU> ki ʡxY/;szDۭ\`H!Z Rn?\z3qy1%>]{stCbEY(.QVYj=>] baQ EF2G1W{6FIscb/A(Èt`g4]~1Gз߸m( !5I̮rhZ hVδc[5*=W/=ҷd_ܾ݇zK]Gمt1SzO|+_z_}gԇ?ܹjC"YrŶ۶M >Ͼ?eo?g~wo0 [im(o%L`)rJ쥀-y3؁iۘAƠQZ[XL=I{sZo+NeЄ0inTѨfL@pmjti% u$YkV8gqӈ A0(lLAm/&r3!A{-hz"ذA\AY֪ n8,Ì}ږjǰdE`;0*ǝ^ 5"r*i\TqE\2nyh%SM);΅`! d܈| N 6AՈy0Z8E1Q떃&/Rr0Tʗ%BJ5@D<#AO@P>/͹ʕeYŎ۽Dz( j5ŵ8‡^*E!PRH%R>\6۳aԂ TR '{w|W~T  T| { ds٤IuɎYLOV ={We˒ rH(% &VBJU& R4Pӷ|x<(wo'KhDΕy%$-Zfk:AOp\|u(˭[>O~{k^}/|[9z;ΑR+?v'GlGYꢯ~k׬~̣go#=O|cG?o;8wm{MNDfmmk׿qe6O{kG>>h}{wz淾sM<ůzK<}mOF"3Dl(]iCmK 4_0?Lv#teA?@Ft8 $9P4Mh&L6Z l1ys Q@;-)eT4#˙--rkIn޴=۶ZLH\e8;3d @ va"l  f"8F@fD{';}TD á =RB 5P8Zf{ZT>|Ɓngv=[\b7FGSA.-(^)pQVE-B(+dzBǠjΣjEA(q<>ވ8/EwWJSCeq-qUJ ٕ+ikE9Y,Pͱ0i}{_8Y7j!N:xj2jе^Қ(;Eq]ቈ RJR q<1>YZ$F `||,ڲ*(%f 0B(1>$.`N[~](2S:2 κiҿ/|'w;ҵ0I)sEAUx3R$';>g&B5@{C]Nx=Q[~~#ot-E6T&"Qdu8n˿TXc}KѽQ&gA0>>C>t'Gyɋ_hԧ?&<_zE/|+^~ݹN+}#̲eo|k_qzv;v_{=ND{ͫݱ.Nj5o|cԧ?SؑG6zG?7ӟ|fFêr~Ӈuڵk_^g?󜷿몫!?mPIR al?5i@޽ZqmK[oi#:0@ǘ&Mc[-Px}̸ @(,s5mm#uPѴ51 -v!M/O >ؙBEd{myx0laQ~.aψzR0.'|V*Ρ<`Rhh@C)RRR YUyD||*\(Y_2w@`ol[l6(2Rk=CZXsbz^\9CwmO>3yOȭD*s_PH);{V3F="Eu6>yvoEtyYpe*jr8˥DN]cX懵 v#_}ѫ)'>DV1[( }[1aVWNH15=wU?MkxTFDV+)* MEA;4%)4Aj;~Ҭz Miz6_zK z /zO>'WY}<&n$s+ae! sYKR+Brd_y=kr=&X0<\LzOiOS};[ ~1oPq:{\3?`W5?SiEP($lVaG`1W9rxj&$&C162MiNTֲ[2iLcȍ!L$((2ZX-,So~Phnp{{[tZֳPÖ!ax  |%aWUUpU, Z )0ZW RȐJ2]UNCP wWeŊH&T!܆a~xy09,yLWOj|PeY%4՛B*(gVLj+2k2#@Z EUƵy*2лϯ>'Lh ^n}Xm5E#b9(8{C~I4s7G4Ed{BQ9mc @#qh r Q#A/, )8mP9E Lؼ i0K)I35Q! k@}3*m72J h6LTZf]DF#bt#dņ}5#{cH=Ƕ|gjZw"$B*Q0+Ί!+e;%DY)睒 B XJZQ䜝^kEUR #=`:W6UZn[ 5ܫyqvZHrВ(*fUQ-tzDGXJkU+nnٽ8h輻[[ ʲboWn+٬W=Q{Aƛk,}wt7JնT>z;Wvizosk!D2 u# !thw=I"ZV}J) ۤ&9BއpdWn ?~: bc￑۬JK EU ҺzhPlaIbZ&W{_R9jISc#%TYIABɀU8?c_tkoCu|m}-EpӆԴ}pC|C}?w}=@8%S+lֳ^w 30"N&*܂Qe k"p7++aaVdEBYV -ƏУs@H29rX4AXkB1nkM0:B!2v$5@͑ ;:! Ɗ6aW!2wmaF3ahmA2Ni%ҳ7)y{b\`(_UB8<\|ΙcUXyB(rW` R`UrqNȰN!˚h5PJْ+Z(`0Dݔϙ>*!kؘZ*fv*ǛϙwxMBD˒Y _" V+˪9+س"*"b⊹dUUЕ+]3 [{ W}HW7i&ҡR,, [@B .eYE9x Ճ(Y=p?no\;?|*raVh~i۵uCM;gY {.8o84Su"h&&#"w F9D$ u$"RʱCdt6lo& 8+]zIU;_UBTZAi) *_/֛zP@ e+!vP,yYͦ7jlX~ t󿢓5Q0@@%-WAg /{ǽ7^[W]W9Iw߾?-y=\vX+2#@1"8`{l ah&}3 ,r[FL`DC 3DC !`!mO&g^Cd-!4ZtA\tg iXvڣ-j6l0Ad&.a:{mˁN\nQ$ٻ Us3.%as }aZa+^Zo)O:Vi7 I)k%w@ܑLNUHkfJ9J( 0*YUŊQ2}%g:}n"C_鏏:_E{l/‵lleܴRJN9D5;r&;<{HǭY7'Wx۷˞ɦ bjERv:Zve{W&~MAxv;a_qvúOkkp\*ADޓ P9:B ;"b :Q>Dd2̋.xޛF˖Uej^k7ofC&yMP)ŢDJ}J},*:f=:ˆ >'eفR{<:THH{o6i"vDfZs, 3A˙8'FqXwo}kι xk/wy pε=q[K캪=cvae,T6oYwyBd b6hR/ ɣok-;$ p4<6>sI?3oG7PtO3_;~ٓ>sQZ7*baZ"%ߡU X^F>03lOFiQ+M+AFK\dF1"|ba]b;: Z^U:*5"F ŁRuH jC40l7a1S⊙ZkM5ڦRyښ!df7^YH>_` @dm~G3?I{B3쪹]ϜBpEr`BٖxFvg'Cθuus%`@ݿzMٌtUYJly*ʲipܘʹOy+պ%)!u LpWjn?XwßCrh_yY8Dgגk yn[B4BT:G,jܰ)r CJ1i/_\gkSj`1WaYkͥ KS04Q)ZW tcEaTh/c[4ܴ|RoASt6Ku7ɎAKBmli3iP/^ZX uA2j>. 5{czuBan{߽3"y<'\P9' 8s o%8B#ּ7^ 7WBX,ʮm/F=@6uUm<ӽK+i2q.T {. _LK#sn8ֱ T7cO~Z;4]{˷+`\g/io-5mwgmH VYb6{K]o<ネΟ^4;xː $C""ryg3G=<;㗟;qS 8xSY LJ.8r#[ Aq`; #0 ծee9\}_|YoDL}Vb%{9(G Q)h_xL'Q ʴ-9 㳸 xn_>s ijcJ{:4[)2*Fҽ0 LRRӳZW|{%Cln G>/bM'N^CGhYdCI H6/f^~ Ι |Go(uZ$D x`@iv<=-#" :T-B2/"\TՕќn_y}^j?=s';vyÐKg@qNp?sx?~{@,ɛMWb0 ׌zhX{‚c?xi1 ,KjEkk:/ŗLN5cYo3-=TƙC4TEе^cZy!5(M|@ 1gad,(M M7 kB$K|/ ˲Tj6@amƘN>Yχ+|}] ETD*!ίl6DZ5 W4`1D[ZI\kɷh`J"{ #A5/ѽѕ˻iI,84Uu^w +Y,^ eH)^{=5/?};{+3 i[WIȍW3|0y+ ~Nbwֳ^؞?7_ԋwsyWm%^:V֥|nZ0 ˆ />/^`OӋ{ ;>`uYr#w~?YWeߖ$]ֿ>;o_#/|럱8;9&89` D ΀jdfAM Nfo'~jl)YVXbs o^ѷσSGxhw_436<44F.|M 4BC 4LmՠTFK\Xv~0P6ePy,бЁ6f ,筛hh}@)c תtY8uf廗dˬli9(_&hl"=ҁ7̣5473N vOloP7R?4KR6u1$*\fmQt1 2~({OsP Gjm#=y';644ڎy3Jq$Vxے(f(kKL:0' ~pIQ n(o<ay4hr.u?)t6K4I)yU,Tp?EBi㯢^5'ӍSV.yȴ6ZHѦYmmd6re; ~Q\0 *E("eۆȆ0C/_;y\q׋s}*ՒX:_CgIvȷﲵNjV>K~;^!6֞?N\{J !` GrPa*)q     qr u'7Oo]ܵ}>ױpoS_?KyH|>5owp4hFsR::TP) ,xV!4:nBC=4bڅFڅ(hbJ{?W:|ԗ~"Sv5p;hqDy[MkU͉MZa&hu;kiڶՕޢEU1A`ӑj]i&؍:Wk_|l}K}37o|'N~jy큄eitؗYo$KE >$Ư؃o0wׯn$0~B 7-o~ϏOoz|~뭈E>?|y}!{Crh׸idVF,m9V^k 0MgZ ZCZ$k0aϠH}4mcv^7r hT=>rC9J7G$"-$DEjc`wLNl L2Ӫ3 Au OLCZ1T"N :|#T:Y} d s.&ڳN3 k4HLSf @hTQh8ޟ=|111-3{Zc3 nnf-J¶RP!OS6:t^)EYe9$ BPmR(tp>VDP=ķO&()O}?)!e!8/tAD-`௶,eWC^tΏ]ۼJբ#[`Ǿ_BI 5/)>>rC-9ZtSZkc ;O7tC榭xws413zy;>  t7CS4֊4d&:b ^zҀLSB!kuoT/4̢VGY*fõ 5&L㴊VMQ&)M7af@Cz9n&$,7MEŌ>= Pn*3-LӲsX[z+BTjYI^Q $@98KnSoп'sι gYoi[6 R3O$Ԧ.* mOva1^pawwj}UIk-8u?M]EZ(r=ZY]3]?_8@d!Y][V0ucc$.2H4[\ ͋z/Rܪ0*L-۟~:2!bVg gS?*x:]mE'8F_ :OQGۓ:H>Hm}诼O47C,VEZJAAFk0h=0h(`&DAeaJ1RC0YN4E/f&5*Pm@k[e4dfdPai| P`NBc=cͣ;Fۙ}::xw!9^ j5J 2ۺIƻ9&5Kn5/~<nEۖ|YQ-Q). οϋwK?@kmumk51 (58k4Mi g,/>}p)]w1NRH᭵ޠpQ!&Vw]?ON*,I.⤷EŤ^\l9'I!xĩ y)f|єU`8Ђ.{ٻz*,CPifM1K^8)ʊ X@ m'd.]:p65)!=2}mK|35x>ڂYo!# BHM=D)H) U*$u1ƘƘ0Һ4XU(kڶmb<$Mό/q2ȆMv|y|J6aG;^m>ݟqs+l@8R5\ItTy7ZYGMSiL녕2s΄u֒9牸kYJ49dUO8- =C9| 6 0 (v5 ,n?Yts.| ^N{`aY-9ctr6W.E tȑ4Bs%Gl%2x<"@L[ʴdZka*[<4"øž8F\irC Sgh!RJCe`сP0A;X3EZ14 MOG#P1j ӘBѢJBKg4O2U3?V@3HgjEP%7!ߤSͬ/PQ~iŴi@EvdC~Bs753.*NL !bҊ%1xofpBۚ?`O<ܭn}M~%^~Ι5~M7꯹`@< <ֶMYi8Bݽݽ75eu"wGuΙ^vw-\Gxmyey׻?v}٠EiEQ !`(lq$I~(Oi~ٳ:6`SF #T%<8yU9<2ZYB@<(U'$4Yv!D|KA??~x^qR/7/|c/}Hi g9_EI,a<܊$åuΑ{.e]19'Wi;]!w}[U, 7@9 g @Lo<"8u*`u$FbAyHhO Zk2Dh =">rCGFL fiu؀iBf I4ziÐY20fW`ceRPL#F7 zu֋L`f6CmM4Ӄ:K5BP1V):d_o`8FjAOr>3VZ)͐7͉,Ͳr1,1:ԃHC[Wq)LJBk.%sK5-S^{ҵ 4"cOcO-U}?|ыwJ'} 93Έ9fm9OҰmsϭmnN =uq<͎;~wcSt>vǏ]W !Vĩi82q,e4κlZg[8Ȳ$MdҼ\9W+]E,WuKfSJ)z #LժP5u!nW72֓\k]N},M?ae;ys$ K:s"èay|}{ZOǟhŸ %#p."0FX*.E ",8K`|)qN3{[w'۲u׭K$9w?|gƭfb;TȃIӏ Q<5Wl4Ӕnwi% ٣o n;nl8bT|._fĂkH,Ș$7UCdENʞG0dqH"!@T'΋pѼ8s=;M.%m{Yy3#[V~~=oO9_xz1]8w7=ܹsgO=˪ֺfua*y᫪J{P .:A.H.#`Q )X'4u>4mo~l0觃 /N1\%zHݛ\uNtdpد>՗.V[okqFON{V\2nm(fZpuN|ӹ|fIBtK01aڵo@cDƔ a 2D! @k\([vUִXY@lӑKу-NƥL3隬7`(jyS[hɗ-?hIT+E|oU37ߚE:0;77P̍"-.#PZAtdfBhj @sz1hZ\q=88 4ٽ=\%yϻ ewz\)vox}Oeu,GOxJ}}ݏQ9WGu9ψЃs"jLS&"!d:t#GU '{%ioo1ui\׶8\mlll݋ Õ՛ndYԭ((8IΞ9Sk{fosͼ2JcV0>ַ"צ\L*>b:tzVyf?=|p=}v *Q ς4y^$ [aAH_m{rsE7#> s!/n0ڡB.N@4`uӊ}^ z" wtp cEgOɜFy"c{")R,0qBvkc$X 0 Y!G9k2K"b( S{pILZ⒙owAFEd ꠣ8sd8:̌<:9 "/ ꪮ]]"VΏܻn(TFrGz[z? 9fXR-SQ̀Da+mI%h({rp^f+;U $JPlP`k(J+g%1ّddm|#e RAbSrI*p+$ xJPTJ纠P.\jF>y`1?`a aHh_8|_W_'AoKuV&ǩ:lZ,oeV,|{-Α&bZ){w.ܼ^S(i_^c`18JkitRRtQ(]C'޻cϱǎ mll{^ŧ={ (|OUj8v0s!n^OWk&j+,VW‰*P,"s & 8ʵCz\(>IBGSJr"YWSIrQvϔne58@)vuUM @!9)!ec2= @ե[X^>eȱ[sȕ"+JTNi}e~%ˇiUddqh0M #Gx]d"d)M2&2bJ8&%zX#I32j߉KSE JCv$}xحDb+;q9ZoC0=L |~Ʊk|kw2מn\xZooFveSW:kL>rh4Bp<)7_ B`5=^v[ݠ•p$?2#)gȠ߿B}G_4%3h}^6QFԟ$i,3ݠC>C0U*R󵌕 m"B 1j k[I$$r4\KAj~PIʓd,U4SLY6g- [ڠ+2\!@Ȥ%[M"~J5m ";|i-8[L|Q3PgϧZazS?c0 #O?Ïx]64^s.uŴ4.LR}? !LkŁn: x5dumFEQҊֵ&o&4s5Y>v"Cw{uӵy'ƟGgy1BQhFq˓3>&YNg0ܺ0Lg{d^rz|+-Uo Yche1V  |z N$(8"9cXZ̥Ʋxe+s0(ppy@\t}SST'隆cc)c#X0:@,͹ftJ]+c'\@U:\qkUGP;i$pXTβ2SlO04%IV 5qi2Rbw:j Ibίs>[F\I R޺X>DKۖm 9vow8 G~tcřϞxΡ^ sw%r缃0}yN}[;A6C_ȲG.ƙ ;Pq貺T:I5"qky1-.]ڝNJEcH 4~{ [G=' \3q{Mr Q&/604Βcyi{Y# ?MBE|; e`èM]h'%mm#)]70n4.`RE;ۙo}w,~r#ٚ"FՋ6)BRhu`|wshYŜ=xawrǃY2Pӽ>z+T~uBnxb#9;~܀fD|7,0_b-t''=%wnǤ]=جOC  >U|O <ȯ]Pc,܅6n&Ǚ2XFk5m)n9Luus,xk^E= r>]>_(@P;RJjҺVR`ӗ(@7϶HeI}B- -4KlqW4圚ҥQ yV?ELj B /})`M=ҕLBH?j@ 2b4I,Z*RtI!FN` ǯ;P%ilP0cw×ocOU'^|#EP<";x,v? z+Vzr:7y'uyG~|r+8Ym/>pn1GMlnmEn:i'Iu]םN EI'ZMLsGAJ2 DS T;J6Ŋ͝Z=cs!ˆ{͜VKQ1ݝN;qJSPO2/k96EId5k/^b~]mMy?^kyKGԶ{J6֝3TWM5G:0h5۳%o/֚qxky} _)w[~q=R *ɌTܠaSͬhDiKh xA˽e3zOvv`JIOƘ'cjRTAuw*]>ϪMbk%&{hg5q0d&{yn<4Vo}w,=SV97wt\L;~lPJd C)u)5 X62RfRPƑ eI.- G 樜r(NN($~2 g3PA`1g'j. l2T]ޑN %5fc0)+I`i؂mm  ZMs0Tȧ(>aw ?>q Gn wS 9<9rH{Ѻg[YuFN;Oy'iӹ؏x= ={ڶFh% # (nՍ .o8^s.L'Ӟ4[WbvLt[ނm5+qI8lӜ=w݊^8mLSWUu]Ufm 1JkiB;q3U1mc-cu' u=1pɓ-;Q8G݇|uiVp2Z?ɇMNIϗ Ih 6oo$&OW;#~iۛ3&n?z'1 u]Cc n3)>z5cY}󨓸v Bp Vy jf~2,>w-TZg[厾~Gzww!g:vxnj6ԯ8?.#m9xpB;}íNKrTOGV+ hmZ0BDZ"'X}UZx6p jL4BxDܛ\?)|dA/\Z>Gd4tՍya>|X1BpC.a0ߖr٤3N2}ߓ4 f.T$ /0u^>=*f`Ķ[iKIQ>~6"N\D˨{fsmA`=>w}K_sr՟?|߯\|çO~{Ƨ'UPF۟$ȾRev޸`zCvS]zAݛxvL pp 08cy٣Xya{bՄ'"*E{nʊօ!h锪x l]膻8n#, ǜeq֍fZ#pxU֟5)Dȫ g3 e^>_(x.M# j'})`}@UȤR+bfjg; y9;'cOYi$$mQU9TUatv7ҹ.%5f =LBU+UM%DB(Ϥ>sݵS'$L4H_0#,oe @F9PMmڃPT_gvP4z7h^j8deɊ))͉e*z̟_9'o|6MH`!Y|$^/PM'?Ც5ǁU総{ \k*k e C!L]iw`6~㬱*Cg {e1XÅg//4..7}Ƕ6i*|_p,ZYEY\kq8ǜ~˶pL56Ȍ[!Jݪ6jdVl'.I/fג8/a(JTQil4gXdWqfԭrp' =Abgz DG C8`1-x.P` 13Þqu{Ǜ]&V}.-=uI`- 'vZ"YUD:۴vv0(زt2g#Yc*ѽ*`gC]ۖn}PqkUGY H u4eJT@(O56.Ho gTKTMKRa  0* B"ٖiM9{uXQO]$$2*srjTmQ5Vv ,rIl7kXz`IY]-0ɪQviWUSTB?J"9Kf{;4ڍ2ja iŪ7@?QVw _ۯ< 67Xݚ5y]`W@o@< #_~}С0퉓=S'h:8a4s,y֘.G7d6e18\xytjcޅ1ߟc-Zo1&EQ4T\|óu1VZ /ħ*cN/89΍]ZˁݕZ&@wۿ7ޭ[SQ}@Ss{G{OK0r3 |@erę .V+Dp fl~!8`M IPLJR&ϝ ch!I;l2i6& Gq挵aHX rNz~vҗ\g]j{ П曆dcu|\?)T:zvƾLl< A;An @-L)+t֑>0RJI)S%/jCǨr $K>K{!.\Ru&4tI*X`QVb dgPLՑZOTTIBPUU`U^iH[i]Mޭc΂5B5q ?otز'JOs}|94 /+:{[zM^myldϞ>*r.2k90O>8s{6`|@hf@ \mQs2?޻BY}QdIk@ 0`PDmo ̞8'B]PUk.JZ 'g !$pܴ@U;w`%X 1!#0+╰ =sU֟t%V:/"~ҕ5r-ȆxlTHdlՔe@1N"IrWT5M[s(xV2(QUJP!c.)Ɗҍ_eH7I\\yFb@ҎдTàpvATlD9< U ,n-ȊVA^J"|dJiʥ6jJiґ-ģk465 cp$>>?p7sN__1F Laa']{nQ H-M'OLO_Eh R4Z|s6!gN?}0LjS*Ve{|RUp}35Κ0#%_ g.ElEɤ.Kxi _[=nL3-Uhr VJ||:Ry,w0Ǹeea ʋPxܜȥ{Q /:<}Ǻх4 wr;}3Yw?sS]{|nd  "4zudo[Y98oX=\ b3 Sf~0OQNӲ[!C' "g A,8'Ѣ(dPW.iΜU5<D^ WmAȴWTNLΨJ=|CU~)r%ᐄ}_ZBARJUԨRL@"+(甪@R%dJ .aZ*GOB#%?|ɘ bYGT RJΊP; a۔Rqᰪԟ2dR)jQvh7HyMq @mnI@RVC)pd)174`YIָL8p˷_-Dc5:'N=ȃT8ʇqWm$/ p{*OpY,oq bf4ZEQUZb:㄀iPsBFA윚a ?j; /0֔u-|qk[gT2=!pggFqg}Z@[טT6/gΫi4qR)XGcix| |,wru7vۂ_J\u 6`xu~qx${? 6鸕[߹=E=q|?h >c@LM8o8k>#!2 ۀI@|" [;kiv8 Y@Fx*X`T[9g[bpqV C{ts"c2%5l~U5eyp) $RW(⫀jpn l{Ux+\[`VEcOZ1(5d(qO''96$cc. 缕..s9c !#? {~;O"0N4TI<ئʂ7ӵn1Yj/})B;>e8|铓פS/ /4Zc+{n iG&1_W!vs{"p`Hr `}{ Tka D FE.S@}NMUx*X Xrdj"FYTlx#qJ8EхcW?.{Z1K,9~e,\|L*)e 6\>_( :=Uʕ*Mt%J/D^(r 9v,WR#); ۲-eJ8!p2:!{M%AjT*dG@[Ud1Υ2L%0ȇ N],$L "Qlښ#+7 ̎DD @Ld%Hude(k,*&~:c@[KyE^f?ŏ[yU29CsְjdHw`Vkf!' Mܔ['hGa3ƌI 9Q=rQ=G>jmյI/yMG;c1rsal1fj-|z+qf'x8g`D1.8u㌋Z~M&p@D vyDoZ 7|o8[x?Wy\L¯U#gw\:x|NŌ{Gw&ÞMWs5b?dw6_|(ހbur~Qmnփϻu~tu iGnXa3>- #O?q1ޟro,p'tBx>x+}\ngA>Mׅl5sC_s3bzŸ ̾3o1G qϣ 8'=""5qdnʻM`9O0$\' PB9UU"z|\Gr3ȎJ*:IP-`T}N&7B"P+T-p B W**s$%Ps`.K[m铬Q4D h[HS1AY9$ːBe9ˠm j:g`vS_%R*%Qnujmr`$Hb_NS ,LaQkLz\PQM>gNxx8y3xg S|cR`RrΉ`ke\DI4.QqGvjvRsIn1d͋n(N7uvB՗AcDĈ@Bqι{Ta$5ɴr=c%c!83U!6F[9iF;o|0xxgUީKbOvNR{Ͽl&7>I9rgN<\CCKeS3=.E[N7'7vv5,c?zSEo7}=uvObox\noݛCmie{;3T {X ;Mll삵gAN߼a ^u`סa|Ա@r#G c102/|qwڈ# JDDO.&]X|E,\'%REuJBRR}QU\o&KQAUUe1؞DgWW`F2#^ P2IeHL:j';җj6~s):* st'ּLvd @ J;2; ʕ8ˠX.%ͦI`c)c$!J|T :j /KgeɰQlsVlUٺfZь1xK"hl (oau_FSh?U[%U,;ޗͻS+ IDATڥoFy~<۪{h%TH(U٪ru =3>he@@DGQEZkM7=u̸jBBI) {%F0M 璱zԋK$IcfbL1ƅcBpNګcgv)KL8NjBzqWcݣ%ɪ2os"DFdf[WWtM4OA2( emnw/޷!rC#zv-/obynCpύփ[bg Z A3!,s = y (Pڣniz=Ĥ5b-z=R!ejGrBPw.>;LQ/g,bMZ(Ոuϗ](~tzTëY65m4%}*Py`6u kGB`f׏^hodL'ӱ+Mȷ6*DOwY ]s~'Ru@ćY_\bV(zEc d b<'@HA{ANك0Z]& ~695Y7*馢S0A?)M$ksVVtںV !2RBJ) bqYOlll6(Jb<2([~gx^Ρ[A“eti_FQYت>BYV,ٶT3v feZofۍ W:jַ^RU4h>?) 5|ƹ='9Yx(r#Đ tw/a/,`󣲋K=~H@1D bQ: : ]XZnE tw|Us)3}k5Ɵ҈6z|:ʅfQ2F]q_w|kǴ5\,:/rgKZG&!]M;Ӫ"mPE D1œMcPN|E zޘl c61rHGт TTmL]f6!,<ڴ܈|(/,JfOCD )pUzGuDe"Դ4!U>'X(G?~<:eW 짪 ƨڶU(o}L.'8m&pJ|Ӏ TAJ^uՕn>0[BP]uM4=uXqQ8$0 9I>R)"!B*(!țvgȝ4E}wʆL2ĭl w19RYxzU]Znɑc 8ΜGDw_OJk!XHBtcBAèrߍy(pꇭWYߧxU}/?rCnh-FOxQ) @wRpYɅ {fvDѢ{n%$ @!ha$xa |!X;$%sے1( %9 vI;>Wӷs䉓rʒ/0^߸_D ?sG^Ltw(Ը'~Q.Ŀ|kGlfD 4h&f tI#њT!D^ttzٞ]%uL1e< mUaZ 鶏fщ`d !Fi]4S 踏4c;[ 1h5%|nj 0f))0Ě!L: QOM!$RK␢|$@p,]|7mH8G ٳ/Wi*@(IqxoyGo}?8}pC{Ǡ8IH"@$ådwY? åijcvlL: 8P $13{(J (Hb uoo'%>xd~۶-0OUy4m=@Q4IIԍ!lACd}ð8DAVi;Hv*h-L\M=TA'JweQzﭓROⱗ[4s!{>`㯎>Qڔ7 WN({m.+o -D x`qXr=?wXǟ6SY Fy$ȟ-fķ ÂkTMɳ os Y*>pt֌7ٲPmډ[WH[:J38MdLs|A\(q//ffPE)*jF @p02$0l9h2Kwaɘ&E@}"ZkMXSn˜i쬏FG@mP4h[X mfyymWjeMog@ YH&0flL֎)fHCźAԥLfV66t@I"j=;k,]caHIHIdc"H' om#k*gKfgs`%zO?rnQ $yiGm jUSVEBJ4>Yʕ~ M0V*ȳ|wMeY5MZ^ /U㪖q*SPcza}p՗ `WrnXƟӷt5W7qȁb@'P` fg1/ J<`o~67`;"")1y|ZZZL+a܆X`A??+SWDr['gG'~Q.>utIhtPkyao 2SD^8`'.kFS}9ީ0Ihvu͆=Y7v2. ס66KA`06JBYB ߙH؎97֫inDG ]33#bÄdib"5=*?s牝Ȇ=x׹oIzޞD@B@9XN^4Z]T:Wcu8 C@&HڶI:޵dGe; L(*=щ@NR/\OW c! {íw/,Vrxy̋k;``ӁYA&漏mK{KGjP>J/!YͿy7s@p'B柉G^cojzߟg9Ά}@13a}v|A\uБb 7)v6U۹TGVh-gG.;r'i"cL50U:XeZ,'792Zu\i괏`;0϶n_{:a34AwHɋ[-tZx{>.TXAftxu|:ˋ =7ܐk XhM]z-(p~qߊg@x~ꓻKCzիv7fUDAE6Luy3qik_-{hZS%A:ERX}y郀m[W*8x78Xh>f/{%[[ jo2,?n#X;s=(C${:{Otx5V)Be H.!;|sCC>mkMr6S( ʶӉĊ$G@Y2{fnm=Q{[q`UȺiIP~vgU_{hp7LmZjfvsq7KwU`pًX-xp]~|c_9|CJ+_8OОmޞy:B@BD,5{+B0 F#oDf5eE_v,et:VD/ g/r̉Dm 4`Lnt?_tA\؆1ƠԑR ~6gfRQ!~&ir}g^Pi&> #+uЫ"8's3Sz [&vEllDhߪNt6ZCmzZYVLa)A*cwM.Au[|LRсj3u?|a,0f϶LtQ0Љ֡6[eK_ېk<{~f/]X)jʷ5sZO֓r 8- K1;/8V |[̞A iv6RtDB)(o@'Σ^[1UK E`i b;\vq:GBZ !J R θ'Ckϕۦ姽G>vjfX]JPntlm$t#;mM Pa lO͛7yPB$p ff{ O]W}fx/4$\ԧ]v׾roo1<:x]gn=SIw?^d!,. i`Q2̼(D-Q xO?g37veW.kMnK?eIIeqGq鱯?f253sW94BBct2҄R0hͭ3JMƘ@[5\7 eQ'յ 0M [gA)^2:ڢPW^hC$pdW12@WfRz|z3иքQb :r!pl/d½;ֱ>r"xku(^Q%=Kq>/A/D+p0N3]'Wb7> D a·pM X"+5Mʚ"7"b▹mdmmk|y+ğ{$h%c_;K^o՝ea?=zO;ѧ߽M_u@0IȚ;'")xOP~j\o[W7IZM۸W][V& X=-}E73RJTm5zYb-GŃ?:;pwsS:5-֝JW^~tї nq??_ K.0\+Lj!}=Qӽ~Q.?ߛ-/ ,$U3ʺj 3x:֘y5v33hF^ifF4ngk[ĉcŚVih9N{\6\Ң<9rdDVaq>^G1mՎNfS~6%:Ԧȹ#\~fMOgbAس Bi!9ضhn) +Zww;^(׷EI)tv {$@D8nkG 09[P0SHH*XJ'heSKV-+FL܈}ܦ1Y'2M "fbϞ݌'7=?;n3xէ\ؤsQ- ޷ {j+P#Aa;w 6nhJk?~~?:?=C氾mVEENIȁjp t[ 丣D5E9z.k.?C\yS.G]=@sa_8&k[kkS^kEaF*68oh[祙涪!3{nAEg53zSkZw?vXs)i!ZTP/Ƨ: zz}D:K3[Ն9/ڬGy6y]6FFdq `<43b}]G3РV:@ϴ`CY%;c Bmvnex-QP)-ȘN7 H YnSZr)[Mִ?vZ5޴<1O{"@{ g`"A[80> nQ @A0 ,ZWҽ-9@cFMe熓ټ-mH,;)|v*caX+ (%I_ꌛ>-9ƛ|믿鋐ۓȏW/E验vfyAG7EҾD,V?܌o#yJg[Ιh)uOko-!fyckbUYeqns}!ؿmyԴnr09\m}]n !r֔b>+|mU ΋iR7D*+ȳG߆v~r֗ldݙ#GqWlndݾ6Eeu &9F5Z[o vbp8F(]M3Ef2f>6q~%L^P$|ۂ0pK=`{繯o) щpVkSOݹ{O8-;ǭu5 P $"x{&zo-|0[)!rv@,% fўY݇\/_~D5KOټS?ivUB !X9naOBn|4y;"v'w/?t}wk[сӪ*㨡iƹvYG׍y|)yQ0J=T]%kl4>;͗}B( {煐1%ev7=A1@u$gLVMEGj*Q& %aA>ͧmZNvE! `=dx0m{Om-A֬$R wbtP᩶N6>W>/"(W}ˋBf-)&y5 "$ס֦;LQ~lA_Gf?gG݅J7WM^|蛿?~goc-)Sl::iM0E^1-f([ t4gٳ2:[Z^u9u\/%*[> sbn~d4h3@)jMȫF۝|{7)z Lm4:{e:2.+c}Û NViݾX} 뉪S[omJ%!IXD]׻sSy+HJtmHs}8`!P*KpIbt Z߂?/pk.¹HK, <By3 /T7$+L u/~C z~y9.?Jm}pC2{yBEꤝ>2.7czsg'oRNK)\qDVErSrzln%[=4dv$Ҵ$Ycwv|8Da`L4S>Ыe}) ""JX3g/Vn[GuٹN1i{M#Uc!j+U2q")բED Aޞzy9QaLѶĀx<F〸wu7`Zw:q:VI.֑,\Łr3+&XP}=;Yek#Svq-萌ejJ7U&:a"9_&~~ϼ}nn8s(f;7e[8qMBA' z}1xnavwzP!469OKmј4d uI*]3͍esD>M)&H43 3PPS2'z")`IvE8J5wU["VNQ zUsַJ:!mmޢF+d CEZ%'x{=ۣwy;ώ @+[bfk `&3mKϭon_6['~ ҕ\7>U#$XzOcm~v/~~7~ i urÛ$FCkwVwUmqK> yEW,QK3M7l^7?&H^.x<%=v/U=ujk:fUksyW͍%IW\I1|:mA$2 yM:3}o|X71_e"R}?'~G\im:dEט/fY ,[&uBt:A@Ϗ粮C#2y8eP>Y]H73lbj VnkFVa-  g[NFiW" c#UY/B4B:ԦN5y4|^ԨkPk gia)w/e$PP&(Ex"3qqwN}aME%B8 t Svc޷"6JVֲ[YL0ZfdI9S _BTo%$u2 ghG D%@$26:qlsK\c6k/?#?Qqs`(rsq~5[~Ndfn[6v=¯?]`Y6~tS7phy`/.O}ca<`u N۲Uv>d$i$J廻RاiWqM?dODzN^|{@ R!b;w{GEې%x_ ¨׍;Z է3soQם,k/ϔ#jR'(m7kۻjcgvqź%}z?+rJqښ[ :|f_k8\|~I~煅^@g6}l5}_J\qDȭ1-P:dX^[gfj6&{g\(~w坦QhetǏ0 N@hf]Nhp [;`LͼJi=0AOee,̇jCk0ƺZ7L=Qm3zeb 5eN :gFtv)B %C Du:P2iZ<\e[Þڿ"^*z}_V>"0D@ó g%u;eNP[ N-t;] u/|![fPW?{#A$ A=ɿ߿97x۞b$ۖ&bVeޡZqhտ8y'^WG<;o>D(_Cp}EoƵy9iJnݓ~p _;{wwvLKBWˍtN'ΖW3|UL'[U5/L|m;'T+4Mwmm#hgK; `H ŏłM! -12ҢӇF.&) -LUmT>bjAwzj (7z?)k'E^[3++SzԾajӣLצiZږgڦ./[]ٚ٦%I#;mTucBu/={BwIi&-z}o|?ッpeca%,#,x4B/Ey.A,Z/P0g~Q.? ϳK}0 s SLO94sG|fwKٰmJg^ڗ1ΦA7!!^.90bEH0ctD1&7L53*JÜaVe˫jC5F|  M q ?ocDZ(0֔$"M)IR{uE&S?|g3$EPDSjڗF;!%*~{S]=w|s{}r5$͓fR&ߖƀ\{A1U;mn_Qt[w}@(PqTU9ٝIUέ0;;l`Y*9ގB$Iz-O"fѼMK*O^s;=BAݪ%g|c;Q$RY9 ! Du㧵)FJZgB\x|pѩMWc 2yG3EHifb&ìE7D E@Q(ҔTt:kDTVؚx%P NdK2 5ahHKsn獯?Z? @IJRҊ=4p$d`-6e) %$ nJ Gcvf up |̡|+)|\^8 Ư `Sih(_ =;o/"ʪ~@xl%(l5HJMxMJ]H)Q7%;~9'3O.UU~k- ,30={ݛ`n}4-bs+荤 l9 W |āt`V'v 48}?˳bM>KƵբ7hZũsL$W]z6|{&ttl5yC `-q#^(CE;G{op݁QڧmL?&2ۇy+'huqt`ё~b[]<ݜuuh |_E h*,GƔshrt''6(fVh|Q1 $"1N,`}G҇k DɶtCKƹjݵ'ǭ /W|/Ve{իύFAE=/J)R):Nz>DY%zyE\:qu{Qi=Iܟ7]NFҸ4=U:Zex˱[:]ےzy0xBV v ADߏzI5~Vu*β2I{[:-On{,YI)b-Lݴ$E{?h/ͪB ZP*I$xUtQc:LJ j}_mog(!Tpzxʟ_>~/}ɗdѩ.!i<(NC]p{heb}tE( \[SVȴf^,͜Ax~Gk1J7;Lo|CWv>S,& p.RcR \AkHbHshg< 0fz6δXgbvt޾ yܔl,udKGF#9P A N&?î^v|+ m8e,L^hB׶#-|i| IvCP{Dr( P,-;iڮH"IŊ$#U?; n\7ț`C´MOs_L`K"&`!¸$D" ^(ȢV gU!7V]69; cn_3UՊ AymIafٵ^|4mg(0OXJkY Bζ]Zk]!RI45*#&u]k}Sw7JŭZv: ALĖ E,$^ղH88Q*|Ai(DDAZ8׸҆(THCMh)-Dtu4ƴ^Zy!HZpg-[sYDb3Ϙ= j![t!a_8j,5Nn=COYqSir#?o\Ki>~S0l0=AHW9 :XMXHtQo7-t7''&0ȋ Ӭ̒MM8Ϸ&Zw(wߊ6աnNYtNEv@Ƙb9Y\!9Eu8`69Y!:Փ^4lѦ,s-1sS::|3O]{֬\13Z|>`VlL15(ϡaB 84.p @0ÇE/D̐ 8TG,l7ml@;99['䝇ogO`dgi:f'"Dfu6`*嘄 aF, IDATDUj]8j}{I.N,+sF|Fx}?ᥳۯzD/NfG ,*ӓl4̤–D 0 t؁E*ABQ71JqIwMӀ\Y&TBEdn9_Tv߿xϥ?'wo !4KDJ6M1+20 ƴ˜ڶ5uJʔͩks,TI;\(Jf2Bv- meSaPrJ.hLfG]$ÍߋӸeY<3)Xݸ~ 6K(zטl4_-XaeNδ{U(.Vi[Ura:ӹ3A $PjUmDMV 9svl1ЬqzO\}xWIOo|3G8}쏞za/k]>4 irCiVdj3و ýn,Ar>:裁!(ʣœ2uKr7FLi;@9#*t4"hB<؇Lxr|bGn;G}-N yi#c%2=O>EE i9DE2^b6s #pd)=ް3t$$0VB6sg^OcpYmG;n= @H8OJ*%ѱ^Jza {,wݼ+_0QEM~~'-Ve ݑ`&> fPy!H@~ bz[ 9A.fx9晜휵v91 a*Vb6S 싓Ht9{0W<ēqs?x]7.^T1MZU3x4M~\z\!@JOl_,2 ດPpmW[+3LvckV(khvROɒp,TJ*;RBJ!I WGǫ-QsΤ:KB;$əklYUM.g7E?9$KڬV&*aNN4Y')O⣓Ig~9;.z1[X٦)˳[8/~6;}wS?N'?zDi \9wEgaŠXLN7+BӲ&2MvRDa^`X;GZ\kq>ؼL|Wܵ6]ӃX#Qaq>"raJFD&MUfUct%2]s `.6F_JCD6KoXPx߇~[\ܺtacSgڬ0Qaq*bK(@ZcJsJ{rsKt C8TBtGJ8d'1|Q>TgϨ3gdTx/u4jo;ι#)Oo1=@Ju,#"!zŨ7>12~2lS_Yu=>?}mf0yN/s12 ʅbwV&8;j}:ٮmcڶuY4=8#<{s?o~F6K"`Ҭm;k=yq$%Xegѵmub`Q'$ B%qa_{KdY.|U[hV`flO&ZBX j۶6H:8>l7'λx\UާI Œits4#=c wż0 ^F .ISMc8/8 Pd 'S=/̴. SƠ2'0vS rSOfn1@K<ͧƘt@ph̪X |<`s|WܵO3#ùi|Kg"@N/1e=bQV|{<ֆ V.J4Iy>n'|<1ۓ~>Al5y֟%ø?(wߴL)M:Ky_:HX.0AQ.8Gy?G=~|d051!'Bk5KtPJrfN\ty40qcGTUZk;މ{rϝ#ﰞABJH`Y I7D8 ǛBXffwo٪(mCg&*NHX !ѴN|ӹ^*YcauԶh[oXHsĞuKגoJf:{ca`u8yk1'O^Lԉ bϧ= wbWNm9-e]67Fż.i()HY;؝bQr6uƍ;Wk_UUumk]3oomۮVŢUUep4TR(U@HV.β=UR2$R4h$={&r<`:og9!D^)aPFRHQ)yI(LbżZi; # nܝ3b^-jKK==-B1wNvlصco_Vg׾24ͼ-*TAS{Pp5%{"զhsG~G78U/ޘFZk :)t_\yѪ9;;G 8yCӽ,|LQΧ˃<:z c #{~Q_\H q8ܜszY!tLwN.:FC#B~n{r>Avtg1/ C 'a̵Zim0 F`C#ʼthKC=ì#/L#pvQS1A 2P$$KEif·%{'Ðb8GS\؈wړoq}Ed{Y #:Eto":vd R-Du̼,`"W4+UeJQV{a脅Th`űauM]wT@oy<{fYq7㫿Jy9}8}/p#?wcwƩ ?:/+S&2qU|4;_TXЉʵD0DƯD[Zd:&;w5]4ZP.(y/}hfq#aN3aOMpAMvQ/9KKTZDKS:SIidԞ9MmΌ7;OMgϢ 7{ZkCHup]T+ra{, <mq"# FPD )<"BP(Puv>{nY܎7~_è?xӧo[cdXAa)Esɀq,m-_' "f{C;:Z DOe9H <&ZnӚs$&/eBs ryߵTAm9ڦ;W.WRH%% 1ϥR4^,t}Ǟif } yO>teYZmr(k "I) &}1l8$k:b&浩L6[[mcy4@PXw'5{s}boXVsvXz̮6݃:(M`yO_X=z}Z7}w7oBGGv |~}dj>w'7xc"3B#FE5W, ݒ_t%$Ҕ@NONLϧR@itl|VBM4A|Wܵ%&*0ZǮ=(tg\W:Nuy|vZ(߸EӰ(4cF:yo5!4\,i%o9c2:iƘkL{XP+Wa' 99y ֑sL Ga֒uPW|/n8(kxA 8Ϧ]x %yK?W v=lnmQǟѧenVN[3PeQ:iDSpŢB<ـ04n}c~Z#h 2b<2Zc֗.߇ТUzs[h*3AF#\H(@ѡl}&}D,ahpolO9 #xg&T%ݠ8ڛ2tYZSMc7n\kb]ڠm< "!H($MKhzy65cѴZ~O(Τ `-;]Ƕc)" r̝l-{ 5ٽ. @\0}Oy=KgNib@  `r=5Ap!;&zy/ɓ =3 /*bSu X+ Ӹ &kAU^oiٮkv0pppeikMm]T QƄ:D0'udJɽIu6sl7ݟ(Y۵#kn*n sjቜwP9bŁz;wc]λ?x[~7~|S:RHy@AJ8nz$L@/H{o\y:Yi44h]-ʺ[)RJ2eNw'{ۄjz.}ͽÇf˦,9؅d\;2|又ᆋF^aá2"(ّrG={g?N}_۾yw}C¯Ꞷk>V- n~ /sG/Lۙe<]¬U].ФLk04XGAKL綋a0A&6b|Xޠq0?ߍܵO4D 6) e<ݟ]y^XcKfzii8)K=|$:z33S, ō6`|`5AqT=O678k> 1ik5|T,w3t?ʬɧ(~jQU\uBBttXZX𳙽q qLiB@l噳A}pײix{(ɲ7|t yf 8,]|o+|xuƾj#ڨc~8o埾rx/KPwߴ8Yp^X˹/0970(7gFWgl+te ٙI!LRVN mL\~flaGm1?ak4I(2h-LG]#ϭށ `bUmC.϶7@ DGNݬ-[l4 xV≴ cl16Jߛ:9Ie=k˾l˕KMZHKɖ*`oc.*IX&FBkc<*˅|ܶcZs XEb4pŸi*4ծ)Ť\=|/p05dm&{"Yvu%3-_bM)!E%7-o_nƔ/_f2X1!8بڨzJtLّO`ܷk-x`oy1Zoy2L&h'eEv{7PJ/ZD\|l5ۢQ(#OGO s'O(0P˗woxAER "@r2vXJ)PǶnFe7B74r;=?lgw>}xcg~^tH_3Xg]"Űi uܝ[-53GJɴ8J@DD4mȚU4_wtSti+E;vE`UHIhTئ!M-$)&$݉R0:t_9]֩Kbvsratx/NR;>/קA"8+)#?1]z*7=O^ʏ?{w='g~[O_|ҩS^h-+4lp8=FO?mi-6b][J[E%L6l[5FDnk̺H q F/A 5׿1W )O@tKh6oL3x/3yOLdB)RMSWuϨ?}Ȅng _׎QeaE9h0#xVˍw.mlqɭͭ4UJ PR AbR)յQ&E?ԯ^ ZW>փ #2>=ߤU) }Kƛ;t/hi՛`P[;_9PD "1_GQ:&/p Ԃy_1 fP-t{]Ѹ*׎b8iv |0w>1VVF퇷YGVx"v@R<O&L<D/ _1N ϝ~xuo՟wyul}+noԓxzNí_}}d/?*/9<$ggդ&ȁ؁27a.a4٪`l:୴azġ52mWs(ͫk= kFujs}FGNLm۠6'Pm0S ˜FkϾx#zG{id,-!Vʠʳ#r\GtV ha'&ӹR̶?Fc ]:͇6'æI(6:o6zwrYJ kE$Q+_q;VG: ԌH"v ׾Ze߀R(x\A`BJk*/?x9(n[>yPxU v'?:rZ1wud,ʴT|+ q:Hӭ7xhno҃ZwR/e:ĥ+쟯YM:񹿲uOWӯO;JPUDZ.me݆- [}b'tpmtea+j./4vbP;v(uU5r͞ /0aوlQ)v!eAvܔc[&\V.nLu4h!Oư[%CI n$9d`zyF{E&L+v<_8ns4A m1AeDḪ&mV ӂ=yj5SSSSJkg"g"֊jJt^x/lojV2^\z@R.݈WLҼiާ/?ǀוgx6F~_lRs 1RDu=Ϟo}+xx÷MƷ(5a\e㜒jRfxIK>B[0BW֯ox]m~\/8pĤh4*B0 ^i-]xV̨žn?G/e斣/  ZQFa1> jqKo.qDj-ZZZ|^ح͢,qk;v˙gٳ3funՕZa1ʇ(JLRjFUSz㫿e! {_y8;bgzHu70DܦՔ ܳO<h7F:Wӥxt`wxy =+o_z˭8xyuyk_ z ~ujqLm ӊRV('P6.biAƄ6۾dGy8lK#B;5 kL)%_!?_(oռkLvڱ>Z, n[;aRw:XkCT xګi7Ҵm؄ҨД醆2M7Am,afZ LC2j  `L[ 0"6!MJ CJRm#'c54iƺᦦG&VBAI4Ϩ~ ㏜ t8iuJ JjIN v )fPr PW]{/SԮO ""6ui qƷϽv߷+Tg BӶTk kj]]: 烹Hт y±kreem߸@' [zsP7]="(%D."xn7' >>O9|C/}ͭ7;oTM TR3D]٦ZUUzfPRK.-vL$@ zS+mO e v7+etPbhѨ* 'dm@ QuWwL [651iVZ;-u ~'{?*Ӈ7\Jm]_pʝxs8QW?[1ן_YY1Z_Jh:+镄?aլe*kgg/.>1~xGvoۿZ~˗b QWӬi;.Lk<-@eV_vX!SmcK+vH[s}]1i؉O4bVeV5U5r͞k'2d@3`[#kBa} Mc'd/d7mZ&]f;;Q{FxczEYOdM{y`/]k%v7ֲ IDATa䉈,ϳ>^{b_ln@8RL($"&N3sHSokiB}9uh/iWVPԘi@ ӴACԛŮŜUML v66KB/Ubp{gpLmC֒5\-?_(o"`&NZgs(zI/m]i;;D?pءl$1, mφ;9mLPԘcc.(1e<۱e6&Hka2NXn4 !jTP CV$XHOSMDxb{G`v:$WVܜ` '.y|IVxE֞&\"³g0UsBٞ+`IR4ZvX{]Z] =$HH3qfG$|2E4E Hk7BJh& @i8Ib<Oʺ<~ݡ/-U|@_ 1o"%0q vw8ZmP7$ ''l׾k@AR !RJ+GR A5sx0D}g,vyXeG@-[LPuښVlvdtǎM젰`9aǖu")3 - k3<1k3)ĞH!' È]W֍Q(BM&@Mݮ<, L _ $$@o@RIhRVRNMlzf( E$* oyO_Tтhv L* 1T]̎Zx- JA>{33m-B82&RJJ!ZRI۟w۽V}]=t}=;?Noz?q- !\U@۾ue#`@"$7ͷ~)p, l;nBBKB h?OPW7k|2_pgS'u5l{g,,thHH7yz&Aq+᫺aq;hwh:, 4UC]`m؆ gQy9w4Me ?>H7^O˭3DP[gܧ^*G<3ڛgt R8|高{뚇ϻR,*?;m@U^rѶ W!=cZt<Ol9@26"2a%aq;zhˆ/gk- g_k˫kGء&46-mg&tH i) a1Ba® &c{+=?d;ρCdfE04cUf.}tqZyp+Mk1&1Jk=ilm^ uK;R$ b:X01AZS@$$dD]9`B̥r+Rk|} m+)R-b%AXH%9OZqһ[c, AM*03Av\K ?s(go~тG%b! a_#vɟ&6ワn2+<]o=CD patR W88R]w{b킐Z+fq9A5 \e<dIgQԥuY _ꗿ/ZM'BɩTJi%J {^~'6q'.h-zi?;=\OV[ֹ9uBiKkqV>"\_~gŋrӥApAv^ٞxNtt/}SsW?4+ix@~3қndZ!JiYka`;$*( ឵a5AI*ѝk=-8GЙJYX X0@1A "~:qj̃1RJ";Tq+b8$nsc;8/+]-B}kY7sKxesqRzXM]ux'/WzOdǏ%a@BtFIT Ep5⟿l=*ƃ'_8=^؅v(Kɳ2﬿SdL~SAP]-̟-Z@ $aqͨ+ kvKPHMBCJ" AŦMJlL9̇$JIZ,7.NB `'[n}oyusw3 rx w8qX+Icm躗9P4pKAϷq87 jLܖIr}?aBL[RJRBJ)i¹11Z_|uܖX+5HSM#vvPd$ssᙼJkcT 88&BH2H {&8_8 8ρyc[8EsF$r\k~) 0WEYyimSH$_ZtӴS5\1RA<kUv$Hҗac5*_j@X+qz'ǯgr)+;|m㧝0NIjDdJ~mC C7œm ..v'l١A?p| \g:U6F$6*44APX!M͘H*(1ivnSC<.(nP+cb %[X;ME%@-NhZ˹luE 6Q6bDҷY̞Zk"|X"0T7\מ!{n֏ǐޡ*92 tA,G'rλZ'o뮓RQhkp9 0.bfr`9Lٜ0LetgmCNTOSU .EG@<\)oyƟuLy>ɩ~ݒJAHzK>qxgc5뺮.<8[( (MI$)ʇ^*E!PRH%Rm&F)#A^;o<+ϠP٢+.U*0s&]5;f4@@H&=\Sյk("P2VZ 5L4ż,@F:?ڕ 9Γq<A#/UO NQ*rA GC+^H)q) )T vkvR UvTK)*Xѷ[_nfqG_x9{߽oU"ç]8}2N'O?زH;IzD&βM&MX+- kwI6dcou'QFY6l948uӱakcǎZk'ᶡPbȡf['ZѲ̰cc%[ͩ͆`ThaF mF hgڳ0Jf؎ [6&$SY&wXkm>Ea2&\_e)ZB$H湘)gdPɇy֊]Cwls x2kR Q(KxdkBQO[]?v2:~>b1+Cx%DDB)Lp$Ys;A0??_uimv2MIc$ E"JD@(%|"+'x JAhS&N:wܰ{[o'wqAڪ#B \Ub4%U1I, dγ/P!n$D0,Ͼ7 YmyS2N5ƤbQ7db $o'IR.y޼  $um;HvJs6n;癸U^ՙ Df i>"@}5q85胳#XBW{M`S/8OowNvylB:ulc8k#c I'{!va ,vO-sgλcK˧n(s| \gl=4.0c:f3eP3H7?sC AtޱvUGlP{uvuO=kg17/ {jm 펖uȗNV|P9NC]1)J4F) )(!HzW KabU2M 4%6ݿG/^OٔR+1R4:="h$9{1sd1ݺف$` -N %IED<h@L6t|m?o|O-DU1Z 胐baq,8[R)16M$1@!035R$nfTEEƣ'|6O+󏵜oH|fZ(2"َuWpҦ<6v2@핉t"ph`;}7rB8#7~{1q7knn?Ϭ+G\|,Ѫb ѶiӢ[cxHZ,h=DŽ ;PnMfVڬIkcGU>t K+J^zp8$y^i.Z"$/}6FG Hs]Fc@+5 DARj" *CB‚XkVOT%Ehk:utj3矛_kw.=oͷo090#6MexLH>-e3)>&vl1*̧R 4ԡkS<#_Ixc.}|:1:(l0JIUJ5*: !$$ Ov5-$[Bp $BH!ƁAȺW{,6Q;x`EoΝӺz#xr:U?\KeZpeFg&r>JV[-IHt+UREbQ=bfH.ޒ4;?pisDa~ɞ\]GmE#e:te$4աBșNg][+ IDATk}sU]$;vfdvb F&has҉s;S?Ү5VbV;ų[܁ux_ >ѷg}M뀺Nɷo}Mlguf]WO^ \J< 8w[nx/Nr8uBpYݳqr~̍v|;_[˱f4Z%lbJ8/PrռԅD|ڎEbQծ:X:l#{spι|[;fW6\=zhDeټMNp"wPvgOE`̫BI(CZCSYFC!'ꀢUK9%DUAIOP*("Y\r2jM>lҭ&EyČxjZX&%igѷ_sH[:=Bg আ+Jq"m51@K?i]Ӂ)hUp[5*t2kՠlotX+ !Z:ij!$QjjRJ)! Ad$}0nYzAT{`y{'1/*-92HTڅ*7*bFq[9-1TO'Vҩ*2DfP2a-7']DS3E^M%PG|ͯ}~y荷Oj#G0 hQI=ph*i:Fۆs/[` %L#F %@AɎ0ɗ^ > RqoTv`[El6Vb!B @ iM[- X+B()R ,ԁ?*(T 07=>k߮-|c1hω2aVWn,+ŞNEqByRFe 3x}cOd¤eڕH!5I%mŇyn⺦9FG]>uUܸk'~N*IbLJz7ڑi[]S ZMu*Ѣr߿ݴz`uiN#O{-=rLG?䔹Y\"'=W٫^_RWgiaGۖE`-+K1vH6`:n|kQUiѱ֍75)XY3%?(jrV-(`RJpꞵ%G^;3W2.Z\^u"0\ÐsѦgc T؍;"01)p+QFr=W;f[[_Я]{u$jJ kf)G=THS VukeɊk.<Ϲcpї_~ Ozw/8W;z g=6[J`+W,Rf6 UuZ>Y:u݅򯞟cϣmr%fR:k q>ضUMـGK"kuAcbRģ,󱷦;mQ<ux*@# j J,i7(*8Rf`Ii+з(sȺ}̛Giy Vta r4!P3sQ?PaT|Wd6uiO:t:JY=)S㹤m'^  n&k %+DߝvrC{O_(3OPOwXq*DRlfM2ibÑn?*^LdwݪH~TÞ >\@ &TΓCA q%-D4l$2&ídw6I/?|'nG% $&!TD@}xyfϡ uwq?R>|_A5۷N|Q2$3ܟLL*$Q 뫣tjkz]yv繋R>Uc|ޙv^3/%98lytֶmkB'ha((۱%\=JZa!ruqr~-[ኑrhl[P[8IlR9Sr]`*ݡҡ׶%` \Y㱵=$@9笅sYCg;)1-u,kY܆"#v]ؚY ,8 ($k!R%b$9p & 3%I{BBp-u|Kv}Jݕի~+_?z-N?aUZ:?t""&ff")8zԝ/}믹W0 Pt2ƱJPMq>lvݎ~yD"yD*/{߾ohR,j|oxk !30k"q]H !RB(mé;Z;7]'݀0EW$@`IӘDjۯe{>\AsXW:  "zwuCk:S-)IHCȫ$ʅٳ!{>o"ϫk-uNғY:(fct$DlMPgJ鴊m3u̒=bRo =/D*|@E:7ُ|3;>O[>G6eUSfEY.PM5;$V#G*wPɸRqOYWg\b2H,8i} 8](b@L5@wiŔh`9K}wO:Ë{ysvtG w6ʧ+éВ:OYUk5{rzDŽ]JG\v; ;O̵|}'*"!$&Cj IULtE. m4KʽOhj]@Fm۫QcKb kLt`Eeb7NUʙaܷԟp"Db6mo{oٯ{4!$ 5uh\Otۓ:h4PT"% G"jRg{1}M^Lp}߈oE&C BdǑl@-`1t|ҍ^+'g芯 総6Wb$ `xo[/O7_[d׻<4Hw 4t:fUmUD ]' v?VGTH"8RƊQvHݍN継'>.M)H>&38|ugL#w(NxQ3Ҷemgx:qJz'w%9[3]?<7*hQ˹MkMȊŕ7t ؅%cN&hmeTe |pe `b̠u>Z%,{* LǪhF@7E]kk:qnalX.GGa3*,Zemm8&y f&fi˚ذBdƄvFIpqyH-1^2̃6*|Rjo(K˧Xg6n{}őkrV%|B }I*x31(םݢuhticD%@$r{ NXMhsE>so}%Ҙ(Lxx0_^_;'y/yo $@#T7c;hDYrK8`yZ{.~5)VL&H rrCh|wnN<_p.9I鼮q[1qۥxgz&Yl~{<%W2|caaQW_}9d;wb$%;|nu_6ӕ`Yq8F9n?= xdXD8KMh9@&WM[:vK(ʘF+E͜n#9( یRֶ;l(a#WFȖۮ`O1:Fddn z>*aڶM`&֕Zʯ{G\tȇ2zݶ;+>Icբ^_~_jCuUCD<ᘫzjǢ\>Mm㴈ٌ1 "s<ŪUWGSz _UgGgܩEs%]?E{BdH G3ܖ6!a&@+Z}ބĪ@`?vxMRBDcRo`I|w-1z@3Pʟ~kx.FpǾ;|u~JnQI"=GőI zOᚘ4PLV`=?~^K?N5GWh>9yX ͖D` ~+ |F{џ}*K=1 IDATV  d9{]O QnԪw -=fq5<̧pDS]s3٣Nj]c'A}vj-sq_)>7mN۞}#q[9}(\RZM;-HL_|%@{rhefdĸʡCE{vqNHT5-=Q]pnbmvl>'/ 긺Q,]9 d`UjM+S@Ͳ&\icEv*VVkklmӮc"zWKU ;~ͥ?_j։YGf=43OVCnNm5V<01tI0FTuPj+qO8-DR"+u@W'dq~K?/XWGozo=3 w#]ٓ!`܍J̑cu1B#ti,&$$unkT>A A@ 7=@{DVŷ}m"'",=^!ƪtÁHl~ӊgExHlU(2t!;d?@>_k{|nD8_ Bu?z6O>wd7iPJqʥK_/;nY,׊g=ʼn_P3FkΕ0QB2gO?Qrr 6 [bؕ%h@tqTݽp6FZY?*UhBäe kCS;FY+$hBꦷ%<7\}߿@K!U;ҧWt* %$ B cD]= N ӈ F!Mwt'η-E ›{ ߆7<&?S8O} $дz@24p#cf0@<֒ҌIp -܍yѴAX'0c]? Y8E-םsi;NscGk\jBD=9Ɋ[Ͻ(¿XPqzqu0kyc\ jee|ZO'su"qEV5Dy> PYw @PevgJtUɪ MY>]K1OχkL>XҶ%;Zjof8_ڶt PJs19kjۨd'iKC( $abiVRc(^>l>}UѶT9h7)<ݮknyOuxOfU`  ;+eԏ7t OPLKDZ0+$J`~e$7?tC3٧Bbw]i۽Ņ\O+,*Q&{&i!WRt!xcRI4IV*JDDzn7\'~zo"{) AUIcԷa"e\Y*mDB zWu3HBDfUmiRM!M $T/J/^]^~,iBpnu;zQ+ \pT/>U=ðsH`aJ9p&ְՓwl|xM_BSFPVbdr:㲌S!m;eUErqa7?kM Blu 1 AD?p*? m}Vke YJ+p|i=ڶ Uy[כO%) 1?);bdF)>-eDmX0$0,?Zyk߲|[QtiO {lf(C$ ^,'D= ىL]`O$P@bX3w@j{MH$#xR]ˋ"g̻?t=ۉGs N,/zJW@K#PPIW 8_Z{~05Wq>5K@,3!KyUZ!`M˪hze*O 8.#( 钩-n}VPFTuSYf}Jvnٹ̎ A{PvMڮNت 1 @XY9܈d;zںqkCcM9;Y57ZÁL $8m)M6BkQղ5+jc.FU>kJ֠N*ns C l> C"IDN,wDPJ%c֊-_Xt3i7|,Svtg#V.am>Hb"KukXHb1tQ}LG&@}xrt~3;-cH]UH!){q :Qc R"q"#׈f7Oz޻f(m*; I0@$tBI#tPC@TRO| Bc1#`()!ihABi$c?(Wh2-Hڂt$tT@ };YYB5;'ޕAFn@[1ڶnV֑n-?#O}{}czTYsVnZ7(1.%j=y[IܵΖmrJ\DXq*BLWkvbHH-řnVv&wMFc;cELδh'B;{+~\k&A5i@>\Z֎@aKhҭVo%8*k$FR,/ `xB*!$~b/E-ls_>s13l$AzwDZzӮ DݔV~lE%i`ӕ+!Ee`bjnb'B3\4@Vފl~+{xG7v[b[p0eEܝwL!,s2U1*fef+.#]BՖFq>+VKN(%HK)!dbA+ƻ{j/J,Bi眍M-̼J<)$FžfR o^<ܹp'5 zw׳gnEQ<,a*̴$`T B$Ö@r^GZ`U@ A] tn)Xr9+ Rb[?r|<+1tj( Іp'vUİSlqb3BUPF*@EkG}`  dfMbj, H^&>Q^[78DI[ mgrZGBhmŃ2c XkZ 0r&؄mhE`Tng !Pq3l:{xfuP A^|k&l* t0l5F0>+ g– wiQINfl@Yٽ=FJ1*R" Y U [0€MDq qB\;"JGo}EHK=s? tAFOOO&ebuʹk y G`C@4):U-J7ũXq H`y\~K҅HZb#iKu'L+,_?%oB!ZC㇗lv{RL@ !HE#Hv]k}RSjcC *7 i;!㏡hY; ۦO5ںLlhɘqӍ Q S,# j.(6ClFss0eg`LXڶrl ` a+]mAtLknKoJo[Xp{ɧQ0#lYv+`̊%67od|;[:cz-Hm %`| E l&ENrS>SE[PQaQ~U {f楰)H,'23>h?H$/ڱ[ڕZI""E1+!f @T׵  b%Uͣb>J+B%\rV !b&>(h 4@ H4Mt.:}~bV{7=݈y*8ɓCAo5Ba ZJL 1ُg  W HEx pe;zRxa+umoV~4 $c֟{/\ϵ|$:8077 |cH*Z]Uݮ RH|ᙉH#{oӫ+TO| V0/ 7bi@6$mólw|Fymkpӭmr6taF|.fpg 2IdUmY!a`յhimح qCiMSiΖy?%[k'N$`*mIJg Ki-;kfpXt@mؼ^Y w£bط{,_&ծ8!AP ZsR"9FU+z”gnUw !IZ As͔8)E:B2 j{iK{h7!io  fLBh.!gvޗ+S$II8FБԁt "C @JϮ٢[JzneIV JI6]]LG{}'l=SJ^wR{O.[10OV5< oa$ 7M+׈ϯvR4}PD^|,vkL7]TѝU1tC#=Л NG!۲ L]A-=J nid;{Ft jI @sp1HWjjZj8d ë;f%ҍԬZSrm-K& D^ܚgؘ0]s%a{Y^Σ]Q"B+aB`ռo”>ڎe7A"I~ UEe$!\γVa@IbJ5 $={&r<|}||U{&@="f6B & prC,ABsĞ]গVRE BmpkFpٺ&<{^z07 AĞ.{0 L&EnVFAT`&8~Fd5\ v=?KG1էϮGu/_٧6܈I]w*e3{nMfnG~C1M@"PD-H ruM6H<ԗ/9! ^wO1PQ@]CHw}_TھpbspCejelaK\+>1b6r,w*y0\{afB֊[fS&͘Bj2bqz( 8jׄ퉅ټ-"QH= #Ӵm2e;Ϧ t;۷e6^ li<Y;1AncZ`-3;vg `' kQ;!Ԋ`BݮkhEQU;Od-5z— uI`'̘z? HkR˱-{,`ksD@A `QEQ2{t2F=2PB/RKj&jI5UT5y rFy0yT\,< pT<ڑcϞ`/a,%f1 ,7lC4=PQ%gKO:a!jx vpfFyhTXjgԴO< #gڽ7>ﻪV nkf7 ,8-mm Mb[S1nZ?[Oxeߦn:.ӮԚسRpR%W0kR]m $UQ&g[{Gɦy.Ѓ'}S{Ua< IDAT0d0LIY-RFK!tG EYϚhHP!YoX(P}o]|/<@ͦw;|9˝tv^vfrc$_L7l i_عwkw&Fb+FG]}eb"v\V*:nئ;ھ`!O Tjh_6>1g~V֏7mm>|L.>JbY67D'@adL ihNmimCb–KIm0zd a `*ed=;]E1Ʀ5ƤA"0@ Ą *^:b> q6-cBʼn#4IӕcëdT[nd-|FαP+}$HATH}cC8eimO'R$e+,k^TEH+*b&sC8 I y=syUM:{"p\[Q+RJ3x:ahAHqR= xs!,Aa`A_EШr&)=$&9vuRP2 qǵBk- bm 5];N֍"t(Z@i%l>F1MnVdalaȤJ6A´"ie&ѾѭltGZiC|LG[ ̎aBs-u[l6e4+G7I?xɇJ7G gx)^Q8g^hn{}?v|gzl*;y)",}YPU}i&j>Ʌ Z0UP`Q 瞤d+6Z#@+)5 MhJBH*gl%NvRK Zo%%g M6`)wďftfO}*Oױ}k|w\JVlk0tkf!8i6fZM@#6dYH3M@U~:!eg/?輈7W7WYJ (d^.%̮| FyevC hOo_j67 PTĒ~׿ 49D*_[~%ǞS[>YjQ\.|VU︮vvNRjUb|]Te(mIP ^}É{7+lO?%餮akmd ad2/Ikyt079%1󫈡X˞?~jn_sgG?} )%~iIexH55D=B,_&O {?4CK}۷Ƙ}oݿiE!@Hycp 9b+6 fϩF>KoknIr-gB|9_`>iSPr]S`1.|z] %\I,@pmQW[띃k:{λztEY_nZ;zCk*P xaCIq׈ϯjrHxfoB˰yn3T@2&GxF-T!ZV+b'5C hdfx6έYdC'ǖiǰpgd 5LaM(]dgL DFa0C#̎Y&aCF^ YB b6]"pިܦŋ'o=, $:_=|g>/̝Tg.l"ƒgUat|hIrw޻b΅{ ?x" `AD6a;dWWĕ N`vꨓjttV<[c_:ӊ !$ nbW^@)ؗ~)eDQ qGߏOq~@Q 5o@L&,`B8~z@|8)J+HZphۨy$!h|? ~>gQ-2[`@m_a6/(.1< D-N" ll–ml]wf֒7eaxa˽ݷY>J% NR416"`p+08q˚l2ͮ^N+&Q&nيL^ت0&+OEaD稝@\Ìe~[_MgpkJW6֎AV,I>\W R <3+tcBRxb bg.Y5sϦKOϟnu80=ұW' 0Bp ""!AH 4Ze|807(JL(^{um.^,[A ,gNf_agjؓsjVV &!qD2Ifxr޳وm(Ir |7T`",2݂ /?(b{MPRj_W9xx1vi77/GNƏ}V e V5L,UJI[ZQZQӄҬEUyɧKf#qU)g~ gD8,QA@t$62ZZ {$ (^4W_pQA] |ϻ>A`:P`yR *'\#SK\D `XL^z֤^p̉ϭ~7 i7W/-"n a v>J ]lXEb:vK_(U.ʪ* /xWtځ` ؂pJXk_q7^{K?S(,MM5Q#vj(Y,SL.71!  mSNUk2+(=aHv Ic.hg4i9;mN3m`x<-)6^6X=j)4mwWEUCe{+~>q(p؟$ j)Z;*4sAq;a9_8ro\=~心 NXo4`HWՌ=_뵛g8B^|׮|[w_͍Ǻ n~2p, . n(i&{QD{4c6eɄ|Y8TڱB VBy2sZ0?sCd ;F|~ R_79[K(_8y:0_׿ӏd{;I{wٸo㎮Q2xa iYr{8=K զDj6:) Dڙe.N\r1NقVykMHPdϿ𼱋CgaȄm&iHڞ@tɖ42ȂSX"UIږlp9CuZ[b4V/ujY#?yg;[8{~ \ډk|BJ_u{ը f_<Ώ|\ٌJ,k;Ho%|6} Ѿ' Kq[9_9PD "t/E%&ٿ̧L`$2vyv MBA, E!Fm(gP< 5(e:GHi}G ߏo}3H5I[\TH> {G}vkXS~iys=Ѧ$PUqDA :m;V ]=3gb5VD, Rp _woaL-5է>P}ǿrqX1TN_goS|[&ޙڸ鶺*fū-@A w FQJ]K2(Mˆ-[ "M Q12*D8M`AQ$`I"HEdb0r@9ITvu8XKmLD|j0=n'lbÝ5(Fmz85P)z5--x6X9gnǙR9GE-k`~ˏ?NWTQO/z:sf3M$!@GPKW._MVI}j}}GfPY٤0ZD5+ӝŴ/75&UY퟿ZUJ kE0/}lB$0PKޢeQ|:~7է$˞;xp6LA@0{?O?"|M[ ,$i)""aD`b|@Uᅘ4?=hYedA* Pg  i\2,nvf~$xYZu}v87~wnU2a2e}a>U67uy&t&!@)ZH%i]UΕ`R,;LqNR*\ί^!7)T^_#>GR xw dv>=_;=_}oeuC٣7߱y| K]Wymsg=q=w.lMP:&?o~/=ozO?坫o=Z(N'M&icf:.``W֎홑y[٦>%P V ,Vڑd ce6p `52c &m4 -XB7hw1͆W&&mTNWqb7*$ld?آAPP!ȄkýIYm/{NU+lOwζw| aϽA6-+yT : W6յ[n3 ]O}x GXv6&Pydjy*B^)tX5j5*Q%ɥݡ0H%$@~I7ƛ%0e RmٛS4H~͑l}Ev#@ 0Cv^?y]?e\<мge}"sJ+i+X+ %ILDBiQ*L <5diPa/ Aa?ҕtgyF9F|~ T__~||/;{}㷻p7r?2f9ݭ-e|Rp{@HlUB+?Rk8Z7`(xvݖ`g)+YdeE#7d@G&L*a0gbP 30p2:L# 1Amgmz$ *)U#@(l*=D&lg&GEC Sl<W)mw)j`2ʦ6Ѧ̮ry_PpBII&x=R$o?/GO>uKZ %Q;_9g_tK5w NU]=J*m]SUUBH,,xt"ՁD-jD2n]+IPցRAґaRLO#aBgIPz[kQ IDATs%$'DM;3rpJ.;ol%۾f~~g%7)@uQlA D!_D WUͦL1ď~R@_,'2X8$ >ȠPE`Wd77Ν7v40&v{y_4[rVR&Q&D` Y)s{HIMH0,8,\ uaK;|m_F7d9]Eqg @`~oz3(6o;M& <I ƣa޻ÝÝZȹ.NF;޻StJϹXE]NMi݄mpӹ]66pH;jz`#0mlZ0vah6IRZDS ( ɓx*{k8V\. cmQF+/^Sj ȆaAHQO!R?~סRx`) LQhO+$ +"T ŹRd2ܕy)!b|Uta.by#WyRd4Ecck.䭹\)@*ФAhR*Ma+zv5\=4a@i1CB3h*P˂ix6@Z&pe5)ۄFK /NMÌRLY;&8jTd8@xqPgF?_7/ y%"sexGF]hb; Ǐ%+Oj21kB1zc7iŹtBN->ϣ<9甆gZ\v{\d*o=C_Nq͓Y/As GgyU{sN/cv|xXn]}T\nw_6C.5Ka` -dF-[-Qw)BP$4B0jM#0碌X@}N U:#L2b.W\ F;_Cpg/^q89|{o%W\뜿 :ϙ}mTJ[ l2yGLIe(bSSۆyI68>jqНϒD bClDQcm7c[a+LPRΡcĆ/a3 6̣ x siұl] ʗV^"ޑ! PCa޻xkJy-W\p7UKKw[J#F FsHUr+~3 >v$TtULӴa"0{m ~J|4 5q38I<7l7ISD"hpѳo7<=$CR "E"Ue"#; ҅F!"`Zc:h4 ,dX^mM7 ֺGqTO9wO5HOS:NoQM3S"-9H5Wmt/nVQۭKeQ&QBB0BP0Ii& *KT8'lTu\r/pW8Cl?Ħ.#589x|Q>1"Sm\xcOOKgU7>/|۽sVgqOdssbOwj/͓q\9fl!Hnhi⁘ X9?0" sX9E9su.c4a!@`Q"%AUFMNTZi8&#NCR * yȓǍk6!\U,Q.+oxzDWϣ<4FwֆlVv7?BCۤ2+ؖB.5ty0dY"g<@6ȲMMtwuE6aU([i{!OW2ndʼnչ$!,mgJtaZ>扥^w9iv<Eِ4؀xļsA!0‚s_(}Y+Rf,- * O?[;g+Ko*PQPd }Kw>xrEݹѭ Tc}pJquUr]UUaL 2<}IcEBRV EDH+@,]Lr\DG!&&׽3~u{R BpDFLI-P Ѥ^*Fn-S}zuRմ qD0}G=f0_ȩBTSgROl46( iC*;ԟJhjDߧNv]} P^~67(iSEiJ65bU6u:J(кrޟܨGyse7OBg.o\=/q2O'&K٘"Ua?}1")T!Vg1"8l0Iw'؝ 1֐!lhwV62lѷciOogömƶ.}G\`걺$ CTT~DPWDJfXzJ#jQybVPJSJj&#[Pr 8cܱ}j/TgZ[*S~!("U<{v΍v?QZ6l"P`;OVuJ@i80b.%221 P09Dih QÜ3D'$]H{c-Tjېl@>H6OJĝ#"mP1IyNbs7Lb+]i)i<6zocFhQGut>mF"Ad / $yd2>E1ȼX@88yw!ᑠl;6d)y Z6A?24e}N;6 ;̹FxԴ [٨D3< 1!;QB.YޱVm6lA^158;Qu&0*/Ρ`]Y ƐК"շ<^"h}yԹ +ȍxkc|`qI[{rǴ)nn0@$饍h K.?ǿ~!C{^˨f+Ms]1C) U"ϡt#Mt`Dr$;E$ +q$]JMvzΌzbr ̞띲{B0^tWG $dCONڕVkH#xv/λtr9vNS{q5@2(ATPPdgOUy0˾3 ="jNv]W iE$N箂 (w&‰uU_1yLƟ-Y"j2%>_z.cEڶ+_)s d7V'}}iU1;Jdq)疀Y l._hJMX.!vzM,!XOPmۂe-ەllmY^٢t1CPz ZY 9g{m`Zĥ%+(cΟ/#oz+]U w\*)s +Rjz fcf;M_;p?]ZQOf9?ՅrKUtQi0 [OwҀ5ZQtgc=˙m5Z fۅ#ih_jY?_m`c8SQAq%Ld V HۭZJ9Gi$9TI\(VF C<`mWE2\P2A͆cyk#n/p5f撳M`Ge20̶iI N6.$^jP z "ߝͽYR40 l#Eu)s|F&o[FY-W-P6Tl9;z{^[QT% Wv)R=oχbZ&6%$( L|΃p4KC@x_R9i[%MF΋ѡZIgRGs_io>q9{i:!l*TQJaF 88x/*̠!\cܧL0oOSk/VCoKvmy>g3FTDN`-0!T?ާBr唀Z5@Q\A/n:Ѯoێ2v `+/H#K?qׯ/}kv-Ns |Gk~~׷|/ncYMhD%3E!8q^Il)U}j x)ZW:J("HPVc iM1W/.(ɕu?/?<|(CFPq??zc{8[vEѭ(W|ǿt~zox̕^+k}Ms((I,sy|Ncvgn߁ˎ>8 c]L־;s%ngo;*E KF[ T>ֆ]Nwu/0ȷQsa+*ǭ"IlD!ϕnwG 9#bXޞt*˃,;eQXSp{&4Jldm2d JRaJFmvq.W%' In{˰IRF 0tR"Z `\PQ*J@Eʑ줬r "!Dk]RFrE^ P)\S(̅{"G_{!vE/h3/&HtЈʴ˪ȝ* Z*Tp+i00P+ <*E.v['-cƖ;V AѠ@*O**@ DHIxՁ.\̍kIis fF4UB{NN#,W8zmV7_h6Cz(TwW>uL9SM *&]ԘHz@ {3wlWzzmQ9ܚ?ۛÿ;QlmFƤsm{=# {My뗪֟Ys\Ɋqv_sX࢕ .:6h\(q47[(Y>AdCkEe"M:wIZJ)ki)/j\UO,i-3者rΫ(4I4 ʃg#vT=,K3ޓ!P@)8F}Ub() O"x!AQ4͝<@/y3W5'@ꊬ7}#sgZn<b"@D@uܑ"WmWO7x2?nòyg4wVz-?p|ߏ;6&Wo7aX^+͕ӿGI7B 9~;|o-G7Z27/ۃs9=>?DO?:ί}z^cn 6Q3.u 11'K OS;ulj4"6Zь^kufڵVCFV%6 P\cIڶ)<maW&:^PQ5oci˒ N;vpla;Ϙ4ϺE-E0i#TC6ȸdF 0g4 0g弶SZ+J %^S2)DJ2M ]* @|=-HUJAJ\%RXȨKA4)&jFJ>چ.@5 {M 4m&L[I;/2>_>|s_XѵS{nů~,}=|8.|I|??SR1 p%J}<(<%Q#]h+)E|vt Q;qwt& #Z젟mlXݲBpAHJR@M?{m6XKHclFDH6ɆҤmlWW/g@lC[i8n#@XeQ3k Rm}t8ov֙yǫ9W$UsR#aꀼ"8DC477%*}=. iC(L$$lTnGKOFw߆DUdFNBr 3aSO'u:SQ3K9_}rخh 囏S@r럌Z: (k!9ЊS7nh׿bMbŷ߷{$3[{k4;- tuw|+Ww]~@薯~k#v} }}\0ş/::;rG!26V;+maX2Bl޴ymlVeݹ'JfR:OWkk` FZmY ׳ taު5Hpkuu96k aY8W5[6YE86jp=Ik/IY3\ g..P mؼlw (Rgp!xKW|%zޫMx  WB°2ڐ^CP)h]{!F)5"xV'X\0&9rxW(!! 1R~{TUUe 6=r*8i+x!댉d*^jdv?uxJS={i ۹)@}xw~GQ̣xpR\[:YNEȕ#wB(9Gpx"bӢv6ajslsZkR zmBFBvlA5$aCk#3Be -y8bh&1NuF 62]ZIINa.ظÓ>l o1(ƀ#g?o1J+])RNT@k途WymiT20D@MsjiVK%ce4\)λϗ'1 0tI[,Z(4IÀ ~??E*O*ʩ6D 00U+O s\7p CCmr: ;Z(G SΎ6~W'Q1Ák0|s#PO~>Q-[_k@k $C:J@"zm>C3 ?H' NG_s粬wvrJy/#ufxXx'o_bf]_ϿW~7?߼z;9|Oo+?(cg}/w{g['ȂFi94-]p6CvO1ʑ9-(7x"`@>6TY>\uXq ןIlؤcv.eĆh;C6,6l"Z.6B1sN&ESb IvLvw?ɛ&]Mf(llm斢lcKn{HfҾ*^JѤRABMʅNlQ;'+"hR3t3QQ& !12ؑsr9¼ɊtF8TW2)#}Zd)3)V27Ѯ` AZ9|TBJ E3D{j*j ?H$75LsK7~|zrHiT<Ֆ1" @ * H8Uˢ"/J}U SrvcWar\{VwuwMOLHFd6`l0`v–$! !1@ $Ā>~ >/da &@[-iz[=?G-d˜GtOSչ:{_u0 yzm_Z'PMFH/.^uV~cߺ tW^MO~oK+w/7n؟?['G`ea!-*>=򥷝מ ۵^tG BMWRhtW@PeUS WBUkU|jVJa{Ͼ^.߂#PJtk۵1(@Z\+'ŚZ[ՑTj@U ׆z DW5ƽDT ֽst??BPQ`r UjqeUZS= K b|\6UD3EáE<^f&e!љL zr]Ʉ {` I` -?ҟ{T _ i[}>R7FOq9[wY:yWF7do%@Pι_'(X,GEccknОWA)PUT !) @ nt&\~ՊuVM7Ӭ,9 ba,Rm fd"IAeE69 @ C,N!O¡,]سco~=q7jnk2@q@C#B#jUFsnF a!h [Zf3wGr,')6NGDl]~7>߳y*-5ϸ-?mze ǭoi?7?UǷ6y^%^ww^|z.}۞w='Fg~z%nrXgP; 5>0Ԩv=>kfMp\BhP+{C[z%I2+Z3HuJ5waSRswvOɟYj?O?]\\<'xw}@gyʵ_Ҏ'C#G&'&_ /Wѱ;_ַ?ztsn?lfI~j7;qޣG;;vO|ʕ]W_vُ_WȅjVqd~^عsdžqs=Am\:pbb5CeSW+MraH2М*rH3MCUFC) hO!MuEUlDJ!m@3#j(UA} QWjJrT+G)0J$@]Tk @kYOkVB* P¯!5:@>caiuO=N7Tnլ+Kǁl QS i$c SpmD&xCdl؟l˄:mr&&ZSJ'I;w_K.W_]~{Kme/?vv_V`,XXX|ԧ>QYHd{[cTJ_֗il,U@ƚNhCQi+z+KC`" j-AP=Ua%;+ :+7р#59 eX#FpJo[U91B} 2A&TQ/"2TΚ pXEJ.ҁ`ȱ%d]86A f&WXDa1x߼=o^ K]P @ lP'1;($b9+K+ LL8M5^}5!f5M^ sO)u qŐ,L;rg%/fX4Pyɻjk懷T+vxԖ-& Jf{>VkblHf%w,䐌.,fHj"Ss{ϟ Vxp|44vO-/_ww!\9akH;_}յK. syůů]/|?Wg>+<{>xy/_;CW?~ݏtPo?O^O^i;/%^[V'޾jO~{^ؐ<S e3"=w`AG RR>r'T3CrjN5)dCPCJRq1ZkRZɂ:76R ANAk v)Ap. Q5)HeNp *UUu\1U/V LJldA 5 +l[Dfc.eq?[\vAi6DB&@ByVdȳ\'&E!E cہF$V˲w]۶X\HfÒ=-9A]2 Q0L9 DZ 6]U%SHYZ$0vlW$+K? JE" a@ deMiؔhEIXW9m{/.OzbgLj+ )g#.Ia6 + ~_TP gU}VçG hsk!ߗ+﹊{bCO%w NjAk .YI:1AS `.xL'}HEQN!IY*cxq:`W'R uI2. WZ*4Xz@aF5h1XY6 c%-Q$hE>1}{ܓkⳟ>ٿruJnxu_ʹg ߘMnV9{[ jW rt2—_&zeuxs_[ޣA{<Ǖn=i/x<,ؐ뙛;4ёM70SZĊHtTjdЪ UZj9e{ʫjNU x*uH匮:ؽ0w \:Bͤ|Va#^wĄQnACX){-pA4MӮU(Gxl͆NYy;LMg :5#\/uԇu4TD:5ݰ @7,%\m&KZAէz@՚Y&,&c !HeAr!`fǥ`̚v f00%bgl0,HZ(1`:$`  9{hf<| Vލ@&3CܼG}u+XqbQbeo҇<܇5pfDekiɷ9-۲?N(kON@.qO"KDuI | I P90cWv7}gqo_?8m6R/֝HDZ։okKt<FExtAGӡ0A+k@}xAuݐBuP#a) 2ruvE׃ppH|2wN:5:6meu˂Ma $,[8`:V.U+ĐD(a"ZV!]/,&1< gvk\*,~uBI8a6ƶ,c> bp "|/iлx#0`Y )0;Xtn?WTlkV,}G"L70mr.< k 2Cq/>{>]5Ó'dcٻ&i{>Z TH<]D9"S3ģtpS$bES۞?oWۑ?^RXV$Ơ* L[Va$ci7O9ϿQߔaݎ{| )$-70 (8)9>V#vkLB4oOgyQhN]CJ9ccA?ȺYk Q Cc`p`gyQ`|,UKTSw5=`mzGP5; c xe}8Rah 8 Z@?PұnZwt7lJ 0up]EqBge=>]`Ypr,R)aYTQlPٶ, NBHTt]QJZq~|hjf X[tYsd#T<8uCB ( ?^rɶǰ$\Hb0NZ@\ƱR0`}kO7&rV/y~䆛co\ z&IΏPO4,U ԇ6{+^[6Ogy~{00_?Tހg -`0;K%"hUv 4inNzUGC'WAM 4kj|2)J42P ["M7ݨDI) >:7ZЬ+aTF`*թuG*b $6R({p5S|PiNЭhr`a?[Fj)KJA lg&2AD$m ۖ` 9+!X9$ƅ )قlMYcC~~p>Ԕ8T3UH9DڪIV A`ceHSJ"yP0LlY5 $) 4t_;{m<8cu|4(hL~è/N/*&ԝO>/k@,a* (Pz$\Ij{hBu[{d5:P.N'np25 v @) FqY'+ج,FcXla`*$0x0v>P+t Nd [QU[<᧝&mݟEkcI՞Tmk ԚQ6߱[nNk-?knz{}ޑs~^ (~Fp.Y܇2, :hyʮÅz:b]uUi3ֳ'ze1Cu;Wجm:*P%K:g= Zw^w)&gcJ{:!gyg)9Ua;q l%C ?2˷ޝnGníNYZ#1@w:BVZ#I)ҶHHa H0 )=fyf7jqFg(UbgVeܛۗx'[[NAC6ac`ϥAE&\6m TeeTVjdH<F)6bE# |)_!ۀ!-L4'WY{Ua.ipǜ~XŨ%M~Y B(`&FezɝRSW̬wDG|lz ֵ7cґ@l$ 0Xd+,$ z$A[w_q;)fDӞ,X6Nm|Do)jcO[[nj# G"Agy6 Nڰ?AQn辞2RWNA SaF@([H 1ƂV] &ǵ=KqH"]6\fA{l|#:J*,W5bhB{ԮNUT8<.@V=JA3謦$TЙ Y!7PN9tC:rT{ ٩D{L4B륃a?`該u,Þ ᣷S qȆB8j< yABM%u)m&J`֞l4/5ٴT N"2ZbY0m32:Ʀ-v^(CMA1 { ȘKl} ,KA"qPd xpJUXO^ljXVr۲OpI#OļE6&- 9`PĀؐ,Pt!bΊQ= )n:ve_Tg̲EflBPo_Q",TA2CYmGVDCX2! d_>oz]߂Z 3cQ6dC~v&ݮs1\ccJJ Gu*\fxp΁aH m-:fgF'ak]Z牲\ CVn @>\UuѦ-uµLif$Qu*0PevK{v{NN]DtݮaX{v\9Fg܊ N|Ӎ_=>ں7jx i Ra6|mRPa5zHS*B$ ab‚`F Dz\,"v󣝬 og5ZZ5iu-{ԶZujʩzjcc{s0u<3A0#Fj|dG} _|ߺjFZG8U IDAT]<霴ꂳuGX(2أ/ )%06d]ol ϘใcȲ* bJ`,sPLPY "@G ^3.@<R,@e]%NoqضK Te"Kblb$92GV Sb)rWs궚Ǖ(ba2!tonl`zZ޻Gp׆QzuGِs=J:υKzȪBnRpT{af@\O;z^KA4kʫuAS' .(I5E@MtVQPSEj"mh)ZJ)UۄڪjaBC/츤X)ʁzT]:p[y4ed\9봳Ut0nF@>gגI$4 )0DIF,0dGPZ0&dBHX61` &d<7ahvsyg)+NޖN &̖*v,Ilymx뾣,ߴygrΓ@:(pQ6RЙr1z0w?!M3;|0:3ÙK QNvlnAVcwFeI"3)0ۖf5dxu=&pI09x@E,GL&cQ "*G"%#p{ȧ́$Nي_{:.~ JSSW]O~o޹H:?R捆gx [\}Bn{3uќ+M' '|m؟ hn(? R<'&ڭ@:IW):+ s{;eCZAEiGg U7CbHwڵ BUJ)K)J;i02M Q4T-`N$y,-k+Kw(UkO[ =Ha:}u`[}ֶҩntvwVZ3ң *RPU+Ag׮Ԙ[=A2yAEL̰lI9)/ &c rmiR) #°N,cMQ@J29WV-yj,׽80ޞ÷Ywh%^YILaJSf.@VyA)kA,`nZw`PaK<ыR*ڣVL(  u.Wf+pcw-lI{v7/ʳOlRjr48ll Q0AXŨ{{qʎ2#fvoXboNj?|m +xw㎃Z~][>)$i}oo;\;ky6򜋂󌥀 9#ZsM:\$5qt%sꖓk-dE|g)q'1;vxɳG'hMMXv?OLzq+zۧd˖6)Q|-d'}V6p灅{ѷgn?k 37| >377@! 0&UTrLfݛ߽,j/y{ jvPkj1p}U c1PJЙԫ먪|+\t2houT/:A-pܞ;J^P㲜Ϯ&fU {GjF/*4*P+]#E"h5`4mZ JÕ^;R6("A %L>7YܪmG cD3"/:q`[dP.1nhyTP-9=c{>ؤ g)vBv0~O`l; ܅,oo4Qun2EC|bTZ.Q 6|28Fld9fg_m & 5@ KJۂI`2T#*L]Tp ݬQMTng1u39Rhb Y[ , @aDB`j0ٗp|O1oy ~ZnIVzXl ]Yg.Ѷm]{£w+N!r]'N5f8* _`tحP-ߛ Oq/'7 y˓?2 WE5f۞ZkDG+@5|LN*փ4$Ztt/T5 G(ioniJt?Q?RŮRr) $ 7(mN` 5wՠ+aPߤ -ka/T)]ެV*$iguU.LXYl#cm"6$FG}r`׏ot$]y?0Xx͋3W5.yV?ő[-T <|(B%*q)3Ȁ9@"'h &Y.UiT&>k)^*5Ǚ"W1 ڔ(}-)!$ TfzCLTxf `IOn"}oˋiq+oGywȞAݯTTW6ydu=/>UrR,u/,ᕚ&q|cQZhu5 V[uˍνOڰ?ZyK6;6A-CV@τߩvӛ\I(;WʫN`|:at/o^U j ^-K:+V0`y$ӚZ횚DK ]W]։ ZczEip(zj 1 + BS+ ܡ:\^  qD8>| .{w'XɌl|q<_H}*G|ǫ[0|׉G'r='Ư~;VpU\8UTEA >{:3;:ZN-'ˑ:jlB6LzB0a"%qFZy9uQd4Cf-+DscPf v Ks-AYadZRAMpLwJt7Ӎ5T+rt{ݠV *< ҅@ B``kLs<9>u!( o!pl'ϧ0qa]΀u0dnBVdAxM-}--ҿIWW><G]rO|Wԭ7uDHڂQܑ MS[Gbe%# Fy};1㾾N?EO>ʉ333$h$]D3BkU tum@w:%e ׊+j閕M#ӫ:a:*US] @rzkq!\~ʳͱ15=OyDU6U;9 U~t T6$\f%cqFh|81~)}zZUU*)TG3Zm!J͉IAg˺^:(G(pi^!.$"I;Ns]ȰF ӻۃj9FOjPJiΆ˻jHlsc0|rmK*G:i9=kNve5UUVbR+::]U4F!k<~M;'uF:Z 7'5+km^\Cw[?Y86@K+)`\dq2SQڣ84KHZs\רQ%v$8V!Id,X k!Y8dsw| v{ߏ^$Jc|I (\Ѕ)'asd})GR/_$$@r}/z b7kl-0DuOzEpQ\(X9@@{ 6=젬W쓭 ހm T~a,< }r>%%86P&8C1 /_!zϿN r59P1kK>[G.LT&;g-q׉0sEY͹S'qrƺ 0uZ hԨ\LH:܍gDpGJgt~{uG"76 $61I!R B6<2rze9]Oo?cPxl)vOޠ20 .깃0hWǮp 6FqA!fQ: otlV9aL:(?~"CeIX$@ pBW EJcܽT&+>lW.宪 M^>ڸ*%LjEAB9 F0*P^()ˑNz/|(oM(x )k/ҫubP?8 2>ukki#lܰVdgdPjl'ĈzR8@HKd [a|LNmp\Z]{RF&eXRY?=w=tWdJae@ќ5`r{3Z)O7`9 N5#:E3uC( <,lyIr0AًùQ2@ 3Qd(8[!t AD`}JWkH8 f.r]$@.P$t$$8l 7E2zz#VnFz잲O:z꽟wf_ZIK7dVtNhjoU]%Ǹʳ)6,oAc踯RcQ,[ZPi `v/_ңG!">wbbs=i+Z:2ܒ]Uh.KT}tH]3̾{ûmEss3(0"|2R1p0ܑҲBez$tZR]WPDP)^3 9)tU@q]9ѩX*/),Z76t:5+57 qcU֔`l%!@Np9$XHKRV2Y !1Y7el [C`ݱ1А`;L1ͺD;3?lTD#),[F%hB 2$X%t%j]&C0| ഏܵjZ`bFA62RldGqY,GB,l0,-re>`_w!"CR@86[ǸXa* c@Mb ȁ!6LK".(d=}kN:i9 z:kn^+CUDžhkBQۓF(;Jj;7SCN% 'O1ut}>cq__'cn?㧎o%_ yb<r=vH DrPk-@gAG̡x^ *LwV7T)0$Tjee :l5)fcr.TIß(2:Zk7sP{Aq@q5).[Sv=$]8:hR .󕧔åY:tajP"ŀR:쑪p@c pH؅pXZ%faL bK$%a +:+&r )]|Ụ<4jhȉq1>&'Ɠ[o эm"9ȄUJ%Is9sWZvr$&* H004]q`H<@H_)X0?(A>Eáw9 A$Yg|p Ny9#a3* \m[pB@F0>=lV=8}MF߾ub5G#Vnvꪫn(8+/cc=h<~766_먠_a_5\o\.o^;>> s=HuP _GZ۰M95jC Vh_gkH{:AReE @jAMUʗU:t0Q*GЬT% 5ЧtZ!rR(+JGʊ{r" )k=ʚV~ #qP_jo)( Jw +:M4Q>یJ* `ҡZHbp]},% qIbS,C1 @ PC &ف:ICNCUaGHHG1v@_Zs@vX*:Tgwuj_nGl>.~O 8_o- Hl `AȻD9Kߒ"&LF03t .@^NLp%dF&N$ tH Pvlr@AB༏ߎpzr{q㮃jfȜRVχNRsS Wwټ%lGw|37}CV~5\ Q(_^{W\?o o9.d @!|x~TO SF^;%z^jF*G qjhVfsC']a`vX FOnǚYU fFR5tu3 {r9PZ()AG 4R&r [h64N.蜠̚aPK5tcSSa׮0\jiP&TSei"X+!`|Tޚd fKV.#dYqJ2> pH nIܴٴQOF2mHU_z+CYlFpTq F]r=TH'1  ŀ 8QCbkX'jȾeE0wAj`o1i=u{=P,+TXJrsXMXFe_%-Js&H)4!DlA آ@7v@+e?+D(At8f3PQ5H8#{_fUY*p6;(o':8ړ6567r)vH)Qe4ܓ7#A]im(3_=Ns5ubQ8Fĕggckkk֘-o+_W|3jܹ}R0Cm۶wcffO'>=|(vlا Z7Ƙ7 _}E}s?jkk=t落k||;餓~Y|%|Ȳ|?|+_y߿κ뮻1OW~|_-V\s >׃cSsSP&4Ggꮟ MO @'U E[ZWwUF@ə={J̩RE (i>ͳ4R^ q'J9>j+*`BP-u' V5R t' H•33yWf3較܁+TuuM"lɄPp xeQXmVB:T*SN5 ש\"PR^FjU*)HkrkQag*Uq!Ŵ1jP5tb>]@n{#ysnHo~e]O~򪫮K_W_Whmo{8x}kg}i/踣 ju kQ-cS9;k9PiǶ8$tewRUA}9ePt;ALjYGZR1ܺ vc @ Hg) CT4 `&E>p Xp ꤫csJQx\$Z y𢠹yZu5_d$&q$)& Z[k>$ppE'e_FJ j40<̵Wu:vyƱ_HН)[K'mr8s9ւ9ƱMSJRd)@G09 A*2J5S;n-n> lY ===|e<̢:thÆ GA,..5 !]z'?ɗ\rɋ^bw}w\> < +n??<vT 9;iR*zb򍪪p)TJPAUuU FZza!:^Ab[kmhSêB:|_tԇ襤ԂcH.gA_ =_GTi l/@bQ<%U-ðfi v0:%I ;miF:Ӫ4'#r֏M>;z=H'eZQg,Ykr2Q.sB 7h4PTbƉiB򣻢t][gV)xD2Ǭ$iǦ5DZEx޵e6=6c^ & }>{Q"`Ikӌ\R.r"ހ)`$]{Cp>#7NE]8%AY #F%kش 3"чr[̀ ^ÅAePI)i]60˝ #VnoǠo~d?O!wg޺Ĉ,HkQ>Əno_CշฯRj+|3{; y٫x8gdi˴5֕ΡC<8;ps/ѸoDϞߺuk֭[珼\. 2}@IQeM lSͳIe-PСp&7pe]O|)l4 j4LCk5RR$kH" =QxLk넋bZ'I ,[i-h1 /„h9JXx qűjPUtVx*UuuRQJbS:B4v@ܞבD[6^d)C ׅqȑ|GyIAĆɦ&&MiڦL瘔Lg٥Wz^wTJJLN-/¼X^r:Ui]!J+M D/dFr,CnX1ـv=[~q aHTswqNN _U6>QNbx1ym"K# Kt.C, lmҚ 9,A>FpY\.y MVQsګ ?bp7z/7yC'\vex__'cד?DsbllLH)I={;10+(g<J?J;ۿ6sK.(W?.믿^8xg]+VWW/v+"/K_7o뮻Szf5cRj߾}돌\uU\pG>~~UzG>zn`t,m(%@um+4:kUdRՄ C=6rP.kvWC8]өVՒ!4VlhM+JhPeMRhxUJ !a֙.́JTe JZ0AP[jťkkUվ~Aҹ7shKP)&e |:M359Lr+\yp什$9y/F/ɥ\UM,9ά5Ďpx,5pmE #JaeOUn^_kQ䧙z^7'^]-9&.o lH0W%췡!Y` 2 7Lـ5~;D%@9#qi+~ &E1˺%g_Xj4܍qQ(r(<`s`%&KCz d .Ax!RTcb@I!r;vd5i>|}{㿾N?bq񏟼}{u:I )7oْCCC%۶m馛dG;3_U*!/x Z=i}c(z ^pW?%/y655uW]qO|(*b!Wwsϝݾ}oY.nar۶m]tczJ_q8NSVLgXag +jh5|Vѕ 9!¥RA1wDNG+@qYUY;c;+7*j]sO, 8t(QNaD+tbuJ0R!URR.-(AYpOAxp+[]0<2Yԥ( C+b<~.?W_{ظh?5KW7M& AA]8'l8cqD1N6ȉ0 JJL qy%!NC=gnDyz{V no}=mZw57?oG'&V{v3aCť;3:Wb~p\pQ`f׿psvkuinU ͱ (:^VJꤣDU3pI jCgT_՚A9>\)QR jr\IgUDBS%݉ʯ%PP?8k]xR~PVӏs;Tk:3rshH)oJ _, tP¥#&b57fzl|N՝Ootq\_sl49ϞkM86adK^daSk3c,0d3 T qbG`&8k2SZs{y>qCfU~ŸUgEl!B?P 85|NXt'T*~m!=+y Gm˶έGeQA>t̚lAҒlyGAA-o- "e 7KdT}#?5_";WvWGwC6f̫߿7*r܋;?;^}Xk{wΝ'q|}zZK:[SSF*je(u\(Ǫ`L#$Ic*ThUE"1ݠFJU(YKN"a!0_ R^פ# ͋w+u%BUVÕ ^e$hujjZw2P7J4OBМ zHvڪVqcqkq^02y\?I~Ѱg]((Gd8˘9L1 v,2ey.v(g0d68DL3繕2O8Nd-I RdYhKn9y#e6 ߲ ү:_\Rk-հs{$$J%r25*1E`Ax|3uw_Ssr6oۿ7^<}J B4y\]m,}_tY3S00LJ%G}ٹkWe^>W#uGs,"b1<<|9XXX? 7mtR}H)oᆣ0ݝ63ף a{UhPkR8c;J&UL*JYiZkmE"]ஒǘ=H/P*W;RF34\[՝:fw5ي3/~pM'{o |-|ɖ`DvP[0XKE>GCl/~ RFsvڄ_z?9=s9X˒97GGjJbIy`<T&@Y'thRKJUjP mi5MU]pC) ?hVcm^s]ZkmunCIΕ)SPus3Bȹ H#,AE;"IV(Kis%p[/#a}=zࣜ'#{n,ᵑ~5Рs0&W-ШD; Qi_{* ɻ߹w%4wˆ=@l%n03w =H[ fB%,qfӅDf=Wn&b^o/UT#h}=J>ʉ9<2-TJPY_': [WJ paTU+_I'@Z)h+M`@mZ[2|ڪ57ԕ܆KS. B$ Uc\DUP QיVV))jhir;N %>SuŨ Ӓ,!I7,+EbޙsNꮮ걺B NOAOmm>^'(ׁ{u`AEnn:̝nc5t 'ʽswVĊ+VDCH)ϲl:fNĻ7P緾/{ǜs F LMuِ:0 !4ƨ99G)d J5&bowa)rYf!Z]U. ;*ſ};f;^}x䞽'0P@ ^W |>9I^lMӿum>Z+0L@SR>p3L 㯑=sב) m}c8`sS.|l3wAtGK7ťK;&*f%R;YTS=tS-3.::UJ6\O(rdE3C'(}spL$::I{i."@9\/#&+h;4'P8]6Zwbh%۔A&b7!c2i=\j0?]JC|%<j W6u0-5 kyN6Oժp8oy0q`/cf3Չk5J>W9UmMḮ+~UooُO侬#ORz=qr⭷+wB3EB6 RPHWU__j)s\.plsZ S QY^M\F2BD@i8@@S%( )@Xpi]f8H],ѓ4,B#ffU rX 7dcpP@Duh[4l&fdnOeҒҝT# A d_ |5sF]]+Z]9^q"OckV"#Z阅E/.xI/Husr BgkVwWf6C9EK;[IѯU_ ;^=6O]0jE?y5hۥu"_3h\o}u|eMD.B7/r@AZMu&d6#k+OToWH-|ѯ l(r;e6|#V3lWsР,REU6"M6LH(|10BF"k"1[W.`2;T:1% 2 C+"  "H8B̡D,4mqfy,̐X/5.癑yUEhi'*q HJaL._5~G'?kե:!&Z!7 6u:Vw<SP筬x'Ɔ%믋~=W:r,Dv[;̙ MxpFB77׾--wS~ra[=L ﺪ|KoRUxD؂(ͣg L`Z&ΣvbWy`;³?>ʶ\{=lR;X&FX3P :G)M2, PNv"H1 q1]`XmJc> TQ"XrP"'XDMIK1R `]y_Qw\ 6:A* M-8 'PX# fy"(*شn3&j(]#ÑlPaҥKltufuf m[JXnp,$D.%0ra|yݵO7pAh4T5K|SOe0k)`86IBql|t i 2pB?>ʶ\R82RS@\S0B*ZuQTJi?vd|Z\Ҏ8>% Z$ %i(bjY Bΰ>rGn'<Ps6) /R\>0q^E -{ŞUZO*W4DEg>??7߿4Mo)oK_o} 61wآ+~1u־1_:{l6o7xӂxMv!b}m(CpԎ}#.K"h!lk7u+ڒg !($9igSpfUvL&k3w E4Y֥Qml%HN(*LqST3,@p!Eb aKFq9C1b5M7]P*BBH=d#.)6|B!N<|sMY}~01_y>S͇wiv,t52uwUԓȨt{s-E L|L0x T}#mLcP3_nٗO->?RrN7_a{=I*! evHyy,T( fDPI-fx.3βFVtu6ZOap〥ǫ = ƒn8l֊3Z#U.ಀD5[;"Ge3KRlL2h6.=Vw8pB2V`P-cڞ?He'&ƩNgZ& CZv/V34'?g3N۞:*BJ Q\}/ 0qB$1dSm;Rmh]9u U9jBZ<86mtdp_l~I/>^=slpү|}o}eyg=N|nyK癛_+G>r>ʶ\pɁ;8#CFN:-ld jq5g2\[BQ + ( S2gpۤ%GJTŬּ.A%Lhy:u@ІC%$jN<`vY$yDi5Lxȶ'P6gm":_`qa"Xғr@D~|k50U%P(P98NJq[^1U.Dϸ׽sNdhJ]4 y10e|_ 2Fk97 FUBK邿s_]}?ͣ/c-K_Q?%Uo~GG>KhNj^4J7ߩ|;m ,s!14\ļ8A38,L)X#83P?52Ԭ\SRs'4dҜ ><ƨk\1 ?05Tf E͏rwoz)0+*~*9UU(`GMQuNiiv=s6W8URM^ׇW^,u]w/}'Oo(y@!;>ӈe8msdpI{ώ.2VtYQ R([y%"9+a!ure G9I0CaX\&: m;nX؄1"~oa%l 0b^l)(hfF?1KRdlBT8 s8!C}! >5p jS{fw?xd߿Z CTMab㈂k-gܱkEt#77'NV̡/=? G^zW]du>۟GU_{_zӛc?6;x0\YY{Mc;O\_OpA^~+~+]Λnz"^3Eʼn}Oc;l8!eE5P͸i2[ Z.AGt$ FsWL2uDOL`4G:b*3)g*S7M U К7bs8X%g&d ت IDAT#_|zQyle?O?o]}o|o|#T'v-oE/z>8v}Q~G#ZԺ~}#O/7׾v~ۖ_m16袤-,V @enUʜO/U Vrt"q`L)Ndٶ9 :\& ([H a<),dN$h1ZLD`j~J>#mq9԰m0z4XnQINr K0X0Em{1~q1 |2q0dz>1c{+]2ZQJG^S9Mf#WVut^kTh bc\ڋYo+/]/H:,]j*c-=Wwkcۮc EqQyj{{_'?ģD}W]X߰O'];Oy7_x˖Ov;"ѓ}3s:WFL()QM ~EkYGmuE|O+=&'X0Rr ҥL[S)N)f1QFmVe6R܎ Ce Oedgdmüri=_I>ٱ1'mI><76d03&&j#*5`!o7~~zKәkj_eP7h@!Fyyl.LQ'X雲n:mqH-*:nᒝfm!6og&~qQG'}>3~s/Xxso~siO;׼|e[oW Z\so$/?w__+ZQ3r֮ Ll$لY A{x#Nڠ0j 0 "1(P 5W Cd¤b$S rk,B126R$U Tua?8ZhdރC8*y98>¡7RA6ec3a.uk0f#ủqS޹O鄚F[Ď>DABku[ZvqR6ǣQQ;^HTNF#F-c2NOԨ nm5uSA5Ŵ^U.Nכ 6odžť_y|g|x~^+r7~+^QFj g/~ӛ>Ǐ\/{kOn|z{^H_}l]sͿ?<a@r3|:]Nt҇lPR~Z6 ڂu݈ bWB`*Ca^J~lmMB#9i.Rni&, NqJj_:%JIj~S 3 bf._0"!#,ZO "CFY66gR\{-kuVex0ϭt}/O;|0iM?휡j+_{^3+ °* HQoMp;o;U뒝_ꫯ'` #0FsU+!?5ƃQrJkeĠ>| {՝Ӆeyi } mvl|ť_9ʳu'7O_E?䶜g|s/|ŶLd4Q7ANgDm#F3O@Uv8MZ6'mX겍Ɩ5)EY){t)J?3n 6 [hi|ȁ'S٦0Zxm0/-H)(u5hI;{]LEyU&e&\vIV+;6T*"?޻u21^Ҏ3ꆚNI~g7Ǟԗ\)O>^<ykoxgngw޽1ۚxZ_wϻkpՃckj*K5 *ˇBWt$ qd!Cn}>qheU(W_W\Gw,N'jlmvFlOmqQyjCkO;kko%2 t<-D6X/:aE')A*C&\]K-("+bAz bB~g!. 0퇌064: ekŞ4I%dTpQŢc搻' WN bӂti6"'Q'h:C>q)C64/.>'W]G=Hnx2'OUi8m^9ʧOA0a\c8XڪEQܢkV՝A`6seURda38Yej4b<ݫ.Lgm3bүl(r`%y&Bi]Fw"( FG" dZ0byr!tyAA"MywvC4fE& ̲Q/Z.X':Ҥ-QpܑMZ 说pae&Ų1CL _!N5u"qK*8+P`=朤(T@q.T<8Z"H ?bk\g8d3@/epG pgI9yɥW^z =?hn<bIbL`qLtEz@n~dfueCUSeU bcun:lmvFl\_\uڟme[.|I=)Y ![6p7U)!qOnuҬP.qXKc,@)O*elB69L픉ǁH!ISs79 [l!1l}ђD:'iYf AV5߁|$V'[@`ق.*j)B #,<A-ÙLIi~UIܭm-s Roo{g| 1]zYvٰ ]%lP;ТV€:mڹS(M1PQth]Y4jOF=g yƑF}8t4i&%ZYa~gGٖ _!Lj&Ŝc~/ٟ}h7iݓ2A R0e3hypDM`k(GL `N6܎!`m# D.B :,I0@ľ eTxr(q@ "/$@fU$@1l묠s;Tyҝ[[f63 IA&vVm 㣯ݼY\su 0֟\qa-nL $zlTUn2CQN\V uЍ 3'MULM0595X]lmvFlOүQn/ t*sHL1"hk""1OL(Fv6<iA[n6t2Evp*Ip‹Au3)X!e՞k@㲐IeRjUi3˷dAƣx3MX1,ˁ)={8;q,m89nIERu 01Rmm# ~pqNJoW s_/[Χ[_-Q_;dy#҃cʛ;4yl0 cj!I`c݌uU5MIhJzF6J;2%O.*:Ove[.7%yhOti1nȤ$ iD1gUb6@>@a'"4 q&]*9cAh骈-k5Z桵$[jJ aipc8SOQıϼ)R$6ƣ-2E~_P2C)Jcsv-exO-pBHA"P%zS)Z,&0@kJhygN~͗~~vu/A/p9gn?#̆;OfvNq9J<8rJY?Z{AQÑzdHLQT))\) Wߖ;¶ /*:O϶-A>b Nd'<4XV&Y6d 1F歹+6324 }F8pChLDiw֢}Hz2^M8hx&tq @CP.vnsB5fg;K&(i;8q'%Zg[YfvώO{ b}K<d޶c]&@H?7% |4@`<(9w J83J~|`rn7[ P7Cc4Z퇾#/-BvlAMC`Ky䷩%cF+Pa5$ < ={lۼpQyj}mQ!JNRJ`g XH K-R.۸>"6@ 2ig]ey:GC+2f3M[m%nwK I&l~K(!$b0JJtII1Bhj"XPrE(!" #*t0Pwǧ^\ǣS5:#1#0_)TUø6wnH{88uz^Q <+g))g|92P%רS!V]xrw|DMpy(*=mbӯQ~fk&eTDQJ]!Id,$5Ngl"[RL,e &Jw,`6C@x(Tt ܍Q 0Q֋9H>$Ej"6pzc٬9r*aD Љ jp d ֆB%0`ߤQ~ty^nR'./YP)\G?1A~Pdx0a{i+miqPM=&}{ƩSZ{ Hɑ 5PmFP*y4R i.ou_X0Jt57~AO*1l:=mbӯlQbHF12q8ics$M\\_ErǖH)'G3 4;#o =v<2d놙*'Aqn$,;t2mN)!]dg#mϫȤN{qg7o {iK5B&P)̋]nRԲo+BJE]laa3oEr|."4d'W)U̕r0"'WתϩODh6% #2x#`ZOmD3ͦj !mv+fe۱R˿]QKlۼ`E_Q—`,18Vitr=W\10ev<ZI5"S0:pρM#FpXA^ AX%sU_r| B6@i'Pn !.f8Evȼ.n 6+XJ50Ghpڔ{b6ŝ2"i!/2ܕ0Gls֮yyk'T8K.9pc^z{]M]XI_}MY6#m`H|2A^DDPW4 -RokR㛦v݇)Xa>E_Q&T JQB}J@HW@Pz<q>YlI7I&iUc)0_ݥCOTddSEƈHJbP؄KФ¡;0 #=wqRgUL3w,, W0F%+WHA$AQd 2YIcIdIR@KCLDL\hQUea@„HsЬB[0YtX̀Kg@O5`; "v"DnW ȈR԰$pH48Y볓e-4zYV*p}LX=j{>5p\x80~I+ ] JiIHLw} 6?+F?Æ Z NZe߇EE/| eAF8*#ń@ed$,L H!dGom RjwrΤK= mWߔne߾j?_Z҂=ݏOQY.RtD">4;ۚbb0 irY*uP aNÁI K `'"Nci98:K4CF1%!Bh0\I SrYv~b2@1#9 eTe{T@*k; fHK$mn+ +H`xXQbI- F7J-//%Rw y$bIM- ژhyŽ6:7#GjCEd֙[,J\)/lfCX~6 ]_IӀ_pJt1p~v\.--Eվh{|8\zi ʱK:o)ԥV9a' ,$`4 IDAT8&N;0R2;&sda6d}-r$xaijQ 14p|e~)ZFHB&QD%Φ(b 8:N$;VPHk`/Ndy uIΤlueˌ"JX;y@ӄ&|^}:4 aoj%_Cg:[X' 5}ʕE#CCjѨn.B~ nⷶLV K2ͫdPz7 ?FPvdTZk^f(8_oJ7kW}G?=>XR&cR ӧcld8Hsb1xY\|1.D>?Yy 矏Gq0k_Y!U!p-45y:|91ʔ)ΈaӘ5 {t;wH 0u*N=w݅Gs3>}:VĢE3pM(~C4ڄm#Gຸ L3f .8K<`Gڙ?QCY! #h%!;0!M 1 BqH !L G#FyȖUE8]`ժh{Y (dSȶ3$-Y;TCY:h!F1nllT`"Jd49\ PJŜ>I=0Eа+^RR]ͨXޠgOl\*%|TDh@h(Jo`PAׄ.=/ _@뺾K(9~-9/y&d@ !5!uK-k%-"Z)6ȌJ?谙ϛi35]nYp, -DA [U3B3zVmǟj_}my7V(#'muxL7߄=< :=#G#A_Q_6;Ç…8 Xq&i8/#>XOK%GCVz̝a:}9ӷnP.w![ӏ1r*; *h~8IζE^4W0ap9 v%c"2 0j@IAhE'".0 d۶`EC DTJbŠe*{eUIVu-gӝr9!LuupYx`"Ȃ\`dZo], ]7A~ѓ.$ h^ Ow)4"b@w}M8n IC:u=~PҕE Du vF@LL:͛w]tц|k{o f|{7?G?8A> >/sKWxyS8E;>%TK1vl7ݎ|{CA,:̛OxIHgřgb*ҥcKt> @>pZ[{K?ғx f|{Ǒ ËZ.*6X !4-9Ւ@Nard2 9M`MH5~@Qy%═ 8''YewpNe-ZeZՕiǪ)ʙel%2 ̎cDj9QH2PT9(.R+W)PNE HEC(`/D<>|֒4ZB-IϓR"J^R(Z2+y^;2 җfj%\^!M!,JY,zёE/ `.YՓ>jei+9c3sԝȍw|sQ1Թx~4rվX3Qϲqq٘0c, qxa8$̘a %ΌaDw\x!N<>z4~+LvLcٝzt` KnINɘ=R~ƷnPحNpB@rPeup1jЧJda`O‚8^71%*@G -VZb QTP`# 7"1tvj".+jl߆#d-`ia0 puP5$( H/ ׊ {>O\5d: /=dɓ_*AfP35.ɢS>$ E)PBR(JBKF@ H]/i(ꞣ@Q$<)4ι6C箚O_o^t ߜȯr_oެ^0/HkQdվb<3uMgKp8`\#1}zg1`bYkyuI<~=8L̜0u* \|1F1ؓ8{6&OƱbLGЙ3q<L3l IAIAqP(Aanib̲#1pVBVbYhqnedi +J,L d6%ha${ GR4_mwu>fR"R)~?V[5V4y 2og24Dg/0;y$X [ -ɱ_Ov6M*3NaW5׃%SI]GPYte+!iNi$KA X}AzE(!KX&v}{rTvcN9қnKmimwfޔjW?_3 ,g:(@Nr& VbWr& *ΦiT,ñIX  ;IbNw6|2GED(墤@@EhҪ`Hv|xTa^ %:Sn4c0|H/_Vm%;//0Bf"g:+YF+ym%Q$ ꐦ^%Y 4TKVJ&|)}Hk.P R8R㿼a9÷g_K.]>c ~I?#O{~fVG lKdhd&\81!B"A8Y ar6m+H6s9G%v9Mv@Ff`+"!G0Ud$$n/$!҈3:oa#gQ2 n,C!dJD 2C’;y)Zj)0`E#$`yq5dW^x}$5hEY*ɢ[҇n&P4ɒ!t!_KI]8\cͪ"! 0 ;eVl3u4^t_3>4Ţ]8(oA(B!]FLMŽ3.@Qvv$'?Wc7=SO_vkd{ԟ?O{=E#?UQ733#O&YQmY.d(pѷ3.rڱ͂Шٴ.0DӾɰj*(T0Qta!Ir 6i{V,Ӵ3mƱ[$RdK.4A Ά* ZvHSAu`w8߂ƮagZ+Q!#H"%m\+C8 㒛C j^̹~ї_gZ )~ѕdQϦ+!\(A%ŕ1̙q7\MyH^~7no-<{ԷبqŎOrHB e[y=,Ar5VmXnjiV/N5x$9l,pevK;1V>IA$`KRMm8]zJXcw ,@$h% AF 9Ɗ B;ղ [̐ p(~ѐC@yۆbX:0*Izϭ|Tei*iݡEPXc0bd?/Fb2s|v&mĿ~jY5oop1Fv3q+s6Ƿ{DC?*FQ̝U]@i"A+Z˙+vr,%dfŊ9%Gn5;NXĨv bVu]ys.ظHcXmlݲXM8̒UUIZ>`F[CCO>SaXѐZ#EmRS\c2#dgmY B0j]`mwd rzukIdDF\3vk- f{u}:2芗ɠnYWDZTT̠v޷.d7J L=5q@/i6W>"z˾$yd|s~[ٷs{'7S\2Vg , Y$UvKp}9h a=ϹJ;Pn&gv'Nd;?RP(}>J^O((PWAEQj^)Fy/?Ps)"d)LG% pҪNt>eVe*;N\I&k)n#U,q[*#pV pc݊RcݐL^"(@DvH64] f[{r.{Bgcrɢ4 -Ӵ꒜饤A C+)Jd +XR7\f[Q(}z>c=Yz*.,\pͦ Wrn=и$4"a+O AXJ."" :̰oivGrnX8^ vC{%iqͮd)`QҢ 09FpUeAD @,C"w8̫`DQJޓ n pl)-@a (FP(}>JO/gLw=zt{Ҵu-TDENb%xv.PL&O 2sGItI0 p=AxMHLZ.l)6$8ˀiAk$p4[4kY`6hqB:d{mu8`ȅ`tkaD7b)`.s" C.!nu,\rV(}>Jީ67F(Cʏ_JZuQT*uC8ۑZՖ/a/7L$,X8Y]AJ" MFA P,D<ҁ[m4\ӭ+R@\$FC QXVjmf'CwdYbFL<6 P4aH#k8 4*JY}xUF9ag ;A!j'+DD/a[Ɛp}Glnz6+4gھ]?ok(eEo1Awχ9v `Q(}>}BG>FϮlr?R=$4>vAP(v6"gAk6-:HbPk7Zsj%n/o:q Z~bwk__ꘝ*&P_j͸ojVoq?,/ҝ/5>uÎU EQCSP. 9?6o /|ֽ*Ӿ5hmv)yq#GAw}w #F{{W0yk͹q|d(N]/?f?]9Nf ,kF|U;B"֐8yf,r3Oj0vxeYצ=/-wҮ$? ܏~˧>zSj8\}.*BU> e R%g=w9ȁӧP(OTZ|Ŭ'_jwZV1v1f~+Z-{vV|1[Ŷz~CP(߼y/4.KsSMy7Ұ{ PWMm?S:( ]_y90nUȚ=ʊ ^#P bKuuM((eoգ, BP(=(ꇠBP(^ECRU;@kr%BPE(.|yɿwuyȿcsurPMmJOBP1Bm8>μ7߾W-_Ҵl>;BP(TPlS/.;_wML&o{딟tK%@<wync]!BPs~5I$=E.}GACG &3}Çu 됝v/HĿ]( !$PHB&]pѤ 6ܴދ9^{kk Bų}QZw>xN(􏪪~cw '>dK?*+}m/m╊FJz"BP(TU,Sf;N:i4{ޞsļ'O>y̙|ٜjP( l{>|GFMn_}4/<CC]7=o̝[$KNJM͜pO,e2tE!]]nׇcv~ƈ/[_z7^kh(_ݺv%x{UU۶FP(*FfBb}7'yBaM];c}f=Z4u*C,ZXwu;yo'O>g|ov?~׿G?*ЍN=uN&+|SUm[mzA]+JqzcYP(RԵ/-F_ 'Mwp?:묹 pDg5͞=z=v | HロA'2Qwٵn2;0 #Sd{PY[ Elj{i@UR(UvPx}O;ksxĈn__n{~IHyf?S{;U/݇\pkWչS('k Ɋ Ck[n|;o?8`ur岛nJ|M&L?~YhKvG<ϮvSdK'4tƌаa6P$~^Y8B /4FYxEK;f嗯oLP0;lG-oje7;+WFF2}z>xʔګ͖P]oo&[}=7j:SX8*߶6Q) b 7l[ӏӋ.̣| BxySԜ BP(z#*FQ( Bbb{RU;v`]UR]ƕ+W-oR) Q/ 9wv BbliifM'fVB)wݳטC1~G7_?n)s^ުځ.d6}}{|cdȣYw,sP(*FQ(6.8y7;'nW\=f>K}t㮾;i9w7?~ ?( o:gEӦ?N~y~Mbv|~gBP1Bѷ2ᘣ.mN=MpIB `}7e90 Mo1zpv.<i88?R kꚫ/J B( Eg Qnj+J.8o+WͱUMM^2EhA``È|A5}:#fy;R8~+}P( (}ÇqV?],57}֙?~?uٴ__9yo}]Zi"])/_>( Qy̫.ppl6K/7S8 vmױLsRg^{㺥\uu6BP(j}֙D4ߏu1}9g7䔓b6nY\zQǜPL^x3O/;gݾ>x =ϿAP(jz}8_Kavz * Q(ۗ~:~>Y~e|yJBLԽނk;s~|"?p?w, BbKp?P:( cYH; vFοX >R'EP( vQƍ~ MM3'}2)!%VSNQ'EP( vQ,i,X. l,q"/^;R*a4 Ɖ'"?,v {ogDƏs]ѵ*~k MM8.f\GX Dzu:8It}v{ BPe[rFӰmp~Í%N_b=:W#wEs3B!Li?T\u2 |8}:VĢEX|36[owpC.Ŋp`]x8W#Gb 1k`Rߘ3gmnPP((MM,[7п3QW7@C440r$47chR0h~ }4יd̝`BtPgİ2]Bi3⥗0bgɁu6hhJYz̝a:}9ӷnP.}( B|GH)& ydC]!tRJߗ<@@@k贿<YU%O>iuY,v.{ >Юw'6Hd][=@ź<2W]5'3Zwq?O8@W6@MM͢Eʖ+V ~I)A2ݘț)yP?|.]\|g˴:k+yke>.z6l]vDzpG0cbxt>)Q,vǍ|dj\xģGWB>&LcNJmLiɁMf,@",]{,0y2֬՘83 P5TWW?|>JtAIǧLoW_}.̲,˲.W_}u,رcBS㡇>cy!|եK;Q[ {mZ%ل2uuX:);&:,YnLnnÔ)ȵxIYop;MM}|;1СxQBQ,'ND6&߭tL2S>j(ySq>[}&L)d~>n塇+嬳pp%8|0a|2~GcA$SkEm- ða\iH$ȅ+=CbРNcOl2wqMp\0 (" ^zMe B=+J[Q+V_Z}zJym@W%rsIIǒ%Xyf}̕bc fӦit.`n9?\c!ʕ+bqFFƎ;nݪ4DϞJl6;))iʔ) ;{޽{@ HNNT21Yu΀*7p$x<} N))@9"jx`6@6c]ʘj\[C=0gx;h40~RZ;ƂO>At4;wJT忌7@m&#: t0Hwo\}}=+Qih`ZZP(g.**+ߏ;NGDDp84r֬Yd2L&=F@(Li)2w.B"T*!%%tߏDD b"#HT" w#!Ɉ#bhxz߽4w.jKY@͑Aq4ܸ1p. nn\AD\\}}K).F .AA JֱqAb*)Hx8B&#t:\>װg5==ΧOvI;ij}ReձjZW7W<=yhcA Ai @^s0ݟ>#rD.2}H Ar\.e-oX@ +E.3vC&@ࠍ@ U(޽5w=o@y}֡;z țH̆[ׯؖt3@ /f?^ `nfåϚV@ WE r9173[0orL[|G@ /[jK*Q\!(nZWv%H@>DRo߮Q033חD"YZZX,4dΙ3JR9s0LmY:88(gKG}ǖFFF>>>?=*,((& ` 78s@c 58GUOԺu(JSS &&̙3*)))111f/-[v@ppp@@8x`HHHQQƬm۶nݺ?|P̚5k֭Nh%%%Xt]\.7..n͚5Cky'N:=|&.wAOOO@#zSB_ AO1kC}i4Z{{{mmӧO_^$H$D"Iwb2QrĈbX9'_Ci,X,^rɪUĊǏwvv&gΜ9rq>|Eۿ?NP(X) < Rtd2988)9RSS j+FRUkkk-ZDьΝn80cƌ .`?6l@ %338)#HVXAPlll % \`rysu1\,U]R[E4ZQܹ =Eeӧu Db 塍 {~|eWAXxǫVeEDbGG~~3#GV'Rg(wDcxqJEV|)-ნߪS~}!=Fyy9N䮮#G+^pB@ طo߂ 4JܹD" 6`i&%%0-[`n߾ϟ--[Zi3zqGCUִ7ڊݏrٙ3gΜ9s7ŏtҨH:^SS477;::ᎎ,K]͛\.WZ| z{{5*`0L&z\]]mgg)ڊwuubI1ɴ񣨇;::b(l,JPNFDDxcsT IDATazvuu M](Ç?zhSSʊaaY]] --F]2ںLJrQ({PQg]] =ˆ=ltHvv>kjT'}`mŇd={=65JJJ5*==]$l{{{???&&&<@OEf̘M']|FMlll㺺::>؂c 666}/hHi6lXss3HǎB?brP(W/& w]f(0 >>>W^xGŴ)akkU&v Dhk;{V.ua^͘E낂X rP@qXFM``c1z028hƦGQu=uulCP(wܶm+~pI۶+t-//?^ۺk!&\~ߟL&[ZZ~'\~rfXcMJl6;))iʔ)h1c+Arr!8bl߾}߾}Njoo~6'88$rׯ_2؂x<aÆ04;%%E$Xkb^ k׮^V* !wub1D"HfBbbDSZYYa>'m)Krcbb'+':;S&M_73(ճfzիkkT\VV(;"Hz$Rw}-R*Dz{`]2R<$'mm6+Ѧ N1nrR.izA!1(<;Y1exC$+.vGJ( ¯Ju׃ٳggffvttp8~~~G>--`P(ٳgiرc tzDD6r֬Yd2L&a#$5@| 433#>>>/_ƦEEE}TTH$P>M ***?~DZwhةL&KNNvtt444x‏KX?⢯_*ǿ|ȑ# Am @ .xxx\~_1@,d:>༞I|^A4md'}sO<=ecK~/.TTxx)gI1\J?ٳ_5#JKd>dPu6#h-"ڎ!/i6:p-V"O>j ye4o {lV\GC13N+m*~I(fggH_ٙD"`s2B20H$JR2ۋԸjjj99d2mmmHdjjt 777F6h. CIIɒ%K_>j(9B֘87=''K.{pa-H/v8yRFŇ ek!Q__wػjX?ZEӦML8 ojjzepd---9pg`j1g*b.Kt?>"777""* DG0x}_O_0@_OJJÇY(ܹs!ΝVZFj T̗4w t˯\[C Q4xbq'ׯ_vu۶m)))'O|ӧOO:/~y 9\ć腌GQ2 /I&`kc *jmm}v$2$$bL&sΜ9T*JΙ3dd5 6m277HHHfy?z>XZ##~MF e^ - >ȻVÇwtu^NquQ(꺺3gΨ İ솆///lZppԩSY,Śr 2r$bh<|m~NG($2QQQ=OL3y3bmHp0XIMEA}e[%&*U5Y##d\o` …~Ǐa`( hDL14Dӧ+N@]ZXvu2"c 6 VVZ?@=K4JiSO%kYP/WRij[?8Ch/:[\Q>-//ljul… / },XQҒH$ݻW&Ԥ'VTT fgm˫&%PSLUYYm烰00>@ ˖@Yдj"9"2( EE.^E@L rq[b"ع?;yFx8رtt s:he};Š47?sy}hQO9-[Ai)\+ A쪆~m,]4**=22gΗzʎ,KT*---5kVLL 'cL.e`( dWW#vvZ[TO`w22qtDlƦ?:Rr$ ϫՅX[ 5Dt =45XW8:isv/.j֐ȱc?ӈmcǎ=ٳg͚066:u PZWXZP(&+k@ig`}Ommstv'U޹f4  Z[QWLm7jh ȕ+M0n1ubj:׆i,'-DT||4gQ G=~ 5fJ{4<8Ch/yJOODl6'I||D33333(==lEc?ۉPzeIźʠ 0-l`D6Æ澞 ѵc,~J Gr ,^ Di;4\ x \\%}yijk A~s6 [DySN<V*,Z($$L&{{{]t ?w\^^PrAAS(K,Y|9Luss;vf͚ӧ{xxxxx|}ȑ ;\F&& :ݷg0`u50}:NN`8> 22)6 ({I͛P( , JNX@Y `Hܓ64Q,T*ش |u5XTPDzx˴mpw88:0Fyx;futL*yFc[B455UWW՝9sF]0%%%&&f744xyy-[ :u*bX'OѲSNUTT榥 jj gͲéĻOݎc_/d=¶y yK1u/cſ9;wiڦϯټG6P~}O{;z)ѱKv7}[g? Nq{{rKTN[t+WFGJTf7b%(hvEjkk>}("D"$I"bL&-O2%;;=Ξ6mzLJiŕ+WjbIU2kiMǏM$Μ)92޸qbMP(2E)4>/pTZymkl2apS,<{[)P*ڒErhl#s9A~1}&(~8oذ^` h{'\ҽZ+Ꙗ (.kKJ&TXCܶi B -v9ſU?n,ʟ1ussK.^~u)~"7d]]eAAnѨ6vc'q {rS(*b1O?PޙYǎ{gϢ!4=066V26!dgP@;a_҈&ƿ*t?yRp3fJeR=hx+E&۶iFPCS@ZV@v%f@V^Œ463l/S1n\x=Se]]^^rڼlB <, 1>IzS m:2Xq5KJl䩼?/,PoϽ|YcRDq}=z,#-xxCƦ@&ǽmmd ܌vj| :vg caP,ևrL[zb="τݻvCSeW > -)m|m~Qhh?R錦1iio == ==aΉ::`S@JGa2#)lj/ +W677⌌;vlUMJl6;))ib2ј1c+ArrlhhhyyT*\t)fRRRKKKKKKRRҊ+usپa>֩SmKInHIKcJΚe6m37N_2r0)roEm[jC]֖Ԉ] ste>s&|!o+}yڹ}Oϗ`@^g UXaͨ|ߠBJlBBlۂ]5/R{nDz@ !\ޒ&Oms!; Q _I>%z@ .1 IDATF@ޔt=@ (@ F@ 'y9.<L@@ȏc28@|( *jmm}v$2$$bL&sΜ9T*JΙ3dd@30X5yuut,? [ve²y`s@ FC(o_n: T]]]WWwu6l24<88xԩ,bM<9Dˊ'n[ 2y1&c]F߂Tfj[7}^oyppbެJ󪠯?vϟ={vpne32DYb>۟ll ۑ;Q4>EHdR\|(Qs$ zBsH8ڲ֦w:cl _+Sws܈B(3qJxS /++tHfp"?x=OLLƣDiN44zӝ>W0͘uyؐl ] / "=ni{.5]Z~W޳xo6$l*S]gDlvH:놐>`C  ӮxG ~Ï f˗Ûy\Y,gddرc֭J&r^UU%JlvRRҔ)}(ƌw^@ ===eCCC˥RimmmddҥC#Tk]֮.\]Y+Ee²{}SBĕƵvvƖ-/3Cj;:E$ĬkSn k$])vs%C 6Y,l(٠{ndCC~U |Z+E@kA o;_d !B!!oN DVt K$`*`j LM@"wҨlCikk`n@e4 Ձŋ1 y՜iw7T*#Q^dԩ'O:~xFFEBBBdw[[ۥKs1 QPPp9u%K,_L&;v _Ulߚ77SS2?૯…;w}AU8s ^^}_})ѣ4@;:QhG)S@Oض Ӑƍ| @b~O7(7?\hAQǣV@^+ w D}u YJ~/VÚ;d.h6 `&}& <<pp~_rs_~ Lh$5V? ;//LCm (Qoy @&d9u>r`5QfCɆcv˻J>Vy+y}=`Xp<6A\Kg 7ֶp&7~R pb\ p֊4cɓ~q m (Q0cTڪ9S68;댡2NTQGeI@ FjNzgF}Æ񶘬zxQZ1+69sN o>h>Ya0PW!P hbZ \CB ʬqn9 V6ʠ @* 2 8LΟkՠH `ۤJ H냃\~}dooD"b'+DD47lPL Цb1 P x<傘g @ Q^$K |}PUSy3> 9 ,YTiSXT=WW`݊O `j M8bl݁7pqiP0- *̚MӚ]8://0sfB r@ /wm^2c#l_0yey=p-|@ #FU( *jmm}v$2$$bL&sΜ9T*JΙ3ddqVm AQga 6  6jݺu ̙3)))111l6kٲehxppԩSY,Ś| A.fffgϞ=r䈺, mmmb˷n݊Goݺ^wQ iGffƩqqFt͗㾼xӍ>x?G> @qzj ii;>/v @y9qϷswwwrr訨(4dŊ}駟FDDh;v*6};x]B r O$O\h.br$jU Gҿ3;`K9^r&減FdW5htЫO\Il ͗݌Ma@ FXYYD"6moo&&&<@O(}f B]2q^#c@;[su2lii'p\X'm T3fDBL\>wޝ={vJJJ\0ig[󓚚񪪪LMM\K6ՔW[oSUC oRDwO>du֒%Kd2YBBNP(!!!СCÇG$'Npqq122Ξ=;j("8~2LJ_u߆K_}TII bD"Yjի%}bbqDDJ/F#7oޜ7oF(((u@ F@@P1":~9~So=3/6l@lٲիW60CRnnnAA ĒQl@5OJJjiia2[ePPVVo7 n–|XTS|~PPJ޾}FL___diibtEdӦM X3Vҹ@9Ag{*<^ʣ(7-XPԡoT(\BHHÇ'LvQ{{{cc}cRSSSN >Bttt8q;?ǏR*C-T… 666_~ }^xfmm >%%%6l8y"uQ(꺺3gΨ İ솆//e˖.{ԩܴ4IN+2=nnnnrNrP߀jf5|D,~Ԕ~eyhN dXGVc CY=P(*RyJQL1EO ӷO,vttD`!777""ˣFzΤ]hnn8|p@@@dd$vѻŏݽ{~={gϞ[\pM4&F;pFv9=:"zʛ"EJv>nHG?8Ⱥ兛3YMo3hˣv|Rzh⡭SBOd ?m#>k5ˣc,ѓcOKGPsWSfc(?_xY߻/6dqjJdv;4{fH mN_8Ta=nF{R јNJkZ%;\C /ҏ")8aܸ)O YXo1ޅ%sΜ9G]z 6lXss36TWRƦ^Ol]N?~744K.-_ʕ+bSD:r䈿&MB'NXQQӪccXMG⹿z/*/jQpOI/|0^~܄]y:7$އ{+xm_h+}eSCR8Y+g@^S𡍭ۘR.WOZ1pŋ:{,vիWJҲR33^RE)r\tBBBZ[[[[[cccaHjjƍs2o޼x>;;;/F:túvvvh4X}5~Մ]NFq%ޤ}hj0aqzd'!p^V_iů}+iR;YoaI\ӶN} H"E3z0@9}ѐձ>cR":S/\È=h,p*|U1'k ȋQzzz|-J 665>,{XYUؤ<щh`pq ό3rrr8ؼy)JXXX`` )L||I4v\RE)gWWWWWWuڵF988xxxͥ1c`~-!p >oggdeeq QQQh4LÎccc嫹/^iE%bbN/Hz^U¤9ab*8Up}fOY7YuTNQC>&#ɦM?j1DOz_r?!iSRW^{U kG[8>*rvdPhB$-z #GYôc0%2ioYYٳ?Rǎ͕KHHHHH)vQKڒҦdrZZ6vB x_ 5f}GB^+Wlnn;vغu+v sWUUIR6QmҒb 4|V!lEI *W->oJZ{ ?w\b]*Njnn-NlpcA:"Oz~"YU#{D6tP>z;d̯T=s/* "EUL4q?L )PmY ڪT[YIȋ(-,,\.\֦ vӨQ$ŋw +ł ꒙:uɓi222-ZRYYiaa1o޼K.ȮY2 IDATuY>CU(mс\ш翆lo)@gUD?6<0 +ܧHQEV"mZ@"^(ZzVOWj^x;$cqYM8T<<<}wfw'3$keGIeMNiy\|IoR8 jZlA{*ʩ~X?@n4Շ ezl>mS7vnCލگsûaE.Y5\I7+}4lƊV?J.kM»VK8 7KZsyj2eO-v3^LXqe'wB:PGIr/GLՐ)Ge:߃㯻Tݮw0G@>f|}}###BP('뾨褦nڴIyzl@]]]H_pϜ97t6NH^:pA3O1%U662 BSCG%ζT7zT5j.6.w<㇮6T_d!m4wpۚ>t MM=(΍>ʄNQ-5մUةA=?Nc0dE=ZJBXT xsIJbX/uj|ݹٳܼF۸QDF8>ru]]#/6|-ld "soz4N}@KKK&pBE1RWWyyeff*S__d2"HWWMضm1'LrEO:ZmʗO)וiN) 7j==FmRᣆFA]EM[]jfraJ+:6n(7KeS€7 +2R7T&xO֦2U撔asa:Z amQqmd8!̙/^ɝ1Co.ll˗K(eM`XǎC;zh a&.;>QVVno۹AcKh/[t-Z I>Z7ty ίEOew ΃÷&:bq'/dz=xh׳g|VSbڪ'4MLLk >whnr()|@x^ 22n\2@ s SR=.s)V74vhIbbzz6m286l6#&;sY^j9aҬ_/ zwpǙnntTNN6ojоdL|[Z]3u9q ̙'?dlo@ )I3b9`RkQMT*J%T*JA$ow=ˍ gdP8:;B =\3 @ 5T"?#HYy ;ޙuP&,T|\/M>k,<@ ȇz,9ḓ\&uȇNgz|P(>}:066^b:Ϸ#m```hhCX2et+2^W]_uo͏O6|!!:j_Q]Y羬xQɡzQ5@>Y`N/+++(((..޷oz|| )v{+W#E&>}\88u?1cW>U 454ޗ:SQ ?ONMM544444ܴi޽{;pC&Ν ߿?))"))?%XqjEWA#4& UD©lbݹuŌy絴P7g=fL~Gev 5]W>(kߴV"ciB_D jQȣ(*A*)M903̖;)O$_ui|UV7TG nuCiQHXNjFRk`UX"?nalf'"a@d%7:sBMev\'~KM,S|LUemftB-2dnik.Zϯ' > P7Y2u1WU@`W?&\r%&yyyn_2dȐM!A ;ɈǗ6վH~{u,}։>*y)"xd2bdLB qkKFT+VUUi%WU3NI~Y~ôd_|l߾=00Ғd.\bDDDl۶MEnO(z& Dd21xuN>ħsЧvZ/A^_2MMXzqU ӄ:2zkѱwd'"32)LեKX]}#!\ͻk)6_96WSxE76ǂ&:}یдJQe2pHM+Mږ ح@^_+ (- Hϯ;4h4DP|l]s[ut\]`9-.4ք|JXOilmpc3trpT2ffe`u5{VYtzX) =0mo]kQ  @և`X۶mKOOwttT`PPf#G駟QF1#4#AEEűcB/3 x9x9'8-3b:=ir)!!BbUԥ[:nO}}]#tKr#|0$%h,a`t=iŌ/7|9a^%'4pȒK ~B|..٣Fx(B?N7b݈Nm~.~SOa,fD>0`-b!BJ䕿x:Q-%Kh@70`(l{ZkB|UiOTQUہ}^Y p-ȇ]͓\&)Ȁ@ ??`{7`` =!>!@ .v @##8OW<@ -QRR@h(r`0mɗE (/Fテ@ -Q.]@_pC%,GH@L 01t:H9&۫3zz 048L慄ة HM]#p`l CX\ &MF8Ӗ0w.`0X{a!(|m|Fm>ڿR.gMwl||djkᅢAOAVzz_At4ض f;v V@l,A9`7ܹ1X@N C8q"ز> Z[A|<d|9%%A^@ ЛpQ%Gluˤ/(,(,zŞ &&Ha!蟹9RRz)[i6RFٲ){so/ YVHAbia\&/쀃 )ۄ́7"R|cؘ8SKˎtFX@{ b /_]]=m4:b),WUUY[[եRiTTҥKMqXGgマS)ac}/ֶ.{SQPX_(i Q =jkE`q\.ӧg Bnl^$ ,eee#S_`>e׮]yyy?rʞ={z6}6qq88~.~cR<|h7c`~XF7ZT+ zGg2Ad${|S  07iN С PUl05%7*.&wRW4wssP\LHBER)%}뉙Y%ݻ ONMM544444ܴi޽{q cf7??ܹsaao$ ?Pb8"⫈ALIc *"T6:HSbƼZZӛ?^^^fq3&#s2;ͅ\=@%RI̿1&&Ef<: B8$noc1lٺs0b~MU wJQeuCqQV7TF dLyfZ/V V%#a.l@XЃ38'8k.Դ[fuebT>D2%"3'Mc A֜]canA~ h>nD ^]FQz7Qj-.̯xeWϞ۽[VXQZ@g4wkq:v,;TUAL  { ;>8S iش!&*N &*Y8S X%K ۷o d2 .dX2۶mѩg2H۳1xumFhZhRTr8$M\UIr9 xD|}AiJ%5mUGKڵk rayMcMXZ̧! KFN '@| :9E8nAVLeBS] gDS) =#Nq?{w-{;uQ)8ٵCqMwnNM>|m;=&x' @>V!XÃbm۶-==QyAAA^^^l6f9~|M3B3[DYXDY9v!B?~s2;#~3aILSXX }UWQn鸥^^>>EYw*-ɍ֖藨cԆ=~ =33xPА!K.? $fNaw;A^ވu#F;u{M>},nPSa`kaQrDm퀄G=eϿyn-kuݩmMȮ.\Sq~ߘPȼq}sƩEG7wØ 3d M>.ɫE{+Gr28U"' ֯زaղU[R)"HRD*ED*HRTr߷_8/Eq3 :nđɃ&ÀA 6qB1Dha vFv,3}>~Z CѴ*+*[cu>B6;'zB|BB|B`A x|'NtO "q_=^q%mS@ ˯ne^ ﱺ>JGPH)N`>{ ؊^kБ`4!Ho>] Oux#@ ȧuʠey=G@ S L yW>sܞ2eff?E{I3{ @ !SGz7HO@ [z {fS2TP;]da?t_>@@-6Յil~۫nAr/8][Z[~8~>/tnU>Ad~쾎ΉIk(vNwG@ L+w+SKS3 Tp[)s?w3==m2ng rhڴdk ߼vµ7!*Wc|Cϱtի!@ad44'Oϱt߹{p8IJSkV :zèoPdA~N+(J߮W2g_uMdͺ @[[PUŷm+̴X0G`C@z?DWCCCjZ4Q2׻»ƲW޾s1 ٕPWVVXcn+C&O20Z⚚ڡnCBaKki ֵ0*744 :: * N4H隣mQ\kk }FbҚ{M46f|.-}bo755BakA'2^6d+`?IBN>D>zx8e' ׂMt}GOyA<+!"i ;"C454DI˖|>?&6~Ih:붝MMM^q#(SN'`Al=ww3<>;eqX.yQ$ƭ |> SH̘*i^׮H8SӿMZqKaɂ`S<]Y0xo׳lm/!1yǶ eTUL.26f mff[LiúΜswe)d,@ Ig6nee%vaC ,0x7R/[DO_e_|5sB;d%R22SՋ<<=LֿGF?~Pϑ=Gv,h^ 6C6ףy;J}k@ d=}0t䄞}*42z-~=x=_NNq^-|{ Jw䅿DxA )#?C6.(6V{voWU@ 'p lD@wir:V @ &Qu5| }633{KU޺Sz @: @ }@ h_㼀@ {PQ@ u~BIENDB`pioneers-14.1/client/help/C/images/connect-dialog.png0000644000175000017500000003001711760646036017447 00000000000000PNG  IHDRm]I pHYs+tIME8 9F IDATxw\?$H؄8ζ~k * qϊ:kՊUm]{" 2&=I~1$!y}Y>]0.NZ2S712;s^yoQN %q3' J0ʉ:B)~Pj=?IM) *Hb$5j+C @thN7`* \?`ʪ$P>#;# iU?hwy7$C(,s }Q@3 6Cjn_^Y)HQ}qC}g=75F MRSb#Ⱦ;a48OS' P8!N; FC!/6]=~sfшGȄfN?y{B F{AR!} E)E)5bvkګ,Sg[~{_W'iLjn;2;fN_'WH&!NU0 } 'F~Di?14d2Lj@G#P[4YLn!js@߻5 @.2l߭W2 ҈I=>]U)@&`L7kkVNxٕ! .!\cfiu݅¿ OkokʚGR.?\JĝggBۼRɷix'k CRQ}ywҐ]">t7W&̢kYIyUj h ٙ |;B!ҭ; O(]sEH!ȜװGSJ@CTJBgY:"}z̯D{kpI{&X/~޽/았:`ܪ1w{ JM2)W<ۍ'6;Yc&) "Ї7>svJoZǣBuey~B>F97U?f~ᘜ; hք}-ɬ58icp_?U.|њm\^g)04EUP qGJHKmΑw,me<ֹV $jK*v"OB B(Ue5ҏt)|l\ZQEӆz6&*X#~شV&sm{դ-M{WeInʢ ,/\R$ k] wxkg/FHJ!! ۼVDe!N5[JI ꄎ7Rv>_q;[(vʩ!G~8$J%25!BecWNK4:A+&5#7-B G-dyuWcfط׸`${Qj╫tC1m[!=|D74Gt:(dtQBh~$C=dbh0;M;/̏p\[[ ̳]due"a_YFG2B3y7Hr A^Jᇝt#Kq?gu!HRg0>QiG}GWQLtAEֳ}8pܰU_=c+i$/qŽ[Y9C0gy߯\bO27+OˑĞv8+@d~{ȏ׆"LVV+$OɄ)^` !D+f;VٻH8_eGB cэx.weZ:1BD]3M[#c+$!э;:1yL U?BjRSTH\~3`tcr 2D`S30%p͘gDH!!a&W@Q0֏9z(%!}h??8C.ӼW`h GeG|b/lD>RUVΤY:[ah}I'\`JCW/9Ud_ڏ܉ixqV3fL >ȊfE,#`mШe)aZuB'"?G 7-ZVh$Y+[cߚ=1(Id b.,)9h,\ً݈h ~#H$bEbA#oU:nuŭ~Dde޾qu 1Lɤق2,{Gx ]q7Gmhޘ[]䨱@ `U[D;С%`,GtA0i! ZøVD,.hG,xݣðFE Sџ &~1m_B,p+5[󣺗 }44KO.m'OQT\ js4N*m Hht5(5hI"(WUYYy7bl_,.fG?b2.^jfjzБf0F n][!#vԤ6uB 3kɎ.ml\G_TTB(g_26Z[7˖ܺ}'2*ZBffɦ)ר)]SņekkK绸+ ...Bo:;;S+ ?|7++O@O6cIOc ϩ+_+cO8 qٍM1y%rmʣecc2_/##\OOOr.*\ x1y}8n\pA$G.ɮ{B~gDUp8NNf|T*U>@vklfefe/XD^ uyL==2pҷ,dJҤ/lT^[O8>lsmʣ~bݺ?IϞ=O6, ᄅ=zѰika93_<{Vhm~}D""rrD'{A ,L 361s%ef5h60ں>AV(!aqaCZТ7aKVoi9|X?be`p^ZS,ek4;ܵ-JGZ_íT@K .-\&3/G>"x^ ܂ :=>fAyDr^=j:ibɵ޿e%F365cɵ5}'HBhib@_ ?~G?@F^āRqm3?{0 - ߸aZL`~#G~#l"Ab|$S>#5fF #7wAOG&f ү^>d| "f;@?'G=̳jHX`c: {'gPWa84?tAhY#ڂ@Cm8aͪ4TyI?OriTS?bsѫ?ArDw~<#6W~߱Kwkkqܽw 4Z^f' 8ж7ujʿW 8SBfHuq'0`~q 4qY3v6eԦL&[qsvNSCfVUUQ +df?ѥ1㋊gt~ĚU˝taC.;&2o߱ϡGr*Ҳ:7|6M ep&O,Hbxڴi&&&&&&!!!b2_|>رc\\Ue˖q\JرF!\d2|_"L4X[[oݺU*M!C522b,,,T_A40|g2QQѣЃ% yw[ׯLe׮߄*f B(xܷӧ$'ŽHssu]z]vY(,:1uυ[ׯ tcT? 755i0nQAN|ݻw222Bի\2///%%%999++kժUԮ۷o?x𠴴?$$ ܴiǏMGU}τ0̓?. 4K# .@KoG>\4׶ ~Dk0k?3L: \&34}Am1@3 ܂ ~#}jnVJfJ{QŢbɵ޿e%% hƦ},6G>cgwOgwOh~VWiBB@s€G?_C , D>;#9Yё 6it +O^|Wwʏdݿs}K+:!{"e)Iq^< *UY2YjPYQ?K@dm>~"#;滴نΘM{JRuuuKpw]?Z3xήw!5gmoni=< P$Q)?pK#; Y$L&^ݒk3)UUU JZ?d ̟6u9#T1wҪM;Ccs5)YGUK4:Z#RG[YێIii)ߥUYY<*M6r~ .o6׮[nн{n\77;cA{'76GDGOJ+,,\ab"lM?ܼY[ё#""#f ^rs[J֭]1zdzAaTnq -f\F!_~9۷+ B111nWNi-+JB%%i 82#FyBfÇ:t{#MML>_)U1a׫/AlK楯$d_F맱zܓh[[PNf.2 t(rilB"ToO=#<B(HҒJ9[J+lRstp{\H}Z'X#߼A FyIb#R_&QSZ ]DoB}(9flL=yK _$7W/IO#6{r! E|>\ EĻ!S33r]___**SDY '٠=RP  HGGG*bTԣ_]SzL&9UMvyޝ3?\_dss3QQ5Oiɭm)cU٩|FKd9j̩O|(9{+w68b|}ćN8a~ k)$++KUC oD2\+r`Ԑ%i*5'()VVqI!SS^&VUWi%?VU^L.eEuߵۧϹsUk7Uea-,m_?fkTw_◽Λ;sWRCUi9""QHT]زwiEEEEEEaVHl5yys/jо>c}W^^lE}W*.....^|fXs4:SL3oAFFT*MLL8ijY,l)--H$1mSU TK49:cFU|ѿ_Eeop8^^򔪚?Ϫqޯn_^ʪwޝW\`TDTק[϶ff+-%wt鲭=%R. uVznޮ~+W,p8mzuӥ._qfаn]5p| 񷲶4%doU..Η9w m/ 4_U٩ż974аMSOQMY3lT<ϳj3Oܬvqe#SʲONrrJȠgO*+*.9<"x2MDANoS)OTy%ӋG< 5.[YVV&._jȠo NBIW3I7 5j̸Omf+OTyF#eBԦ02=d)G( ˰zX "7AP'qY3k\yRUkGhFDSn+ȍj̸oO= *RUʫt2XtHut:DRcGdcGR^xE5o_iNt;D>#Ӹ8wWS +:|S d/+Lh߹ B}^k;?bn5yBey)/F321ܒ"P+j+@dS^[?yG8r Є0 G?5ʟI{kFރA2P^F#Gh0@DҪb.ɊW(o5V\n]zpڠ1.tf\Y.KIi&eg~tCT!c\Zˤ;^$*v G@79⸌ Re~ſa\:'FZNt:? C0'uN ~0 1#K?BB-gr,YkkD@JÛZ #K4)004?gqJliMU|/*6ZC4F Bϓlrl@.7'S˗c98sz;w9j."?!MA/ ~Ȍ@FdqaQ07S-N0Gmv/Щ5AxKyDlL,Ujq O:ܜbtrrW@0r@HDsݣ9{ dx]]e+n]v2lN\Nm3 +J./^rP\8~uE(o W+pd왡AVnaKWPC{ݸonvfϙGoܴ9)w?#nq -f\Fq ϏG`%j JJJ---z!U:Pv !4oޜ[O|;;[Џ7G8z2p5=vM?z3 XtBUEfbkk^]QQV>i|uM 5SCbjfFv1R\/(N {w0݃̏(xSk(8 ۧϹ?qRhȴ _$VUKeynk ~4`fr"J]@Βlghl>eayå%%8&q]bb29h(Lm;&h%eeaKS&O3w~Fz.Yov~hpe΅9I'8~Uy1BP\aj`\WW_~óCg{KF~ٽk\o ͷ-]Һun=z`oO.Z0{n[YO2t ]ewD‡@ vWZ56F&J:j@k&ݿhPYQqԡ!̈́<+h$tEXtCommentCreated with The GIMPd%nIDATXõۏeE_ϥAd j$Q1H$|0xTc|o@1&!F0F4qt$H2`OsݗCt 줒}[k}j}_ŗg4 .w].?}Ǫom4` ֍iƷ1.ƒԓC*[D+i6>Ƶk|[MBT- v` P^Pl: x=GYX耄B H=X V5]x/{g߾iu0n)CΣ5Tp#sՄf7}N <}V/~ZR`>P !L 1< HAZ i6ogrݝzŧT: bfLљh5)p"u`9X8D @EZ,.Ou/_9zUrwg_V&giEYjr<ƴ2к_6Vѳ{ܷ{#aO\"'ǐDރ&ߘq \I73eǃ\zq (pMǗ|m'yr~6ARP5 *SU '2B|-'xY2ao|/6*pRZ hB/Y|v3:bܺ9Hm7*K,D́D, uyp}ḋ C;Y`~0喫Fq+NP JE,3*C[(k஝|Z2Uϑ8& j6sk|f"./BGlT-2 DjxUbA&L԰N*p-fY`5!D D=TO%Рw"Y `$Fq<:m8}|bٷ lBΕ ֪ ֙gQ1!5E4&L4Q3,۔zD3a*:g$%g C ځ1 6CRWr*YueU>0[$.`%cӀNc hA*З%֛P+Y*.h8/ZU/}PxL]YɪʁcTңL)B+\#>+,Ę;$9%0WJ"Y}KjBru\ NCnpChrf *~~Ae2CJ*K05%[;jnvQZ@΄+GhKH)\|䥙,0 '$MjȖK%',B5wtITrٿ!ѿ^@n1");,$k@=S=ANKZ\F8tlp N= gSdK Y!kHy|>t|Sgl>YB- l ӑ92 )aJyLW@\`׭xyA][GY 0 dto_hoF#\B:8)r3UV..o%mw6UV030O|妣_ٺkޯ6 ,s,ZvI\ؼN.œXccF7|J y~O }17?c}IENDB`pioneers-14.1/client/help/C/images/develop-cards.png0000644000175000017500000001202111760646036017304 00000000000000PNG  IHDRzԄ pHYsxa+StIME g\IDATxwxfI܋! JT =&"'HTDz(M@-@$"pQ^RwYRH <~9`ɶ,NƋ5O2,F.oҬA|KSVSFYiW,b$թ_yj4lǜuq,חU)YZ;x߹= ǰ#^WߒTiІ\s%mD7VD_зe 9avv7C?Φ(] /V~p<ђa?A }2;kUv73m_ ?W:e8%~!Cpݢ3s$W>l_NMY1;`Xm}F_FSٜmYIGޞٽoaM]YQL{{&/ZAUg^xBg|ጌ)¼X;?`LHc_8lȾgl/,& C1QNZyr2 WcvjfUʅbMؓ3!cpT;&K ۅt g#;2p`a%2Yi k^=ٺB9]Lb];bIRupLğjp.ЈS_LU+ Lش&O8߲̎rD\Jݑq'je[Hy6ݾj$]܌_.8BTLr+"bư\«dK##)b{pO{EFb Mzng [Qok,o?fܳf+#bN+١by~i?Ϊ9mqe /YW cfɗ#ppѭy97ٔMMYl,O1+t[/%enMݐIxYCLv.HwоSJn9MN[V-:&'Go^kq[uܬ)ƥD<^Kf/u'OX:旝1N{ٿKҵ fn c ,[25X{vUe )/n/<]5 O[?gqڨEu% ݲM,7J390M?^ ~n7) C`g\` ctoN}nO{0mpwrܙ߽fyP[%Nb}ʒG1g) }o<9k,7ȂEycǫ4f$a¼ԩ1 Ҳ8MqM 1yLoz#gT'x`uo#5RDc@]URDHRDHRD ֨D5jGPdq7>7DRa@("@("d2" p K{¯S8ٛq,DBX6> 2UfC5mdNnfY1ZN~r3,׃El{m֍n\!s ~=qx%+autubtC]V#YZ\Aw\Qy?N&Yl. _1ޔ<]ƓBFz^Υ9UiYH@GT ]iٍTgƟU8qDM=wİZ ]{NrL m V6eމfXVIfϘb2J3&jT2:C7ǧhp&>q4}3Km֧f^۲WyJٔd<Do=c)$47T8BQvΎK+N{=ZҺά쒶ަَdKkv5L_VQMq/?boc; VgB7֜KH{pGfZCywǛ*9b"ak*ҧVk>]c/b1,?˜aW[Zӽ>@8FW~;o}#H8wmgTEˡ<7k'md`J:crr4Uޙ/݉~FjOn"p>yBQL:{ܿy«.W8+еLzv|qqthΘj1h )"*" )" (" (" (" (" <|"8 }dv'E4Q sr-'/e3Yrf_Iwج`ֹ4Vy0L 6Ct`QP Xܮ;ɓd3-ߨ~7$X)'0'B~h#挧,3( dfz $=LXxm)V\ɛljK\?Gy3܏ìB1 d/3W `6Lm+ڸ;R<%w3py!='}v+??7:7i<,۸徿zg5-؆be :R ՙA2̸=Sހ@>XYyh$&@)@)@)@)@HvR d"S-8OyW8]]屼BwYM?m-VW@׊/Ώ3|Zbv'>= )N𔵩 $fksqpG8d:f7H 3էRt8cq6S?cSv'>N/ni8Kw3+6j1|wQ931)ZVfw# $%wDɇ55 ga+_h-'RǀvJᖿeu5:L|ᐧT&qyT'JьE_G'8…!sʜ:w'aW &]R^o`y{9{,|)F\t#GepGѕ]7|{&?Eqj#LZo#/&uK pcH^IIHa~`uVGᯉ/5i'S-XIط+/l槓u NA,Z婯蕩WȡkPWGWOȈqM}̈́Oc('w9ZtE1v(&C1QX"i=gٍ4nҟY~ ѻ~eƈzN). n臜3-OeH/r2^|6iS>*k$K~=g|N5y 3ϕʀ)sW_^ }J`X.qNPR}O]@>꬙.Ct;ؿgBʞktŒk ě9C]FoEv.,(sV#>3nV8wT MO2[/-W:1;[99%Cye3MJ&^@Lm_"Ӻ,b`d[ uN{<ۣBθ+LItbuSѼ2U_dV;_%bQ.ƧvM&6v0lʾ# ?w6sj ~لV(sQW=H'X|nD#7n.c!3FʟryѾ2feZ,Pqˏ3y;_fJq`DjM ete͝.[8ő+1sP ϸ8#f6eYWq4,IXS8o3c{eԿiQIp}F)Io)U,i218 e[s,n4W׿*$ nk78hEШZE*։4 d6{=/(mU=O?ma:j!UV]i5)R 2fyd3tRuO#@)1M0t{SȇtƐ"?^&IENDB`pioneers-14.1/client/help/C/images/discard-dialog.png0000644000175000017500000004662311760646036017441 00000000000000PNG  IHDR (w pHYs+tIME72 IDATx]w|E^$K )FB*zHUłyAT(RD Ai$@RH !=^.vdžH.#}nggg3ϴ/ZizcUZ}Íox{U;H ޕĹdj5Z\r+WV]~XG+\' ;1jhPG<\]p3&oyA,6agGX{T0r= }r;SĨB0-aWo,XETqvy# |TA3y)fQhDgg}#s pƷ JO$$HG& èjJ.?r[LC?bK~tA &&uPu򬐇_M)rʫ!pǑ͝yU.EZu}6Q{$$p$yp+bn67]6֨ʲKxb̛̚/Td36yZW MJN.xwGFv1HklF  H~}"A3{z[.|;q޹6G8>A%~y8jcoI]D ʪ]~gu1݋lX9LCg'xg}{)˔׈QBeꨎwrRhȻgŤ5L{c/cJɔ(!lXVuu8M+_osr~._qow_MnM0nqC6Jlj>6>"/&cLߓ`|sOL"~S'r0-5+wCMU0*\:4ʵ;? ldl- SYkJ=/d=||N&WVZV\3yŒ~mP$.Hqd8z0EZykNqmUPS+ McsBG[[8I=LtI.p_鮺d+v0ƺGb B8ʣ~̨'glITm% F1&^,.Na oBz"%lqa8 FÉ#ά 9LH`K,7a-˚4&+|8Ope*w/P( 0I@)]Y.B~ӊw4I0IOxFZI1d-^McPZ^kT*JMF80*Cc0`97\}oU+ ^1Ntb0kZo;Oo 7=WL =*8 *Rr8+?z۞6V$QjJr>QKz >G* J`lj`&`HwDu4b?201I)3&ҩW{ 6i5*7͠fJ0VeJїŚ~n{:sM ׻+i(u{O~h?óQ[WRX~[QAI)ݲy+BV`[2uP߮k{5WM yW7c另 u:6F\pz8 =D3,>dcQ]q4tEXlbU J-_o LIMI; ]1UTXml!"X`ٿnjKmrݿb8]a}nޡίmߩkԬ&*Z<Ž[ApiMAރp0o9f]rМv="8{?䷣Ǎ5 qor Dޟ|EIi/={=4m~DAq_dL?gwbܭiX[hA¤.5}c[eUW~ykeUy`m4qؼǍYq󎝻u7R(ǒr=ޓ0cs_)i0yoa½~ܕ'_o!ڻֆ=w>oBQѢ\]\߾z| - "G+-XÌ̛^(o:ݽ wքOv޳rژ͚vWg:me=Vdsƭ ? {gchx¢)~IIiPh{ҽdFʊsu~oP@fzI:{@Fj"qEP2OFYLfMt"csߍܼX-͉"TTT~]m.\̔ NQ3$2Y4(\] a_`;ݼug;O)oFÌ,+Ik3Ru$< l\6ZaR$AL*qJ=0Y%'\.ߴvD羝0#88fHw.זq s`՗몪WYo̧([6|Ꚛ>-y8pm*r݆M|3`Y.^d55+Vӧ5.xg|ncmD*^t鯙N`{岱 ^-]O:lg|yiw[|[ȈvDo6˵E>&Nܷgd";;nDtYo[zEbbr`H豓Fn,vcQ=m[{?h_;|'L;`O&}{gO?Fw?q֬l.ޞ֯SRR{E[`:T+Lꂓf@@@."""""B'A{ARu ,o`-Vf!\iB`T/W!gˤNP(V6>,߄7qa[Je4*͉/_Y^ebWdJ%5W|ֶ\O|gc~$O2Cc4*ZNہxYazs )*W&O)@,pqzҹ',l}捫b3dѨ4@;v`7_`ՕُR|ma^W](Fg98.z; 0m'*ˋrsC zuܔY^ݺw&SRݎ:y=]g+=Dh4ڭ>_iZ LK:{rzI'9r}t0,.rfW.wrƵZ΁/1'NL!*3 ?1 vpqqP)T5*Ө}w4]l-bQF0?\ g:uLĴIj8o{wm^ L,#; ?7oZGX붩iZY$+adZĮE zGb879̴B~(ѩv6i&6 L=CCu?S>bЕ :s;LWA>yT-cfP^P A8GbRIS<?iJbR1jKf:`]v>hQx`{VS[*Pǎ=JsB?8MLLҺ.!8޺zF*m>gg$]տ%cZ 顲ճq,z~:Opiac履}o:xphXO쀴~Jꃅ;z:z.R}=8\G0l5^~<˛sIq}RrrϰȩfI?_ON8a֬]'S$&]^w{BBB8im%Ė-$&&_~fW\Mz4pO{~x6a Xgw&]=k"##iii'9QhQeavt䞡Ǐuu>Gj)`0Y[H lk|gj4*y]'QFp 'εsA2aTRE3zQi AMr?q׎m}vmNossgO|غeӘ7_uտ=2M'&Dk43DVY^r? KN5 Rq‰rTʥ᱅2S ^<+t|=5E]ةf{Z{jZYYH$"D^eeh]uⰈ|zd%K:eAoE999Z6--͹IeW Io'NJ=&/q 6{+VXbΜ9'93c0kk1Q6>]f# >cK0y\D8eR:l4+ "?-kyITJ G¶*d'kZ-چ  0h1<'G麲 ƄOWbgKC"` +W,7x|$.)|ɧ imE\`'OȆk3af͞;qY39v3G =k fqKSqi@$n<[kn !pL"MAO! J1J) .n^~, F1B&1g@ӓSg:v0T{0vjf޵} lJ.ş~ҧ|]D y͛7tW,[2m֛rztOЧ`IuJ)oJ#ԎJI*2Í*0g7+N'4ȮR7f̌>3h.n"*yǚ㦙T%3'pn2'Hnv0,މO xMeyvfJHD_c~x1wTi ϙcʵw vu1 ͆&7S {vzg+du8Atpɝ}=0(8YSj۫i! 4ڑ'4~ƫ2REo_xxXr||^ļlm#4}WvhF@@C@@]ėH̬#YH)G``xfAG`ha7G/{0fL-lw$pLtzp&tq`_Y4G J2ϔN:9s3] [m9p0nt}$5;{slk 3? Jv>J5,lFk o Iv>%[j̗ Z0}}0imuZ͐~ΑТfh?s회-lwk4[WBcY?N!3ÚҙCj~x`C} &Ԥ&w](N\ψ~HD H:Lм q<7;=0,V!:8 }=ɠPiU3`ee[^oϛ;|ؐ`aY%E& lQY>X,m9֛ɴR)d#_(tԶj~-X\2rxwc9޺>7sWE὇RS]QR2zY>X}\LRF;$[nKj\k_ZIX+j`_m:Y>#9|~?K*JsXZ_wn#e8d#$غyKJKzts7!ANoo@^vW[a+JE9U<&6=|P\jy=Bht:Tg=LV,+_1ǖ4\Hȼ'jʚӣgB&JW)d6n@Xo=(^8T7WLR>RVVZti{GIJ:kn`/]t/H0Rhs6}nj߬X;qg~E^< &I8"[y>T s[{7/߈,5UMoNV_@(AɷzykԪ̔ &KVtlU1F[ss$߽w?Қc8q8=yV)Nӓn]{/,h 6 p`*xB{P>e93R..\{'KV)h5 %_&_, 8-7:lv%tq B0mY>AFR*L0VX4[lyb:(\stt(/pqqD؝ km|&ά$%JFmZ0 e`-&-$zAJwJ8F'BV2 c,6[P,Bl+|e, Ӗ JruBW/_Nw{œ]gkԀMLmҺj;>ꪭmL)0l\J`UeL&K_DX*+JKr+J\| VX^N"OG2QNJ},BfXlV^~ _(ܬ!tl\3`Z ㄸIv1V`zXl.?a`XoHO`J0Tꑚp?8DZin^7t1$XhJ\ 3:#[Nr C0wgOm޺m̸I\[ۨȈG KunUk zy 8u J!28Z4h`,lRRr34Aπ>qR;†Q+U&֑u%J@FeªҀQ,M0pws۱m) =r葺ӷm͘XC$k klӧ4*70,$?ZP Ksۜt e%yYB[Gk;֤N B!ۍEn14 IKHd0X'0 a֥RMeLdF=xg8U^6`/̒h[h{N`j ނ!}0Kƛ/[MW@j}FꃙcfubMY6|٪Jq~ b & |~ߏb.}0c~9vyJ9vla7G60վ!JKsMO0fxsdkcܻyŠ ӹxsgk`H-lH !j#@@@C@@]ėH̬#YH)G`F!.̿{zYآF9Q|:+[۫ t}!}0cE^ʤi4:b^a88= X>ztRqh2hTO ;K0fLbvqSfyu rSRݎ:y=]g+=Dh4ڭ>_iZ LK:{rzI ]*+qq2\V?ս""}0c ef&v!3/(`|k ?:XT h"S5Fqf"RK~2q񓦜XhHڒ,-ߌ0RAZh;."iqL8yK=^d)K`LR1qQ( &,f]ժ^9{9H[4iY 0#sٞzxv1}]WW܋qk£uw5'iI3otRGGe˖l/$H6si1- XNN)3F0zԈIJ+r=ptx!4:=#^e` S:~1}ܵ)6{vZZZZjjj\\DQ_O5`|{̙-֖3gȫNB s m{`wޗJ/:4dyTlp8V&ONzkЂtW>i5ʲW[? L86k4O`c履}o:xphXO쀴tқR`ήή ?DTn߹k בUxy.oΙ7OJN9u̓Tͷ&98aWWWWW 6/{%PDkקN2uʤku>XEI>l۾+)g%km|Zr[{V.LMqTQ^qx1y.mNfazmQS1E.2,c-<]w3E9ӧ:i',cۚbqJRƒĄnOHH'زĤqُlIoi3&}>~>݄ZHDDDZZIRܲ\UU`󪪞:r.zo"qLZWQJP> ];9::۷};]^Ξu˦1co\i봁.wϓ'\`ݚ1}}]9666f݈9w{o&9R)Sۏm]]1_>{tPG- s`P^^li>$&v 4Gi=zFZYd& ёtjpjee"/yqvq/"E$N#i'O|mƚ.Tmp8R@]]!S`MuLj(fq`c'h{:c'ؿABSl|QP^Z(504mӒ+KP(fBq*ruܜ\>gPY(|ݎWM~SjqoU61yY ^O09C@h񎽕 /xё@` x! }0C3z`r郙xD0 )H(>@'C`k>k>X]E`MS>X@`F-D`H9fdL>e郵!}У1 !}0ԂY >X3-`݃zt1ޘ3__Ru %ߋ6aH4o[,*2ܹ& 55_rrt3gEEEd^tzkD֟j80'M =cлo_5}ګ| ;@ LzǓg.5coG Mqzq_5cٔ}"oKu+ߌwəZCÆ&=xPQQw$ 4 ?>l(ljsIii­wo^/,*^cq_^œGm>kAO?'}g;wW\zI3t8ǩ#ްv”kV0nC 䲺')j+?SG`He3gLo}6*2ZVzO{'=Wxy/,/0nY6n{7/`H 郵`!A+"DDi/lt>_-|ɴ 0jC!}0h_]aSll׷Ϧ-|*&_ˊe+VO8޴"3%A.#\=NO ]2ɁkCuʤ:i]}o>jU=Y?y1#b;; Xiw %35!_)tizCQ0Zg8~CBqxI⮝==&كmI];G` -`Ot杮Z  pvv&ye$y;t7ڲ` 0`@S`Ĭs9#Gg͞;5>ɩ0OfضuǶ 2@Rnm7~郵|]H%kH 郵!}0Z b郙(H53ZF>XS]D4>HɾkH̘ 5 f\^ !}0W>XMwnw |""@`f5BJ9 #}0 J<@ h9ŀ߃!}0c`na[7G6͸L_`c줻׃{6䠋 j xsd! 5w 7Q >>%[j͗>A >;R^."d [mA &NKϚ9R>X,¶19K*ypFJu%4f$ZA]'Ia[ߴa~cgoka?< JjRvq.{|'gD?[$ԡ zErqN xȥNByO2(Ty\-Xjm#7+(\D^- Jy,m9֛ɴR)d#_(tԶj~("x8ի`}&-4\?-t1M2a֧js[Gt(4kS'ǖMw}X\ҭ7[v΂ݻ]`@~2lq[7b2ð_o9xT&=rwn&1׮>$s@d@||8Wrj*xB7RL.m00z {Dt,+z1YV"@Wc-g~.u{pdޓ Rae3R!d27 7p vTBWH*JثIR) c ++-}]$pRi܂57[u,zS~Ytt ޼u _oںzrض}WR+rmŪ56nٴ^╋IPS.plE66|@%攉 8n^#X,kL6femzߜtP ғovרU)wLF2z#kb>NI{͉5>qq {(YR =N'ݺ䡷_0Y2iam8*55T8[jf {nVZTYW5[>.q IDAT! >z&\j4jq}KEVF=oi}Ltk5jimRQa+wP>5=s1kIe}EK~_- &&*v0L6aeK?#?;wO2gw \ܽU [MԢ)D9!tt1lD?=ݣ8?;VJ)B\LBJɥu6` 2Mߤƥ?$'3fi .a}4jUH"2v AVJkL#14}K;BW|ąU=Yڛ`2 r [s0)磅5lXO>^ cCB$ j]o˒[3)J Og@V)uDR;xt e%yYB[G/;֤N B!ۍEn14 IKHd0X'0 aRMeLdF=xg8U^6`/̒˨YF>3`j ނ!}0Kƛ/[MW@ V$k_j Yfxe>T(LO0fxsdkc4\*--5Q >>eZF͑q6O0fOZF͝R^ !}0 u#}0`}F u$_`2$_`F "3ŕ/B/:RHwHo]9#wl|""p#IMeҝrY]+ҺZ{KAhOQtUALR] ZQ'|'N&!/!"V;<"N)62TBEK"aD"EtTO>\ XxJҵuNB]oyv3mT~ȿGpظ xJ쀡a}wBѮX? ?5=BzE=Mh0vNb|ʊT^DD _m.)-MuEEޢk*K t ݬ缻`ޣ$_֚󫯷TVV%%_r7{x'|qޓ3OHO:nmFffܥswo"e܌h0vG䋚Sx /3}֭Y5t [[T*S 70 z?qҕ}6*e8|nX#jwEƤ 㗯bيՓ''YY:oJbجE?7IU**|F%ֿZ1եWkk%_\Ӣxh0vG'!Y:V,E,bY}!^CFx'Le:Ybgo;vؾFkG=muܽtO ݵE`Dwo;{.߿u)""#NUE^e̴{*ӈ}cݸUUV2ߋ C3Űq@%6/ҨҺMh2Ң ?Cc0PAG0\d/=xUUZDֶ`He/B@0#^\"4Cx |PSYn>i&*T(KsEM}Z0 H@ER- h %`x1;# =çGX 0E%E    B"KAP$2˧JXغzX|D0:If`hF=_t8^V!\;D0(q`Xo';廊|hD0C.wrƵZ ^$9s3 m&RX_ԑ76ACh J,"YxRcaCvfz:as{MǴV /\8lNL."BWk+j]LRH6BP ֈ6;dLE\2I㌤2wbW/;q >#A@mUE+~=zHD0Niz\t[tm&by[_`82'0?!JRU!~pzpxw*ͦ"!htJDdR"_tF]SSi.Ȫ( Ԩ  e&ۊ .H{_)bh ұKѲ,@s/.**`2v 7ѨU[Nd4jN4=B]<:cL"!{Hq!W""#drbYl6޺| PJEE5C ֏d*{&NR* &B%FJO3\vH.""Hm+ ahZ] BwdP siQ#Y' W;W*J;8u`.BiYPUZ\.5. H*)ŴL) -AvpF||L\/^7u 2+NNN<>ϠRʤ*J" 2`DNރsf%ppEw u5z [}xI4O$ Ֆ!ؐ/]B(z#P)UuuuJRZ':dXmC"lȉ LbFOlbNVaȉZ0X[:dХqA| @VjFP*itAƢ 2 ij+:FCP)@@EEEooCA`ƒ>:`1CPLʢ(`b}p9dЀKWDXy%B kߎ!!tNE&P))uyhq-"! <+˓dTjͱCCrzzr@ډŁK$%"`D0[lz4sczD0vKdL`q%\        E_QZBҿo z f5Yo IENDB`pioneers-14.1/client/help/C/images/discards.png0000644000175000017500000000644111760646036016361 00000000000000PNG  IHDRf pHYsxa+StIME8ob IDATxw\S߁CR+$,n*:[k TqO(T[APQW-^: '* -(ZDBIċ6999yΓONG$@Sb@Zhi-|G_~ү@`&6xu6u9[Z {Rޭe-إ%O[Z n~ \l۹e秉X;ѡ3ػdr\.]$0:MQLŨ~~QCDu]قЛ]iԘLֽ[5{S,V'o*K|Л6i|1 gݱτWPΈtwY*B\^or-8,T^8tiWOoOkekbxtwp0jsʦ$KOjW;9Y N<"ؾ~w_GvJFJ$sw8x&GU7v:1옭b07ϨbrT*Dlg0 #ʏ\bcvKТ>lKhGsam۱8;YW1~?nX.;/|zԴ3B/t;n盒tFq;=lb wT͠ӜovϮrwlyMx׸I%?d) I;BcޝsK~~9r;7,㞲 pؤ[WDz{sv_!gl}ɩig~u:Xل(L9Wn#*&Gٞ6surtCՏwW =}\Zu[ G=n8\ "z2qx vMDɐmh13rZ\xxhg";|uhBhT CAia⦈&WkrGQjh|'ID!׈ha|.cR(]ݪt`&SCV^~lݯ[3:ng ;NW:BDkmh1yEirO9zW&jODǏUc_s;jk^ݘVqddڹٙ988,iwԒO3SlwsZaRè,#*rY}jG󅇴xiz1hζ4dJr"iHfAXhk.$e+ew,]ӗFD:-|ŠEEQblǾkR"nv;,H*JeHecй_?"o$7WPXTlYؓV~_Z%.+V!j ^ڝ?5ՑK n.@SZ&癎нs"zkw*DTOgu/ZM۾tnF[Typt=-=AP9a٩5^wٞ$.~euTOBeR|0 DWa nݹz:FWg^&uݨl #-_sn}&D7sV/{[ow+G;Iw(:2ǐn*Da0m*}.v7Z[" tt-18~{2 s,_XSC䲊cy3N6Pls|W~'ᵾ]M(7)ǤCsxۖLx A'nJe2"on>/Hq.jOl뻥%%/8 lޥNťE]P>cXI8~ӌxۖ$37\.g/>j6ų ˢj]Oh{Õ=G%{\b[usoM[Dm͓HdMLoꪯ}UT=XGٚ<6xwR,7\]~U+|fwѱh ;9Kñ Wf\|?`'U){Q_+U'θ's]:LךʻM\>uO*GmȞѪ ð? c=vUfHR^sɐF0Ϫ*KBͶP%gO _RUUr?lBoĞ=9mbeIҲj44Hڐuo-^Q>fA 0EF]z^u>KPg ٌ C'kkuqsbh:t-193 _d@^NV7+ۼ,KL XN V@b@+b@X+b X+ V X V  V@++b X+ V X V  V@b@+b@X+b X V  V@b@+b@X+b X+ V X V b@+b@X+b X+ V X V (a6\.D@fgbM7*0eIENDB`pioneers-14.1/client/help/C/images/field.png0000644000175000017500000000345711760646036015654 00000000000000PNG  IHDR"Hit pHYs+tIME2$m-tEXtCommentCreated with The GIMPd%nIDATXõ]\Wk}Ι;m>MSS ~QZ⃨HVؘؗ*}EK%* A`&7I13g9{/{&>Ýg#J~W^o!@prϐ \.=E;Ӏq N m v(>#yh0DH% PDJi6>y@ӽrMߧw!&1g1r Fd*{i)SqY_ۄŏ󑽊)"2b22h,A?Ϩ={~=#&35 M_Scrx>s@+v~ MlǨkNAe>䖅` r b&`%zR֨g:16c! ELz+%S*`P180uiHZDBPI*F'Kkd]ms>PN!% *8! x/N 8:;chim `@H%ф4QN ,f B"K  pZ'7 @USr$U4Cab|kO"4$̄`7jH %7oSgOd=9+^0cݮWL2z ǸL7L´޼UX:;hD%KhONa=hXKSmPIC4Uj$1X%#A74ߒ<ƂN,(i賱W\~'B1õҎ`0t&%fR#Mf4Cfo\3 /$쵥EDLR@ՈT6O޾GR4Ʉ Иmmì͸0}?Ɯ] aoG6Z61x_jqiciubw{zY_9OqUl"xsr6x @/"GLW(-~Yޗ_k1|qN ~G#*6w^|Gb IENDB`pioneers-14.1/client/help/C/images/forest.png0000644000175000017500000000475611760646036016076 00000000000000PNG  IHDR"Hit pHYs+tIME3ZtEXtCommentCreated with The GIMPd%n dIDATXõYdyrS{WOwO#iF#i$B"ۉ |||\*!C0844=ZF3Ҭ=VWUWթ:9\\XݿFE;dl bft<BB\I kc=E(&Ğ1ȷsvGH(%s8av.*HKRUXRڭ&k C͹k;PJBdQi>,h5.ѫZSi[7iVqDg:Fc?dZGLN1vRc+Ajr>dޯsVjDV&y@c)AiJzcMs^E[U,) a+łd|V%o 9^ 33eQ6?+<ќ?xr"h4.i4}jۣ㶍E i`hI%͠PLiZMM[ڋMՁ(3݈gWٚ~@$ϲsE]+tH3seUk6e3*cjL]5nÂL%5UQslݲ8P@ީ-"jb2QLyD6VF; Hpkt{ dK[;-$`;nsLq8vq;GLsFK\W^ l:4|^8E%aZˉ=M,!cE߼<.r~:֝9(t-.ůbPpsxx2gx4rQBt!u yt6%csi!Jhp Ԗf{GQjTsӌ7|_c #7|NQJ[H +PATwBb4w2< *m<BoY[iB .> ǿ6&V^K-z8/CUʓ"DZ5q1"3#m,]7%q0GKX$$0*jat`İ֠O8Pml#PJ;馚K_@;F8G&\-( BJh4FԺ&OKAE){?%&yosSw7 .ucn| ϳ߈Ϝ0w?x\{Uv[܎ktT-,"]VS֥Km?7mvK],OmZ)}Sߤ dw\y' 3ve_:ǿs_r{S,ڲ>u"5 IENDB`pioneers-14.1/client/help/C/images/gameover-dialog.png0000644000175000017500000002176311760646036017633 00000000000000PNG  IHDRmg9 pHYs+tIME/t IDATxwXSWEQqQDpUܫZVm:ZmUD'NZ-.P@{'a@BPIn=so^=IA^eJIK~ʐI[b>+& :D$ ^P1Ŝ,HD% :DRr9>%%KM?.J}wvCNZ"$S$?U:[U!ɿkp*% _޻np dQFQc=wvB!:9Chd0U0{}POkJyg7OFۧ{ǪRUuE؆[B &A$+[R, ZE\1K؜z!C0JHL)`5U Eq{r[6V_ nf6ds,xGw<>1tH6C(IH~MF7?3]!!*r] ^Q҃ Pкz:Bg雩kxh;~BC5c#oپsXgDTWKrڤk,Y1Zد-'GS/} xyExgZ'<q";>%7lOPwi>Wn?5:S},k+k>*e2UE `d0"/DE|7k*д:q]O(>g #fүJG|"|Vnww?r/6we k[9y~.UQ&ڜG)k+y_C)d险ZE}귾76%e)VuwһcpJ,}ƒn) ʈbmnZ{L,x6ݔ_B{s_)gwj0xZĹW,"h?Z%6W+:ʫMLYjLM}pʲkLGd; }=ݺbٳz]6u*l BH 'UsNŗuu6fK9zBEDŽ[Z%07А[g*j,=s0{H >"wSuVq9"yoF1Xo~ݱˏZzVV=+x:ȴkZaihAnw2L}RR'l}5*LB(s4) QWȥR$"h@E~)RQh爨^\_~ęm9eE=!g/1U5(Q}tFUjؠ Vai?jx05tO7V+-d DuVc.bU|NI~msH:biYMj# ob[YupN>Ӭ-UYgu⧏ܕX:}޾9!9D旃r"br1rP:yWz5(IsLɃ7aM 2Vq5S*ESK v";ait͘W|dwe^jWE5*"1W> 2T4z:SZB`i2 kf~xD( E*L-C=U_KQ2$b1Ee?iyƽ|+9g)ο3~jnzF65L =6N,\e?xNQQ*~6NmP.!W_nc߹/Aw re6lrd_|S? GI%۫ xMZe,BHٽehYo#Br#r#r#r#r#r>1b[a?=m6zXw\4W&=5b[K~7RfWǶ׭DQTs. ōTo;xb#n߽u}pH(꽟w{wc3BH}p.8sLa@ŗK9_x@ _ں}g[Ww+;_,T镫z`feБr!7fV|qdcvNlYX;rWTca)ݼz+Znd#V."hMm;Y:O9akkk.XdeҮ;:z߁C]=ͭzpn0Ϟ}$NzG%{c+W,53cWXz44L ]***uu*mBGs@:{TU=9rm+~S1?ڕ \BINI~b\"7X\R{f6m_}n?Q8~R|Ĺz̔3ᱱ䖉}!dfja,ZLq¤f NMONwrt\z2{]BHaaѲ%[w笠Sr 3+w_lOxxʅ8 M564M+w2!7ϞLK 3:h”JK5rV<82SRܺt<ҹsrJ#?~Б󗿎60Ч4JPi//X_bd~5#XOOWrm+Tв>^7|$1!̌-yɽPGG2nvvd=!$##sԘ1wnB23F zwOzGz:{-?g!捵*=呡!9u()Ȓ)ھ΅WVL>cbB#Nnsㄐ}zR)mPL.E^If:s;r,%u"I ɱd*hŃܞ*C[[ٳg::2ڵs9{!Lݬ,-_y?(JV/ŋn7HǟΛ#" m7ktl{f6qn(566_囘KX,>/y\V^Nvwrо' 6k֔xڌ9Ӄ&&rsӟK+ֶ9uABᅋlwFq|d6+ɓB6ۼz rKZ ڶOH2HMUuM1IrȽ[iҽ}=ΑqV*,,fWF\;.rHry<.ͪ5-]o'/**^rYRRBDBͫjk-ZT ۵c._9N5I__/==bS?hɲP$y̹ ۵2^Y"Hc]V2V082Ǭ߸dǍmXƷ_O{@[[s\2-T2/-\MUUnk_62l}?]Kg>vKML=|<|,yY{yy3ͣa˖H6/\s0t!/[yLmm)9Y3g8enX>k9@r9@r9@r9@r9@r9@r9@r9@r9@r9@r9@r9@r9@rcĶyiKך[w:{վ2x{u!]a(0iU~n?ʤ'"?_xbZb\:;@8`>Ҫ\o`0cTCCë_W>neuŭ;q4v֎'s\rZ>̬O]-%LYIɉN+Wd/^8'3%Lxl_lOxxʅ8 M56m~KrJbnɔ\⒒;7cn/(ذisKnkEAKqf,>kQ7V* #$OQ"Of&ɢ˚5KQWO޼i *}oݾK),,Zb$o߿hwWriʌ;u#NYi;Ҡ!CG>.:{]x.5G?{禽!$33kԘGq$b /y\V^͢%LMMb׫OTf5An;mmmN>1xPxe;;[---ex掌Ѿ}9҄'xtuXu>y2\qyoV -L-VC]]]C='7o ̘5/%5^((J$I6NlҢ%˲sBaғ36٘qV*,,fWF\;.rHŽpum}ǟ|>xW4A-6oq+V}&U3loaay*pHo[^۵c._92ܑQ0ܷi{6uJh}Jzyy3ͣa˖-V^cm2/ЫgC2u˚uرUzt3yÇm1K|wpVVbK⷟<ᒝS#|^̴k{1rF>B(n_oߥk^})?Ǖ67P~gO -~4}9HBRN߾_ vo(3Xg}+[j{yc(uY0r俄 G9 G9 G9 G9 G9%ߝH vn>#0d 0լ a}#|XeTU=غhII}eTYn^=zEĄ6Z ,Ewo<92bޱ(_SMQԇ_}==[ۘ;7#-FX_omXZӳH?1'OF|;2D[KK8׍;+nq2S ;y".1)iւ dϚ1 AQԉXawDKz.%/QcFkͭmn,O:;& hҽFD0B[|UKgʊ*B_knmS  q)BMp(?3v\WnFbko]W\\T%Ug>*?A(>y }KBg>2#oe>D(!dB(7MLJL`ʶ4e[H|Hc@?N|v˖mמ1A  y [;1MSSCfIBz̡#F>,=IzړÇ ttzf&]{1Gm\…_m/#͑oX8Nf;_`6}p^𴩺Ӧ~pކ?Hk'LڷnGG..$rwqa$PId0TT [uO[<^SS~dJgIDAT֥v6 p3 ?9|vk{>$rwNfX,66'0/ LP(JK;|,ciӦcaaNo))l_& ;~ߨҽ} @KGz[bIBD~};&~}_)'s{I_x}:+[Y ;+)+pK'fgGϙ^ ;\ geN1LAmE%)S\:8t8s&''Gb=GZ߶l{ȋ>*y Gq_sX뭏eeZ;BRSb4arQAɓǩyY wuu=q\z ]i%*H^r r`m yJ23"a(JSbqyYeA^Qi1Լ k`qxk#"QSԵK7*LZ-) z#om>2nVq-ߒR 3/3yw:K͑+CCMOqrMO{7÷%^<[(';5Ey?&b>GBEvgCwGZ|>2n"_B!ߋǿ;дgButuUUU?.W?{V/ I4[ӪnԶuu@ulW_WZ$Ta98:Cz\UA7oG9@r9@rM<>kIA6^ o)7b~IENDB`pioneers-14.1/client/help/C/images/gold.png0000644000175000017500000000447611760646036015520 00000000000000PNG  IHDR"Hit pHYs+tIME4}tEXtCommentCreated with The GIMPd%nIDATXõُ\G̴gǘ@b$%^<@@b (@’lbcxgsLLoު:"1tȈUGP^)GсGUZ͘HOr|i?_o@B=F=v/c ڛ#`(UHL# ?Q$VI놴L6?ٳcm޷nw> n|s~u,JV]˵k`cAw6ڈDپ!=c!v$5o"`#gcQ,6T`i zJ'^}]- 1Da+b5p!B-_aqI:)yS@յ_baP `cDiDMAas~W#̭k IjD,`("\by)NKhy,DcR3>‘<+oIL{WQZA-~[]x;Zz__ф&r-IENDB`pioneers-14.1/client/help/C/images/grain.png0000644000175000017500000000032611760646036015661 00000000000000PNG  IHDRabKGDH pHYs  tIME FޯcIDAT8œ1 )3NFK8 C3r#8.j>_K=+".(B..#^^ TW=ۯU1A5䃂ۯ?v{ bK D7|WCn?Es"_PAM B[&()F1n: jpDp;c81ָo_O0і'9vƢl-:[;*[޿ rfV۞rsk&6q`ϻՊ8{­':fg`d -ӎMJl0# uTgb'3tjtPa@U2lhU7;[*̧\(X8-CaG,pyd4aXMX X ĐC`<="7H/ yC8q*]Rκa (zuhqf!ǀq?L bhVp5BJQHFbVr@e Ms1Pƈ%9T!nsfeKA3"z$[l+slbai)2--j0bDPA͸m;pkT&ݎ<޼ϸ AbNzux֌ʊa3:O߶,%bir9*i%o6$ِS$%9w.M(ЧDОĵ'.QJ*-PU*_R JNps.2P?nKo-ҌG@ܗ_ay3xQ2ls{r  } 1E+ jF5W lb2Qd^x]셷8>x'O<Ѵ!o\>lqMp>3ٟ^1sB8),~Gv<|66?E>W)C`]"RݸqBHvl.p65m] LuipCfO;4㷟}g:%ƌ=9EBx+bBIS{`8"xh1U{]8b FC&D0VL֞I]c2SHY՞jpqTј&~Og7`2()#ʸTÒfv8ѡgߧ_GSXc {hڞ >} ep4 vD- !LXsɢ)LFTRT-[`\¤9w~'JRbx]tTr屋&>SǤ} c*GUb<))D`1ꐬqvwN?'?e`^s|⑚(r2^!;Ϻ]0Qx)ӆZ8i@2`MGjOϵ|9 p 耯|mڛ^ j<Y<|HlX'a r$?Eh9y忙{X'1,-)j dB /k 42G1]AЌbi|Sv_5b,7.H Lj0g+%o!ee7@1a=uF|$zKZ,oy1b6%aH1↎<^?V~@N#Aú,E"-L}ږ_S|v[r.!+Rt0?ɇSW^b1YqX1zC"o"`>MCIENDB`pioneers-14.1/client/help/C/images/identity.png0000644000175000017500000000123011760646036016405 00000000000000PNG  IHDR'%dPLTE  #-.6 9"=#>$@%A *J *K 1W 5] 6_ $\L+&6Dؿ,2DŅkմ˦0Dl<1yS"L'"D8k")!z?+QjbfXS#C.Gg,"'1?/7XQw"rK@v0_7aFBlq]߬X_`'f*H 1C~ɓIIENDB`pioneers-14.1/client/help/C/images/join-private-dialog.png0000644000175000017500000002761611760646036020440 00000000000000PNG  IHDR]n pHYs+tIME;M IDATxw\ǿ=!a[Tu[GDDDqֽpSWj-jZUѪUu`E {a !A(yޯs)f@ 8U"P4ά.$([l@(Vƺ:@BbV1Mw˘lr~ҿWwe&QI kiOAC;'HuUK4DW&ޑʘco(l2@8 1-V@Ni G9~@tAÏRUJ7=:.tg \0 %R ljUvuQ7Bߜ';@ &&kN #Uz)$%Ǖi6/Vy㱆|VqVOPscڃ`&`P[+qCƍwc <D~Wޥ-Fwg{Ӧ^#:_pF_Xy'$B Ʊ̺֒z<;&Iz~0BgPwN{푱׈ppbjJhbdw<:| ʄݳadaj#M`[ĭ][|e>akC sdͮXW_֒Q&8eGԾ4v~Fc^hd߯ E߀I7hRR.%<>PtU=_bDi $~ L[yaNv1P-Wsa9RL?04h٥'kq`hQ3K~W(Ge؏#'dBTZSz%vdkAF. .Dޫy*$Lo0oу=ߺycPIVj֗XĒ8!w3=U %˧QI3v?k!WG x_R34fʘKG|eR#Y>c\8xz/L"'˯q˞zd;ɡ kSPwǡaqva-i6!m褅!csp kTge_&玝|*҈rtf\?jsLuY2֎f1 /`DEJ$Sה&_!88ɴl}4/7XiKc7W+t/EU [8|Ae/#u@u( eE~jzT۲u $6c,wR`P{­=SVnㄏ#`¸ձ7qo S6j(xwiڵݵ2_{83_ޓU;2v  ]^3. *K}U Vݽ$M2#/` 57F1qOHJG<(U7`<`jt1ʳѝYg->EР+4W="낞WI^C^sE\M;g $ ky_ljؚ-UiT @[K}i4[IϬyj6#J&`ү~b܋Z^Qi?Dg wI+75BWIKaza3Bw{K~k(,AŴ04iptC>筪#EƖ lFP4LE:keҲ ͞p[ZiBRhFn:CsQ49Vv8B hK {P:S74EKJsp_\oinBA(ktutS,#(,bzAIJ*mÏ_À[&Zi(ɀE %H'J2!KJL`U_#QhT-C\7rp94=M8{ECmz47MP\@Gyęr_X`bdTT:l]MT*n@RRnbF~Q75aZz}3QZ_NA.5ec}Dɿb=͓J{d@J*F+B(/вtfwa|X| T4adX8"짩J1ǸX=|RaFVѤI-^ K5Ku7?icGirO! `JtTAJt[tÈ:vo:voXG4W[\3mV LWC}hct?N=1{*w$4xEӆDQj_WR~usO3E}?}yh!o blO"R;EKZJ4 3~I/ 42+vpkc@lv{o\Uwu(wLkÿ+?,k5]xMkk%"{c_KMSZ_ZÕXE Q]'ժT}8(jMEۣD 2;<̮8IJ1,HjODq/*Z~dwj_` 5d ;զ3ʒ;ʙCcdDWmf^\X cf r14|@tY e}9C"#"': $L~Jo<8.|FIFg,pʪ Ulw7elni0sGtJX&2&OvH(Atqua|>yY)/=~dOq8ɓg۶n635P( ==ω&6 {l{:Y/XZx5>Llz5XV^nk\^^ 6a+;ݚu ܩ3g: z,z -M/\P[[[[[{ѢEKxkHLKKTQQ?~|QQQ>ph4sTTZn޼@8αcDŽDB^" weͺ _F~pfbU;w 7~ݛl nΜ:}SGG}K ?FxqNn={e~7_x-,$2_f-[%'''%%eeemݺH߾}{\\ܛ7osrߦ7a„իWڮ]yO>-++4iҢE2{;vTUU=zŋ!Zip/GO_~NJNzF>z5::wPȅ ++K(..:r̻7ĥ8m S| J.^66e_'۾w[X@jjSc"yJ%_Q]jp Ox4j(BLLLݻgc뵵pH$.KdxRj155]~'_@PKHӶ;jkkmvGr3C.[ؔ_P0`!\R%`2IJaZZXf??\ ***dTKXXXqq.t n~A\rD aw~}MsCzF&ϏOx`2%1?{9i_ٙ4c%%%%%%l .^qB'(%% NJLZjڴiD9sVXS^^fMWWWަӸZ|}}y<BBGG'11-h~ͺ՗. 2+7GZ|`I9֋o%lڲmdWFl^;`hC XnZO?n܅&;wlɨn~D@@Ų222m۶Դqtkת9rR-'NRWW߰aCPP߯_?t?BG:s'^A8@t4}ryP\NA tӦv.{p"]$#]@N rBb o B gtܒdDW GWtspprx|;7+y )f>}E]Л iwǷ*K1 CAt`"]Tյ̭̭)]J ]Dv1 Ϻ"c$h GgmhG$h  x݉vDFghk$w3(uM. $YwYDFgV fE_@_+ZGTl];3 }}ƞC"{Q7A8˭ s玿KJJbccԖ.]/(.9))ι|XXgO:e .ϝ]}\~? 455F wO>FT BHuanz:"(6 _eIȠPZZjffVUUNƯ?YZzJějyxD CC;.YǽL8G1M!&"Ysi$sa!(K"_E]?uKR|>?55uܹK;wYYYYYڵkѹ:_~<"Y1\XN\{yy͘1CUUuᶶK7oͶa555Dg~g-gPL&i5[,? C@|^D9藁@|Qp6S4/Qz,S}?CoGy(**^[~ 斶>ܽ%t'{O%p˟&b4tl;p<&:c>Һǩgi E|H?en<&xz/qCDب!-^sOq /ϟ7ȱΏN&q $<@|> bAꦚ2I))S}:#=;Ϟj@ӯcc^o"FE:1LtS dy|Ibb*vdlf`Ѳj"o{6Yer #*&6N,NJfiY15a+)QuqcF"fdf͘5Ԣ﬒aE'< Ca_x`AÈzIo{ҀmwЙIGx/oXom)ʈ9p1TzF_[a]\\ܼcO;2 #۷?HGigI' ra׮=7m1AMMĄ}P 兲T)ST*z0pT)*yB> i;pޱCAk6ݛqoTTUvEwnx/=3<}浿Ӓ\Zn|NK8)͛qރi>SZj_/Y]\nz+!iqޓ=N}ˡӓ'zJi2ׯLK4]F等ÿ1Qo"kO||'brsD)-HKHMްǏ߻}+7;o*,XdMyYo]*pj*Kk*K%Sئ:L'~"ۗQaAu}Ѭ_ြj*+?^$Jej*xOF,Ȯ >(zf_15aSA!,d1b@/C[ZZRf=IJb ]G8V=%elLna篫s;(1>Ȗ.ZN'Ua-yJs'.^PrѧP%@+۞n\TWwwq`cpk+˖$ZnNf*N'2UIŶg5WNps366|(%AB»o6nvtpqO@;ҵ3g6mih?u8Է7O]VuǪíFks:navIAV'V11G~ncEffj)3|~?7ե}W_EDyxLnP"Ua-# 5onia~D /| _TTpeǬX.((pj!IDATF/^=ΕiVgs :t:L_z-gN߻`a}߼%$Bw?y虳ڗ:tg7oF_;ÈUNto 3 HoLYLflTqZ!)23/-dnF81.]0nȒ>_R;z=s")];GLm3rFz>X6`23}PWwE<[… uu_8qD{_0228ȥ0k7gdw -#Lްyk^^~EE[w-en mmT6_{ĩkjj?xqz^EYYYE93+{ͺm`K\xybR2q\Hw pNdI7n...)..f&^D}!7/bæo?ꕕU323V-%x<گ"0||OOO_oGg͘yw7o84t:K1N};s%:;|ޑ`ΜU+2i46z?7Dkmۧlvh-lɨnGܸ:aSAǎzT<۾-0L3#͞ЄcclPR}Jӛ#ۺE˩o/[|Koܸfl"7oaM8pvZΜ44ٺmDZU+ ׼y 3X\'X[[Sg͚addԻO55kaW.hh]$Z ?/4$Yw;k9z蜥"S :]WWp҉'mL @߮QY/o>|y~ILRdeg$l}s=\t)CtsScz:]ˮKʻ2 GGt>dYSnEBiYڙY!; u5HG L@ .  D$;BA ==ڠ .ܑnOK:S۔@(h~@ ]@ HG( eeeed tAɊx0B3]5F Hܜwܼ|M-l(* HݸLu+,l6E H'x0q }^> "A.("ܢc3K 5CEd tAp)OqLP0DV ]PD$ަ EupLZx%d " +{hq^ bh"az/?;B3&:+%RDMCƳƑ|]M]Ey%eevMSQM/M/t\tt$/ 0?t Aqd=ӞO~S[].~}XdR?_PeT$$1Uדiܛ>OJ$&&Nelb2l_O[:U)h3>.˛2f=bDm.\ݿOkX 8,2aprh5M:I7}^}Qɳ5%9!%9ugJZX^p;+>H2ҀȚ2vYftuu];t񲙑1ǗeexzycO;2 Cx5X9m;̭L9_ϯ^ R06,_7،#^WW/e]{V\>\MMMMMZ|Eܿw9 4 YSYJ G{\Q_TRT_]z{M{4eK2Ғ3Rm7lVl?~[n~+V'<0!6*77Hܻ7o=HMRQQٲu y8-+":ESL2pa._[|ť #G KS vNDKd5R21z7~\To߾ξpojՊ=?#u+F"頰ˡD|1_}Ju?˜c~j#8QƒI$%]WԜݻù!brL~~Oyܩw ]P] Cӡ4tv7Tp/_5=7J*' 93%%s׎fecfdbhdbdJd/H~tWos2&F-,*622 ӏA/Add_,qӬ9s,Z_UlQ"VFFfĤwqՕħtԘe}CB3 p1X4Ç WgϚqPTߙȯ_a)Ra,þ~C4t ?ۉ6GF1s^YYYF[[lxauusss+7lL$Ο7wii|/.6n0 uB TRTu\Fjl޸~'NVUVVUV86|#5_]+hAA>d{Ÿ'\(mu_KKa޽л!o/b6m44qu8hVڴq/;1aukV 4m$}<&}b?~DNzta!7K̐[6!;3'uLNz 2$SӶnE4LeλF+8hPhJ*+)m$H>=k%) 5:d} \:gOܶn\8֖,X/?Yr¥7$.otz^_z^xޡ+Q)Yg[?]ݍn pkΙi}d??xt?{%aIlZtA /T(-y;>>H;ZRBʮBSg_{,֯hvTw"TZ_)yʩpoKSpZ80. h>nqG͂W},GK^j:?쥹]W}ϥfJqp'sFl%mb6u<ʇ巻d/Nyl=M3FP\}ޕ( b|8@fՆ[!yk`sΰL@\DXi~u o{Q?ߋ 6SW|yf̫t |/n×~x |9Gs%>O?H-^#$9|P)JPaꖩ5wE}.0?q=d0䌙UdNu_l, ΅'O+=[Ye߸ KŚ57P∐$8uzťGխqٗw:0^~N{Pߝzҡk7ʽ$'?PߟV?0kLoN'hTs$_zٲ5?6=RG.'O O-+sdW N?0 |SȜöUl{;{oa*5s3{ڌJ3`5yntCհ[CMn{3y />zfu- YfeVUYU]$T[J篚Qp?JCrß5>գ' jf3X1e7{k_W^zAՌ/F:s.O"01ޥxxݗH\ ?<񐇰ka օ>UݮK~祿ⱷ-(-{ۂa?6dzS]sm_1oh?ozyLMMǻߔJ?XGzsoX}1GX wdyuѳ?'ߏ9}k9f3Gҝ2y}vKhʶ sZמyՓ2Vac/#.¯l;_ÝU=¸P0O/}aB:*rK_\ @)n+;9ꦷ/eVY}똕ǘ@iv7`E8!ՅA/:|6xΚXRpJmc"RzZ8 8%0+.k9DfC}=7/atc5qO7Rqb_)ssf[kLJ=ܿ]uSQ$(_a,:,lyzz6T&͛>֔|{ѾӈPeW}q+u;5VVcpQ?SBB݋-rCOg>V raD]YTvȬBX"H ~0)!H]|rODY F"HH$Rk$DjD"Z#HH$D"F"HH$5DjD"HH$Rk$DjD"Z#H|U֕U}.~=q`Ԛ`۫]UVYwNm9?*{% [&z;Egc~[oZt+}eWL4[ol[">{8p֜hmfq=?>Lou {*ʫO~UdwUJȣ3g^Ytas~ݏ}~[nK3T[o}z>Mӆs;G>?M6|L6#sК|֬6[s/oXzͻookMX|:[^k[^yYvWpeo-_ߞH&wM p%n)W,}{e3H>t!x{ާGaXjځ;:{1Ό3 \jIY8CewL"ynowO <5]Ѧ5Λ-Z|e>/ua(( -sT]{]aDgW7T?H$cE]‹/{䑌95 -'\SBȧ<ښֶήR\SDYk.B7ә\.ʫqWw|s8}~4~qӯ>K[_ H gH"K.PS5]uo]vɎo~ѵ7rUg5;v\txh W~[$s L I`a+Z;\BUPQ-d Lva=~u3И/%(R3Zj 5 PTW;G0r2p\̥ZY(Pȴ=:% ^c5}2_8`c m**d"fSLᚪ 8!#6gj jЧX\ 4=/ou'TSB̬CRV@ ǘd:+ fhhwQ&Zmf| hTi^5C{O >DQҦ2rMs,pG } ({{-GTͅBp &aKznDr>VŤ)Lg;bqܣd"}W~c[:]h.m،hu OZ}y(:xjb{:_CJlkhcgl3TݾF,T3ux7',l&芎 S|pB;9'Z{FuM]>U \(08`5E). |ɁT*DC:uuj:gvd˃qHg˒.~si{Xk0kv HPHP"yZ`D1QFEޞ\<*o)`{\ng`+Z"ƤW~@&[׭(^,̂M'3:5A9%Quc y; S*4[4=܇"g0JgYE@č0BLL8 0YP?yW8o5x?)|RVCf?-Mdk[i::6$9bҰiw۩ "1GWHvG6\H5oZy<:k<-~z͚¢vw ŗ_9nK.pWj-x&Lc'pïh:UV (Z=]&!Țξߞ^q9˥4G8߉7Xoyo.xήomw/^W_bKe.~tUm<.`0tJvT ܻӷnoSm\/zֹkO>Ȧu+O9+fػ{//^N_^Z-#lo{mzH|!c[11"bh bZB(TDB mbYӌU!! q; ߇ڡ_o! <;Պ% azGG ϯoo??8mՋgŏ.GWT,p?p)(bt,2%"+G<ΰrCaU̬`3~56lew\D˒uS{ډ?uSڶ~rbYeݺKá1CGOT*pޛMMqS|ֲEcaYJ^~ab`B5t=f~&9nVBGAj[h>*<*a(<EUU.l+gRG㏔l54l%6>+(4D+f1Oe|p/+RyGJy(0-fQ wSn*bF^FT/5-zׯJ7 ?>XWC:ȡ=҇?_w/o2`.i҇Ύ4L&{kݼbgy5^ݓNg~rWWW=c}ZmhDf>rrB:. 6D{R\r&5ՑvE )˧ͷ6U1.(kbh9픓x<|OO?_ljmsg߼.֚lB0V7|_&8qW,{zbWǻny<'?gg~[a'U^2wR8\XVq eǭ>ιߋu˥{&Yc JW4go5M#mt*v5~엇u_V>ģ~ذvePhT\dSyeV"4գh͚:#)W>õ*y^rJR;qR]{?nƬOɏj+;/덍nnjKeO8/mt{ﹳۗ_:ؓgxw+*w.>g͚y__aD{47y|3fjdΔYT 0Ae!n7Ui T.0CTuO%@%!ayT}\kv2%·~b'13SJlB Y(Z. kz;y 7X#GÉT"mk 5sfsmYk`oD:Pr1v#fA@(~yrmq[1:-/5kj41" z(>7ĺRWb AR4L|o'L>_mܚ]N%2lZ]ZeO>['5kn={- $i-4{qk0פlSPȣB=[*vUmsc+E@W2 ϯj(DoGhXˁֽ r F1zt5 [ B:$lLUBœ}e/>M5e$B…K4g[8/%cJ**kTP *0n BՂO"8`y;&#M/=fe^L6`̉%01 [%/B7NE4nqLxڱ`eDKij` -7 |ũW|uﮌCLG.(F(&wLln@҂o'nyF8Oy靕뗛lrLb.'>+Y^lj/XEGمBѱ *Xq+f1}cGi[5 mAcIsӎNy栫 +s|w 'Pv:UmD8R?)鳑Ӫ꧝4zoy8L hXq`GtQO_(X!Tۭ .Ǔ1m(yڲ/29AԚm5$$a[^8T˗KfSb e@`lh9EԈ1o_pKo2_Ytt%PȝKm ^Oflkz e^5|hˤҔRkv(j =\@6y2mic-(^ʽuk^骑=⼳ lx!AEH5U%L^AɬGxf ҂Rkvچ"r OV\ #Tj*%HQ@S%}*Qg'4^pinEQ"|IL9ReBC Έ΢sѣf(pM$T аtϾJqC kuqgw1vJȣ*] 9 \f*&%acPa'z= v<1Os/x]̱]sԌԚlOnT"@4T7Z]2r4wPvGL$N1I[D"Z#Hdjwӣ ๎R-ciuLBeGJj͞XF7׌Z)MC?Ӑ,[{8Qҙ%G"-[RkvHz?Z.D@؀P/ \}Vee:;_Kq._n %uy+|AjͧbWnʁ#@@EuX./i5}OexOxf!GqM"a3 b J_Q?%#\5{N+g*(  Ha8``g`F-5IW0^Re89B(`>_,>*:(.i:5; YWߪg `0@@q JsrpDYY8ILoeg&e31 33Sƽ:wQf0# @ko;jm<@sql?5f' 8 8@$MA &xbV=-mI xs͜h<>g۰ d}˵q-FXN}$NQ@!Ϯ"hDS̎xaM/OaGylT"GH=\\N3Ikm SIQ^HSǽWzV7m L,H\S䀢ဢrso@/}fa>*JP,]+u눪Qu` 8|G4t߽k=1}E^pv(r!`Bx0sD=-X \'\uo_Q8 S!+TIZ8p @`ؠ8f R>4h0r$.9X]f@'ȥ'vN;3zѪh4.X|siZ֓.7]^>gHٲ,9@MmJ%D!yփ)‚p Txַ3]\9@l>н8_#" 3@I2Y1Dq9G"8v1}l0׵9SX.'6 ?Kuawb`1n;ajMC7/< +iZַ~mq{GhӼ׷޹WZEPc#Z=0yAh=oԏW]|9aF+ӟ2uhmӑGl: SPnxD'N_>3U[A@I~{݋,}׬XND"x;ooDoG)Y6~ۜzg~e;<_\v+nno3Ol\kvNkz^ !ģMMaƃ9ꑕihz8?ʚua6Ɗ% ʏoX,Θf6)[fY(,h=kǷݰzÿV>7Z&Kd˅\T(P@QAPYHo{@Kp*qGw.`g>qʁO?QM%峖/^w6}R]|{8_Q{CU& P Pv_ G`0(h Į$5{bY~Q͎lhͶp8Cf?K( [ \.8;UV+,OpQGH @^zB:baZawnL'Bnmh `_C` a-Sz1\Q.r`ƹA\2P̉]6bގ_1gϷ$v~JG?߸o^x% SsՆʚ*Y`h-«]/nj9bDw#T@s޴ӾaS,^pa9)PȠ[#쫕ZS='! $4P Q@0(.t8|äAy傯\qVˇi\wD<5𣫿LJ8N>nQ4tMtʫ퇝M qiiǒYǣsb,׽&i ՗؋_%ᆱ`^N P",l& h@D k]i|7x<~z'Tjk  @J)avȡT(u890 00@Q@"J~|fk[.'t°臁``=C$w6Ԩ}:Ni5 -Sg?wnY]SN;sA3w{Ea-i ^Vk^="Q](6>rBUf6QNv N8Xz69rpH4QM=QWUdb~ݵWGf:lƬâʟ꽶쓕ùYzP„0Ab L3@ 5p ra"8 ?4Þb[7+_kϸQ;)*cME+嵮Lh.1'P2KOqm$L PHj5-Y33 .LJ7()8Xt @  J@`Ė80y$z;bNUGqƝ Bvp+"p`Ґ|un1CU}Y:TrE=&GBpq'_̭>*JP&ya~ 6K`ҰC&x . (B `um,As26) ̅ ىs_A<ERڪ9(B *TUF#A4$Z3 ޜF ` Px;PCD !R!Ł[ x^zKpFߔBGbJB@@Bp-'V`X.o[UfCYM\H B# 51`*DRk>w#Wzpmss`("r    A@CɿG|Us';}M #W' ['`U]3 Wł BaLX0\1ERk>B>teP m?ڨvo5|[d ÛQzhUl m@J^jz.@F(8g X ̸pIMAba"`r+")1ll3,!xA+VYIMJs&N զ陼|a#Spp(w/H'Z8 U .BsA1˜QAhnH$,Z#]'j !0E"ס!(w|_/g1R)]5T?(\9'6#b^*vBQ`p( DRՉVhҀRkvyOMDϻ\8ӐԚݏi䍾nG9\jM/) L%tez,Zp]>Wgs*"ou-,ʽ-.xN󤉷L.tY=rOHTpβٞ7µKc9L&{p]Lg6CA6We֐ Qf)͒Cj\RkvJ&D&ٛYNy쵹LW.Zo${LHjj"۫y"Ne@(=A?Dot2MeY p( b\>RD}j{ǒB;鼽w_ CJcs"[,_"W!(EH aBpҤ/հ'{] ˗Z mjqWE0*l"t[Qc,(%e P fL}kVU B$,ܯ*(`ގ^$uF⩮[ȸtc_\ʜ)CB4!ąFTԚ1fCAaTp@"U@*2P( v TrYth ui*ٟ@U(7B+bUXSDzuqå"KY)j#ŋ&oʧ]!*0B4)bT$HjͰ| P4m(ri"LE:[7@(QJ+ՙTR0/oSet(vlf#$̤#%orR]Vg$r(^@Ln2>W'ҧcf9=\@Ķ w aD Yyꎼ w^8cS,MrY4֯Y+*b!MBʊpYdEKhSEmG!q[eV>03!S !f9n7(vwW^sֹ׏W?jY瞿rϱz, +.6&``nE%8 aB"W @BP BmY.o=ȣ/o'{> Zc[̱S)Y&)X8^l40L*9374(>m*6Lp8\V4M`Em.ŗ_\|ܞ7Rٵm7mj=gp+,\d {lT$o)#s`3]'UМUȧ*]S& AS ex@#Qy\hG=wQTϙ=m+$"U),UJDH)#ذzѫ U{6RU&!!!iXא&p>>̜ygf3y;3bկ5EUQ97̿9y=#)Ad>2!!QR[9v2GURB,˪FH{ٕ/zlx,˓LOJiz,W{vφEƿ\ IDATݣCrp2+Hh~]L|r=\l8Eujų6=2no|+k/\U-Fv%f`&Q ( @*@}@*@AP: EQZ,ott ?٧_T\׽nƁx~O`yZC)jq+*5I&ѕ??V@=l' m_}xVɼ`iiJ(kA ]2 x 2ؾrs녵woۺo?y xt}>BϞ!kl82"?k2 bcW>5Xzx.9W\\tFEG[ʔ;ń;0"8E A{xpX^n^Ey96N3Ao7MF$r~jųnt_ ] tbbBa $6fVå2/\!`,bS@FFFFȨME!!!{߸t:?[Ͼj%kţSV$6z o=*xZ!`+`8H#0!Hqg BCCkoϬ|jų} @FchlBCBx{]?Q)'eEdddLQQeeeZyܼS9ɉ'NLMM5[<9tm1Q3j f͜&b3|vvNfIt=;dS05 Vc%*EH@S"J9(!$N^]\7]ء;ޠ~/'N~[@Ͱ1TC1[111v]QATU;ۑTM% JTBu#^SY'ruB#CCBTE}>W~'M| cR>lHڬ9.r=1{C޶mVzOΟ: ѣ>$IIΙUoWT+*o{UL:Zo3N4_~5f|5@xZC[@@=@@*@@ @)S*pr#QJuMWT ?MkDQ9$Dt! %Z- +EtB ui(E:^*NgHQB.̞5=<ܙڭwjQQO>qVf'>KJisa{v&/TIߧ qo큇F'pɚU/ԫfFmwn|Cr)8bnPܼHQlwFTTƪJ$'(Eq/+ːXyݽnL5LfxI!U}Zhl>KA"{ \H (b#,E+=!=FK3|:R&;kJS$N cSYևbӚDBdʊ"[LCn9XrkD_c>f´ra=v~B`oVW7l<`00 6jHSyIX\5 [EZYUU#p"LL9L(MsGpN''pp!'#Uu:lD4W+)Hv]ƪiMFra3%kq ք |_]*xH&㩪B*pl0&Nz ܞr..ޒL̢$Z,A$—TQU%GM&j, Ӛ@Z;.T0 sQc#PχtE(8EVWxH5yd zS187YtNڈE徼px/!9BkȉXSyE(A(HR}"5(A*)UU^G$^ Z]gYgU˴`pQ1r#]6ePxN >Ѿ];P| ͺ,~N:Bdl/nb<"gA+GXdE4F BXX g J)pO)!(dUG^ţ蘣TDf3$H#Vx[$yX̎iMt8!R(D8C 5d_| [-8aJN!c <@ȊXT&{ń9g[jv ơ cyFI*.R}D=*Et2+WgѺ=? !BPL(6<%\ TqvO>W+F! &NAQ䉨ܜ#X4>Z1zҏ?Qh6RJ)5ZkjQVO˲ܪMjAHry>p1\TqDPmL uHwNMQŕ,_;vuF% /kզClbQcƻK:Uo޼^1sW&!d׮ﭿwxL2=)uRJSgȲw|-S`v;qQ\ys!1Ekǣ4C/]{ !O1Iڢ^Q[H-*r7~ysf%&s :d @5 F(QTBu NIV3[tA<@QD(WXTy~܀s}>_nK?Xty~AAw}Tne+uk*Z64h6ZJ3=9 Q )-(=41y<7_}Ox/^EEʟֳo@P/7^|[l=~#Ҳ.SKJJdEywaPXJLL0 ]_ It\pPBۭ͂ewZ?vLip@$1"/+<+j yZ&_׶S㤒jw9OΤ=zկ=UK7MLk0Bf"Q8M}+(SFȘ"$!0B@1"dž0bns+RZ;gɏ?PPUU&--!GљN 5k$IF9;s5Kl3Ku\M+l|Ee 53FQgYqbTcOeٹ@Ɉj:FDR=rkB")E-s-R.߼Ehbc(h+̱a#Bë@Ŝ}>!@`88|#TSz g$$eeLKJisa{i=ȍ] sx\R1O8:Fk;U+z=ztW;Ξ5=<ܙڭwjQQO>1Kزw%+cًN~I3ŗ'r:pDpX$ #b;p_[\/;>ڸ^}xXo0ԻGo̩˱F=yʨB'DP͂"`#Jc>AuznX2QF.mߡ֫a R!РKy\r׽] :DGD<Jx7 IDAT(6inSp" :%CD8r8Lɹy7=A!|)3^y]nRQN++Y^>5ͻ EҳD p(#"cx2!ϸdEF FI<4@xEN%h -+TQ${ڷo?a~曃۴6Ckbe%..RSX5$:nkN+gT~.s? Pw5ȐkPUI| )<1boZIe0Ti)BL&j6IDV k*#$͘j@L9Tǣb^Z -*4ca5A/+{Go*t`J"v(9CLc@( ܄(҃^z5#a4NDeX/WaML&KFJ7F<᨝UYSj$c)R0AVaO`fZSDpXct^?PVSk*(/7{=dR#P5yuG7GƒԚ^D;8@@(V5 T |IyLy9^^'D8^5D(X*֬r2#En_pJ:_V%T(% ]Oס5I HlSz۽H&@):&T #,:uyxMh8b]@D v7!T}'!n)#-5>r4R+["&{wxBM"S$BxBp@UuJU˚"^8A P %vL4##ʒ3OoܫyDAW=q}KH.v W& :5$b벗>xd$ꢤr%.PlǙقBB7ʕ35qsf'@ DcU˴x󦝣qq#jr$_סG"Ii ȕ&n&d5#VuzYPn6mǏUdI03$+K/*e0HG;UL`*s_:3V{&fVW,`00 5 `0a0Lk i `Z`0Mk"/E Kј|A##"{1/m|կݴǎ+l}]ΥIN`4:10+ko.\l.\܎!w>Ew "=?Z ,޽q4RG5Իߥ{f=zݎ}#p#?pfWzMc)!/uH۬}["!gn 26]_~ZKiEx^_67f]о޲郏}V?^uߎ<6yQxbvܗy|RlchKW%O 2(/i,ZWƌ{5/;|`ʤk_3 |On Ƶ%c|gAOlc)qgNȨi:kϓY{vHLY٩]{ֲTUkrg@nNڽ8qd{4kZA f8پӍrs9'""0Zmliud0Ht} u]7Oe#8Q/ ;} x;|aSJ.W;:+ǎy~'ݻ̸5 Ӛ #wkeCyjųuQ܌%%%%/_Q0Ңsbߎ#.XUY_^ 2j}i՚֬kگD?h՚QOx|GEK2wAuy'iS'?a,kK 7 ;޵M))?~ko`FoUղsX&&g0rC'OϿL~?^pm 5 AZh< i `Z`0Lk `0.<Fi ?2a0RhZKv6,2 Ӛk`I_{*BSežDVLk?F)%{/y?Fw8Ih~ݰ9f|`4Is9Fիgem`1TvA5-u8yg7feYĜ!i˖,$ Nfe?9;cw;4UիǪs: +i37njY75|r233è?\[>Ӏ{fh2W_{] 2N)tҒe+ϛ SKv˖?3{5^VA)<2q2k ʍqn#pF -%xxÑ5 9> eo5?`LDFF|$nشeϲl!wКۿ0 L&Ӝ'gtHn~FE}jSY3E? S$1dVc?p`B| KWvʜp< ̙„x=k$7ggt:fsgWNk!%%y~ O/i, W8ΟvLJ9<""oͺ~]}ɪas%;w>_}}c|6$m֜=i3Ids-^_aCf]@9kY94g/޷ fϚL;[﨨'nӳΏOj9dXz]+Κ9-(8}{tkY3W-Kk΍7h~MXd 1žQ`*7F\BG cA1=ŨIn.njdB`Zh"Ÿ`y `00oш&sկ9㸱Y\eB 3dsۀ!@)L2^y?f4.ܽgĨq`+sܣUje4:1,tf~c1ӻW-0iX1$t˖-΄QuciyG]w }ٕٮЩ͛7++صow̛3+1!8gX!7ox߿ͷuH׬o_խvKj褩PJ)^?S Fcך]L:cWnw~ ;4p@Sgo?~f(,t-{iu'==}~>h5A@ahb#X&P56>>nҔ[kY3JKKW,_eX&kY0t:% 3>h#kﺳ~D{[l*ȚaGgU7̄Ɔhj\g%MPcΓ3<9Rz豗W:b4$8ؘ0͚ ᄄ3g Y{ח>}zФcoiM^鍛Դ47//wS^Z!ԢEh[1s*<ڻs1}t}-` 5j!NvM[ ]_szg]**r=9g]w e]/a2h2Z6xsbh܅󫱜6uG7ثot|rC=kt֥gtHČY{_"~ ޴ymjyEn njc uds _a\ߣ78)\Іf\Zú8sFc0Lk ;,6a0WBhX~b5WOof]R|jJY~bU5_6`MܟXrW, Y~bFS՚dPgKL`75b5CwU˖˚ўX~bƟԫ{vu-ON!N紩Z]flSVfnܴf>*7e|lY?**|3g ib8n=XhX~bƟ5u411C!MppG?""iΜSI {nȈ>zC/Y}\IΝ'f\UG6d+_Κ/chڜy v9̞_ЃM~| b;r^x׈~P5B`\xͥw}Ӷ} ӂwM=fб[:w(guGkawKj1 κEC3~ W p#ȑ=vpܸ}Os 73IX8TK5gY׹X~bF-IHڽOo'fLe_^\-LkZƎ9vHW1 ,/`Z`00 Fa9@ q!2]Nb0gR@wJO̴rYwZnA O̴2Ǝfh _ľX~b5#Fە;/s/h_^^l3>,tf~c1ӻW=Frcܚ'Fס Uk֮~eGiƏeqw1gWfji,?1Ӛ8s̙vǼ99s 2xE/\U-Fv=x.@]0~:u׼g~?ҽOT\˯\ͷuHn8x)* Yw{=#a1w r`q D0mӍu;U`ZSG]L:cWnWe?OC?̦ @@&DW7[6}pȡ{{'<$m3.w}m8a_hrc?SOTFEpמJP#?1xx?YFPvH7Z\NNCvuMkҪO?YN?>988:vo$@aͷz k~!!zZ&)=QG b5J.xpjgϏ҃ۍӆ<6TOFK)9OΤ=zկ=' e\eVӴ nMs.7'vh2 ZHYx~mK=#SeQkZX~bi {-.]s/Z?',M~Qc]GzF~jZw~F:*apM+zŸ&fIm|cx}B@=jM= rۀ!Lnp}@Fm 55Θ1j\C 4W.(۞Thrܼz7GcRZ]׼m7o(GLr3.+^@&ƽΩx;ҧM3OYփY]Bq@ǟbh~M^iGHn^^nn^]Ԋg{t D1SJ;S%!w~qSmnH-/`-}q1p}222Pr31%o I`d(S&M\sc銧;zag-}j k>g\=Z3b86mzYIIiXXh7{7YVõ9~_}=fC/Nhz֔)UqYM/^s鄄GFF}'f,\2le˟8#g0FO|qB0T۞qjM{mڼuu_m.Ybe2ws:SSlMrphfƴ)Ͽ[))-eO{9MT)'S6u\/*p-_V{kyf?%O_mfKэTq͆aOE.=Zh"o3S&=:eң3Oy 6 k_n *g\ZS/!o'N2nR4ϋ.=iͅ NL{}jYtm? _MIk &*gm `0hj6kVVUUyǍU6 iMUNoܴi4r?As?JsU~}LkzeؒSK=^%!__{ƵI 7`aWQQeE(,˭tpn`\sZcO?|s˗. LY_aa]:w%~ߢbcv'v c݂P|l|gyAC1lS=owx7$mܕIٵkwnw[?dV3CS^zz9y􉢂sbffXuu^_{v1i|sj?07S&M|rNдAP/1r9Ν;3oǝv~ֿ{{ __JQe˟=wU/\{IDATSvb#S_{v1T ?4mmw1mʏ;3?6$Mxر޽zL&>_~ ( U5Fz2u@"3_3rsڵyyIZvX 4@)u.Ch #evL2R9cb{n0dq~5U_?QwyD{_s)D:vz52wgs3*!)u~,Zz^SFB3F!taZZvW~w^[n9umVf_np8%&3aZstNiMV7;, ׷[h}_lQZbԘneeKJK[XZZvq]Ȳ_hMx#lPdZ0;tN=ߣ7vt6u}|vc/ݷϷ>lpIHppo{o?߹뎡AW 2ؾrs{gԝP$ZAԭZe 2U+{m*V8Vآb{u !(&AHbBw8/}}r] ȭW.7E"}W^L͏\?Ӓˊ qNRZp{1{,OkCzY.^2f{¢B(w/v.V Ͻ 7]plΠCDDD #""8Á[MxFzÍJ0 G>e rh 7ktV%K$ON]AqyAPOub0z5~q2SFtCt^X]a.fϾ抍bE[A۝\t:ꍺ>Oу;6Zp*/R+ݛ5=!|?35 󥤤4`t-Y[(,缗=kD؁ifll+333((C]5wFcf00n]}mg)3 ' ѣ<7WꏖzHij_**86zcwiubccq8_'!_3>rܹ5nG-;k/[x㧛+{^M9cD"9T*uvc5!n!bF%nh74l۾3HkdIb0?#X>}dDS5j$PL-f@bL䆫k3Q]EcҨ}И<?G3pB[yk7@kt3|8"@,@k@k@k H>\2@_0XH^5^CsP__qsO7Ae0Id 3agQs@cALÑ{xo7wQMEVT}YY0so]˝]'l$JhT9>e95mgCB-Je cnnlTp8E.UL.Y浞50hZQTeKh[khanRswua(Ƶu{\z/{/.y4ԜUc5I:ϝHA?+i= x|Ӿ,OL(/YѴFF"Tf///A~|nJJ``Dbfffnn>d0^\9e~PPPH"<=iX㦤HZZTK^./hΜ^w pv9mfjjZg<\9@kq cʘ\Dnjnz7nfdrRRX& 5;;;,$dg=~3gڟM]G0xPػ\2vH$557zNs>-M\_ EhkkK"N$װ萮^e R~m鯏_FRENh;Ò[[[Gנ5`&HmULP( ɍMcƌinn"-y|vhh׶/_  齷k s;B~_YYk?+n8/kLFŋYXN>ejoi^,/oq۰Y?ָiI& ;-^4W[\#^M9! 9)7<<|쨓ӳg(jeeedX=pdR2ɢzwߚ1cH9ˎ\TV[Sxvc~ 50Hc7M8'P]d] iHޝd2kj(vDJ<ެBVÆxBkC5w;jNckgmmD'Uo͘tvEBX pm5mK}-k|P`4IJԝ=kȑDsBHpc#9Oa%JPJBDU*Rx<7 v'Ŝ 7/e"P+ DD-Rz.(qDsDP,,,$hN03ãJxZc(0֜LIR'~];@n5QJ k D^:_mmrtV. &cyIZdrYoMT&)cyk`p`{eJū/ތ6z }'J({㽂@@k@kK{uUZMW\ CIENDB`pioneers-14.1/client/help/C/images/lumber.png0000644000175000017500000000041211760646036016043 00000000000000PNG  IHDRabKGD%!I pHYs  tIME!eIDAT8cd1ȚU/ʣȀ,v[!\/#q!,l%0QfEÀmǍҸՋp|{F3rO!X4c$ @jz 8HX ` G FM3>CxN߽rn-IENDB`pioneers-14.1/client/help/C/images/map.png0000644000175000017500000060450311760646036015345 00000000000000PNG  IHDR|XPG pHYs+tIMEʰtEXtCommentCreated with The GIMPd%n IDATx{dyUwy2#~CA8swXx.x5[14 D$εNLQ"@gSăj]=n:ot.kst.ЦF (Wu޻ yąj>#K  o9*Y!jYO :KCPuPJ_t 9#4k ѶhJ@(W. g: d)!!4dTĩ&kQ ] bzF) H7@_B'%ѱM3,m>ۀI@t-W(C 3%tFT<&K n3t`@umFh"^@aژ%>J G.cL)B0%J/ʋUē -/xD*D |ɰ{5@_ټwoɦ-Pjn.Z dFMQ@-QM4(Q^e@nƠ % ZB>hP~*I]v,jI dm},dzmTFs,e mY/K*RGuG(*@QR? zHA):+Q=( tC"+d=D"E Ogzv@n t؃3 ,ec{f t@Hm8tAjTֳ^qψ58HP׼x h`0 F9Q/BQ6^@RtqP@8@i}GFXmeX I9NЩ)s*Oy(ty ? "D 69Qs:58ij PȏwFm{O6n¸H|$ כ{;6 kᅴZܲe Q2$@j?;+~|=SS=1`ñ!<, ƨ`s{~5Oג݂l8nr$]%<qKy'qqϗ`ٟ_O7xꄐ,7{{h]z}mByjйFgs-S Ӧ@u9q YNg3t<'myp!6OHzl@V"iB"GuBtnIb],%= y@ &KfI m84T@®-4FO-i}C32\uSfhǶU)!}PM|QZ=RFlڤPhRAtoJ#+|O_ko0ѥ`g :=g>[rNj%ds[n^u䪶)s &exKKb.a="E%㌴sV` .Ƕ\ZY$)92y<*=`=o{ף"Ooѷ'<d.{ bH{hgS1^ B')ZgD}p5o3!ZG'>,꼆8)A|Ikz »=/L@ρ(Zʭ-uy)8ĹFϛ΀^(4j- ʀO 0(׌E׆]D;k=EhDtl+AQ8)uR8R\OBۗ \QO+8񙔝QIY: 6Wa!Y{xdY\s%RHy_2Qj;>}??Iۿ%9ɞ[Ou$ FƌmԊ!$ BT_)zbPC egI.Jr.QГ8j@2:]o.T,xf c/{2G瑱?⃯{BjB]3<ڀ'%+ęz*hUT/m&c{H=,v(Q߷ 'Quf qczs}!)RTWABJ9_f6SY̅)OT9I J0-Tq>ϯit^- R4֋i%/ЙZKj*{B%hwƆ`H_8)Ԃ:a65|枊]qLNk:]Z1A98gT-$ݱᗿ;.x;;/|P5ƒs;1#k.Y> #TxeNqQ%Ng(%۳@:hxax(a`tc64\X!q!w/Ё=. t2+%m@6‰ ;^u9&8b9^6%줾h*.P%ZPo;S ?@:OB>CS>9~0@ٙA ;Wݖt: G,%IdZ3 -'qj$%yQPBj$51PH fż$ EQ. +8Ǎ<ߡ j-5,Iʏ7EzF_ 8?Xhh@ТmSCH<>MD-wNY(Ay5%Gm}^EECVh_BRiP%{9:9Œ1Jl>M\~ QIIHB;N t{J]JcЗ{K'ggT2ơ5P VzM EIr Yd^! =I'x 0;0LdHST @ʊʁy7,{]?rh"x[/?7G\&uZ ٫FX n[h.``['(Zij=T?d ;Mԋ[G)pɓآzZD=Fy 8wQ<8fC} So<ˠXrR/z~iQ؅n9ölwjv8Bۇ>*Yr9?hrzs+Dǩ񕱻|@y(_PyEJ*Au͙3%㜪QH!0'@?ϒ}E|QPS 8ST2i n 0*jFY;<x!}zCࠂLW;yW3KR%NbdhkCN@J(ѨPˡFQGS}9~Փm/$a4#;o^NO%mEZ5y3mo5;!KȱE ` Uo m斮mDt?2o~ɾ6#`Bc' P;r;D=Di ! aK PϓC+\w Y]i)3J>{M[W _uʪ‘9B?4x>g>^' <\P G.<輦,@t,(%,JtV?f|w~~kS~4WȓL%؟,l5yDZWD Q #^.UA`wOf7V: F;gl!2xWfRv꬀9.FﱃA0 EC.Ǘ*?Po7dD}@A7)h_ 4L @ClS\S?@[h"  Nn^`Igk$i]A8t=I'Lk ]j/.~ݩ}j9t:A q0JP s$Rh,\X,"O-e\3J" QSPgT.NQRYa0AP=f9<_z[x6DGTF"]qU'c^##l}t> GO YF@O&p4M(E|SMk-W Qթڇ{Tp}]<$ zQ-"]EC ;2Si*bD]PמޱY'2p).~֊@OPO;AkRuUDk`vv8}s͋V@Is pI||_"@5b>ȇnzȆ]?ʛyc>ݮ EaЙ!I ӤfT@ T%h]^<+>+k6YQřS%PB,%A5u]`\Ao_vy>x>sӞLUOk@Ξg6O0$>YssMߧiy|<\SmG;6;mCP=MgPmxo Sܒ"bp#.*p):0(W@r;׷9X%B[:삙ZzJppauz'}P_VLv8uF7DĹ/|3$EUO|AUC<(P&(f4}vDJiC@Dǁ 0xPSv3 F -hwH:oHoç~f^{k+=$ 8, uUQc'^5gk(KT#.o^w= wxө`kJ9|1-m$^Le 9Nɺ)~ ~_|şht\!K v2[(,pt.g u1õmT :͈}F;zMI|3:+(O<އ"Pħڐ3[PCqP&1ϗv_'7ݩiM@4 FinjL,ڻʬ鏍]Xن3A< WqY{D I&҇=kU5Y.++F"UtvA2Y0>C -_]ٟK?cmaGM# Kxgp=B箝XlN:^nw="b== jv'h|}Mƕ]Vf{(\"Vн3g8ض zE) 4 }>.x@AÐHB1xHvov -P؅ll˙Tϱ̢a5m>%YUe.8 9NQiZ ֖zM]'ϘNs:e{j֏mR?ZH< phG;ܷs:w|u;^s:; 1+|wd.$ɰ .6'?޲UKAUs/PV(.ZOwuB/spI!'5.$%sD=s=ya1΀]@2\ Q^>QqtM:mH VW*a6@/loĽg>x{h_.W},,4(پ'b8<,ydY!06 /E.8VuA#p#tlFRkpj,kfgTrɒnJul[8ve#'@oeΙ&1Ž9ɏ}?vp]{ W.ݕ.uԽ'G^|/N^\l{qb>9?`T?]M'(hIص!DmT%V 7\t|ƛ~Gx?P^y3z%qOqh YӉ U7o竿iW7>iwڴ\idWkYO[q׉;ȋ&a؅5__'}{>W׎% oPuL:5[>>ue ],Ү6༲[gԾeXTwSO?'Db4>+=Tw8IC\uK rVBrm*TA@A\9(OCI$*Ё`^ XnolXzʨɳTY:MnPc*kR yU-B s^777~=">;~+ڢpDMQ|3CGJl̚Q:3v}YA,Bk}tJF1:NS_!ڸ=;hNԳ9x|gQmEuq̒6:v5X*ʫIK MA氈2 b@n1$@/ T*TOu{v;xjvǘ0h {x,d^X@YY&cˇd<}7\˚ΘΝ/CZg{(C>MX=>0}\aҦf%L0kJN0/Xs:v MkP8ēѹxR0],-AeS򢤿ts~K1$䓜1^E- '`+t;E߶s3锃ٔ[ٷ!$_g-"N?ej;f7Cmbj3CK"[ ;]|k,@y5nDt,Bƺը>mdt!ѥjp&vr^!Q̵ƒ+V;\XS.*h%8S!n(#@Q-jaZkRD>+n߆|)6}Ay8$!k0vbaz^/ 9Ǯ+WXe:7$AHxT!n9Ӷ<~ה2t{ Kjˆ3D}cCJf4))󚲄UI$kIz].7]FLgttAȸ=|ɋK(!%s'OЉKRllw _s>v>}m\y57Ӿ\Q"1A')@h5pLg6dh`63$:MD 3g%)vk<%Vy !Cb u T8ٓ6<(N x{k$ؕ_]?'cFZ]s &nlN!NST6ˑСX"6A +EϮ=Ǔf`^UX@( ?M=.&,r$IXrp`H`O9ox%?߼lO3W|ӯګdpoH'9IM*<nRj |O 0 ,Oyө&*(JSRQGR # .5)1a:j_~y&9{t"L3i){ڧɜ#ۚw;@JSvA>ǯ.H{;ì ӿbgxhxgĝ)- .~ȟ tѤ:l9OcBWDj u,z|kc'ǟ?ۂ(@Cz@7l7NwѹK&a#5:;dhAq3Yujc̮2^ Ԯ8S KQR6#I͝w V7kCלeHԶk/!fG|!W%`]MqZ䮻J>5d9->tyZ 9EQ3O |_WXZ}O0cĂd^Q5ij {_:kj0BYSw$q$Wp8hw׎G{`Kwyy9ֹꇺݢ!ěXb`m 1<̌lRXF`ABxD `${$!W[-uwUf3'{/E=Hka6dt*Vwq{ 'C0 wvA:ྻOUU_IVs%#P%*,0$SHCKVItp'1&G1S .M05NћPTWP`s-`t -53.)i y]k;dk/CGSnkc1moN`Kh'.J,Yh"=uX+~cx>Aa5Bkrt1Ǥ~G^ͪrL3+M#j` Ϳk;XMMΟYnKX,,>V|Qr"DAHH|xVsCh8}:UQu~:,_?ѡd>x%'.b]t,+y *À:! }֗|;) K97A罏~2<?,Ci/Yq+@0Yl2!ZevE); #(JM.^,rΟqs&F1, 3St1̠v2)Lj DwF)t#mz; 0 r?F@gX030OQ4ƳCtOۉB@Na%6͵ A31t>+KrMtDmU㨜[/K<7界{>~ +zo;W}uD6bgt$W>L_$pʘpSIH?7Ln05Ʈl87~Sgd`2蠇}F:f#nasEF$lKQ4xUn) ~]Qz81¡6k!*ܲ;PLRНaK*|JǛ[)42, s 9Rkh@v{u<BZ @ HGUEzS.J_E;1OnX&޴0h뛛#w?Tx9c|=s zk20:{ {+&z/C\h!5LFk6} ms}Y( 0K!BJ %GBHo - 31D@=>pK>T- $YmRW8aBBXijKm{R/dkKpLΎbcC=5`#v^ I+.^ nο?aFmKVX)8\_eN3)ۃ!NliDc/d>n dSW789̧(:EF%I:L 9d6J5ڝԝL|}[( ޶ :N:D>GF0GG$uO֥> y|$n;E0u4TjrqvFh(%z뀚ϟA-` nF0cܛ'N#]R!$TNCŏ V *IID(ak[Xk, ! $~3P!wi8pĉqCQM$ġ@G SےS|ǡa[ʱixv=S)'n?(><'31.˰IˆHt}B!LgfyG] keΨk]E~+ml [M0kw7Ha0Ŋ4FXtEU'[f%KlѡE]Z2dW?FGCxgP`"NW IDAT _+IJ1uMq ?̉2&[dP1m^ 0 {g)0n Cd1@8H;o-54@6%B  g>ʕ+7-=ι0edqllwC p@Iʲz{xN(>PQB/̥ClKVrSFїl%j[qR))P*+OyȀ+W'yMZIS#]Ca+(?Qa&2>~#sQM4/o?2P8b9=$?=-(3蒪 YKlR\  sF0j$)aĘ55H:g)J#XKQwHi|Tdt^?>j)pkh1 l4aԉɱMwR0SZ̪ES;E;he!)QXHⰡW:d5Sy+7'W?)<.8wQww#DX Hn L(, -hwIKRA*q$ZpـS[8AH|*om$mux>q=OW޸$>įpv&+^ y|!Ňaz+@uҒ7u"տt`ʜdPw}Jf2񴠸ubt&!!9_sD8AwSp$X"569]* #;)-:Hᲀ(ƨ8uL179}OJG}t;JJV]W룝d<Ρ& Z ܍%zRPTwR>١h\2]ԔChrKդɋWt[ݐ7 ݒ(nKYznc[Q5*E襂n:]HSA'h%!ђ^O /ԥ^c-X dcSrKxk 5vt;&#^x|}.h4M_/g c>#HCk6eha{0(ZcY `'ySLFXafu,.;TdWq$ヱf,ҐAiIO0^BKb]dEF;I(I;}̢UNe+/4hcp6SyǚNӔ3<3ek?NtI=XL@2^LsPvKh'򥧶=m*-Em:\nd(/,u$z'?}H\Hڗq^ kk-um1zaR1FVGjC ݮ 榣u7ĆP9p斣cK7\lOv"Y|{>~ ~V|xX?7p0.&JgB6: 1U) LiN|u!~BcF!D^NځmdƐM=w|)ct S*# Ӝ@3fʣ'ź->t(:n>,w0r%MtJ)t;$D;hNk?࣏-Y.-4xFxVˆʑyү~y6Bi6<1?ǩ-}7}*>_}?}+@9mv- Lv-C/}TP mIlYbpM5>iG{ Ԕk#3gA/ t՘![֊w5/1q5)XcMYW lQ3ZKf1zGDGmt*'roOf%1r~{ |, bfd+Hƕ`*n}MAv8__CBRU H!HpH~.wJXG>>OO0/tI[8iKns= .$loEt:Q(QW;oܒe5?Om`U~?7tfutfBo/q:nD$&mLhҍ>Sdwtdk̪^lVk]%;*}ŞC8CW{C򛄑"TBۊqVPQao1J MmJ?S& 1jj(*-* !gO z=NCV^4kOrt/" oh(K` %eY1[q84$D "Da9\ m>Nx{q:kjۧ0ӡfK0 SС׍@ &\0nAv4CkHaqx:A6 Ĕlz1 a9 Wn\\0lw`ʌ׿lmK$1:m@#p & _8: $2tġ%BR5Wea)g%JJݪQAxwjXp,,a] b%a[)G!b˘4w_V|mhф \gWW?iOvM bнwlA|W#R4<"+c 0e4Qkh; [,b(rY/?qѹ;,[w+LVz{=aht95Ib)$#mɌ$M~xƂ2OH7n v, N(+hN+&ʡTH!RXԵ@ĎHChl (٠8@ G=5EʚK]Zl`5ThpD؊ D\EKoz {1vIr@xsx)xwkF&hJD1fg{ N OAH &>Y?snO-RZ%+st0(BQz/VNB_:P.A.ѰE6YacS`Z~)A;j4峓*M6#Ƙɩb G;H{w`ƌ/? 9hvJtu;\^cqM ZFHȎeۖO;iO6;˲G?i #$ Q(ow;^x_mg#j+pvD."0lXp(- kh I"SX*2KOz7 PӀD%B8qΕBꦢ5x{,wVzKO0YNn;VGt@8ஸv5<"zV28lX@ 3bѿV܌꼄nJkqB ucK[pišb?v+_-n)m20n79̃.Ex+O;ט5ꪋӤwF`EǤ;#/?}-we LYvh~{711Zѱ¬7|'auSX`#OcS׮sN7}=]!1AĄ9^!ƉW7F< _]{~D-vL-O}⣏{E9Ih,늲G͠9D+$J$u 0k-"?uA#j:BI jWCTkbϿ `wo|IJbZiEq= )<"G42j,Ztx, `EkMGJ")uox&u-(V+,shQ6VPy*ri;)@tl~ͨ:RkLcqSyݠEW#dVS:}R-HFQ9f DSXyH@hSP WRi GIhitY̸x2L3m3:{G|pYd<<Ǥl2}n7*q HfYoHaq"I F )z]AihbɲBQdiŎ@}FqzG .j㜣% 4A*W8("P 84Mm,@X% uF'>zH9M'Q֎ؽv (AR Mh3gNDLS)KUzN=c^W|)ӽ"غAEi_ޥ="֒XK;=`Hbk kJ. uyw>2hv-G' ^ _1i7EZyøhwFP9<+ݾwgz!-f6Ai\/89՞[TnF=#.>~ / '$ll~HcY`axiAc*8lr@hH;[^'[ozS[{y慐6 zs|!%-EwAJAJebۗ AHړGu Bt_S߄dPar\`5RHBGXURpuu54.ɀ( 8?Bl#C)z Rxo_χ/~+KhZh%-@r9EҊCthDa䈲lHt "ybKeA: x|w=QBytYtΓO^1١iAi G,K (Ęxen6^i߷;$!@W)P4x3g&FP4LzbvL֫Je*+II AJF =.N?iqR5s_?ƭe=vK0ёd~#1etz)2?R^rfjN*rh<C̽V!HuI#Ӛա@G!FhW`\5:aZ;`g @ P)=G(1Eǒtڟȝ'+CAZ =pSǷB iA'ؔlo+67]I$ÚG5|ኽXE ̙SlX, f R ns?J- ήԵĖn8h!!-FXh+իO-6C #T@4 mXL^R HnHQ*rlF@[`+GŒӭem᫾՟@~Fx>r-L3o`e9s0ɦt#d3\̱rUtVMGUUdG, 7}xI|Nɷ^b(?qjhw aKTA4DH  $.Pv@'HCdHBBҿ_;j|\X|軾`1ko}Xg(s^ {BMV%0· tgSV-TkQYc;ѭ٢iw֚f6$:vtN5ٵ=УOBh/u+ Iɖ%:@S/;Z<+(*mҝl]?cн5ub|1fvnŃ'iOΝTHSZuuBAk$Z ݑđw (|xɆ=ՒX:݀0ft`aYVZT4 @**QLXmRspub _J^ZalAiw7>|In b:Em+:aɜ a@P.+yCؗV~?F:Xf˲@S[)ij%Q`>_WY5Rob6RT5Ý>|gss&At7}t!m2_v"@anwh(Z@3 IDAT&S GAg3@xfkkq2ج%-aJ!T W.i%mREQQL^ogs\O/\=3[~?C?Kn!m'd˜Qd=tQͧxwG!&_2{zjݯ 9?!j_zo4[ғ-oJW͉tQPx)Eq+nSZD'O15~ӛESR{ #M:%m/ZZV[O^D :i MN({`+췑 q,hd0b-xCBS;V+l(KǠ80Vs驒UnI7Bz=E8e5Y.+s Xʦe㘯]mȦp4RP9  ;tKDq@[K~}"st*&قEeݎD,"IcDZA17S*NP2o1LJsʪ`Z'贺fɕ'TRԠ÷>?Id35ϱ^&d Uݐt7عJ ubWe;Sloo[ Wg׉ulS<^?e8kUA9=!d2Ն&_b/BE#$jbvt8AIq+{Yŧ{z>???'=y[7inȖkH/ё"j ;4~kbFg70&Y  ;%:- s@>K+;-6B`;&;GwzF=B6#~m)N3w4IIG^^4j.^TO3_ag̈s̊U](EGh:n1Rxk?:ֹ$m#=4 yoC7H0t&՚lDGf)0a4!׬vՅ($[4>]`xڞwMD= 70eU}̬h[2:4I O}5ukca/{ï+%ەt{NGj -hފm^b K#njJce0`(Y58E 6`̧%IE^T9 ! Aq}(ShIP arU|Vokҭ\jˊ"pZi%tKt@ n'q!Bn?;Be+HQ8VLsLnJ^u>&xs?AZ1X,MmTzG)I(<+:tq|tb:4 kpbj`e,KMݢjGAb0b#M9{4;gϐZ)ȟ|go`!L0n|p,MSԽydY^9nF܈/VfUVUVt7= v=A[X#q aH#"bÈaҠ1Ҧi肮-rָ{rΙ?Ndf4h'{F}rETtIiN ($8vRE$wJ00Wȍ2<~bxCד~_gW?7GǡR=m<\\fs u^=Ps|27 yȳok -t-gC& *]kk&'5J(Sb|x$j6!|tWSR.6/HqT(ɷv/f5z]QhMD&X~u{0 $PKcut(|K.py<'I`}C<)# zY]%(%HiuZB)d@ٴ,W9R)S}R0MP1 1k1Ý1q fV1)R< Y._9__R?U_ ]WZkI_Ut7EPB^HĨ~v5;ܺ}{\4V̕_ځ[^4y SD)L.^C5{5^R+&{;g`WZޓw.w7 $mX<2XQ,Ct(|Xq%{$61fkB>͓V$?ybQ@ s # H(Diz+4츥Z;E-HAS;"Y*霟w-(uT]Kg:DJb[pk;tmitȆı$NQ r XԄaL%$QD:gtC[z!ƫ7 Ɨ#ԍtt`LYuDFd [>2QTuɢ u:KOl 茣+tYStaJ|s: 8ڮu:L$ygW:z -7!Q0dƛ!=ϸ֚tlA]U4ek' J|qBzM^(ߢڮ`ʝ۷ር^%k XC0-Ydv mum!I2 yym:l]T*b7<$ oHf:"a Xfl%:FV kHwvcGƏ8tӒD1)Eq<07?z_ ?ȭ>SV3 b5|}ϣ|?p|ɤO~BSo<ϙlmFPuBPa34k00EmN#Z xEqtDqD7o ^ʥ WA\1b`僂w_Ecɇ[Ll un;~ZN+^į1=(-ZX<`=$Q=A ~pԨIt'ܚJe(}Fqx*c8=cǯ2]pXD2~O*A 8I d f0_x|;0LCFۊȯgpX:h$΄mGԭÉA&zY$#tøK2 $RB9텔DΗ}8+͝5}#,f 0IXU%5Ժ{٘zRTEIB6)n8wJKc^iCR#I/"N"$]~jH"El~FWMkʀy1c{;"sAJSqP5jMǵk[Zה%]0nx)ܿ{!z~G4uM1+X.WĉB=80}pA:ڮitUE!AG8N?n7Ux3l^%qW-ˎ$1d}l{,1HhI/DqD0v'4# C$= mԣM8 4Ḙe)4#rq1Lܸg}2[GEȀ@8Mv"LPIAw~ OX(>8ՑE9%E5\w/F AA5L<^Cut06p7ס53T: p#KO*6=*_5\p|Mȭ[ir \w>n E/+wȷQLG/ C7}n=Eqr.''W.1J( =1ӻo!'I]urԍ#$qP#C%a6 bv">% @!=uYh-z&EҞ`w/ YG:t태XhZ0gH@A釻\ۦYh^_1S&1eIYׄa@մă[  FYY/kPw؆$ALz-I6Gy/lY:}Ν!Qժb1[%uWSV{@mt-k1]7n tkrb6#L4Qb8;c>+,s1q̵O}4Mxɫ+/s4T0t]g CV%]58A7S-qLK_a&d9)Jsoꇸc{oD NtZ0;Yk^V2b0 DHW Ćsr&mT TuMUF/{X ~>|2Ih Z"dI:O }i`u%LvNO~/xKѺxKrDEKq689&!Ǐ`[9o\ Hi$ 趇J街3YCMFhB$ &Depk(5`dg^7Isy/d' yЍf2t:Smސ: -z%t,Pn idwNs%%EQB=GTF0!nL\νi # ItX:A;T* ?ݓm@ Ҟ$ Q7tt: 4 paXDoy?sB&/skj0 O*J#iu˼[ZX5yB8HlxQ {UE]k(ymjjic ]gH}Op2$ CyA1j`r47/3Dqvr`4 ro۞G>7n 8hj|D'CG۶dbuXa7A:! /rV#opm Ӷ-LgY8C$`xWd!8AXY !lN!tHjcBt, ra)ˆݔVs zo؏N5ZI&0/C?=cYmv\?[7 L. ŜB:IZ#b&-<C0*Ae8C!8ʍm`WZ *A_zig*˹2< }֚bU{7{O]Ú^Ӷ- ` .]'b!I۰><`8q%߻>Q^}h@X!R\)cLLx#';% .cxŪfЏ"L1# <&P+](|̤B 7:I9fu\8?D!@CIFH=l$?^]+.ǾV6F/Z?В&¿[yT?'lM>fdВGCT:Ja? T)`!2LC($EcX+zVrũ'\?GSzPZ}cg-jX4 >xPݺqtB I3b{|oƊGo`P.(snݼh0( RPkT() [>k=p3ox'}s1`~&@QcAJsV,aZkczS}I G1Y;Njmxx!lo R_2_XKa˼`SJ@H+ o`dÌa2]VDg)ׄuhM 8舢֐4IeC'mi,2XQd~Qu4t6-Aor\o}WǴbֺ`i!"f.4&З5iX,$,iZܽAR N:꺡^g3[9]љ;GZ5V?9%Xl v-(mR:1@so,FJX0lL>VHZ4 #(&"XmTwmXOJ=6K ef IDATqE:YՏ&oEW%ZYOI>gYܥhQXd~:=J]Pyr(!U1I !́9,A%u@dCE 7?9z snalbw:)Q9'G9K-ʍ&ե RC.o3W~i^XNv8 86Vx%g1ԍQ("A(PpӳcЃ|1x<nHA/qSn8[8wS!.# :G i"Gzi ]GK:8`:1V:VKG68:ḭߧkaSPQ5sјӶkKR&,kN`]jqaH;=Kz' >vfQj P^}/c9Rգkg%r[bʲb^orJ NJn(gx"IrvBgNNnuE?UXchA/Ś)쟿 ~5k׸}6'GvD)rji( sYc:g0m 0oF#g88+$! ȳ}6>.Nz.ut` EcCF* @]78 a#o&#\IĄ2z$u:{F,Ӽ1ioQl =|)3&Ädwh ~\|vomQ$yziuJ>HȷzSj)VE*SZ|W4}Z=+GCWXZeqG5-z2]^ZW Atq&nBPID>{yQ_IӔحs&Fc{Lm`"B@ W;˭{ *NMŕOA{&h:ϢcA${L)m} ]ZLk)IDDB(KJT_؛H0ǡgJm[yII!-&KuT, q4MDg`3.eo8rM+fKڔT:; c մ-m&Tdb. ~GQؿ@3.\⍏l$@|YNBG0 NںԆc M{݀n -u-I╰Ӄ)Z~Cd!T19wO]h?;/<{Y9w'z}^{ ޛZ/z Qkl6c4 ȇ㛠ԣ5SF:?c'q3jc@1QbmGUeCkB*ɺ*8CEn:zRҴ5|Iݴa( jm23K@Mkw~{qOqmu>M4M "ZLgɰ7b {ݣqAaD~~U[^]ϭӷ}Td);ÜpCQ:DDP5^K&{:8J'>9آILvUCqr@X,zecSzO8&?7"?x h8~=#ʧ_'tt~@qftӮM+ zyC +MJjÉUpw< ڧ{yӢOFr-0!ClaY8ւƑ$uXw=qX'prx d0@zO$ Nҙ`ڲ\50$J* ;~4ݬ8>[X4DQʠE8)q%?:Ipdlv:K1iZMUQ$ԫMUP*3XX,%s~㹭d"HtP(w_<ޡƒ}۩]CZ~/,#i-Aяb|#LghjϖưZ d@)aȠXVNw?/J=+1qԵ'y{=OJ0+֬uӰZ-€T$QD%?% ##'ԣ%ָ4NQU[BvE8)7ޯ!@Ha WyDm}LmӬuO׵DQ!,ƴXc ea ]h߹t ͐_ s>Hǃ V5Jɷs&Qy'6K|O~Gs.Lr!r(5 6-jESq zA>$ j\O_mBv ~~7^xT|˗iP gQqG Fp[4k\KOT讏 *P{`J^x܈|)&ʮ{@qԖքώ T:xhcsG_jWʶ(gEN =UI%J&;\9?>5EQQhV}\+lulqSZdhK&$'B=&;u5y[):v\wF^/JyS#&mvO ,@7tl*wXVsHD\ "[uE!n@`;gq[0TMGQt=>!7R4-U}6dy ) C3쑪:i14e [hC%=Һm0 zUۿ^q`EKr7a`m@.>m2 re yecO =vJh__g~ǾOw;Mگ:Ųb}p̰?dY,aHv#zi>I gcqs[r\6TQunC%"іgE!Vjڦ#R^@~cx+@:c=~.A~,?1_#Dڰo6PMDIg ʺa:ApD?{Նmvo'R3|uG뿎Og7g~ꇿ3C;RdvNnΓ>wujus؏y?]Տ9y-?q娤czbzXF{~ʞwL7M+ L)+)KFjQ/PWEs­)N Кmtcut>o}C'E9tKT|T Oi:^gCpY$ Tk@PtA /P5Ӄ)/1. \14ǶJ4TPIOzsO^eȋ$QOѥ`+uXHƱ^K8t 2Ayx`: iSKQrX g{KA0u·?-Is @XZS‹ʧɋۼ1pş׌)L44eXU A9G$=a霣㝩m^|?;nM?χ^?%}_wczѐ]mH _KHwjg:- z A>9j& @n%8-?:>,+0̅܇K\X}ш;X>h?mKtS Ӕ,Ƞ+$'B ʅ><>Ck/]dm(E5*OrJ!QZϽZ[:㕳I,cBAJZXv0_8KǼfwU'Gs# ԎR Öb޲([ur|Nou G-v''.Y(B&C miZ2xXgPJ$!)FY㍶ HϹE/ybOk2DW<'8*su?إՆ!wTz_?wHE "sV,պdeH!oIijea0t-RNvy[#^ܻ9e" b\ZHi| yoC%|klggS#dYuq6A/.ଥ3M]o jLfN9"gl]b"Q7:;{wot ʶ$#vLIC@ tLH/4 4@c`Ld[5XkIꎧNUg|;uEԦU_JT:j?{Ӻu*/h/y߷%Ō'͢_es;>{N DO&5a_a`h/ Xw.̩㌆[)"]oC⤠Oaj3id{4]xɳZ?'<[Jd…' l$7HM1("h*N JqB2+ hڜ8 f`X.z=ٯ?*;H"kA4haw1S$o^# *f2']]fmY1% &)y)ƐHEl|z H`}[_90HcbAShKV҂0" 2:҂햏o= * ۃe(#768a CGڏ8dԐOkRP6)ʊt׍dV8|ܼɩcK,ĸ0`:#pn*/%%jy4@+N 9f 4J$ nkQݯ~=*Jpe}.>GS 8AԖ=ݯ}ozҟ+z:[-vv9uC?hc8  \vސV|MML8 xJjd ipLMEY8WQO VM14eG_C%;x>'蹆C*`x=.>Pq%=ؾrVVC8؟NE"6#B䂑o=h=GP)*>=CD$穭!7?}ŭ!h6_g0pdl]B 9wW<=/= Dž+[KHfV3MT8PΛ\%֘Y \k遝b@//6!Itb >t71KO褍 Y[c9@n!BS+Ք961.!$XĬ䤝%h7CWAkۙIb=LY5uSLb`lɾGںwy9ր`3 HUԲ+ V%n[j P x$ F#EO*,p=x֌ -C( ѱeTEM5ikG+*&U`*=lǷ ;K b~?L964򗖼|}-Dž.%hmBQ[o8O eQ +ɍmSUغ$ HZW鄦( GY?_}':lNSaDKs/&yYwū&SNtxJXv#,˗y(Vhpw69ʺ=AjqqtR% thBd:35(h'?0eʬv| |?L+ W IDATqrW‡?ɰK,e1#kjQpE/n[#mxxQ, tÄD| }`sZ?~!e %{Y__c?^pĪ('IvUlj7dBs:k?yvgZ'1C9|!@hPiX]~mW.U;hmC ϲ5ۤ=^pl{#64-bd;0E rmTc ŔrS%0ZFcCٳp1AZ1Snaf!4@-c.%iqH7sʆlbƗxq!jK֠`_^nf*1k*,v""I Gzv(u(Lg Ums\C].D'-IɢJI׽Zܹ|S4NjW?~StFH=|t“/s5Ї\WTUX9zyY8rT=yZq?M'=HܢFdvlI{~C ^]IWcq?Ρ;LG 4*1]YfA%љ#=3ͥ} rIF6އDk麿%INva65d]…(66Ri0tZ{t3V<:0C`yxovL6ƅk>`;yc˻խyeW42V|Z3i n1>S Q犴Z½ہݡd2^$*"X%*VWwީ馄rx`6[YUxW+p45N8l{54BIpF:i ,aRr"Z'*_>m?ESI?'opX"=f`<5v%t#g/pC(yDArg~Eld9k@9k[${Ԃ ƕ z}'UUv,/U@"el>g^r^ o/EVUGau4Y Q(CWrqHg5e\EO}k5턷y G.],(rO[Q~)g.l|'nٛsbE!1*0yEݖK$ fctI-`l?׏w:˫|?,i' MGf.q(Q4{#t503;[j>g]1(8r0tbx= FGhvWHWS¹@k3a4MndbL`ƐMd;;]ңij 0St BP8 "FMI7sB!{nd|̘e_@,^xKmΞZiAo,a&ckeζ`WzaZzShM@8*'+A9YrAwE :iЉ# F,h~8'Bã8,`%X6[9\ l- !9w^0*Z XUe*u4|"Q/˼B#|kI[s? y*y ~~?o&ZINnchuGSP^)}e N>M3sxIj }@Q/WbJUU8,J86R.|!qα1"o{zK=.ȯܯqҖg hpAJ\ax2aRL=,Y[];:4% C(<:<"gF]eg^k>̋vXGy֕6Qm9*c0 xϿ7> G~;eǖ׿{no᭷th=k& Aavc熝6yQmuX/VsY?kdg>'m_~_3^G? 8gJ}q;z/ø*N׾n۾y?33EV8{k PlݶM6XLa&ۜ8\*gpLeНo/!5tLqbꝶ&U6od9| 'NTc!G9f!^d;l1&&fmNn"])с,``36=?vi d̿m 4#Nr D}@XK]$F"q@Px;FY^vj( PE8t -WfӱYVWeNU ّ@9JE#ggd-8$ )s.II7HUzPYK8kd9zGrCQW'S_0ٿ6%x;Egxdcq8t׿:㳟dN+6Vz1*L'f&?`Mt8Jn #(i٫R"cr z,EE(%Y9L +JaqejqF9M=P* u--,Q5 QBPVo0ztiV 8-(È nE~ aLK~[mϭs)yc ܱS. 7'W9+ `W9тK`+[CZsHa#4ߕBJ%~u]ajQ!% ѥ-T`8na2_B Y1ĎaLc$".êIA.%9}q^aѪ?\%Q*ՖWv%) ܯ?l! w"D]2iqV UEQ:@XK -T$,@ ՎtnAw:DQxZPń2^ D]{< u\P@;ϒbkg!d5N=I]LR:RI|J7e ue&-4`:) Yֆb3vW \؛u`0--D&Pv9FtH{aF3D'mf_t=x 0K-s)>P3U;#t нA S|Pe!(.B%& a7)W)Q*Jj!TBriB 8aZ,lk!7XcXBG(67ÊNz: -=~RRoeQ:" - E[oycy*W;Negkt”H[#É GR)ARٚCP4UA, e [{Ite0N|w3,q eɩs[?Gcp|s#tUSK¨"j|'ny5]4.i5/~}[% wbNBw fSd{ Yfm7:w`^D1YNNa sOdmR݀L0ƒv 4ao&Ņ8ace SG\fW$iotﵬp@fhd%k}sXœ 𻢩F@ T ݕ>&i}tp@!\2)"#t'[aq"@H8ey '8bAc%QxmKP#wкd}Mqh{ O2Yn)[PIM(n.8ðxtknDжdޜ0.MZPBG2o0X5jE!C'1m!5+<;!O-u`p<<WYWqQBM/jeGٔz!$v<3Pb/hNPRᜠ!88U:-^ʻ3`ʊyEO?G78j?x[__d矿"E󅾸 R gDH&$ϐ6bk6V?-& h$Fo V )yNGتII(!oOT%/`?l:\'lk b!ze aR-Bgjp5s\O\WxL9kWo(ҟzi'G^xÏ=ǔs4!F !D]jX܈L9Cf*tcJ[靄tu S&0W ?[c("z0eFw4Z{#MLkL>$"_X[:=l&$M5i{iq0Fa1f)i. E1'Nj:l\acgn?q& .ȊjIh1D\DtѕBSC¸Vfq! lDt!U: T!+}IZX ޘĠCE~;d'㕷a}Lkڼ{Va{~iVsU=舝{$]~Nr4@E*w0DJSެ#^[dz}4HZmBp֣|+K eg6v@$MQCEQغՎqEǚ Hx~(L--ܱ8}AZŹ_tY;c֗ͧOiRprw x7"KdS'._%J,HR[["BnV[sfS)+ʰ7jmxo!cZm:AȻꪠj;/\S'Oox q!TD_#(B:N=wI1Cȥ-nZs27t(!]J!"Yq4pT)B?FET:\Y4iE Q\ Ў:5M=ɍ&va2Q lӧ3T^cG7}xջ?{[_<|0)&t:F`/aS2h-1t@MѡH1sH}L)[  S@O*jt,`C }֎l&[P`2! S0|[7^wH2_i6ntc a&Н>f*aƙ;_cC_te7Z+=tD6Q_$ Y%: r EAfrVV,Ea)KIYYʧLIY?wб;hMk@`NOB+HSA'h%!ђ^O RӠ kNGp iGl[%ES_*v?oY bp4f1WUՐ!S6NL #vY9a-Ʉ^MZIz+)ȶC'1I>xO~X=GaVCievGsyCt+ocRiw5q2 P%>v0$lqu]!ctzVvEUU()<~<a Z8 =W!VeC^5(dVo{t:-@,d PJP 7Q:a(x7<@10/\㵯x˛ f>Ս;'. Qp.[K%dUIG@$2T )B iUP T󒦨;TT F!l;E6~~Wm'/\o}|%: ip ␴+кZܠ @M}xoW.S՘G*^Q6Ř`嵝!i)-;X ㌛`fS29kIWѝի'6A y*Ftu_4-LTMvZz[1^Q$h=:%T(KaY%ҒBX7J&SKi8 R[A 6tˎn-N aS7z IDATewϒ [%.&͈,S 7 IkW%i>ZK][VkW=֐o,8hTȼ6tz1^ϟ%l]qMUQ#!]갼&cӒ(1 s=JeҴGY, a04LJ)$Ma)c&4.KlUKA T(" .aH!Zn'~'`!ziFAF?e4{ˤ"LKC#1M"R?Y,l#?ìZa:S75Ayu' /h<_w7+N7 Lm k]kuNaȪ$pT5y6.S=S !hnjukQAH5 @(8HQD@gqOW/[w=['^“t?xkI,=]CU%Gh!IyU]9ōW}yxTDfd+}XYS 7/ s20ZGh&\Т:Fk"zz&hdt4]4% m %#7+Mlc3@׻M61DG>=Fi]I?<%T]Ы)6M@j G>4R70^*UeqHA3LԲp$G+ Q`kNy*.\lv8}[JĩS#yy (ʚN'|ҷD>ל{~ΉW/{wz7K?ʝw}s'۹3Sl4]kPVj룵8eMroa\o xڒ])F5Z1ҮD$D%AV{2+ n:oOqcs6rs\xtƪ%M`" (q3E?*0 e^~8h/&NFZLp@o&LH; &Ɋ]tfB\\l) IUWmR(slOJ-T@ P`cIcö&8199BP%,# I``=cP )zuNLX_tQ( i jQв; 8QZ>ݒ)3:ABUf0Dn*CX!h?t.m"nń툼6^xj,AȦ5:Z9Dbv*s[-iTr/5V>T±)_;6hE A .Ri(_nhݴOE,//SU1TuEf2v֚( I1Qĥ$6Npa%ʼn^!\ fŇG>;ǀw_mRVK}:?<'`611-Ev.'nBEoQ0gu*9˽6J)%R0`p!F8eh9AGF~&!<%1{x8X?+xŷW(do{b!’R/T(~X'dbn:iZ[_dv &`q 8n;Ox߻􇟣QحXtn4Pg'S\U"KC@PHE+BI#ԶZ !=9 k'ݏ[]~Qyk@P>[}<KP8olytMnJKr6^XZ1ƢK.DqmJ(-M10.z?z@,ȵIWR(%J k7-bL1&.r1rRAQ[}C0C ? #1~r{d/>(KJ$]-}\/"CA^%B *[3aCS^:h(lCYafu.}߻ŚUYY eU0*b+3͠ңңh E<*0(j+8*c6.h(P VUYkdv{7",POfF޸qϽ|sYDcF,5ԍ'e`# %-yŔ&e>ORӔ~kXcΓ^ooD(g E^ڲUUq|8iea UkOHE+PTMMuKUB|}ޟ>Y9eL(c:(kC'f59-6y™;d+\wg\ w|Yltqԥ'P 2:jSҔ%uLk6W9JCǦ<6umӰkkkCT%PGPt' _d3w?z|鯁>6f&ZE%0՜Շ_DDPT1ٜŢ4D=/^WI:F $Y & *ˉ "{joi\{ W^Tx/Hcπt{9{)P.]w}_y=S՚'?ap_Yǟőuq=c8A[INgA N\p5>5,I]}w5P O*@6Ƈ }} I<=0#rASpaa7 RV0>z!p0igr҄i1B*1E=)?[Y[YL)R uC JcjƎImaQ+Q6 I")I"oTjhB |u[W{MI q^H"O MRf(?'1?:mvów7>9#{^-<9Ţ \<JfTuM'%{泒0`4(TD+ʺ&I\ru7AjfՄ+ rC,+z*i]Rr.|ӽO 96Έ+\ CqoۣX=Cz Vd4UCSV4ry8a0df8c{NY T᪠N7&rs0~3Xm:NQ`kK.UE1JT54@DC,"iTW'e3Mj,ue6b r9#^XFJD*NHww-nl[q?5y%H%[ȋRkd$"#XR q1}apAĞ,$:'rذ;5,ub^ٺw9w|>|n[1Fg)VdœWW"GduD|Pޡn@A8kAE5ރmjZ-)ݝ]uNmӄVN4 d@Ko8o9_[. C¢YpY ɂɨd46eElK{1,B%5M ֖I=.]BXLYZI{*B !R%O?ê}D F>x_/}TG>8N?]Y_w\G P Ze{hug8MGO[PѐamZitNJ3@z36h. ٚ\EFAk_|7i/0ep`xrg 1HR6n(0~%BWG!!W8!‹Nu؇B"Am+o]h$JZX_37{{['ޒ$hJx+ItB6aff=DZ7!GeD*[4R!U|M,S8 Uoh\BOfs2sq¢E%LGI|lq*A-$c3#R Ox[}Y\CgٟX]):()9D^|=:_EtNa>sS3, egkuMJl]!?91LFc RT*p"aiO  />7;sDu/*]k*겦2Gʆ8(Y4tz]:IroιLGx,,$it%DKg_q@) QBdiΞ Cg}Ϗ<*nMzTO7+6f :D]D0tF pV0LN%: :.P<[CQW92Dw3 ёl+σ΁7iغporxB :F/-cq؇i7TIk&7n{JpZ,|3̤ Fh)lA(Avp7?HE46 -qJn8tb0gq~h+ .t$v!1jT6ZU {DdzR >ȑkc)A5 I!\%4 !^FKok|LmhQ, &MCUy֚;^ϣ4ٰ!N-S4 [e]" MS|q¢3GZ6Ly}דu\1c$ fb+=>3t;KU+WLfEFX[Sϯt6dGv ^w; p .غ»0Mz*!nyN$aX+uG͟si?fw(;x^Ĺ7̛Y]3oQDjURv> HNȈӒ8 = Duo{TصlXi@F =0 sb8/g|=b ªUHfrh"T!Sb&d-3%`Z@=}f Axb895 V7 2-I? ƒNG"3;;a"QD"<9?Me0 D1m^ghK 9Zf&ЉrpR1H|0jL0u^3:ރ*~p"w`=VxWD(OVDt&KXZUPu2;"iI҆.T_ISX!I-XG=5:.jPD>`LH NJ5a3()`i'}W=b?\-jQ$2fRTMeݞ023 (S+} Za<+io,.Gb<ͦlo)%' n;1H,n4DFj:A܂^>UõixB' f3O~@;?7{?j}|U!459{9iPIL5B__!IZ^ kHiR<D4;vMU[` >-Ev߄KѴԁ8쥯5g A$oy%O-v5&\v5Kҝ Sy̴9C0KPe tV L`/X=4FMCtpAT TY(tEoȐ Mn2*Ð\Jqsu嘍7cppT>xB'3>`sSS3Kb$* mzuօ9f$ XoiEzA,! :KhHҘ(z 7cVD5 ' [ߗcVO(޶FYl6W*X+ UB ^">4e ^TGzt1㙡2y:9:I!4[Vbñ*Ixc&{w?$*q̂5mLbVAz-BD^,]w#zw?9_@.?VQP9"xBj-E+)[ A !s0=}[twx j,x:Sp$XVc< Ā3]{,}]FWUآD/ok>83ƈ.`|hP2,0âxf 1f}7fi 0҂AFKd]GBA)бFKo*|h~<`vN`Y8tTgkf1.:MSٖ&_W%^EӇmAv͕CkDt0/_xED-V,"z]Ae`w1,jDD"IyYY8Д iս3?s5*  /<"E$AjX2C,t]$pyJ+/W0Lg3&qYd82˥+Y^s=㛛LV$7>i_qd1$BHA!M!;8Km3ʺo/_\၏d=SV5/ H1ee ?qy'a4H IDATqLhG _u{|x-7y :ȏD!v;ߺ[Z|gR"T&k5]zn|1'۞W?zWê=PNEHVC("S( OV%XAY {%ffHq.hQ>j|S|s R$]8>Y(8[\s,`V:/xwz^}T0Ҟ-/kX]{?LwP}CE`h0-SVkA?bv/c*1֒L# eUڦ$ޅhV>Yl>T_X:-TbA?@oh<: Рrrsc*!AW4)S6NT퍿d 2-(:beEQt$i"=UY;g2|,.V*VVS6',{̢beG#ʺaemH>dyy2*ȺKt}t eCv`(MI$E("|:amb۟-ocE\/okNwx%c.n>o Jt Wcq*Yj%K'OiNfÚޜYU"cHtʱK.|m*66VVՐV|/}/? RO''ھX{w̳y+w]ÂuI'C? NXVduH5o?GwUP~Xkgw_|ӋnjfJGUoe= |:V rŐe8׀yWBKKoco>ucɺKlg}ϠB'RnQ:*) ͱ߰rsZV7N~R@?w_r}a*W}έ̳_if0\s37z7mu[/*8{!_'?;_}.+._?g'eh9cPm"R>T៤ Zvf8|4 Z906O+: X؈?zQ4@6 0H `p\3]`Lɠ1l,0¡h1W1eazS̀ɠW{&[dYj-ISAւt:$<|N-c4r = ym9uCm\f-QDk$BR3B-)K*泆!`d1 %H',QDZ,n*XZxP}m񄽽]ik׈.*NY!m8"+ 9}&,ϦATx![{$( Nd4+h9yq/dyJ,R(uEtR4()b<5݄A7'KQӆG3vw֑1A2t6ggw ހQ  s("F䪡wg#~ ?9Oׂsbv@X#ڥoNWGpP.QKGλ7xq}FJ ͘|=|ƒw_z7^@Y3 f@'PjNt4mmTEӃ̶13f@U~[0fi cA`?@KŠX:{6< ?+4sLB,XYbkwel1 %pxV0Lp=(=$@iNGL 4D3v;oٺbN=9TFD dH*N`4L5Ӳj c\if5aIx.ŪOR./U$X^W7@Y_2H q'$&.&JɖeR$R4bg:0Mf3䙦(r<'mM KuYy .~}O kn.V=TPsK9m"(NyUpPAExyG-#nOC0-pҳXA XTEHid.qSA+Z?|*BOٿ; o+tC߾ 5 hQ`+^TՁh;Xzn~ OÑm+`d+f v Bs?G|OAO8!Zϡ]mʹNԳ}@d}lK!;՜iy`k-'lp|%w"W%("=wl!~{UkZc{U/{Z8FE8n)E㯴oZ- 5O~ e86r6O'G- :PKZdc(PO4$vXds9[662L=.$`ulKS>"%f֎AAu2PxrUmI $:["T9킏[B8]ASYiAgYDTqbnu l  ۗn{⋟},;fs"4e*L I̺TyA&X <є{x7߃MUSWM 1ԵcJlӐw:=d,Iӄhl: <}a뒦7<نbUgXe:1OX{kzy85Q*!EǮ?ao1bA)$(0Gyni8JG'%yMb%dgӚ"򼃫=aMo9EgȀh4a'EH(Kf$28]Ov ZAr_ښc1pČ4jxx'ʁ߇ CzN:y^ӞZ<:H3y ٟzX~~[PDu1>sB i0F贋NbHZ& :bf*lš.NB2c A1>]`ЃFh0flܰpksm5bѩE~ ]Dq"'ˊ~_e8ıԱ]\\k:@~g шNXx%ɲ}#b#CZJzUL $ {Hn,餰j" ,(~w_2K2#_* ]pW~ _˹_)\(Tv`hbR+GzKGIJE, ;KY ,P̧c4CJASLFc)O'4uE xBp1.?P9J)d?d2$I bylP75UU}Zx2[=TRd_^t1qҔah6AkAc4T\KHʪa"1pQÃߗeo1ypXl*n뒲xBiĞn,y^ںf;] úiCW& KƠ{9C#Xjt݁X E` HA,gy ' x~b)ƙ[+)&u3mU1ՌAE'Suy;߉$h$*g!y4Ykٸ΢0Bb NB%p;/:6Mضu#0&cD!"w h$I[н$Rn8s,%Nj0~S`ӰOiB<#0xzɄnέ[Bdllԕ69$&&_[7NՎ^7wX5,w)C"R& E輦%i+x 򌝽{ÊXJczYURzyw(/Jӏ'<|k^Qʾl6pUH਽gۿp,8,-v t!X7y5` RjL3]xa{F 7 :YDp΁$%k#o=]ŃS7BE/;؁! Ly(1Uc D1s _CkƱ>>x63 ۘazHz4ңpUp ģ3ACX[Եj_201ßP7ww.lNF+"$8k5̭@&\UIi UUai,YQpu{/#(b62 39I$\ )I١Qtz&>n;y;,uCU̦SF Bs%Ĺ`:$W $D"UU0!"8oXR;pIpQbRwՂ,0fԔ $JK"#F!$I12+O/JS^/ׇV B>žQǃPxQgRG‡_q|VB ˫ i@1%[sQ;>,y47ƯIedaA\E'$Ru4ru'"i(UۇK$ fFDc<01t[l 5 ^9^\nq1 3 Y l{3HR6V$6p`㐤P~Aw)"ChݒhCҩ0 : CSA`p3N=pGS&; wrC3FS06UH8S'Mg"RHXarx|wuz9L)(kXT IDAT!㋾CZ`oGaqiה%R*To glF]L{g9qu``yeWHٕ}N\=/\; Oz"|=|3wɲ%d:m4X3Li)( s=km>|>-*:dƦbq7("U[Mh<ĩyADsf iFMY^D<̽iY{暇%Yevlc.e1!$!\r!@.aB+`c.1b<ƳVz>5>]ٖ/9_jts?JK2qDXI:F [L h`l!^,rMo#OcOG^ =>JA~6 b[Gt锬/x7 6._{y!Jpґz@:ágЙP&Nz K쓌\#9Gh%㒽шHxdZI:A!*(`uE$IA'e),2XdJ )L-JZE=Es^BSw`ʊͫ1cpe NƟ~#1d.-xܘ <3] v(  R''`L S t=s-UoFÈM`P\]okNUIJfs'b? 1nC 6$Oɦg Ŀ|RAȍEPS$48,c gU)3;hwޘZꥷ? [%$M>P-v@+z v,lkf5Nv;tЀ*H=ys4sT4St!>L+t6JvVZ>*n=Vkt9-٨OgFI:Gzo uA=X]ZAljSσv]!/*GUB $ %*DlrL5ʯ¹kq.sct2:"bO! ODxR%S\xG{?V?}Yh7B8OPbFsE p8b:Ѵ-pp&yQ0xg:PHXSUM\Aoo#'N0 N {}_點իWٸtNŋ^Bϖ* UY0 2$dBdn~0AR)a paQ "j1AP)Oz.J3nj~i dH:fYgEFTAnop d8JP:~{q]7^=kX+#!qȈ|j #A= d <癇 ;FD8T^/IhjėЕD̕+&+]\!ϙc.x}c`l+~,c4 X F3wW,.p!6|2 @Ks >٧5GH$h:TrQqzdHʊ̙Y[ Ik>WG9a۷y k(1FkmXn t Ju!1{{N $=C>hځȦN dI$yKe${7PlJn/eeչ4 ЉCF=] QJ@EmXNg`35 R,N@^HH3҇ (| 7qDɿ\W|jmɗ|?6O0?&l AZK_z}7!GH%e0V\Zus3jҙDrcM9J8&h=*1EAbMVV֏Kuil\awgNŽ%QdhZ$ee&(Ȳ,lQIL5ms\*GCZFQ8*iL^*aRSfK1}]QSkPKRV3ٛGDC]qtݧv;cWsM?|y^9~kkTO {pd2?1l,UKlo9|1MňY r-l qu9 BX wyZBeg|#XYN3|k,#dn:[HٸT?p,,;CFutңm>,bW"E'ХCYEJ5EovQ$@E 4[hz\yN~5)m{.ؠT[xqhf>9E;׆K%J`GFœGs"Ȋ Fz6DZ BH߫Kލ,io~>$'Ws$ތ#̉y&3 !lpg3}H{6Y׼;P_TC?kEKULudj1U#("*@q,1Pqk=e0?7x7$IPJѽEW8xLբ*z>7_yA?|3wv [[۬2?7OVSvhT)P]RdE@I&c1zG9&6R%AQbdww~-MLe(r0 d@8YaH2Nv_Zaie>}7w_ȽwMwk'x.ec)yQ0 €T$QDQDY?% #"'qP%IGd@o4V*NӘ4 (&ktTِҐ@JTCTBV91eC?q\N`Ld"HW`  W^]gyrd=ϿTR&HiL<ݼyyf9B2~Li7p,r9-xk52\7Ŋ6+&Ր?bq~V?hʗp8ǁ5?g?s#IHҟ qX'pr|/8݄8 $ NR~fd8*T,.Z!V;`ydzH$o˳/HZMַ d۳Ƃg7ּ-ej#Vf]4am g1z4ZXlGdZl8 k4@)Plto-TB1D5fGE͜ճʐ|⑝r̓/x3-I,9q ApK <|EKT]ͥKO??N-1{BqZqwr3Ia:c/pWߍͷHM;OGqIKv{tKO^ǕG :>{A@Ę0$#:*a82NrhLYiJ3_7}RwހFt7} YoHBAs9:&)ƥ ~q( `l.eզ"A%+IQԎSf ( 0ba1~봲X[lCmnlΩ;%7FLP/aB7CǨqlB7~٦HE꾏^\󁧏B^ \ <(pRP`mI!;@aEb?,PU,V\٨TanI~Yq" U2FkAWh+,Ffg6̵{Nl7C'PF to^S T.̡ A6guIxo& ?h]Fj̡>>f eHvuӷtf@Ut*^!#y焕贼?ee:so7³ǿe|]`r[{ {[8 -W(w_+D~Dq?Ξ&޳S^YVy-.]cL䶠)`P(ڀx7(˒vEAHd2!}yzJTU~({?47 :$I'_m .RTU6ɔV9=6ց?/ۇŋygC}|uvj$BD!3tdInnosq Q("A ų*{%nL Y 'tuL*iK~=bo1:=VbAg~I OQݽ&Wt,trHe4rL NR^@㧈G{~6_?x7+{͠< I[ Yv?gO /#T̸~\cs/$(d0vȫ@sc1*0A@4M5 }!qx5A⊜W/cJAꐸg*P㝄{Ny⼤0αę; 7 l޼./.Ӕ nM8"Ƒ.I"Vldi1 X&zRQKN5UYKɤU + & B'o|ɻ vo+6%{e\j/ 9֫38:%c8(/׼akQ7_r4[0?vLc](rt1뫎0 騢*,U"/JO1ܸJZgVB-/827{H9hj^ҽE =CCsPQdu1~ԫ*7PtNWbL l㪇;P%ןa#6pPs葞y<&Q8l?/,UY `4Iz=(k勇07\~X%&r烸S~߯<b1-p}3 _'_#1tujw=Do(8v/9'$ }KE͔%* CZŃh1 aQO$|>N>`ʂ0)mC*Rm* VtΨEp N^1g{wEexS'N@ )%Z0$8U}dR F -C8PPg{yE94T#JJȆ9ZiJ%($,*$zlOoeOdksBN082}qKw|_v=V$)$1,S/U|ۿ}#M|13>BYҾł?s9%Kȷ^ȬK'pođT8Sy,P3Ҧ1=h8dtn݃ЅeAQyq$h5}A /(a0pZ@Y @bE *u Ɔq^ofmN'3L>*QfYۼ 9Q˅@6wG8deP{D-X: \u.'d6g+A50VjsMVK*#nP>ul@{4=$>,_,²$өg1/T5&9{/ɛ~h;QQ <P:15-jqu0 D1GGLA)9W8 x3ɹvő # jQ_Ǭ+P"0J Q eYaEg{h<,1+@RYK>8nn=LѨ T|?pޤ8ΰ\CDqM=@fULSBHy^`]s$A,U0 &g8*( Cf,6L&RۇG$;uڰ#;Y8zVTpvͱ|)5_!YL>˒ɲbytX|xoT:_A 13'euθ9լ `g|1SNrnm}-Ssz%-%;:Qݷ́…g,-)SAKZM8zcڻ=ޞƆLin-gs"Iu)&'$G?8EnDa4=*+t-oOYc:'Ny>3<ĬRܚ cnQ P]ht>"$?MvkN=O*I +m:Fvs8Cy葝1d7ҘNYZ{'*nA 1{ŭIgW#($*`2=ᷰekByxi^zj;@ Ύ16$/PB$93~X,GpMy ?))dɅs8At` JɜsL%QQ\9ҿJS^Q AH$ q%,.(len]/qegDH2LT'^ tݧyɋRtsHb(ps a*Gi+ڍv]`j5Ɩ2Tc f(QI-DQDa0*L gnk$}?M8s΅GDo|Q\8:4CF5[op @5B0ߘpkKϿ7sپ]/_̑:s\|ޡǭ>Vx842wf?6K5z9'o=R{F3ۈpg=;q˷Yܬ$+{.`2Ԕ#zJU!<Z#++` 83*Л;odq1ճׯ"Q0*l<7b?7 ПB"&լ#j):Xl@kd1N.jP5P 9B$taX, :jqM d/5_f+q -rKP'By[XoEl"jCQl v 5y&5!qNPOsf30JҦ}^?[ mmU*$uxYX pచ^ɉV5_'1YrR'>5%d c%VZ lySCeY±aQCb}=9BO~?|;Wן{g\CD a>BI8C_*:QR3*;YtZ,ΕКoz>xeNB娜,,ŴD2E&SҺ"Nc)Ր*yjrwe$[;*ē\ FyލPMے$Pk v +sS9sDzcک^;y6_UMD2"?C|Ûg_D\|g,Nz._v<8mvPQ$)N@cku;9 ^7AHlH" pG0Y뵺ݏ61;ϲ#,ޅsvA؍3T(r̥VHU _!{[n&eoxPYrrbv2Jۜn=G49pr}.?NE4 M*{&'b05T"pæJ"wHJU.( E4[I@6o辯⥣ HE f,TڳYJ_G#PUCv ?ɧ^%k Atok4AO5). zE5:6pd}y~' Pee-: ɵUQޞOН0 CUfv|b>rY8W3$7Pd% pI CrxLes rf#i0`4B"D /!k-Z|jRb^o f{c4 ׶ЃLIqN3"Zm.a`aZqNnY0R0I@9} fWYq3 $Ap{H)J өeM}HV1UUQOSJ(5tHӘ`Uk_qJkVpg*kNL9ɸ KC^qG~g*]jԛ 8Ɛ_y<_w?<5%[\'+NK YpFܶuknK޷%v!rߟ9" @lZ͖ܬt e|SSM|O> ,Q+|Y P`:ﵼph@% #Agtuh 0+fJY烬lqA6(9z:KsNVxvߖ"1ybnȃֺ Z4$1$EФݫt"KVJ:>u6z]VWRMꡅSW6:h5 rM6R*>FfޔWIXS8זy"J +!Bm=iV8(Y=r:%,gA)n'> =l2%F¥^+N,K g,{PNpJ@bGRDPUIG1@V^c<9^|6Xb=ҝ $*%06n )bm!ɀb: C4u+_ҢG"/f)0DJņN5)FJn*Fcc(؊iT,JPZ5`*t+ zLBRScP?L-w/Cq3&jDLTߐ|=o>%ˉC%A!\aY pPV+k<"NVҒȑ9kg*y$77#J-B2l\ u> *-HH@nJ8r2KrQȇ!dÌlO갺RM}E:hO@gqȊmNέAc&h-aF9 F>jvX=2$1;dє=oP$dݛGٖUn>73͞lHHP:;^E(VeZ%YEYO T-yL !!Ečn~wk$ `92FDg5ͩsM t.GzY6$,Z7OH' e\2)"#t'`?}vjd8ٿK6f]"zWNTJVBGC);Ql@)&I*"rºu,Jw^oNPRᜠ!8[wVG=%eTt-ns?w?Q7M|3R8*H-d$v̿oG^]HZT_* qdgq4NB:{38Go:kBBY8 [x2 M]|Iͻ\ǫ<=7YyYn%|{ o얖),Qܳ3foy_!$f <7_h=IF)^~|)~?+|Ͽi/=o×0]nHpz Grl ~7ꛕMzzoQ0|󭞷?;iqspו+>"QZt~xDgg"Ԗt'c%]C^V(mKP#ݮbeYXY29LbCCt1%mBVNANzh MrQtҒő2<';) 亮B6w;z?d{քqUķ Zvvĝ=O .G܉l x6r O"#?Dޏ#~" A ICS"+:"t1QnJb BE(V{ɳJW wfg軰"Tycȳgr'9ǖ?6Gkmd(Z\˸쪓 9m1>bV/^a^HS{Ξ'Jf,841{6wv)H ~P Z,~;'9uiz L?oړo^mr꒷z戇f:shk2z68<fuǭ8z@ꏡ`vA77q-QO C#~qx({J,gQ@(T4$ A;dT4$D byE@!cKW ڭ$n@+(. i<Z.ݤ2ida:{gv zllG#ɰh$v t {g bI/ZNB٠u&Y ZD]i *D &#h%05SA bBZu0 yE&dO9%-E!)JKYT)ݐ啀H;ᤢ(Uı8{A_*߇;1FX|[wW9O{lBMOX[t};vʊouBYns R T Q*31Dq5fAѠ,K\S|ػoD^e,5[d ,ͽ]W¿0/ Ji,Vk+|w};VHo8)ϙ*A;'\i휲4+)fBF+&B7쬏sZ1v0 $t-)H/;e\Nbvlxe2Jq-ǯpd݈W2.f4ۚ8t < {\X86롔PY@zrGZ#M(C4#hX* 8};&>4`ib1'8߈_*PZ IDATVGnC-DK:A+OvjI W_-HŃn?6~v9#dCM*2(rt7stcy΃[9yl .YjlD6u^E;d8"C6o +]@od0ԦPZ5ڭ<'u#ed\H^gL `f]V,,y^yN_+dp=N Cxb)O]~)])鳌ΏI2Ɏ\Q& ȫx׿!`=/M^Wrbͱ~^2XT%ˬ7^*D]oB%5 R^>nwڄq"@kMw 7<*Agc8aKzInIbD`H0-e9 &k+]^/dyed42A!kcQsR)Tw·BU6w -8huD*dVe:1Ns,( )K^R(M yagdeO0<@סr1A`ai@gdv;A -y\ecLe[,s~yx>?>oϋz{!SɧUw؅w W8P%'LL}{ě`7g}e$v޾P<@yb%h4фv[zv! B8Fcήe>7l^(8s&c<4,E ƒ*JG瞞i^dj 㽃\C!n  -D0 Kh&  ItKOzS*YG nm8'dk?Y>k//nkS'& ȧdv-:l{JgSl_*#b20NOiAY9<@qn+- @ لMLueYpie$!bF4i4Dqsf-b zB lF58i3.*n93tWDdCq38_h' FXTP :yN *W!s‘ a i/uꁲŸ)Ef;Ҡ$ Ct37vB8G\r 'G_C)=~?JzsZS*9#k:oጫsD@_t*jc/D έ2dJyQ;#Xa8ظ;&|)өS|" O}ڽzƑ{*Dpgy~R}3>yU©S K" %$M|xsw|sKW5,kC!H-zh$ f`po^8XXX,K,J& P4 DaHҌ*$i6tsk-Q~Wlӷy37,oArN)PV9iFXj6YXh,EXDžs۠Ь1:(f#&lF̫+PP*K:IF1A@4t[19bmQ 䉗/tYY_{Hń8UC8M6  VZ4a3MSG^X S̎|mN!@",P$[DXs`6c@_dsƑcs* ,Qdi5QK66s6.LqS'pjdp]fÿK0 B`+TEߕIh5 j Єt="5IE?\9;v)B!C-sJa6&8'xX'{ .ǗcW?+&Ǜk! Jr[^osn(,vI$-ݞ -~ )Kl6,+LX^[`n9JA&.IY9#}p*KK-6vS%Az/P ik~pLy+b*0U%֡ˮBСD(Ai+fsTcM@'%*CfS5 *C D%RTk00,.Hz 44:nlHf1ad*w?JsEz;gm }YYKTyNYVy$Zx4*n4Y񼡩*fiin{`נA;@,H%d5Md{^~?wp0g `)//ֻ7EB!V2:qPEE 2yQ_H(RDB EQ4ML*"^2셛b.zgM= n?J˕*ne)ST7 ..GRC#}k1ޛ̑nFݵVZi ?S^лϷGM;SůgE{KZ]/2ҽ-d!iZٶMo!+5DS?)ɢ}>Aq>$eZ(DVMtRru!Ҥ1dFzK6LɄNMA_(2;A QmzJ F D}f {) a*_> ,GA8︝, ՈV1/%i0*$:GPk5.[]r=-c6Ȳ eO6xZ X\޻]'z.h9JIg\N~TJy`]~N:܌p5C w˥;2plF #S ;{p?9J_?8r<|"౗4 D&&<^ &/m|V|{泠mGs rEMx`},<qd IVlߠȦGzlNrtVqo((f>2Z@7! á"4 u4h@Ze#4IBr58[7-,'/ Y^N(J0v=TXCXJR|ZQU;" U17~HC"rX%ZqTB`( 3KUXli j' [B%"J8OzOțkp+L4f_,[T뼅6eUvBJXc0BE5k:BLժiOx@V &pI'%(f9{(0h^J$pS _gWjud@ Qsoz@=%-.p{ݑ쑥+b?9Pp1Ȗ7UOOy-:N6Ȃ^ Ydl@:XFw:6&#q2YM%+!S6ׁ)z_ڊlV VB:EgK(iBI^ODTVtDQ@K_E#uLM @K'LDI.RbʒJ*J+ e2KFJG U C **\Q \Rfx?oZ!!! MSӼugn,"Z'1AYV2Li5[hV~`iM1֛I)K$Z,c<hHyKpBFw1G'6oϿ1,t yw87X:.BlM }n̼*(AEDQ5o{! A3AZQd{J*S+ߜ]7޷" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " #ifdef HAVE_HELP /* Disable this menu item, until the help is written " " " " */ #endif " " " " " " ""; /* *INDENT-ON* */ gchar **filenames; gboolean show_version = FALSE; static GOptionEntry commandline_entries[] = { {G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, /* Long help for commandline option (editor): filename */ N_("Open this file"), /* Commandline option for editor: filename */ N_("filename")}, {"version", '\0', 0, G_OPTION_ARG_NONE, &show_version, /* Commandline option of editor: version */ N_("Show version information"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; int main(int argc, char *argv[]) { gchar *filename; gboolean default_used; GtkWidget *notebook; GtkActionGroup *action_group; GtkUIManager *ui_manager; GtkWidget *vbox; GtkWidget *menubar; GtkAccelGroup *accel_group; GError *error = NULL; gchar *icon_file; GOptionContext *context; default_game = g_build_filename(get_pioneers_dir(), "default.game", NULL); /* set the UI driver to GTK_Driver, since we're using gtk */ set_ui_driver(>K_Driver); /* Gtk+ handles the locale, we must bind the translations */ setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); bind_textdomain_codeset(PACKAGE, "UTF-8"); context = /* Long description in the command line: --help */ g_option_context_new(_("- Editor for games of Pioneers")); g_option_context_add_main_entries(context, commandline_entries, GETTEXT_PACKAGE); g_option_context_add_group(context, gtk_get_option_group(TRUE)); g_option_context_parse(context, &argc, &argv, &error); if (error != NULL) { g_print("%s\n", error->message); g_error_free(error); return 1; } if (show_version) { g_print(_("Pioneers version:")); g_print(" "); g_print(FULL_VERSION); g_print("\n"); return 0; } if (filenames != NULL) filename = g_strdup(filenames[0]); else filename = NULL; toplevel = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(toplevel), "delete_event", G_CALLBACK(exit_cb), NULL); action_group = gtk_action_group_new("MenuActions"); gtk_action_group_set_translation_domain(action_group, PACKAGE); gtk_action_group_add_actions(action_group, entries, G_N_ELEMENTS(entries), toplevel); gtk_action_group_add_toggle_actions(action_group, toggle_entries, G_N_ELEMENTS(toggle_entries), toplevel); ui_manager = gtk_ui_manager_new(); gtk_ui_manager_insert_action_group(ui_manager, action_group, 0); accel_group = gtk_ui_manager_get_accel_group(ui_manager); gtk_window_add_accel_group(GTK_WINDOW(toplevel), accel_group); error = NULL; if (!gtk_ui_manager_add_ui_from_string(ui_manager, ui_description, -1, &error)) { g_message(_("Building menus failed: %s"), error->message); g_error_free(error); return 1; } config_init("pioneers-editor"); icon_file = g_build_filename(DATADIR, "pixmaps", MAINICON_FILE, NULL); if (g_file_test(icon_file, G_FILE_TEST_EXISTS)) { gtk_window_set_default_icon_from_file(icon_file, NULL); } else { /* Missing pixmap, main icon file */ g_warning("Pixmap not found: %s", icon_file); } g_free(icon_file); themes_init(); colors_init(); notebook = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), build_map(), /* Tab page name */ gtk_label_new(_("Map"))); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), build_settings(GTK_WINDOW(toplevel)), /* Tab page name */ gtk_label_new(_("Settings"))); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), build_comments(), /* Tab page name */ gtk_label_new(_("Comments"))); terrain_menu = build_terrain_menu(); roll_menu = build_roll_menu(); port_menu = build_port_menu(); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(toplevel), vbox); menubar = gtk_ui_manager_get_widget(ui_manager, "/MainMenu"); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); if (filename == NULL) { filename = config_get_string("editor/last-game", &default_used); if (default_used || !g_file_test(filename, G_FILE_TEST_EXISTS)) { g_free(filename); filename = NULL; } } load_game(filename, FALSE); g_free(filename); gtk_widget_show_all(toplevel); gtk_main(); config_finish(); guimap_delete(gmap); g_free(default_game); g_option_context_free(context); themes_cleanup(); return 0; } pioneers-14.1/editor/gtk/game-devcards.c0000644000175000017500000000416111656052403015131 00000000000000#include "config.h" #include "game.h" #include #include #include #include "game-devcards.h" static void game_devcards_init(GameDevCards * gd); /* Register the class */ GType game_devcards_get_type(void) { static GType gd_type = 0; if (!gd_type) { static const GTypeInfo gd_info = { sizeof(GameDevCardsClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GameDevCards), 0, (GInstanceInitFunc) game_devcards_init, NULL }; gd_type = g_type_register_static(GTK_TYPE_TABLE, "GameDevCards", &gd_info, 0); } return gd_type; } /* Build the composite widget */ static void game_devcards_init(GameDevCards * gd) { GtkWidget *label; GtkWidget *spin; GtkAdjustment *adjustment; guint row; gtk_table_resize(GTK_TABLE(gd), NUM_DEVEL_TYPES, 2); gtk_table_set_row_spacings(GTK_TABLE(gd), 3); gtk_table_set_col_spacings(GTK_TABLE(gd), 5); gtk_table_set_homogeneous(GTK_TABLE(gd), TRUE); for (row = 0; row < NUM_DEVEL_TYPES; row++) { label = gtk_label_new(get_devel_name(row)); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(gd), label, 0, 1, row, row + 1); adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 5, 0)); spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_widget_set_tooltip_text(spin, get_devel_description(row)); gtk_entry_set_alignment(GTK_ENTRY(spin), 1.0); gtk_table_attach_defaults(GTK_TABLE(gd), spin, 1, 2, row, row + 1); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE); gd->num_cards[row] = GTK_SPIN_BUTTON(spin); } } /* Create a new instance of the widget */ GtkWidget *game_devcards_new(void) { return GTK_WIDGET(g_object_new(game_devcards_get_type(), NULL)); } void game_devcards_set_num_cards(GameDevCards * gd, DevelType type, gint num) { gtk_spin_button_set_value(gd->num_cards[type], num); } gint game_devcards_get_num_cards(GameDevCards * gd, DevelType type) { return gtk_spin_button_get_value_as_int(gd->num_cards[type]); } pioneers-14.1/editor/gtk/game-devcards.h0000644000175000017500000000216711345354413015143 00000000000000#ifndef __GAMEDEVCARDS_H__ #define __GAMEDEVCARDS_H__ #include #include #include #include "cards.h" G_BEGIN_DECLS #define GAMEDEVCARDS_TYPE (game_devcards_get_type ()) #define GAMEDEVCARDS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMEDEVCARDS_TYPE, GameDevCards)) #define GAMEDEVCARDS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAMEDEVCARDS_TYPE, GameDevCardsClass)) #define IS_GAMEDEVCARDS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAMEDEVCARDS_TYPE)) #define IS_GAMEDEVCARDS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAMEDEVCARDS_TYPE)) typedef struct _GameDevCards GameDevCards; typedef struct _GameDevCardsClass GameDevCardsClass; struct _GameDevCards { GtkTable table; GtkSpinButton *num_cards[NUM_DEVEL_TYPES]; }; struct _GameDevCardsClass { GtkTableClass parent_class; }; GType game_devcards_get_type(void); GtkWidget *game_devcards_new(void); void game_devcards_set_num_cards(GameDevCards * gd, DevelType type, gint num); gint game_devcards_get_num_cards(GameDevCards * gd, DevelType type); G_END_DECLS #endif /* __GAMEDEVCARDS_H__ */ pioneers-14.1/editor/gtk/game-buildings.c0000644000175000017500000000435311656052403015321 00000000000000#include "config.h" #include "game.h" #include #include #include #include "game-buildings.h" static const gchar *building_names[NUM_BUILD_TYPES] = { NULL, N_("Road"), N_("Bridge"), N_("Ship"), N_("Settlement"), N_("City"), N_("City wall") }; static void game_buildings_init(GameBuildings * gb); /* Register the class */ GType game_buildings_get_type(void) { static GType gb_type = 0; if (!gb_type) { static const GTypeInfo gb_info = { sizeof(GameBuildingsClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GameBuildings), 0, (GInstanceInitFunc) game_buildings_init, NULL }; gb_type = g_type_register_static(GTK_TYPE_TABLE, "GameBuildings", &gb_info, 0); } return gb_type; } /* Build the composite widget */ static void game_buildings_init(GameBuildings * gb) { GtkWidget *label; GtkWidget *spin; GtkAdjustment *adjustment; guint row; gtk_table_resize(GTK_TABLE(gb), NUM_BUILD_TYPES - 1, 2); gtk_table_set_row_spacings(GTK_TABLE(gb), 3); gtk_table_set_col_spacings(GTK_TABLE(gb), 5); gtk_table_set_homogeneous(GTK_TABLE(gb), TRUE); for (row = 1; row < NUM_BUILD_TYPES; row++) { label = gtk_label_new(gettext(building_names[row])); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(gb), label, 0, 1, row - 1, row); adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 5, 0)); spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_entry_set_alignment(GTK_ENTRY(spin), 1.0); gtk_table_attach_defaults(GTK_TABLE(gb), spin, 1, 2, row - 1, row); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE); gb->num_buildings[row] = GTK_SPIN_BUTTON(spin); } } /* Create a new instance of the widget */ GtkWidget *game_buildings_new(void) { return GTK_WIDGET(g_object_new(game_buildings_get_type(), NULL)); } void game_buildings_set_num_buildings(GameBuildings * gb, gint type, gint num) { gtk_spin_button_set_value(gb->num_buildings[type], num); } gint game_buildings_get_num_buildings(GameBuildings * gb, gint type) { return gtk_spin_button_get_value_as_int(gb->num_buildings[type]); } pioneers-14.1/editor/gtk/game-buildings.h0000644000175000017500000000220611246205071015315 00000000000000#ifndef __GAMEBUILDINGS_H__ #define __GAMEBUILDINGS_H__ #include #include #include G_BEGIN_DECLS #define GAMEBUILDINGS_TYPE (game_buildings_get_type ()) #define GAMEBUILDINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMEBUILDINGS_TYPE, GameBuildings)) #define GAMEBUILDINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAMEBUILDINGS_TYPE, GameBuildingsClass)) #define IS_GAMEBUILDINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAMEBUILDINGS_TYPE)) #define IS_GAMEBUILDINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAMEBUILDINGS_TYPE)) typedef struct _GameBuildings GameBuildings; typedef struct _GameBuildingsClass GameBuildingsClass; struct _GameBuildings { GtkTable table; GtkSpinButton *num_buildings[NUM_BUILD_TYPES]; }; struct _GameBuildingsClass { GtkTableClass parent_class; }; GType game_buildings_get_type(void); GtkWidget *game_buildings_new(void); void game_buildings_set_num_buildings(GameBuildings * gb, gint type, gint num); gint game_buildings_get_num_buildings(GameBuildings * gb, gint type); G_END_DECLS #endif /* __GAMEBUILDINGS_H__ */ pioneers-14.1/editor/gtk/game-resources.c0000644000175000017500000000363311656052403015353 00000000000000#include "config.h" #include "game.h" #include #include #include #include "game-resources.h" static void game_resources_init(GameResources * gr); /* Register the class */ GType game_resources_get_type(void) { static GType gr_type = 0; if (!gr_type) { static const GTypeInfo gr_info = { sizeof(GameResourcesClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GameResources), 0, (GInstanceInitFunc) game_resources_init, NULL }; gr_type = g_type_register_static(GTK_TYPE_TABLE, "GameResources", &gr_info, 0); } return gr_type; } /* Build the composite widget */ static void game_resources_init(GameResources * gr) { GtkWidget *label; GtkWidget *spin; GtkAdjustment *adjustment; gtk_table_resize(GTK_TABLE(gr), 1, 2); gtk_table_set_row_spacings(GTK_TABLE(gr), 3); gtk_table_set_col_spacings(GTK_TABLE(gr), 5); gtk_table_set_homogeneous(GTK_TABLE(gr), TRUE); label = gtk_label_new(_("Resource count")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(gr), label, 0, 1, 0, 1); adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 5, 0)); spin = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_entry_set_alignment(GTK_ENTRY(spin), 1.0); gtk_table_attach_defaults(GTK_TABLE(gr), spin, 1, 2, 0, 1); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE); gr->num_resources = GTK_SPIN_BUTTON(spin); } /* Create a new instance of the widget */ GtkWidget *game_resources_new(void) { return GTK_WIDGET(g_object_new(game_resources_get_type(), NULL)); } void game_resources_set_num_resources(GameResources * gr, gint num) { gtk_spin_button_set_value(gr->num_resources, num); } gint game_resources_get_num_resources(GameResources * gr) { return gtk_spin_button_get_value_as_int(gr->num_resources); } pioneers-14.1/editor/gtk/game-resources.h0000644000175000017500000000212511246205071015347 00000000000000#ifndef __GAMERESOURCES_H__ #define __GAMERESOURCES_H__ #include #include #include G_BEGIN_DECLS #define GAMERESOURCES_TYPE (game_resources_get_type ()) #define GAMERESOURCES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMERESOURCES_TYPE, GameResources)) #define GAMERESOURCES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAMERESOURCES_TYPE, GameResourcesClass)) #define IS_GAMERESOURCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAMERESOURCES_TYPE)) #define IS_GAMERESOURCES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAMERESOURCES_TYPE)) typedef struct _GameResources GameResources; typedef struct _GameResourcesClass GameResourcesClass; struct _GameResources { GtkTable table; GtkSpinButton *num_resources; }; struct _GameResourcesClass { GtkTableClass parent_class; }; GType game_resources_get_type(void); GtkWidget *game_resources_new(void); void game_resources_set_num_resources(GameResources * gr, gint num); gint game_resources_get_num_resources(GameResources * gr); G_END_DECLS #endif /* __GAMERESOURCES_H__ */ pioneers-14.1/editor/gtk/pioneers-editor.desktop.in0000644000175000017500000000031411711560445017371 00000000000000[Desktop Entry] Version=1.0 _Name=Pioneers Editor _Comment=Create your own game for Pioneers Exec=pioneers-editor Icon=pioneers-editor Terminal=false Type=Application Categories=Game;BoardGame;GNOME;GTK; pioneers-14.1/editor/gtk/pioneers-editor.png0000644000175000017500000000625011760646030016103 00000000000000PNG  IHDR00WbKGD ]IDATh{tT?g<3LE\b%Ā ťUqAQW,PQREъڅޕbh*b+ȣ$$IHf::q2CB2]9gۿ={oD~Xd0M#(+7ŀg s&p١ZaQT9`3Џ*Qt 4>נAK |$QT(D`'`FpGx3`:mTv'e*ˁv{,o 7O3Q{)nojO, bac>L(8])w* /֪H* tw.XN r2EeKA)xT4 0!^A`"p'14 )g7 G;E ,GgC]'C'Pu2r{MxBʘZ?>>+0ߧ@Df-C􌑉wm}AQr>>l>Z(hoѱXQd/a+FA"q&0vs | h锑e%#hDtB;2!ES{;`רmS''F^NJHQ=l} )'C~y7a5Els%& Y: @HoZ!΃uo}#+^)AfLPd#R/ĦlPo4&~#AQi߽Ep{c3Ɛw 8eΟk 3D#8٤ u1jfR?^}S /,`Ό9DKwͪyHȊQ1iW6J9Xh  `cݷ11QZ\V A飣͍(, 5=(+x k@cT[>yS}}Uu=JdϿyQZC'ši˃΀]}QFPR+^/B@1= @E@d3GF{)z]p4PgTCHj*$;ρ3~ϾAފYw-FD*k]Z`F W?>YiihflN.{h7rرf_}V\^2IMp &S#%N]_†A &W nztnAsQC ԰o"EABKhk0' x$,il]?5*1[iJrqhl嫴zzPKXTqH `AAʹ%+jjU7?sJtV(+(N0aJ\xNt~EJ4UlV цS2c ~KVoݘk]ecW G˥NI51'Qr,\`A1F\j),yuZ{P;XNE꟱[ II 7;ܼ\y|ŝ^uSo"6"jЈDƈx~M۱5ݝXga<r'ƁvCZb1^z4cLY^A3[ wᛆS^SzN@AAъ (?x,4;NTO"bBbiǬ WΛdц@$ESEl7v^h4xSQ@c/GV(WY?tFݛKCݨD$1LZ LIT=u׿gι&h''Krl-y~-4ԁ$yԯ/E huM>/1 rѓI*LS@Ę5(EΟ*x hEborÚ-=${Pv[^[pt{& In2ҳglذC,Y$eϰ $P26m#zh|CnN.Fdڗ)/_$Yt-|]{6mS LFN@5̛u#FCVƶx6^ONN gb9wܱ7 fuCfc5Nb|S!wz~PB~~>>8cyx(48[08(d5>iEx_/q̩Jīڸ6M_Њ">qs k{<@PyR hE@m&[uSҙ^VxbPulf-rwK{ٌNSSjȵJd ÙHHH]BYJ?gGsXaMdH-wBt"Yz9P N:Eph)yNA jgz๒@NHHc]rt깶F.4wem쌟CetlӰ%#+@!2O\.Oʹߚ26vC32#!"+ [*]< ڈ )caq|w.*a2֬e1wCjO&%Ml4vQr?6m6O% U4&y]&-_&_NK^N*kN{m3`^ < R?C:.<+otʸxOΎE^e}?o:c_SkC}%aDd}?q^7x32 '#.bϞ*UVܑۗgGf/*IB:yH=1; Cm\kKg1llbc'ExAyIENDB`pioneers-14.1/editor/gtk/pioneers-editor.svg0000644000175000017500000001133010344761033016107 00000000000000 849 pioneers-14.1/editor/gtk/pioneers-editor.rc0000644000175000017500000000006410462166770015726 000000000000001 ICON DISCARDABLE "editor/gtk/pioneers-editor.ico" pioneers-14.1/editor/gtk/pioneers-editor.ico0000644000175000017500000001635611760646032016103 00000000000000006 h(0` ,Bp@k9r:AL^ $EQ7kqo0`SY\5gc S4= }giEQ_]n^i EZz9n`Asz?|CdQfo(0`  Tkrw%1?Jpy"~3iG?q)?K:jr.` !i066sy  t%ONOY ~VRn {o~zxn>[{%(V0OH>zJ4  (X( (-?B;[ {{;ަmᰗގ taZo>`p;]xmᦂ;oZat{;]}}t{`hf\^{,hw^[{IڟL*hwCEzF([{Ehj؆([{<$ؓ1hKWz[{V7EhJizRe([{P$ͨh~HŭR7F[{,)7hZŞ5RRF[{|)Ih\KHJnB؉([{)6h]ɖ knKeF[{6؇1h_gd4ji݈[{,ڔh5r+GǮw[[{haAA5[{SfcG+r32K~^\ިSt4dkVo{uk d4NatmIDY3r+Gl>YK A%%L=1u;Oѫָ"%m gQ%%bqU9?%&0!?"%"HP<:0΅%%CPؽ*Vх'"%!ؚ XeNQ%XXأ0L%%|ss)%X XWq/?%%ؚXXؓq'-%/؉!Q%v0We:%%Cq::TMŃ%y?%b y%|8@M&%/b!.U-ι .8QUDbg&y9zb8#@ i .=M????`?( @2339eAuu 6?{/o0I"14"`vV}[z$%:DPlS(Nwbsj}#6}Xhgx-J]E(>|Tpz=a 41aCqw5h*-UIVx!?u"6Yi{+T]jdvy}8h{Z_)R}om=RU "BFF@__L{h?{O9D +?3#7T{%#!l+k ( c"&&_A~@~ngyv1M1L^mryN\ ,7 ?aKtWn")*:q8qSsw}A|MU]p\#HjlZ4v5vI>y (Nx~v}f6@Jdho/9&[phTuk @rnyscYPdpFxTiFK1}:~3bQiFτvvf1iF*vGJ`1%GiF*%ϩ`G1iFm^Ϣڟ٧fiF }֕_0 $aiFR㟟M],`ig>W|YNN=+.S] ,{P"c785 06n/9H8t56 =-\HD~!X?tjA!!V Oe'Z4!!- O;BE!U)q LC2[!!-Z ##e!! C(;я!! vC#l!!- OB'IEA!)X?!! !!w'!zɒ$IIyUSAL(Nw:}C}1Mdut&Jrb#)&}>^-X?^W W&#,e;vWfx-3-{who2bg]O[Z-YUOK s*P{AFoxA~@~|B{hZff/?K'6m&Jq*ce$*T%y$;);?_AQ:Bw_v}H  ILLGb+3;$Em6ipYX__eET ~jB;sflVF2a:q\q~.,4$TM,tD@A(ddWU7E Ndddddue45@>d1/d)3#<$;>d&LQd) sq;>dmKr!d{pF`+; ddPgddx \=:?a.ddM]*S'8Y|T29wX_~cCVh"^Inh ho0lR-jyvGO|[HkbfZ}%6JBiz ypioneers-14.1/editor/gtk/pioneers-editor.48x48_apps.png0000644000175000017500000000625011760646032017726 00000000000000PNG  IHDR00WbKGD ]IDATh{tT?g<3LE\b%Ā ťUqAQW,PQREъڅޕbh*b+ȣ$$IHf::q2CB2]9gۿ={oD~Xd0M#(+7ŀg s&p١ZaQT9`3Џ*Qt 4>נAK |$QT(D`'`FpGx3`:mTv'e*ˁv{,o 7O3Q{)nojO, bac>L(8])w* /֪H* tw.XN r2EeKA)xT4 0!^A`"p'14 )g7 G;E ,GgC]'C'Pu2r{MxBʘZ?>>+0ߧ@Df-C􌑉wm}AQr>>l>Z(hoѱXQd/a+FA"q&0vs | h锑e%#hDtB;2!ES{;`רmS''F^NJHQ=l} )'C~y7a5Els%& Y: @HoZ!΃uo}#+^)AfLPd#R/ĦlPo4&~#AQi߽Ep{c3Ɛw 8eΟk 3D#8٤ u1jfR?^}S /,`Ό9DKwͪyHȊQ1iW6J9Xh  `cݷ11QZ\V A飣͍(, 5=(+x k@cT[>yS}}Uu=JdϿyQZC'ši˃΀]}QFPR+^/B@1= @E@d3GF{)z]p4PgTCHj*$;ρ3~ϾAފYw-FD*k]Z`F W?>YiihflN.{h7rرf_}V\^2IMp &S#%N]_†A &W nztnAsQC ԰o"EABKhk0' x$,il]?5*1[iJrqhl嫴zzPKXTqH `AAʹ%+jjU7?sJtV(+(N0aJ\xNt~EJ4UlV цS2c ~KVoݘk]ecW G˥NI51'Qr,\`A1F\j),yuZ{P;XNE꟱[ II 7;ܼ\y|ŝ^uSo"6"jЈDƈx~M۱5ݝXga<r'ƁvCZb1^z4cLY^A3[ wᛆS^SzN@AAъ (?x,4;NTO"bBbiǬ WΛdц@$ESEl7v^h4xSQ@c/GV(WY?tFݛKCݨD$1LZ LIT=u׿gι&h''Krl-y~-4ԁ$yԯ/E huM>/1 rѓI*LS@Ę5(EΟ*x hEborÚ-=${Pv[^[pt{& In2ҳglذC,Y$eϰ $P26m#zh|CnN.Fdڗ)/_$Yt-|]{6mS LFN@5̛u#FCVƶx6^ONN gb9wܱ7 fuCfc5Nb|S!wz~PB~~>>8cyx(48[08(d5>iEx_/q̩Jīڸ6M_Њ">qs k{<@PyR hE@m&[uSҙ^VxbPulf-rwK{ٌNSSjȵJd ÙHHH]BYJ?gGsXaMdH-wBt"Yz9P N:Eph)yNA jgz๒@NHHc]rt깶F.4wem쌟CetlӰ%#+@!2O\.Oʹߚ26vC32#!"+ [*]< ڈ )caq|w.*a2֬e1wCjO&%Ml4vQr?6m6O% U4&y]&-_&_NK^N*kN{m3`^ < R?C:.<+otʸxOΎE^e}?o:c_SkC}%aDd}?q^7x32 '#.bϞ*UVܑۗgGf/*IB:yH=1; Cm\kKg1llbc'ExAyIENDB`pioneers-14.1/editor/Makefile.am0000644000175000017500000000161210462166770013537 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if HAVE_GNOME include editor/gtk/Makefile.am endif pioneers-14.1/macros/0000755000175000017500000000000011760646035011560 500000000000000pioneers-14.1/macros/Makefile.am0000644000175000017500000000171110462166770013535 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2006 Roland Clobus # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA EXTRA_DIST += macros/gnome-autogen.sh macros/type_socklen_t.m4 pioneers-14.1/macros/gnome-autogen.sh0000755000175000017500000004001311245557112014575 00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. #name of package test "$PKG_NAME" || PKG_NAME=Package test "$srcdir" || srcdir=. # default version requirements ... test "$REQUIRED_AUTOCONF_VERSION" || REQUIRED_AUTOCONF_VERSION=2.53 test "$REQUIRED_AUTOMAKE_VERSION" || REQUIRED_AUTOMAKE_VERSION=1.9 test "$REQUIRED_LIBTOOL_VERSION" || REQUIRED_LIBTOOL_VERSION=1.5 test "$REQUIRED_GETTEXT_VERSION" || REQUIRED_GETTEXT_VERSION=0.12 test "$REQUIRED_GLIB_GETTEXT_VERSION" || REQUIRED_GLIB_GETTEXT_VERSION=2.2.0 test "$REQUIRED_INTLTOOL_VERSION" || REQUIRED_INTLTOOL_VERSION=0.30 test "$REQUIRED_PKG_CONFIG_VERSION" || REQUIRED_PKG_CONFIG_VERSION=0.14.0 test "$REQUIRED_GTK_DOC_VERSION" || REQUIRED_GTK_DOC_VERSION=1.0 test "$REQUIRED_DOC_COMMON_VERSION" || REQUIRED_DOC_COMMON_VERSION=2.3.0 test "$REQUIRED_GNOME_DOC_UTILS_VERSION" || REQUIRED_GNOME_DOC_UTILS_VERSION=0.4.2 # a list of required m4 macros. Package can set an initial value test "$REQUIRED_M4MACROS" || REQUIRED_M4MACROS= test "$FORBIDDEN_M4MACROS" || FORBIDDEN_M4MACROS= # Not all echo versions allow -n, so we check what is possible. This test is # based on the one in autoconf. ECHO_C= ECHO_N= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ;; *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac # some terminal codes ... boldface="`tput bold 2>/dev/null`" normal="`tput sgr0 2>/dev/null`" printbold() { echo $ECHO_N "$boldface" $ECHO_C echo "$@" echo $ECHO_N "$normal" $ECHO_C } printerr() { echo "$@" >&2 } # Usage: # compare_versions MIN_VERSION ACTUAL_VERSION # returns true if ACTUAL_VERSION >= MIN_VERSION compare_versions() { ch_min_version=$1 ch_actual_version=$2 ch_status=0 IFS="${IFS= }"; ch_save_IFS="$IFS"; IFS="." set $ch_actual_version for ch_min in $ch_min_version; do ch_cur=`echo $1 | sed 's/[^0-9].*$//'`; shift # remove letter suffixes if [ -z "$ch_min" ]; then break; fi if [ -z "$ch_cur" ]; then ch_status=1; break; fi if [ $ch_cur -gt $ch_min ]; then break; fi if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi done IFS="$ch_save_IFS" return $ch_status } # Usage: # version_check PACKAGE VARIABLE CHECKPROGS MIN_VERSION SOURCE # checks to see if the package is available version_check() { vc_package=$1 vc_variable=$2 vc_checkprogs=$3 vc_min_version=$4 vc_source=$5 vc_status=1 vc_checkprog=`eval echo "\\$$vc_variable"` if [ -n "$vc_checkprog" ]; then printbold "using $vc_checkprog for $vc_package" return 0 fi if test "x$vc_package" = "xautomake" -a "x$vc_min_version" = "x1.4"; then vc_comparator="=" else vc_comparator=">=" fi printbold "checking for $vc_package $vc_comparator $vc_min_version..." for vc_checkprog in $vc_checkprogs; do echo $ECHO_N " testing $vc_checkprog... " $ECHO_C if $vc_checkprog --version < /dev/null > /dev/null 2>&1; then vc_actual_version=`$vc_checkprog --version | head -n 1 | \ sed 's/^.*[ ]\([0-9.]*[a-z]*\).*$/\1/'` if compare_versions $vc_min_version $vc_actual_version; then echo "found $vc_actual_version" # set variables eval "$vc_variable=$vc_checkprog; \ ${vc_variable}_VERSION=$vc_actual_version" vc_status=0 break else echo "too old (found version $vc_actual_version)" fi else echo "not found." fi done if [ "$vc_status" != 0 ]; then printerr "***Error***: You must have $vc_package $vc_comparator $vc_min_version installed" printerr " to build $PKG_NAME. Download the appropriate package for" printerr " from your distribution or get the source tarball at" printerr " $vc_source" printerr fi return $vc_status } # Usage: # require_m4macro filename.m4 # adds filename.m4 to the list of required macros require_m4macro() { case "$REQUIRED_M4MACROS" in $1\ * | *\ $1\ * | *\ $1) ;; *) REQUIRED_M4MACROS="$REQUIRED_M4MACROS $1" ;; esac } forbid_m4macro() { case "$FORBIDDEN_M4MACROS" in $1\ * | *\ $1\ * | *\ $1) ;; *) FORBIDDEN_M4MACROS="$FORBIDDEN_M4MACROS $1" ;; esac } # Usage: # add_to_cm_macrodirs dirname # Adds the dir to $cm_macrodirs, if it's not there yet. add_to_cm_macrodirs() { case $cm_macrodirs in "$1 "* | *" $1 "* | *" $1") ;; *) cm_macrodirs="$cm_macrodirs $1";; esac } # Usage: # print_m4macros_error # Prints an error message saying that autoconf macros were misused print_m4macros_error() { printerr "***Error***: some autoconf macros required to build $PKG_NAME" printerr " were not found in your aclocal path, or some forbidden" printerr " macros were found. Perhaps you need to adjust your" printerr " ACLOCAL_FLAGS?" printerr } # Usage: # check_m4macros # Checks that all the requested macro files are in the aclocal macro path # Uses REQUIRED_M4MACROS and ACLOCAL variables. check_m4macros() { # construct list of macro directories cm_macrodirs=`$ACLOCAL --print-ac-dir` # aclocal also searches a version specific dir, eg. /usr/share/aclocal-1.9 # but it contains only Automake's own macros, so we can ignore it. # Read the dirlist file, supported by Automake >= 1.7. # If AUTOMAKE was defined, no version was detected. if [ -z "$AUTOMAKE_VERSION" ] || compare_versions 1.7 $AUTOMAKE_VERSION && [ -s $cm_macrodirs/dirlist ]; then cm_dirlist=`sed 's/[ ]*#.*//;/^$/d' $cm_macrodirs/dirlist` if [ -n "$cm_dirlist" ] ; then for cm_dir in $cm_dirlist; do if [ -d $cm_dir ]; then add_to_cm_macrodirs $cm_dir fi done fi fi # Parse $ACLOCAL_FLAGS set - $ACLOCAL_FLAGS while [ $# -gt 0 ]; do if [ "$1" = "-I" ]; then add_to_cm_macrodirs "$2" shift fi shift done cm_status=0 if [ -n "$REQUIRED_M4MACROS" ]; then printbold "Checking for required M4 macros..." # check that each macro file is in one of the macro dirs for cm_macro in $REQUIRED_M4MACROS; do cm_macrofound=false for cm_dir in $cm_macrodirs; do if [ -f "$cm_dir/$cm_macro" ]; then cm_macrofound=true break fi # The macro dir in Cygwin environments may contain a file # called dirlist containing other directories to look in. if [ -f "$cm_dir/dirlist" ]; then for cm_otherdir in `cat $cm_dir/dirlist`; do if [ -f "$cm_otherdir/$cm_macro" ]; then cm_macrofound=true break fi done fi done if $cm_macrofound; then : else printerr " $cm_macro not found" cm_status=1 fi done fi if [ "$cm_status" != 0 ]; then print_m4macros_error return $cm_status fi if [ -n "$FORBIDDEN_M4MACROS" ]; then printbold "Checking for forbidden M4 macros..." # check that each macro file is in one of the macro dirs for cm_macro in $FORBIDDEN_M4MACROS; do cm_macrofound=false for cm_dir in $cm_macrodirs; do if [ -f "$cm_dir/$cm_macro" ]; then cm_macrofound=true break fi done if $cm_macrofound; then printerr " $cm_macro found (should be cleared from macros dir)" cm_status=1 fi done fi if [ "$cm_status" != 0 ]; then print_m4macros_error fi return $cm_status } # try to catch the case where the macros2/ directory hasn't been cleared out. forbid_m4macro gnome-cxx-check.m4 want_libtool=false want_gettext=false want_glib_gettext=false want_intltool=false want_pkg_config=false want_gtk_doc=false want_gnome_doc_utils=false configure_files="`find $srcdir -name '{arch}' -prune -o -name '_darcs' -prune -o -name '.??*' -prune -o -name configure.ac -print -o -name configure.in -print`" for configure_ac in $configure_files; do dirname=`dirname $configure_ac` if [ -f $dirname/NO-AUTO-GEN ]; then echo skipping $dirname -- flagged as no auto-gen continue fi if grep "^A[CM]_PROG_LIBTOOL" $configure_ac >/dev/null || grep "^LT_INIT" $configure_ac >/dev/null; then want_libtool=true fi if grep "^AM_GNU_GETTEXT" $configure_ac >/dev/null; then want_gettext=true fi if grep "^AM_GLIB_GNU_GETTEXT" $configure_ac >/dev/null; then want_glib_gettext=true fi if grep "^AC_PROG_INTLTOOL" $configure_ac >/dev/null || grep "^IT_PROG_INTLTOOL" $configure_ac >/dev/null; then want_intltool=true fi if grep "^PKG_CHECK_MODULES" $configure_ac >/dev/null; then want_pkg_config=true fi if grep "^GTK_DOC_CHECK" $configure_ac >/dev/null; then want_gtk_doc=true fi if grep "^GNOME_DOC_INIT" $configure_ac >/dev/null; then want_gnome_doc_utils=true fi # check to make sure gnome-common macros can be found ... if grep "^GNOME_COMMON_INIT" $configure_ac >/dev/null || grep "^GNOME_DEBUG_CHECK" $configure_ac >/dev/null || grep "^GNOME_MAINTAINER_MODE_DEFINES" $configure_ac >/dev/null; then require_m4macro gnome-common.m4 fi if grep "^GNOME_COMPILE_WARNINGS" $configure_ac >/dev/null || grep "^GNOME_CXX_WARNINGS" $configure_ac >/dev/null; then require_m4macro gnome-compiler-flags.m4 fi done DIE=0 #tell Mandrake autoconf wrapper we want autoconf 2.5x, not 2.13 WANT_AUTOCONF_2_5=1 export WANT_AUTOCONF_2_5 version_check autoconf AUTOCONF 'autoconf2.50 autoconf autoconf-2.53' $REQUIRED_AUTOCONF_VERSION \ "http://ftp.gnu.org/pub/gnu/autoconf/autoconf-$REQUIRED_AUTOCONF_VERSION.tar.gz" || DIE=1 AUTOHEADER=`echo $AUTOCONF | sed s/autoconf/autoheader/` case $REQUIRED_AUTOMAKE_VERSION in 1.4*) automake_progs="automake-1.4" ;; 1.5*) automake_progs="automake-1.10 automake-1.9 automake-1.8 automake-1.7 automake-1.6 automake-1.5" ;; 1.6*) automake_progs="automake-1.10 automake-1.9 automake-1.8 automake-1.7 automake-1.6" ;; 1.7*) automake_progs="automake-1.10 automake-1.9 automake-1.8 automake-1.7" ;; 1.8*) automake_progs="automake-1.10 automake-1.9 automake-1.8" ;; 1.9*) automake_progs="automake-1.10 automake-1.9" ;; 1.10*) automake_progs="automake-1.10" ;; esac version_check automake AUTOMAKE "$automake_progs" $REQUIRED_AUTOMAKE_VERSION \ "http://ftp.gnu.org/pub/gnu/automake/automake-$REQUIRED_AUTOMAKE_VERSION.tar.gz" || DIE=1 ACLOCAL=`echo $AUTOMAKE | sed s/automake/aclocal/` if $want_libtool; then version_check libtool LIBTOOLIZE libtoolize $REQUIRED_LIBTOOL_VERSION \ "http://ftp.gnu.org/pub/gnu/libtool/libtool-$REQUIRED_LIBTOOL_VERSION.tar.gz" || DIE=1 require_m4macro libtool.m4 fi if $want_gettext; then version_check gettext GETTEXTIZE gettextize $REQUIRED_GETTEXT_VERSION \ "http://ftp.gnu.org/pub/gnu/gettext/gettext-$REQUIRED_GETTEXT_VERSION.tar.gz" || DIE=1 require_m4macro gettext.m4 fi if $want_glib_gettext; then version_check glib-gettext GLIB_GETTEXTIZE glib-gettextize $REQUIRED_GLIB_GETTEXT_VERSION \ "ftp://ftp.gtk.org/pub/gtk/v2.2/glib-$REQUIRED_GLIB_GETTEXT_VERSION.tar.gz" || DIE=1 require_m4macro glib-gettext.m4 fi if $want_intltool; then version_check intltool INTLTOOLIZE intltoolize $REQUIRED_INTLTOOL_VERSION \ "http://ftp.gnome.org/pub/GNOME/sources/intltool/" || DIE=1 require_m4macro intltool.m4 fi if $want_pkg_config; then version_check pkg-config PKG_CONFIG pkg-config $REQUIRED_PKG_CONFIG_VERSION \ "'http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-$REQUIRED_PKG_CONFIG_VERSION.tar.gz" || DIE=1 require_m4macro pkg.m4 fi if $want_gtk_doc; then version_check gtk-doc GTKDOCIZE gtkdocize $REQUIRED_GTK_DOC_VERSION \ "http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/" || DIE=1 require_m4macro gtk-doc.m4 fi if $want_gnome_doc_utils; then version_check gnome-doc-utils GNOME_DOC_PREPARE gnome-doc-prepare $REQUIRED_GNOME_DOC_UTILS_VERSION \ "http://ftp.gnome.org/pub/GNOME/sources/gnome-doc-utils/" || DIE=1 fi if [ "x$USE_COMMON_DOC_BUILD" = "xyes" ]; then version_check gnome-common DOC_COMMON gnome-doc-common \ $REQUIRED_DOC_COMMON_VERSION " " || DIE=1 fi check_m4macros || DIE=1 if [ "$DIE" -eq 1 ]; then exit 1 fi if [ "$#" = 0 -a "x$NOCONFIGURE" = "x" ]; then printerr "**Warning**: I am going to run \`configure' with no arguments." printerr "If you wish to pass any to it, please specify them on the" printerr \`$0\'" command line." printerr fi topdir=`pwd` for configure_ac in $configure_files; do dirname=`dirname $configure_ac` basename=`basename $configure_ac` if [ -f $dirname/NO-AUTO-GEN ]; then echo skipping $dirname -- flagged as no auto-gen elif [ ! -w $dirname ]; then echo skipping $dirname -- directory is read only else printbold "Processing $configure_ac" cd $dirname # Note that the order these tools are called should match what # autoconf's "autoupdate" package does. See bug 138584 for # details. # programs that might install new macros get run before aclocal if grep "^A[CM]_PROG_LIBTOOL" $basename >/dev/null || grep "^LT_INIT" $basename >/dev/null; then printbold "Running $LIBTOOLIZE..." $LIBTOOLIZE --force --copy || exit 1 fi if grep "^AM_GLIB_GNU_GETTEXT" $basename >/dev/null; then printbold "Running $GLIB_GETTEXTIZE... Ignore non-fatal messages." echo "no" | $GLIB_GETTEXTIZE --force --copy || exit 1 elif grep "^AM_GNU_GETTEXT" $basename >/dev/null; then if grep "^AM_GNU_GETTEXT_VERSION" $basename > /dev/null; then printbold "Running autopoint..." autopoint --force || exit 1 else printbold "Running $GETTEXTIZE... Ignore non-fatal messages." echo "no" | $GETTEXTIZE --force --copy || exit 1 fi fi if grep "^AC_PROG_INTLTOOL" $basename >/dev/null || grep "^IT_PROG_INTLTOOL" $basename >/dev/null; then printbold "Running $INTLTOOLIZE..." $INTLTOOLIZE --force --copy --automake || exit 1 fi if grep "^GTK_DOC_CHECK" $basename >/dev/null; then printbold "Running $GTKDOCIZE..." $GTKDOCIZE --copy || exit 1 fi if [ "x$USE_COMMON_DOC_BUILD" = "xyes" ]; then printbold "Running gnome-doc-common..." gnome-doc-common --copy || exit 1 fi if grep "^GNOME_DOC_INIT" $basename >/dev/null; then printbold "Running $GNOME_DOC_PREPARE..." $GNOME_DOC_PREPARE --force --copy || exit 1 fi # Now run aclocal to pull in any additional macros needed # if the AC_CONFIG_MACRO_DIR() macro is used, pass that # directory to aclocal. m4dir=`cat "$basename" | grep '^AC_CONFIG_MACRO_DIR' | sed -n -e 's/AC_CONFIG_MACRO_DIR(\([^()]*\))/\1/p' | sed -e 's/^\[\(.*\)\]$/\1/' | sed -e 1q` if [ -n "$m4dir" ]; then m4dir="-I $m4dir" fi printbold "Running $ACLOCAL..." $ACLOCAL $m4dir $ACLOCAL_FLAGS || exit 1 if grep "GNOME_AUTOGEN_OBSOLETE" aclocal.m4 >/dev/null; then printerr "*** obsolete gnome macros were used in $configure_ac" fi # Now that all the macros are sorted, run autoconf and autoheader ... printbold "Running $AUTOCONF..." $AUTOCONF || exit 1 if grep "^A[CM]_CONFIG_HEADER" $basename >/dev/null; then printbold "Running $AUTOHEADER..." $AUTOHEADER || exit 1 # this prevents automake from thinking config.h.in is out of # date, since autoheader doesn't touch the file if it doesn't # change. test -f config.h.in && touch config.h.in fi # Finally, run automake to create the makefiles ... printbold "Running $AUTOMAKE..." if [ -f COPYING ]; then cp -pf COPYING COPYING.autogen_bak fi if [ -f INSTALL ]; then cp -pf INSTALL INSTALL.autogen_bak fi if [ $REQUIRED_AUTOMAKE_VERSION != 1.4 ]; then $AUTOMAKE --gnu --add-missing --force --copy || exit 1 else $AUTOMAKE --gnu --add-missing --copy || exit 1 fi if [ -f COPYING.autogen_bak ]; then cmp COPYING COPYING.autogen_bak > /dev/null || cp -pf COPYING.autogen_bak COPYING rm -f COPYING.autogen_bak fi if [ -f INSTALL.autogen_bak ]; then cmp INSTALL INSTALL.autogen_bak > /dev/null || cp -pf INSTALL.autogen_bak INSTALL rm -f INSTALL.autogen_bak fi cd "$topdir" fi done conf_flags="--enable-maintainer-mode" if test x$NOCONFIGURE = x; then printbold Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME || exit 1 else echo Skipping configure process. fi pioneers-14.1/macros/type_socklen_t.m40000644000175000017500000000146711517767406015002 00000000000000dnl @synopsis TYPE_SOCKLEN_T dnl dnl Check whether sys/socket.h defines type socklen_t. Please note dnl that some systems require sys/types.h to be included before dnl sys/socket.h can be compiled. dnl dnl Modified by Roland Clobus for ws2tcpip dnl dnl @version $Id: type_socklen_t.m4 1625 2011-01-26 09:53:10Z rclobus $ dnl @author Lars Brinkhoff dnl AC_DEFUN([TYPE_SOCKLEN_T], [AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t, [ AC_TRY_COMPILE( [#ifdef HAVE_WS2TCPIP_H #include #else #include #include #endif], [socklen_t len = 42; return 0;], ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no) ]) if test $ac_cv_type_socklen_t != yes; then AC_DEFINE(socklen_t, int, [Substitute for socklen_t]) fi ]) pioneers-14.1/meta-server/0000755000175000017500000000000011760646034012525 500000000000000pioneers-14.1/meta-server/Makefile.am0000644000175000017500000000201410462166770014500 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA bin_PROGRAMS += pioneers-meta-server pioneers_meta_server_CPPFLAGS = $(console_cflags) pioneers_meta_server_LDADD = $(console_libs) pioneers_meta_server_SOURCES = \ meta-server/main.c pioneers-14.1/meta-server/main.c0000644000175000017500000007033511670666664013560 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003-2009 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #ifdef HAVE_LOCALE_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "network.h" #include "game.h" #include "version.h" typedef enum { META_UNKNOWN, META_CLIENT, META_SERVER_ALMOST, META_SERVER } ClientType; typedef struct _Client Client; struct _Client { ClientType type; gint fd; time_t event_at; /* when is the next timeout for this client? */ void (*event_func) (Client * client); gboolean read_anything; /* Is anything read since the last event? */ char read_buff[16 * 1024]; int read_len; GList *write_queue; gboolean waiting_for_close; gint protocol_major; gint protocol_minor; /* The rest of the structure is only used for META_SERVER clients */ gchar *host; gchar *port; gchar *version; gint max; gint curr; gint previous_curr; gchar *terrain; gchar *title; gchar *vpoints; gchar *sevenrule; }; static gchar *redirect_location = NULL; static gchar *myhostname = NULL; static gboolean can_create_games; static gboolean request_quit = FALSE; static int port_low = 0, port_high = 0; static GList *client_list; static fd_set read_fds; static fd_set write_fds; static int accept_fd; static gint max_fd; /* Command line data */ static gboolean make_daemon = FALSE; static gchar *pidfile = NULL; static gchar *port_range = NULL; static gboolean enable_debug = FALSE; static gboolean enable_syslog_debug = FALSE; static gboolean show_version = FALSE; static void client_printf(Client * client, const char *fmt, ...); #define MINUTE 60 #define HOUR (60 * MINUTE) #define MODE_TIMEOUT (2 * MINUTE) /* delay allowed to define mode */ #define CLIENT_TIMEOUT (2 * MINUTE) /* delay allowed while listing servers */ #define HELLO_TIMEOUT (8 * MINUTE) /* delay allowed between server hello */ static void my_syslog(gint type, const gchar * fmt, ...) { va_list ap; gchar *buff; va_start(ap, fmt); buff = g_strdup_vprintf(fmt, ap); va_end(ap); syslog(type, "%s", buff); if (enable_syslog_debug) g_print("Syslog %d: %s\n", type, buff); g_free(buff); } static void meta_debug(const gchar * fmt, ...) { static FILE *fp; va_list ap; gchar *buff; gint idx; gint len; if (!enable_debug) return; if (fp == NULL) { gchar *fullpath; gchar *filename; filename = g_strdup_printf("pioneers-meta.%d", getpid()); fullpath = g_build_filename(g_get_tmp_dir(), filename, NULL); fp = fopen(fullpath, "w"); g_free(fullpath); g_free(filename); } if (fp == NULL) return; va_start(ap, fmt); buff = g_strdup_vprintf(fmt, ap); va_end(ap); len = strlen(buff); for (idx = 0; idx < len; idx++) { if (isprint(buff[idx]) || idx == len - 1) fputc(buff[idx], fp); else switch (buff[idx]) { case '\n': fputc('\\', fp); fputc('n', fp); break; case '\r': fputc('\\', fp); fputc('r', fp); break; case '\t': fputc('\\', fp); fputc('t', fp); break; default: fprintf(fp, "\\x%02x", (buff[idx] & 0xff)); break; } } fflush(fp); debug(buff); g_free(buff); } static void find_new_max_fd(void) { GList *list; max_fd = accept_fd; for (list = client_list; list != NULL; list = g_list_next(list)) { Client *client = list->data; if (client->fd > max_fd) max_fd = client->fd; } } static void client_free(Client * client) { if (client->type == META_SERVER) my_syslog(LOG_INFO, "server %s on port %s unregistered", client->host, client->port); if (client->host != NULL) g_free(client->host); if (client->port != NULL) g_free(client->port); if (client->version != NULL) g_free(client->version); if (client->terrain != NULL) g_free(client->terrain); if (client->title != NULL) g_free(client->title); if (client->vpoints != NULL) g_free(client->vpoints); if (client->sevenrule != NULL) g_free(client->sevenrule); g_free(client); } static void client_close(Client * client) { client_list = g_list_remove(client_list, client); if (client->fd == max_fd) find_new_max_fd(); FD_CLR(client->fd, &read_fds); FD_CLR(client->fd, &write_fds); net_closesocket(client->fd); while (client->write_queue != NULL) { char *data = client->write_queue->data; client->write_queue = g_list_remove(client->write_queue, data); g_free(data); } client->waiting_for_close = FALSE; client->fd = -1; } static void client_hello(Client * client) { if (client->read_anything) { client_printf(client, "hello\n"); client->read_anything = FALSE; } else { my_syslog(LOG_INFO, "server %s on port %s did not respond, deregistering", client->host, client->port); client_close(client); } } static void set_client_event_at(Client * client) { time_t now = time(NULL); client->event_func = client_close; switch (client->type) { case META_UNKNOWN: client->event_at = now + MODE_TIMEOUT; break; case META_CLIENT: client->event_at = now + CLIENT_TIMEOUT; break; case META_SERVER_ALMOST: case META_SERVER: client->event_at = now + HELLO_TIMEOUT; client->event_func = client_hello; break; } } static void client_do_write(Client * client) { while (client->write_queue != NULL) { char *data = client->write_queue->data; guint len = strlen(data); int num; num = write(client->fd, data, len); meta_debug ("client_do_write: write(%d, \"%.*s\", %d) = %d\n", client->fd, len, data, len, num); if (num < 0) { if (errno == EAGAIN) break; my_syslog(LOG_ERR, "writing socket: %s", g_strerror(errno)); client_close(client); return; } else if (num == len) { client->write_queue = g_list_remove(client->write_queue, data); g_free(data); } else { memmove(data, data + num, len - num + 1); break; } } /* Stop spinning when nothing to do. */ if (client->write_queue == NULL) { if (client->waiting_for_close) { client_close(client); return; } else FD_CLR(client->fd, &write_fds); } set_client_event_at(client); } static void client_printf(Client * client, const char *fmt, ...) { gchar *buff; va_list ap; va_start(ap, fmt); buff = g_strdup_vprintf(fmt, ap); va_end(ap); client->write_queue = g_list_append(client->write_queue, buff); FD_SET(client->fd, &write_fds); set_client_event_at(client); } static void client_list_servers(Client * client) { GList *list; for (list = client_list; list != NULL; list = g_list_next(list)) { Client *scan = list->data; if (scan->type != META_SERVER) continue; client_printf(client, "server\n" "host=%s\n" "port=%s\n" "version=%s\n" "max=%d\n" "curr=%d\n", scan->host, scan->port, scan->version, scan->max, scan->curr); if (client->protocol_major == 0) { client_printf(client, "map=%s\n" "comment=%s\n", scan->terrain, scan->title); } else if (client->protocol_major >= 1) { client_printf(client, "vpoints=%s\n" "sevenrule=%s\n" "terrain=%s\n" "title=%s\n", scan->vpoints, scan->sevenrule, scan->terrain, scan->title); } client_printf(client, "end\n"); } } static GList *load_game_desc(gchar * fname, GList * titles) { FILE *fp; gchar *line, *title; if ((fp = fopen(fname, "r")) == NULL) { g_warning("could not open '%s'", fname); return NULL; } while (read_line_from_file(&line, fp)) { if (strncmp(line, "title ", 6) == 0) { title = line + 6; title += strspn(title, " \t"); titles = g_list_insert_sorted(titles, g_strdup(title), (GCompareFunc) strcmp); g_free(line); break; } g_free(line); } fclose(fp); return titles; } static GList *load_game_types(void) { GDir *dir; GList *titles = NULL; const gchar *fname; gchar *fullname; const gchar *pioneers_dir = get_pioneers_dir(); if ((dir = g_dir_open(pioneers_dir, 0, NULL)) == NULL) { return NULL; } while ((fname = g_dir_read_name(dir))) { gint len = strlen(fname); if (len < 6 || strcmp(fname + len - 5, ".game") != 0) continue; fullname = g_build_filename(pioneers_dir, fname, NULL); if (fullname) { titles = load_game_desc(fullname, titles); g_free(fullname); }; } g_dir_close(dir); return titles; } /** Send the title and free the associated memory. */ static void client_send_type(gpointer data, gpointer user_data) { Client *client = user_data; client_printf(client, "title=%s\n", data); g_free(data); } static void client_list_types(Client * client) { GList *list = load_game_types(); g_list_foreach(list, client_send_type, client); g_list_free(list); } static void client_list_capability(Client * client) { if (can_create_games) { client_printf(client, "create games\n"); } /** @todo RC 2005-01-30 Implement this in the meta-server */ if (FALSE) client_printf(client, "send game settings\n"); client_printf(client, "deregister dead connections\n"); client_printf(client, "end\n"); } static const gchar *get_server_path(void) { const gchar *console_server; if (!(console_server = g_getenv("PIONEERS_SERVER_CONSOLE"))) if (! (console_server = g_getenv("GNOCATAN_SERVER_CONSOLE"))) console_server = PIONEERS_SERVER_CONSOLE_PATH; return console_server; } static void client_create_new_server(Client * client, gchar * line) { #ifdef HAVE_GETADDRINFO_ET_AL char *terrain, *numplayers, *points, *sevens_rule, *numai, *type; int fd, port_used; gboolean found_used = TRUE; socklen_t yes = 1; struct sockaddr_in sa; const char *console_server; unsigned int n; GList *list; GSpawnFlags spawn_flags = G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL; gchar *child_argv[34]; gchar *port; GError *error = NULL; line += strspn(line, " \t"); terrain = line; line += strspn(line, "0123456789"); if (line == terrain) goto bad; *line++ = 0; line += strspn(line, " \t"); numplayers = line; line += strspn(line, "0123456789"); if (line == numplayers) goto bad; *line++ = 0; line += strspn(line, " \t"); points = line; line += strspn(line, "0123456789"); if (line == points) goto bad; *line++ = 0; line += strspn(line, " \t"); sevens_rule = line; line += strspn(line, "0123456789"); if (line == points) goto bad; *line++ = 0; line += strspn(line, " \t"); numai = line; line += strspn(line, "0123456789"); if (line == points) goto bad; *line++ = 0; line += strspn(line, " \t"); type = line; line += strlen(line) - 1; while (line >= type && isspace(*line)) *line-- = 0; if (line < type) goto bad; console_server = get_server_path(); fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0) { client_printf(client, "Creating socket failed: %s\n", g_strerror(errno)); return; } if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { client_printf(client, "Setting socket reuse failed: %s\n", g_strerror(errno)); net_closesocket(fd); return; } sa.sin_family = AF_INET; if ((port_low == 0) && (port_high == 0)) { sa.sin_port = 0; } else { for (port_used = port_low; ((found_used == TRUE) && (port_used <= port_high)); port_used++) { found_used = FALSE; for (list = client_list; list != NULL; list = g_list_next(list)) { Client *scan = list->data; if ((scan->port != NULL) && (atoi(scan->port) == port_used)) { found_used = TRUE; } } if (found_used == FALSE) { sa.sin_port = port_used; } } if (found_used == TRUE) { client_printf(client, "Starting server failed: no port available\n"); net_closesocket(fd); return; } } sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) { client_printf(client, "Binding socket failed: %s\n", g_strerror(errno)); net_closesocket(fd); return; } yes = sizeof(sa); if (getsockname(fd, (struct sockaddr *) &sa, &yes) < 0) { client_printf(client, "Getting socket address failed: %s\n", g_strerror(errno)); net_closesocket(fd); return; } port = g_strdup_printf("%d", sa.sin_port); net_closesocket(fd); n = 0; child_argv[n++] = g_strdup(console_server); child_argv[n++] = g_strdup(console_server); child_argv[n++] = g_strdup("-g"); child_argv[n++] = g_strdup(type); child_argv[n++] = g_strdup("-P"); child_argv[n++] = g_strdup(numplayers); child_argv[n++] = g_strdup("-v"); child_argv[n++] = g_strdup(points); child_argv[n++] = g_strdup("-R"); child_argv[n++] = g_strdup(sevens_rule); child_argv[n++] = g_strdup("-T"); child_argv[n++] = g_strdup(terrain); child_argv[n++] = g_strdup("-p"); child_argv[n++] = g_strdup(port); child_argv[n++] = g_strdup("-c"); child_argv[n++] = g_strdup(numai); child_argv[n++] = g_strdup("-k"); child_argv[n++] = g_strdup("1200"); child_argv[n++] = g_strdup("-m"); child_argv[n++] = g_strdup(myhostname); child_argv[n++] = g_strdup("-n"); child_argv[n++] = g_strdup(myhostname); child_argv[n++] = g_strdup("-x"); child_argv[n++] = g_strdup("-t"); child_argv[n++] = g_strdup("1"); child_argv[n++] = g_strdup("-r"); child_argv[n] = NULL; g_assert(n < 34); if (!g_spawn_async(NULL, child_argv, NULL, spawn_flags, NULL, NULL, NULL, &error)) { my_syslog(LOG_ERR, "cannot exec %s: %s", console_server, error->message); g_error_free(error); } for (n = 0; child_argv[n] != NULL; n++) g_free(child_argv[n]); client_printf(client, "host=%s\n", myhostname); client_printf(client, "port=%s\n", port); client_printf(client, "started\n"); my_syslog(LOG_INFO, "new local server started on port %s", port); g_free(port); return; bad: client_printf(client, "Badly formatted request\n"); #else /* HAVE_GETADDRINFO_ET_AL */ client_printf(client, "Create new server not yet supported on this platform'n"); #endif /* HAVE_GETADDRINFO_ET_AL */ } static gboolean check_str_info(gchar * line, const gchar * prefix, gchar ** data) { guint len = strlen(prefix); if (strncmp(line, prefix, len) != 0) return FALSE; if (*data != NULL) g_free(*data); *data = g_strdup(line + len); return TRUE; } static gboolean check_int_info(gchar * line, const gchar * prefix, gint * data) { guint len = strlen(prefix); if (strncmp(line, prefix, len) != 0) return FALSE; *data = atoi(line + len); return TRUE; } static void try_make_server_complete(Client * client) { gboolean ok = FALSE; if (client->type == META_SERVER) { if (client->curr != client->previous_curr) { my_syslog(LOG_INFO, "server %s on port %s: now %d of %d players", client->host, client->port, client->curr, client->max); client->previous_curr = client->curr; } return; } if (client->host != NULL && client->port != NULL && client->version != NULL && client->max >= 0 && client->curr >= 0 && client->terrain != NULL && client->title != NULL) { if (client->protocol_major < 1) { if (!client->vpoints) client->vpoints = g_strdup("?"); if (!client->sevenrule) client->sevenrule = g_strdup("?"); ok = TRUE; } else { if (client->vpoints != NULL && client->sevenrule != NULL) ok = TRUE; } } if (ok) { client->type = META_SERVER; my_syslog(LOG_INFO, "server %s on port %s registered", client->host, client->port); } } static void get_peer_name(gint fd, gchar ** hostname, gchar ** servname) { gchar *error_message; if (!net_get_peer_name(fd, hostname, servname, &error_message)) { my_syslog(LOG_ERR, "%s", error_message); g_free(error_message); } } static void client_process_line(Client * client, gchar * line) { switch (client->type) { case META_UNKNOWN: case META_CLIENT: if (strncmp(line, "version ", 8) == 0) { char *p = line + 8; client->protocol_major = atoi(p); p += strspn(p, "0123456789"); if (*p == '.') client->protocol_minor = atoi(p + 1); } else if (strcmp(line, "listservers") == 0 || /* still accept "client" request from proto 0 clients * so we don't have to distinguish between client versions */ strcmp(line, "client") == 0) { client->type = META_CLIENT; client_list_servers(client); client->waiting_for_close = TRUE; } else if (strcmp(line, "listtypes") == 0) { client->type = META_CLIENT; client_list_types(client); client->waiting_for_close = TRUE; } else if (strncmp(line, "create ", 7) == 0 && can_create_games) { client->type = META_CLIENT; client_create_new_server(client, line + 7); client->waiting_for_close = TRUE; } else if (strcmp(line, "server") == 0) { client->type = META_SERVER_ALMOST; client->max = client->curr = -1; client->previous_curr = -1; get_peer_name(client->fd, &client->host, &client->port); } else if (strcmp(line, "capability") == 0) { client->type = META_CLIENT; client_list_capability(client); } else { client_printf(client, "bad command\n"); client->waiting_for_close = TRUE; } break; case META_SERVER: case META_SERVER_ALMOST: if (check_str_info(line, "host=", &client->host) || check_str_info(line, "port=", &client->port) || check_str_info(line, "version=", &client->version) || check_int_info(line, "max=", &client->max) || check_int_info(line, "curr=", &client->curr) || check_str_info(line, "terrain=", &client->terrain) || check_str_info(line, "title=", &client->title) || check_str_info(line, "vpoints=", &client->vpoints) || check_str_info(line, "sevenrule=", &client->sevenrule) /* meta-protocol 0.0 compat */ || check_str_info(line, "map=", &client->terrain) || check_str_info(line, "comment=", &client->title)) try_make_server_complete(client); else if (strcmp(line, "begin") == 0) client_close(client); break; } } static int find_line(char *buff, int len) { int idx; for (idx = 0; idx < len; idx++) if (buff[idx] == '\n') return idx; return -1; } static void client_do_read(Client * client) { int num; int offset; if (client->read_len == sizeof(client->read_buff)) { /* We are in trouble now - something has gone * seriously wrong. */ my_syslog(LOG_ERR, "read buffer overflow - disconnecting"); client_close(client); return; } num = read(client->fd, client->read_buff + client->read_len, sizeof(client->read_buff) - client->read_len); if (num > 0) { meta_debug("client_do_read: read(%d, %d) = %d, \"%.*s\"\n", client->fd, sizeof(client->read_buff) - client->read_len, num, num, client->read_buff + client->read_len); client->read_anything = TRUE; } else if (num < 0) { if (errno == EAGAIN) return; my_syslog(LOG_ERR, "reading socket: %s", g_strerror(errno)); client_close(client); return; } else { meta_debug("client_do_read: EOF seen on fd %d\n", client->fd); client_close(client); return; } client->read_len += num; offset = 0; while (offset < client->read_len) { char *line = client->read_buff + offset; int len = find_line(line, client->read_len - offset); if (len < 0) break; line[len] = '\0'; offset += len + 1; client_process_line(client, line); } if (offset < client->read_len) { /* Did not process all data in buffer - discard * processed data and copy remaining data to beginning * of buffer until next time */ memmove(client->read_buff, client->read_buff + offset, client->read_len - offset); client->read_len -= offset; } else /* Processed all data in buffer, discard it */ client->read_len = 0; set_client_event_at(client); } static void accept_new_client(void) { int fd; gchar *error_message; Client *client; fd = net_accept(accept_fd, &error_message); if (fd < 0) { my_syslog(LOG_ERR, "%s", error_message); g_free(error_message); return; } if (fd > max_fd) max_fd = fd; client = g_malloc0(sizeof(*client)); client_list = g_list_append(client_list, client); client->type = META_UNKNOWN; client->protocol_major = 0; client->protocol_minor = 0; client->fd = fd; if (redirect_location != NULL) { client_printf(client, "goto %s\n", redirect_location); client->waiting_for_close = TRUE; } else { client_printf(client, "welcome to the pioneers-meta-server version %s\n", META_PROTOCOL_VERSION); FD_SET(client->fd, &read_fds); } set_client_event_at(client); } static struct timeval *find_next_delay(void) { GList *list; static struct timeval timeout; time_t now = time(NULL); timeout.tv_sec = 30 * 60 * 60; /* 30 minutes */ timeout.tv_usec = 0; for (list = client_list; list != NULL; list = g_list_next(list)) { Client *client = list->data; time_t delay; if (now > client->event_at) delay = 0; else delay = client->event_at - now; if (delay < timeout.tv_sec) timeout.tv_sec = delay; } return &timeout; } static void reap_children(void) { int dummy; while (waitpid(-1, &dummy, WNOHANG) > 0); } static void check_timeouts(void) { time_t now = time(NULL); GList *list; list = client_list; while (list != NULL) { Client *client = list->data; list = g_list_next(list); if (now < client->event_at) continue; if (client->event_func == NULL) client_close(client); else client->event_func(client); } } static void select_loop(void) { while (!request_quit || client_list != NULL) { fd_set read_res; fd_set write_res; int num; struct timeval *timeout; GList *list; reap_children(); check_timeouts(); timeout = find_next_delay(); read_res = read_fds; write_res = write_fds; num = select(max_fd + 1, &read_res, &write_res, NULL, timeout); if (num < 0) { if (errno == EINTR) continue; else { my_syslog(LOG_ALERT, "could not select: %s", g_strerror(errno)); exit(1); } } if (FD_ISSET(accept_fd, &read_res)) { accept_new_client(); num--; } list = client_list; while (num > 0 && list != NULL) { Client *client = list->data; list = g_list_next(list); if (client->fd >= 0 && FD_ISSET(client->fd, &read_res)) { client_do_read(client); num--; } if (client->fd >= 0 && FD_ISSET(client->fd, &write_res)) { client_do_write(client); num--; } if (client->waiting_for_close && client->write_queue == NULL) client_close(client); if (client->fd < 0) client_free(client); } } } static gboolean setup_accept_sock(const gchar * port) { int fd; gchar *error_message; fd = net_open_listening_socket(port, &error_message); if (fd == -1) { my_syslog(LOG_ERR, "%s", error_message); g_free(error_message); return FALSE; } accept_fd = max_fd = fd; FD_SET(accept_fd, &read_fds); return TRUE; } static void convert_to_daemon(void) { pid_t pid; pid = fork(); if (pid < 0) { my_syslog(LOG_ALERT, "could not fork: %s", g_strerror(errno)); exit(1); } if (pid != 0) { /* Write the pidfile if required. */ if (pidfile) { FILE *f = fopen(pidfile, "w"); if (!f) { fprintf(stderr, "Unable to open pidfile '%s': %s\n", pidfile, g_strerror(errno)); } else { int r = fprintf(f, "%d\n", pid); if (r <= 0) { fprintf(stderr, "Unable to write to pidfile " "'%s': %s\n", pidfile, g_strerror(errno)); } fclose(f); } } /* I am the parent, if I exit then init(8) will become * the parent of the child process */ exit(0); } /* Create a new session to become a process group leader */ if (setsid() < 0) { my_syslog(LOG_ALERT, "could not setsid: %s", g_strerror(errno)); exit(1); } if (chdir("/") < 0) { my_syslog(LOG_ALERT, "could not chdir to /: %s", g_strerror(errno)); exit(1); } umask(0); } static GOptionEntry commandline_entries[] = { {"daemon", 'd', 0, G_OPTION_ARG_NONE, &make_daemon, /* Commandline meta-server: daemon */ N_("Daemonize the meta-server on start"), NULL}, {"pidfile", 'P', 0, G_OPTION_ARG_STRING, &pidfile, /* Commandline meta-server: pidfile */ N_("Pidfile to create when daemonizing (implies -d)"), /* Commandline meta-server: pidfile argument */ N_("filename")}, {"redirect", 'r', 0, G_OPTION_ARG_STRING, &redirect_location, /* Commandline meta-server: redirect */ N_("Redirect clients to another meta-server"), NULL}, {"servername", 's', 0, G_OPTION_ARG_STRING, &myhostname, /* Commandline meta-server: server */ N_("Use this hostname when creating new games"), /* Commandline meta-server: server argument */ N_("hostname")}, {"port-range", 'p', 0, G_OPTION_ARG_STRING, &port_range, /* Commandline meta-server: port-range */ N_("Use this port range when creating new games"), /* Commandline meta-server: port-range argument */ N_("from-to")}, {"debug", '\0', 0, G_OPTION_ARG_NONE, &enable_debug, /* Commandline option of meta server: enable debug logging */ N_("Enable debug messages"), NULL}, {"syslog-debug", '\0', 0, G_OPTION_ARG_NONE, &enable_syslog_debug, /* Commandline option of meta server: syslog-debug */ N_("Debug syslog messages"), NULL}, {"version", '\0', 0, G_OPTION_ARG_NONE, &show_version, /* Commandline option of meta server: version */ N_("Show version information"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; static void handle_usr1_signal(G_GNUC_UNUSED int signal) { request_quit = TRUE; } int main(int argc, char *argv[]) { GOptionContext *context; GError *error = NULL; GList *game_list; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); /* have gettext return strings in UTF-8 */ bind_textdomain_codeset(PACKAGE, "UTF-8"); /* Long description in the commandline for server-console: help */ context = g_option_context_new(_("- Meta server for Pioneers")); g_option_context_add_main_entries(context, commandline_entries, PACKAGE); g_option_context_parse(context, &argc, &argv, &error); g_option_context_free(context); if (error != NULL) { g_print("%s\n", error->message); g_error_free(error); return 1; }; if (show_version) { g_print(_("Pioneers version:")); g_print(" "); g_print(FULL_VERSION); g_print(", "); g_print(_("meta-server protocol:")); g_print(" "); g_print(META_PROTOCOL_VERSION); g_print("\n"); return 0; } set_enable_debug(enable_debug); if (port_range) { gint count; count = sscanf(port_range, "%d-%d", &port_low, &port_high); if ((count != 2) || (port_low < 0) || (port_low > port_high)) { g_print("Port range '%s' is not valid\n", port_range); return 1; } } net_init(); openlog("pioneers-meta", LOG_PID, LOG_USER); if (make_daemon || pidfile) convert_to_daemon(); can_create_games = FALSE; game_list = load_game_types(); if (game_list) { gchar *server_name; g_list_foreach(game_list, (GFunc) g_free, NULL); g_list_free(game_list); server_name = g_find_program_in_path(get_server_path()); if (server_name) { g_free(server_name); #ifdef HAVE_GETADDRINFO_ET_AL can_create_games = TRUE; #endif /* HAVE_GETADDRINFO_ET_AL */ } } can_create_games = can_create_games && (port_range != NULL); if (!myhostname) myhostname = get_meta_server_name(FALSE); if (!setup_accept_sock(PIONEERS_DEFAULT_META_PORT)) return 1; struct sigaction myusr1action; struct sigaction oldusr1action; myusr1action.sa_handler = handle_usr1_signal; myusr1action.sa_flags = 0; sigemptyset(&myusr1action.sa_mask); sigaction(SIGUSR1, &myusr1action, &oldusr1action); my_syslog(LOG_INFO, "Pioneers meta server started."); select_loop(); sigaction(SIGUSR1, &oldusr1action, NULL); g_free(pidfile); g_free(redirect_location); g_free(myhostname); g_free(port_range); net_finish(); return 0; } pioneers-14.1/MinGW/0000755000175000017500000000000011760646035011255 500000000000000pioneers-14.1/MinGW/Makefile.am0000644000175000017500000000431411715315575013235 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2011 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if IS_MINGW_PORT install-exec-hook: install-MinGW install-MinGW: cp /mingw/bin/freetype6.dll /usr/local cp /mingw/bin/intl.dll /usr/local cp /mingw/bin/libatk-1.0-0.dll /usr/local cp /mingw/bin/libcairo-2.dll /usr/local cp /mingw/bin/libcroco-0.6-3.dll /usr/local cp /mingw/bin/libexpat-1.dll /usr/local cp /mingw/bin/libfontconfig-1.dll /usr/local cp /mingw/bin/libgdk_pixbuf-2.0-0.dll /usr/local cp /mingw/bin/libgdk-win32-2.0-0.dll /usr/local cp /mingw/bin/libgio-2.0-0.dll /usr/local cp /mingw/bin/libglib-2.0-0.dll /usr/local cp /mingw/bin/libgmodule-2.0-0.dll /usr/local cp /mingw/bin/libgobject-2.0-0.dll /usr/local cp /mingw/bin/libgthread-2.0-0.dll /usr/local cp /mingw/bin/libgtk-win32-2.0-0.dll /usr/local cp /mingw/bin/libpango-1.0-0.dll /usr/local cp /mingw/bin/libpangocairo-1.0-0.dll /usr/local cp /mingw/bin/libpangoft2-1.0-0.dll /usr/local cp /mingw/bin/libpangowin32-1.0-0.dll /usr/local cp /mingw/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.dll /usr/local cp /mingw/bin/libpng14-14.dll /usr/local cp /mingw/bin/librsvg-2-2.dll /usr/local cp /mingw/bin/libssp-0.dll /usr/local cp /mingw/bin/libxml2-2.dll /usr/local cp /mingw/bin/zlib1.dll /usr/local mkdir -p /usr/local/lib/gdk-pixbuf-2.0/2.10.0 cp $(srcdir)/MinGW/loaders.cache /usr/local/lib/gdk-pixbuf-2.0/2.10.0 endif # IS_MINGW_PORT EXTRA_DIST += \ $(srcdir)/MinGW/loaders.cache pioneers-14.1/MinGW/pioneers.nsi.in0000644000175000017500000006422511666260063014150 00000000000000; Script generated with the aid of the HM NIS Edit Script Wizard. ; Adapted for Pioneers by Roland Clobus ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "Pioneers" !define PRODUCT_VERSION "@VERSION@" !define PRODUCT_WEB_SITE "http://pio.sf.net" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\pioneers.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" !define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir" SetCompressor bzip2 !include "MUI2.nsh" ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; Language Selection Dialog Settings !define MUI_LANGDLL_ALLLANGUAGES !define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" ; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "../COPYING" ; Components page !insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Start menu page var ICONS_GROUP !define MUI_STARTMENUPAGE_NODISABLE !define MUI_STARTMENUPAGE_DEFAULTFOLDER "Pioneers" !define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}" !insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\pioneers.exe" !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; Language files !insertmacro MUI_LANGUAGE "English" ;first language is the default !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "Swedish" ;Reserve Files ;If you are using solid compression, files that are required before ;the actual installation should be stored first in the data block, ;because this will make your installer start faster. !insertmacro MUI_RESERVEFILE_LANGDLL ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Pioneers-${PRODUCT_VERSION}-setup.exe" InstallDir "$PROGRAMFILES\Pioneers" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show ;Request application privileges for Windows Vista RequestExecutionLevel admin Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd Section "!Minimal install" SEC01 SetOutPath "$INSTDIR" SetOverwrite ifnewer File "..\..\..\..\local\pioneers.exe" File "..\..\..\..\local\freetype6.dll" File "..\..\..\..\local\intl.dll" File "..\..\..\..\local\libatk-1.0-0.dll" File "..\..\..\..\local\libcairo-2.dll" File "..\..\..\..\local\libcroco-0.6-3.dll" File "..\..\..\..\local\libexpat-1.dll" File "..\..\..\..\local\libfontconfig-1.dll" File "..\..\..\..\local\libgdk_pixbuf-2.0-0.dll" File "..\..\..\..\local\libgdk-win32-2.0-0.dll" File "..\..\..\..\local\libgio-2.0-0.dll" File "..\..\..\..\local\libglib-2.0-0.dll" File "..\..\..\..\local\libgmodule-2.0-0.dll" File "..\..\..\..\local\libgobject-2.0-0.dll" File "..\..\..\..\local\libgthread-2.0-0.dll" File "..\..\..\..\local\libgtk-win32-2.0-0.dll" File "..\..\..\..\local\libpango-1.0-0.dll" File "..\..\..\..\local\libpangocairo-1.0-0.dll" File "..\..\..\..\local\libpangoft2-1.0-0.dll" File "..\..\..\..\local\libpangowin32-1.0-0.dll" File "..\..\..\..\local\libpixbufloader-svg.dll" File "..\..\..\..\local\libpng14-14.dll" File "..\..\..\..\local\librsvg-2-2.dll" File "..\..\..\..\local\libxml2-2.dll" File "..\..\..\..\local\zlib1.dll" SetOutPath "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0" File "..\..\..\..\local\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache" SetOverwrite TRY ; Translations SetOutPath "$INSTDIR\locale\af\LC_MESSAGES" File "..\..\..\..\local\locale\af\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\cs\LC_MESSAGES" File "..\..\..\..\local\locale\cs\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\da\LC_MESSAGES" File "..\..\..\..\local\locale\da\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\de\LC_MESSAGES" File "..\..\..\..\local\locale\de\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\en_GB\LC_MESSAGES" File "..\..\..\..\local\locale\en_GB\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\es\LC_MESSAGES" File "..\..\..\..\local\locale\es\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\fr\LC_MESSAGES" File "..\..\..\..\local\locale\fr\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\gl\LC_MESSAGES" File "..\..\..\..\local\locale\gl\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\hu\LC_MESSAGES" File "..\..\..\..\local\locale\hu\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\it\LC_MESSAGES" File "..\..\..\..\local\locale\it\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\ja\LC_MESSAGES" File "..\..\..\..\local\locale\ja\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\nl\LC_MESSAGES" File "..\..\..\..\local\locale\nl\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\pt\LC_MESSAGES" File "..\..\..\..\local\locale\pt\LC_MESSAGES\pioneers.mo" SetOutPath "$INSTDIR\locale\sv\LC_MESSAGES" File "..\..\..\..\local\locale\sv\LC_MESSAGES\pioneers.mo" ; No man pages for Windows native distribution ; SetOutPath "$INSTDIR\man\man6" ; File "..\..\..\..\local\man\man6\pioneers-meta-server.6" ; File "..\..\..\..\local\man\man6\pioneers-server-console.6" ; File "..\..\..\..\local\man\man6\pioneers-server-gtk.6" ; File "..\..\..\..\local\man\man6\pioneers.6" ; File "..\..\..\..\local\man\man6\pioneersai.6" ; Main toolbar icons SetOutPath "$INSTDIR\pixmaps\pioneers" File "..\..\..\..\local\pixmaps\pioneers\bridge.svg" File "..\..\..\..\local\pixmaps\pioneers\city.svg" File "..\..\..\..\local\pixmaps\pioneers\city_wall.svg" File "..\..\..\..\local\pixmaps\pioneers\develop.svg" File "..\..\..\..\local\pixmaps\pioneers\dice.svg" File "..\..\..\..\local\pixmaps\pioneers\finish.svg" File "..\..\..\..\local\pixmaps\pioneers\road.svg" File "..\..\..\..\local\pixmaps\pioneers\settlement.svg" File "..\..\..\..\local\pixmaps\pioneers\ship.svg" File "..\..\..\..\local\pixmaps\pioneers\ship_move.svg" File "..\..\..\..\local\pixmaps\pioneers\splash.png" File "..\..\..\..\local\pixmaps\pioneers\trade.svg" File "..\..\..\..\local\pixmaps\pioneers\brick.png" File "..\..\..\..\local\pixmaps\pioneers\grain.png" File "..\..\..\..\local\pixmaps\pioneers\ore.png" File "..\..\..\..\local\pixmaps\pioneers\wool.png" File "..\..\..\..\local\pixmaps\pioneers\lumber.png" File "..\..\..\..\local\pixmaps\pioneers\style-ai.png" File "..\..\..\..\local\pixmaps\pioneers\style-human.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-1.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-2.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-3.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-4.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-5.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-6.png" File "..\..\..\..\local\pixmaps\pioneers\style-human-7.png" ; Themes SetOutPath "$INSTDIR\themes" SetOutPath "$INSTDIR\themes\ccFlickr" File "..\..\..\..\local\themes\ccFlickr\ATTRIB" File "..\..\..\..\local\themes\ccFlickr\board.png" File "..\..\..\..\local\themes\ccFlickr\brick.png" File "..\..\..\..\local\themes\ccFlickr\desert.png" File "..\..\..\..\local\themes\ccFlickr\gold.png" File "..\..\..\..\local\themes\ccFlickr\grain.png" File "..\..\..\..\local\themes\ccFlickr\lumber.png" File "..\..\..\..\local\themes\ccFlickr\ore.png" File "..\..\..\..\local\themes\ccFlickr\port-brick.png" File "..\..\..\..\local\themes\ccFlickr\port-gold.png" File "..\..\..\..\local\themes\ccFlickr\port-grain.png" File "..\..\..\..\local\themes\ccFlickr\port-lumber.png" File "..\..\..\..\local\themes\ccFlickr\port-ore.png" File "..\..\..\..\local\themes\ccFlickr\port-wool.png" File "..\..\..\..\local\themes\ccFlickr\sea.png" File "..\..\..\..\local\themes\ccFlickr\theme.cfg" File "..\..\..\..\local\themes\ccFlickr\wool.png" SetOutPath "$INSTDIR\themes\Classic" File "..\..\..\..\local\themes\Classic\board.png" File "..\..\..\..\local\themes\Classic\desert.png" File "..\..\..\..\local\themes\Classic\field.png" File "..\..\..\..\local\themes\Classic\forest.png" File "..\..\..\..\local\themes\Classic\gold.png" File "..\..\..\..\local\themes\Classic\hill.png" File "..\..\..\..\local\themes\Classic\mountain.png" File "..\..\..\..\local\themes\Classic\pasture.png" File "..\..\..\..\local\themes\Classic\sea.png" File "..\..\..\..\local\themes\Classic\theme.cfg" SetOutPath "$INSTDIR\themes\FreeCIV-like" File "..\..\..\..\local\themes\FreeCIV-like\board.png" File "..\..\..\..\local\themes\FreeCIV-like\desert.png" File "..\..\..\..\local\themes\FreeCIV-like\field.png" File "..\..\..\..\local\themes\FreeCIV-like\forest.png" File "..\..\..\..\local\themes\FreeCIV-like\gold.png" File "..\..\..\..\local\themes\FreeCIV-like\hill.png" File "..\..\..\..\local\themes\FreeCIV-like\mountain.png" File "..\..\..\..\local\themes\FreeCIV-like\pasture.png" File "..\..\..\..\local\themes\FreeCIV-like\sea.png" File "..\..\..\..\local\themes\FreeCIV-like\theme.cfg" SetOutPath "$INSTDIR\themes\Iceland" File "..\..\..\..\local\themes\Iceland\board.png" File "..\..\..\..\local\themes\Iceland\desert.png" File "..\..\..\..\local\themes\Iceland\field_grain.png" File "..\..\..\..\local\themes\Iceland\forest_lumber.png" File "..\..\..\..\local\themes\Iceland\gold.png" File "..\..\..\..\local\themes\Iceland\hill_brick.png" File "..\..\..\..\local\themes\Iceland\mountain_ore.png" File "..\..\..\..\local\themes\Iceland\pasture_wool.png" File "..\..\..\..\local\themes\Iceland\sea.png" File "..\..\..\..\local\themes\Iceland\theme.cfg" SetOutPath "$INSTDIR\themes\Tiny" File "..\..\..\..\local\themes\Tiny\board.png" File "..\..\..\..\local\themes\Tiny\brick-lorindol.png" File "..\..\..\..\local\themes\Tiny\brick-port.png" File "..\..\..\..\local\themes\Tiny\desert-lorindol.png" File "..\..\..\..\local\themes\Tiny\gold-lorindol.png" File "..\..\..\..\local\themes\Tiny\grain-lorindol.png" File "..\..\..\..\local\themes\Tiny\grain-port.png" File "..\..\..\..\local\themes\Tiny\lumber-lorindol.png" File "..\..\..\..\local\themes\Tiny\lumber-port.png" File "..\..\..\..\local\themes\Tiny\ore-lorindol.png" File "..\..\..\..\local\themes\Tiny\ore-port.png" File "..\..\..\..\local\themes\Tiny\sea-lorindol.png" File "..\..\..\..\local\themes\Tiny\theme.cfg" File "..\..\..\..\local\themes\Tiny\wool-lorindol.png" File "..\..\..\..\local\themes\Tiny\wool-port.png" SetOutPath "$INSTDIR\themes\Wesnoth-like" File "..\..\..\..\local\themes\Wesnoth-like\board.png" File "..\..\..\..\local\themes\Wesnoth-like\desert.png" File "..\..\..\..\local\themes\Wesnoth-like\field.png" File "..\..\..\..\local\themes\Wesnoth-like\forest.png" File "..\..\..\..\local\themes\Wesnoth-like\gold.png" File "..\..\..\..\local\themes\Wesnoth-like\hill.png" File "..\..\..\..\local\themes\Wesnoth-like\mountain.png" File "..\..\..\..\local\themes\Wesnoth-like\pasture.png" File "..\..\..\..\local\themes\Wesnoth-like\sea.png" File "..\..\..\..\local\themes\Wesnoth-like\theme.cfg" ; Shortcuts SetOutPath "$INSTDIR" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Pioneers.lnk" "$INSTDIR\pioneers.exe" CreateShortCut "$DESKTOP\Pioneers.lnk" "$INSTDIR\pioneers.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Section /o "Additional programs" SEC02 SetOutPath "$INSTDIR" SetOverwrite ifnewer File "..\..\..\..\local\pioneersai.exe" File "..\..\..\..\local\pioneers-editor.exe" SetOverwrite TRY SetOutPath "$INSTDIR\games\pioneers" ; Names for the AI File "..\..\..\..\local\games\pioneers\computer_names" ; Games for the editor (and server) File "..\..\..\..\local\games\pioneers\5-6-player.game" File "..\..\..\..\local\games\pioneers\Another_swimming_pool_in_the_wall.game" File "..\..\..\..\local\games\pioneers\archipel_gold.game" File "..\..\..\..\local\games\pioneers\canyon.game" File "..\..\..\..\local\games\pioneers\coeur.game" File "..\..\..\..\local\games\pioneers\conquest+ports.game" File "..\..\..\..\local\games\pioneers\conquest.game" File "..\..\..\..\local\games\pioneers\crane_island.game" File "..\..\..\..\local\games\pioneers\Cube.game" File "..\..\..\..\local\games\pioneers\default.game" File "..\..\..\..\local\games\pioneers\Evil_square.game" File "..\..\..\..\local\games\pioneers\four-islands.game" File "..\..\..\..\local\games\pioneers\GuerreDe100ans.game" File "..\..\..\..\local\games\pioneers\henjes.game" File "..\..\..\..\local\games\pioneers\iles.game" File "..\..\..\..\local\games\pioneers\lorindol.game" File "..\..\..\..\local\games\pioneers\Mini_another_swimming_pool_in_the_wall.game" File "..\..\..\..\local\games\pioneers\north_america.game" File "..\..\..\..\local\games\pioneers\pond.game" File "..\..\..\..\local\games\pioneers\seafarers-gold.game" File "..\..\..\..\local\games\pioneers\seafarers.game" File "..\..\..\..\local\games\pioneers\small.game" File "..\..\..\..\local\games\pioneers\south_africa.game" File "..\..\..\..\local\games\pioneers\square.game" File "..\..\..\..\local\games\pioneers\star.game" File "..\..\..\..\local\games\pioneers\ubuntuland.game" File "..\..\..\..\local\games\pioneers\x.game" ; Shortcuts SetOutPath "$INSTDIR" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Pioneers Editor.lnk" "$INSTDIR\pioneers-editor.exe" CreateShortCut "$DESKTOP\Pioneers Editor.lnk" "$INSTDIR\pioneers-editor.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Section -AdditionalIcons !insertmacro MUI_STARTMENU_WRITE_BEGIN Application WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\pioneers.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\pioneers.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Play games of Pioneers" !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Install a game editor and a computer player" !insertmacro MUI_FUNCTION_DESCRIPTION_END Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." FunctionEnd Function un.onInit !insertmacro MUI_UNGETLANGUAGE MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 Abort FunctionEnd Section Uninstall !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\pioneers-editor.exe" Delete "$INSTDIR\pioneersai.exe" Delete "$INSTDIR\pioneers.exe" Delete "$INSTDIR\freetype6.dll" Delete "$INSTDIR\intl.dll" Delete "$INSTDIR\libatk-1.0-0.dll" Delete "$INSTDIR\libcairo-2.dll" Delete "$INSTDIR\libcroco-0.6-3.dll" Delete "$INSTDIR\libexpat-1.dll" Delete "$INSTDIR\libfontconfig-1.dll" Delete "$INSTDIR\libgdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\libgdk-win32-2.0-0.dll" Delete "$INSTDIR\libgio-2.0-0.dll" Delete "$INSTDIR\libglib-2.0-0.dll" Delete "$INSTDIR\libgmodule-2.0-0.dll" Delete "$INSTDIR\libgobject-2.0-0.dll" Delete "$INSTDIR\libgthread-2.0-0.dll" Delete "$INSTDIR\libgtk-win32-2.0-0.dll" Delete "$INSTDIR\libpango-1.0-0.dll" Delete "$INSTDIR\libpangocairo-1.0-0.dll" Delete "$INSTDIR\libpangoft2-1.0-0.dll" Delete "$INSTDIR\libpangowin32-1.0-0.dll" Delete "$INSTDIR\libpixbufloader-svg.dll" Delete "$INSTDIR\libpng14-14.dll" Delete "$INSTDIR\librsvg-2-2.dll" Delete "$INSTDIR\libxml2-2.dll" Delete "$INSTDIR\zlib1.dll" Delete "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache" Delete "$INSTDIR\themes\Wesnoth-like\theme.cfg" Delete "$INSTDIR\themes\Wesnoth-like\sea.png" Delete "$INSTDIR\themes\Wesnoth-like\pasture.png" Delete "$INSTDIR\themes\Wesnoth-like\mountain.png" Delete "$INSTDIR\themes\Wesnoth-like\hill.png" Delete "$INSTDIR\themes\Wesnoth-like\gold.png" Delete "$INSTDIR\themes\Wesnoth-like\forest.png" Delete "$INSTDIR\themes\Wesnoth-like\field.png" Delete "$INSTDIR\themes\Wesnoth-like\desert.png" Delete "$INSTDIR\themes\Wesnoth-like\board.png" Delete "$INSTDIR\themes\Tiny\wool-port.png" Delete "$INSTDIR\themes\Tiny\wool-lorindol.png" Delete "$INSTDIR\themes\Tiny\theme.cfg" Delete "$INSTDIR\themes\Tiny\sea-lorindol.png" Delete "$INSTDIR\themes\Tiny\ore-port.png" Delete "$INSTDIR\themes\Tiny\ore-lorindol.png" Delete "$INSTDIR\themes\Tiny\lumber-port.png" Delete "$INSTDIR\themes\Tiny\lumber-lorindol.png" Delete "$INSTDIR\themes\Tiny\grain-port.png" Delete "$INSTDIR\themes\Tiny\grain-lorindol.png" Delete "$INSTDIR\themes\Tiny\gold-lorindol.png" Delete "$INSTDIR\themes\Tiny\desert-lorindol.png" Delete "$INSTDIR\themes\Tiny\brick-port.png" Delete "$INSTDIR\themes\Tiny\brick-lorindol.png" Delete "$INSTDIR\themes\Tiny\board.png" Delete "$INSTDIR\themes\Iceland\theme.cfg" Delete "$INSTDIR\themes\Iceland\sea.png" Delete "$INSTDIR\themes\Iceland\pasture_wool.png" Delete "$INSTDIR\themes\Iceland\mountain_ore.png" Delete "$INSTDIR\themes\Iceland\hill_brick.png" Delete "$INSTDIR\themes\Iceland\gold.png" Delete "$INSTDIR\themes\Iceland\forest_lumber.png" Delete "$INSTDIR\themes\Iceland\field_grain.png" Delete "$INSTDIR\themes\Iceland\desert.png" Delete "$INSTDIR\themes\Iceland\board.png" Delete "$INSTDIR\themes\FreeCIV-like\theme.cfg" Delete "$INSTDIR\themes\FreeCIV-like\sea.png" Delete "$INSTDIR\themes\FreeCIV-like\pasture.png" Delete "$INSTDIR\themes\FreeCIV-like\mountain.png" Delete "$INSTDIR\themes\FreeCIV-like\hill.png" Delete "$INSTDIR\themes\FreeCIV-like\gold.png" Delete "$INSTDIR\themes\FreeCIV-like\forest.png" Delete "$INSTDIR\themes\FreeCIV-like\field.png" Delete "$INSTDIR\themes\FreeCIV-like\desert.png" Delete "$INSTDIR\themes\FreeCIV-like\board.png" Delete "$INSTDIR\themes\Classic\theme.cfg" Delete "$INSTDIR\themes\Classic\sea.png" Delete "$INSTDIR\themes\Classic\pasture.png" Delete "$INSTDIR\themes\Classic\mountain.png" Delete "$INSTDIR\themes\Classic\hill.png" Delete "$INSTDIR\themes\Classic\gold.png" Delete "$INSTDIR\themes\Classic\forest.png" Delete "$INSTDIR\themes\Classic\field.png" Delete "$INSTDIR\themes\Classic\desert.png" Delete "$INSTDIR\themes\Classic\board.png" Delete "$INSTDIR\themes\ccFlickr\wool.png" Delete "$INSTDIR\themes\ccFlickr\theme.cfg" Delete "$INSTDIR\themes\ccFlickr\sea.png" Delete "$INSTDIR\themes\ccFlickr\port-wool.png" Delete "$INSTDIR\themes\ccFlickr\port-ore.png" Delete "$INSTDIR\themes\ccFlickr\port-lumber.png" Delete "$INSTDIR\themes\ccFlickr\port-grain.png" Delete "$INSTDIR\themes\ccFlickr\port-gold.png" Delete "$INSTDIR\themes\ccFlickr\port-brick.png" Delete "$INSTDIR\themes\ccFlickr\ore.png" Delete "$INSTDIR\themes\ccFlickr\lumber.png" Delete "$INSTDIR\themes\ccFlickr\grain.png" Delete "$INSTDIR\themes\ccFlickr\gold.png" Delete "$INSTDIR\themes\ccFlickr\desert.png" Delete "$INSTDIR\themes\ccFlickr\brick.png" Delete "$INSTDIR\themes\ccFlickr\board.png" Delete "$INSTDIR\themes\ccFlickr\ATTRIB" Delete "$INSTDIR\pixmaps\pioneers\style-human-7.png" Delete "$INSTDIR\pixmaps\pioneers\style-human-6.png" Delete "$INSTDIR\pixmaps\pioneers\style-human-5.png" Delete "$INSTDIR\pixmaps\pioneers\style-human-4.png" Delete "$INSTDIR\pixmaps\pioneers\style-human-3.png" Delete "$INSTDIR\pixmaps\pioneers\style-human-2.png" Delete "$INSTDIR\pixmaps\pioneers\style-human-1.png" Delete "$INSTDIR\pixmaps\pioneers\style-human.png" Delete "$INSTDIR\pixmaps\pioneers\style-ai.png" Delete "$INSTDIR\pixmaps\pioneers\brick.png" Delete "$INSTDIR\pixmaps\pioneers\grain.png" Delete "$INSTDIR\pixmaps\pioneers\ore.png" Delete "$INSTDIR\pixmaps\pioneers\wool.png" Delete "$INSTDIR\pixmaps\pioneers\lumber.png" Delete "$INSTDIR\pixmaps\pioneers\trade.svg" Delete "$INSTDIR\pixmaps\pioneers\splash.png" Delete "$INSTDIR\pixmaps\pioneers\ship_move.svg" Delete "$INSTDIR\pixmaps\pioneers\ship.svg" Delete "$INSTDIR\pixmaps\pioneers\settlement.svg" Delete "$INSTDIR\pixmaps\pioneers\road.svg" Delete "$INSTDIR\pixmaps\pioneers\finish.svg" Delete "$INSTDIR\pixmaps\pioneers\dice.svg" Delete "$INSTDIR\pixmaps\pioneers\develop.svg" Delete "$INSTDIR\pixmaps\pioneers\city_wall.svg" Delete "$INSTDIR\pixmaps\pioneers\city.svg" Delete "$INSTDIR\pixmaps\pioneers\bridge.svg" ; Delete "$INSTDIR\man\man6\pioneersai.6" ; Delete "$INSTDIR\man\man6\pioneers.6" ; Delete "$INSTDIR\man\man6\pioneers-server-gtk.6" ; Delete "$INSTDIR\man\man6\pioneers-server-console.6" ; Delete "$INSTDIR\man\man6\pioneers-meta-server.6" Delete "$INSTDIR\locale\sv\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\pt\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\nl\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\ja\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\it\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\hu\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\gl\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\fr\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\es\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\en_GB\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\de\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\da\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\cs\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\locale\af\LC_MESSAGES\pioneers.mo" Delete "$INSTDIR\games\pioneers\x.game" Delete "$INSTDIR\games\pioneers\ubuntuland.game" Delete "$INSTDIR\games\pioneers\star.game" Delete "$INSTDIR\games\pioneers\square.game" Delete "$INSTDIR\games\pioneers\south_africa.game" Delete "$INSTDIR\games\pioneers\small.game" Delete "$INSTDIR\games\pioneers\seafarers.game" Delete "$INSTDIR\games\pioneers\seafarers-gold.game" Delete "$INSTDIR\games\pioneers\pond.game" Delete "$INSTDIR\games\pioneers\north_america.game" Delete "$INSTDIR\games\pioneers\Mini_another_swimming_pool_in_the_wall.game" Delete "$INSTDIR\games\pioneers\lorindol.game" Delete "$INSTDIR\games\pioneers\iles.game" Delete "$INSTDIR\games\pioneers\henjes.game" Delete "$INSTDIR\games\pioneers\GuerreDe100ans.game" Delete "$INSTDIR\games\pioneers\four-islands.game" Delete "$INSTDIR\games\pioneers\Evil_square.game" Delete "$INSTDIR\games\pioneers\default.game" Delete "$INSTDIR\games\pioneers\Cube.game" Delete "$INSTDIR\games\pioneers\crane_island.game" Delete "$INSTDIR\games\pioneers\conquest.game" Delete "$INSTDIR\games\pioneers\conquest+ports.game" Delete "$INSTDIR\games\pioneers\computer_names" Delete "$INSTDIR\games\pioneers\coeur.game" Delete "$INSTDIR\games\pioneers\canyon.game" Delete "$INSTDIR\games\pioneers\archipel_gold.game" Delete "$INSTDIR\games\pioneers\Another_swimming_pool_in_the_wall.game" Delete "$INSTDIR\games\pioneers\5-6-player.game" Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" Delete "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" Delete "$DESKTOP\Pioneers.lnk" Delete "$DESKTOP\Pioneers Editor.lnk" Delete "$SMPROGRAMS\$ICONS_GROUP\Pioneers.lnk" Delete "$SMPROGRAMS\$ICONS_GROUP\Pioneers Editor.lnk" RMDir "$SMPROGRAMS\$ICONS_GROUP" RMDir "$INSTDIR\themes\Wesnoth-like" RMDir "$INSTDIR\themes\Tiny" RMDir "$INSTDIR\themes\Iceland" RMDir "$INSTDIR\themes\FreeCIV-like" RMDir "$INSTDIR\themes\Classic" RMDir "$INSTDIR\themes\ccFlickr" RMDir "$INSTDIR\themes" RMDir "$INSTDIR\pixmaps\pioneers" RMDir "$INSTDIR\pixmaps" RMDir "$INSTDIR\locale\sv\LC_MESSAGES" RMDir "$INSTDIR\locale\sv" RMDir "$INSTDIR\locale\pt\LC_MESSAGES" RMDir "$INSTDIR\locale\pt" RMDir "$INSTDIR\locale\nl\LC_MESSAGES" RMDir "$INSTDIR\locale\nl" RMDir "$INSTDIR\locale\ja\LC_MESSAGES" RMDir "$INSTDIR\locale\ja" RMDir "$INSTDIR\locale\it\LC_MESSAGES" RMDir "$INSTDIR\locale\it" RMDir "$INSTDIR\locale\hu\LC_MESSAGES" RMDir "$INSTDIR\locale\hu" RMDir "$INSTDIR\locale\gl\LC_MESSAGES" RMDir "$INSTDIR\locale\gl" RMDir "$INSTDIR\locale\fr\LC_MESSAGES" RMDir "$INSTDIR\locale\fr" RMDir "$INSTDIR\locale\es\LC_MESSAGES" RMDir "$INSTDIR\locale\es" RMDir "$INSTDIR\locale\en_GB\LC_MESSAGES" RMDir "$INSTDIR\locale\en_GB" RMDir "$INSTDIR\locale\de\LC_MESSAGES" RMDir "$INSTDIR\locale\de" RMDir "$INSTDIR\locale\da\LC_MESSAGES" RMDir "$INSTDIR\locale\da" RMDir "$INSTDIR\locale\cs\LC_MESSAGES" RMDir "$INSTDIR\locale\cs" RMDir "$INSTDIR\locale\af\LC_MESSAGES" RMDir "$INSTDIR\locale\af" RMDir "$INSTDIR\locale" RMDir "$INSTDIR\lib\gdk-pixbuf-2.0\2.10.0" RMDir "$INSTDIR\lib\gdk-pixbuf-2.0" RMDir "$INSTDIR\lib" RMDir "$INSTDIR\games\pioneers" RMDir "$INSTDIR\games" RMDir "$INSTDIR\games" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose true SectionEnd pioneers-14.1/MinGW/loaders.cache0000644000175000017500000000067511664746065013632 00000000000000# GdkPixbuf Image Loader Modules file # Automatically generated file, do not edit # Created by gdk-pixbuf-query-loaders.exe from gdk-pixbuf-2.24.0 # # LoaderDir = h:\MinGW/lib/gdk-pixbuf-2.0/2.10.0/loaders # "libpixbufloader-svg.dll" "svg" 2 "gdk-pixbuf" "Scalable Vector Graphics" "LGPL" "image/svg+xml" "image/svg" "image/svg-xml" "image/vnd.adobe.svg+xml" "text/xml-svg" "" "svg" "" " # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA icon_DATA += server/gtk/pioneers-server.png desktop_in_files += server/gtk/pioneers-server.desktop.in bin_PROGRAMS += pioneers-server-gtk icons += server/gtk/pioneers-server.svg pioneers_server_gtk_CPPFLAGS = $(gtk_cflags) $(avahi_cflags) -I $(srcdir)/server pioneers_server_gtk_LDADD = libpioneers_server.a $(gtk_libs) $(avahi_libs) pioneers_server_gtk_SOURCES = \ server/gtk/main.c if USE_WINDOWS_ICON pioneers_server_gtk_LDADD += server/gtk/pioneers-server.res CLEANFILES += server/gtk/pioneers-server.res endif windows_resources_output += server/gtk/pioneers-server.ico windows_resources_input += server/gtk/pioneers-server.rc pioneers-14.1/server/gtk/main.c0000644000175000017500000011015711746474234013410 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004-2007 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "version.h" #ifdef HAVE_LOCALE_H #include #endif #include #include #include #include "authors.h" #include "aboutbox.h" #include "game.h" #include "common_gtk.h" #include "config-gnome.h" #include "server.h" #include "select-game.h" /* Custom widget */ #include "game-settings.h" /* Custom widget */ #include "game-rules.h" #include "theme.h" #include "metaserver.h" /* Custom widget */ #include "avahi.h" #define MAINICON_FILE "pioneers-server.png" static GtkWidget *settings_notebook; /* relevant settings */ static GtkWidget *select_game; /* select game type */ static GtkWidget *game_settings; /* the settings of the game */ static GtkWidget *game_rules; /* the rules of the game */ static GtkWidget *meta_entry; /* name of meta server */ static GtkWidget *overridden_hostname_entry; /* name of server (allows masquerading) */ static GtkWidget *start_btn; /* start/stop the server */ static GtkListStore *store; /* shows player connection status */ static Game *game = NULL; /* the current game */ static gchar *overridden_hostname; /* override reported hostname */ static gchar *server_port = NULL; /* port of the game */ static gboolean register_server = TRUE; /* Register at the meta server */ static gboolean want_ai_chat = TRUE; static gboolean random_order = TRUE; /* random seating order */ static gboolean enable_debug = FALSE; static gboolean show_version = FALSE; /* Local function prototypes */ static void add_game_to_list(gpointer name, gpointer user_data); static void check_vp_cb(GObject * caller, gpointer main_window); static void quit_cb(void); static void help_about_cb(void); enum { PLAYER_COLUMN_CONNECTED, PLAYER_COLUMN_NAME, PLAYER_COLUMN_LOCATION, PLAYER_COLUMN_NUMBER, PLAYER_COLUMN_ISSPECTATOR, PLAYER_COLUMN_LAST }; /* Normal items */ static GtkActionEntry entries[] = { {"GameMenu", NULL, /* Menu entry */ N_("_Game"), NULL, NULL, NULL}, {"HelpMenu", NULL, /* Menu entry */ N_("_Help"), NULL, NULL, NULL}, {"GameCheckVP", GTK_STOCK_APPLY, /* Menu entry */ N_("_Check Victory Point Target"), NULL, /* Tooltop for Check Victory Point Target menu entry */ N_("Check whether the game can be won"), G_CALLBACK(check_vp_cb)}, {"GameQuit", GTK_STOCK_QUIT, /* Menu entry */ N_("_Quit"), "Q", /* Tooltop for Quit menu entry */ N_("Quit the program"), quit_cb}, {"HelpAbout", NULL, /* Menu entry */ N_("_About Pioneers Server"), NULL, /* Tooltop for About Pioneers Server menu entry */ N_("Information about Pioneers Server"), help_about_cb} }; /* *INDENT-OFF* */ static const char *ui_description = "" " " " " " " " " " " " " " " " " " " " " ""; /* *INDENT-ON* */ static void port_entry_changed_cb(GtkWidget * widget, G_GNUC_UNUSED gpointer user_data) { const gchar *text; text = gtk_entry_get_text(GTK_ENTRY(widget)); if (server_port) g_free(server_port); server_port = g_strstrip(g_strdup(text)); } static void register_toggle_cb(GtkToggleButton * toggle, G_GNUC_UNUSED gpointer user_data) { register_server = gtk_toggle_button_get_active(toggle); gtk_widget_set_sensitive(meta_entry, register_server); gtk_widget_set_sensitive(overridden_hostname_entry, register_server); } static void random_toggle_cb(GtkToggleButton * toggle, G_GNUC_UNUSED gpointer user_data) { random_order = gtk_toggle_button_get_active(toggle); } static void chat_toggle_cb(GtkToggleButton * toggle, G_GNUC_UNUSED gpointer user_data) { want_ai_chat = gtk_toggle_button_get_active(toggle); } /* The server does not need to respond to changed game settings directly * RC: Leaving this code here, for when the admin-interface will be built static void game_settings_change_cb(GameSettings *gs, G_GNUC_UNUSED gpointer user_data) { printf("Settings: %d %d %d %d\n", game_settings_get_terrain(gs), game_settings_get_players(gs), game_settings_get_victory_points(gs), game_settings_get_sevens_rule(gs) ); } */ static void update_game_settings(const GameParams * params) { g_return_if_fail(params != NULL); /* Update the UI */ game_settings_set_players(GAMESETTINGS(game_settings), params->num_players); game_settings_set_victory_points(GAMESETTINGS(game_settings), params->victory_points); game_rules_set_victory_at_end_of_turn(GAMERULES(game_rules), params-> check_victory_at_end_of_turn); game_rules_set_random_terrain(GAMERULES(game_rules), params->random_terrain); game_rules_set_sevens_rule(GAMERULES(game_rules), params->sevens_rule); game_rules_set_domestic_trade(GAMERULES(game_rules), params->domestic_trade); game_rules_set_strict_trade(GAMERULES(game_rules), params->strict_trade); game_rules_set_use_pirate(GAMERULES(game_rules), params->use_pirate, params->num_build_type[BUILD_SHIP]); game_rules_set_island_discovery_bonus(GAMERULES(game_rules), params->island_discovery_bonus); } static void game_activate(GtkWidget * widget, G_GNUC_UNUSED gpointer user_data) { const gchar *title; const GameParams *params; title = select_game_get_active(SELECTGAME(widget)); params = game_list_find_item(title); update_game_settings(params); } static void gui_set_server_state(gboolean running) { gtk_widget_set_sensitive(gtk_notebook_get_nth_page (GTK_NOTEBOOK(settings_notebook), 0), !running); if (running) gtk_widget_show(gtk_notebook_get_nth_page (GTK_NOTEBOOK(settings_notebook), 1)); else gtk_widget_hide(gtk_notebook_get_nth_page (GTK_NOTEBOOK(settings_notebook), 1)); gtk_notebook_set_current_page(GTK_NOTEBOOK(settings_notebook), running ? 1 : 0); gtk_button_set_label(GTK_BUTTON(start_btn), running ? _("Stop Server") : _("Start Server")); gtk_widget_set_tooltip_text(start_btn, running ? _("Stop the server") : _("Start the server")); } static void start_clicked_cb(G_GNUC_UNUSED GtkButton * widget, G_GNUC_UNUSED gpointer user_data) { if (server_is_running(game)) { server_stop(game); gui_set_server_state(server_is_running(game)); avahi_unregister_game(); } else { /* not running */ const gchar *title; GameParams *params; gchar *meta_server_name; title = select_game_get_active(SELECTGAME(select_game)); params = params_copy(game_list_find_item(title)); cfg_set_num_players(params, game_settings_get_players(GAMESETTINGS (game_settings))); cfg_set_victory_points(params, game_settings_get_victory_points (GAMESETTINGS(game_settings))); params->check_victory_at_end_of_turn = game_rules_get_victory_at_end_of_turn(GAMERULES (game_rules)); cfg_set_sevens_rule(params, game_rules_get_sevens_rule(GAMERULES (game_rules))); cfg_set_terrain_type(params, game_rules_get_random_terrain (GAMERULES(game_rules))); params->strict_trade = game_rules_get_strict_trade(GAMERULES(game_rules)); params->use_pirate = game_rules_get_use_pirate(GAMERULES(game_rules)); params->domestic_trade = game_rules_get_domestic_trade(GAMERULES(game_rules)); if (params->island_discovery_bonus) { g_array_free(params->island_discovery_bonus, TRUE); } params->island_discovery_bonus = game_rules_get_island_discovery_bonus(GAMERULES (game_rules)); update_game_settings(params); meta_server_name = metaserver_get(METASERVER(meta_entry)); g_assert(server_port != NULL); if (game != NULL) game_free(game); game = server_start(params, overridden_hostname, server_port, register_server, meta_server_name, random_order); if (server_is_running(game)) { avahi_register_game(game); gui_set_server_state(TRUE); config_set_string("server/meta-server", meta_server_name); config_set_string("server/port", server_port); config_set_int("server/register", register_server); config_set_string("server/overridden-hostname", overridden_hostname); config_set_int("server/random-seating-order", random_order); config_set_string("game/name", params->title); config_set_int("game/random-terrain", params->random_terrain); config_set_int("game/num-players", params->num_players); config_set_int("game/victory-points", params->victory_points); config_set_int("game/check-victory-at-end-of-turn", params-> check_victory_at_end_of_turn); config_set_int("game/sevens-rule", params->sevens_rule); config_set_int("game/use-pirate", params->use_pirate); config_set_int("game/strict-trade", params->strict_trade); config_set_int("game/domestic-trade", params->domestic_trade); } params_free(params); g_free(meta_server_name); } } static void launchclient_clicked_cb(G_GNUC_UNUSED GtkButton * widget, G_GNUC_UNUSED gpointer user_data) { gchar *child_argv[7]; GSpawnFlags child_flags = G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL; GError *error = NULL; gint i; g_assert(server_port != NULL); /* Populate argv. */ child_argv[0] = g_strdup(PIONEERS_CLIENT_GTK_PATH); child_argv[1] = g_strdup(PIONEERS_CLIENT_GTK_PATH); child_argv[2] = g_strdup("-s"); child_argv[3] = g_strdup("localhost"); child_argv[4] = g_strdup("-p"); child_argv[5] = g_strdup(server_port); child_argv[6] = NULL; /* Spawn the child. */ if (!g_spawn_async(NULL, child_argv, NULL, child_flags, NULL, NULL, NULL, &error)) { /* Error message when program %1 is started, reason is %2 */ log_message(MSG_ERROR, _("Error starting %s: %s\n"), PIONEERS_CLIENT_GTK_PATH, error->message); g_error_free(error); } /* Clean up after ourselves. */ for (i = 0; child_argv[i] != NULL; i++) { g_free(child_argv[i]); } } static void addcomputer_clicked_cb(G_GNUC_UNUSED GtkButton * widget, G_GNUC_UNUSED gpointer user_data) { g_assert(server_port != NULL); add_computer_player(game, want_ai_chat); config_set_int("ai/enable-chat", want_ai_chat); } static void gui_player_add(void *data_in) { Player *player = data_in; log_message(MSG_INFO, _("Player %s from %s entered\n"), player->name, player->location); } static void gui_player_remove(void *data) { Player *player = data; log_message(MSG_INFO, _("Player %s from %s left\n"), player->name, player->location); } static void gui_player_rename(void *data) { Player *player = data; log_message(MSG_INFO, _("Player %d is now %s\n"), player->num, player->name); } static gboolean everybody_left(G_GNUC_UNUSED gpointer data) { server_stop(game); gui_set_server_state(server_is_running(game)); return FALSE; } static void gui_player_change(void *data) { Game *game = data; GList *current; guint number_of_players = 0; gtk_list_store_clear(store); playerlist_inc_use_count(game); for (current = game->player_list; current != NULL; current = g_list_next(current)) { GtkTreeIter iter; Player *p = current->data; gboolean isSpectator; isSpectator = player_is_spectator(p->game, p->num); if (!isSpectator && !p->disconnected) number_of_players++; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, PLAYER_COLUMN_NAME, p->name, PLAYER_COLUMN_LOCATION, p->location, PLAYER_COLUMN_NUMBER, p->num, PLAYER_COLUMN_CONNECTED, !p->disconnected, PLAYER_COLUMN_ISSPECTATOR, isSpectator, -1); } playerlist_dec_use_count(game); if (number_of_players == 0 && game->is_game_over) { g_timeout_add(100, everybody_left, NULL); } } static void add_game_to_list(gpointer name, G_GNUC_UNUSED gpointer user_data) { GameParams *a = (GameParams *) name; select_game_add_with_map(SELECTGAME(select_game), a->title, a->map); } static void overridden_hostname_changed_cb(GtkEntry * widget, G_GNUC_UNUSED gpointer user_data) { const gchar *text; text = gtk_entry_get_text(widget); while (*text != '\0' && isspace(*text)) text++; if (overridden_hostname) g_free(overridden_hostname); overridden_hostname = g_strdup(text); } /** Builds the composite game settings frame widget. * @param main_window The top-level window. * @return Returns the composite widget. */ static GtkWidget *build_game_settings(GtkWindow * main_window) { GtkWidget *vbox; vbox = gtk_vbox_new(FALSE, 3); gtk_widget_show(vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 3); select_game = select_game_new(); gtk_widget_show(select_game); g_signal_connect(G_OBJECT(select_game), "activate", G_CALLBACK(game_activate), NULL); gtk_box_pack_start(GTK_BOX(vbox), select_game, FALSE, FALSE, 0); game_settings = game_settings_new(TRUE); gtk_widget_show(game_settings); gtk_box_pack_start(GTK_BOX(vbox), game_settings, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(game_settings), "check", G_CALLBACK(check_vp_cb), main_window); return vbox; } /** Builds the composite game rules frame widget. * @return Returns the composite widget. */ static GtkWidget *build_game_rules(void) { GtkWidget *vbox; vbox = gtk_vbox_new(FALSE, 3); gtk_widget_show(vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 3); game_rules = game_rules_new(); gtk_widget_show(game_rules); gtk_box_pack_start(GTK_BOX(vbox), game_rules, TRUE, TRUE, 0); return vbox; } /** Builds the composite server frame widget. * @return Returns the composite widget. */ static GtkWidget *build_server_frame(void) { /* table */ /* server port label */ /* - port entry */ /* register toggle */ /* meta server label */ /* - meta entry */ /* hostname label */ /* - hostname entry */ /* random toggle */ GtkWidget *table; GtkWidget *label; GtkWidget *toggle; GtkWidget *port_entry; gint novar; /* table */ table = gtk_table_new(6, 2, FALSE); gtk_widget_show(table); gtk_container_set_border_width(GTK_CONTAINER(table), 3); gtk_table_set_row_spacings(GTK_TABLE(table), 3); gtk_table_set_col_spacings(GTK_TABLE(table), 5); /* server port label */ label = gtk_label_new(_("Server port")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); /* port entry */ port_entry = gtk_entry_new(); g_signal_connect(G_OBJECT(port_entry), "changed", G_CALLBACK(port_entry_changed_cb), NULL); gtk_widget_show(port_entry); gtk_table_attach(GTK_TABLE(table), port_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_tooltip_text(port_entry, _("The port for the game server")); /* initialize server port */ server_port = config_get_string("server/port=" PIONEERS_DEFAULT_GAME_PORT, &novar); gtk_entry_set_text(GTK_ENTRY(port_entry), server_port); /* register_toggle */ toggle = gtk_check_button_new_with_label(_("Register server")); gtk_widget_show(toggle); gtk_table_attach(GTK_TABLE(table), toggle, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(register_toggle_cb), NULL); gtk_widget_set_tooltip_text(toggle, _("" "Register this game at the meta server")); register_server = config_get_int_with_default("server/register", TRUE); /* meta server label */ label = gtk_label_new(_("Meta server")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); /* meta entry */ meta_entry = metaserver_new(); gtk_widget_show(meta_entry); gtk_table_attach(GTK_TABLE(table), meta_entry, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_sensitive(meta_entry, register_server); /* initialize meta entry */ novar = 0; gchar *meta_server_name; meta_server_name = config_get_string("server/meta-server", &novar); if (novar || !strlen(meta_server_name) || !strncmp(meta_server_name, "gnocatan.debian.net", strlen(meta_server_name) + 1)) meta_server_name = get_meta_server_name(TRUE); metaserver_add(METASERVER(meta_entry), meta_server_name); g_free(meta_server_name); /* hostname label */ label = gtk_label_new(_("Reported hostname")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); /* hostname entry */ overridden_hostname_entry = gtk_entry_new(); g_signal_connect(G_OBJECT(overridden_hostname_entry), "changed", G_CALLBACK(overridden_hostname_changed_cb), NULL); gtk_widget_show(overridden_hostname_entry); gtk_table_attach(GTK_TABLE(table), overridden_hostname_entry, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_set_tooltip_text(overridden_hostname_entry, _("" "The public name of this computer " "(needed when playing behind a firewall)")); gtk_widget_set_sensitive(overridden_hostname_entry, register_server); /* initialize overridden hostname */ novar = 0; overridden_hostname = config_get_string("server/overridden-hostname", &novar); if (novar) overridden_hostname = g_strdup(""); gtk_entry_set_text(GTK_ENTRY(overridden_hostname_entry), overridden_hostname); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), register_server); /* random toggle */ toggle = gtk_check_button_new_with_label(_("Random turn order")); gtk_widget_show(toggle); gtk_table_attach(GTK_TABLE(table), toggle, 0, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(random_toggle_cb), NULL); gtk_widget_set_tooltip_text(toggle, _("Randomize turn order")); random_order = config_get_int_with_default("server/random-seating-order", TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), random_order); return table; } static void my_cell_player_spectator_to_text(G_GNUC_UNUSED GtkTreeViewColumn * tree_column, GtkCellRenderer * cell, GtkTreeModel * tree_model, GtkTreeIter * iter, gpointer data) { gboolean b; /* Get the value from the model. */ gtk_tree_model_get(tree_model, iter, GPOINTER_TO_INT(data), &b, -1); g_object_set(cell, "text", b ? /* Role of the player: spectator */ _("Spectator") : /* Role of the player: player */ _("Player"), NULL); } /** Builds the composite player tree view widget. * @return returns the composite widget. */ static GtkWidget *build_connected_tree_view(void) { /* scrolled window */ /* tree_view */ /* connected column */ /* name column */ /* location column */ /* number column */ /* role column */ GtkWidget *scroll_win; GtkWidget *tree_view; GtkCellRenderer *renderer; GtkTreeViewColumn *column; /* scroll_win */ scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scroll_win); gtk_container_set_border_width(GTK_CONTAINER(scroll_win), 3); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); /* tree_view */ /* Create model */ store = gtk_list_store_new(PLAYER_COLUMN_LAST, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN); /* Create graphical representation of the model */ tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); /* The theme should decide if hints are used */ /* gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree_view), TRUE); */ gtk_container_add(GTK_CONTAINER(scroll_win), tree_view); gtk_widget_set_tooltip_text(tree_view, /* Tooltip for server connection overview */ _("" "Shows all players and spectators connected to the server")); column = /* Label for column Connected */ gtk_tree_view_column_new_with_attributes(_("Connected"), gtk_cell_renderer_toggle_new (), "active", PLAYER_COLUMN_CONNECTED, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); /* Tooltip for column Connected */ set_tooltip_on_column(column, _("" "Is the player currently connected?")); column = /* Label for column Name */ gtk_tree_view_column_new_with_attributes(_("Name"), gtk_cell_renderer_text_new (), "text", PLAYER_COLUMN_NAME, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); /* Tooltip for column Name */ set_tooltip_on_column(column, _("Name of the player")); column = /* Label for column Location */ gtk_tree_view_column_new_with_attributes(_("Location"), gtk_cell_renderer_text_new (), "text", PLAYER_COLUMN_LOCATION, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); /* Tooltip for column Location */ set_tooltip_on_column(column, _("Host name of the player")); renderer = gtk_cell_renderer_text_new(); column = /* Label for column Number */ gtk_tree_view_column_new_with_attributes(_("Number"), renderer, "text", PLAYER_COLUMN_NUMBER, NULL); g_object_set(renderer, "xalign", 1.0f, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); /* Tooltip for column Number */ set_tooltip_on_column(column, _("Player number")); renderer = gtk_cell_renderer_text_new(); column = /* Label for column Role */ gtk_tree_view_column_new_with_attributes(_("Role"), renderer, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); /* Tooltip for column Role */ set_tooltip_on_column(column, _("Player or spectator")); gtk_tree_view_column_set_cell_data_func(column, renderer, my_cell_player_spectator_to_text, GINT_TO_POINTER (PLAYER_COLUMN_ISSPECTATOR), NULL); gtk_widget_show(tree_view); return scroll_win; } /** Builds the composite player frame widget. * @return returns the composite widget. */ static GtkWidget *build_player_connected_frame(void) { /* vbox */ /* connected tree_view */ /* launch client button */ GtkWidget *vbox; GtkWidget *button; /* vbox */ vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); /* connected tree_view */ gtk_box_pack_start(GTK_BOX(vbox), build_connected_tree_view(), TRUE, TRUE, 0); /* launch client button */ button = gtk_button_new_with_label( /* Button text */ _("" "Launch Pioneers Client")); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(launchclient_clicked_cb), NULL); gtk_widget_set_tooltip_text(button, /* Tooltip */ _("Launch the Pioneers client")); return vbox; } /** Builds the composite ai frame widget. * @return returns the composite widget. */ static GtkWidget *build_ai_frame(void) { /* ai vbox */ /* ai chat toggle */ /* add ai button */ GtkWidget *vbox; GtkWidget *toggle; GtkWidget *button; gchar *fullname; gboolean ai_settings_enabled = TRUE; /* ai vbox */ vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); fullname = g_find_program_in_path(PIONEERS_AI_PATH); if (fullname) { g_free(fullname); } else { ai_settings_enabled = FALSE; } gtk_widget_set_sensitive(vbox, ai_settings_enabled); /* ai chat toggle */ toggle = gtk_check_button_new_with_label(_("Enable chat")); gtk_widget_show(toggle); gtk_box_pack_start(GTK_BOX(vbox), toggle, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(toggle), "toggled", G_CALLBACK(chat_toggle_cb), NULL); gtk_widget_set_tooltip_text(toggle, /* Tooltip */ _("Enable chat messages")); want_ai_chat = config_get_int_with_default("ai/enable-chat", TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), want_ai_chat); /* add ai button */ button = gtk_button_new_with_label( /* Button text */ _("" "Add Computer Player")); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(addcomputer_clicked_cb), NULL); gtk_widget_set_tooltip_text(button, /* Tooltip */ _("" "Add a computer player to the game")); return vbox; } /** Builds the composite message frame widget. * @return returns the composite widget. */ static GtkWidget *build_message_frame(void) { /* scrolled window */ /* text view */ GtkWidget *scroll_win; GtkWidget *message_text; /* scrolled window */ scroll_win = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scroll_win); gtk_container_set_border_width(GTK_CONTAINER(scroll_win), 3); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); /* text view */ message_text = gtk_text_view_new(); gtk_widget_show(message_text); gtk_container_add(GTK_CONTAINER(scroll_win), message_text); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(message_text), GTK_WRAP_WORD); gtk_widget_set_tooltip_text(message_text, /* Tooltip */ _("Messages from the server")); message_window_set_text(message_text); return scroll_win; } /** Builds the composite interface widget. * @param main_window The top-level window. * @return returns the composite widget. */ static GtkWidget *build_interface(GtkWindow * main_window) { GtkWidget *vbox; GtkWidget *hbox_settings; GtkWidget *vbox_settings; GtkWidget *stop_game_button_on_tab; GtkWidget *label_with_close_button; /* vbox */ vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); /* settings_notebook */ settings_notebook = gtk_notebook_new(); gtk_widget_show(settings_notebook); gtk_notebook_set_show_border(GTK_NOTEBOOK(settings_notebook), FALSE); gtk_box_pack_start(GTK_BOX(vbox), settings_notebook, FALSE, TRUE, 0); /* settings tab hbox */ hbox_settings = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox_settings); gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), hbox_settings, gtk_label_new(_("Game settings"))); /* left part in settings tab */ vbox_settings = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox_settings); /* Game settings frame */ build_frame(vbox_settings, _("Game parameters"), build_game_settings(main_window), FALSE); /* server frame */ build_frame(vbox_settings, _("Server parameters"), build_server_frame(), FALSE); gtk_box_pack_start(GTK_BOX(hbox_settings), vbox_settings, FALSE, FALSE, 0); /* right part in settings tab */ vbox_settings = gtk_vbox_new(FALSE, 5); gtk_widget_show(vbox_settings); /* Rules frame */ build_frame(vbox_settings, _("Rules"), build_game_rules(), FALSE); gtk_box_pack_start(GTK_BOX(hbox_settings), vbox_settings, TRUE, TRUE, 0); /* game tab label */ label_with_close_button = create_label_with_close_button( /* Tab name */ _ ("" "Running game"), /* Tab tooltip */ _ ("" "Stop the server"), &stop_game_button_on_tab); g_signal_connect(G_OBJECT(stop_game_button_on_tab), "clicked", G_CALLBACK(start_clicked_cb), NULL); /* game tab vbox */ vbox_settings = gtk_vbox_new(FALSE, 5); gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), vbox_settings, label_with_close_button); /* player connected frame */ build_frame(vbox_settings, _("Players connected"), build_player_connected_frame(), TRUE); /* ai frame */ build_frame(vbox_settings, _("Computer players"), build_ai_frame(), FALSE); /* start button */ start_btn = gtk_button_new(); gtk_widget_show(start_btn); gtk_box_pack_start(GTK_BOX(vbox), start_btn, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(start_btn), "clicked", G_CALLBACK(start_clicked_cb), NULL); /* message frame */ build_frame(vbox, _("Messages"), build_message_frame(), TRUE); gui_set_server_state(FALSE); return vbox; } /** Sets the widgets in the interface to the options that were saved in the * registry the last time a game was started. */ static void load_last_game_params(void) { /* Fill the GUI with the saved settings */ gchar *gamename; gint temp; gboolean default_returned; GameParams *params; gamename = config_get_string("game/name=Default", &default_returned); params = cfg_set_game(gamename); if (params == NULL) params = cfg_set_game("Default"); select_game_set_default(SELECTGAME(select_game), gamename); game_list_foreach(add_game_to_list, NULL); g_free(gamename); /* If a setting is not found, don't override the settings that came * with the game */ g_assert(params != NULL); temp = config_get_int("game/random-terrain", &default_returned); if (!default_returned) cfg_set_terrain_type(params, temp); temp = config_get_int("game/num-players", &default_returned); if (!default_returned) cfg_set_num_players(params, temp); temp = config_get_int("game/victory-points", &default_returned); if (!default_returned) cfg_set_victory_points(params, temp); temp = config_get_int("game/victory-at-end-of-turn", &default_returned); if (!default_returned) params->check_victory_at_end_of_turn = temp; temp = config_get_int("game/sevens-rule", &default_returned); if (!default_returned) cfg_set_sevens_rule(params, temp); temp = config_get_int("game/use-pirate", &default_returned); if (!default_returned) params->use_pirate = temp; temp = config_get_int("game/strict-trade", &default_returned); if (!default_returned) params->strict_trade = temp; temp = config_get_int("game/domestic-trade", &default_returned); if (!default_returned) params->domestic_trade = temp; update_game_settings(params); params_free(params); } static void check_vp_cb(G_GNUC_UNUSED GObject * caller, gpointer main_window) { const gchar *title; GameParams *params; title = select_game_get_active(SELECTGAME(select_game)); params = params_copy(game_list_find_item(title)); cfg_set_num_players(params, game_settings_get_players(GAMESETTINGS (game_settings))); cfg_set_victory_points(params, game_settings_get_victory_points (GAMESETTINGS(game_settings))); params->check_victory_at_end_of_turn = game_rules_get_victory_at_end_of_turn(GAMERULES(game_rules)); cfg_set_sevens_rule(params, game_rules_get_sevens_rule(GAMERULES (game_rules))); cfg_set_terrain_type(params, game_rules_get_random_terrain(GAMERULES (game_rules))); params->strict_trade = game_rules_get_strict_trade(GAMERULES(game_rules)); params->use_pirate = game_rules_get_use_pirate(GAMERULES(game_rules)); params->domestic_trade = game_rules_get_domestic_trade(GAMERULES(game_rules)); if (params->island_discovery_bonus) { g_array_free(params->island_discovery_bonus, TRUE); } params->island_discovery_bonus = game_rules_get_island_discovery_bonus(GAMERULES(game_rules)); update_game_settings(params); check_victory_points(params, main_window); } static void quit_cb(void) { gtk_main_quit(); avahi_unregister_game(); } static void help_about_cb(void) { const gchar *authors[] = { AUTHORLIST }; /* Dialog caption of about box */ aboutbox_display(_("The Pioneers Game Server"), authors); } void game_is_over(G_GNUC_UNUSED Game * game) { /* Wait for all players to disconnect, * then enable the UI */ log_message(MSG_INFO, _("The game is over.\n")); } void request_server_stop(Game * game) { server_stop(game); gui_set_server_state(server_is_running(game)); } static GOptionEntry commandline_entries[] = { {"debug", '\0', 0, G_OPTION_ARG_NONE, &enable_debug, /* Commandline option of server-gtk: enable debug logging */ N_("Enable debug messages"), NULL}, {"version", '\0', 0, G_OPTION_ARG_NONE, &show_version, /* Commandline option of server-gtk: version */ N_("Show version information"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; int main(int argc, char *argv[]) { gchar *icon_file; GtkWidget *window; GtkWidget *vbox; GtkWidget *menubar; GtkActionGroup *action_group; GtkUIManager *ui_manager; GtkAccelGroup *accel_group; GError *error = NULL; GOptionContext *context; net_init(); /* set the UI driver to GTK_Driver, since we're using gtk */ set_ui_driver(>K_Driver); /* flush out the rest of the driver with the server callbacks */ driver->player_added = gui_player_add; driver->player_renamed = gui_player_rename; driver->player_removed = gui_player_remove; driver->player_change = gui_player_change; /* Initialize frontend inspecific things */ server_init(); #ifdef ENABLE_NLS setlocale(LC_ALL, ""); /* Gtk+ handles the locale, we must bind the translations */ bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); bind_textdomain_codeset(PACKAGE, "UTF-8"); #endif /* Long description in the commandline for server-gtk: help */ context = g_option_context_new(_("- Host a game of Pioneers")); g_option_context_add_main_entries(context, commandline_entries, PACKAGE); g_option_context_add_group(context, gtk_get_option_group(TRUE)); g_option_context_parse(context, &argc, &argv, &error); if (error != NULL) { g_print("%s\n", error->message); g_error_free(error); return 1; } if (show_version) { g_print(_("Pioneers version:")); g_print(" "); g_print(FULL_VERSION); g_print("\n"); return 0; } set_enable_debug(enable_debug); prepare_gtk_for_close_button_on_tab(); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Name in the titlebar of the server */ gtk_window_set_title(GTK_WINDOW(window), _("Pioneers Server")); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); action_group = gtk_action_group_new("MenuActions"); gtk_action_group_set_translation_domain(action_group, PACKAGE); gtk_action_group_add_actions(action_group, entries, G_N_ELEMENTS(entries), window); ui_manager = gtk_ui_manager_new(); gtk_ui_manager_insert_action_group(ui_manager, action_group, 0); accel_group = gtk_ui_manager_get_accel_group(ui_manager); gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); error = NULL; if (!gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, &error)) { /* Error message */ g_message(_("Building menus failed: %s"), error->message); g_error_free(error); return 1; } config_init("pioneers-server"); themes_init(); game_list_prepare(); icon_file = g_build_filename(DATADIR, "pixmaps", MAINICON_FILE, NULL); if (g_file_test(icon_file, G_FILE_TEST_EXISTS)) { gtk_window_set_default_icon_from_file(icon_file, NULL); } else { g_warning("Pixmap not found: %s", icon_file); } g_free(icon_file); menubar = gtk_ui_manager_get_widget(ui_manager, "/MainMenu"); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), build_interface(GTK_WINDOW(window)), TRUE, TRUE, 0); load_last_game_params(); gtk_widget_show_all(window); gui_set_server_state(FALSE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(quit_cb), NULL); /* in theory, all windows are created now... * set logging to message window */ log_set_func_message_window(); gtk_main(); config_finish(); net_finish(); g_option_context_free(context); game_list_cleanup(); themes_cleanup(); return 0; } pioneers-14.1/server/gtk/pioneers-server.desktop.in0000644000175000017500000000030611711560445017432 00000000000000[Desktop Entry] Version=1.0 _Name=Pioneers Server _Comment=Host a game of Pioneers Exec=pioneers-server-gtk Icon=pioneers-server Terminal=false Type=Application Categories=Game;BoardGame;GNOME;GTK; pioneers-14.1/server/gtk/pioneers-server.png0000644000175000017500000001052511760646030016143 00000000000000PNG  IHDR00WbKGD IDAThypy?:VZ7+!q0ACb L)mh;Lkӌ'u$r1xslT@( KBjձ׻ox/Kyfy}}<5_>[Q&{Gm`|xsb.x_'-Pf:E_VX8H ǁ_!*A1hπ<wY&=W_'@UUn7tvvƁp7 !^b=H@ pa3)^t J[[ X,TU%LL&xC05Rlǡ7 OMw@zzz?iBCTCK\ = G&`3G7mo~~xeeN| 058C!&'29|++ihX($ITUd2H$fhh'NppA=z t EIL# "5ă:^bZJ֬32}m;P<k/Qx<ATU| pB?dEDb)Odc:mm\ @^Q6c^J qbh".0us!##cdddJ BQհ~F<;_ 3i(ãTn;/esO1*,#I6@ ]PR;-J4]q',#H%x+0;Rf 4 !2(b2| p,XA8} )|=B9~z:w 7]a}ELjygLMSO3|n E@ORNl#6sw<}n%W8I, @a2L1M$Q59,馔nbH$4 ˅ȽC) J!Έ/]m )a  [KjfIjz_hF<GV+~C44E *X/ss9Ly:dtz\,R(c-8DVePUD"A"l6 'q{M2LH$.\C(Y5HQȳ$Ǻ:>~д1ϋ}o볩t|$Il6ҏF7@_Ƞ,]e ;w.Vʞ7a۫oq|_Ѥp, 5LG%ˣ99b/=kR|[9.qQ0*}}g~F4X=4v~ȇ%#@Cnn.$ۿ{_(iq`(\=-ߘ rrfܹsATuio[$)Nif}UFb1U]]֭cݺu8Yd2bø#(,L#pFF}vN<9Ie1 A/^h!71;w}}=[la4EQl6qFrrr裏hmm5Z[ntj*֬YCQQH{{;d҈E8b г\.o&ݚy}uX豴4~_ /C$$( /NիWzjϟ(x^8s ;w… qdYٳHkF8pi&"~TEQԩSٳEQhiiw%7< #ƭ[aE!2>>N4aܞ={غu+444P__Ovvvv獺zX,+>sQdY&HQjebH8 (Xlqyyy$ Pt-axvÇٱcdbɒ%x^$H 2gӧFQPI 3gv;r&0t8v4MbX% ` ټy3O?4\r~^/󩫫 t:g:$IF$p8 @Z̧R*k#L6\~xmKId(8@KK P,Wd<h:i t{Ꚕδ/sY򨨨%cǎzZ)dee!"A?nhFeɤqezbmdu-6[1B3g Տ.)|{Ȳ$ pNvQiH5"++>|d2$6 Ihnn&fz, 849849 pioneers-14.1/server/gtk/pioneers-server.rc0000644000175000017500000000006410503067130015750 000000000000001 ICON DISCARDABLE "server/gtk/pioneers-server.ico" pioneers-14.1/server/gtk/pioneers-server.ico0000644000175000017500000001635611760646031016142 00000000000000006 h(0` 92Mq`_&/Uz y0I.ihh5EX|ZS[|.>3gOH@}}}xxyyywwwOAA H 322YTR [[[[v{p[LQ y CCCgeddh &Ks}{y+>Zq}x_btgpeWUSMwrr7-RSZ 4kP U@?@~ @>>poo[BB>12QQg7jhxc`*2^LIK~~~A3j(800^xxxI>>vvv&ttt_IGRMNs|Kllla4= !0[XJDqUP 0d`^fWViNO.&0:gv,,,j\_](((;88&&&$$$IxeJH>z+D>spskAY{ $ywqyv2Hqy^Zuv㛛Ӫ=|yucaa^cvzHKgh<@qwaaaaa`TQj1Eգ_hdK%}laaaaaaaaMTpwR"=_ucaaaaaaaZOZuw݀i)dVS<Kh]ezjaaaaaaa^McvHR2PLPߍhghSpaaaaaaa`TvFGPSh]YGo !ρyjaaaaaa^MOv"bABGISVV_!!)-aaaZMOv9BCIJG߄!#!##%=aa^TOv9;CDJPdt###%%%caa^MOvt9;>Dȿbge&%!ZQOv9>LȽh%4===4#ho Ov94ii˂==.i{{.)OvID_&= Ovqe#=#)iiWIFpOv d=x↉/ſFFFF/pOvH1ӃtY]_b䄡 FFFFFo)qjOvHRE|)<]_bd||FFuOOvR2СJLPbdg<}cNQjvEП潿JLPSUf7dgh}pT^zժABCLܧ???dghߊ4l^Opyk9ABCDY+??$gh֬&uTlw99Bܧ??ʞ+hx{pNv99ŧ6ďt2l^zP۔'-M*sNvjpvC6'ݛ Ĝ풒+hk77REHHHHsecfb`666444222~~r,,,+/17R0AJJ;Y3+XMXllbو"#BÿY'QX$&C?WΏٝY>8Q^0e?'% ÿY2>v%ee.݇#<65<=Y\)\0{#eiQفb55YOq~i@IQkkjȿ=>(i4@57,bkg:a6/15$HR{W?++/ɬsԣ 3:/oqƜ y{*aֱpVVms,tr HRi[NÿԭKQR[[.˯q__KK Z 4[W+}_xS &[rnTX^[GG_xSrNhRZf![}ErN ,RL|[tzNh"wLu[Ļys""Uf8 #d|^-tWu!C荛x~?( ha`y~bWJJL^ZZBp L}}}Dyyywww\DDooo&Z%mmm8Tccctqq]]][[[O_cYYY>WWWUUUSSS?^+<ux#,BCB@9!SNZADp;Yw(.2o)))]229WUSfKIOEA9Hm2<\(LvXj]fDC" :[SL001:[(2Ka) '+/cu\TQuib-|||vvv_pppnnnfffdc`c\\\NXXX;b*VVV$EmpTTT(Nx{{|"I/xv,U0Fqqrc\]$&'B444222|}zl%.%((({dBEFV TPd84 0~}v(D]&$;[M+F(ShQbA>[Q&{Gm`|xsb.x_'-Pf:E_VX8H ǁ_!*A1hπ<wY&=W_'@UUn7tvvƁp7 !^b=H@ pa3)^t J[[ X,TU%LL&xC05Rlǡ7 OMw@zzz?iBCTCK\ = G&`3G7mo~~xeeN| 058C!&'29|++ihX($ITUd2H$fhh'NppA=z t EIL# "5ă:^bZJ֬32}m;P<k/Qx<ATU| pB?dEDb)Odc:mm\ @^Q6c^J qbh".0us!##cdddJ BQհ~F<;_ 3i(ãTn;/esO1*,#I6@ ]PR;-J4]q',#H%x+0;Rf 4 !2(b2| p,XA8} )|=B9~z:w 7]a}ELjygLMSO3|n E@ORNl#6sw<}n%W8I, @a2L1M$Q59,馔nbH$4 ˅ȽC) J!Έ/]m )a  [KjfIjz_hF<GV+~C44E *X/ss9Ly:dtz\,R(c-8DVePUD"A"l6 'q{M2LH$.\C(Y5HQȳ$Ǻ:>~д1ϋ}o볩t|$Il6ҏF7@_Ƞ,]e ;w.Vʞ7a۫oq|_Ѥp, 5LG%ˣ99b/=kR|[9.qQ0*}}g~F4X=4v~ȇ%#@Cnn.$ۿ{_(iq`(\=-ߘ rrfܹsATuio[$)Nif}UFb1U]]֭cݺu8Yd2bø#(,L#pFF}vN<9Ie1 A/^h!71;w}}=[la4EQl6qFrrr裏hmm5Z[ntj*֬YCQQH{{;d҈E8b г\.o&ݚy}uX豴4~_ /C$$( /NիWzjϟ(x^8s ;w… qdYٳHkF8pi&"~TEQԩSٳEQhiiw%7< #ƭ[aE!2>>N4aܞ={غu+444P__Ovvvv獺zX,+>sQdY&HQjebH8 (Xlqyyy$ Pt-axvÇٱcdbɒ%x^$H 2gӧFQPI 3gv;r&0t8v4MbX% ` ټy3O?4\r~^/󩫫 t:g:$IF$p8 @Z̧R*k#L6\~xmKId(8@KK P,Wd<h:i t{Ꚕδ/sY򨨨%cǎzZ)dee!"A?nhFeɤqezbmdu-6[1B3g Տ.)|{Ȳ$ pNvQiH5"++>|d2$6 Ihnn&fz, # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if BUILD_SERVER if HAVE_GNOME include server/gtk/Makefile.am endif bin_PROGRAMS += pioneers-server-console noinst_LIBRARIES += libpioneers_server.a pioneers_server_console_CPPFLAGS = $(console_cflags) libpioneers_server_a_CPPFLAGS = $(console_cflags) $(avahi_cflags) libpioneers_server_a_SOURCES = \ server/admin.c \ server/admin.h \ server/avahi.c \ server/avahi.h \ server/buildutil.c \ server/develop.c \ server/discard.c \ server/gold.c \ server/meta.c \ server/player.c \ server/pregame.c \ server/resource.c \ server/robber.c \ server/server.c \ server/server.h \ server/trade.c \ server/turn.c pioneers_server_console_SOURCES = \ server/main.c \ server/glib-driver.c \ server/glib-driver.h pioneers_server_console_LDADD = libpioneers_server.a $(console_libs) $(avahi_libs) endif # BUILD_SERVER config_DATA += \ server/default.game \ server/5-6-player.game \ server/four-islands.game \ server/seafarers.game \ server/seafarers-gold.game \ server/small.game \ server/archipel_gold.game \ server/canyon.game \ server/coeur.game \ server/conquest.game \ server/conquest+ports.game \ server/crane_island.game \ server/iles.game \ server/pond.game \ server/square.game \ server/star.game \ server/x.game \ server/Cube.game \ server/Another_swimming_pool_in_the_wall.game \ server/Evil_square.game \ server/GuerreDe100ans.game \ server/Mini_another_swimming_pool_in_the_wall.game \ server/henjes.game \ server/lorindol.game \ server/lobby.game \ server/south_africa.game \ server/ubuntuland.game \ server/north_america.game pioneers-14.1/server/admin.c0000644000175000017500000002441511736612124012757 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * Copyright (C) 2007 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Pioneers Console Server Adminstrator interface * * The strings in the admin interface are intentionally not translated. * They would otherwise reflect the language of the server that is * running the server, instead of the language of the connecting user. */ #include "config.h" #include #include #include "admin.h" #include "game.h" #include "server.h" /* network administration functions */ comm_info *_accept_info = NULL; gint admin_dice_roll = 0; typedef enum { BADCOMMAND, SETPORT, STARTSERVER, STOPSERVER, REGISTERSERVER, NUMPLAYERS, SEVENSRULE, VICTORYPOINTS, RANDOMTERRAIN, SETGAME, QUIT, MESSAGE, HELP, INFO, FIXDICE } AdminCommandType; typedef struct { AdminCommandType type; const gchar *command; gboolean need_argument; gboolean stop_server; gboolean need_gameparam; } AdminCommand; /* *INDENT-OFF* */ static AdminCommand admin_commands[] = { { BADCOMMAND, "", FALSE, FALSE, FALSE }, { SETPORT, "set-port", TRUE, TRUE, TRUE }, { STARTSERVER, "start-server", FALSE, TRUE, TRUE }, { STOPSERVER, "stop-server", FALSE, TRUE, FALSE }, { REGISTERSERVER, "set-register-server", TRUE, TRUE, FALSE }, { NUMPLAYERS, "set-num-players", TRUE, TRUE, TRUE }, { SEVENSRULE, "set-sevens-rule", TRUE, TRUE, TRUE }, { VICTORYPOINTS, "set-victory-points", TRUE, TRUE, TRUE }, { RANDOMTERRAIN, "set-random-terrain", TRUE, TRUE, TRUE }, { SETGAME, "set-game", TRUE, TRUE, FALSE }, { QUIT, "quit", FALSE, FALSE, FALSE }, { MESSAGE, "send-message", TRUE, FALSE, TRUE }, { HELP, "help", FALSE, FALSE, FALSE }, { INFO, "info", FALSE, FALSE, FALSE }, { FIXDICE, "fix-dice", TRUE, FALSE, FALSE }, }; /* *INDENT-ON* */ /* parse 'line' and run the command requested */ void admin_run_command(Session * admin_session, const gchar * line) { const gchar *command_start; gchar *command; gchar *argument; gint command_number; static gchar *server_port = NULL; static gboolean register_server = TRUE; static GameParams *params = NULL; static Game *game = NULL; if (!g_str_has_prefix(line, "admin")) { net_printf(admin_session, "no admin prefix in command: '%s'\n", line); return; } line += 5; /* length of "admin" */ while (*line && g_ascii_isspace(*line)) ++line; if (!*line) { net_printf(admin_session, "no command found: '%s'\n", line); return; } /* parse the line down into command and argument */ command_start = line; while (*line && !g_ascii_isspace(*line)) ++line; command = g_strndup(command_start, line - command_start); if (*line) { while (*line && g_ascii_isspace(*line)) ++line; argument = g_strdup(line); } else { argument = NULL; } /* command[0] is the fall-back */ for (command_number = 1; command_number < G_N_ELEMENTS(admin_commands); ++command_number) { if (!strcmp (command, admin_commands[command_number].command)) { break; } } if (command_number == G_N_ELEMENTS(admin_commands)) { command_number = 0; } if (admin_commands[command_number].need_argument && NULL == argument) { net_printf(admin_session, "ERROR command '%s' needs an argument\n", command); } else if (admin_commands[command_number].need_gameparam && NULL == params) { net_printf(admin_session, "ERROR command '%s' needs a valid game\n", command); } else { if (admin_commands[command_number].stop_server && server_is_running(game)) { server_stop(game); game_free(game); game = NULL; net_write(admin_session, "INFO server stopped\n"); } switch (admin_commands[command_number].type) { case BADCOMMAND: net_printf(admin_session, "ERROR unrecognized command: '%s'\n", command); break; case SETPORT: if (server_port) g_free(server_port); server_port = g_strdup(argument); break; case STARTSERVER: { gchar *meta_server_name = get_meta_server_name(TRUE); if (!server_port) server_port = g_strdup (PIONEERS_DEFAULT_GAME_PORT); if (game != NULL) game_free(game); game = server_start(params, get_server_name(), server_port, register_server, meta_server_name, TRUE); g_free(meta_server_name); } break; case STOPSERVER: server_stop(game); break; case REGISTERSERVER: register_server = atoi(argument); break; case NUMPLAYERS: cfg_set_num_players(params, atoi(argument)); break; case SEVENSRULE: cfg_set_sevens_rule(params, atoi(argument)); break; case VICTORYPOINTS: cfg_set_victory_points(params, atoi(argument)); break; case RANDOMTERRAIN: cfg_set_terrain_type(params, atoi(argument)); break; case SETGAME: if (params) params_free(params); params = cfg_set_game(argument); if (!params) { net_printf(admin_session, "ERROR game '%s' not set\n", argument); } break; case QUIT: net_close(admin_session); /* Quit the server if the admin leaves */ if (!server_is_running(game)) exit(0); break; case MESSAGE: g_strdelimit(argument, "|", '_'); if (server_is_running(game)) admin_broadcast(game, argument); break; case HELP: for (command_number = 1; command_number < G_N_ELEMENTS(admin_commands); ++command_number) { if (admin_commands [command_number].need_argument) { net_printf(admin_session, "INFO %s argument\n", admin_commands [command_number]. command); } else { net_printf(admin_session, "INFO %s\n", admin_commands [command_number]. command); } } break; case INFO: net_printf(admin_session, "INFO server-port %s\n", server_port ? server_port : PIONEERS_DEFAULT_GAME_PORT); net_printf(admin_session, "INFO register-server %d\n", register_server); net_printf(admin_session, "INFO server running %d\n", server_is_running(game)); if (params) { net_printf(admin_session, "INFO game %s\n", params->title); net_printf(admin_session, "INFO players %d\n", params->num_players); net_printf(admin_session, "INFO victory-points %d\n", params->victory_points); net_printf(admin_session, "INFO random-terrain %d\n", params->random_terrain); net_printf(admin_session, "INFO sevens-rule %d\n", params->sevens_rule); } else { net_printf(admin_session, "INFO no game set\n"); } if (admin_dice_roll != 0) net_printf(admin_session, "INFO dice fixed to %d\n", admin_dice_roll); break; case FIXDICE: admin_dice_roll = CLAMP(atoi(argument), 0, 12); if (admin_dice_roll == 1) admin_dice_roll = 0; if (admin_dice_roll != 0) net_printf(admin_session, "INFO dice fixed to %d\n", admin_dice_roll); else net_printf(admin_session, "INFO dice rolled normally\n"); } } g_free(command); if (argument) g_free(argument); } /* network event handler, just like the one in meta.c, state.c, etc. */ void admin_event(NetEvent event, Session * admin_session, const gchar * line) { #ifdef PRINT_INFO g_print ("admin_event: event = %#x, admin_session = %p, line = %s\n", event, admin_session, line); #endif switch (event) { case NET_READ: /* there is data to be read */ #ifdef PRINT_INFO g_print("admin_event: NET_READ: line = '%s'\n", line); #endif admin_run_command(admin_session, line); break; case NET_CLOSE: /* connection has been closed */ #ifdef PRINT_INFO g_print("admin_event: NET_CLOSE\n"); #endif net_free(&admin_session); break; case NET_CONNECT: /* connect() succeeded -- shouldn't get here */ #ifdef PRINT_INFO g_print("admin_event: NET_CONNECT\n"); #endif break; case NET_CONNECT_FAIL: /* connect() failed -- shouldn't get here */ #ifdef PRINT_INFO g_print("admin_event: NET_CONNECT_FAIL\n"); #endif break; default: /* To kill a warning... */ break; } } /* accept a connection made to the admin port */ void admin_connect(comm_info * admin_info) { Session *admin_session; gint new_fd; gchar *location; /* somebody connected to the administration port, so we... */ /* (1) create a new network session */ admin_session = net_new((NetNotifyFunc) admin_event, NULL); /* (2) accept the connection into a new file descriptor */ new_fd = accept_connection(admin_info->fd, &location); /* (3) tie the new file descriptor to the session we created earlier. * Don't use keepalive pings on this connection. */ net_use_fd(admin_session, new_fd, FALSE); } /* set up the administration port */ gboolean admin_listen(const gchar * port) { gchar *error_message; if (!_accept_info) { _accept_info = g_malloc0(sizeof(comm_info)); } /* open up a socket on which to listen for connections */ _accept_info->fd = net_open_listening_socket(port, &error_message); if (_accept_info->fd == -1) { log_message(MSG_ERROR, "%s\n", error_message); g_free(error_message); return FALSE; } #ifdef PRINT_INFO g_print("admin_listen: fd = %d\n", _accept_info->fd); #endif /* set up the callback to handle connections */ _accept_info->read_tag = driver->input_add_read(_accept_info->fd, (InputFunc) admin_connect, _accept_info); return TRUE; } pioneers-14.1/server/admin.h0000644000175000017500000000323011411413666012754 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __admin_h #define __admin_h #include "network.h" typedef struct _comm_info { gint fd; guint read_tag; guint write_tag; } comm_info; extern gint admin_dice_roll; /**** backend functions for network administration of the server ****/ /* parse 'line' and run the command requested */ void admin_run_command(Session * admin_session, const gchar * line); /* network event handler, just like the one in meta.c, state.c, etc. */ void admin_event(NetEvent event, Session * admin_session, const gchar * line); /* accept a connection made to the admin port */ void admin_connect(comm_info * admin_info); /** set up the administration port * @param port Port to listen on * @return TRUE on success */ gboolean admin_listen(const gchar * port); #endif /* __admin_h */ pioneers-14.1/server/avahi.c0000644000175000017500000001600111403511531012736 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * Copyright (C) 2004-2010 Avahi http://avahi.org * Copyright (C) 2010 Andreas Steinel * Copyright (C) 2010 Roland Clobus * * This file is originally based on client-publish-service.c last commited on * 2006-01-27 20:34:22Z by lennart. * It got adapted to glib instead from pure avahi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Translation note: the Avahi error messages are not translated, * because the strings returned by Avahi aren't either */ #include "config.h" #include "avahi.h" #include "network.h" #include "log.h" #include #ifdef HAVE_AVAHI #include #include #include #include #include #include #include #include static AvahiEntryGroup *group = NULL; static AvahiGLibPoll *glib_poll = NULL; static AvahiClient *client = NULL; static char *name = NULL; static void create_services(AvahiClient * c, Game * game); static void entry_group_callback(AvahiEntryGroup * g, AvahiEntryGroupState state, void *userdata) { Game *game = (Game *) userdata; /* Called whenever the entry group state changes */ switch (state) { case AVAHI_ENTRY_GROUP_ESTABLISHED: /* The entry group has been established successfully */ log_message(MSG_INFO, _("Avahi registration successful.\n")); break; case AVAHI_ENTRY_GROUP_COLLISION:{ /* A service name collision happened. Let's pick a new name */ gchar *n = avahi_alternative_service_name(name); avahi_free(name); name = n; log_message(MSG_INFO, _ ("Avahi service name collision, renaming service to '%s'.\n"), name); /* And recreate the services */ create_services(avahi_entry_group_get_client(g), game); break; } case AVAHI_ENTRY_GROUP_FAILURE: /* Some kind of failure happened while we were registering */ log_message(MSG_ERROR, _("Avahi error: %s\n"), "Some kind of failure happened while we were registering"); break; case AVAHI_ENTRY_GROUP_UNCOMMITED: case AVAHI_ENTRY_GROUP_REGISTERING: break; } } static void create_services(AvahiClient * c, Game * game) { gchar *hostname; gchar *servicename; AvahiStringList *sl; int ret; g_assert(c != NULL); /* If this is the first time we're called, let's create a new entry group */ if (!group) { if (! (group = avahi_entry_group_new(c, entry_group_callback, NULL))) { log_message(MSG_ERROR, _("Avahi error: %s, %s\n"), "avahi_entry_group_new() failed", avahi_strerror(avahi_client_errno(c))); avahi_glib_poll_free(glib_poll); return; } } sl = avahi_string_list_new(NULL, NULL); sl = avahi_string_list_add_printf(sl, "version=%s", PROTOCOL_VERSION); sl = avahi_string_list_add_printf(sl, "title=%s", game->params->title); /* Add the service for IPP */ hostname = game->hostname ? g_strdup(game->hostname) : get_my_hostname(); servicename = g_strdup_printf("%s [%s]", hostname, game->server_port); g_free(hostname); ret = avahi_entry_group_add_service_strlst(group, AVAHI_IF_UNSPEC, AVAHI_NETWORK_PROTOCOL, 0, servicename, AVAHI_ANNOUNCE_NAME, NULL, NULL, atoi(game->server_port), sl); g_free(servicename); if (ret < 0) { gchar *msg = g_strdup_printf("Failed to add '%s' service", AVAHI_ANNOUNCE_NAME); log_message(MSG_ERROR, _("Avahi error: %s, %s\n"), msg, avahi_strerror(ret)); g_free(msg); avahi_string_list_free(sl); avahi_glib_poll_free(glib_poll); return; } /* Tell the server to register the service */ if ((ret = avahi_entry_group_commit(group)) < 0) { log_message(MSG_ERROR, _("Avahi error: %s, %s\n"), "Failed to commit entry_group", avahi_strerror(ret)); avahi_string_list_free(sl); avahi_glib_poll_free(glib_poll); return; } avahi_string_list_free(sl); return; } static void client_callback(AvahiClient * c, AvahiClientState state, AVAHI_GCC_UNUSED void *userdata) { Game *game = (Game *) userdata; g_assert(c != NULL); /* Called whenever the client or server state changes */ switch (state) { case AVAHI_CLIENT_S_RUNNING: /* The server has startup successfully and registered its host * name on the network, so it's time to create our services */ if (!group) create_services(c, game); break; case AVAHI_CLIENT_S_COLLISION: /* Let's drop our registered services. When the server is back * in AVAHI_SERVER_RUNNING state we will register them * again with the new host name. */ if (group) avahi_entry_group_reset(group); break; case AVAHI_CLIENT_FAILURE: log_message(MSG_ERROR, _("Avahi error: %s, %s\n"), "Client failure", avahi_strerror(avahi_client_errno(c))); avahi_glib_poll_free(glib_poll); break; case AVAHI_CLIENT_CONNECTING: case AVAHI_CLIENT_S_REGISTERING: ; } } #endif // HAVE_AVAHI void avahi_register_game(Game * game) { #ifdef HAVE_AVAHI const AvahiPoll *poll_api; int error; glib_poll = avahi_glib_poll_new(NULL, G_PRIORITY_DEFAULT); poll_api = avahi_glib_poll_get(glib_poll); /* Allocate main loop object */ if (!poll_api) { log_message(MSG_ERROR, _("Avahi error: %s, %s\n"), _("Unable to register Avahi server"), "Failed to create glib poll object"); avahi_unregister_game(); return; } name = avahi_strdup(game->params->title); /* Allocate a new client */ client = avahi_client_new(poll_api, 0, client_callback, game, &error); /* Check whether creating the client object succeeded */ if (!client) { log_message(MSG_ERROR, _("Avahi error: %s, %s\n"), _("Unable to register Avahi server"), avahi_strerror(error)); avahi_unregister_game(); } #endif // HAVE_AVAHI } void avahi_unregister_game(void) { #ifdef HAVE_AVAHI /* Cleanup things */ if (group) { avahi_entry_group_free(group); group = NULL; } if (client) { avahi_client_free(client); client = NULL; } if (glib_poll) { avahi_glib_poll_free(glib_poll); glib_poll = NULL; } if (name) { avahi_free(name); name = NULL; } log_message(MSG_INFO, _("Unregistering Avahi.\n")); #endif // HAVE_AVAHI } pioneers-14.1/server/avahi.h0000644000175000017500000000224111403511531012744 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2010 Andreas Steinel * Copyright (C) 2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __avahi_h #define __avahi_h #include "config.h" #include "server.h" /** * Register the Avahi service */ void avahi_register_game(Game * game); /** * Unregister the Avahi service */ void avahi_unregister_game(void); #endif pioneers-14.1/server/buildutil.c0000644000175000017500000002576011704117540013665 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "buildrec.h" #include "cost.h" #include "server.h" void check_longest_road(Game * game) { Map *map = game->params->map; gint road_length[MAX_PLAYERS]; gint num_have_longest; gint longest_length; gboolean tie; gint i; map_longest_road(map, road_length, game->params->num_players); num_have_longest = -1; longest_length = 0; tie = FALSE; for (i = 0; i < game->params->num_players; i++) { if (road_length[i] >= 5) { if (road_length[i] > longest_length) { num_have_longest = i; longest_length = road_length[i]; tie = FALSE; } else if (road_length[i] == longest_length) { tie = TRUE; if (game->longest_road != NULL && i == game->longest_road->num) { /* Current owner in the tie */ num_have_longest = i; } } } } if (num_have_longest == -1) { /* All roads are too short */ if (game->longest_road != NULL) { /* Revoke the longest road */ player_broadcast(player_none(game), PB_ALL, FIRST_VERSION, LATEST_VERSION, "longest-road\n"); game->longest_road = NULL; } } else if (!tie) { /* One player has the longest road */ if (game->longest_road == NULL || game->longest_road->num != num_have_longest) { /* Reassign the longest road */ game->longest_road = player_by_num(game, num_have_longest); player_broadcast(game->longest_road, PB_ALL, FIRST_VERSION, LATEST_VERSION, "longest-road\n"); } } else { /* Several players have the longest road */ if (game->longest_road == NULL || game->longest_road->num != num_have_longest) { /* If the current owner does not have the longest road, nobody will have the extra points. */ player_broadcast(player_none(game), PB_ALL, FIRST_VERSION, LATEST_VERSION, "longest-road\n"); game->longest_road = NULL; } } } /* build something on a node */ void node_add(Player * player, BuildType type, int x, int y, int pos, gboolean paid_for, Points * points) { Game *game = player->game; Map *map = game->params->map; Node *node = map_node(map, x, y, pos); BuildRec *rec; /* administrate the built number of structures */ if (type == BUILD_SETTLEMENT) player->num_settlements++; else if (type == BUILD_CITY) { if (node->type == BUILD_SETTLEMENT) player->num_settlements--; player->num_cities++; } else if (type == BUILD_CITY_WALL) { player->num_city_walls++; } /* fill the backup struct */ rec = buildrec_new(type, x, y, pos); rec->prev_status = node->type; rec->longest_road = game->longest_road ? game->longest_road->num : -1; rec->special_points_id = -1; /* compute the cost */ if (paid_for) { if (type == BUILD_CITY) if (node->type == BUILD_SETTLEMENT) rec->cost = cost_upgrade_settlement(); else rec->cost = cost_city(); else if (type == BUILD_SETTLEMENT) rec->cost = cost_settlement(); else if (type == BUILD_CITY_WALL) rec->cost = cost_city_wall(); resource_spend(player, rec->cost); } else rec->cost = NULL; if (points != NULL) { rec->special_points_id = points->id; } /* put the struct in the undo list */ player->build_list = g_list_append(player->build_list, rec); /* update the node information */ node->owner = player->num; if (type == BUILD_CITY_WALL) { node->city_wall = TRUE; /* Older clients see an extension message */ player_broadcast_extension(player, PB_RESPOND, FIRST_VERSION, V0_10, "built city wall\n"); player_broadcast(player, PB_RESPOND, V0_11, LATEST_VERSION, "built %B %d %d %d\n", type, x, y, pos); } else { node->type = type; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "built %B %d %d %d\n", type, x, y, pos); } if (points != NULL) { player->special_points = g_list_append(player->special_points, points); player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "get-point %d %d %s\n", points->id, points->points, points->name); } /* see if the longest road was cut */ check_longest_road(game); } /* build something on an edge */ void edge_add(Player * player, BuildType type, int x, int y, int pos, gboolean paid_for) { Game *game = player->game; Map *map = game->params->map; Edge *edge = map_edge(map, x, y, pos); BuildRec *rec; /* fill the undo struct */ rec = buildrec_new(type, x, y, pos); rec->longest_road = game->longest_road ? game->longest_road->num : -1; /* take the money if needed */ if (paid_for) { switch (type) { case BUILD_ROAD: rec->cost = cost_road(); break; case BUILD_SHIP: rec->cost = cost_ship(); break; case BUILD_BRIDGE: rec->cost = cost_bridge(); break; case BUILD_MOVE_SHIP: case BUILD_SETTLEMENT: case BUILD_CITY: case BUILD_CITY_WALL: case BUILD_NONE: log_message(MSG_ERROR, "In buildutils.c::edge_add() - Invalid build type.\n"); break; } resource_spend(player, rec->cost); } else rec->cost = NULL; /* put the struct in the undo list */ player->build_list = g_list_append(player->build_list, rec); /* update the pieces */ switch (type) { case BUILD_ROAD: player->num_roads++; break; case BUILD_BRIDGE: player->num_bridges++; break; case BUILD_SHIP: player->num_ships++; break; case BUILD_MOVE_SHIP: case BUILD_SETTLEMENT: case BUILD_CITY: case BUILD_CITY_WALL: case BUILD_NONE: log_message(MSG_ERROR, "In buildutils.c::edge_add() - Invalid build type.\n"); break; } /* update the board */ edge->owner = player->num; edge->type = type; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "built %B %d %d %d\n", type, x, y, pos); /* perhaps the longest road changed owner */ check_longest_road(game); } static gint find_points_by_id(gconstpointer a, gconstpointer b) { const Points *points = a; gint id = GPOINTER_TO_INT(b); return points->id == id ? 0 : points->id < id ? -1 : +1; } /* undo a build action */ gboolean perform_undo(Player * player) { Game *game = player->game; Map *map = game->params->map; GList *list; BuildRec *rec; Hex *hex; int longest_road; /* If the player hasn't built anything, the undo fails */ if (player->build_list == NULL) return FALSE; /* Fill some convenience variables */ list = g_list_last(player->build_list); rec = list->data; hex = map_hex(map, rec->x, rec->y); /* Remove the entry from the list (doesn't remove the data itself) */ player->build_list = g_list_remove_link(player->build_list, list); g_list_free_1(list); /* Do structure-specific things */ switch (rec->type) { case BUILD_NONE: g_error("BUILD_NONE in perform_undo()"); break; case BUILD_ROAD: player->num_roads--; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "remove %B %d %d %d\n", BUILD_ROAD, rec->x, rec->y, rec->pos); hex->edges[rec->pos]->owner = -1; hex->edges[rec->pos]->type = BUILD_NONE; break; case BUILD_BRIDGE: player->num_bridges--; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "remove %B %d %d %d\n", BUILD_BRIDGE, rec->x, rec->y, rec->pos); hex->edges[rec->pos]->owner = -1; hex->edges[rec->pos]->type = BUILD_NONE; break; case BUILD_SHIP: player->num_ships--; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "remove %B %d %d %d\n", BUILD_SHIP, rec->x, rec->y, rec->pos); hex->edges[rec->pos]->owner = -1; hex->edges[rec->pos]->type = BUILD_NONE; break; case BUILD_CITY: player->num_cities--; player->num_settlements++; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "remove %B %d %d %d\n", BUILD_CITY, rec->x, rec->y, rec->pos); hex->nodes[rec->pos]->type = BUILD_SETTLEMENT; if (rec->prev_status == BUILD_SETTLEMENT) break; /* Fall through and remove the settlement too */ case BUILD_SETTLEMENT: player->num_settlements--; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "remove %B %d %d %d\n", BUILD_SETTLEMENT, rec->x, rec->y, rec->pos); hex->nodes[rec->pos]->type = BUILD_NONE; hex->nodes[rec->pos]->owner = -1; break; case BUILD_CITY_WALL: player->num_city_walls--; /* Older clients see an extension message */ player_broadcast_extension(player, PB_RESPOND, FIRST_VERSION, V0_10, "remove city wall\n"); player_broadcast(player, PB_RESPOND, V0_11, LATEST_VERSION, "remove %B %d %d %d\n", BUILD_CITY_WALL, rec->x, rec->y, rec->pos); hex->nodes[rec->pos]->city_wall = FALSE; break; case BUILD_MOVE_SHIP: hex->edges[rec->pos]->owner = -1; hex->edges[rec->pos]->type = BUILD_NONE; hex = map_hex(map, rec->prev_x, rec->prev_y); hex->edges[rec->prev_pos]->owner = player->num; hex->edges[rec->prev_pos]->type = BUILD_SHIP; map->has_moved_ship = FALSE; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "move-back %d %d %d %d %d %d\n", rec->prev_x, rec->prev_y, rec->prev_pos, rec->x, rec->y, rec->pos); break; } /* Give back the money, if any */ if (rec->cost != NULL) resource_refund(player, rec->cost); /* If the longest road changed, change it back */ longest_road = game->longest_road ? game->longest_road->num : -1; if (longest_road != rec->longest_road) { if (rec->longest_road >= 0) { game->longest_road = player_by_num(game, rec->longest_road); player_broadcast(game->longest_road, PB_ALL, FIRST_VERSION, LATEST_VERSION, "longest-road\n"); } else { game->longest_road = NULL; player_broadcast(player_none(game), PB_ALL, FIRST_VERSION, LATEST_VERSION, "longest-road\n"); } } if (rec->special_points_id != -1) { GList *points; if (game->params->island_discovery_bonus != NULL) { if (!map_is_island_discovered (map, map_node(map, rec->x, rec->y, rec->pos), player->num)) { player->islands_discovered--; } } player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "lose-point %d\n", rec->special_points_id); points = g_list_find_custom(player->special_points, GINT_TO_POINTER (rec->special_points_id), find_points_by_id); if (points != NULL) { points_free(points->data); player->special_points = g_list_remove(player->special_points, points->data); } } /* free the memory */ g_free(rec); return TRUE; } pioneers-14.1/server/develop.c0000644000175000017500000002712611653256360013333 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "buildrec.h" #include "cost.h" #include "server.h" void develop_shuffle(Game * game) { GameParams *params; gint idx; gint shuffle_idx; gint shuffle_counts[NUM_DEVEL_TYPES]; params = game->params; memcpy(shuffle_counts, params->num_develop_type, sizeof(shuffle_counts)); game->num_develop = 0; for (idx = 0; idx < NUM_DEVEL_TYPES; idx++) game->num_develop += shuffle_counts[idx]; if (game->develop_deck != NULL) g_free(game->develop_deck); game->develop_deck = g_malloc0(game->num_develop * sizeof(*game->develop_deck)); for (idx = 0; idx < game->num_develop; idx++) { int card_idx; card_idx = get_rand(game->num_develop - idx); for (shuffle_idx = 0; shuffle_idx < G_N_ELEMENTS(shuffle_counts); shuffle_idx++) { card_idx -= shuffle_counts[shuffle_idx]; if (card_idx < 0) { shuffle_counts[shuffle_idx]--; game->develop_deck[idx] = shuffle_idx; break; } } } /* Check that the deck was shuffled correctly */ memcpy(shuffle_counts, params->num_develop_type, sizeof(shuffle_counts)); for (idx = 0; idx < game->num_develop; idx++) shuffle_counts[game->develop_deck[idx]]--; for (shuffle_idx = 0; shuffle_idx < G_N_ELEMENTS(shuffle_counts); shuffle_idx++) if (shuffle_counts[shuffle_idx] != 0) { log_message(MSG_ERROR, "Bad shuffle\n"); break; } game->develop_next = 0; } void develop_buy(Player * player) { Game *game = player->game; DevelType card; if (!game->rolled_dice) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR roll-dice\n"); return; } if (!cost_can_afford(cost_development(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } if (game->develop_next >= game->num_develop) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR no-cards\n"); return; } /* Clear the build list to prevent undo after buying * development card */ player->build_list = buildrec_free(player->build_list); resource_spend(player, cost_development()); player_broadcast(player, PB_OTHERS, FIRST_VERSION, LATEST_VERSION, "bought-develop\n"); game->bought_develop = TRUE; card = game->develop_deck[game->develop_next++]; deck_card_add(player->devel, card, game->curr_turn); player_send(player, FIRST_VERSION, LATEST_VERSION, "bought-develop %d\n", card); } gboolean mode_road_building(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; Map *map = game->params->map; BuildType type; gint x, y, pos; GList *rb_build_rec; sm_state_name(sm, "mode_road_building"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "done")) { /* Make sure we have built the right number of roads */ gint num_built; num_built = buildrec_count_edges(player->build_list); if (num_built < 2 && ((player->num_roads < game->params->num_build_type[BUILD_ROAD] && map_can_place_road(map, player->num)) || (player->num_ships < game->params->num_build_type[BUILD_SHIP] && map_can_place_ship(map, player->num)) || (player->num_bridges < game->params->num_build_type[BUILD_BRIDGE] && map_can_place_bridge(map, player->num)))) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR expected-build\n"); return TRUE; } /* We have the right number, now make sure that all * roads are connected to buildings */ if (!buildrec_is_valid (player->build_list, map, player->num)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR unconnected\n"); return TRUE; } /* Player has finished road building */ /* Remove the roads built from the player's build_list. * If we don't, trading will fail when it shouldn't. */ if (num_built >= 2) { num_built = 2; } for (; num_built >= 0; num_built--) { rb_build_rec = g_list_last(player->build_list); player->build_list = g_list_remove_link(player->build_list, rb_build_rec); g_list_free_1(rb_build_rec); } /* Send ack to client, check for victory, and quit. */ player_send(player, FIRST_VERSION, LATEST_VERSION, "OK\n"); sm_pop(sm); check_victory(player); return TRUE; } if (sm_recv(sm, "build %B %d %d %d", &type, &x, &y, &pos)) { if (buildrec_count_type(player->build_list, type) == 2) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many\n"); return TRUE; } /* Building a road / ship / bridge, make sure it is * correctly placed */ if (!map_road_vacant(map, x, y, pos)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return TRUE; } switch (type) { case BUILD_ROAD: if (map_road_connect_ok (map, player->num, x, y, pos)) break; player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return TRUE; case BUILD_SHIP: if (map_ship_connect_ok (map, player->num, x, y, pos)) break; player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return TRUE; case BUILD_BRIDGE: if (map_bridge_connect_ok (map, player->num, x, y, pos)) break; player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return TRUE; default: player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR expected-road\n"); return TRUE; } edge_add(player, type, x, y, pos, FALSE); return TRUE; } if (sm_recv(sm, "undo")) { if (!perform_undo(player)) player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return TRUE; } return FALSE; } gboolean mode_plenty_resources(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; int idx; int num; int num_in_bank; int plenty[NO_RESOURCE]; sm_state_name(sm, "mode_plenty_resources"); if (event != SM_RECV) return FALSE; if (!sm_recv(sm, "plenty %R", plenty)) return FALSE; num = 0; for (idx = 0; idx < NO_RESOURCE; idx++) num += plenty[idx]; if (!resource_available(player, plenty, &num_in_bank)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR plenty-no-resources\n"); return TRUE; } if ((num_in_bank < 2 && num != num_in_bank) || (num_in_bank >= 2 && num != 2)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-plenty\n"); return TRUE; } /* Give the resources to the player */ resource_start(game); cost_refund(plenty, player->assets); resource_end(game, "plenty", 1); player_send(player, FIRST_VERSION, LATEST_VERSION, "OK\n"); sm_pop(sm); return TRUE; } /* monopoly */ gboolean mode_monopoly(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; GList *list; Resource type; sm_state_name(sm, "mode_monopoly"); if (event != SM_RECV) return FALSE; if (!sm_recv(sm, "monopoly %r", &type)) return FALSE; /* Now inform the various parties of the monopoly. */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; if (scan == player) continue; player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "monopoly %d %r from %d\n", scan->assets[type], type, scan->num); /* Alter the assets of the respective players */ player->assets[type] += scan->assets[type]; scan->assets[type] = 0; } player_send(player, FIRST_VERSION, LATEST_VERSION, "OK\n"); sm_pop(sm); return TRUE; } static void check_largest_army(Game * game) { GList *list; Player *new_largest; new_largest = NULL; for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *player = list->data; /* Only 3 or more soldiers can earn largest army */ if (player->num_soldiers < 3) continue; if (new_largest == NULL) new_largest = player; else if (player->num_soldiers > new_largest->num_soldiers) /* Only get the largest if exceed the current * largest */ new_largest = player; } if (new_largest == NULL) return; /* Now change the largest army owner if necessary */ if (game->largest_army == NULL) { game->largest_army = new_largest; player_broadcast(game->largest_army, PB_ALL, FIRST_VERSION, LATEST_VERSION, "largest-army\n"); return; } /* Did largest army owner change? */ if (new_largest != game->largest_army && new_largest->num_soldiers > game->largest_army->num_soldiers) { game->largest_army = new_largest; player_broadcast(game->largest_army, PB_ALL, FIRST_VERSION, LATEST_VERSION, "largest-army\n"); } } void develop_play(Player * player, gint idx) { StateMachine *sm = player->sm; Game *game = player->game; DevelType card; if (idx >= player->devel->num_cards || idx < 0) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR no-card\n"); return; } card = player->devel->cards[idx].type; if (!deck_card_play(player->devel, game->played_develop, idx, game->curr_turn)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-time\n"); return; } if (!is_victory_card(card)) game->played_develop = TRUE; /* Cannot undo after playing development card */ player->build_list = buildrec_free(player->build_list); player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "play-develop %d %D\n", idx, card); switch (card) { case DEVEL_ROAD_BUILDING: /* Place 2 new roads as if you had just built them. */ sm_push(sm, (StateFunc) mode_road_building); break; case DEVEL_MONOPOLY: /* When you play this card, announce one type of * resource. All other players must give you all * their resource cards of that type. */ sm_push(sm, (StateFunc) mode_monopoly); break; case DEVEL_YEAR_OF_PLENTY: /* Take any 2 resource cards from the bank and add * them to your hand. They can be two different * resources or two of the same resource. They may * immediately be used to build. */ player_send(player, FIRST_VERSION, LATEST_VERSION, "plenty %R\n", game->bank_deck); sm_push(sm, (StateFunc) mode_plenty_resources); break; case DEVEL_CHAPEL: case DEVEL_UNIVERSITY: case DEVEL_GOVERNORS_HOUSE: case DEVEL_LIBRARY: case DEVEL_MARKET: switch (card) { case DEVEL_CHAPEL: ++player->chapel_played; break; case DEVEL_UNIVERSITY: ++player->univ_played; break; case DEVEL_GOVERNORS_HOUSE: ++player->gov_played; break; case DEVEL_LIBRARY: ++player->libr_played; break; case DEVEL_MARKET: ++player->market_played; break; default: ; } /* One victory point */ player->develop_points++; break; case DEVEL_SOLDIER: /* Move the robber. Steal one resource card from the * owner of an adjacent settlement or city. */ player->num_soldiers++; check_largest_army(game); robber_place(player); break; } } pioneers-14.1/server/discard.c0000644000175000017500000001251010650205126013263 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "cost.h" #include "server.h" static void check_finished_discard(Game * game, gboolean was_discard) { GList *list; /* is everyone finished yet? */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) if (((Player *) list->data)->discard_num > 0) break; if (list != NULL) return; /* tell players the discarding phase is over, but only if there * actually was a discarding phase */ if (was_discard) player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "discard-done\n"); /* everyone is done discarding, pop all the state machines to their * original state and push the robber to whoever wants it. */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; sm_pop(scan->sm); if (sm_current(scan->sm) == (StateFunc) mode_turn) robber_place(scan); } } /* Player should be idle - I will tell them when to do something */ gboolean mode_wait_for_other_discarding_players(Player * player, G_GNUC_UNUSED gint event) { StateMachine *sm = player->sm; sm_state_name(sm, "mode_wait_for_other_discarding_players"); return FALSE; } gboolean mode_discard_resources(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; int idx; int num; int discards[NO_RESOURCE]; sm_state_name(sm, "mode_discard_resources"); if (event != SM_RECV) return FALSE; if (!sm_recv(sm, "discard %R", discards)) return FALSE; num = 0; for (idx = 0; idx < NO_RESOURCE; idx++) num += discards[idx]; if (num != player->discard_num || !cost_can_afford(discards, player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-discard\n"); return TRUE; } /* Discard the resources */ player->discard_num = 0; resource_start(game); cost_buy(discards, player->assets); resource_end(game, "discarded", -1); /* wait for other to finish discarding too. The state will be * popped from check_finished_discard. */ sm_goto(sm, (StateFunc) mode_wait_for_other_discarding_players); check_finished_discard(game, TRUE); return TRUE; } /* Find all players that have exceeded the 7 resource card limit and * get them to discard. */ void discard_resources(Game * game) { GList *list; gboolean have_discard = FALSE; for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; gint num; gint idx; gint num_types; num = 0; num_types = 0; for (idx = 0; idx < G_N_ELEMENTS(scan->assets); idx++) { num += scan->assets[idx]; if (scan->assets[idx] > 0) ++num_types; } if (num > 7 + scan->num_city_walls * 2) { scan->discard_num = num / 2; /* discard random resources of disconnected players */ /* also do auto-discard if there is no choice */ if (scan->disconnected || num_types == 1) { gint total = 0, resource[NO_RESOURCE]; for (idx = 0; idx < NO_RESOURCE; idx++) { resource[idx] = 0; total += scan->assets[idx]; } while (scan->discard_num) { gint choice = get_rand(total); for (idx = 0; idx < NO_RESOURCE; idx++) { choice -= scan->assets[idx]; if (choice < 0) break; } ++resource[idx]; --total; --scan->discard_num; --scan->assets[idx]; ++game->bank_deck[idx]; } player_broadcast(scan, PB_ALL, FIRST_VERSION, LATEST_VERSION, "discarded %R\n", resource); /* push idle to be popped off when all * players are finished discarding. */ sm_push(scan->sm, (StateFunc) mode_wait_for_other_discarding_players); } else { have_discard = TRUE; sm_push(scan->sm, (StateFunc) mode_discard_resources); player_broadcast(scan, PB_ALL, FIRST_VERSION, LATEST_VERSION, "must-discard %d\n", scan->discard_num); } } else { scan->discard_num = 0; /* nothing to do, but we need to push, because there * will be a pop in check_finished_discard. * The reason we cannot leave out both is that there * really is nothing to do, so it shouldn't react * on input. mode_idle does just that. All players * except the one whose turn it is were idle anyway, * so it only changes things for that player (he cannot * just start playing, which is good). */ sm_push(scan->sm, (StateFunc) mode_wait_for_other_discarding_players); } } check_finished_discard(game, have_discard); } pioneers-14.1/server/gold.c0000644000175000017500000001722511575444700012621 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003-2005 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "server.h" /* Player should be idle - I will tell them when to do something */ gboolean mode_wait_for_gold_choosing_players(Player * player, G_GNUC_UNUSED gint event) { StateMachine *sm = player->sm; sm_state_name(sm, "mode_wait_for_gold_choosing_players"); return FALSE; } /** Create a limited bank. * @param game The game * @param limit The amount of resources that will be distributed * @retval limited_bank Returns a bank limited by limit. An amount of * limit+1 means that the bank cannot be emptied * @return TRUE if the gold can be distributed in only one way */ gboolean gold_limited_bank(const Game * game, int limit, gint * limited_bank) { gint idx; gint total_in_bank = 0; gint resources_available = 0; for (idx = 0; idx < NO_RESOURCE; ++idx) { if (game->bank_deck[idx] <= limit) { limited_bank[idx] = game->bank_deck[idx]; } else { limited_bank[idx] = limit + 1; } if (game->bank_deck[idx] > 0) ++resources_available; total_in_bank += game->bank_deck[idx]; }; return (resources_available <= 1) || (total_in_bank <= limit); } /* this function distributes resources until someone who receives gold is * found. It is called again when that person chose his/her gold and * continues the distribution */ static void distribute_next(GList * list) { Player *player = list->data; Game *game = player->game; gint idx; gboolean in_setup = FALSE; /* give resources until someone should choose gold */ for (; list != NULL; list = next_player_loop(list, player)) { gint resource[NO_RESOURCE], wanted[NO_RESOURCE]; gboolean send_message = FALSE; Player *scan = list->data; /* calculate what resources to give */ for (idx = 0; idx < NO_RESOURCE; ++idx) { gint num; num = scan->assets[idx] - scan->prev_assets[idx]; wanted[idx] = num; if (game->bank_deck[idx] - num < 0) { num = game->bank_deck[idx]; scan->assets[idx] = scan->prev_assets[idx] + num; } game->bank_deck[idx] -= num; resource[idx] = num; /* don't let a player receive the resources twice */ scan->prev_assets[idx] = scan->assets[idx]; if (wanted[idx] > 0) send_message = TRUE; } if (send_message) player_broadcast(scan, PB_ALL, FIRST_VERSION, LATEST_VERSION, "receives %R %R\n", resource, wanted); /* give out gold (and return so gold-done is not broadcast) */ if (scan->gold > 0) { gint limited_bank[NO_RESOURCE]; gboolean only_one_way = gold_limited_bank(game, scan->gold, limited_bank); /* disconnected players get random gold */ if (scan->disconnected || only_one_way) { gint totalbank = 0; gint choice; /* count the number of resources in the bank */ for (idx = 0; idx < NO_RESOURCE; ++idx) { resource[idx] = 0; totalbank += game->bank_deck[idx]; } while ((scan->gold > 0) && (totalbank > 0)) { /* choose one of them */ choice = get_rand(totalbank); /* find out which resource it is */ for (idx = 0; idx < NO_RESOURCE; ++idx) { choice -= game->bank_deck[idx]; if (choice < 0) break; } ++resource[idx]; --scan->gold; ++scan->assets[idx]; ++scan->prev_assets[idx]; --game->bank_deck[idx]; --totalbank; } scan->gold = 0; player_broadcast(scan, PB_ALL, FIRST_VERSION, LATEST_VERSION, "receive-gold %R\n", resource); } else { player_send(scan, FIRST_VERSION, LATEST_VERSION, "choose-gold %d %R\n", scan->gold, limited_bank); sm_push(scan->sm, (StateFunc) mode_choose_gold); return; } } /* no player is choosing gold, give resources to next player */ } /* end loop over all players */ /* tell everyone the resource distribution is finished */ player_broadcast(player, PB_SILENT, FIRST_VERSION, LATEST_VERSION, "done-resources\n"); /* pop everyone back to the state before we started giving out * resources */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *p = list->data; /* spectators were not pushed, they should not be popped */ if (player_is_spectator(game, p->num)) continue; sm_pop(p->sm); /* this is a hack to get the next setup player. I'd like to * do it differently, but I don't know how. */ if (sm_current(p->sm) == (StateFunc) mode_setup) { sm_goto(p->sm, (StateFunc) mode_idle); in_setup = TRUE; } } if (in_setup) next_setup_player(game); } gboolean mode_choose_gold(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; gint resources[NO_RESOURCE]; gint idx, num; GList *list; sm_state_name(sm, "mode_choose_gold"); if (event != SM_RECV) return FALSE; if (!sm_recv(sm, "chose-gold %R", resources)) return FALSE; /* check if the bank can take it */ num = 0; for (idx = 0; idx < NO_RESOURCE; ++idx) { num += resources[idx]; if (game->bank_deck[idx] < resources[idx]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-gold\n"); return FALSE; } } /* see if the right amount was taken */ if (num != player->gold) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-gold\n"); return FALSE; } /* give the gold */ player->gold = 0; for (idx = 0; idx < NO_RESOURCE; ++idx) { player->assets[idx] += resources[idx]; /* don't give them again when resources are dealt */ player->prev_assets[idx] += resources[idx]; /* take it out of the bank */ game->bank_deck[idx] -= resources[idx]; } player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "receive-gold %R\n", resources); /* pop back to mode_idle */ sm_pop(sm); list = next_player_loop(list_from_player(player), player); distribute_next(list); return TRUE; } /* this function is called by mode_turn to let resources and gold be * distributed */ void distribute_first(GList * list) { GList *looper; Player *player = list->data; Game *game = player->game; /* tell everybody who's receiving gold */ for (looper = list; looper != NULL; looper = next_player_loop(looper, player)) { Player *scan = looper->data; /* leave the spectators out of this */ if (player_is_spectator(game, scan->num)) continue; if (scan->gold > 0) { player_broadcast(scan, PB_ALL, FIRST_VERSION, LATEST_VERSION, "prepare-gold %d\n", scan->gold); } /* push everyone to idle, so nothing happens while giving out * gold after the distribution of resources is done, they are * all popped off again. This does not matter for most * players, since they were idle anyway, but it can matter for * the player who has the turn or is setting up. */ sm_push(scan->sm, (StateFunc) mode_wait_for_gold_choosing_players); } /* start giving out resources */ distribute_next(list); } pioneers-14.1/server/meta.c0000644000175000017500000001163511377001503012607 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include "server.h" static Session *ses; static enum { MODE_SIGNON, MODE_REDIRECT, MODE_SERVER_LIST } meta_mode; static gint meta_server_version_major; static gint meta_server_version_minor; static gint num_redirects; gchar *get_server_name(void) { gchar *server_name; server_name = g_strdup(g_getenv("PIONEERS_SERVER_NAME")); if (!server_name) server_name = g_strdup(g_getenv("GNOCATAN_SERVER_NAME")); if (!server_name) server_name = get_my_hostname(); return server_name; } void meta_start_game(void) { #ifdef CLOSE_META_AT_START if (ses != NULL) { net_printf(ses, "begin\n"); net_free(&ses); } #endif } void meta_report_num_players(gint num_players) { if (ses != NULL) net_printf(ses, "curr=%d\n", num_players); } void meta_send_details(Game * game) { if (ses == NULL) return; net_printf(ses, "server\n" "port=%s\n" "version=%s\n" "max=%d\n" "curr=%d\n", game->server_port, PROTOCOL_VERSION, game->params->num_players, game->num_players); /* If no hostname is set, let the metaserver figure out our name */ if (game->hostname) { net_printf(ses, "host=%s\n", game->hostname); } if (meta_server_version_major >= 1) { net_printf(ses, "vpoints=%d\n" "sevenrule=%s\n" "terrain=%s\n" "title=%s\n", game->params->victory_points, game->params->sevens_rule == 0 ? "normal" : game->params->sevens_rule == 1 ? "reroll first 2" : "reroll all", game->params-> random_terrain ? "random" : "default", game->params->title); } else { net_printf(ses, "map=%s\n" "comment=%s\n", game->params-> random_terrain ? "random" : "default", game->params->title); } } static void meta_event(NetEvent event, Game * game, char *line) { switch (event) { case NET_READ: switch (meta_mode) { case MODE_SIGNON: case MODE_REDIRECT: if (strncmp(line, "goto ", 5) == 0) { gchar **split_result; const gchar *port; meta_mode = MODE_REDIRECT; net_free(&ses); if (num_redirects++ == 10) { log_message(MSG_INFO, _("" "Too many meta-server redirects\n")); return; } split_result = g_strsplit(line, " ", 0); g_assert(split_result[0] != NULL); g_assert(!strcmp(split_result[0], "goto")); if (split_result[1]) { port = PIONEERS_DEFAULT_META_PORT; if (split_result[2]) port = split_result[2]; meta_register(split_result[1], port, game); } else { log_message(MSG_ERROR, _("" "Bad redirect line: %s\n"), line); }; g_strfreev(split_result); } meta_server_version_major = meta_server_version_minor = 0; if (strncmp(line, "welcome ", 8) == 0) { char *p = strstr(line, "version "); if (p) { p += 8; meta_server_version_major = atoi(p); p += strspn(p, "0123456789"); if (*p == '.') meta_server_version_minor = atoi(p + 1); } } net_printf(ses, "version %s\n", META_PROTOCOL_VERSION); meta_mode = MODE_SERVER_LIST; meta_send_details(game); break; default: log_message(MSG_ERROR, _("" "Unknown message from the metaserver: %s\n"), line); break; } break; case NET_CLOSE: log_message(MSG_ERROR, _("Meta-server kicked us off\n")); net_free(&ses); break; case NET_CONNECT: case NET_CONNECT_FAIL: break; } } void meta_register(const gchar * server, const gchar * port, Game * game) { if (num_redirects > 0) log_message(MSG_INFO, _("" "Redirected to meta-server at %s, port %s\n"), server, port); else log_message(MSG_INFO, _("" "Register with meta-server at %s, port %s\n"), server, port); if (ses != NULL) net_free(&ses); ses = net_new((NetNotifyFunc) meta_event, game); if (net_connect(ses, server, port)) meta_mode = MODE_SIGNON; else { net_free(&ses); } } void meta_unregister(void) { if (ses != NULL) { log_message(MSG_INFO, _("Unregister from meta-server\n")); net_free(&ses); } } pioneers-14.1/server/player.c0000644000175000017500000010504111760641465013165 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003-2007 Bas Wijnen * Copyright (C) 2005-2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include "server.h" /* Local function prototypes */ static gboolean mode_check_version(Player * player, gint event); static gboolean mode_check_status(Player * player, gint event); static gboolean mode_bad_version(Player * player, gint event); static gboolean mode_global(Player * player, gint event); static gboolean mode_unhandled(Player * player, gint event); static void player_setup(Player * player, int playernum, const gchar * name, gboolean force_spectator); static Player *player_by_name(Game * game, char *name); #define tournament_minute 1000 * 60 #define time_to_wait_for_players 30 * 60 * 1000 /** Is the game a tournament game? * @param game The game * @return TRUE if this game is a tournament game */ static gboolean is_tournament_game(const Game * game) { return game->params->tournament_time > 0; } /** Find a free number for a connecting player. * The number has not been used before. * @param game The game * @param force_spectator The connecting player must be a spectator */ static gint next_free_player_num(Game * game, gboolean force_spectator) { gint idx; if (!force_spectator) { GList *list; gboolean player_taken[MAX_PLAYERS]; gint available = game->params->num_players; memset(player_taken, 0, sizeof(player_taken)); playerlist_inc_use_count(game); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *player = list->data; if (player->num >= 0 && !player_is_spectator(game, player->num)) { player_taken[player->num] = TRUE; --available; } } playerlist_dec_use_count(game); if (available > 0) { gint skip; if (game->random_order) { skip = get_rand(available); } else { skip = 0; } idx = 0; while (player_taken[idx] || skip-- != 0) ++idx; return idx; } } /* No players available/wanted, look for a spectator number */ idx = game->params->num_players; while (player_by_num(game, idx) != NULL) ++idx; return idx; } static gboolean mode_global(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; gchar *text; switch (event) { case SM_FREE: if (player->name != NULL) g_free(player->name); if (player->style != NULL) g_free(player->style); if (player->location != NULL) g_free(player->location); if (player->devel != NULL) deck_free(player->devel); if (player->num >= 0 && !player_is_spectator(game, player->num) && !player->disconnected) { game->num_players--; meta_report_num_players(game->num_players); } g_list_free(player->build_list); g_list_free(player->special_points); g_free(player); return TRUE; case SM_NET_CLOSE: player_remove(player); if (player->num >= 0) { player_broadcast(player, PB_OTHERS, FIRST_VERSION, LATEST_VERSION, "has quit\n"); player_archive(player); } else { player_free(player); } driver->player_change(game); return TRUE; case SM_RECV: if (sm_recv(sm, "chat %S", &text)) { if (strlen(text) > MAX_CHAT) player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR %s\n", _("chat too long")); else player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "chat %s\n", text); g_free(text); return TRUE; } if (sm_recv(sm, "name %S", &text)) { if (text[0] == '\0') player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR invalid-name\n"); else if (strlen(text) > MAX_NAME_LENGTH) player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR %s\n", _("name too long")); else player_set_name(player, text); g_free(text); return TRUE; } if (sm_recv(sm, "style %S", &text)) { if (player->style) g_free(player->style); player->style = text; player_broadcast(player, PB_ALL, V0_11, LATEST_VERSION, "style %s\n", text); return TRUE; } break; default: break; } return FALSE; } static gboolean mode_unhandled(Player * player, gint event) { StateMachine *sm = player->sm; gchar *text; switch (event) { case SM_RECV: if (sm_recv(sm, "extension %S", &text)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_("ignoring unknown extension")); log_message(MSG_INFO, "ignoring unknown extension from %s: %s\n", player->name, text); g_free(text); return TRUE; } break; default: break; } return FALSE; } /* Called to start the game (if it hasn't been yet). Add computer * players to fill any empty spots * */ static gboolean tournament_start_cb(gpointer data) { int i; Game *game = (Game *) data; GList *player; gboolean human_player_present; g_source_remove(game->tournament_timer); game->tournament_timer = 0; /* if game already started */ if (game->num_players == game->params->num_players) return FALSE; if (game->num_players == 0) { player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_ ("The last player left, the " "tournament timer is reset.")); game->tournament_countdown = game->params->tournament_time; return FALSE; } /* remove all disconnected players */ playerlist_inc_use_count(game); for (player = game->player_list; player != NULL; player = g_list_next(player)) { Player *p = player->data; if (p->disconnected && !p->sm->use_cache) { player_free(p); } } playerlist_dec_use_count(game); /* if no human players are present, quit */ playerlist_inc_use_count(game); human_player_present = FALSE; for (player = game->player_list; player != NULL && !human_player_present; player = g_list_next(player)) { Player *p = player->data; if (!player_is_spectator(game, p->num) && determine_player_type(p->style) == PLAYER_HUMAN) { human_player_present = TRUE; } } playerlist_dec_use_count(game); if (!human_player_present) { player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_("No human players present. Bye.")); request_server_stop(game); return FALSE; } player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_("Game starts, adding computer players.")); /* add computer players to start game */ for (i = game->num_players; i < game->params->num_players; i++) { add_computer_player(game, TRUE); } return FALSE; } /* * Keep players notified about when the tournament game is going to start * */ static gboolean talk_about_tournament_cb(gpointer data) { Game *game = (Game *) data; const gchar *message; /* if game already started */ if (game->num_players == game->params->num_players) return FALSE; if (game->num_players == 0) { if (game->tournament_timer != 0) { player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_ ("The last player left, the " "tournament timer is reset.")); game->tournament_countdown = game->params->tournament_time; g_source_remove(game->tournament_timer); game->tournament_timer = 0; } return FALSE; } /* ngettext can not be used here, * because the string must be sent untranslated */ message = game->tournament_countdown != 1 ? N_("The game starts in %s minutes.") : N_("The game starts in %s minute."); player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE1 %d|%s\n", game->tournament_countdown, message); game->tournament_countdown--; if (game->tournament_countdown > 0) g_timeout_add(tournament_minute, &talk_about_tournament_cb, game); return FALSE; } /** Generate a name for a computer player. * The name will be unique for the game. */ static gchar *generate_name_for_computer_player(Game * game) { gchar *filename; FILE *stream; gchar *line; gchar *name = NULL; int num = 1; filename = g_build_filename(get_pioneers_dir(), "computer_names", NULL); stream = fopen(filename, "r"); if (!stream) { g_warning("Unable to open %s", filename); /* Default name for the AI when the computer_names file * is not found or empty. */ } else { while (read_line_from_file(&line, stream)) { if (player_by_name(game, line) == NULL) { if (g_random_int_range(0, num) == 0) { if (name) g_free(name); name = g_strdup(line); } num++; } } fclose(stream); if (num == 1) { g_warning("Empty file or all names taken: %s", filename); } } g_free(filename); if (name == NULL) { gint counter = 2; /* Default name for the AI when the computer_names file * is not found or empty. */ name = g_strdup(_("Computer Player")); while (player_by_name(game, name) != NULL) { g_free(name); name = g_strdup_printf("%s (%d)", _("Computer Player"), counter++); } } return name; } /** Add a new computer player (disconnected) */ gchar *player_new_computer_player(Game * game) { Player *player; gchar *name; /* Reserve the name, so the names of the computer players will be unique */ name = generate_name_for_computer_player(game); player = player_new(game, name); player->disconnected = TRUE; sm_goto(player->sm, (StateFunc) mode_idle); return name; } /** Allocate a new Player struct. * The StateMachine is not initialized. * */ Player *player_new(Game * game, const gchar * name) { Player *player; StateMachine *sm; player = g_malloc0(sizeof(*player)); sm = player->sm = sm_new(player); sm_global_set(sm, (StateFunc) mode_global); sm_unhandled_set(sm, (StateFunc) mode_unhandled); player->game = game; player->location = g_strdup("not connected"); player->devel = deck_new(game->params); game->player_list = g_list_append(game->player_list, player); player->num = -1; player->chapel_played = 0; player->univ_played = 0; player->gov_played = 0; player->libr_played = 0; player->market_played = 0; player->islands_discovered = 0; player->disconnected = FALSE; player->name = g_strdup(name); player->style = NULL; player->special_points = NULL; player->special_points_next_id = 0; driver->player_change(game); return player; } Player *player_new_connection(Game * game, int fd, const gchar * location) { gchar name[100]; gint i; Player *player; StateMachine *sm; /* give player a name, some functions need it */ strcpy(name, "connecting"); for (i = strlen(name); i < G_N_ELEMENTS(name) - 1; ++i) { if (player_by_name(game, name) == NULL) break; name[i] = '_'; name[i + 1] = 0; } if (i == G_N_ELEMENTS(name) - 1) { /* there are too many pending connections */ ssize_t bytes_written; bytes_written = write(fd, "ERR Too many connections\n", 25); /* This ugly construction is to suppress a compiler warning */ bytes_written = bytes_written; net_closesocket(fd); return NULL; } if (game->is_game_over) { /* The game is over, don't accept new players */ Session *ses = net_new(NULL, NULL); gchar *message; net_use_fd(ses, fd, FALSE); /* Message to send to the client when the game is already over * when a connection is made. */ message = g_strdup_printf("NOTE %s\n", N_("Sorry, game is over.")); net_write(ses, message); log_message(MSG_INFO, _("Player from %s is refused: game is over\n"), location); net_close_when_flushed(ses); g_free(message); return NULL; } player = player_new(game, name); sm = player->sm; sm_use_fd(sm, fd, TRUE); g_free(player->location); player->location = g_strdup(location); /* Cache messages of the game in progress until all intial * messages have been sent */ sm_set_use_cache(sm, TRUE); sm_goto(sm, (StateFunc) mode_check_version); driver->player_change(game); return player; } /* set the player name. Most of the time, player_set_name is called instead, * which calls this function with public set to TRUE. Only player_setup calls * this with public == FALSE, because it doesn't want the broadcast. */ static void player_set_name_real(Player * player, gchar * name, gboolean public) { Game *game = player->game; Player *player_temp; g_assert(name[0] != 0); if (((player_temp = player_by_name(game, name)) != NULL) && (player_temp != player)) { /* make it a note, not an error, so nothing bad happens * (on error the AI would disconnect) */ player_send(player, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_("" "Name not changed: new name is already in use")); return; } if (player->name != name) { g_free(player->name); player->name = g_strdup(name); } if (public) player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "is %s\n", player->name); driver->player_renamed(player); driver->player_change(game); } static void player_setup(Player * player, int playernum, const gchar * name, gboolean force_spectator) { gchar nm[MAX_NAME_LENGTH + 1]; Game *game = player->game; StateMachine *sm = player->sm; Player *other; player->num = playernum; if (player->num < 0) { player->num = next_free_player_num(game, force_spectator); } if (!player_is_spectator(game, player->num)) { game->num_players++; meta_report_num_players(game->num_players); } player->num_roads = 0; player->num_bridges = 0; player->num_ships = 0; player->num_settlements = 0; player->num_cities = 0; /* give the player her new name */ if (name == NULL) { if (player_is_spectator(game, player->num)) { gint num = 1; do { sprintf(nm, _("Spectator %d"), num++); } while (player_by_name(game, nm) != NULL); } else { sprintf(nm, _("Player %d"), player->num); } } else { strncpy(nm, name, G_N_ELEMENTS(nm)); nm[G_N_ELEMENTS(nm) - 1] = '\0'; } /* if the new name exists, try padding it with underscores */ other = player_by_name(game, nm); if (other != player && other != NULL) { gint i; /* add underscores until the name is unique */ for (i = strlen(nm); i < G_N_ELEMENTS(nm) - 1; ++i) { if (player_by_name(game, nm) == NULL) break; nm[i] = '_'; nm[i + 1] = 0; } /* Adding underscores was not enough to make the name unique. * While staying within the maximum name length, * create numbers at the end of the name. * Repeat until an unique name has been found. */ while (player_by_name(game, nm)) { gint digit = 10; i = G_N_ELEMENTS(nm) - 1; while (digit == 10 && i > 0) { /* Digit will be: 0..10 */ --i; digit = g_ascii_digit_value(nm[i]) + 1; nm[i] = '0' + digit % 10; } } } /* copy the (possibly new) name to dynamic memory */ /* don't broadcast the name. This is done by mode_pre_game, after * telling the user how many players are in the game. * That should keep things easier for the client. */ player_set_name_real(player, nm, FALSE); /* add the info in the output device */ driver->player_added(player); driver->player_change(game); if (playernum < 0) sm_goto(sm, (StateFunc) mode_pre_game); } void player_free(Player * player) { Game *game = player->game; if (game->player_list_use_count > 0) { game->dead_players = g_list_append(game->dead_players, player); player->disconnected = TRUE; return; } game->player_list = g_list_remove(game->player_list, player); driver->player_change(game); sm_free(player->sm); } static gboolean timed_out(gpointer data) { Game *game = data; log_message(MSG_INFO, _("" "Was hanging around for too long without players... bye.\n")); player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_("No human players present. Bye.")); request_server_stop(game); return FALSE; } void player_archive(Player * player) { StateFunc state; Game *game = player->game; /* If this was a spectator, forget about him */ if (player_is_spectator(game, player->num)) { player_free(player); return; } /* If this game can't be started, forget old players */ if (game_is_unstartable(game)) { player_free(player); return; } /* If the player was in the middle of a trade, pop the state machine and inform others as necessary */ state = sm_current(player->sm); if (state == (StateFunc) mode_domestic_quote_rejected) { /* No special actions needed */ } else if (state == (StateFunc) mode_domestic_quote) { /* Retract all quotes */ for (;;) { QuoteInfo *quote; quote = quotelist_find_domestic(game->quotes, player->num, -1); if (quote == NULL) break; quotelist_delete(game->quotes, quote); player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-quote delete %d\n", quote->var.d.quote_num); } } else if (state == (StateFunc) mode_domestic_initiate) { /* End the trade */ trade_finish_domestic(player); } /* If the player was robbing something, auto-undo to robber * placement. */ if (state == (StateFunc) mode_select_robbed || state == (StateFunc) mode_select_pirated) robber_undo(player); /* Mark the player as disconnected */ player->disconnected = TRUE; game->num_players--; meta_report_num_players(game->num_players); /* if no human players are present, start timer */ playerlist_inc_use_count(game); gboolean human_player_present = FALSE; GList *pl = game->player_list; for (pl = game->player_list; pl != NULL && !human_player_present; pl = g_list_next(pl)) { Player *p = pl->data; if (!player_is_spectator(game, p->num) && !p->disconnected && determine_player_type(p->style) == PLAYER_HUMAN) { human_player_present = TRUE; } } playerlist_dec_use_count(game); if (!human_player_present && game->no_humans_timer == 0 && is_tournament_game(game)) { game->no_humans_timer = g_timeout_add(time_to_wait_for_players, timed_out, game); player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_ ("The last human player left. Waiting for the return of a player.")); } } /* Try to revive the player newp: Player* attempt to revive this player name: The player wants to have this name, if possible */ void player_revive(Player * newp, char *name) { Game *game = newp->game; GList *current = NULL; Player *p = NULL; gboolean reviving_player_in_setup; gchar *safe_name; if (game->no_humans_timer != 0) { g_source_remove(game->no_humans_timer); game->no_humans_timer = 0; player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_("Resuming the game.")); } /* first see if a player with the given name exists */ if (name) { playerlist_inc_use_count(game); for (current = game->player_list; current != NULL; current = g_list_next(current)) { p = current->data; if (!strcmp(name, p->name)) if (p->disconnected && !p->sm->use_cache && p != newp) break; } playerlist_dec_use_count(game); } /* if not, try to find an unused player number */ if (current == NULL) { gint num; num = next_free_player_num(game, FALSE); if (num < game->params->num_players) { player_setup(newp, -1, name, FALSE); return; } } /* if not, try to take over another disconnected player */ if (current == NULL) { playerlist_inc_use_count(game); for (current = game->player_list; current != NULL; current = g_list_next(current)) { p = current->data; if (p->disconnected && !p->sm->use_cache && p != newp) break; } playerlist_dec_use_count(game); } /* if still no player is found, do a normal setup */ if (current == NULL) { player_setup(newp, -1, name, FALSE); return; } /* Reviving the player that is currently in the setup phase */ reviving_player_in_setup = (game->setup_player && game->setup_player->data == p); /* remove the disconnected player from the player list, it's memory will be freed at the end of this routine */ game->player_list = g_list_remove(game->player_list, p); /* initialize the player */ player_setup(newp, p->num, name, FALSE); /* mark the player as a reconnect */ newp->disconnected = TRUE; /* Don't use the old player's name */ /* copy over all the data from p */ g_assert(newp->build_list == NULL); newp->build_list = p->build_list; p->build_list = NULL; /* prevent deletion */ memcpy(newp->prev_assets, p->prev_assets, sizeof(newp->prev_assets)); memcpy(newp->assets, p->assets, sizeof(newp->assets)); newp->gold = p->gold; /* take over the development deck */ deck_free(newp->devel); newp->devel = p->devel; p->devel = NULL; g_assert(newp->special_points == NULL); newp->special_points = p->special_points; p->special_points = NULL; /* prevent deletion */ newp->discard_num = p->discard_num; newp->num_roads = p->num_roads; newp->num_bridges = p->num_bridges; newp->num_ships = p->num_ships; newp->num_settlements = p->num_settlements; newp->num_cities = p->num_cities; newp->num_soldiers = p->num_soldiers; newp->develop_points = p->develop_points; newp->chapel_played = p->chapel_played; newp->univ_played = p->univ_played; newp->gov_played = p->gov_played; newp->libr_played = p->libr_played; newp->market_played = p->market_played; /* Not copied: sm, game, location, num, client_version */ /* copy over the state */ memcpy(newp->sm->stack, p->sm->stack, sizeof(newp->sm->stack)); memcpy(newp->sm->stack_name, p->sm->stack_name, sizeof(newp->sm->stack_name)); newp->sm->stack_ptr = p->sm->stack_ptr; newp->sm->current_state = p->sm->current_state; if (sm_current(newp->sm) != (StateFunc) mode_pre_game) sm_push(newp->sm, (StateFunc) mode_pre_game); else sm_goto(newp->sm, (StateFunc) mode_pre_game); /* Copy longest road and largest army */ if (game->longest_road == p) game->longest_road = newp; if (game->largest_army == p) game->largest_army = newp; if (reviving_player_in_setup) { /* Restore the pointer */ game->setup_player = game->player_list; while (game->setup_player && game->setup_player->data != newp) { game->setup_player = g_list_next(game->setup_player); } g_assert(game->setup_player != NULL); } p->num = -1; /* prevent the number of players from getting decremented */ player_free(p); /* Make sure the name in the broadcast doesn't contain the separator */ safe_name = g_strdup(newp->name); g_strdelimit(safe_name, "|", '_'); player_broadcast(newp, PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE1 %s|%s\n", safe_name, /* %s is the name of the reconnecting player */ N_("%s has reconnected.")); g_free(safe_name); return; } gboolean mode_spectator(Player * player, gint event) { gint num; Game *game = player->game; StateMachine *sm = player->sm; Player *other; sm_state_name(sm, "mode_spectator"); if (event != SM_RECV) return FALSE; /* first see if this is a valid event for this mode */ if (sm_recv(sm, "play")) { /* try to be the first available player */ num = next_free_player_num(game, FALSE); if (num >= game->params->num_players) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR game-full"); return TRUE; } } else if (sm_recv(sm, "play %d", &num)) { /* try to be the specified player number */ if (num >= game->params->num_players || !player_by_num(game, num)->disconnected) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR invalid-player"); return TRUE; } } else /* input was not what we expected, * see if mode_unhandled likes it */ return FALSE; other = player_by_num(game, num); if (other == NULL) { player_send(player, FIRST_VERSION, LATEST_VERSION, "Ok\n"); player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "was spectator %d\n", player->num); sm_set_use_cache(player->sm, TRUE); player_setup(player, -1, player->name, FALSE); sm_goto(sm, (StateFunc) mode_pre_game); return TRUE; } sm_set_use_cache(player->sm, TRUE); player_revive(player, player->name); return TRUE; } static gboolean mode_bad_version(Player * player, gint event) { StateMachine *sm = player->sm; sm_state_name(sm, "mode_bad_version"); switch (event) { case SM_ENTER: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "ERR sorry, version conflict\n"); player_free(player); break; } return FALSE; } static gboolean mode_check_version(Player * player, gint event) { StateMachine *sm = player->sm; gchar *version; sm_state_name(sm, "mode_check_version"); switch (event) { case SM_ENTER: player_send_uncached(player, UNKNOWN_VERSION, UNKNOWN_VERSION, "version report\n"); break; case SM_RECV: if (sm_recv(sm, "version %S", &version)) { ClientVersionType cvt = client_version_type_from_string(version); player->version = cvt; if (can_client_connect_to_server (cvt, client_version_type_from_string (PROTOCOL_VERSION))) { sm_goto(sm, (StateFunc) mode_check_status); } else { /* PROTOCOL_VERSION is the current version * of the client when building this server. * Although it's not the only supported * version, it's the best the user can have. */ gchar *mismatch = g_strdup_printf("%s <-> %s", PROTOCOL_VERSION, version); /* Make sure the argument does not contain the separator */ g_strdelimit(mismatch, "|", '_'); player_send_uncached(player, cvt, cvt, "NOTE1 %s|%s\n", mismatch, N_("" "Version mismatch: %s")); g_free(mismatch); sm_goto(sm, (StateFunc) mode_bad_version); } g_free(version); return TRUE; } break; default: break; } return FALSE; } static void start_tournament_mode(Player * player) { Game *game = player->game; if (is_tournament_game(game)) { /* if first player in and this is a tournament start the timer */ if (game->num_players == 1) { game->tournament_countdown = game->params->tournament_time; game->tournament_timer = g_timeout_add(game->tournament_countdown * tournament_minute + 500, &tournament_start_cb, game); g_timeout_add(1000, &talk_about_tournament_cb, game); } else { if (game->tournament_timer != 0 && game->num_players != game->params->num_players) { player_send(player, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", N_ ("This game will start soon.")); } } } } static gboolean mode_check_status(Player * player, gint event) { StateMachine *sm = player->sm; gchar *playername; sm_state_name(sm, "mode_check_status"); switch (event) { case SM_ENTER: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "status report\n"); break; case SM_RECV: if (sm_recv(sm, "status newplayer")) { player_setup(player, -1, NULL, FALSE); start_tournament_mode(player); return TRUE; } if (sm_recv(sm, "status reconnect %S", &playername)) { /* if possible, try to revive the player */ player_revive(player, playername); g_free(playername); start_tournament_mode(player); return TRUE; } if (sm_recv(sm, "status newviewer")) { player_setup(player, -1, NULL, TRUE); return TRUE; } if (sm_recv(sm, "status viewer %S", &playername)) { player_setup(player, -1, playername, TRUE); g_free(playername); return TRUE; } break; default: break; } return FALSE; } /* Returns a GList* to player 0 */ GList *player_first_real(Game * game) { GList *list; /* search for player 0 */ playerlist_inc_use_count(game); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *player = list->data; if (player->num == 0) break; } playerlist_dec_use_count(game); return list; } /* Returns a GList * to a player with a number one higher than last */ GList *player_next_real(GList * last) { Player *player; Game *game; gint numplayers; gint nextnum; GList *list; if (!last) return NULL; player = last->data; game = player->game; numplayers = game->params->num_players; nextnum = player->num + 1; if (nextnum >= numplayers) return NULL; playerlist_inc_use_count(game); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *scan = list->data; if (scan->num == nextnum) break; } playerlist_dec_use_count(game); return list; } static Player *player_by_name(Game * game, char *name) { GList *list; playerlist_inc_use_count(game); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *player = list->data; if (player->name != NULL && strcmp(player->name, name) == 0) { playerlist_dec_use_count(game); return player; } } playerlist_dec_use_count(game); return NULL; } Player *player_by_num(Game * game, gint num) { GList *list; playerlist_inc_use_count(game); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *player = list->data; if (player->num == num) { playerlist_dec_use_count(game); return player; } } playerlist_dec_use_count(game); return NULL; } gboolean player_is_spectator(Game * game, gint player_num) { return game->params->num_players <= player_num; } /* Returns a player that's not part of the game. */ Player *player_none(Game * game) { static Player player; player.game = game; player.num = -1; player.disconnected = TRUE; return &player; } /** Broadcast a message to all players and spectators - prepend "player %d " to * all players except the one generating the message. * Also prepend 'extension' when this message is a protocol extension. * * send to PB_SILENT PB_RESPOND PB_ALL PB_OTHERS * player - - + ** * other - + + + * ** = don't send to the player * + = prepend 'player %d' to the message * - = don't alter the message */ static void player_broadcast_internal(Player * player, BroadcastType type, const gchar * message, gboolean is_extension, ClientVersionType first_supported_version, ClientVersionType last_supported_version) { Game *game = player->game; GList *list; playerlist_inc_use_count(game); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *scan = list->data; if ((scan->disconnected && !scan->sm->use_cache) || scan->num < 0 || scan->version < first_supported_version || scan->version > last_supported_version) continue; if (type == PB_SILENT || (scan == player && type == PB_RESPOND)) { if (is_extension) { player_send(scan, first_supported_version, last_supported_version, "extension %s", message); } else { player_send(scan, first_supported_version, last_supported_version, "%s", message); } } else if (scan != player || type == PB_ALL) { if (is_extension) { player_send(scan, first_supported_version, last_supported_version, "extension player %d %s", player->num, message); } else { player_send(scan, first_supported_version, last_supported_version, "player %d %s", player->num, message); } } } playerlist_dec_use_count(game); } /** As player_broadcast, but will add the 'extension' keyword */ void player_broadcast_extension(Player * player, BroadcastType type, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...) { gchar *buff; va_list ap; va_start(ap, fmt); buff = game_vprintf(fmt, ap); va_end(ap); player_broadcast_internal(player, type, buff, TRUE, first_supported_version, last_supported_version); g_free(buff); } /** Broadcast a message to all players and spectators */ void player_broadcast(Player * player, BroadcastType type, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...) { gchar *buff; va_list ap; va_start(ap, fmt); buff = game_vprintf(fmt, ap); va_end(ap); player_broadcast_internal(player, type, buff, FALSE, first_supported_version, last_supported_version); g_free(buff); } /** Send a message to one player */ void player_send(Player * player, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...) { gchar *buff; va_list ap; if (player->version < first_supported_version || player->version > last_supported_version) return; va_start(ap, fmt); buff = game_vprintf(fmt, ap); va_end(ap); sm_write(player->sm, buff); g_free(buff); } /** Send a message to one player, even when caching is turned on */ void player_send_uncached(Player * player, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...) { gchar *buff; va_list ap; if (player->version < first_supported_version || player->version > last_supported_version) return; va_start(ap, fmt); buff = game_vprintf(fmt, ap); va_end(ap); sm_write_uncached(player->sm, buff); g_free(buff); } void player_set_name(Player * player, gchar * name) { player_set_name_real(player, name, TRUE); } void player_remove(Player * player) { driver->player_removed(player); } GList *list_from_player(Player * player) { GList *list; for (list = player_first_real(player->game); list != NULL; list = player_next_real(list)) if (list->data == player) break; g_assert(list != NULL); return list; } GList *next_player_loop(GList * current, Player * first) { current = player_next_real(current); if (current == NULL) current = player_first_real(first->game); if (current->data == first) return NULL; return current; } void playerlist_inc_use_count(Game * game) { game->player_list_use_count++; } void playerlist_dec_use_count(Game * game) { game->player_list_use_count--; if (game->player_list_use_count == 0) { GList *current; GList *all_dead_players; current = game->dead_players; all_dead_players = game->dead_players; /* Remember this for g_list_free */ game->dead_players = NULL; /* Clear the list */ for (; current != NULL; current = g_list_next(current)) { Player *p = current->data; player_free(p); } g_list_free(all_dead_players); } } pioneers-14.1/server/pregame.c0000644000175000017500000006337311760640326013317 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003-2005 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "buildrec.h" #include "server.h" #include "version.h" static void build_add(Player * player, BuildType type, gint x, gint y, gint pos) { Game *game = player->game; Map *map = game->params->map; gint num; gint num_allowed; num_allowed = game->double_setup ? 2 : 1; /* Add settlement/road */ num = buildrec_count_type(player->build_list, type); if (num == num_allowed) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many\n"); return; } if (type == BUILD_ROAD) { /* Make sure that there are some roads left to use */ if (player->num_roads == game->params->num_build_type[BUILD_ROAD]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many road\n"); return; } /* Building a road, make sure it is next to a * settlement/road */ if (!buildrec_can_setup_road (player->build_list, map_edge(map, x, y, pos), game->double_setup)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } edge_add(player, BUILD_ROAD, x, y, pos, FALSE); return; } if (type == BUILD_BRIDGE) { /* Make sure that there are some bridges left to use */ if (player->num_bridges == game->params->num_build_type[BUILD_BRIDGE]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many bridge\n"); return; } /* Building a bridge, make sure it is next to a * settlement/road */ if (!buildrec_can_setup_bridge (player->build_list, map_edge(map, x, y, pos), game->double_setup)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } edge_add(player, BUILD_BRIDGE, x, y, pos, FALSE); return; } if (type == BUILD_SHIP) { /* Make sure that there are some ships left to use */ if (player->num_ships == game->params->num_build_type[BUILD_SHIP]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many ship\n"); return; } /* Building a ship, make sure it is next to a * settlement/ship */ if (!buildrec_can_setup_ship (player->build_list, map_edge(map, x, y, pos), game->double_setup)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } edge_add(player, BUILD_SHIP, x, y, pos, FALSE); return; } if (type != BUILD_SETTLEMENT) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR expected-road-or-settlement\n"); return; } /* Build the settlement */ if (!buildrec_can_setup_settlement (player->build_list, map_node(map, x, y, pos), game->double_setup)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } node_add(player, BUILD_SETTLEMENT, x, y, pos, FALSE, NULL); } static void build_remove(Player * player) { /* Remove the settlement/road we just built */ if (!perform_undo(player)) player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); } static void start_setup_player(Player * player) { StateMachine *sm = player->sm; Game *game = player->game; player->build_list = buildrec_free(player->build_list); if (game->double_setup) player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "setup-double\n"); else player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "setup %d\n", game->reverse_setup); sm_goto(sm, (StateFunc) mode_setup); } static void allocate_resources(Player * player, BuildRec * rec) { Game *game = player->game; Map *map = game->params->map; Node *node; gint idx; node = map_node(map, rec->x, rec->y, rec->pos); resource_start(game); for (idx = 0; idx < G_N_ELEMENTS(node->hexes); idx++) { Hex *hex = node->hexes[idx]; if (hex && hex->roll > 0) { if (hex->terrain == GOLD_TERRAIN) ++player->gold; else ++player->assets[hex->terrain]; } } /* give out the gold */ distribute_first(list_from_player(player)); return; } /* Player tried to finish setup mode */ static void try_setup_done(Player * player) { StateMachine *sm = player->sm; Game *game = player->game; Map *map = game->params->map; gint num_allowed; num_allowed = game->double_setup ? 2 : 1; /* Make sure we have built the right number of * settlements/roads */ if (buildrec_count_edges(player->build_list) != num_allowed || buildrec_count_type(player->build_list, BUILD_SETTLEMENT) != num_allowed) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR expected-build-or-remove\n"); return; } /* We have the right number, now make sure that all roads are * connected to buildings and vice-versa */ if (!buildrec_is_valid(player->build_list, map, player->num)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR unconnected\n"); return; } /* Player has finished setup phase - give resources for second * settlement */ player_send(player, FIRST_VERSION, LATEST_VERSION, "OK\n"); if (game->double_setup) allocate_resources(player, buildrec_get(player->build_list, BUILD_SETTLEMENT, 1)); else if (game->reverse_setup) allocate_resources(player, buildrec_get(player->build_list, BUILD_SETTLEMENT, 0)); else { sm_goto(sm, (StateFunc) mode_idle); next_setup_player(game); } } /* find next player to do setup. */ void next_setup_player(Game * game) { if (game->reverse_setup) { /* Going back for second setup phase */ GList *prev = NULL, *list; for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { if (list == game->setup_player) break; prev = list; } game->setup_player = prev; game->double_setup = FALSE; if (game->setup_player != NULL) { start_setup_player(game->setup_player->data); } else { /* Start the game!!! */ turn_next_player(game); } } else { /* First setup phase */ game->setup_player = player_next_real(game->setup_player); /* Last player gets double setup */ game->double_setup = player_next_real(game->setup_player) == NULL; /* Prepare to go backwards next time */ game->reverse_setup = game->double_setup; start_setup_player(game->setup_player->data); } } /* Player must place exactly one settlement and one road which connect * to each other. If last player, then perform a double setup. */ gboolean mode_setup(Player * player, gint event) { StateMachine *sm = player->sm; BuildType type; gint x, y, pos; sm_state_name(sm, "mode_setup"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "done")) { try_setup_done(player); return TRUE; } if (sm_recv(sm, "build %B %d %d %d", &type, &x, &y, &pos)) { build_add(player, type, x, y, pos); return TRUE; } if (sm_recv(sm, "undo")) { build_remove(player); return TRUE; } return FALSE; } static void try_start_game(Game * game) { GList *list; int num; int numturn; num = 0; numturn = 0; for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *player = list->data; if (sm_current(player->sm) == (StateFunc) mode_idle) num++; if (sm_current(player->sm) == (StateFunc) mode_turn || sm_current(player->sm) == (StateFunc) mode_discard_resources || sm_current(player->sm) == (StateFunc) mode_place_robber || sm_current(player->sm) == (StateFunc) mode_road_building || sm_current(player->sm) == (StateFunc) mode_monopoly || sm_current(player->sm) == (StateFunc) mode_plenty_resources) { /* looks like this player got disconnected and now it's his turn. */ num++; numturn++; } } if (num != game->params->num_players) return; if (game_is_unstartable(game)) { /* this game cannot be started, don't enter the setup phase */ return; } if (numturn > 0) { /* someone got disconnected. Now everyone's back. Let's continue the game... */ return; } /* All players have connected, and are ready to begin */ if (game->tournament_timer != 0) { g_source_remove(game->tournament_timer); game->tournament_timer = 0; } meta_start_game(); game->setup_player = player_first_real(game); while (((Player *) game->setup_player->data)->num < 0) game->setup_player = game->setup_player->next; game->double_setup = game->reverse_setup = FALSE; start_setup_player(game->setup_player->data); } /* Send the player list to the client */ static void send_player_list(Player * player) { Game *game = player->game; GList *list; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "players follow\n"); for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *scan = list->data; if (player == scan || scan->num < 0) continue; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d is %s\n", scan->num, scan->name); player_send_uncached(player, V0_11, LATEST_VERSION, "player %d style %s\n", scan->num, scan->style); if (scan->disconnected) player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d has quit\n", scan->num); } player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, ".\n"); } /* Send the game parameters to the player (uncached) */ static void send_game_line(gpointer player, const gchar * str) { player_send_uncached((Player *) player, FIRST_VERSION, LATEST_VERSION, "%s\n", str); } gboolean send_gameinfo_uncached(const Hex * hex, void *data) { gint i; Player *player = data; for (i = 0; i < G_N_ELEMENTS(hex->nodes); i++) { if (!hex->nodes[i] || hex->nodes[i]->x != hex->x || hex->nodes[i]->y != hex->y) continue; if (hex->nodes[i]->owner >= 0) { switch (hex->nodes[i]->type) { case BUILD_SETTLEMENT: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "S%d,%d,%d,%d\n", hex->x, hex->y, i, hex->nodes[i]->owner); break; case BUILD_CITY: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "C%d,%d,%d,%d\n", hex->x, hex->y, i, hex->nodes[i]->owner); break; default: ; } if (hex->nodes[i]->city_wall) { /* Older clients see an extension message */ player_send_uncached(player, FIRST_VERSION, V0_10, "extension city wall\n"); player_send_uncached(player, V0_11, LATEST_VERSION, "W%d,%d,%d,%d\n", hex->x, hex->y, i, hex->nodes[i]->owner); } } } for (i = 0; i < G_N_ELEMENTS(hex->edges); i++) { if (!hex->edges[i] || hex->edges[i]->x != hex->x || hex->edges[i]->y != hex->y) continue; if (hex->edges[i]->owner >= 0) { switch (hex->edges[i]->type) { case BUILD_ROAD: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "R%d,%d,%d,%d\n", hex->x, hex->y, i, hex->edges[i]->owner); break; case BUILD_SHIP: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "SH%d,%d,%d,%d\n", hex->x, hex->y, i, hex->edges[i]->owner); break; case BUILD_BRIDGE: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "B%d,%d,%d,%d\n", hex->x, hex->y, i, hex->edges[i]->owner); break; default: ; } } } if (hex->robber) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "RO%d,%d\n", hex->x, hex->y); } if (hex == hex->map->pirate_hex) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "P%d,%d\n", hex->x, hex->y); } return FALSE; } /* Player setup phase */ gboolean mode_pre_game(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; Map *map = game->params->map; StateFunc state; const gchar *prevstate; gint i; GList *next; gint longestroadpnum = -1; gint largestarmypnum = -1; static gboolean recover_from_plenty = FALSE; guint stack_offset; gchar *player_style; if (game->longest_road) { longestroadpnum = game->longest_road->num; } if (game->largest_army) { largestarmypnum = game->largest_army->num; } sm_state_name(sm, "mode_pre_game"); switch (event) { case SM_ENTER: player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d of %d, welcome to pioneers server %s\n", player->num, game->params->num_players, FULL_VERSION); /* Tell the player that he exists. This is not done in * player_set_name, because at that point the client doesn't * know how many players are in the game, and therefore if * he is a player or a spectator. */ /* Tell the other players about this player */ player_broadcast(player, PB_OTHERS, FIRST_VERSION, LATEST_VERSION, "is %s\n", player->name); /* Tell this player his own name */ player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d is %s\n", player->num, player->name); break; case SM_RECV: if (sm_recv(sm, "style %S", &player_style)) { if (player->style) g_free(player->style); player->style = player_style; player_broadcast(player, PB_OTHERS, V0_11, LATEST_VERSION, "style %s\n", player_style); player_send_uncached(player, V0_11, LATEST_VERSION, "player %d style %s\n", player->num, player_style); return TRUE; } if (sm_recv(sm, "players")) { send_player_list(player); return TRUE; } if (sm_recv(sm, "game")) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "game\n"); params_write_lines(game->params, player->version, FALSE, send_game_line, player); player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "end\n"); return TRUE; } if (sm_recv(sm, "gameinfo")) { GList *list; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "gameinfo\n"); map_traverse_const(map, send_gameinfo_uncached, player); player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, ".\n"); /* Notify old clients about new features */ if (game->params->num_build_type[BUILD_CITY_WALL] > 0) { player_send_uncached(player, FIRST_VERSION, V0_10, "extension city wall\n"); } /* now, send state info */ player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "turn num %d\n", game->curr_turn); if (game->curr_player >= 0) { Player *playerturn = player_by_num(game, game->curr_player); player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player turn: %d\n", playerturn->num); } if (game->rolled_dice) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "dice rolled: %d %d\n", game->die1, game->die2); } else if (game->die1 + game->die2 > 1) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "dice value: %d %d\n", game->die1, game->die2); } if (game->played_develop) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "played develop\n"); } if (game->bought_develop) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "bought develop\n"); } if (player->disconnected) { player_send_uncached(player, FIRST_VERSION, V0_12, "player disconnected\n"); } stack_offset = 1; state = sm_stack_inspect(sm, stack_offset); while ((state == (StateFunc) mode_choose_gold) || (state == (StateFunc) mode_wait_for_gold_choosing_players)) { ++stack_offset; state = sm_stack_inspect(sm, stack_offset); } if (state == (StateFunc) mode_idle) prevstate = "IDLE"; else if (state == (StateFunc) mode_turn) prevstate = "TURN"; else if (state == (StateFunc) mode_discard_resources) prevstate = "DISCARD"; else if (state == (StateFunc) mode_wait_for_other_discarding_players) prevstate = "DISCARD"; else if (state == (StateFunc) mode_place_robber) prevstate = "YOUAREROBBER"; else if (state == (StateFunc) mode_road_building) prevstate = "ROADBUILDING"; else if (state == (StateFunc) mode_monopoly) prevstate = "MONOPOLY"; else if (state == (StateFunc) mode_plenty_resources) { recover_from_plenty = TRUE; prevstate = "PLENTY"; } else if (state == (StateFunc) mode_setup) { if (game->double_setup) prevstate = "SETUPDOUBLE"; else if (game->reverse_setup) prevstate = "RSETUP"; else prevstate = "SETUP"; /* If player is selecting gold, the state * should be IDLE instead */ if (stack_offset != 1) prevstate = "IDLE"; } else prevstate = "PREGAME"; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "state %s\n", prevstate); /* Send the bank, so the client can count remaining * resources */ player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "bank %R\n", game->bank_deck); /* Send the number of development cards played, so the * client knows how many are left. */ player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "development-bought %d\n", game->develop_next); /* Send player info about what he has: resources, dev cards, roads, # roads, # bridges, # ships, # settles, # cities, # soldiers, road len, dev points, who has longest road/army, spectators will receive an empty list */ player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "playerinfo: resources: %R\n", player->assets); player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "playerinfo: numdevcards: %d\n", player->devel->num_cards); for (i = 0; i < player->devel->num_cards; i++) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "playerinfo: devcard: %d %d\n", (gint) player-> devel->cards[i].type, player-> devel->cards[i]. turn_bought); } player_send_uncached(player, V14, LATEST_VERSION, "playerinfo: %d %d %d %d %d %d %d %d %d %d %d %d %d\n", player->num_roads, player->num_bridges, player->num_ships, player->num_settlements, player->num_cities, player->num_soldiers, player->chapel_played, player->univ_played, player->gov_played, player->libr_played, player->market_played, (player->num == longestroadpnum), (player->num == largestarmypnum)); player_send_uncached(player, FIRST_VERSION, V0_12, "playerinfo: %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", player->num_roads, player->num_bridges, player->num_ships, player->num_settlements, player->num_cities, player->num_soldiers, 0, player->chapel_played, player->univ_played, player->gov_played, player->libr_played, player->market_played, (player->num == longestroadpnum), (player->num == largestarmypnum)); /* Send special points */ list = player->special_points; while (list) { Points *points = list->data; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "get-point %d %d %d %s\n", player->num, points->id, points->points, points->name); list = g_list_next(list); } /* Send info about other players */ for (next = player_first_real(game); next != NULL; next = player_next_real(next)) { Player *p = (Player *) next->data; gint numassets = 0; if (p->num == player->num) continue; for (i = 0; i < NO_RESOURCE; i++) { numassets += p->assets[i]; } player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "otherplayerinfo: %d %d %d %d %d %d %d %d %d %d %d\n", p->num, numassets, p->devel->num_cards, p->num_soldiers, p->chapel_played, p->univ_played, p->gov_played, p->libr_played, p->market_played, (p->num == longestroadpnum), (p->num == largestarmypnum)); /* Send special points */ list = p->special_points; while (list) { Points *points = list->data; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "get-point %d %d %d %s\n", p->num, points->id, points-> points, points->name); list = g_list_next(list); } } /* Send build info for the current player - what builds the player was in the process of building when he disconnected */ for (next = player->build_list; next != NULL; next = g_list_next(next)) { BuildRec *build = (BuildRec *) next->data; player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "buildinfo: %B %d %d %d\n", build->type, build->x, build->y, build->pos); } player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "end\n"); return TRUE; } if (sm_recv(sm, "start")) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "OK\n"); /* Some player was in the setup phase */ if (game->setup_player != NULL && (Player *) game->setup_player->data != player) { gint num = ((Player *) (game->setup_player-> data))->num; if (game->double_setup) player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d setup-double\n", num); else player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d setup %d\n", num, game-> reverse_setup); } if (recover_from_plenty) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "plenty %R\n", game->bank_deck); recover_from_plenty = FALSE; } /* send discard and gold info for all players */ for (next = player_first_real(game); next != NULL; next = player_next_real(next)) { Player *p = (Player *) next->data; if (p->discard_num > 0) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d must-discard %d\n", p->num, p-> discard_num); } if (p->gold > 0) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d prepare-gold %d\n", p->num, p->gold); } } /* The current player was choosing gold */ state = sm_stack_inspect(sm, 1); if (state == (StateFunc) mode_choose_gold) { gint limited_bank[NO_RESOURCE]; gold_limited_bank(game, player->gold, limited_bank); player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "choose-gold %d %R\n", player->gold, limited_bank); } /* Trade was in progress */ if (game->curr_player != -1 && (StateFunc) mode_domestic_initiate == sm_stack_inspect(player_by_num (game, game->curr_player)->sm, 0)) { QuoteInfo *quote = quotelist_first(game->quotes); player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d domestic-trade call supply %R receive %R\n", game->curr_player, game->quote_supply, game->quote_receive); while (quote) { if (quote->is_domestic) { player_send_uncached (player, FIRST_VERSION, LATEST_VERSION, "player %d domestic-quote quote %d supply %R receive %R\n", quote->var.d. player_num, quote->var.d. quote_num, quote->var.d.supply, quote->var.d.receive); } quote = quotelist_next(quote); } /* The player already rejected all quotes, * send reject again */ if (state == (StateFunc) mode_domestic_quote_rejected) { player_send_uncached(player, FIRST_VERSION, LATEST_VERSION, "player %d domestic-quote finish\n", player->num); } } sm_set_use_cache(sm, FALSE); if (player->disconnected) { player->disconnected = FALSE; driver->player_change(game); if (!sm_is_connected(sm)) /* This happens when the connection is * dropped when the cache is sent */ sm_goto(sm, (StateFunc) mode_spectator); else sm_pop(sm); } else { if (!player_is_spectator (game, player->num)) sm_goto(sm, (StateFunc) mode_idle); else sm_goto(sm, (StateFunc) mode_spectator); } try_start_game(game); return TRUE; } break; default: break; } return FALSE; } pioneers-14.1/server/resource.c0000644000175000017500000000563010650205126013506 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "cost.h" #include "server.h" gboolean resource_available(Player * player, gint * resources, gint * num_in_bank) { Game *game = player->game; gint idx; if (num_in_bank != NULL) *num_in_bank = 0; for (idx = 0; idx < NO_RESOURCE; idx++) { if (resources[idx] > game->bank_deck[idx]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR no-cards %r\n", idx); return FALSE; } if (num_in_bank != NULL) *num_in_bank += game->bank_deck[idx]; } return TRUE; } void resource_start(Game * game) { GList *list; for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *player = list->data; memcpy(player->prev_assets, player->assets, sizeof(player->assets)); player->gold = 0; } } void resource_end(Game * game, const gchar * action, gint mult) { GList *list; for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *player = list->data; gint resource[NO_RESOURCE]; int idx; gboolean send_message = FALSE; for (idx = 0; idx < G_N_ELEMENTS(player->assets); idx++) { gint num; num = player->assets[idx] - player->prev_assets[idx]; if (game->bank_deck[idx] - num < 0) { num = game->bank_deck[idx]; player->assets[idx] = player->prev_assets[idx] + num; } resource[idx] = num; if (num != 0) send_message = TRUE; game->bank_deck[idx] -= num; } if (send_message) { for (idx = 0; idx < NO_RESOURCE; idx++) resource[idx] *= mult; player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "%s %R\n", action, resource); } } } void resource_spend(Player * player, const gint * cost) { Game *game = player->game; resource_start(game); cost_buy(cost, player->assets); resource_end(game, "spent", -1); } void resource_refund(Player * player, const gint * cost) { Game *game = player->game; resource_start(game); cost_refund(cost, player->assets); resource_end(game, "refund", 1); } pioneers-14.1/server/robber.c0000644000175000017500000002731711635343554013154 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "server.h" static Hex *previous_robber_hex; static void move_pirate(Player * player, Hex * hex, gboolean is_undo) { Map *map = hex->map; previous_robber_hex = map->pirate_hex; map->pirate_hex = hex; /* 0.10 didn't know about undo for movement, so move happens * only after stealing has been done. */ if (is_undo) { player_broadcast(player, PB_ALL, V0_11, LATEST_VERSION, "unmoved-pirate %d %d\n", hex->x, hex->y); } else { player_broadcast(player, PB_ALL, V0_11, LATEST_VERSION, "moved-pirate %d %d\n", hex->x, hex->y); } } static void move_robber(Player * player, Hex * hex, gboolean is_undo) { Map *map = hex->map; previous_robber_hex = map->robber_hex; if (map->robber_hex) map->robber_hex->robber = FALSE; map->robber_hex = hex; map->robber_hex->robber = TRUE; /* 0.10 didn't know about undo for movement, so move happens * only after stealing has been done. */ if (is_undo) { player_broadcast(player, PB_ALL, V0_11, LATEST_VERSION, "unmoved-robber %d %d\n", hex->x, hex->y); } else { player_broadcast(player, PB_ALL, V0_11, LATEST_VERSION, "moved-robber %d %d\n", hex->x, hex->y); } } static void steal_card_from(Player * player, Player * victim) { Game *game = player->game; gint idx; gint num; gint steal; GList *list; /* Work out how many cards the victim has */ num = 0; for (idx = 0; idx < G_N_ELEMENTS(victim->assets); idx++) num += victim->assets[idx]; if (num == 0) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR no-resources\n"); return; } /* Work out which card to steal from the victim */ steal = get_rand(num); for (idx = 0; idx < G_N_ELEMENTS(victim->assets); idx++) { steal -= victim->assets[idx]; if (steal < 0) break; } /* Now inform the various parties of the theft. All * interested parties find out which card was stolen, the * others just hear about the theft. */ for (list = game->player_list; list != NULL; list = g_list_next(list)) { Player *scan = list->data; if (scan->num >= 0 && !scan->disconnected) { if (scan == player || scan == victim) { player_send(scan, FIRST_VERSION, LATEST_VERSION, "player %d stole %r from %d\n", player->num, idx, victim->num); } else player_send(scan, FIRST_VERSION, LATEST_VERSION, "player %d stole from %d\n", player->num, victim->num); } } /* Alter the assets of the respective players */ player->assets[idx]++; victim->assets[idx]--; } static void done_robbing_pre_steal(Player * player) { Game *game = player->game; Map *map = game->params->map; Hex *hex = map_robber_hex(map); if (hex) { player_broadcast(player, PB_RESPOND, FIRST_VERSION, V0_10, "moved-robber %d %d\n", hex->x, hex->y); } } static void done_robbing_post_steal(Player * player) { sm_pop(player->sm); player_send(player, V0_11, LATEST_VERSION, "robber-done\n"); } static void do_select_robbed(Player * player, Hex * hex, gint victim_num) { Game *game = player->game; Player *owner; Resource resource; gint idx; /* Check if the victim has any resources */ owner = player_by_num(game, victim_num); if (!owner) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-player: not found\n"); return; } for (resource = 0; resource < NO_RESOURCE; resource++) if (owner->assets[resource] != 0) break; if (resource == NO_RESOURCE) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-player: no resources\n"); return; } for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) { Node *node = hex->nodes[idx]; if (node->type == BUILD_NONE || node->owner != victim_num) continue; /* Victim has resources and has a building there: steal. */ done_robbing_pre_steal(player); steal_card_from(player, owner); done_robbing_post_steal(player); return; } player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-player: no buildings\n"); } /* Wait for the player to select a building to rob */ gboolean mode_select_robbed(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; Map *map = game->params->map; gint victim_num; Hex *hex; sm_state_name(sm, "mode_select_robbed"); hex = map_robber_hex(map); if (event == SM_ENTER) { player_send(player, FIRST_VERSION, LATEST_VERSION, "rob %d %d\n", hex->x, hex->y); return TRUE; } if (event != SM_RECV) return FALSE; if (sm_recv(sm, "undo")) { robber_undo(player); return TRUE; } if (!sm_recv(sm, "rob %d", &victim_num)) return FALSE; do_select_robbed(player, hex, victim_num); return TRUE; } static void do_select_pirated(Player * player, Hex * hex, gint victim_num) { Game *game = player->game; Player *owner; Resource resource; gint idx; /* Check if the victim has any resources */ owner = player_by_num(game, victim_num); if (!owner) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-player: not found\n"); return; } for (resource = 0; resource < NO_RESOURCE; resource++) if (owner->assets[resource] != 0) break; if (resource == NO_RESOURCE) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-player: no resources\n"); return; } for (idx = 0; idx < G_N_ELEMENTS(hex->edges); ++idx) { Edge *edge = hex->edges[idx]; if (edge->type != BUILD_SHIP || edge->owner != victim_num) continue; /* Victim has resources and has a ship there: steal. */ done_robbing_pre_steal(player); steal_card_from(player, owner); done_robbing_post_steal(player); return; } player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-player: no ships\n"); } /* Wait for the player to select a ship to rob */ gboolean mode_select_pirated(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; Map *map = game->params->map; gint victim_num; Hex *hex; sm_state_name(sm, "mode_select_pirated"); hex = map_pirate_hex(map); if (event == SM_ENTER) { player_send(player, FIRST_VERSION, LATEST_VERSION, "rob %d %d\n", hex->x, hex->y); return TRUE; } if (event != SM_RECV) return FALSE; if (sm_recv(sm, "undo")) { robber_undo(player); return TRUE; } if (!sm_recv(sm, "rob %d", &victim_num)) return FALSE; do_select_pirated(player, hex, victim_num); return TRUE; } /* Wait for the player to place the robber */ gboolean mode_place_robber(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; Map *map = game->params->map; gint x, y; Hex *hex; gint idx; gint one_victim; gint victim_num = -1; gboolean old_style; sm_state_name(sm, "mode_place_robber"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "move-robber %d %d %d", &x, &y, &victim_num)) old_style = TRUE; else if (sm_recv(sm, "move-robber %d %d", &x, &y)) old_style = FALSE; else return FALSE; hex = map_hex(map, x, y); if (hex == NULL || !can_robber_or_pirate_be_moved(hex)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return TRUE; } /* check if the pirate was moved. */ if (hex->terrain == SEA_TERRAIN) { move_pirate(player, hex, FALSE); /* If there is no-one to steal from, or the players have no * resources, we cannot steal resources. */ one_victim = -1; for (idx = 0; idx < G_N_ELEMENTS(hex->edges); ++idx) { Edge *edge = hex->edges[idx]; Player *owner; Resource resource; if (edge->type != BUILD_SHIP || edge->owner == player->num) /* Can't steal from myself */ continue; /* Check if the node owner has any resources */ owner = player_by_num(game, edge->owner); for (resource = 0; resource < NO_RESOURCE; resource++) if (owner->assets[resource] != 0) break; if (resource == NO_RESOURCE) continue; /* Has resources - we can steal */ if (one_victim == owner->num) /* We already knew about this player. */ continue; if (one_victim >= 0) /* This is the second victim, which means * there is choice. That's all we need to * know. */ break; one_victim = owner->num; } if (idx != G_N_ELEMENTS(hex->edges)) { /* There is choice for stealing. Wait for the * user to choose. */ if (old_style) { /* The user already chose. */ do_select_pirated(player, hex, victim_num); } else sm_goto(sm, (StateFunc) mode_select_pirated); return TRUE; } if (one_victim < 0) { /* No one to steal from - resume turn */ done_robbing_pre_steal(player); done_robbing_post_steal(player); return TRUE; } /* Only one victim: automatically steal. */ done_robbing_pre_steal(player); steal_card_from(player, player_by_num(game, one_victim)); done_robbing_post_steal(player); return TRUE; } /* It wasn't the pirate; it was the robber. */ move_robber(player, hex, FALSE); /* If there is no-one to steal from, or the players have no * resources, we cannot steal resources. */ one_victim = -1; for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) { Node *node = hex->nodes[idx]; Player *owner; Resource resource; if (node->type == BUILD_NONE || node->owner == player->num) /* Can't steal from myself */ continue; /* Check if the node owner has any resources */ owner = player_by_num(game, node->owner); for (resource = 0; resource < NO_RESOURCE; resource++) if (owner->assets[resource] != 0) break; if (resource == NO_RESOURCE) continue; /* Has resources - we can steal */ if (one_victim == owner->num) /* We already knew about this player. */ continue; if (one_victim >= 0) /* This is the second victim, which means * there is choice. That's all we need to * know. */ break; one_victim = owner->num; } if (idx != G_N_ELEMENTS(hex->nodes)) { /* There is choice for stealing. Wait for the user to choose. */ if (old_style) { /* The user already chose. */ do_select_robbed(player, hex, victim_num); } else sm_goto(sm, (StateFunc) mode_select_robbed); return TRUE; } if (one_victim < 0) { /* No one to steal from - resume turn */ done_robbing_pre_steal(player); done_robbing_post_steal(player); return TRUE; } /* Only one victim: automatically steal. */ done_robbing_pre_steal(player); steal_card_from(player, player_by_num(game, one_victim)); done_robbing_post_steal(player); return TRUE; } void robber_place(Player * player) { StateMachine *sm = player->sm; player_broadcast(player, PB_OTHERS, FIRST_VERSION, LATEST_VERSION, "is-robber\n"); player_send(player, FIRST_VERSION, LATEST_VERSION, "you-are-robber\n"); sm_push(sm, (StateFunc) mode_place_robber); } void robber_undo(Player * player) { if (previous_robber_hex->terrain == SEA_TERRAIN) move_pirate(player, previous_robber_hex, TRUE); else move_robber(player, previous_robber_hex, TRUE); sm_goto(player->sm, (StateFunc) mode_place_robber); player_send(player, V0_11, LATEST_VERSION, "undo-robber\n"); } pioneers-14.1/server/server.c0000644000175000017500000003430511714737300013174 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include #include "server.h" static GameParams *load_game_desc(const gchar * fname); static GSList *_game_list = NULL; /* The list of GameParams, ordered by title */ #define TERRAIN_DEFAULT 0 #define TERRAIN_RANDOM 1 static gboolean timed_out(gpointer data) { Game *game = data; log_message(MSG_INFO, _("" "Was hanging around for too long without players... bye.\n")); request_server_stop(game); return FALSE; } void start_timeout(Game * game) { if (!game->no_player_timeout) return; game->no_player_timer = g_timeout_add(game->no_player_timeout * 1000, timed_out, game); } void stop_timeout(Game * game) { if (game->no_player_timer != 0) { g_source_remove(game->no_player_timer); game->no_player_timer = 0; } } gint get_rand(gint range) { return g_rand_int_range(g_rand_ctx, 0, range); } Game *game_new(const GameParams * params) { Game *game; gint idx; game = g_malloc0(sizeof(*game)); game->accept_tag = 0; game->accept_fd = -1; game->is_running = FALSE; game->is_game_over = FALSE; game->params = params_copy(params); game->curr_player = -1; for (idx = 0; idx < G_N_ELEMENTS(game->bank_deck); idx++) game->bank_deck[idx] = game->params->resource_count; develop_shuffle(game); if (params->random_terrain) map_shuffle_terrain(game->params->map); return game; } void game_free(Game * game) { if (game == NULL) return; server_stop(game); g_assert(game->player_list_use_count == 0); if (game->server_port != NULL) g_free(game->server_port); params_free(game->params); g_free(game); } gint accept_connection(gint in_fd, gchar ** location) { int fd; gchar *error_message; gchar *port; fd = net_accept(in_fd, &error_message); if (fd < 0) { log_message(MSG_ERROR, "%s\n", error_message); g_free(error_message); return -1; } g_assert(location != NULL); if (!net_get_peer_name(fd, location, &port, &error_message)) { log_message(MSG_ERROR, "%s\n", error_message); g_free(error_message); } g_free(port); return fd; } gint add_computer_player(Game * game, gboolean want_chat) { gchar *child_argv[10]; GError *error = NULL; gint ret = 0; gint n = 0; gint i; child_argv[n++] = g_strdup(PIONEERS_AI_PATH); child_argv[n++] = g_strdup(PIONEERS_AI_PATH); child_argv[n++] = g_strdup("-s"); child_argv[n++] = g_strdup(PIONEERS_DEFAULT_GAME_HOST); child_argv[n++] = g_strdup("-p"); child_argv[n++] = g_strdup(game->server_port); child_argv[n++] = g_strdup("-n"); child_argv[n++] = player_new_computer_player(game); if (!want_chat) child_argv[n++] = g_strdup("-c"); child_argv[n] = NULL; g_assert(n < 10); if (!g_spawn_async(NULL, child_argv, NULL, 0, NULL, NULL, NULL, &error)) { log_message(MSG_ERROR, _("Error starting %s: %s\n"), PIONEERS_AI_PATH, error->message); g_error_free(error); ret = -1; } for (i = 0; child_argv[i] != NULL; i++) g_free(child_argv[i]); return ret; } static void player_connect(Game * game) { gchar *location; gint fd = accept_connection(game->accept_fd, &location); if (fd > 0) { if (player_new_connection(game, fd, location) != NULL) stop_timeout(game); } g_free(location); } static gboolean game_server_start(Game * game, gboolean register_server, const gchar * meta_server_name) { gchar *error_message; game->accept_fd = net_open_listening_socket(game->server_port, &error_message); if (game->accept_fd == -1) { log_message(MSG_ERROR, "%s\n", error_message); g_free(error_message); return FALSE; } game->is_running = TRUE; start_timeout(game); game->accept_tag = driver->input_add_read(game->accept_fd, (InputFunc) player_connect, game); if (register_server) { g_assert(meta_server_name != NULL); meta_register(meta_server_name, PIONEERS_DEFAULT_META_PORT, game); } return TRUE; } /** Try to start a new server. * @param params The parameters of the game * @param hostname The hostname that will be visible in the meta server * @param port The port to listen to * @param register_server Register at the meta server * @param meta_server_name The hostname of the meta server * @param random_order Randomize the player number * @return A pointer to the new game, or NULL */ Game *server_start(const GameParams * params, const gchar * hostname, const gchar * port, gboolean register_server, const gchar * meta_server_name, gboolean random_order) { Game *game; guint32 randomseed = time(NULL); g_return_val_if_fail(params != NULL, NULL); g_return_val_if_fail(port != NULL, NULL); #ifdef PRINT_INFO g_print("game type: %s\n", params->title); g_print("num players: %d\n", params->num_players); g_print("victory points: %d\n", params->victory_points); g_print("terrain type: %s\n", (params->random_terrain) ? "random" : "default"); g_print("Tournament time: %d\n", params->tournament_time); g_print("Quit when done: %d\n", params->quit_when_done); #endif g_rand_ctx = g_rand_new_with_seed(randomseed); log_message(MSG_INFO, "%s #%" G_GUINT32_FORMAT ".%s.%03d\n", /* Server: preparing game #..... */ _("Preparing game"), randomseed, "G", get_rand(1000)); game = game_new(params); g_assert(game->server_port == NULL); game->server_port = g_strdup(port); g_assert(game->hostname == NULL); if (hostname && strlen(hostname) > 0) { game->hostname = g_strdup(hostname); } game->random_order = random_order; if (!game_server_start(game, register_server, meta_server_name)) { game_free(game); game = NULL; } return game; } /** Stop the server. * @param game A game * @return TRUE if the game changed from running to stopped */ gboolean server_stop(Game * game) { GList *current; if (!server_is_running(game)) return FALSE; meta_unregister(); game->is_running = FALSE; if (game->accept_tag) { driver->input_remove(game->accept_tag); game->accept_tag = 0; } if (game->accept_fd >= 0) { close(game->accept_fd); game->accept_fd = -1; } playerlist_inc_use_count(game); current = game->player_list; while (current != NULL) { Player *player = current->data; player_remove(player); player_free(player); current = g_list_next(current); } playerlist_dec_use_count(game); return TRUE; } /** Return true if a game is running */ gboolean server_is_running(Game * game) { if (game != NULL) return game->is_running; return FALSE; } static gint sort_function(gconstpointer a, gconstpointer b) { return (strcmp(((const GameParams *) a)->title, ((const GameParams *) b)->title)); } static gboolean game_list_add_item(GameParams * item) { /* check for name collisions */ if (item->title && game_list_find_item(item->title)) { gchar *nt; gint i; if (params_is_equal (item, game_list_find_item(item->title))) { return FALSE; } /* append a number */ for (i = 1; i <= INT_MAX; i++) { nt = g_strdup_printf("%s%d", item->title, i); if (!game_list_find_item(nt)) { g_free(item->title); item->title = nt; break; } g_free(nt); } /* give up and skip this game */ if (item->title != nt) { g_free(nt); return FALSE; } } _game_list = g_slist_insert_sorted(_game_list, item, sort_function); return TRUE; } /** Returns TRUE if the game list is empty */ static gboolean game_list_is_empty(void) { return _game_list == NULL; } static gint game_list_locate(gconstpointer param, gconstpointer argument) { const GameParams *data = param; const gchar *title = argument; return strcmp(data->title, title); } const GameParams *game_list_find_item(const gchar * title) { GSList *result; if (!_game_list) { return NULL; } result = g_slist_find_custom(_game_list, title, game_list_locate); if (result) return result->data; else return NULL; } void game_list_foreach(GFunc func, gpointer user_data) { if (_game_list) { g_slist_foreach(_game_list, func, user_data); } } GameParams *load_game_desc(const gchar * fname) { GameParams *params; params = params_load_file(fname); if (params == NULL) g_warning("Skipping: %s", fname); return params; } static void game_list_prepare_directory(const gchar * directory) { GDir *dir; const gchar *fname; gchar *fullname; log_message(MSG_INFO, _("Looking for games in '%s'\n"), directory); if ((dir = g_dir_open(directory, 0, NULL)) == NULL) { log_message(MSG_INFO, _("Game directory '%s' not found\n"), directory); return; } while ((fname = g_dir_read_name(dir))) { GameParams *params; gint len = strlen(fname); if (len < 6 || strcmp(fname + len - 5, ".game") != 0) continue; fullname = g_build_filename(directory, fname, NULL); params = load_game_desc(fullname); g_free(fullname); if (params) { if (!game_list_add_item(params)) params_free(params); } } g_dir_close(dir); } void game_list_prepare(void) { gchar *directory; directory = g_build_filename(g_get_user_data_dir(), "pioneers", NULL); game_list_prepare_directory(directory); g_free(directory); game_list_prepare_directory(get_pioneers_dir()); if (game_list_is_empty()) g_error("No games available"); } void game_list_cleanup(void) { GSList *games = _game_list; while (games) { params_free(games->data); games = g_slist_next(games); } g_slist_free(_game_list); } /* game configuration functions / callbacks */ void cfg_set_num_players(GameParams * params, gint num_players) { #ifdef PRINT_INFO g_print("cfg_set_num_players: %d\n", num_players); #endif g_return_if_fail(params != NULL); params->num_players = CLAMP(num_players, 2, MAX_PLAYERS); } void cfg_set_sevens_rule(GameParams * params, gint sevens_rule) { #ifdef PRINT_INFO g_print("cfg_set_sevens_rule: %d\n", sevens_rule); #endif g_return_if_fail(params != NULL); params->sevens_rule = CLAMP(sevens_rule, 0, 2); } void cfg_set_victory_points(GameParams * params, gint victory_points) { #ifdef PRINT_INFO g_print("cfg_set_victory_points: %d\n", victory_points); #endif g_return_if_fail(params != NULL); params->victory_points = MAX(3, victory_points); } /** Attempt to find a game with @a title in @a directory. * @param title The game must match this title * @param directory Look in this directory for *.game files * @return The GameParams, or NULL if the title was not found */ static GameParams *server_find_title_in_directory(const gchar * title, const gchar * directory) { GDir *dir; const gchar *fname; gchar *fullname; log_message(MSG_INFO, _("Looking for games in '%s'\n"), directory); if ((dir = g_dir_open(directory, 0, NULL)) == NULL) { log_message(MSG_INFO, _("Game directory '%s' not found\n"), directory); return NULL; } while ((fname = g_dir_read_name(dir))) { GameParams *params; gint len = strlen(fname); if (len < 6 || strcmp(fname + len - 5, ".game") != 0) continue; fullname = g_build_filename(directory, fname, NULL); params = load_game_desc(fullname); g_free(fullname); if (params) { if (strcmp(params->title, title) == 0) { g_dir_close(dir); return params; } params_free(params); } } g_dir_close(dir); return NULL; } /** Find a game with @a title in the default locations. * @param title The title of the game_new * @return The GameParams or NULL if the title was not found */ static GameParams *server_find_title(const gchar * title) { GameParams *result; gchar *directory; directory = g_build_filename(g_get_user_data_dir(), "pioneers", NULL); result = server_find_title_in_directory(title, directory); g_free(directory); if (result == NULL) { result = server_find_title_in_directory(title, get_pioneers_dir()); } return result; } GameParams *cfg_set_game(const gchar * game) { #ifdef PRINT_INFO g_print("cfg_set_game: %s\n", game); #endif if (game_list_is_empty()) { return server_find_title(game); } else { return params_copy(game_list_find_item(game)); } } GameParams *cfg_set_game_file(const gchar * game_filename) { #ifdef PRINT_INFO g_print("cfg_set_game_file: %s\n", game_filename); #endif return params_load_file(game_filename); } void cfg_set_terrain_type(GameParams * params, gint terrain_type) { #ifdef PRINT_INFO g_print("cfg_set_terrain_type: %d\n", terrain_type); #endif g_return_if_fail(params != NULL); params->random_terrain = (terrain_type == TERRAIN_RANDOM) ? 1 : 0; } void cfg_set_tournament_time(GameParams * params, gint tournament_time) { #ifdef PRINT_INFO g_print("cfg_set_tournament_time: %d\n", tournament_time); #endif g_return_if_fail(params != NULL); params->tournament_time = tournament_time; } void cfg_set_quit(GameParams * params, gboolean quitdone) { #ifdef PRINT_INFO g_print("cfg_set_quit: %d\n", quitdone); #endif g_return_if_fail(params != NULL); params->quit_when_done = quitdone; } void admin_broadcast(Game * game, const gchar * message) { /* The message that is sent must not be translated */ player_broadcast(player_none(game), PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE1 %s|%s\n", message, "%s"); } /* server initialization */ void server_init(void) { /* Broken pipes can happen when multiple players disconnect * simultaneously. This mostly happens to AI's, which disconnect * when the game is over. */ /* SIGPIPE does not exist for G_OS_WIN32 */ #ifndef G_OS_WIN32 struct sigaction sa; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sa.sa_handler = SIG_IGN; sigaction(SIGPIPE, &sa, NULL); #endif /* G_OS_WIN32 */ } gboolean game_is_unstartable(Game * game) { return game->params->num_build_type[BUILD_SETTLEMENT] < 2; } pioneers-14.1/server/server.h0000644000175000017500000002574711704117540013210 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003-2007 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __server_h #define __server_h #include "game.h" #include "cards.h" #include "map.h" #include "quoteinfo.h" #include "state.h" #define TERRAIN_DEFAULT 0 #define TERRAIN_RANDOM 1 typedef struct Game Game; typedef struct { StateMachine *sm; /* state machine for this player */ Game *game; /* game that player belongs to */ gchar *location; /* reverse lookup player hostname */ gint num; /* number each player */ char *name; /* give each player a name */ gchar *style; /* description of the player icon */ ClientVersionType version; /* version, so adapted messages can be sent */ GList *build_list; /* list of building that can be undone */ gint prev_assets[NO_RESOURCE]; /* remember previous resources */ gint assets[NO_RESOURCE]; /* our resources */ gint gold; /* how much gold will we recieve? */ DevelDeck *devel; /* development cards we own */ GList *special_points; /* points from special actions */ gint special_points_next_id; /* Next id for the special points */ gint discard_num; /* number of resources we must discard */ gint num_roads; /* number of roads available */ gint num_bridges; /* number of bridges available */ gint num_ships; /* number of ships available */ gint num_settlements; /* settlements available */ gint num_cities; /* cities available */ gint num_city_walls; /* city walls available */ gint num_soldiers; /* number of soldiers played */ gint develop_points; /* number of development card victory points */ gint chapel_played; /* number of Chapel cards played */ gint univ_played; /* number of University cards played */ gint gov_played; /* number of Governors cards played */ gint libr_played; /* number of Library cards played */ gint market_played; /* number of Market cards played */ gint islands_discovered; /* number of islands discovered */ gboolean disconnected; } Player; struct Game { GameParams *params; /* game parameters */ gchar *hostname; /* reported hostname */ int accept_fd; /* socket for accepting new clients */ int accept_tag; /* Gdk event tag for accept socket */ GList *player_list; /* all players in the game */ GList *dead_players; /* all players that should be removed when player_list_use_count == 0 */ gint player_list_use_count; /* # functions is in use by */ gint num_players; /* current number of players in the game */ gint tournament_countdown; /* number of remaining minutes before AIs are added */ guint tournament_timer; /* timer id */ gboolean double_setup; gboolean reverse_setup; GList *setup_player; gboolean is_game_over; /* is the game over? */ Player *longest_road; /* who holds longest road */ Player *largest_army; /* who has largest army */ QuoteList *quotes; /* domestic trade quotes */ gint quote_supply[NO_RESOURCE]; /* only valid when trading */ gint quote_receive[NO_RESOURCE]; /* only valid when trading */ gint curr_player; /* whose turn is it? */ gint curr_turn; /* current turn number */ gboolean rolled_dice; /* has dice been rolled in turn yet? */ gint die1, die2; /* latest dice values */ gboolean played_develop; /* has devel. card been played in turn? */ gboolean bought_develop; /* has devel. card been bought in turn? */ gint bank_deck[NO_RESOURCE]; /* resource card bank */ gint num_develop; /* number of development cards */ gint *develop_deck; /* development cards */ gint develop_next; /* next development card to deal */ gboolean is_running; /* is the server currently running? */ gchar *server_port; /* port to run game on */ gboolean random_order; /* is turn order randomized? */ gint no_player_timeout; /* time to wait for players */ guint no_player_timer; /* glib timer identifier */ guint no_humans_timer; /* timer id: no human players are present */ }; /**** global variables ****/ /* buildutil.c */ void check_longest_road(Game * game); void node_add(Player * player, BuildType type, int x, int y, int pos, gboolean paid_for, Points * special_points); void edge_add(Player * player, BuildType type, int x, int y, int pos, gboolean paid_for); gboolean perform_undo(Player * player); /* develop.c */ void develop_shuffle(Game * game); void develop_buy(Player * player); void develop_play(Player * player, gint idx); gboolean mode_road_building(Player * player, gint event); gboolean mode_plenty_resources(Player * player, gint event); gboolean mode_monopoly(Player * player, gint event); /* discard.c */ void discard_resources(Game * player); gboolean mode_discard_resources(Player * player, gint event); gboolean mode_wait_others_place_robber(Player * player, gint event); gboolean mode_discard_resources_place_robber(Player * player, gint event); /* meta.c */ gchar *get_server_name(void); void meta_register(const gchar * server, const gchar * port, Game * game); void meta_unregister(void); void meta_start_game(void); void meta_report_num_players(gint num_players); void meta_send_details(Game * game); /* player.c */ typedef enum { PB_ALL, PB_RESPOND, PB_SILENT, PB_OTHERS } BroadcastType; gchar *player_new_computer_player(Game * game); Player *player_new(Game * game, const gchar * name); Player *player_new_connection(Game * game, int fd, const gchar * location); Player *player_by_num(Game * game, gint num); void player_set_name(Player * player, gchar * name); Player *player_none(Game * game); void player_broadcast(Player * player, BroadcastType type, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...); void player_broadcast_extension(Player * player, BroadcastType type, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...); void player_send(Player * player, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...); void player_send_uncached(Player * player, ClientVersionType first_supported_version, ClientVersionType last_supported_version, const char *fmt, ...); void player_remove(Player * player); void player_free(Player * player); void player_archive(Player * player); void player_revive(Player * newp, char *name); GList *player_first_real(Game * game); GList *player_next_real(GList * last); GList *list_from_player(Player * player); GList *next_player_loop(GList * current, Player * first); gboolean mode_spectator(Player * player, gint event); void playerlist_inc_use_count(Game * game); void playerlist_dec_use_count(Game * game); gboolean player_is_spectator(Game * game, gint player_num); /* pregame.c */ gboolean mode_pre_game(Player * player, gint event); gboolean mode_setup(Player * player, gint event); gboolean send_gameinfo_uncached(const Hex * hex, void *player); void next_setup_player(Game * game); /* resource.c */ gboolean resource_available(Player * player, gint * resources, gint * num_in_bank); void resource_maritime_trade(Player * player, Resource supply, Resource receive, gint ratio); void resource_start(Game * game); void resource_end(Game * game, const gchar * action, gint mult); void resource_spend(Player * player, const gint * cost); void resource_refund(Player * player, const gint * cost); /* robber.c */ void robber_place(Player * player); gboolean mode_place_robber(Player * player, gint event); gboolean mode_select_pirated(Player * player, gint event); gboolean mode_select_robbed(Player * player, gint event); void robber_undo(Player * player); /* server.c */ void start_timeout(Game * game); void stop_timeout(Game * game); gint get_rand(gint range); Game *game_new(const GameParams * params); void game_free(Game * game); gint add_computer_player(Game * game, gboolean want_chat); Game *server_start(const GameParams * params, const gchar * hostname, const gchar * port, gboolean register_server, const gchar * meta_server_name, gboolean random_order); gboolean server_stop(Game * game); gboolean server_is_running(Game * game); gint accept_connection(gint in_fd, gchar ** location); gboolean game_is_unstartable(Game * game); /**** game list control functions ****/ void game_list_prepare(void); const GameParams *game_list_find_item(const gchar * title); void game_list_foreach(GFunc func, gpointer user_data); void game_list_cleanup(void); /**** callbacks to set parameters ****/ GameParams *cfg_set_game(const gchar * game); GameParams *cfg_set_game_file(const gchar * game_filename); void cfg_set_num_players(GameParams * params, gint num_players); void cfg_set_sevens_rule(GameParams * params, gint sevens_rule); void cfg_set_victory_points(GameParams * params, gint victory_points); void cfg_set_terrain_type(GameParams * params, gint terrain_type); void cfg_set_tournament_time(GameParams * params, gint tournament_time); void cfg_set_quit(GameParams * params, gboolean quitdone); void admin_broadcast(Game * game, const gchar * message); /* initialize the server */ void server_init(void); void game_is_over(Game * game); void request_server_stop(Game * game); /* trade.c */ void trade_perform_maritime(Player * player, gint ratio, Resource supply, Resource receive); gboolean mode_domestic_quote_rejected(Player * player, gint event); gboolean mode_domestic_quote(Player * player, gint event); void trade_finish_domestic(Player * player); void trade_accept_domestic(Player * player, gint partner_num, gint quote_num, gint * supply, gint * receive); gboolean mode_domestic_initiate(Player * player, gint event); void trade_begin_domestic(Player * player, gint * supply, gint * receive); /* turn.c */ gboolean mode_idle(Player * player, gint event); gboolean mode_turn(Player * player, gint event); void turn_next_player(Game * game); /** Check whether this player has won the game. * If so, return TRUE and set all state machines to idle * @param player Has this player won? * @return TRUE if the given player has won */ gboolean check_victory(Player * player); /* gold.c */ gboolean gold_limited_bank(const Game * game, int limit, gint * limited_bank); void distribute_first(GList * list); gboolean mode_choose_gold(Player * player, gint event); gboolean mode_wait_for_gold_choosing_players(Player * player, gint event); /* discard.c */ gboolean mode_wait_for_other_discarding_players(Player * player, gint event); #endif pioneers-14.1/server/trade.c0000644000175000017500000002746411575444700013001 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "cost.h" #include "server.h" void trade_perform_maritime(Player * player, gint ratio, Resource supply, Resource receive) { Game *game = player->game; const Map *map = game->params->map; gint check[NO_RESOURCE]; MaritimeInfo info; if ((!game->rolled_dice) || ((player->build_list != NULL || game->bought_develop) && game->params->strict_trade)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-time\n"); return; } if (ratio < 2 || ratio > 4) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR trade bad-ratio\n"); return; } /* Now check that the trade can actually be performed. */ map_maritime_info(map, &info, player->num); switch (ratio) { case 4: if (player->assets[supply] < 4) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR maritime trade, not 4 resources\n"); return; } break; case 3: if (!info.any_resource || player->assets[supply] < 3) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR maritime trade, not 3 resources\n"); return; } break; case 2: if (!info.specific_resource[supply] || player->assets[supply] < 2) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR maritime trade, not 2 resources\n"); return; } break; } memset(check, 0, sizeof(check)); check[receive] = 1; if (!resource_available(player, check, NULL)) return; game->bank_deck[supply] += ratio; game->bank_deck[receive]--; player->assets[supply] -= ratio; player->assets[receive]++; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "maritime-trade %d supply %r receive %r\n", ratio, supply, receive); } /* The current player has rejected the trade, * wait for the initiating player to make a new request. */ gboolean mode_domestic_quote_rejected(Player * player, G_GNUC_UNUSED gint event) { StateMachine *sm = player->sm; sm_state_name(sm, "mode_domestic_quote_rejected"); return FALSE; } gboolean mode_domestic_quote(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; gint quote_num; gint supply[NO_RESOURCE]; gint receive[NO_RESOURCE]; sm_state_name(sm, "mode_domestic_quote"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "domestic-quote finish")) { /* Player has rejected domestic trade - remove all * quotes from that player */ for (;;) { QuoteInfo *quote; quote = quotelist_find_domestic(game->quotes, player->num, -1); if (quote == NULL) break; player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "domestic-quote delete %d\n", quote->var.d.quote_num); quotelist_delete(game->quotes, quote); } player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-quote finish\n"); sm_goto(sm, (StateFunc) mode_domestic_quote_rejected); return TRUE; } if (sm_recv(sm, "domestic-quote delete %d", "e_num)) { /* Player wants to retract a quote */ QuoteInfo *quote; quote = quotelist_find_domestic(game->quotes, player->num, quote_num); if (quote == NULL) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR quote already deleted\n"); return TRUE; } quotelist_delete(game->quotes, quote); player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-quote delete %d\n", quote_num); return TRUE; } if (sm_recv(sm, "domestic-quote quote %d supply %R receive %R", "e_num, supply, receive)) { /* Make sure that quoting party can satisfy the trade */ if (!cost_can_afford(supply, player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR quote not enough resources\n"); return TRUE; } /* Make sure that the quote does not already exist */ if (quotelist_find_domestic (game->quotes, player->num, quote_num) != NULL) { player_send(player, FIRST_VERSION, LATEST_VERSION, "INFO duplicate quote\n"); return TRUE; } quotelist_add_domestic(game->quotes, player->num, quote_num, supply, receive); player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-quote quote %d supply %R receive %R\n", quote_num, supply, receive); return TRUE; } return FALSE; } /* Initiating player wants to end domestic trade */ void trade_finish_domestic(Player * player) { StateMachine *sm = player->sm; Game *game = player->game; GList *list; player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-trade finish\n"); sm_pop(sm); for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; if (scan != player && !player_is_spectator(game, scan->num)) sm_pop(scan->sm); } quotelist_free(&game->quotes); } void trade_accept_domestic(Player * player, gint partner_num, gint quote_num, gint * supply, gint * receive) { Game *game = player->game; QuoteInfo *quote; Player *partner; /* Check for valid trade scenario */ if ((!game->rolled_dice) || (((player->build_list != NULL) || (game->bought_develop)) && (game->params->strict_trade))) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR wrong-time\n"); return; } /* Initiating player accepted a quote */ quote = quotelist_find_domestic(game->quotes, partner_num, quote_num); if (quote == NULL) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR quote not found\n"); return; } /* Make sure that both parties can satisfy the trade */ if (!cost_can_afford(quote->var.d.receive, player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR quote cannot afford\n"); return; } partner = player_by_num(game, partner_num); if (!cost_can_afford(quote->var.d.supply, partner->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR quote partner cannot afford\n"); return; } /* Finally - we do the trade! */ cost_refund(quote->var.d.receive, partner->assets); cost_buy(quote->var.d.supply, partner->assets); cost_refund(quote->var.d.supply, player->assets); cost_buy(quote->var.d.receive, player->assets); player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-trade accept player %d quote %d supply %R receive %R\n", partner_num, quote_num, supply, receive); /* Remove the quote just processed. * The client should remove the quote too. */ quotelist_delete(game->quotes, quote); /* Remove all other quotes from the partner that are no * longer valid */ quote = quotelist_find_domestic(game->quotes, partner_num, -1); while (quote != NULL && quote->var.d.player_num == partner_num) { QuoteInfo *tmp = quote; quote = quotelist_next(quote); if (!cost_can_afford(tmp->var.d.supply, partner->assets)) { player_broadcast(partner, PB_ALL, FIRST_VERSION, LATEST_VERSION, "domestic-quote delete %d\n", tmp->var.d.quote_num); quotelist_delete(game->quotes, tmp); } } } static void process_call_domestic(Player * player, gint * supply, gint * receive) { Game *game = player->game; GList *list; gint i; for (i = 0; i < NO_RESOURCE; i++) { game->quote_supply[i] = supply[i]; game->quote_receive[i] = receive[i]; } player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "domestic-trade call supply %R receive %R\n", supply, receive); /* make sure all the others are back in quote mode. They may have * gone to monitor mode (after rejecting), but they should be able * to reply to the new call */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; if (!player_is_spectator(game, scan->num) && scan != player) { sm_goto(scan->sm, (StateFunc) mode_domestic_quote); } } } static void call_domestic(Player * player, gint * supply, gint * receive) { Game *game = player->game; Player *partner; gint num_supply, num_receive; gint idx; QuoteInfo *quote; /* Check that the player actually has the specified resources */ num_supply = num_receive = 0; for (idx = 0; idx < NO_RESOURCE; idx++) { if (supply[idx]) { if (player->assets[idx] == 0) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR not enough resources for this quote\n"); return; } num_supply++; } if (receive[idx] > 0) ++num_receive; } if (num_supply == 0 && num_receive == 0) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR empty quote\n"); return; } quote = quotelist_first(game->quotes); while (quote != NULL) { QuoteInfo *curr = quote; quote = quotelist_next(quote); if (!curr->is_domestic) continue; /* Is the current quote valid? */ for (idx = 0; idx < NO_RESOURCE; idx++) { if (!receive[idx] && curr->var.d.supply[idx] != 0) break; if (!supply[idx] && curr->var.d.receive[idx] != 0) break; } if (idx < NO_RESOURCE) { partner = player_by_num(game, curr->var.d.player_num); player_broadcast(partner, PB_ALL, FIRST_VERSION, LATEST_VERSION, "domestic-quote delete %d\n", curr->var.d.quote_num); quotelist_delete(game->quotes, curr); } } process_call_domestic(player, supply, receive); } gboolean mode_domestic_initiate(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; gint partner_num; gint quote_num; gint ratio; Resource supply_type; Resource receive_type; gint supply[NO_RESOURCE]; gint receive[NO_RESOURCE]; sm_state_name(sm, "mode_domestic_initiate"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "maritime-trade %d supply %r receive %r", &ratio, &supply_type, &receive_type)) { trade_perform_maritime(player, ratio, supply_type, receive_type); return TRUE; } if (sm_recv(sm, "domestic-trade finish")) { trade_finish_domestic(player); return TRUE; } if (sm_recv (sm, "domestic-trade accept player %d quote %d supply %R receive %R", &partner_num, "e_num, supply, receive)) { trade_accept_domestic(player, partner_num, quote_num, supply, receive); return TRUE; } if (sm_recv(sm, "domestic-trade call supply %R receive %R", supply, receive)) { if (!game->params->domestic_trade) return FALSE; call_domestic(player, supply, receive); return TRUE; } return FALSE; } void trade_begin_domestic(Player * player, gint * supply, gint * receive) { Game *game = player->game; GList *list; sm_push(player->sm, (StateFunc) mode_domestic_initiate); quotelist_new(&game->quotes); /* push all others to quote mode. process_call_domestic pops and * repushes them all, so this is needed to keep the state stack * from corrupting. */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; if (!player_is_spectator(game, scan->num) && scan != player) sm_push(scan->sm, (StateFunc) mode_domestic_quote); } process_call_domestic(player, supply, receive); } pioneers-14.1/server/turn.c0000644000175000017500000004147311704117540012657 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "buildrec.h" #include "cost.h" #include "server.h" #include "admin.h" static void build_add(Player * player, BuildType type, gint x, gint y, gint pos) { Game *game = player->game; Map *map = game->params->map; Points *special_points; if (!game->rolled_dice) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR roll-dice\n"); return; } /* Add settlement/city/road */ if (type == BUILD_ROAD) { /* Building a road, make sure it is next to a * settlement/city/road */ if (!map_road_vacant(map, x, y, pos) || !map_road_connect_ok(map, player->num, x, y, pos)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } /* Make sure the player can afford the road */ if (!cost_can_afford(cost_road(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } /* Make sure that there are some roads left to use! */ if (player->num_roads == game->params->num_build_type[BUILD_ROAD]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many road\n"); return; } edge_add(player, BUILD_ROAD, x, y, pos, TRUE); return; } if (type == BUILD_BRIDGE) { /* Building a bridge, make sure it is next to a * settlement/city/road */ if (!map_road_vacant(map, x, y, pos) || !map_bridge_connect_ok(map, player->num, x, y, pos)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } /* Make sure the player can afford the bridge */ if (!cost_can_afford(cost_bridge(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } /* Make sure that there are some roads left to use! */ if (player->num_bridges == game->params->num_build_type[BUILD_BRIDGE]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many bridge\n"); return; } edge_add(player, BUILD_BRIDGE, x, y, pos, TRUE); return; } if (type == BUILD_SHIP) { /* Building a ship, make sure it is next to a * settlement/city/ship */ if (!map_ship_vacant(map, x, y, pos) || !map_ship_connect_ok(map, player->num, x, y, pos)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } /* Make sure the player can afford the ship */ if (!cost_can_afford(cost_ship(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } /* Make sure that there are some roads left to use! */ if (player->num_ships == game->params->num_build_type[BUILD_SHIP]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many ship\n"); return; } edge_add(player, BUILD_SHIP, x, y, pos, TRUE); return; } if (type == BUILD_CITY_WALL) { if (!can_city_wall_be_built(map_node(map, x, y, pos), player->num)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } /* Make sure that there are some city walls left to use! */ if (player->num_city_walls == game->params->num_build_type[BUILD_CITY_WALL]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many city wall\n"); return; } if (!cost_can_afford(cost_city_wall(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } node_add(player, type, x, y, pos, TRUE, NULL); return; } /* Build the settlement/city */ if (!map_building_vacant(map, type, x, y, pos) || !map_building_spacing_ok(map, player->num, type, x, y, pos)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } if (type == BUILD_CITY && can_settlement_be_upgraded(map_node(map, x, y, pos), player->num)) { /* Make sure that there are some cities left to use! */ if (player->num_cities == game->params->num_build_type[BUILD_CITY]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many city\n"); return; } if (!cost_can_afford(cost_upgrade_settlement(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } } else { /* New building: make sure it connects to a road */ if (!map_building_connect_ok(map, player->num, x, y, pos)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } /* Make sure that there are some settlements left to use! * Also when building a city, there must be an intermediate * settlement. */ if (player->num_settlements == game->params->num_build_type[BUILD_SETTLEMENT]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many settlement\n"); return; } /* Make sure the player can afford the building */ if (type == BUILD_SETTLEMENT) { if (!cost_can_afford (cost_settlement(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } } else { /* Make sure that there are some cities left to use! */ if (player->num_cities == game->params->num_build_type[BUILD_CITY]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-many city\n"); return; } if (!cost_can_afford(cost_city(), player->assets)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR too-expensive\n"); return; } } } special_points = NULL; if (game->params->island_discovery_bonus != NULL) { if (!map_is_island_discovered (map, map_node(map, x, y, pos), player->num)) { gboolean first_island; gint points; first_island = (player->islands_discovered == 0); /* Use the last entry in island_discovery_bonus, * or the current island */ points = g_array_index(game->params-> island_discovery_bonus, gint, MIN(game->params-> island_discovery_bonus->len - 1, player->islands_discovered)); if (points != 0) special_points = points_new (player->special_points_next_id++, first_island ? N_("Island Discovery Bonus") : N_("Additional Island Bonus"), points); player->islands_discovered++; } } node_add(player, type, x, y, pos, TRUE, special_points); } static void build_remove(Player * player) { /* Remove the settlement/road we just built */ if (!perform_undo(player)) player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-undo\n"); } static void build_move(Player * player, gint sx, gint sy, gint spos, gint dx, gint dy, gint dpos) { Game *game = player->game; Map *map = game->params->map; Edge *from = map_edge(map, sx, sy, spos), *to = map_edge(map, dx, dy, dpos); BuildRec *rec; /* Allow only one move per turn */ if (map->has_moved_ship) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR already-moved\n"); return; } /* Check if the ship is allowed to move away */ if (from->owner != player->num || from->type != BUILD_SHIP || to->owner >= 0 || !can_ship_be_moved(map_edge(map, sx, sy, spos), player->num)) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } if (map->pirate_hex != NULL) { gint idx; /* check that the pirate is not on the from hexes */ for (idx = 0; idx < G_N_ELEMENTS(from->hexes); ++idx) { if (map->pirate_hex == from->hexes[idx]) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR has-pirate\n"); return; } } /* checking of destination for pirate is done in * can_ship_be_built */ } /* Move it away */ from->owner = -1; from->type = BUILD_NONE; /* Check if it is allowed to move to the other place */ if ((sx == dx && sy == dy && spos == dpos) || !can_ship_be_built(to, player->num)) { from->owner = player->num; from->type = BUILD_SHIP; player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR bad-pos\n"); return; } /* everything is fine, tell everybode the ship has moved */ player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "move %d %d %d %d %d %d\n", sx, sy, spos, dx, dy, dpos); /* put the move in the undo information */ rec = buildrec_new(BUILD_MOVE_SHIP, dx, dy, dpos); rec->cost = NULL; rec->prev_x = sx; rec->prev_y = sy; rec->prev_pos = spos; rec->longest_road = game->longest_road ? game->longest_road->num : -1; player->build_list = g_list_append(player->build_list, rec); map->has_moved_ship = TRUE; /* check the longest road while the ship is moving */ check_longest_road(game); /* administrate the arrival of the ship */ to->owner = player->num; to->type = BUILD_SHIP; /* check the longest road again */ check_longest_road(game); } typedef struct { Game *game; int roll; } GameRoll; static gboolean distribute_resources(const Hex * hex, gpointer closure) { int idx; GameRoll *data = closure; if (hex->roll != data->roll || hex->robber) /* return false so the traverse function continues */ return FALSE; for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) { const Node *node = hex->nodes[idx]; Player *player; gint num; if (node->type == BUILD_NONE) continue; player = player_by_num(data->game, node->owner); if (player != NULL) { num = (node->type == BUILD_CITY) ? 2 : 1; if (hex->terrain == GOLD_TERRAIN) player->gold += num; else player->assets[hex->terrain] += num; } else { /* This should be fixed at some point. */ log_message(MSG_ERROR, _("" "Tried to assign resources to NULL player.\n")); } } /* return false so the traverse function continues */ return FALSE; } gboolean check_victory(Player * player) { Game *game = player->game; GList *list; gint points; if (player->num != game->curr_player) /* Only the player that has the turn can win */ return FALSE; points = player->num_settlements + player->num_cities * 2 + player->develop_points; if (game->longest_road == player) points += 2; if (game->largest_army == player) points += 2; list = player->special_points; while (list) { Points *point = list->data; points += point->points; list = g_list_next(list); } if (points >= game->params->victory_points) { player_broadcast(player, PB_ALL, FIRST_VERSION, LATEST_VERSION, "won with %d\n", points); game->is_game_over = TRUE; /* Set all state machines to idle, to make sure nothing * happens. */ for (list = player_first_real(game); list != NULL; list = player_next_real(list)) { Player *scan = list->data; sm_pop_all_and_goto(scan->sm, (StateFunc) mode_idle); } meta_unregister(); game_is_over(game); return TRUE; } return FALSE; } /* Handle all actions that a player may perform in a turn */ gboolean mode_turn(Player * player, gint event) { StateMachine *sm = player->sm; Game *game = player->game; const Map *map = game->params->map; BuildType build_type; DevelType devel_type; gint x, y, pos; gint idx, ratio; Resource supply_type, receive_type; gint supply[NO_RESOURCE], receive[NO_RESOURCE]; gint sx, sy, spos, dx, dy, dpos; sm_state_name(sm, "mode_turn"); if (event != SM_RECV) return FALSE; if (sm_recv(sm, "roll")) { GameRoll data; gint roll; if (game->rolled_dice) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR already-rolled\n"); return TRUE; } /* roll the dice until we like it */ while (TRUE) { game->die1 = get_rand(6) + 1; game->die2 = get_rand(6) + 1; roll = game->die1 + game->die2; game->rolled_dice = TRUE; /* sevens_rule == 1: reroll first two turns */ if (game->params->sevens_rule == 1) if (roll == 7 && game->curr_turn <= 2) continue; /* sevens_rule == 2: reroll all sevens */ if (game->params->sevens_rule == 2) if (roll == 7) continue; /* sevens_rule == 0: don't reroll anything */ break; } /* The administrator can override the dice */ if (admin_dice_roll >= 2) { game->die1 = admin_dice_roll > 6 ? 6 : 1; game->die2 = admin_dice_roll - game->die1; roll = admin_dice_roll; player_broadcast(player, PB_SILENT, FIRST_VERSION, LATEST_VERSION, "NOTE %s\n", /* Cheat mode has been activated */ N_("" "The dice roll has been determined by the administrator.")); } /* let people know what we rolled */ player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "rolled %d %d\n", game->die1, game->die2); if (roll == 7) { /* Find all players with more than 7 cards - * they must discard half (rounded down) */ discard_resources(game); /* there are no resources to distribute on a 7 */ return TRUE; } resource_start(game); data.game = game; data.roll = roll; map_traverse_const(map, distribute_resources, &data); /* distribute resources and gold (includes resource_end) */ distribute_first(list_from_player(player)); return TRUE; } /* try to end a turn */ if (sm_recv(sm, "done")) { if (!game->rolled_dice) { player_send(player, FIRST_VERSION, LATEST_VERSION, "ERR roll-dice\n"); return TRUE; } /* Ok, finish turn */ player_send(player, FIRST_VERSION, LATEST_VERSION, "OK\n"); if (!check_victory(player)) { /* game isn't over, so pop the state machine back to idle */ sm_pop(sm); turn_next_player(game); } return TRUE; } if (sm_recv(sm, "buy-develop")) { develop_buy(player); return TRUE; } if (sm_recv(sm, "play-develop %d", &idx, &devel_type)) { develop_play(player, idx); if (!game->params->check_victory_at_end_of_turn) check_victory(player); return TRUE; } if (sm_recv(sm, "maritime-trade %d supply %r receive %r", &ratio, &supply_type, &receive_type)) { trade_perform_maritime(player, ratio, supply_type, receive_type); return TRUE; } if (sm_recv(sm, "domestic-trade call supply %R receive %R", supply, receive)) { if (!game->params->domestic_trade) return FALSE; trade_begin_domestic(player, supply, receive); return TRUE; } if (sm_recv(sm, "build %B %d %d %d", &build_type, &x, &y, &pos)) { build_add(player, build_type, x, y, pos); if (!game->params->check_victory_at_end_of_turn) check_victory(player); return TRUE; } if (sm_recv (sm, "move %d %d %d %d %d %d", &sx, &sy, &spos, &dx, &dy, &dpos)) { build_move(player, sx, sy, spos, dx, dy, dpos); if (!game->params->check_victory_at_end_of_turn) check_victory(player); return TRUE; } if (sm_recv(sm, "undo")) { build_remove(player); return TRUE; } return FALSE; } /* Player should be idle - I will tell them when to do something */ gboolean mode_idle(Player * player, G_GNUC_UNUSED gint event) { StateMachine *sm = player->sm; sm_state_name(sm, "mode_idle"); return FALSE; } void turn_next_player(Game * game) { Player *player = NULL; GList *list = NULL; /* the first time this is called there is no curr_player yet */ if (game->curr_player >= 0) { player = player_by_num(game, game->curr_player); game->curr_player = -1; g_assert(player != NULL); list = list_from_player(player); } do { /* next player */ if (list) list = player_next_real(list); /* See if it's the first player's turn again */ if (list == NULL) { list = player_first_real(game); game->curr_turn++; } /* sanity check */ g_assert(list != NULL && list->data != NULL); player = list->data; /* disconnected players don't take turns */ } while (player->disconnected); /* reset variables */ game->curr_player = player->num; game->rolled_dice = FALSE; game->played_develop = FALSE; game->bought_develop = FALSE; player->build_list = buildrec_free(player->build_list); game->params->map->has_moved_ship = FALSE; /* tell everyone what's happening */ player_broadcast(player, PB_RESPOND, FIRST_VERSION, LATEST_VERSION, "turn %d\n", game->curr_turn); /* put the player in the right state */ sm_push(player->sm, (StateFunc) mode_turn); } pioneers-14.1/server/main.c0000644000175000017500000002414311455302262012606 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Pioneers Console Server */ #include "config.h" #include "version.h" #ifdef HAVE_LOCALE_H #include #endif #include #include #include #include #include #include #include #include "driver.h" #include "game.h" #include "cards.h" #include "map.h" #include "network.h" #include "log.h" #include "buildrec.h" #include "server.h" #include "glib-driver.h" #include "admin.h" #include "avahi.h" static GMainLoop *event_loop; static gint num_players = 0; static gint num_points = 0; static gint sevens_rule = -1; static gint terrain = -1; static gint timeout = 0; static gint num_ai_players = 0; static gchar *server_port = NULL; static gchar *admin_port = NULL; static gchar *game_title = NULL; static gchar *game_file = NULL; static gboolean disable_game_start = FALSE; static gint tournament_time = -1; static gboolean quit_when_done = FALSE; static gchar *hostname = NULL; static gboolean register_server = FALSE; static gchar *meta_server_name = NULL; static gboolean fixed_seating_order = FALSE; static gboolean enable_debug = FALSE; static gboolean show_version = FALSE; static GOptionEntry commandline_game_entries[] = { {"game-title", 'g', 0, G_OPTION_ARG_STRING, &game_title, /* Commandline server-console: game-title */ N_("Game title to use"), NULL}, {"file", 0, 0, G_OPTION_ARG_STRING, &game_file, /* Commandline server-console: file */ N_("Game file to use"), NULL}, {"port", 'p', 0, G_OPTION_ARG_STRING, &server_port, /* Commandline server-console: port */ N_("Port to listen on"), PIONEERS_DEFAULT_GAME_PORT}, {"players", 'P', 0, G_OPTION_ARG_INT, &num_players, /* Commandline server-console: players */ N_("Override number of players"), NULL}, {"points", 'v', 0, G_OPTION_ARG_INT, &num_points, /* Commandline server-console: points */ N_("Override number of points needed to win"), NULL}, {"seven-rule", 'R', 0, G_OPTION_ARG_INT, &sevens_rule, /* Commandline server-console: seven-rule */ N_("Override seven-rule handling"), "0|1|2"}, {"terrain", 'T', 0, G_OPTION_ARG_INT, &terrain, /* Commandline server-console: terrain */ N_("Override terrain type, 0=default 1=random"), "0|1"}, {"computer-players", 'c', 0, G_OPTION_ARG_INT, &num_ai_players, /* Commandline server-console: computer-players */ N_("Add N computer players"), "N"}, {"version", '\0', 0, G_OPTION_ARG_NONE, &show_version, /* Commandline option of server-console: version */ N_("Show version information"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; static GOptionEntry commandline_meta_entries[] = { {"register", 'r', 0, G_OPTION_ARG_NONE, ®ister_server, /* Commandline server-console: register */ N_("Register server with meta-server"), NULL}, {"meta-server", 'm', 0, G_OPTION_ARG_STRING, &meta_server_name, /* Commandline server-console: meta-server */ N_("Register at meta-server name (implies -r)"), PIONEERS_DEFAULT_META_SERVER}, {"hostname", 'n', 0, G_OPTION_ARG_STRING, &hostname, /* Commandline server-console: hostname */ N_("Use this hostname when registering"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; static GOptionEntry commandline_other_entries[] = { {"auto-quit", 'x', 0, G_OPTION_ARG_NONE, &quit_when_done, /* Commandline server-console: auto-quit */ N_("Quit after a player has won"), NULL}, {"empty-timeout", 'k', 0, G_OPTION_ARG_INT, &timeout, /* Commandline server-console: empty-timeout */ N_("Quit after N seconds with no players"), "N"}, {"tournament", 't', 0, G_OPTION_ARG_INT, &tournament_time, /* Commandline server-console: tournament */ N_("Tournament mode, computer players added after N minutes"), "N"}, {"admin-port", 'a', 0, G_OPTION_ARG_STRING, &admin_port, /* Commandline server-console: admin-port */ N_("Admin port to listen on"), PIONEERS_DEFAULT_ADMIN_PORT}, {"admin-wait", 's', 0, G_OPTION_ARG_NONE, &disable_game_start, /* Commandline server-console: admin-wait */ N_("" "Don't start game immediately, wait for a command on admin port"), NULL}, {"fixed-seating-order", 0, 0, G_OPTION_ARG_NONE, &fixed_seating_order, /* Commandline server-console: fixed-seating-order */ N_("" "Give players numbers according to the order they enter the game"), NULL}, {"debug", '\0', 0, G_OPTION_ARG_NONE, &enable_debug, /* Commandline option of server: enable debug logging */ N_("Enable debug messages"), NULL}, {NULL, '\0', 0, 0, NULL, NULL, NULL} }; int main(int argc, char *argv[]) { int i; GOptionContext *context; GOptionGroup *context_group; GError *error = NULL; GameParams *params; Game *game = NULL; /* set the UI driver to Glib_Driver, since we're using glib */ set_ui_driver(&Glib_Driver); driver->player_added = srv_glib_player_added; driver->player_renamed = srv_glib_player_renamed; driver->player_removed = srv_player_removed; driver->player_change = srv_player_change; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); /* have gettext return strings in UTF-8 */ bind_textdomain_codeset(PACKAGE, "UTF-8"); server_init(); /* Long description in the commandline for server-console: help */ context = g_option_context_new(_("- Host a game of Pioneers")); g_option_context_add_main_entries(context, commandline_game_entries, PACKAGE); context_group = g_option_group_new("meta", /* Commandline server-console: Short description of meta group */ _("Meta-server Options"), /* Commandline server-console: Long description of meta group */ _("" "Options for the meta-server"), NULL, NULL); g_option_group_set_translation_domain(context_group, PACKAGE); g_option_group_add_entries(context_group, commandline_meta_entries); g_option_context_add_group(context, context_group); context_group = g_option_group_new("misc", /* Commandline server-console: Short description of misc group */ _("Miscellaneous Options"), /* Commandline server-console: Long description of misc group */ _("Miscellaneous options"), NULL, NULL); g_option_group_set_translation_domain(context_group, PACKAGE); g_option_group_add_entries(context_group, commandline_other_entries); g_option_context_add_group(context, context_group); g_option_context_parse(context, &argc, &argv, &error); if (error != NULL) { g_print("%s\n", error->message); g_error_free(error); return 1; } if (show_version) { g_print(_("Pioneers version:")); g_print(" "); g_print(FULL_VERSION); g_print("\n"); return 0; } set_enable_debug(enable_debug); if (server_port == NULL) server_port = g_strdup(PIONEERS_DEFAULT_GAME_PORT); if (disable_game_start) if (admin_port == NULL) admin_port = g_strdup(PIONEERS_DEFAULT_ADMIN_PORT); if (game_title && game_file) { /* server-console commandline error */ g_print(_("" "Cannot set game title and filename at the same time\n")); return 2; } if (game_file == NULL) { if (game_title == NULL) { if (num_players > 4) params = cfg_set_game("5/6-player"); else params = cfg_set_game("Default"); } else params = cfg_set_game(game_title); } else { params = cfg_set_game_file(game_file); } if (params == NULL) { /* server-console commandline error */ g_print(_("Cannot load the parameters for the game\n")); return 3; } if (meta_server_name != NULL) register_server = TRUE; if (register_server && meta_server_name == NULL) meta_server_name = get_meta_server_name(TRUE); g_assert(server_port != NULL); if (num_players) cfg_set_num_players(params, num_players); if (sevens_rule != -1) cfg_set_sevens_rule(params, sevens_rule); if (num_points) cfg_set_victory_points(params, num_points); if (tournament_time != -1) cfg_set_tournament_time(params, tournament_time); cfg_set_quit(params, quit_when_done); if (terrain != -1) cfg_set_terrain_type(params, terrain ? 1 : 0); net_init(); if (admin_port != NULL) { if (!admin_listen(admin_port)) { /* Error message */ g_print(_("Admin port not available.\n")); return 5; } } if (disable_game_start && admin_port == NULL) { /* server-console commandline error */ g_print(_("" "Admin port is not set, " "cannot disable game start too\n")); return 4; } if (!disable_game_start) { game = server_start(params, hostname, server_port, register_server, meta_server_name, !fixed_seating_order); if (game != NULL) { game->no_player_timeout = timeout; num_ai_players = CLAMP(num_ai_players, 0, game->params->num_players); for (i = 0; i < num_ai_players; ++i) add_computer_player(game, TRUE); avahi_register_game(game); } } if (disable_game_start || game != NULL) { event_loop = g_main_loop_new(NULL, FALSE); g_main_loop_run(event_loop); g_main_loop_unref(event_loop); game_free(game); game = NULL; avahi_unregister_game(); } net_finish(); g_free(hostname); g_free(server_port); g_free(admin_port); g_option_context_free(context); params_free(params); return 0; } static gboolean exit_func(G_GNUC_UNUSED gpointer data) { g_main_loop_quit(event_loop); return TRUE; } void game_is_over(Game * game) { /* quit in ten seconds if configured */ if (game->params->quit_when_done) { g_timeout_add(10 * 1000, &exit_func, NULL); } } void request_server_stop(Game * game) { if (server_stop(game)) { g_main_loop_quit(event_loop); } } pioneers-14.1/server/glib-driver.c0000644000175000017500000000420010363024766014067 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "driver.h" #include "server.h" #include "common_glib.h" #include "glib-driver.h" /* callbacks for the server */ void srv_glib_player_added(G_GNUC_UNUSED void *data) { #ifdef PRINT_INFO Player *player = (Player *) data; g_print("Player %d added: %s (from host %s)\n", player->num, player->name, player->location); #endif } void srv_glib_player_renamed(G_GNUC_UNUSED void *data) { #ifdef PRINT_INFO Player *player = (Player *) data; g_print("Player %d renamed to %s (at host %s)\n", player->num, player->name, player->location); #endif } void srv_player_removed(G_GNUC_UNUSED void *data) { #ifdef PRINT_INFO Player *player = (Player *) data; g_print("Player %d removed: %s (at host %s)\n", player->num, player->name, player->location); #endif } void srv_player_change(G_GNUC_UNUSED void *data) { #ifdef PRINT_INFO GList *current; Game *game = (Game *) data; g_print("Players connected:\n"); playerlist_inc_use_count(game); for (current = game->player_list; current != NULL; current = g_list_next(current)) { Player *p = (Player *) current->data; g_print("Player %d: %s (at host %s) is %s connected\n", p->num, p->name, p->location, p->disconnected ? "not" : ""); } playerlist_dec_use_count(game); #endif } pioneers-14.1/server/glib-driver.h0000644000175000017500000000227310363024766014104 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __glib_driver_h #define __glib_driver_h #include "server.h" #include "driver.h" void srv_glib_player_added(void *data); void srv_glib_player_renamed(void *data); void srv_player_removed(void *data); void srv_player_change(void *data); extern UIDriver Glib_Driver; #endif /* __glib_driver_h */ pioneers-14.1/server/default.game0000644000175000017500000000114411755241465014003 00000000000000title Default random-terrain strict-trade domestic-trade num-players 4 sevens-rule 0 victory-points 10 num-roads 15 num-bridges 0 num-ships 0 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 19 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 desc Default board layout for 3 or 4 players chits 11,12,9,4,6,5,10,3,11,4,8,8,10,9,3,5,2,6 map -,-,sw5,s,s?4,s,- -,s,t0,p1,f2,sg4,- -,s?0,h3,m4,h5,p6,s s,d7,t8,f9,t10,f11,sl3 -,s?0,h12,p13,p14,m15,s -,s,m16,f17,t18,s?2,- -,-,so1,s,sb2,s,- . pioneers-14.1/server/5-6-player.game0000644000175000017500000000126311755241465014162 00000000000000title 5/6-player random-terrain domestic-trade num-players 5 sevens-rule 0 victory-points 10 num-roads 15 num-bridges 0 num-ships 0 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 24 develop-road 3 develop-monopoly 3 develop-plenty 3 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 19 desc Default layout for 5 or 6 players chits 2,5,4,8,10,11,6,4,9,12,12,3,8,5,6,3,10,9,3,9,2,5,8,4,11,6,10,11 map -,-,s?5,s,sw4,s,-,- -,s,m0,m1,m2,sw4,-,- -,s?5,m3,m4,m5,h6,s,- s,h7,h8,h9,h10,h11,sg3,- s?0,p12,p13,p14,p15,p16,p17,s s,f18,f19,f20,f21,f22,sl3,- -,s?1,d23,d24,t25,t26,s,- -,s,t27,t28,t29,s?2,-,- -,-,so1,s,sb2,s,-,- . pioneers-14.1/server/four-islands.game0000644000175000017500000000105310471112741014750 00000000000000title The Four Islands strict-trade domestic-trade num-players 3 victory-points 12 num-roads 15 num-ships 15 num-settlements 5 num-cities 4 resource-count 19 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate island-discovery-bonus 1,2 chits 4,9,3,6,6,10,2,5,11,8,9,8,4,12,10 map -,s,s,s,s,s,s s,p0,t1,s,s,f2,s -,s,f3,s,s,t4,s s,s,s,s,h5,m6,s -,s,s,s,s,s,s s,h7,t8,s,s,s,s -,s,p9,h10,s,m11,s s,m12,f13,s,s,p14,s -,s,s,s,s,s,s . pioneers-14.1/server/seafarers.game0000644000175000017500000000135111755241465014332 00000000000000title Seafarers strict-trade domestic-trade num-players 4 sevens-rule 0 victory-points 10 num-roads 15 num-bridges 0 num-ships 15 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 19 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate desc Two big islands chits 5,2,6,3,8,10,9,12,11,4,8,10,9,4,5,6,3,11,5,2,6,3,8,10,9,12,11,4,8,10,9,4,5,6,3,11,12,6 map s,s,sw5,s,s,sg4,s,s?5,s s,p0,m1,h2,h3,h4,f5,t6,s s,s?0,t7,m8,p9,f10,t11,p12,sw3 s,f13,s?1,s,s,sg2,s,m14,s s,sb1,s,f15,m16,f17,p18,s,so2 s,m19,t20,t21,f22,p23,m24,h25,s s,sb0,t26,p27,d28,h29,f30,f31,s s,t32,p33,h34,m35,p36,m37,h38,s?3 s,s,s,sl1,s,s,s?2,s,s . pioneers-14.1/server/seafarers-gold.game0000644000175000017500000000137711755241465015265 00000000000000title Seafarers with gold strict-trade domestic-trade num-players 4 sevens-rule 0 victory-points 10 num-roads 15 num-bridges 0 num-ships 15 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 19 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate desc Two big islands with gold chits 5,2,6,3,8,12,9,12,11,4,8,10,2,4,5,6,3,11,5,2,6,3,8,10,9,12,11,4,8,10,9,4,5,6,3,11,12,6 map s,s,sw5,s,s,sg4,s,s?5,s s,g0+,m1,h2,h3,h4,f5,g6+,s s,s?0,t7,m8,p9,f10,t11,p12,sw3 s,f13,s?1,s,s,sg2,s,m14,s s,sb1,s,f15,m16,f17,p18,s,so2 s,m19,t20,t21,f22,p23,m24,h25,s s,sb0,t26,p27,d28,h29,f30,f31,s s,t32,p33,h34,m35,p36,m37,h38,s?3 s,s,s,sl1,s,s,s?2,s,s . pioneers-14.1/server/small.game0000644000175000017500000000077111755241465013474 00000000000000title Small random-terrain strict-trade num-players 2 sevens-rule 0 victory-points 16 num-roads 15 num-bridges 0 num-ships 0 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 19 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 desc A small map for two players chits 9,10,8,12,11,4,3,5,2,6 map -,s,s?5,s,so4,- s?0,t0,p1,m2,s,- s,h3,t4,m5,f6,sb3 sl0,h7,p8,f9,s,- -,s,sw1,s,sg2,- . pioneers-14.1/server/archipel_gold.game0000644000175000017500000000273511755241465015162 00000000000000title Archipelago with Gold domestic-trade num-players 4 sevens-rule 0 victory-points 12 num-roads 5 num-bridges 0 num-ships 20 num-settlements 5 num-cities 3 num-city-walls 0 resource-count 19 develop-road 4 develop-monopoly 1 develop-plenty 3 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate # v1.0, added to Pioneers 2005-04-09 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2005 Blyx desc desc Please provide some feedback ;) chits 10,4,6,5,9,8,10,12,5,10,4,3,9,5,3,4,9,11,8,11,6,2 map -,s,s,s,s,s,s,s,s,- s,p0,s,s,s,s,s,p1,sl4,- s,t2,sl3,f3,s,s,t4,s,t5,s s,s,m6,s,s,h7,f8,s,s,s s,s,s,s,m9,sg3,s,s,s,s s,m10,s,s,s,s,s,s,g11,s s,s,s,f12,s?3,s,s?5,h13,s,s s,t14,sw4,t15,s,s,p16,sw5,t17,s -,s,p18,s,s,m19,s,s,p20,f21 -,s,s,s,s,s,s,s,s,- . pioneers-14.1/server/canyon.game0000644000175000017500000000136011755241465013646 00000000000000title Talon Canyon domestic-trade num-players 2 sevens-rule 0 victory-points 10 num-roads 15 num-bridges 0 num-ships 0 num-settlements 6 num-cities 3 num-city-walls 0 resource-count 20 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 chits 8,4,9,8,10,10,6,4,5,5,3,11,4,9,6,8,2,10,3,9,6,11,12,5,12,9,11,2,3,3,4,2,6,10,8,5,11 map -,h0,-,-,-,-,-,-,-,-,- f1,m2,-,-,-,-,-,-,-,-,- -,p3,t4,-,-,-,-,f5,p6,f7,m8 -,f9,h10,-,-,-,h11,t12,m13,t14,- -,-,m15,t16,-,-,p17,-,-,-,- -,-,h18,t19,f20,h21,-,-,-,-,- -,-,-,p22,d23+,m24,m25,-,-,-,- -,-,-,h26,f27,t28,p29,-,-,-,- -,-,-,-,-,t30,h31,f32,-,-,- -,-,-,-,-,-,m33,t34,f35,-,- -,-,-,-,-,-,-,p36,h37,-,- . pioneers-14.1/server/coeur.game0000644000175000017500000000323411755241465013476 00000000000000title Heart domestic-trade num-players 3 sevens-rule 0 victory-points 14 num-roads 15 num-bridges 2 num-ships 10 num-settlements 4 num-cities 4 num-city-walls 0 resource-count 19 develop-road 3 develop-monopoly 3 develop-plenty 3 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 14 use-pirate # v1.0, 15/02/2004 # v1.1, 02/08/2006 Gold excluded from shuffle # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2004 LT-P desc desc Please provide some feedback ;) chits 5,12,11,9,12,8,3,5,2,11,6,2,10,4,4,10,4,11,5,9,3,4,10,4,10,6,3,9,8,2,10,12 map s,s,s,s,s,s,s,s,s,s s,p0,m1,s,s,s,p2,m3,s,s s,f4,t5,t6,h7,h8,f9,f10,t11,s s,f12,t13,s,g14+,s,f15,t16,s,s s,s,t17,m18,s,s,p19,f20,s,s s,s,p21,m22,s,p23,m24,s,s,s s,s,s,m25,h26,h27,p28,s,s,s s,s,s,h29,g30+,h31,s,s,s,s s,s,s,s,s,s,s,s,s,s . nosetup 3 3 0 nosetup 3 3 5 nosetup 3 7 0 nosetup 3 7 5 nosetup 4 2 5 nosetup 4 3 0 nosetup 4 3 4 nosetup 4 3 5 nosetup 4 6 5 nosetup 4 7 0 nosetup 4 7 4 nosetup 4 7 5 pioneers-14.1/server/conquest.game0000644000175000017500000000375311755241465014230 00000000000000title Conquest domestic-trade num-players 4 sevens-rule 0 victory-points 16 num-roads 20 num-bridges 0 num-ships 16 num-settlements 6 num-cities 5 num-city-walls 0 resource-count 20 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate island-discovery-bonus 1 desc Travel to the smaller islands from the central island chits 8,3,2,10,12,9,9,5,3,4,9,5,8,10,6,4,3,11,4,4,10,11,5,6,5,9,10,12,5,4,10,6,2,9,2,4,10,11,5,6,5,9,12,9,11,10,4,9,8,3,4,2,5,8 map -,-,s,s,s,s,s,s,s,s,s,s,s,- -,s,h0,s,s,m1,f2,p3,h4,s,s,f5,s,- -,s,p6,f7,s,t8,m9,s,p10,m11,s,t12,m13,s s,t14,m15,s,f16,h17,h18,m19,t20,t21,s,p22,h23,s -,s,s,s,t24,p25,f26,d27,t28,f29,m30,s,s,s s,m31,h32,s,m33,f34,m35,p36,h37,f38,s,f39,t40,s -,s,p41,f42,s,h43,m44,s,t45,h46,s,m47,p48,s -,s,t49,s,s,f50,p51,m52,h53,s,s,h54,s,- -,-,s,s,s,s,s,s,s,s,s,s,s,- . nosetup 0 3 0 nosetup 0 3 5 nosetup 0 5 0 nosetup 0 5 5 nosetup 1 1 0 nosetup 1 1 4 nosetup 1 1 5 nosetup 1 2 5 nosetup 1 3 0 nosetup 1 3 4 nosetup 1 3 5 nosetup 1 4 5 nosetup 1 5 0 nosetup 1 5 4 nosetup 1 5 5 nosetup 1 6 5 nosetup 1 7 0 nosetup 1 7 5 nosetup 2 0 5 nosetup 2 1 0 nosetup 2 1 4 nosetup 2 1 5 nosetup 2 2 5 nosetup 2 3 0 nosetup 2 3 4 nosetup 2 3 5 nosetup 2 4 5 nosetup 2 5 0 nosetup 2 5 4 nosetup 2 5 5 nosetup 2 6 5 nosetup 2 7 0 nosetup 2 7 4 nosetup 2 7 5 nosetup 3 1 4 nosetup 3 2 5 nosetup 3 5 4 nosetup 3 6 5 nosetup 10 1 0 nosetup 10 1 4 nosetup 10 1 5 nosetup 10 2 5 nosetup 10 3 0 nosetup 10 3 5 nosetup 10 5 0 nosetup 10 5 4 nosetup 10 5 5 nosetup 10 6 5 nosetup 10 7 0 nosetup 10 7 5 nosetup 11 0 5 nosetup 11 1 0 nosetup 11 1 4 nosetup 11 1 5 nosetup 11 2 5 nosetup 11 3 0 nosetup 11 3 4 nosetup 11 3 5 nosetup 11 4 5 nosetup 11 5 0 nosetup 11 5 4 nosetup 11 5 5 nosetup 11 6 5 nosetup 11 7 0 nosetup 11 7 4 nosetup 11 7 5 nosetup 12 1 4 nosetup 12 2 5 nosetup 12 3 0 nosetup 12 3 4 nosetup 12 3 5 nosetup 12 4 5 nosetup 12 5 0 nosetup 12 5 4 nosetup 12 5 5 nosetup 12 6 5 pioneers-14.1/server/conquest+ports.game0000644000175000017500000000406011755241465015363 00000000000000title Conquest w/ Ports domestic-trade num-players 4 sevens-rule 0 victory-points 16 num-roads 20 num-bridges 0 num-ships 16 num-settlements 6 num-cities 5 num-city-walls 0 resource-count 20 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate island-discovery-bonus 1 desc Travel to the smaller islands from the central island. Use the ports for better deals when trading. chits 8,3,2,10,12,9,9,5,3,4,9,5,8,10,6,4,3,11,4,4,10,11,5,6,5,9,10,12,5,4,10,6,2,9,2,4,10,11,5,6,5,9,12,9,11,10,4,9,8,3,4,2,5,8 map -,-,s,s,s,s,sw4,s,s,s,s,s,s,- -,s,h0,s,s,m1,f2,p3,h4,sg4,s,f5,s,- -,s,p6,f7,s,t8,m9,s,p10,m11,s,t12,m13,s s,t14,m15,s?5,f16,h17,h18,m19,t20,t21,s,p22,h23,s -,s,s,s,t24,p25,f26,d27,t28,f29,m30,s?3,s,s s,m31,h32,s,m33,f34,m35,p36,h37,f38,s,f39,t40,s -,s,p41,f42,sb0,h43,m44,s,t45,h46,s,m47,p48,s -,s,t49,s,s,f50,p51,m52,h53,sl3,s,h54,s,- -,-,s,s,s,s,so2,s,s,s,s,s,s,- . nosetup 0 3 0 nosetup 0 3 5 nosetup 0 5 0 nosetup 0 5 5 nosetup 1 1 0 nosetup 1 1 4 nosetup 1 1 5 nosetup 1 2 5 nosetup 1 3 0 nosetup 1 3 4 nosetup 1 3 5 nosetup 1 4 5 nosetup 1 5 0 nosetup 1 5 4 nosetup 1 5 5 nosetup 1 6 5 nosetup 1 7 0 nosetup 1 7 5 nosetup 2 0 5 nosetup 2 1 0 nosetup 2 1 4 nosetup 2 1 5 nosetup 2 2 5 nosetup 2 3 0 nosetup 2 3 4 nosetup 2 3 5 nosetup 2 4 5 nosetup 2 5 0 nosetup 2 5 4 nosetup 2 5 5 nosetup 2 6 5 nosetup 2 7 0 nosetup 2 7 4 nosetup 2 7 5 nosetup 3 1 4 nosetup 3 2 5 nosetup 3 5 4 nosetup 3 6 5 nosetup 10 1 0 nosetup 10 1 4 nosetup 10 1 5 nosetup 10 2 5 nosetup 10 3 0 nosetup 10 3 5 nosetup 10 5 0 nosetup 10 5 4 nosetup 10 5 5 nosetup 10 6 5 nosetup 10 7 0 nosetup 10 7 5 nosetup 11 0 5 nosetup 11 1 0 nosetup 11 1 4 nosetup 11 1 5 nosetup 11 2 5 nosetup 11 3 0 nosetup 11 3 4 nosetup 11 3 5 nosetup 11 4 5 nosetup 11 5 0 nosetup 11 5 4 nosetup 11 5 5 nosetup 11 6 5 nosetup 11 7 0 nosetup 11 7 4 nosetup 11 7 5 nosetup 12 1 4 nosetup 12 2 5 nosetup 12 3 0 nosetup 12 3 4 nosetup 12 3 5 nosetup 12 4 5 nosetup 12 5 0 nosetup 12 5 4 nosetup 12 5 5 nosetup 12 6 5 pioneers-14.1/server/crane_island.game0000644000175000017500000000366011755241465015006 00000000000000title Crane Island domestic-trade num-players 4 sevens-rule 0 victory-points 16 num-roads 15 num-bridges 0 num-ships 15 num-settlements 6 num-cities 4 num-city-walls 0 resource-count 20 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 # v1.0, added to Pioneers 2005-04-09 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2005 Yusei desc desc Please provide some feedback ;) chits 8,6,4,10,6,5,10,9,2,4,4,11,5,3,9,10,8,3,12,4,4,3,9,5,8,6,8,9,6,5 map s,s,s,s,s,s,s,s,s,s sl0,m0,s,t1,h2,t3,s,m4,sg3,- s,s,s,t5,f6,p7,f8,s,s,s s,s,f9,s,p10,s,t11,s,s,- s,s,h12,m13,t14,h15,f16,p17,s,s s,s,s?2,f18,s,p19,s?1,s,s,- s,s,s,h20,p21,t22,f23,s,s,s s,s,s,d24,d25,d26,s,s,s,- sw0,f27,m28,s,p29,t30,s,m31,h32,sb3 s,s,s,s,s,s,s,s,s,- . nosetup 0 1 0 nosetup 0 1 5 nosetup 0 7 4 nosetup 0 7 5 nosetup 0 8 5 nosetup 0 9 0 nosetup 1 0 5 nosetup 1 1 0 nosetup 1 1 4 nosetup 1 1 5 nosetup 1 7 4 nosetup 1 7 5 nosetup 1 8 5 nosetup 1 9 0 nosetup 2 7 4 nosetup 2 8 5 nosetup 6 1 0 nosetup 6 1 5 nosetup 6 7 4 nosetup 6 7 5 nosetup 6 8 5 nosetup 6 9 0 nosetup 7 0 5 nosetup 7 1 0 nosetup 7 1 4 nosetup 7 1 5 nosetup 7 7 4 nosetup 7 7 5 nosetup 7 8 5 nosetup 7 9 0 nosetup 8 7 4 nosetup 8 8 5 pioneers-14.1/server/iles.game0000644000175000017500000000273011755241465013315 00000000000000title Islands domestic-trade num-players 3 sevens-rule 0 victory-points 10 num-roads 10 num-bridges 2 num-ships 15 num-settlements 4 num-cities 4 num-city-walls 0 resource-count 15 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 11 use-pirate island-discovery-bonus 1 # v1.0, 2004-02-19 Initial version # v1.1, 2006-09-10 Added island-discovery-bonus # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2004, 2006 LT-P desc desc Please provide some feedback ;) chits 2,6,2,4,6,3,5,10,8,10,4,9,11,12,8,12,3,5,9,11 map s,s,s,s,s,s,s,s,s s,p0,h1,s,s,m2,p3,f4,s s,f5,m6,sb5,m7,sl3,t8,h9,s s,t10,sw2,t11,f12,so0,p13,s,s s,s,s,p14,h15,s,s,s,s s,s,s,s,s?0,m16,f17,s,s s,s,d18,s,s,h19,t20,s,s s,s,s,s,s,s,s,s,s . pioneers-14.1/server/pond.game0000644000175000017500000000107010466566006013314 00000000000000title The Pond num-players 2 victory-points 12 domestic-trade num-roads 20 num-settlements 10 num-cities 8 resource-count 20 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 chits 6, 9, 4, 10, 11, 8, 2, 9, 2, 5, 4, 8, 4, 10, 4, 3, 6, 3, 5, 2, 9, 12, 6, 4, 3, 10, 5, 8 map -, -, h0, m1, f2, p3, m4, t5 m6, p7,sw2, s,s?1, s, p8, f9,p10 h11,f12,h13, s, s,d28+, s,t14,m15,t16 m17,f18,p19, s,s?4, s,sg5,p20,f21 -, -,h22,p23,f24,m25,f26,t27 . pioneers-14.1/server/square.game0000644000175000017500000000074710227532546013663 00000000000000title Square strict-trade num-players 2 victory-points 8 num-roads 15 num-settlements 5 num-cities 4 resource-count 19 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 chits 6,2,8,12,6,5,3,9,11,5,4,4,10,10,4,3,5,11,9,3,2,6,12,8,2 map s,s,s,s,s,s,s s,m0,t1,p2,h3,f4,s s,m5,t6,p7,h8,f9,s s,m10,t11,p12,h13,f14,s s,m15,t16,p17,h18,f19,s s,m20,t21,p22,h23,f24,s s,s,s,s,s,s,s . pioneers-14.1/server/star.game0000644000175000017500000000122210466566006013324 00000000000000title Star domestic-trade num-players 2 victory-points 8 num-roads 15 num-settlements 4 num-cities 5 resource-count 24 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 10 chits 2, 12, 3, 11, 4, 10, 5, 9, 6, 8, 12, 11, 10, 9, 8, 6, 5, 4, 3, 2, 8, 9, 10, 11, 12, 2 map - -,-,m1,-,-,-,-,t2,-,- -,-,-,f3,-,-,-,p4,-,- -,-,-,h5,-,-,h6,-,-,- -,-,-,-, t7,-,m8,-,-,-,- -,-,-,-, p9,f10,-,-,-,-, h11,f12,m13,p15,t16,d27+,h17,f18,m19,p20,t21 -,-,-,-,-,m22,-,-,-,- -,-,-,-,-,-,f23,-,-,- -,-,-,-,-,-,h24,-,-,- -,-,-,-,-,-,-,t25,-,- -,-,-,-,-,-,-,p26 -,- . pioneers-14.1/server/x.game0000644000175000017500000000140510466566006012625 00000000000000title X Marks the Spot domestic-trade num-players 3 victory-points 18 num-roads 30 num-ships 20 num-settlements 7 num-cities 5 resource-count 24 develop-road 4 develop-monopoly 2 develop-plenty 1 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 15 use-pirate chits 4,9,3,6,6,10,2,5,11,8,9,8,4,12,10,4,9,3,6,6,4,9,3,6,6,10,2,5,11,8,9,8,4,12,10,4,9,3,6,6,8,4,12,10,4,9,3,6,6 map s,s,s,s,s,s,s,s,s,s,s,s s,p0,t1,s,s,h2,t3,s,s,s,s,s s,t4,t5,s,s,h6,h7,p8,p9,f10,s,s s,t11,p12,s,s,s,p13,f14,f15,m16,s,s s,p17,p18,s,f19,p20,p21,h22,h23,m24,s,s s,m25,m26,s,f27,f28,p29,s,s,f30,m31,s s,m49,d32,h33,h34,m35,m36,m37,s,s,s,s s,m38,h39,h40,f41,s,s,f42,t43,t44,s,s s,s,s,p45,p46,s,s,t47,t48,s,s,s s,s,s,s,s,s,s,s,s,s,s . pioneers-14.1/server/Cube.game0000644000175000017500000000257211755241465013243 00000000000000title Cube domestic-trade num-players 4 sevens-rule 0 victory-points 12 num-roads 20 num-bridges 0 num-ships 10 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 20 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 11 # v1.0, 2/07/2003 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2003 LT-P desc desc Please provide some feedback ;) chits 8,12,2,10,4,8,4,11,12,9,9,2,5,3,6,10,11,6,5,3 map s,s,s,s,s,s,s,s,s,s s,s,s,s,p0,p1,s,s,s,s s,s,s,s?5,p2,p3,s,s,s,s s,m4,m5,d6,d7,f8,f9,t10,t11,s s,m12,m13,d14,d15,f16,f17,t18,t19,s s,s,h20,h21,s?2,s,s,s,s,s s,s,h22,h23,s,s,s,s,s,s s,s,s,s,s,s,s,s,s,s . pioneers-14.1/server/Another_swimming_pool_in_the_wall.game0000644000175000017500000000350211755241465021267 00000000000000title Another swimming pool in the wall domestic-trade num-players 6 sevens-rule 0 victory-points 16 num-roads 24 num-bridges 4 num-ships 8 num-settlements 6 num-cities 5 num-city-walls 0 resource-count 20 develop-road 4 develop-monopoly 2 develop-plenty 4 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 # v1.1, 4/08/2003 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2003 LT-P desc desc Please provide some feedback ;) chits 5,12,11,9,5,8,3,4,12,6,10,9,2,10,12,4,3,8,5,11,3,10,2,9,6,4,11,5,12,11,9,5,8,3,4,12,6,10,9,2,10,12,4,3,8,5,11,3,10,2,9,6,4,11,5,12,11,9,5,8,3,4,12,6,10,9,2,10,12,4,3,8,5,11,3,10,2,9,6,4,11,5,12,11,9,5,8,3,4,12,6,10,9,2,10,12 map t0,p1,p2,t3,p4,t5,p6,p7,p8,f9,p10,f11,-,f12 m13,t14,d15,d16,h17,f18,s,h19,p20,p21,-,-,m22,t23 p24,h25,d26,m27,d28,p29,t30,p31,m32,s,s,p33,h34,p35 p36,p37,d38,d39,f40,h41,t42,-,-,p43,f44,p45,d46,f47 f48,h49,p50,h51,p52,m53,s,s,p54,h55,p56,t57,m58,p59 p60,t61,p62,f63,-,s,p64,h65,t66,p67,s,s,p68,m69 m70,p71,h72,s,-,p73,f74,p75,m76,p77,s,s,t78,p79 f80,-,s,p81,t82,p83,s,s,p84,f85,p86,p87,f88,p89 p90,-,p91,f92,h93,p94,m95,p96,m97,h98,p99,t100,p101,h102 . pioneers-14.1/server/Evil_square.game0000644000175000017500000000262111755241465014637 00000000000000title Evil square domestic-trade num-players 4 sevens-rule 0 victory-points 12 num-roads 16 num-bridges 0 num-ships 0 num-settlements 4 num-cities 4 num-city-walls 0 resource-count 40 develop-road 3 develop-monopoly 3 develop-plenty 3 develop-chapel 0 develop-university 0 develop-governor 0 develop-library 0 develop-market 0 develop-soldier 9 # v1.3, 14/09/2003 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2003 LT-P desc desc Please provide some feedback ;) chits 3,9,2,5,11,4,6,10,4,8,10,5,11,12,3,9,2,12,3,9,2,5,11,4,6,10,4,8,10,5,11,12,3,9 map s,s,s,s,s,s,s,s s,p0,p1,p2,p3,p4,s,s s,p5,f6,p7,p8,t9,p10,s s,p11,p12,p13,p14,p15,p16,s s,p17,p18,p19,p20,p21,p22,s s,p23,h24,p25,p26,m27,p28,s s,s,p29,p30,p31,p32,p33,s s,s,s,s,s,s,s,s . pioneers-14.1/server/GuerreDe100ans.game0000644000175000017500000000467311755241465015016 00000000000000title La guerre de 100 ans domestic-trade num-players 4 sevens-rule 0 victory-points 16 num-roads 40 num-bridges 0 num-ships 40 num-settlements 10 num-cities 5 num-city-walls 0 resource-count 20 develop-road 4 develop-monopoly 4 develop-plenty 4 develop-chapel 2 develop-university 2 develop-governor 2 develop-library 2 develop-market 2 develop-soldier 30 use-pirate island-discovery-bonus 1 # v1.0, 2003-07-02 Initial version # v1.1, 2006-09-10 Added pirate and island-discovery # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # desc Copyright 2003, 2006 LT-P desc desc Please provide some feedback ;) chits 8,9,5,6,4,9,8,10,5,6,10,6,5,9,8,5,6,4,9,8,3,2,10,12,3,4,9,5,3,11,4,4,10,11,5,9,10,12,5,4,2,9,2,4,10,11,12,9,11,10,3,4,2,5,8,9,5,6,4,9,8,10,5,6,10,6,5,9,8,5,6,4,9,8,3,2,10,12,3,4,9,5,3,11,4,4,10,11,5,9,10,12,5,4,2,9,2,4,10,11,12,9,11,10,3,12,4,2,5,8,9,5,6,4,9,8,5,10,5,6,10,6,5,9,8,5,6,4,9,8,3,2,4,10,12,3,4,9,5,3,11,4,4,10,11,5,9,10 map s,s,s,t0,t1,t2,t3,p4,h5,h6,h7,p8,p9,p10,f11,f12 s,s,s,s,p13,p14,t15,p16,f17,p18,f19,t20,t21,f22,f23,s s,s,s,s,s,p24,p25,sw1,f26,p27,h28,f29,p30,f31,f32,sg3 s,s,s,p33,s,s,s,t34,t35,h36,f37,m38,m39,p40,f41,p42 s,s,s,p43,f44,p45,f46,p47,h48,t49,m50,m51,s?0,m52,m53,m54 s,p55,t56,t57,m58,h59,f60,f61,h62,t63,s,s,s,s,sl0,s s,p64,m65,m66,f67,m68,m69,s?0,t70,s,s,s,s,s,s,p71 s,t72,sl0,p73,p74,sw0,p75,s,s,s,s,s,s,s,sb0,m76 s,s,s,s,s,s,s,s,s,s,s,s,s,h77,m78,h79 s,s,s,s,s,s,s,s,s,p80,h81,t82,sg0,f83,f84,t85 s,s,s,s,s,s,s,s,s,h86,t87,p88,p89,s,t90,p91 s,s,s,s,s,s,s,p92,s,m93,f94,f95,f96,s,s,p97 s,s,sl5,s,s,s,s,m98,s,p99,f100,t101,f102,p103,f104,s?4 m105,m106,t107,m108,s,s,so0,s,s?5,m109,p110,p111,t112,t113,p114,f115 p116,p117,h118,p119,f120,p121,f122,m123,m124,m125,f126,f127,t128,t129,t130,p131 t132,t133,t134,h135,t136,t137,h138,t139,t140,f141,p142,f143,h144,p145,f146,f147 . pioneers-14.1/server/Mini_another_swimming_pool_in_the_wall.game0000644000175000017500000000324511755241465022307 00000000000000title Mini another swimming pool in the wall domestic-trade num-players 3 sevens-rule 0 victory-points 16 num-roads 20 num-bridges 4 num-ships 4 num-settlements 6 num-cities 5 num-city-walls 0 resource-count 20 develop-road 4 develop-monopoly 2 develop-plenty 4 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 # v1.1, 4/08/2003 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA desc Copyright 2003 LT-P desc desc Please provide some feedback ;) chits 11,12,11,9,10,5,3,4,12,10,4,9,2,10,12,4,3,8,5,11,10,6,3,9,2,4,5,11,12,11,9,10,5,3,4,12,10,4,9,2,10,12,4,3,8,5,11,10,6,3,9,2,4,5,11,12,11,9,10,5,3,4,12,10,4,9,2,10,12,4,3 map p0,p1,t2,p3,t4,p5,p6,f7,p8,f9,- t10,d11,d12,h13,f14,s,p15,p16,-,-,m17 h18,d19,m20,d21,p22,t23,m24,s,s,p25,h26 p27,d28,d29,f30,h31,s,-,p32,f33,d34,p35 h36,p37,h38,p39,m40,s,p41,h42,p43,t44,m45 t46,p47,f48,-,s,p49,t50,p51,s,s,p52 p53,h54,s,-,p55,f56,m57,p58,s,s,t59 -,s,p60,t61,p62,s,p63,f64,p65,p66,f67 -,p68,f69,h70,p71,m72,m73,h74,p75,t76,p77 . pioneers-14.1/server/henjes.game0000644000175000017500000000207611755241465013640 00000000000000title SmallEurope domestic-trade num-players 4 sevens-rule 0 victory-points 18 num-roads 20 num-bridges 0 num-ships 15 num-settlements 8 num-cities 6 num-city-walls 0 resource-count 20 develop-road 4 develop-monopoly 4 develop-plenty 4 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 15 # created 11/2003 desc by Robert Henjes chits 3,5,6,3,4,3,11,11,10,11,9,10,2,5,4,3,6,3,12,8,8,11,12,8,2,5,6,2,9,3,12,11,10,11,6,11,2,5,4,10,6,3,4,9,3,12,9,12,2,5,11,8,4,3,3,11,8,11,9,8,2,5,2,3,11,8,10,3,10,11,9,12,4,12,4,3,6,3,6,11,10,5,9,11 map s,g0+,p1,s,s,s,s,m2,t3,t4,h5,t6 s,s?1,s,s,s,s,m7,t8,t9,h10,t11,g12+ s,s,s,s,s,m13,m14,t15,sl0,t16,f17,t18 s,s,p19,s,s,s,t20,s,t21,f22,h23,t24 s,s,sw0,p25,s,p26,sl5,s,t27,h28,t29,f30 s,s,s?5,s,s?5,p31,t32,h33,t34,p35,h36,p37 s,s,t38,t39,f40,t41,f42,t43,f44,m45,m46,f47 s,s,h48,f49,h50,t51,t52,m53,f54,p55,m56,t57 s,m58,m59,m60,p61,m62,m63,m64,f65,h66,m67,s f68,t69,h70,f71,s,s,f72,s,m73,p74,s,s s,f75,f76,f77,sg2,s,s,f78,s,f79,t80,m81 s,s,s,s,s,g82+,s,s,s,s?1,d83,g84+ . pioneers-14.1/server/lorindol.game0000644000175000017500000000701011755241465014177 00000000000000title CentralEurope domestic-trade num-players 4 sevens-rule 0 victory-points 40 num-roads 80 num-bridges 0 num-ships 20 num-settlements 5 num-cities 30 num-city-walls 0 resource-count 30 develop-road 30 develop-monopoly 2 develop-plenty 30 develop-chapel 5 develop-university 5 develop-governor 5 develop-library 0 develop-market 5 develop-soldier 30 # created 10/2003 # desc by Martin Brotzeller desc desc This is a map of Europe, cut down a bit at the eastern part because it desc did not fit with the 0.7/0.8 servers. The only resource available is desc grain, the only types of ports are grain ports. The reason, obviously, desc is to conquer a large-enough part of Europe. desc Strategy: Grab a harbor from the start of the game, and look out for desc an area where you can connect fast to build your empire. chits 8,9,2,3,2,2,12,2,10,5,6,3,8,3,12,5,9,10,8,4,11,11,4,12,2,12,5,9,8,2,3,9,10,6,4,5,6,2,10,8,4,9,10,11,12,2,9,2,3,3,4,5,6,8,9,10,11,12,2,2,2,2,6,12,5,6,8,9,3,10,11,4,2,2,3,4,5,6,8,9,11,10,11,12,2,2,3,10,4,2,5,6,8,9,10,11,12,2,2,4,5,4,6,8,9,10,11,2,2,3,4,5,6,9,10,11,11,12,2,6,4,5,6,3,8,12,3,2,3,2,3,4,8,9,10,11,12,5,10,2,6,2,4,8,9,10,11,12,5,2,5,6,5,6,3,9,8,2,11,12,2,11,12,4,8 map s,f0,d1+,f2,sg3,s,s,s,s,s,s,s,sg5,f3,d4+,f5,d6+,f7,d8+,d9+,f10,d11+,s,d12+,d13+ s,f14,f15,f16,s,s,s,s,s,s,s,s,f17,d18+,f19,s,d20+,f21,d22+,d23+,f24,sg0,f25,f26,d27+ s,d28+,f29,s,s,s,s,s,s,s,s,s,f30,d31+,f32,s,d33+,f34,d35+,f36,d37+,s,d38+,d39+,f40 s,s,s,s,s,s,s,s,s,s,s,f41,d42+,f43,f44,s,f45,d46+,s,f47,d48+,f49,d50+,f51,d52+ s,s,s,s,s,s,f53,s,s,s,s,s,f54,d55+,f56,s,s,f57,s,d58+,f59,d60+,f61,d62+,d63+ s,s,s,s,s,s,s,s,s,s,s,f64,d65+,f66,d67+,s,s,s,f68,d69+,f70,d71+,f72,d73+,d74+ s,s,s,s,s,s,s,f75,s,s,s,s,s,s,d76+,d77+,s,s,d78+,d79+,d80+,d81+,d82+,d83+,f84 s,s,s,s,sg5,s,s,f85,s,sg5,s,d86+,f87,s,f88,s,s,d89+,f90,f91,d92+,f93,d94+,f95,d96+ s,s,s,s,s,f97,s,f98,d99+,s,f100,s,f101,s,s,s,s,d102+,f103,d104+,f105,d106+,d107+,d108+,s s,s,s,s,d109+,f110,s,f111,s,s,s,s,f112,s,s,f113,d114+,d115+,d116+,f117,d118+,f119,d120+,f121,d122+ s,s,s,s,f123,f124,s,f125,d126+,s,s,f127,d128+,f129,s,f130,d131+,f132,d133+,d134+,f135,d136+,f137,d138+,d139+ s,s,s,s,s,s,f140,d141+,f142,s,f143,d144+,f145,d146+,d147+,f148,d149+,d150+,d151+,d152+,f153,d154+,f155,f156,d157+ s,s,s,s,s,s,sg1,s,s,s,f158,d159+,f160,d161+,f162,d163+,d164+,f165,d166+,f167,d168+,f169,d170+,d171+,f172 s,s,s,s,s,s,d173+,f174,d175+,d176+,f177,f178,d179+,f180,f181,d182+,f183,d184+,f185,d186+,f187,d188+,f189,d190+,d191+ s,s,s,s,s,s,f192,d193+,f194,d195+,f196,d197+,f198,d199+,f200,d201+,d202+,d203+,d204+,d205+,f206,d207+,d208+,s,f209 s,s,s,s,s,s,s,d210+,f211,d212+,f213,d214+,f215,d216+,d217+,f218,d219+,d220+,f221,d222+,f223,s,s,sg1,s s,s,s,s,s,s,s,f224,d225+,f226,d227+,d228+,f229,d230+,d231+,f232,d233+,f234,d235+,f236,d237+,d238+,s,s,s s,s,s,s,s,s,s,d239+,f240,d241+,f242,d243+,f244,d245+,s,d246+,f247,d248+,d249+,d250+,d251+,f252,s,s,s s,s,s,s,f253,d254+,f255,d256+,d257+,f258,d259+,f260,d261+,d262+,d263+,s,f264,d265+,d266+,f267,f268,d269+,s,s,s s,s,s,f270,d271+,d272+,f273,d274+,s,s,s,s,s,f275,f276,s,s,f277,d278+,d279+,d280+,f281,s,d282+,f283 s,s,s,f284,d285+,f286,d287+,d288+,f289,s,s,sg5,d290+,s,f291,d292+,s,s,f293,d294+,f295,s,s,f296,f297 s,s,s,d298+,f299,d300+,f301,s,s,sg4,s,f302,d303+,s,d304+,f305,s,s,f306,d307+,s,f308,d309+,f310,f311 s,s,s,sg0,f312,d313+,f314,s,s,f315,s,s,f316,s,s,f317,d318+,s,f319,d320+,f321,s,f322,d323+,f324 s,s,s,s,s,s,s,s,s,sg5,f325,s,s,f326,d327+,s,f328,s,sg0,f329,d330+,s,sg2,s,s s,s,s,s,f331,f332,s,s,s,s,f333,d334+,s,s,s,s,s,s,s,s,f335,s,s,s,s . pioneers-14.1/server/lobby.game0000644000175000017500000000152311755241465013467 00000000000000title Lobby strict-trade domestic-trade num-players 8 sevens-rule 0 victory-points 99 num-roads 0 num-bridges 0 num-ships 0 num-settlements 0 num-cities 1 num-city-walls 0 resource-count 1 develop-road 0 develop-monopoly 0 develop-plenty 0 develop-chapel 0 develop-university 0 develop-governor 0 develop-library 0 develop-market 0 develop-soldier 0 desc This is the lobby. desc People can gather here to meet, and to talk about games to start. chits 2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,6,6,8,6,8,6,8,6,8,9,9,9,9,9,9,9,9,12,12,12,12,12,12,12,12,12,12,12,12,12 map h0,s,s,s,f1,f2,s,m3,m4,m5,s,p6,p7,p8,s,t9,s,s,t10 h11,s,s,f12,s,f13,s,m14,s,m15,s,p16,s,p17,s,t18,s,t19,- h20,s,s,f21,s,s,f22,s,m23,m24,s,s,p25,p26,s,s,t27,t28,s h29,s,s,f30,s,f31,s,m32,s,m33,s,p34,s,p35,s,s,t36,s,- h37,h38,h39,s,f40,f41,s,m42,m43,m44,s,p45,p46,p47,s,s,t48,s,g49 . pioneers-14.1/server/south_africa.game0000644000175000017500000000123211755241465015024 00000000000000title South Africa domestic-trade num-players 4 sevens-rule 0 victory-points 10 num-roads 15 num-bridges 0 num-ships 0 num-settlements 5 num-cities 4 num-city-walls 0 resource-count 40 develop-road 2 develop-monopoly 2 develop-plenty 2 develop-chapel 1 develop-university 1 develop-governor 1 develop-library 1 develop-market 1 develop-soldier 13 use-pirate # south_africa.game # v1.0, 2008-03-16 desc Created by Petri Jooste chits 2,4,4,8,5,11,3,10,6,10,9,11,12,11,3,6,8,9,5 map -,-,-,-,-,h0,t1,so3 -,-,-,-,f2,g3,t4,s s,-,-,-,m5,m6,p7,sb2 sl0,m8,d9+,f10,f11,t12,s?3,s s,s,p13,h14,p15,p16,s,s s,s?0,f17,t18,h19,sg2,s,- -,s,s,sw1,s,s?2,s,- . pioneers-14.1/server/ubuntuland.game0000644000175000017500000001035411755241465014543 00000000000000title Ubuntuland strict-trade domestic-trade num-players 6 sevens-rule 0 victory-points 40 num-roads 24 num-bridges 12 num-ships 48 num-settlements 6 num-cities 12 num-city-walls 12 resource-count 80 develop-road 30 develop-monopoly 5 develop-plenty 30 develop-chapel 10 develop-university 10 develop-governor 10 develop-library 10 develop-market 10 develop-soldier 30 use-pirate island-discovery-bonus 3 # created September 24, 2010 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. desc by Matt Perry desc desc This map was made to show support for Ubuntu Linux and the basic map layout desc was built to resemble the Ubuntu Linux 'circle of friends' logo. It is a map desc that supports 6 players with uneven island/port distributions and therefore desc requires strategy to play and succeed as it is possible that the game may desc not have a winner due to the reduced number of available settlement/city desc pieces. I hope that you enjoy this map, even if it is a frustrating one and desc that you try Ubuntu Linux if you do not use it already. desc Please provide some feedback. chits 2,5,4,6,3,9,8,11,11,10,6,3,8,4,8,10,11,12,8,6,10,5,4,9,5,9,12,3,2,6,6,8,6,8,6,2,5,4,6,6,8,6,6,8,3,9,8,11,8,6,11,10,6,3,8,4,8,10,11,12,10,5,4,9,5,9,12,3,2,6,2,5,4,6,3,9,8,11,11,10,6,3,8,4,8,10,11,12,10,5,4,9,5,9,12,3,2,6,2,5,4,6,3,9,8,11,11,10,6,3,8,4,8,2,10,11,12,10,5,4,9,5,9,12,6,8,10,6,8,6,8,6 map s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s s,s,s,s,sb5,h0,f1,m2,p3,s,t4,h5,f6,m7,sg4,s,s,s,s,- s,s,s,s,t8,t9,p10,m11,f12,s,s,m13,p14,t15,h16,p17,s,s,s,s s,g18,g19,s,h20,f21,m22,h23,f24,s,h25,f26,m27,h28,f29,s,g30,g31,s,- s,g32,g33,g34,s,p35,t36,s,so2,s,s,sw1,s,p37,t38,s,g39,g40,g41,s s,g42,g43,s,t44,p45,sw2,s,s,s,s,s,s?1,t46,p47,s,g48,g49,s,- s,s,s,s,h50,m51,s,s,s,s,s,s,s,s,h52,m53,s,s,s,s s,p54,m55,f56,f57,s,s,s,s,s,s,s,s,s,f58,f59,m60,t61,s,- s,s?0,p62,t63,h64,sg3,s,s,s,s,s,s,s,s,sb0,m65,h66,p67,sl3,s s,m68,h69,t70,s,s,s,s,s,s,s,s,s,s,s,p71,t72,h73,s,- s,s,f74,f75,p76,sl3,s,s,s,s,s,s,s,s,so0,t77,h78,f79,s,s s,s,h80,m81,m82,s,s,s,s,s,s,s,s,s,h83,t84,m85,s,s,- s,s,s,t86,s,s,s,s,s,s,s,s,s,s,s,s,p87,s,s,s s,s,s,s,s,f88,sw4,s,s,s,s,s,sb5,f89,s,s,s,s,s,- s,s,s,s,p90,m91,h92,s,sg4,s,s,so5,s,m93,p94,t95,s,s,s,s s,s,s,s,m96,f97,t98,p99,m100,f101,h102,t103,p104,m105,h106,s,s,s,s,- s,s,s,s,s,f107,h108,m109,p110,f111,t112,m113,h114,f115,f116,s,s,s,s,s s,s,s,s,s,h117,p118,p119,s,s,s,p120,t121,m122,s,s,s,s,s,- s,s,s,s,s,s,sl1,t123,s,g124,g125,s,p126,s?2,s,s,s,s,s,s s,s,s,s,s,s,s,s,g127,g128,g129,s,s,s,s,s,s,s,s,- s,s,s,s,s,s,s,s,s,g130,g131,s,s,s,s,s,s,s,s,s s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,- . nosetup 0 3 0 nosetup 0 3 4 nosetup 0 3 5 nosetup 0 4 5 nosetup 0 5 0 nosetup 0 5 5 nosetup 1 2 5 nosetup 1 3 0 nosetup 1 3 4 nosetup 1 3 5 nosetup 1 4 5 nosetup 1 5 0 nosetup 1 5 4 nosetup 1 5 5 nosetup 2 2 5 nosetup 2 3 0 nosetup 2 3 4 nosetup 2 3 5 nosetup 2 4 5 nosetup 2 5 0 nosetup 2 5 4 nosetup 2 5 5 nosetup 3 3 4 nosetup 3 4 5 nosetup 7 19 0 nosetup 7 19 5 nosetup 8 17 4 nosetup 8 17 5 nosetup 8 18 5 nosetup 8 19 0 nosetup 8 19 4 nosetup 8 19 5 nosetup 8 20 5 nosetup 8 21 0 nosetup 9 17 4 nosetup 9 17 5 nosetup 9 18 5 nosetup 9 19 0 nosetup 9 19 4 nosetup 9 19 5 nosetup 9 20 5 nosetup 9 21 0 nosetup 10 17 4 nosetup 10 18 5 nosetup 10 19 0 nosetup 10 19 4 nosetup 10 19 5 nosetup 10 20 5 nosetup 15 3 0 nosetup 15 3 4 nosetup 15 3 5 nosetup 15 4 5 nosetup 15 5 0 nosetup 15 5 5 nosetup 16 2 5 nosetup 16 3 0 nosetup 16 3 4 nosetup 16 3 5 nosetup 16 4 5 nosetup 16 5 0 nosetup 16 5 4 nosetup 16 5 5 nosetup 17 2 5 nosetup 17 3 0 nosetup 17 3 4 nosetup 17 3 5 nosetup 17 4 5 nosetup 17 5 0 nosetup 17 5 4 nosetup 17 5 5 nosetup 18 3 4 nosetup 18 4 5 pioneers-14.1/server/north_america.game0000644000175000017500000000451611755241465015200 00000000000000title North America random-terrain domestic-trade num-players 6 sevens-rule 0 victory-points 16 num-roads 40 num-bridges 0 num-ships 40 num-settlements 10 num-cities 5 num-city-walls 0 resource-count 20 develop-road 4 develop-monopoly 4 develop-plenty 4 develop-chapel 2 develop-university 2 develop-governor 2 develop-library 2 develop-market 2 develop-soldier 30 # 1/31/2004 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. desc by Ron Yorgason desc desc Please provide some feedback ;) chits 3,11,6,2,3,11,9,8,9,4,11,10,9,12,11,9,4,9,4,11,4,4,5,5,11,6,9,8,12,2,10,9,6,5,11,5,9,2,11,6,12,12,4,11,8,8,2,6,3,3,9,12,2,8,10,10,4,8,12,4,2,4,8,5,11,9,3,12,2,6,6,12,8,11,5,8,6,6,12,10,10,11,11,8,2,5,9,8,12,2,8,10,9,5,12,6,12,12,9,4,12,2,12,8,10,11,6,9,12,6,11,10,12,5,3,8,6,8,3,4,4,8,3,12,5 map s,s,s,s,s,s,s,s,s,s,s,s,h0,s,s,f1,d2,d3,h4 s,s,f5,m6,d7,s,s,s,s,s,s,t8,s,f9,s,f10,t11,h12,t13 s,s,f14,m15,h16,t17,f18,s,s,s,s,s,s,s,s,s,s,sg0,p19 s,s,m20,f21,p22,f23,t24,t25,f26,t27,f28,s,p29,f30,f31,s,h32,s,s s,s,s,s,s?1,t33,p34,f35,h36,h37,t38,s,s?0,f39,t40,p41,s?2,s,s s,s,s,s,s,t42,f43,h44,m45,f46,p47,f48,h49,t50,p51,f52,s,s,s s,s,s,s,s,h53,f54,m55,p56,f57,t58,t59,t60,h61,t62,so2,s,s,s s,s,s,s,sl0,h63,t64,m65,f66,f67,s,s,s,t68,h69,s,s,s,s s?5,s,s,s,s,t70,t71,m72,h73,f74,p75,p76,s,h77,t78,sw3,s,s,s p79,s,s,s,sg0,f80,m81,h82,p83,f84,f85,t86,h87,t88,s,s,s,s,s t89,m90,s,s,s,p91,t92,m93,h94,f95,f96,t97,h98,f99,s?2,s,s,s,s s,s,s,s,sw0,f100,h101,t102,f103,f104,p105,f106,p107,s,s,s,s,s,s s,s,s,s,s,s,f108,h109,p110,t111,sg2,s,sb1,p112,sl4,s,s,s,s s,s,s,s,s,s113,p114,h115,h116,f117,s,s,s,f118,s,s,s,s,s s,s,s,s,s,s,s,s,f119,p120,t121,h122,s,s,s,s?4,s,s,s s,s,s,s,s,s,s,sb1,s,s,f123,p124,s,s,t125,f126,p127,s,s . pioneers-14.1/README0000644000175000017500000000565210655346477011115 00000000000000Pioneers Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. Playing the Game ================ Pioneers is a multi-player game. Each player must run the Pioneers client: pioneers. One of the players must also run the Pioneers server: pioneers-server-gtk or pioneers-server-console. The GTK server has a user interface in which you can customise the game parameters. Once you are happy with the game parameters, press the Start Server button, and the server will start listening for client connections. When you start the client program, it displays a connect dialog. You must define the hostname and port where the server can be located. You can enter these manually, or press the Meta Server button. The meta server maintains a list of all registered Pioneers servers that are currently running a game. This allows you to join a game anywhere on the Internet. Pioneers is most fun with three or four players, but two players is still ok, or you can add some computer players if you like. Simple install procedure ======================== % tar xvzf pioneers-.tar.gz # unpack the sources % cd pioneers # change to the toplevel directory % ./configure # regenerate configure and run it % make # build Pioneers [ Become root if necessary ] % make install # install Pioneers Building RPM Binary Packages ============================ This section is intended to make it easier for those people that wish to build RPMs from the source included in this package, but aren't sure how. 1) Copy pioneers-.tar.gz to your RPM SOURCES directory. Usually this is /usr/src/packages/SOURCES 2) In your RPM SOURCES directory, issue the command 'rpmbuild -ta pioneers.spec'. This will cause rpm to extract the pioneers sources to a temporary directory, build them, and build rpm packages based on the information in the spec file. The binary rpms will be put into your RPM RPMS directory. Usually this is /usr/src/packages/RPMS//. If you have any further questions, please refer to the RPM documentation. Building Debian Binary Packages =============================== This section is intended to make it easier for those people that wish to build Debian binary packages (.deb's) from the source included in this package, but aren't sure how. 1) Extract pioneers-.tar.gz inside a temporary directory. The Debian binaries will be placed in this directory. A directory named pioneers- will be created when you extract the archive. 2) Change into the pioneers- directory. 3) Issue the command dpkg-buildpackage (You must have dpkg-dev installed in order to issue this command). This will configure and build the Debian binaries, placing them in the parent directory of your current directory. If you have any further questions, please refer to the Debian dpkg documentation. pioneers-14.1/acinclude.m40000644000175000017500000000146711760645752012422 00000000000000dnl @synopsis TYPE_SOCKLEN_T dnl dnl Check whether sys/socket.h defines type socklen_t. Please note dnl that some systems require sys/types.h to be included before dnl sys/socket.h can be compiled. dnl dnl Modified by Roland Clobus for ws2tcpip dnl dnl @version $Id: type_socklen_t.m4 1625 2011-01-26 09:53:10Z rclobus $ dnl @author Lars Brinkhoff dnl AC_DEFUN([TYPE_SOCKLEN_T], [AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t, [ AC_TRY_COMPILE( [#ifdef HAVE_WS2TCPIP_H #include #else #include #include #endif], [socklen_t len = 42; return 0;], ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no) ]) if test $ac_cv_type_socklen_t != yes; then AC_DEFINE(socklen_t, int, [Substitute for socklen_t]) fi ]) pioneers-14.1/configure.ac0000644000175000017500000004544511715714616012517 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003-2007 Bas Wijnen # Copyright (C) 2004-2011 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA AC_PREREQ(2.61) AC_INIT([pioneers],[14.1],[pio-develop@lists.sourceforge.net]) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) AC_CONFIG_SRCDIR([client]) AC_CONFIG_HEADERS([config.h]) PROTOCOL_VERSION=14 META_PROTOCOL_VERSION=1.3 PIONEERS_DEFAULT_GAME_PORT=5556 PIONEERS_DEFAULT_GAME_HOST=localhost PIONEERS_DEFAULT_ADMIN_PORT=5555 PIONEERS_DEFAULT_META_PORT=5557 PIONEERS_DEFAULT_META_SERVER=pioneers.debian.net GLIB_REQUIRED_VERSION=2.16 GTK_REQUIRED_VERSION=2.20 GTK_OPTIMAL_VERSION=2.24 LIBNOTIFY_REQUIRED_VERSION=0.5.0 LIBNOTIFY_OPTIMAL_VERSION=0.7.4 AM_MAINTAINER_MODE AC_PROG_LIBTOOL AC_PATH_PROG(ECHO, echo) AC_PROG_CC AM_PROG_CC_C_O AM_PROG_MKDIR_P AC_HEADER_STDC if test $USE_MAINTAINER_MODE = yes; then GOB2_CHECK([[2.0.0]]) pioneers_warnings=yes; pioneers_debug=yes; pioneers_deprecationChecks=yes; else pioneers_warnings=no; pioneers_debug=no; pioneers_deprecationChecks=no; fi # Try to find a suitable renderer for the svg images AC_SUBST(whitespace_trick, [" "]) AC_PATH_PROG(svg_renderer_path, rsvg-convert) if test x$svg_renderer_path != x; then AC_SUBST(svg_renderer_width, ["--width \$(whitespace_trick)"]) AC_SUBST(svg_renderer_height, ["\$(whitespace_trick) --height \$(whitespace_trick)"]) AC_SUBST(svg_renderer_output, ["\$(whitespace_trick) -o \$(whitespace_trick)"]) else AC_PATH_PROG(svg_renderer_path, rsvg) if test x$svg_renderer_path != x; then AC_SUBST(svg_renderer_width, ["--width \$(whitespace_trick)"]) AC_SUBST(svg_renderer_height, ["\$(whitespace_trick) --height \$(whitespace_trick)"]) AC_SUBST(svg_renderer_output, ["\$(whitespace_trick)"]) else AC_PATH_PROG(svg_renderer_path, convert) if test x$svg_renderer_path != x; then AC_SUBST(svg_renderer_width, ["-background \"\#000001\" -transparent \"\#000001\" -resize \$(whitespace_trick)"]) AC_SUBST(svg_renderer_height, ["x"]) AC_SUBST(svg_renderer_output, ["\$(whitespace_trick)"]) else # Add other SVG rendering programs here # Don't let configure fail, in the distributed tarballs is already # a current .png file AC_SUBST(svg_renderer_path, [false]) fi fi fi # Is netpbm installed (should be needed only for maintainer builds) # netpbm will generate the icon for the Windows executables AC_PATH_PROG(pngtopnm, pngtopnm) if test "$pngtopnm" = ""; then # Don't let configure fail, in the distributed tarballs is already # a current .png file AC_SUBST(pngtopnm, [false]) fi AC_ARG_ENABLE([warnings], AS_HELP_STRING([--enable-warnings], [Compile with check for compiler warnings (gcc-only).]), [case "${enableval}" in full) pioneers_warnings=full;; yes) pioneers_warnings=yes ;; "") pioneers_warnings=yes ;; *) pioneers_warnings=no ;; esac]) AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [Enable debug information.]), [case "${enableval}" in yes) pioneers_debug=yes ;; "") pioneers_debug=yes ;; *) pioneers_debug=no ;; esac]) AC_ARG_ENABLE([deprecation-checks], AS_HELP_STRING([--enable-deprecation-checks], [Enable strict deprecation checks.]), [case "${enableval}" in yes) pioneers_deprecationChecks=yes ;; "") pioneers_deprecationChecks=yes ;; *) pioneers_deprecationChecks=no ;; esac]) ## The warnings are in the same order as in 'man gcc' if test "x$GCC" = xyes; then # Flags from Debian hardening (dpkg-buildflags --get CFLAGS) AC_SUBST(AM_CFLAGS, ["$AM_CFLAGS -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security"]) AC_SUBST(AM_CFLAGS, ["$AM_CFLAGS -D_FORTIFY_SOURCE=2"]) AC_SUBST(AM_CFLAGS, ["$AM_CFLAGS -pie -fPIE"]) # Flags from Debian hardening (dpkg-buildflags --get LDFLAGS) AC_SUBST(AM_LDFLAGS, ["$AM_LDFLAGS -Wl,-z,relro"]) AC_SUBST(AM_LDFLAGS, ["$AM_LDFLAGS -Wl,-z,now"]) # Only link the directly needed libraries AC_SUBST(AM_CFLAGS, ["$AM_CFLAGS -Wl,--as-needed"]) if test "$pioneers_warnings" = yes -o "$pioneers_warnings" = full; then AC_SUBST(WARNINGS, "-Wall") AC_SUBST(WARNINGS, "$WARNINGS -W") AC_SUBST(WARNINGS, "$WARNINGS -Wpointer-arith") AC_SUBST(WARNINGS, "$WARNINGS -Wcast-qual") AC_SUBST(WARNINGS, "$WARNINGS -Wwrite-strings") AC_SUBST(WARNINGS, "$WARNINGS -Wno-sign-compare") AC_SUBST(WARNINGS, "$WARNINGS -Waggregate-return") AC_SUBST(WARNINGS, "$WARNINGS -Wstrict-prototypes") AC_SUBST(WARNINGS, "$WARNINGS -Wmissing-prototypes") AC_SUBST(WARNINGS, "$WARNINGS -Wmissing-declarations") AC_SUBST(WARNINGS, "$WARNINGS -Wredundant-decls") AC_SUBST(WARNINGS, "$WARNINGS -Wnested-externs") AC_SUBST(WARNINGS, "$WARNINGS -O") fi if test "$pioneers_warnings" = full; then flags="-Wfloat-equal" flags="$flags -Wdeclaration-after-statement" flags="$flags -Wundef" flags="$flags -Wendif-labels" flags="$flags -Wshadow" flags="$flags -Wbad-function-cast" flags="$flags -Wconversion" flags="$flags -Wold-style-definition" flags="$flags -Wunreachable-code" flags="$flags -pedantic" # This for loop comes from gnome-compiler-flags.m4 for option in $flags; do SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $option" AC_MSG_CHECKING([whether gcc understands $option]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[has_option=yes],[has_option=no]) CFLAGS="$SAVE_CFLAGS" AC_MSG_RESULT($has_option) if test $has_option = yes; then AC_SUBST(WARNINGS, "$WARNINGS $option") fi unset has_option unset SAVE_CFLAGS done unset option unset flags fi fi AC_SUBST(WARNINGS) if test "$pioneers_debug" = yes; then AC_SUBST(DEBUGGING, "-ggdb3") fi AC_SUBST(DEBUGGING) if test "$pioneers_deprecationChecks" = yes; then AC_SUBST(GLIB_DEPRECATION, "-DG_DISABLE_DEPRECATED") AC_SUBST(GLIB_DEPRECATION, "$GLIB_DEPRECATION -DG_DISABLE_SINGLE_INCLUDES") AC_SUBST(GTK_DEPRECATION, "-DGDK_DISABLE_DEPRECATED") AC_SUBST(GTK_DEPRECATION, "$GTK_DEPRECATION -DGTK_DISABLE_DEPRECATED") AC_SUBST(GTK_DEPRECATION, "$GTK_DEPRECATION -DGNOME_DISABLE_DEPRECATED") AC_SUBST(GTK_DEPRECATION, "$GTK_DEPRECATION -DGDK_DISABLE_SINGLE_INCLUDES") AC_SUBST(GTK_DEPRECATION, "$GTK_DEPRECATION -DGTK_DISABLE_SINGLE_INCLUDES") AC_SUBST(GTK_DEPRECATION, "$GTK_DEPRECATION -DGSEAL_ENABLE") fi AC_SUBST(GLIB_DEPRECATION) AC_SUBST(GTK_DEPRECATION) if test "$with_help" = no; then pioneers_help="no, disabled in configure" have_scrollkeeper=no else ## Scrollkeeper dependency test taken from gnome-games 2.6.2 ## Begin tests for scrollkeeper # SCROLLKEEPER_REQUIRED is never used? SCROLLKEEPER_REQUIRED=0.3.8 AC_SUBST(SCROLLKEEPER_REQUIRED) AC_PATH_PROG(SCROLLKEEPER_CONFIG, scrollkeeper-config,no) if test x$SCROLLKEEPER_CONFIG = xno; then have_scrollkeeper=no pioneers_help="no, scrollkeeper not found" else have_scrollkeeper=yes pioneers_help="yes" fi fi # glib is always needed PKG_CHECK_MODULES(GLIB2, glib-2.0 >= $GLIB_REQUIRED_VERSION) PKG_CHECK_MODULES(GOBJECT2, gobject-2.0 >= $GLIB_REQUIRED_VERSION) # # Check for libnotify # PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= $LIBNOTIFY_REQUIRED_VERSION, have_libnotify=yes, [PKG_CHECK_EXISTS(libnotify, [have_libnotify="no, libnotify version too old"], [have_libnotify="no, libnotify not installed"]) AC_MSG_RESULT($have_libnotify) AC_MSG_RESULT($have_libnotify) ]) if test "$have_libnotify" = "yes"; then AC_DEFINE(HAVE_NOTIFY, 1, [Defined if libnotify is present]) PKG_CHECK_MODULES(LIBNOTIFY_OPTIMAL_VERSION, libnotify >= $LIBNOTIFY_OPTIMAL_VERSION, [], AC_DEFINE(HAVE_OLD_NOTIFY, [1], [Defined if an older version of libnotify is available])) fi # Gtk+ support if test x$with_gtk = xno; then have_gtk2="no, disabled in configure" else PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= $GTK_REQUIRED_VERSION, have_gtk2=yes, [PKG_CHECK_EXISTS(gtk+-2.0, [have_gtk2="no, Gtk+ version too old"], [have_gtk2="no, Gtk+ not installed"]) AC_MSG_RESULT($have_gtk2) ]) fi AM_CONDITIONAL(HAVE_GTK2, [test "$have_gtk2" = "yes"]) if test "$have_gtk2" = "yes"; then PKG_CHECK_MODULES(GTK_OPTIMAL_VERSION, gtk+-2.0 >= $GTK_OPTIMAL_VERSION, [], AC_DEFINE(HAVE_OLD_GTK, [1], [Defined if an older version of GTK is available])) fi # Gtk ScrollKeeper -> Test Build # libgnome Help # N X N N # Y N N N # Y Y Y if have libgnome # libgnome is only needed for help if test "$have_gtk2" = "yes"; then test_libgnome=$have_scrollkeeper; else test_libgnome=no; with_ms_icons=no; fi have_graphical=$have_gtk2; if test "$test_libgnome" = "yes"; then # libgnome-2.0 support PKG_CHECK_MODULES(GNOME2, libgnome-2.0, [have_gnome="yes"], [have_gnome="no, libgnome-2.0 not installed" AC_MSG_RESULT($have_gnome)]) if test "$have_gnome" = "yes"; then AC_DEFINE(HAVE_LIBGNOME, 1, [Defined if libgnome is present and needed]) fi if test "$have_scrollkeeper" = "yes"; then # Turn off the help if libgnome not installed have_scrollkeeper=$have_gnome; fi fi AM_CONDITIONAL(HAVE_GNOME, [test "$have_graphical" = "yes"]) AM_CONDITIONAL(HAVE_SCROLLKEEPER, [test "$have_scrollkeeper" = "yes"]) # Avahi support if test x$with_avahi = xno; then have_avahi="no, disabled in configure" else PKG_CHECK_MODULES(AVAHI_CLIENT, avahi-client, [PKG_CHECK_MODULES(AVAHI_GLIB, avahi-glib, [have_avahi="yes" AC_DEFINE(HAVE_AVAHI, [1], [Define if AVAHI available]) AC_DEFINE(AVAHI_ANNOUNCE_NAME, ["_pioneers._tcp"], [The name of the Avahi service])], [have_avahi="no, avahi-glib is missing" AC_MSG_RESULT($have_avahi)])], [have_avahi="no, avahi-client is missing" AC_MSG_RESULT($have_avahi)]) fi AC_ARG_ENABLE([admin-gtk], AS_HELP_STRING([--enable-admin-gtk], [Turn on (unstable) network administration support.]), [case "${enableval}" in yes) admin_gtk_support=yes ;; "") admin_gtk_support=yes ;; *) admin_gtk_support=no ;; esac], [admin_gtk_support=no]) AM_CONDITIONAL(ADMIN_GTK_SUPPORT, [test x$admin_gtk_support = xyes]) AC_ARG_ENABLE([protocol], AS_HELP_STRING([--enable-protocol], [Specify the network protocol (IPv4/unspecified)]), [case "${enableval}" in IPv4) pioneers_network_protocol=AF_INET; avahi_network_protocol=AVAHI_PROTO_INET;; *) pioneers_network_protocol=AF_UNSPEC; avahi_network_protocol=AVAHI_PROTO_UNSPEC;; esac], [pioneers_network_protocol=AF_UNSPEC; avahi_network_protocol=AVAHI_PROTO_UNSPEC]) AC_DEFINE_UNQUOTED([NETWORK_PROTOCOL],[$pioneers_network_protocol], [The network protocol value]) AC_DEFINE_UNQUOTED([AVAHI_NETWORK_PROTOCOL],[$avahi_network_protocol], [The Avahi network protocol value]) AC_CHECK_HEADERS([netdb.h fcntl.h netinet/in.h sys/socket.h]) AC_CHECK_HEADERS([limits.h]) AC_CHECK_HEADERS([syslog.h], [pioneers_have_syslog=yes;], [pioneers_have_syslog=no;]) AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_C_CONST # Functions AC_FUNC_FORK AC_FUNC_SELECT_ARGTYPES # Mathematics AC_CHECK_FUNC(rint, AC_DEFINE(HAVE_RINT, 1, [Define to 1 if you have the rint function.]), AC_CHECK_LIB(m, rint, [ AC_DEFINE(HAVE_RINT) LIBS="$LIBS -lm"])) AC_CHECK_FUNCS([sqrt]) # String functions AC_CHECK_FUNCS([strchr strspn strstr strcspn]) AC_CHECK_FUNCS([memmove memset]) # Network and I/O functions AC_CHECK_FUNCS([gethostname gethostbyname select socket]) getsockopt_arg3="void *"; # getaddrinfo and friends AC_CHECK_FUNCS([getaddrinfo gai_strerror freeaddrinfo], AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_ET_AL, [1], [Defined when getaddrinfo. gai_strerror and freeaddrinfo are present])) # The Windows ports (Cygwin and MinGW) are client-only pioneers_is_mingw_port=no; case $host in *-*-cygwin*) pioneers_is_windows_port=yes;; *-*-mingw*) pioneers_is_windows_port=yes; pioneers_is_mingw_port=yes;; *) pioneers_is_windows_port=no;; esac # Can a non-blocking socket be created? pioneers_have_non_blocking_sockets=no; AC_CHECK_FUNCS([fcntl],[pioneers_have_non_blocking_sockets=yes]) if test "$pioneers_have_non_blocking_sockets" = "no"; then # Only check for ws2tcpip now, # because it will cause problems under Cygwin AC_CHECK_HEADERS([ws2tcpip.h], [pioneers_have_non_blocking_sockets=yes; getsockopt_arg3="char *"; ]) fi AC_DEFINE_UNQUOTED(GETSOCKOPT_ARG3, $getsockopt_arg3, [The type of the third argument of getsockopt]) # Functions needed for the hack to override the language AC_CHECK_FUNCS([setlocale]) # Data types AC_STRUCT_TM AC_TYPE_PID_T AC_TYPE_SIZE_T # Check if socklen_t is present TYPE_SOCKLEN_T # Defines, accessible for all source files AC_DEFINE_UNQUOTED(PROTOCOL_VERSION, "$PROTOCOL_VERSION", [Protocol version used by the program]) AC_DEFINE_UNQUOTED(META_PROTOCOL_VERSION, "$META_PROTOCOL_VERSION", [Protocol version used by the meta server]) AC_DEFINE_UNQUOTED(PIONEERS_DEFAULT_GAME_PORT, "$PIONEERS_DEFAULT_GAME_PORT", [The default port for a new game]) AC_DEFINE_UNQUOTED(PIONEERS_DEFAULT_GAME_HOST, "$PIONEERS_DEFAULT_GAME_HOST", [The default host for a new game]) AC_DEFINE_UNQUOTED(PIONEERS_DEFAULT_ADMIN_PORT, "$PIONEERS_DEFAULT_ADMIN_PORT", [The default port for the admin interface]) AC_DEFINE_UNQUOTED(PIONEERS_DEFAULT_META_PORT, "$PIONEERS_DEFAULT_META_PORT", [The port for the meta server]) AC_DEFINE_UNQUOTED(PIONEERS_DEFAULT_META_SERVER, "$PIONEERS_DEFAULT_META_SERVER", [The default meta server]) ## internationalization support IT_PROG_INTLTOOL([0.35]) GETTEXT_PACKAGE=pioneers AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The gettext package name]) AM_GLIB_GNU_GETTEXT if test $pioneers_is_mingw_port = yes; then # The check for WSACleanup in ws2_32 needs an include of ws2tcpip.h # This is not possible with the AC_CHECK_LIB macro # AC_CHECK_LIB(ws2_32, WSACleanup) # Just add ws2_32 to the list of libraries AC_SUBST(LIBS, "-lws2_32 $LIBS") AC_SUBST(AM_CFLAGS, "-mms-bitfields $AM_CFLAGS") AC_SUBST(AM_CFLAGS, "$AM_CFLAGS -DWIN32_LEAN_AND_MEAN") # No console window for the graphical applications AC_SUBST(GTK2_LIBS, "$GTK2_LIBS -mwindows") # Don't use bin, lib and share subdirectories datadir='${prefix}' bindir='${prefix}' libdir='${prefix}' pioneers_datadir=. pioneers_themedir=$datadir/themes pioneers_themedir_embed=themes pioneers_localedir=locale DATADIRNAME=. else pioneers_datadir=$datadir pioneers_themedir=$datadir/games/pioneers/themes pioneers_themedir_embed=$pioneers_themedir pioneers_localedir=$datadir/locale fi AC_SUBST(pioneers_datadir) AC_SUBST(pioneers_themedir) AC_SUBST(pioneers_themedir_embed) AC_SUBST(pioneers_localedir) # All checks are completed. # Determine which executables cannot be built pioneers_build_client_ai=yes; pioneers_build_client_gtk=yes; pioneers_build_editor=yes; pioneers_build_server_console=yes; pioneers_build_server_gtk=yes; pioneers_build_metaserver=yes; if test "$pioneers_have_syslog" = "no"; then pioneers_build_metaserver=no; fi if test "$have_graphical" != "yes"; then pioneers_build_client_gtk=$have_graphical; pioneers_build_editor=$have_graphical; pioneers_build_server_gtk=$have_graphical; fi if test "$pioneers_have_non_blocking_sockets" = "no"; then pioneers_build_client_ai=no; pioneers_build_client_gtk=no; pioneers_build_server_console=no; pioneers_build_server_gtk=no; pioneers_build_metaserver=no; fi # The server functionality is not ported to MinGW yet if test "$pioneers_is_mingw_port" = "yes"; then pioneers_build_server_console="no, not implemented for MinGW"; pioneers_build_server_gtk="no, not implemented for MinGW"; fi # The metaserver functionality is not ported to MS Windows if test "$pioneers_is_windows_port" = "yes"; then pioneers_build_metaserver="no, not implemented for MS Windows"; fi # Construct a nice text about Microsoft Windows icons if test $USE_MAINTAINER_MODE = yes; then if test "$with_ms_icons" = "no"; then if test $pioneers_is_windows_port = yes; then AC_MSG_ERROR([Icons cannot be disabled in maintainermode in MS Windows]) fi pioneers_ms_icons="Disabled, make dist is disabled too" else if test "$pngtopnm" = "false"; then AC_MSG_ERROR([Icons cannot be generated, rerun configure with --without-ms-icons or install netpbm]) fi pioneers_ms_icons="Icons generated" fi else if test $pioneers_is_windows_port = yes; then pioneers_ms_icons="Icons are used" else pioneers_ms_icons="Not needed" fi fi AM_CONDITIONAL(CREATE_WINDOWS_ICON, [test $USE_MAINTAINER_MODE = yes -a "$with_ms_icons" != "no"]) AM_CONDITIONAL(USE_WINDOWS_ICON, [test $pioneers_is_windows_port = yes]) AM_CONDITIONAL(BUILD_CLIENT, [test "$pioneers_build_client_gtk" = "yes" -o "$pioneers_build_client_ai" = yes]) AM_CONDITIONAL(BUILD_EDITOR, [test "$pioneers_build_editor" = "yes"]) AM_CONDITIONAL(BUILD_SERVER, [test "$pioneers_build_server_gtk" = "yes" -o "$pioneers_build_server_console" = "yes"]) AM_CONDITIONAL(BUILD_META_SERVER, [test "$pioneers_build_metaserver" = "yes"]) AM_CONDITIONAL(IS_MINGW_PORT, [test "$pioneers_is_mingw_port" = "yes"]) if test "$have_scrollkeeper" = "yes"; then AC_DEFINE(HAVE_HELP, 1, [Defined when online help is present]) pioneers_help="yes, scrollkeeper"; fi AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([pioneers.spec]) AC_CONFIG_FILES([MinGW/pioneers.nsi]) AC_CONFIG_FILES([po/Makefile.in]) AC_CONFIG_FILES([client/help/C/Makefile]) AC_OUTPUT AC_MSG_NOTICE([ $PACKAGE v$VERSION configuration: Source code location: ${srcdir} Install location: ${prefix} Compiler: ${CC} Build graphical client $pioneers_build_client_gtk Build computer player $pioneers_build_client_ai Build game editor $pioneers_build_editor Build graphical server $pioneers_build_server_gtk Build console server $pioneers_build_server_console Build metaserver $pioneers_build_metaserver Build help $pioneers_help AVAHI support $have_avahi LIBNOTIFY support $have_libnotify Developers only: Use compiler warnings $pioneers_warnings Add debug information $pioneers_debug Enable deprecation checks $pioneers_deprecationChecks Maintainers only: Microsoft Windows icons $pioneers_ms_icons ]) pioneers-14.1/aclocal.m40000644000175000017500000134714411760645763012101 00000000000000# generated automatically by aclocal 1.11.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl dnl GOB_HOOK(script if found, fail) dnl if fail = "failure", abort if GOB not found dnl AC_DEFUN([GOB2_HOOK],[ AC_PATH_PROG(GOB2,gob2) if test ! x$GOB2 = x; then if test ! x$1 = x; then AC_MSG_CHECKING(for gob-2 >= $1) g_r_ve=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` g_r_ma=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` g_r_mi=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` g_ve=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` g_ma=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` g_mi=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test $g_ve -eq $g_r_ve; then if test $g_ma -ge $g_r_ma; then if test $g_mi -ge $g_r_mi; then AC_MSG_RESULT(ok) else if test $g_ma -gt $g_r_ma; then AC_MSG_RESULT(ok) else AC_MSG_ERROR("found $g_ve.$g_ma.$g_mi requires $g_r_ve.$g_r_ma.$g_r_mi") fi fi else AC_MSG_ERROR("found $g_ve.$g_ma.$g_mi requires $g_r_ve.$g_r_ma.$g_r_mi") fi else if test $g_ve -gt $g_r_ve; then AC_MSG_RESULT(ok) else AC_MSG_ERROR(major version $g_ve found but $g_r_ve required) fi fi unset gob_version unset g_ve unset g_ma unset g_mi unset g_r_ve unset g_r_ma unset g_r_mi fi AC_SUBST(GOB2) $2 else $3 fi ]) AC_DEFUN([GOB2_CHECK],[ GOB2_HOOK($1,[],[AC_MSG_ERROR([Cannot find GOB-2, check http://www.5z.com/jirka/gob.html])]) ]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, # 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) pioneers-14.1/Makefile.am0000644000175000017500000001633511715714436012261 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # some settings console_cflags = \ -I$(top_srcdir)/common \ -I$(top_builddir)/common \ -I$(includedir) \ $(GLIB2_CFLAGS) \ $(WARNINGS) \ $(DEBUGGING) \ $(GLIB_DEPRECATION) \ -DDATADIR=\""$(pioneers_datadir)"\" \ -DTHEMEDIR=\""$(pioneers_themedir_embed)"\" \ -DLOCALEDIR=\""$(pioneers_localedir)"\" \ -DPIONEERS_DIR_DEFAULT=\""$(pioneers_datadir)/games/pioneers"\" \ -DPIONEERS_SERVER_CONSOLE_PATH=\""$(bindir)/pioneers-server-console"\" \ -DPIONEERS_SERVER_GTK_PATH=\""$(bindir)/pioneers-server-gtk"\" \ -DPIONEERS_CLIENT_GTK_PATH=\""$(bindir)/pioneers"\" \ -DPIONEERS_AI_PATH=\""$(bindir)/pioneersai"\" avahi_cflags = \ $(AVAHI_CLIENT_CFLAGS) \ $(AVAHI_GLIB_CFLAGS) gtk_cflags = \ $(console_cflags) \ -I$(top_srcdir)/common/gtk \ $(GNOME2_CFLAGS) \ $(GTK2_CFLAGS) \ $(GTK_DEPRECATION) # The Fink port needs an explicit reference to driver.o console_libs = \ libpioneers.a \ $(top_builddir)/common/libpioneers_a-driver.o \ $(GLIB2_LIBS) avahi_libs = \ $(AVAHI_CLIENT_LIBS) \ $(AVAHI_GLIB_LIBS) gtk_libs = \ $(console_libs) \ libpioneers_gtk.a \ $(GNOME2_LIBS) \ $(GTK2_LIBS) configdir = $(datadir)/games/pioneers icondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/pioneers desktopdir = $(datadir)/applications # Let object files be generated in their own subdirectories AUTOMAKE_OPTIONS = subdir-objects foreign # set up these variables so the included Makefile.ams can use += SUBDIRS = bin_PROGRAMS = noinst_PROGRAMS = noinst_LIBRARIES = man_MANS = config_DATA = icon_DATA = pixmap_DATA = desktop_in_files = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = EXTRA_DIST = autogen.sh pioneers.spec xmldocs.make omf.make README.Cygwin README.MinGW BUILT_SOURCES = windows_resources_input = windows_resources_output = icons = # Use GOB to create new classes %.gob.stamp %.c %.h %-private.h: %.gob @mkdir_p@ $(dir $@) $(GOB2) --output-dir $(dir $@) $< touch $@ # creating icons %.png: %.svg @mkdir_p@ $(dir $@) $(svg_renderer_path) $(svg_renderer_width)48$(svg_renderer_height)48 $< $(svg_renderer_output) $@ if CREATE_WINDOWS_ICON # Only maintainers need to do this. It is distributed in the tarball %.ico: %.svg @mkdir_p@ $(dir $@) $(svg_renderer_path) $(svg_renderer_width)16$(svg_renderer_height)16 $< $(svg_renderer_output) $@-p16.png $(pngtopnm) $@-p16.png > $@-p16.pnm pngtopnm -alpha $@-p16.png > $@-p16a.pnm pnmcolormap 256 $@-p16.pnm > $@-p16colormap.pnm pnmremap -mapfile=$@-p16colormap.pnm $@-p16.pnm > $@-p16256.pnm $(svg_renderer_path) $(svg_renderer_width)32$(svg_renderer_height)32 $< $(svg_renderer_output) $@-p32.png pngtopnm $@-p32.png > $@-p32.pnm pngtopnm -alpha $@-p32.png > $@-p32a.pnm pnmcolormap 256 $@-p32.pnm > $@-p32colormap.pnm pnmremap -mapfile=$@-p32colormap.pnm $@-p32.pnm > $@-p32256.pnm $(svg_renderer_path) $(svg_renderer_width)48$(svg_renderer_height)48 $< $(svg_renderer_output) $@-p48.png pngtopnm $@-p48.png > $@-p48.pnm pngtopnm -alpha $@-p48.png > $@-p48a.pnm pnmcolormap 256 $@-p48.pnm > $@-p48colormap.pnm pnmremap -mapfile=$@-p48colormap.pnm $@-p48.pnm > $@-p48256.pnm ppmtowinicon -andpgms $@-p48256.pnm $@-p48a.pnm $@-p32256.pnm $@-p32a.pnm $@-p16256.pnm $@-p16a.pnm > $@ rm $@-p16.png rm $@-p16.pnm rm $@-p16a.pnm rm $@-p16colormap.pnm rm $@-p16256.pnm rm $@-p32.png rm $@-p32.pnm rm $@-p32a.pnm rm $@-p32colormap.pnm rm $@-p32256.pnm rm $@-p48.png rm $@-p48.pnm rm $@-p48a.pnm rm $@-p48colormap.pnm rm $@-p48256.pnm else %.ico: %.svg @$(ECHO) Microsoft Windows icons cannot be generated @$(ECHO) Run configure again with --enable-maintainer-mode @exit 1 endif if USE_WINDOWS_ICON # Will be used in Windows builds %.res: %.rc %.ico @mkdir_p@ $(dir $@) windres -I$(top_srcdir) -O coff -o $@ $< endif if BUILD_CLIENT include client/Makefile.am endif include server/Makefile.am if BUILD_META_SERVER include meta-server/Makefile.am endif if BUILD_EDITOR include editor/Makefile.am endif include MinGW/Makefile.am include common/Makefile.am include docs/Makefile.am include macros/Makefile.am desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @INTLTOOL_DESKTOP_RULE@ # Make use of some of the variables that were filled in by the included # Makefile.ams MAINTAINERCLEANFILES += $(icon_DATA) $(windows_resources_output) DISTCLEANFILES += $(desktop_in_files:.desktop.in=.desktop) intltool-extract intltool-merge intltool-update EXTRA_DIST += \ $(man_MANS) \ $(desktop_in_files) \ $(config_DATA) \ $(pixmap_DATA) \ $(icon_DATA) \ $(subst png,svg,$(icon_DATA)) \ $(windows_resources_input) \ $(windows_resources_output) # po doesn't use automake, but creates its own Makefile SUBDIRS += po distclean-local: rm -f *~ rm -rf autom4te.cache # This line is added, because scrollkeeper leaves many files # in /var/scrollkeeper, that makes 'make distcheck' fail distuninstallcheck_listfiles = find . -type f -print | grep -v '^\./var/scrollkeeper' # Reformat the code. reindent: find . -name '*.[ch]' -exec indent -kr -i8 '{}' ';' find . -name '*.[ch]' -exec indent -kr -i8 '{}' ';' restorepo: svn revert po/*.po po/pioneers.pot # Remove ALL generated files pristine: maintainer-clean svn status --no-ignore | awk '$$1=="I" { print substr($$0, 9, 255) }' | tr '\n' '\0' | xargs -0 rm # Application icons, in various sizes BUILT_SOURCES += $(subst .svg,.48x48_apps.png,$(icons)) EXTRA_DIST += $(icons) $(subst .svg,.48x48_apps.png,$(icons)) %.48x48_apps.png: %.svg @mkdir_p@ $(dir $@) $(svg_renderer_path) $(svg_renderer_width)48$(svg_renderer_height)48 $< $(svg_renderer_output) $@ install-icons: @mkdir_p@ $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps @mkdir_p@ $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps for icon in $(icons); do \ ICONNAME=`echo $$icon | $(AWK) '{ c = split($$0, a, "/"); print substr(a[c], 1, index(a[c], ".") - 1) }'`; \ INPUTNAME=`echo $$icon | $(AWK) '{ gsub(".svg", ""); print }'`; \ $(INSTALL_DATA) $(srcdir)/$$INPUTNAME.48x48_apps.png $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/$$ICONNAME.png; \ $(INSTALL_DATA) $(srcdir)/$$INPUTNAME.svg $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps/$$ICONNAME.svg; \ done; uninstall-icons: -for icon in $(icons); do \ ICONNAME=`echo $$icon | $(AWK) '{ c = split($$0, a, "/"); print substr(a[c], 1, index(a[c], ".") - 1) }'`; \ rm -f $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/$$ICONNAME.png; \ rm -f $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps/$$ICONNAME.svg; \ done; install-data-hook: install-icons uninstall-hook: uninstall-icons pioneers-14.1/Makefile.in0000644000175000017500000124467211760645770012306 00000000000000# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # Copyright (C) 2006 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # Copyright (C) 2006 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2011 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # Copyright (C) 2004, 2010 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2006 Roland Clobus # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) noinst_PROGRAMS = DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/MinGW/Makefile.am \ $(srcdir)/client/Makefile.am $(srcdir)/client/ai/Makefile.am \ $(srcdir)/client/common/Makefile.am \ $(srcdir)/client/gtk/Makefile.am \ $(srcdir)/client/gtk/data/Makefile.am \ $(srcdir)/client/gtk/data/themes/Classic/Makefile.am \ $(srcdir)/client/gtk/data/themes/FreeCIV-like/Makefile.am \ $(srcdir)/client/gtk/data/themes/Iceland/Makefile.am \ $(srcdir)/client/gtk/data/themes/Makefile.am \ $(srcdir)/client/gtk/data/themes/Tiny/Makefile.am \ $(srcdir)/client/gtk/data/themes/Wesnoth-like/Makefile.am \ $(srcdir)/client/gtk/data/themes/ccFlickr/Makefile.am \ $(srcdir)/client/help/Makefile.am $(srcdir)/common/Makefile.am \ $(srcdir)/common/gtk/Makefile.am $(srcdir)/config.h.in \ $(srcdir)/docs/Makefile.am $(srcdir)/editor/Makefile.am \ $(srcdir)/editor/gtk/Makefile.am $(srcdir)/macros/Makefile.am \ $(srcdir)/meta-server/Makefile.am $(srcdir)/pioneers.spec.in \ $(srcdir)/server/Makefile.am $(srcdir)/server/gtk/Makefile.am \ $(top_srcdir)/MinGW/pioneers.nsi.in $(top_srcdir)/configure \ AUTHORS COPYING ChangeLog NEWS TODO compile config.guess \ config.sub depcomp install-sh ltmain.sh missing mkinstalldirs @BUILD_CLIENT_TRUE@am__append_1 = libpioneersclient.a @BUILD_CLIENT_TRUE@am__append_2 = pioneersai @BUILD_CLIENT_TRUE@am__append_3 = \ @BUILD_CLIENT_TRUE@ client/ai/computer_names # I don't know enough about the po build system, so I'll use a recursive # make for it. @BUILD_CLIENT_TRUE@@HAVE_SCROLLKEEPER_TRUE@am__append_4 = client/help/C @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_5 = pioneers @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_6 = client/gtk/pioneers.desktop.in @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_7 = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(ccflickrtheme_DATA) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(classictheme_DATA) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(freecivtheme_DATA) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(icelandtheme_DATA) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(tinytheme_DATA) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(wesnoththeme_DATA) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/splash.svg @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_8 = client/gtk/data/pioneers.png @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_9 = client/gtk/data/pioneers.svg @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_10 = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/bridge.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/city.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/city_wall.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/develop.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/dice.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/finish.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/road.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/settlement.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/ship.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/ship_move.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/splash.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/trade.svg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/brick.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/grain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/lumber.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/ore.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/wool.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-1.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-2.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-3.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-4.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-5.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-6.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-human-7.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/style-ai.png @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_11 = client/gtk/data/splash.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.gob.stamp \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view-private.h @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@@USE_WINDOWS_ICON_TRUE@am__append_12 = client/gtk/data/pioneers.res @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@@USE_WINDOWS_ICON_TRUE@am__append_13 = client/gtk/data/pioneers.res @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_14 = client/gtk/data/pioneers.ico @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_15 = client/gtk/data/pioneers.rc # Include the data here, not at the top, # it can add extra resources to the executable @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__append_16 = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.gob.stamp \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view-private.h @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__append_17 = server/gtk/pioneers-server.png @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__append_18 = server/gtk/pioneers-server.desktop.in @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__append_19 = pioneers-server-gtk @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__append_20 = server/gtk/pioneers-server.svg @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@@USE_WINDOWS_ICON_TRUE@am__append_21 = server/gtk/pioneers-server.res @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@@USE_WINDOWS_ICON_TRUE@am__append_22 = server/gtk/pioneers-server.res @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__append_23 = server/gtk/pioneers-server.ico @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__append_24 = server/gtk/pioneers-server.rc @BUILD_SERVER_TRUE@am__append_25 = pioneers-server-console @BUILD_SERVER_TRUE@am__append_26 = libpioneers_server.a @BUILD_META_SERVER_TRUE@am__append_27 = pioneers-meta-server @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__append_28 = editor/gtk/pioneers-editor.png @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__append_29 = editor/gtk/pioneers-editor.desktop.in @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__append_30 = pioneers-editor @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__append_31 = editor/gtk/pioneers-editor.svg @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@@USE_WINDOWS_ICON_TRUE@am__append_32 = editor/gtk/pioneers-editor.res @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@@USE_WINDOWS_ICON_TRUE@am__append_33 = editor/gtk/pioneers-editor.res @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__append_34 = editor/gtk/pioneers-editor.ico @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__append_35 = editor/gtk/pioneers-editor.rc @HAVE_GNOME_TRUE@am__append_36 = libpioneers_gtk.a @HAVE_GNOME_TRUE@am__append_37 = \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.gob.stamp \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.c \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.h @HAVE_GNOME_TRUE@am__append_38 = \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.gob.stamp \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.c \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.h subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = pioneers.spec MinGW/pioneers.nsi CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libpioneers_a_AR = $(AR) $(ARFLAGS) libpioneers_a_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libpioneers_a_OBJECTS = common/libpioneers_a-buildrec.$(OBJEXT) \ common/libpioneers_a-cards.$(OBJEXT) \ common/libpioneers_a-common_glib.$(OBJEXT) \ common/libpioneers_a-cost.$(OBJEXT) \ common/libpioneers_a-driver.$(OBJEXT) \ common/libpioneers_a-game.$(OBJEXT) \ common/libpioneers_a-log.$(OBJEXT) \ common/libpioneers_a-map.$(OBJEXT) \ common/libpioneers_a-map_query.$(OBJEXT) \ common/libpioneers_a-network.$(OBJEXT) \ common/libpioneers_a-notifying-string.$(OBJEXT) \ common/libpioneers_a-quoteinfo.$(OBJEXT) \ common/libpioneers_a-state.$(OBJEXT) libpioneers_a_OBJECTS = $(am_libpioneers_a_OBJECTS) libpioneers_gtk_a_AR = $(AR) $(ARFLAGS) libpioneers_gtk_a_LIBADD = am__libpioneers_gtk_a_SOURCES_DIST = common/gtk/aboutbox.c \ common/gtk/aboutbox.h common/gtk/colors.c common/gtk/colors.h \ common/gtk/common_gtk.c common/gtk/common_gtk.h \ common/gtk/config-gnome.c common/gtk/config-gnome.h \ common/gtk/game-rules.c common/gtk/game-rules.h \ common/gtk/game-settings.c common/gtk/game-settings.h \ common/gtk/gtkbugs.c common/gtk/gtkbugs.h \ common/gtk/gtkcompat.h common/gtk/guimap.c common/gtk/guimap.h \ common/gtk/metaserver.c common/gtk/metaserver.h \ common/gtk/player-icon.c common/gtk/player-icon.h \ common/gtk/polygon.c common/gtk/polygon.h \ common/gtk/scrollable-text-view.gob \ common/gtk/scrollable-text-view.gob.stamp \ common/gtk/scrollable-text-view.c \ common/gtk/scrollable-text-view.h common/gtk/select-game.c \ common/gtk/select-game.h common/gtk/theme.c common/gtk/theme.h @HAVE_GNOME_TRUE@am_libpioneers_gtk_a_OBJECTS = common/gtk/libpioneers_gtk_a-aboutbox.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-colors.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-common_gtk.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-config-gnome.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-game-rules.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-game-settings.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-gtkbugs.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-guimap.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-metaserver.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-player-icon.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-polygon.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-scrollable-text-view.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-select-game.$(OBJEXT) \ @HAVE_GNOME_TRUE@ common/gtk/libpioneers_gtk_a-theme.$(OBJEXT) libpioneers_gtk_a_OBJECTS = $(am_libpioneers_gtk_a_OBJECTS) libpioneers_server_a_AR = $(AR) $(ARFLAGS) libpioneers_server_a_LIBADD = am__libpioneers_server_a_SOURCES_DIST = server/admin.c server/admin.h \ server/avahi.c server/avahi.h server/buildutil.c \ server/develop.c server/discard.c server/gold.c server/meta.c \ server/player.c server/pregame.c server/resource.c \ server/robber.c server/server.c server/server.h server/trade.c \ server/turn.c @BUILD_SERVER_TRUE@am_libpioneers_server_a_OBJECTS = server/libpioneers_server_a-admin.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-avahi.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-buildutil.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-develop.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-discard.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-gold.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-meta.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-player.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-pregame.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-resource.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-robber.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-server.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-trade.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/libpioneers_server_a-turn.$(OBJEXT) libpioneers_server_a_OBJECTS = $(am_libpioneers_server_a_OBJECTS) libpioneersclient_a_AR = $(AR) $(ARFLAGS) libpioneersclient_a_LIBADD = am__libpioneersclient_a_SOURCES_DIST = client/callback.h \ client/common/build.c client/common/callback.c \ client/common/client.c client/common/client.h \ client/common/develop.c client/common/main.c \ client/common/player.c client/common/resource.c \ client/common/robber.c client/common/setup.c \ client/common/stock.c client/common/turn.c @BUILD_CLIENT_TRUE@am_libpioneersclient_a_OBJECTS = client/common/libpioneersclient_a-build.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-callback.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-client.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-develop.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-main.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-player.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-resource.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-robber.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-setup.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-stock.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/common/libpioneersclient_a-turn.$(OBJEXT) libpioneersclient_a_OBJECTS = $(am_libpioneersclient_a_OBJECTS) @BUILD_CLIENT_TRUE@am__EXEEXT_1 = pioneersai$(EXEEXT) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__EXEEXT_2 = pioneers$(EXEEXT) @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am__EXEEXT_3 = pioneers-server-gtk$(EXEEXT) @BUILD_SERVER_TRUE@am__EXEEXT_4 = pioneers-server-console$(EXEEXT) @BUILD_META_SERVER_TRUE@am__EXEEXT_5 = pioneers-meta-server$(EXEEXT) @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am__EXEEXT_6 = \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ pioneers-editor$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man6dir)" \ "$(DESTDIR)$(ccflickrthemedir)" "$(DESTDIR)$(classicthemedir)" \ "$(DESTDIR)$(configdir)" "$(DESTDIR)$(desktopdir)" \ "$(DESTDIR)$(freecivthemedir)" "$(DESTDIR)$(icelandthemedir)" \ "$(DESTDIR)$(icondir)" "$(DESTDIR)$(pixmapdir)" \ "$(DESTDIR)$(tinythemedir)" "$(DESTDIR)$(wesnoththemedir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am__pioneers_SOURCES_DIST = client/gtk/admin-gtk.c client/callback.h \ client/gtk/audio.h client/gtk/avahi.h \ client/gtk/avahi-browser.h client/gtk/frontend.h \ client/gtk/gui.h client/gtk/histogram.h client/gtk/audio.c \ client/gtk/avahi.c client/gtk/avahi-browser.c \ client/gtk/callbacks.c client/gtk/chat.c client/gtk/connect.c \ client/gtk/develop.c client/gtk/discard.c \ client/gtk/frontend.c client/gtk/gameover.c client/gtk/gold.c \ client/gtk/gui.c client/gtk/histogram.c client/gtk/identity.c \ client/gtk/interface.c client/gtk/legend.c \ client/gtk/monopoly.c client/gtk/name.c \ client/gtk/notification.c client/gtk/notification.h \ client/gtk/offline.c client/gtk/plenty.c client/gtk/player.c \ client/gtk/quote.c client/gtk/quote-view.c \ client/gtk/quote-view.h client/gtk/resource.c \ client/gtk/resource-view.gob \ client/gtk/resource-view.gob.stamp client/gtk/resource-view.c \ client/gtk/resource-view.h client/gtk/resource-view-private.h \ client/gtk/resource-table.c client/gtk/resource-table.h \ client/gtk/settingscreen.c client/gtk/state.c \ client/gtk/trade.c @ADMIN_GTK_SUPPORT_TRUE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am__objects_1 = client/gtk/pioneers-admin-gtk.$(OBJEXT) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@am_pioneers_OBJECTS = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(am__objects_1) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-audio.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-avahi.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-avahi-browser.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-callbacks.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-chat.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-connect.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-develop.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-discard.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-frontend.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-gameover.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-gold.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-gui.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-histogram.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-identity.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-interface.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-legend.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-monopoly.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-name.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-notification.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-offline.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-plenty.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-player.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-quote.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-quote-view.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-resource.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-resource-view.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-resource-table.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-settingscreen.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-state.$(OBJEXT) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/pioneers-trade.$(OBJEXT) am__EXTRA_pioneers_SOURCES_DIST = client/gtk/admin-gtk.c pioneers_OBJECTS = $(am_pioneers_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = libpioneers.a \ $(top_builddir)/common/libpioneers_a-driver.o \ $(am__DEPENDENCIES_1) am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) libpioneers_gtk.a \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@pioneers_DEPENDENCIES = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ libpioneersclient.a \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(am__DEPENDENCIES_3) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(am__DEPENDENCIES_4) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(am__append_12) am__pioneers_editor_SOURCES_DIST = editor/gtk/editor.c \ editor/gtk/game-devcards.c editor/gtk/game-devcards.h \ editor/gtk/game-buildings.c editor/gtk/game-buildings.h \ editor/gtk/game-resources.c editor/gtk/game-resources.h @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@am_pioneers_editor_OBJECTS = editor/gtk/pioneers_editor-editor.$(OBJEXT) \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/pioneers_editor-game-devcards.$(OBJEXT) \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/pioneers_editor-game-buildings.$(OBJEXT) \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/pioneers_editor-game-resources.$(OBJEXT) pioneers_editor_OBJECTS = $(am_pioneers_editor_OBJECTS) @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@pioneers_editor_DEPENDENCIES = \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ $(am__DEPENDENCIES_3) \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ $(am__append_32) am__pioneers_meta_server_SOURCES_DIST = meta-server/main.c @BUILD_META_SERVER_TRUE@am_pioneers_meta_server_OBJECTS = meta-server/pioneers_meta_server-main.$(OBJEXT) pioneers_meta_server_OBJECTS = $(am_pioneers_meta_server_OBJECTS) @BUILD_META_SERVER_TRUE@pioneers_meta_server_DEPENDENCIES = \ @BUILD_META_SERVER_TRUE@ $(am__DEPENDENCIES_2) am__pioneers_server_console_SOURCES_DIST = server/main.c \ server/glib-driver.c server/glib-driver.h @BUILD_SERVER_TRUE@am_pioneers_server_console_OBJECTS = server/pioneers_server_console-main.$(OBJEXT) \ @BUILD_SERVER_TRUE@ server/pioneers_server_console-glib-driver.$(OBJEXT) pioneers_server_console_OBJECTS = \ $(am_pioneers_server_console_OBJECTS) @BUILD_SERVER_TRUE@pioneers_server_console_DEPENDENCIES = \ @BUILD_SERVER_TRUE@ libpioneers_server.a $(am__DEPENDENCIES_2) \ @BUILD_SERVER_TRUE@ $(am__DEPENDENCIES_4) am__pioneers_server_gtk_SOURCES_DIST = server/gtk/main.c @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@am_pioneers_server_gtk_OBJECTS = server/gtk/pioneers_server_gtk-main.$(OBJEXT) pioneers_server_gtk_OBJECTS = $(am_pioneers_server_gtk_OBJECTS) @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@pioneers_server_gtk_DEPENDENCIES = \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ libpioneers_server.a \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ $(am__DEPENDENCIES_3) \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ $(am__DEPENDENCIES_4) \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ $(am__append_21) am__pioneersai_SOURCES_DIST = client/callback.h client/ai/ai.h \ client/ai/ai.c client/ai/greedy.c client/ai/lobbybot.c @BUILD_CLIENT_TRUE@am_pioneersai_OBJECTS = \ @BUILD_CLIENT_TRUE@ client/ai/pioneersai-ai.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/ai/pioneersai-greedy.$(OBJEXT) \ @BUILD_CLIENT_TRUE@ client/ai/pioneersai-lobbybot.$(OBJEXT) pioneersai_OBJECTS = $(am_pioneersai_OBJECTS) @BUILD_CLIENT_TRUE@pioneersai_DEPENDENCIES = libpioneersclient.a \ @BUILD_CLIENT_TRUE@ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libpioneers_a_SOURCES) $(libpioneers_gtk_a_SOURCES) \ $(libpioneers_server_a_SOURCES) $(libpioneersclient_a_SOURCES) \ $(pioneers_SOURCES) $(EXTRA_pioneers_SOURCES) \ $(pioneers_editor_SOURCES) $(pioneers_meta_server_SOURCES) \ $(pioneers_server_console_SOURCES) \ $(pioneers_server_gtk_SOURCES) $(pioneersai_SOURCES) DIST_SOURCES = $(libpioneers_a_SOURCES) \ $(am__libpioneers_gtk_a_SOURCES_DIST) \ $(am__libpioneers_server_a_SOURCES_DIST) \ $(am__libpioneersclient_a_SOURCES_DIST) \ $(am__pioneers_SOURCES_DIST) \ $(am__EXTRA_pioneers_SOURCES_DIST) \ $(am__pioneers_editor_SOURCES_DIST) \ $(am__pioneers_meta_server_SOURCES_DIST) \ $(am__pioneers_server_console_SOURCES_DIST) \ $(am__pioneers_server_gtk_SOURCES_DIST) \ $(am__pioneersai_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man6dir = $(mandir)/man6 NROFF = nroff MANS = $(man_MANS) DATA = $(ccflickrtheme_DATA) $(classictheme_DATA) $(config_DATA) \ $(desktop_DATA) $(freecivtheme_DATA) $(icelandtheme_DATA) \ $(icon_DATA) $(pixmap_DATA) $(tinytheme_DATA) \ $(wesnoththeme_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = client/help/C po DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVAHI_CLIENT_CFLAGS = @AVAHI_CLIENT_CFLAGS@ AVAHI_CLIENT_LIBS = @AVAHI_CLIENT_LIBS@ AVAHI_GLIB_CFLAGS = @AVAHI_GLIB_CFLAGS@ AVAHI_GLIB_LIBS = @AVAHI_GLIB_LIBS@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEBUGGING = @DEBUGGING@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB2_CFLAGS = @GLIB2_CFLAGS@ GLIB2_LIBS = @GLIB2_LIBS@ GLIB_DEPRECATION = @GLIB_DEPRECATION@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GNOME2_CFLAGS = @GNOME2_CFLAGS@ GNOME2_LIBS = @GNOME2_LIBS@ GOB2 = @GOB2@ GOBJECT2_CFLAGS = @GOBJECT2_CFLAGS@ GOBJECT2_LIBS = @GOBJECT2_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK_DEPRECATION = @GTK_DEPRECATION@ GTK_OPTIMAL_VERSION_CFLAGS = @GTK_OPTIMAL_VERSION_CFLAGS@ GTK_OPTIMAL_VERSION_LIBS = @GTK_OPTIMAL_VERSION_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBNOTIFY_OPTIMAL_VERSION_CFLAGS = @LIBNOTIFY_OPTIMAL_VERSION_CFLAGS@ LIBNOTIFY_OPTIMAL_VERSION_LIBS = @LIBNOTIFY_OPTIMAL_VERSION_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SCROLLKEEPER_CONFIG = @SCROLLKEEPER_CONFIG@ SCROLLKEEPER_REQUIRED = @SCROLLKEEPER_REQUIRED@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pioneers_datadir = @pioneers_datadir@ pioneers_localedir = @pioneers_localedir@ pioneers_themedir = @pioneers_themedir@ pioneers_themedir_embed = @pioneers_themedir_embed@ pngtopnm = @pngtopnm@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ svg_renderer_height = @svg_renderer_height@ svg_renderer_output = @svg_renderer_output@ svg_renderer_path = @svg_renderer_path@ svg_renderer_width = @svg_renderer_width@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ whitespace_trick = @whitespace_trick@ # some settings console_cflags = \ -I$(top_srcdir)/common \ -I$(top_builddir)/common \ -I$(includedir) \ $(GLIB2_CFLAGS) \ $(WARNINGS) \ $(DEBUGGING) \ $(GLIB_DEPRECATION) \ -DDATADIR=\""$(pioneers_datadir)"\" \ -DTHEMEDIR=\""$(pioneers_themedir_embed)"\" \ -DLOCALEDIR=\""$(pioneers_localedir)"\" \ -DPIONEERS_DIR_DEFAULT=\""$(pioneers_datadir)/games/pioneers"\" \ -DPIONEERS_SERVER_CONSOLE_PATH=\""$(bindir)/pioneers-server-console"\" \ -DPIONEERS_SERVER_GTK_PATH=\""$(bindir)/pioneers-server-gtk"\" \ -DPIONEERS_CLIENT_GTK_PATH=\""$(bindir)/pioneers"\" \ -DPIONEERS_AI_PATH=\""$(bindir)/pioneersai"\" avahi_cflags = \ $(AVAHI_CLIENT_CFLAGS) \ $(AVAHI_GLIB_CFLAGS) gtk_cflags = \ $(console_cflags) \ -I$(top_srcdir)/common/gtk \ $(GNOME2_CFLAGS) \ $(GTK2_CFLAGS) \ $(GTK_DEPRECATION) # The Fink port needs an explicit reference to driver.o console_libs = \ libpioneers.a \ $(top_builddir)/common/libpioneers_a-driver.o \ $(GLIB2_LIBS) avahi_libs = \ $(AVAHI_CLIENT_LIBS) \ $(AVAHI_GLIB_LIBS) gtk_libs = \ $(console_libs) \ libpioneers_gtk.a \ $(GNOME2_LIBS) \ $(GTK2_LIBS) configdir = $(datadir)/games/pioneers icondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/pioneers desktopdir = $(datadir)/applications # Let object files be generated in their own subdirectories AUTOMAKE_OPTIONS = subdir-objects foreign # set up these variables so the included Makefile.ams can use += # po doesn't use automake, but creates its own Makefile SUBDIRS = $(am__append_4) po noinst_LIBRARIES = $(am__append_1) $(am__append_26) libpioneers.a \ $(am__append_36) man_MANS = docs/pioneers.6 docs/pioneers-server-gtk.6 \ docs/pioneers-server-console.6 docs/pioneersai.6 \ docs/pioneers-meta-server.6 docs/pioneers-editor.6 config_DATA = $(am__append_3) server/default.game \ server/5-6-player.game server/four-islands.game \ server/seafarers.game server/seafarers-gold.game \ server/small.game server/archipel_gold.game server/canyon.game \ server/coeur.game server/conquest.game \ server/conquest+ports.game server/crane_island.game \ server/iles.game server/pond.game server/square.game \ server/star.game server/x.game server/Cube.game \ server/Another_swimming_pool_in_the_wall.game \ server/Evil_square.game server/GuerreDe100ans.game \ server/Mini_another_swimming_pool_in_the_wall.game \ server/henjes.game server/lorindol.game server/lobby.game \ server/south_africa.game server/ubuntuland.game \ server/north_america.game icon_DATA = $(am__append_8) $(am__append_17) $(am__append_28) pixmap_DATA = $(am__append_10) desktop_in_files = $(am__append_6) $(am__append_18) $(am__append_29) CLEANFILES = $(am__append_13) $(am__append_22) $(am__append_33) \ common/authors.h common/version.h DISTCLEANFILES = $(desktop_in_files:.desktop.in=.desktop) \ intltool-extract intltool-merge intltool-update # Make use of some of the variables that were filled in by the included # Makefile.ams MAINTAINERCLEANFILES = $(am__append_11) $(am__append_38) \ common/notifying-string.gob.stamp common/notifying-string.c \ common/notifying-string.h common/notifying-string-private.h \ $(icon_DATA) $(windows_resources_output) EXTRA_DIST = autogen.sh pioneers.spec xmldocs.make omf.make \ README.Cygwin README.MinGW $(am__append_7) \ $(srcdir)/MinGW/loaders.cache macros/gnome-autogen.sh \ macros/type_socklen_t.m4 $(man_MANS) $(desktop_in_files) \ $(config_DATA) $(pixmap_DATA) $(icon_DATA) $(subst \ png,svg,$(icon_DATA)) $(windows_resources_input) \ $(windows_resources_output) $(icons) $(subst \ .svg,.48x48_apps.png,$(icons)) # Application icons, in various sizes BUILT_SOURCES = $(am__append_16) $(am__append_37) build_version \ common/authors.h common/notifying-string.gob.stamp \ common/notifying-string.c common/notifying-string.h \ common/notifying-string-private.h $(subst \ .svg,.48x48_apps.png,$(icons)) windows_resources_input = $(am__append_15) $(am__append_24) \ $(am__append_35) windows_resources_output = $(am__append_14) $(am__append_23) \ $(am__append_34) icons = $(am__append_9) $(am__append_20) $(am__append_31) @BUILD_CLIENT_TRUE@libpioneersclient_a_CPPFLAGS = -I$(top_srcdir)/client $(console_cflags) @BUILD_CLIENT_TRUE@libpioneersclient_a_SOURCES = \ @BUILD_CLIENT_TRUE@ client/callback.h \ @BUILD_CLIENT_TRUE@ client/common/build.c \ @BUILD_CLIENT_TRUE@ client/common/callback.c \ @BUILD_CLIENT_TRUE@ client/common/client.c \ @BUILD_CLIENT_TRUE@ client/common/client.h \ @BUILD_CLIENT_TRUE@ client/common/develop.c \ @BUILD_CLIENT_TRUE@ client/common/main.c \ @BUILD_CLIENT_TRUE@ client/common/player.c \ @BUILD_CLIENT_TRUE@ client/common/resource.c \ @BUILD_CLIENT_TRUE@ client/common/robber.c \ @BUILD_CLIENT_TRUE@ client/common/setup.c \ @BUILD_CLIENT_TRUE@ client/common/stock.c \ @BUILD_CLIENT_TRUE@ client/common/turn.c @BUILD_CLIENT_TRUE@pioneersai_CPPFLAGS = -I$(top_srcdir)/client -I$(top_srcdir)/client/common $(console_cflags) $(GOBJECT2_CFLAGS) @BUILD_CLIENT_TRUE@pioneersai_SOURCES = \ @BUILD_CLIENT_TRUE@ client/callback.h \ @BUILD_CLIENT_TRUE@ client/ai/ai.h \ @BUILD_CLIENT_TRUE@ client/ai/ai.c \ @BUILD_CLIENT_TRUE@ client/ai/greedy.c \ @BUILD_CLIENT_TRUE@ client/ai/lobbybot.c @BUILD_CLIENT_TRUE@pioneersai_LDADD = libpioneersclient.a $(console_libs) $(GOBJECT2_LIBS) @ADMIN_GTK_SUPPORT_FALSE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ADMIN_GTK = # if anyone knows a cleaner way to do this, be my guest. Automake screamed # at me when I tried to do it more directly. @ADMIN_GTK_SUPPORT_TRUE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ADMIN_GTK = -DADMIN_GTK @ADMIN_GTK_SUPPORT_FALSE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ADMIN_GTK_FILES_ACTIVE = @ADMIN_GTK_SUPPORT_TRUE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ADMIN_GTK_FILES_ACTIVE = client/gtk/admin-gtk.c @ADMIN_GTK_SUPPORT_FALSE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ADMIN_GTK_FILES_INACTIVE = client/gtk/admin-gtk.c @ADMIN_GTK_SUPPORT_TRUE@@BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ADMIN_GTK_FILES_INACTIVE = @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@pioneers_CPPFLAGS = -I$(top_srcdir)/client -I$(top_srcdir)/client/common $(LIBNOTIFY_CFLAGS) $(gtk_cflags) $(ADMIN_GTK) $(avahi_cflags) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@EXTRA_pioneers_SOURCES = $(ADMIN_GTK_FILES_INACTIVE) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@pioneers_SOURCES = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(ADMIN_GTK_FILES_ACTIVE) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/callback.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/audio.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/avahi.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/avahi-browser.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/frontend.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/gui.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/histogram.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/audio.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/avahi.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/avahi-browser.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/callbacks.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/chat.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/connect.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/develop.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/discard.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/frontend.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/gameover.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/gold.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/gui.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/histogram.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/identity.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/interface.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/legend.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/monopoly.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/name.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/notification.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/notification.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/offline.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/plenty.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/player.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/quote.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/quote-view.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/quote-view.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.gob \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.gob.stamp \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-view-private.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-table.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/resource-table.h \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/settingscreen.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/state.c \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/trade.c @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@pioneers_LDADD = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ libpioneersclient.a \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(gtk_libs) $(avahi_libs) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(LIBNOTIFY_LIBS) \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(am__append_12) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ccflickrthemedir = $(pioneers_themedir)/ccFlickr @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ccflickrtheme_DATA = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/ATTRIB \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/board.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/brick.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/desert.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/gold.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/grain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/lumber.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/ore.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/port-brick.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/port-gold.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/port-grain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/port-lumber.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/port-ore.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/port-wool.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/sea.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/theme.cfg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/ccFlickr/wool.png @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@classicthemedir = $(pioneers_themedir)/Classic @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@classictheme_DATA = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/board.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/desert.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/field.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/forest.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/gold.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/hill.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/mountain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/pasture.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/sea.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Classic/theme.cfg @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@freecivthemedir = $(pioneers_themedir)/FreeCIV-like @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@freecivtheme_DATA = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/desert.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/forest.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/mountain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/sea.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/board.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/field.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/hill.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/pasture.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/gold.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/FreeCIV-like/theme.cfg @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@icelandthemedir = $(pioneers_themedir)/Iceland @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@icelandtheme_DATA = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/desert.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/field_grain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/forest_lumber.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/gold.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/hill_brick.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/mountain_ore.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/pasture_wool.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/sea.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/board.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Iceland/theme.cfg @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@tinythemedir = $(pioneers_themedir)/Tiny @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@tinytheme_DATA = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/board.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/brick-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/brick-port.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/desert-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/gold-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/grain-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/grain-port.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/lumber-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/lumber-port.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/ore-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/ore-port.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/sea-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/theme.cfg \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/wool-lorindol.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Tiny/wool-port.png @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@wesnoththemedir = $(pioneers_themedir)/Wesnoth-like @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@wesnoththeme_DATA = \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/board.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/desert.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/field.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/forest.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/gold.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/hill.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/mountain.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/pasture.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/sea.png \ @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ client/gtk/data/themes/Wesnoth-like/theme.cfg @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@pioneers_server_gtk_CPPFLAGS = $(gtk_cflags) $(avahi_cflags) -I $(srcdir)/server @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@pioneers_server_gtk_LDADD = \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ libpioneers_server.a \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ $(gtk_libs) $(avahi_libs) \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ $(am__append_21) @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@pioneers_server_gtk_SOURCES = \ @BUILD_SERVER_TRUE@@HAVE_GNOME_TRUE@ server/gtk/main.c @BUILD_SERVER_TRUE@pioneers_server_console_CPPFLAGS = $(console_cflags) @BUILD_SERVER_TRUE@libpioneers_server_a_CPPFLAGS = $(console_cflags) $(avahi_cflags) @BUILD_SERVER_TRUE@libpioneers_server_a_SOURCES = \ @BUILD_SERVER_TRUE@ server/admin.c \ @BUILD_SERVER_TRUE@ server/admin.h \ @BUILD_SERVER_TRUE@ server/avahi.c \ @BUILD_SERVER_TRUE@ server/avahi.h \ @BUILD_SERVER_TRUE@ server/buildutil.c \ @BUILD_SERVER_TRUE@ server/develop.c \ @BUILD_SERVER_TRUE@ server/discard.c \ @BUILD_SERVER_TRUE@ server/gold.c \ @BUILD_SERVER_TRUE@ server/meta.c \ @BUILD_SERVER_TRUE@ server/player.c \ @BUILD_SERVER_TRUE@ server/pregame.c \ @BUILD_SERVER_TRUE@ server/resource.c \ @BUILD_SERVER_TRUE@ server/robber.c \ @BUILD_SERVER_TRUE@ server/server.c \ @BUILD_SERVER_TRUE@ server/server.h \ @BUILD_SERVER_TRUE@ server/trade.c \ @BUILD_SERVER_TRUE@ server/turn.c @BUILD_SERVER_TRUE@pioneers_server_console_SOURCES = \ @BUILD_SERVER_TRUE@ server/main.c \ @BUILD_SERVER_TRUE@ server/glib-driver.c \ @BUILD_SERVER_TRUE@ server/glib-driver.h @BUILD_SERVER_TRUE@pioneers_server_console_LDADD = libpioneers_server.a $(console_libs) $(avahi_libs) @BUILD_META_SERVER_TRUE@pioneers_meta_server_CPPFLAGS = $(console_cflags) @BUILD_META_SERVER_TRUE@pioneers_meta_server_LDADD = $(console_libs) @BUILD_META_SERVER_TRUE@pioneers_meta_server_SOURCES = \ @BUILD_META_SERVER_TRUE@ meta-server/main.c @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@pioneers_editor_CPPFLAGS = $(gtk_cflags) @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@pioneers_editor_SOURCES = \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/editor.c \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/game-devcards.c \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/game-devcards.h \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/game-buildings.c \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/game-buildings.h \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/game-resources.c \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ editor/gtk/game-resources.h @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@pioneers_editor_LDADD = \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ $(gtk_libs) \ @BUILD_EDITOR_TRUE@@HAVE_GNOME_TRUE@ $(am__append_32) @HAVE_GNOME_TRUE@libpioneers_gtk_a_CPPFLAGS = $(gtk_cflags) @HAVE_GNOME_TRUE@libpioneers_gtk_a_SOURCES = \ @HAVE_GNOME_TRUE@ common/gtk/aboutbox.c \ @HAVE_GNOME_TRUE@ common/gtk/aboutbox.h \ @HAVE_GNOME_TRUE@ common/gtk/colors.c \ @HAVE_GNOME_TRUE@ common/gtk/colors.h \ @HAVE_GNOME_TRUE@ common/gtk/common_gtk.c \ @HAVE_GNOME_TRUE@ common/gtk/common_gtk.h \ @HAVE_GNOME_TRUE@ common/gtk/config-gnome.c \ @HAVE_GNOME_TRUE@ common/gtk/config-gnome.h \ @HAVE_GNOME_TRUE@ common/gtk/game-rules.c \ @HAVE_GNOME_TRUE@ common/gtk/game-rules.h \ @HAVE_GNOME_TRUE@ common/gtk/game-settings.c \ @HAVE_GNOME_TRUE@ common/gtk/game-settings.h \ @HAVE_GNOME_TRUE@ common/gtk/gtkbugs.c \ @HAVE_GNOME_TRUE@ common/gtk/gtkbugs.h \ @HAVE_GNOME_TRUE@ common/gtk/gtkcompat.h \ @HAVE_GNOME_TRUE@ common/gtk/guimap.c \ @HAVE_GNOME_TRUE@ common/gtk/guimap.h \ @HAVE_GNOME_TRUE@ common/gtk/metaserver.c \ @HAVE_GNOME_TRUE@ common/gtk/metaserver.h \ @HAVE_GNOME_TRUE@ common/gtk/player-icon.c \ @HAVE_GNOME_TRUE@ common/gtk/player-icon.h \ @HAVE_GNOME_TRUE@ common/gtk/polygon.c \ @HAVE_GNOME_TRUE@ common/gtk/polygon.h \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.gob \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.gob.stamp \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.c \ @HAVE_GNOME_TRUE@ common/gtk/scrollable-text-view.h \ @HAVE_GNOME_TRUE@ common/gtk/select-game.c \ @HAVE_GNOME_TRUE@ common/gtk/select-game.h \ @HAVE_GNOME_TRUE@ common/gtk/theme.c \ @HAVE_GNOME_TRUE@ common/gtk/theme.h libpioneers_a_CPPFLAGS = $(console_cflags) libpioneers_a_SOURCES = \ common/authors.h \ common/buildrec.c \ common/buildrec.h \ common/cards.c \ common/cards.h \ common/common_glib.c \ common/common_glib.h \ common/cost.c \ common/cost.h \ common/driver.c \ common/driver.h \ common/game.c \ common/game.h \ common/log.c \ common/log.h \ common/map.c \ common/map.h \ common/map_query.c \ common/network.c \ common/network.h \ common/notifying-string.gob \ common/notifying-string.gob.stamp \ common/notifying-string.c \ common/notifying-string.h \ common/notifying-string-private.h \ common/quoteinfo.c \ common/quoteinfo.h \ common/state.c \ common/state.h desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) # This line is added, because scrollkeeper leaves many files # in /var/scrollkeeper, that makes 'make distcheck' fail distuninstallcheck_listfiles = find . -type f -print | grep -v '^\./var/scrollkeeper' all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/client/Makefile.am $(srcdir)/client/common/Makefile.am $(srcdir)/client/ai/Makefile.am $(srcdir)/client/help/Makefile.am $(srcdir)/client/gtk/Makefile.am $(srcdir)/client/gtk/data/Makefile.am $(srcdir)/client/gtk/data/themes/Makefile.am $(srcdir)/client/gtk/data/themes/ccFlickr/Makefile.am $(srcdir)/client/gtk/data/themes/Classic/Makefile.am $(srcdir)/client/gtk/data/themes/FreeCIV-like/Makefile.am $(srcdir)/client/gtk/data/themes/Iceland/Makefile.am $(srcdir)/client/gtk/data/themes/Tiny/Makefile.am $(srcdir)/client/gtk/data/themes/Wesnoth-like/Makefile.am $(srcdir)/server/Makefile.am $(srcdir)/server/gtk/Makefile.am $(srcdir)/meta-server/Makefile.am $(srcdir)/editor/Makefile.am $(srcdir)/editor/gtk/Makefile.am $(srcdir)/MinGW/Makefile.am $(srcdir)/common/Makefile.am $(srcdir)/common/gtk/Makefile.am $(srcdir)/docs/Makefile.am $(srcdir)/macros/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(srcdir)/client/Makefile.am $(srcdir)/client/common/Makefile.am $(srcdir)/client/ai/Makefile.am $(srcdir)/client/help/Makefile.am $(srcdir)/client/gtk/Makefile.am $(srcdir)/client/gtk/data/Makefile.am $(srcdir)/client/gtk/data/themes/Makefile.am $(srcdir)/client/gtk/data/themes/ccFlickr/Makefile.am $(srcdir)/client/gtk/data/themes/Classic/Makefile.am $(srcdir)/client/gtk/data/themes/FreeCIV-like/Makefile.am $(srcdir)/client/gtk/data/themes/Iceland/Makefile.am $(srcdir)/client/gtk/data/themes/Tiny/Makefile.am $(srcdir)/client/gtk/data/themes/Wesnoth-like/Makefile.am $(srcdir)/server/Makefile.am $(srcdir)/server/gtk/Makefile.am $(srcdir)/meta-server/Makefile.am $(srcdir)/editor/Makefile.am $(srcdir)/editor/gtk/Makefile.am $(srcdir)/MinGW/Makefile.am $(srcdir)/common/Makefile.am $(srcdir)/common/gtk/Makefile.am $(srcdir)/docs/Makefile.am $(srcdir)/macros/Makefile.am: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 pioneers.spec: $(top_builddir)/config.status $(srcdir)/pioneers.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ MinGW/pioneers.nsi: $(top_builddir)/config.status $(top_srcdir)/MinGW/pioneers.nsi.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) common/$(am__dirstamp): @$(MKDIR_P) common @: > common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) common/$(DEPDIR) @: > common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-buildrec.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-cards.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-common_glib.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-cost.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-driver.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-game.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-log.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-map.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-map_query.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-network.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-notifying-string.$(OBJEXT): \ common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-quoteinfo.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) common/libpioneers_a-state.$(OBJEXT): common/$(am__dirstamp) \ common/$(DEPDIR)/$(am__dirstamp) libpioneers.a: $(libpioneers_a_OBJECTS) $(libpioneers_a_DEPENDENCIES) $(EXTRA_libpioneers_a_DEPENDENCIES) -rm -f libpioneers.a $(libpioneers_a_AR) libpioneers.a $(libpioneers_a_OBJECTS) $(libpioneers_a_LIBADD) $(RANLIB) libpioneers.a common/gtk/$(am__dirstamp): @$(MKDIR_P) common/gtk @: > common/gtk/$(am__dirstamp) common/gtk/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) common/gtk/$(DEPDIR) @: > common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-aboutbox.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-colors.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-common_gtk.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-config-gnome.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-game-rules.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-game-settings.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-gtkbugs.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-guimap.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-metaserver.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-player-icon.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-polygon.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-scrollable-text-view.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-select-game.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) common/gtk/libpioneers_gtk_a-theme.$(OBJEXT): \ common/gtk/$(am__dirstamp) \ common/gtk/$(DEPDIR)/$(am__dirstamp) libpioneers_gtk.a: $(libpioneers_gtk_a_OBJECTS) $(libpioneers_gtk_a_DEPENDENCIES) $(EXTRA_libpioneers_gtk_a_DEPENDENCIES) -rm -f libpioneers_gtk.a $(libpioneers_gtk_a_AR) libpioneers_gtk.a $(libpioneers_gtk_a_OBJECTS) $(libpioneers_gtk_a_LIBADD) $(RANLIB) libpioneers_gtk.a server/$(am__dirstamp): @$(MKDIR_P) server @: > server/$(am__dirstamp) server/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) server/$(DEPDIR) @: > server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-admin.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-avahi.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-buildutil.$(OBJEXT): \ server/$(am__dirstamp) server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-develop.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-discard.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-gold.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-meta.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-player.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-pregame.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-resource.$(OBJEXT): \ server/$(am__dirstamp) server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-robber.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-server.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-trade.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/libpioneers_server_a-turn.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) libpioneers_server.a: $(libpioneers_server_a_OBJECTS) $(libpioneers_server_a_DEPENDENCIES) $(EXTRA_libpioneers_server_a_DEPENDENCIES) -rm -f libpioneers_server.a $(libpioneers_server_a_AR) libpioneers_server.a $(libpioneers_server_a_OBJECTS) $(libpioneers_server_a_LIBADD) $(RANLIB) libpioneers_server.a client/common/$(am__dirstamp): @$(MKDIR_P) client/common @: > client/common/$(am__dirstamp) client/common/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) client/common/$(DEPDIR) @: > client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-build.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-callback.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-client.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-develop.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-main.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-player.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-resource.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-robber.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-setup.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-stock.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) client/common/libpioneersclient_a-turn.$(OBJEXT): \ client/common/$(am__dirstamp) \ client/common/$(DEPDIR)/$(am__dirstamp) libpioneersclient.a: $(libpioneersclient_a_OBJECTS) $(libpioneersclient_a_DEPENDENCIES) $(EXTRA_libpioneersclient_a_DEPENDENCIES) -rm -f libpioneersclient.a $(libpioneersclient_a_AR) libpioneersclient.a $(libpioneersclient_a_OBJECTS) $(libpioneersclient_a_LIBADD) $(RANLIB) libpioneersclient.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list client/gtk/$(am__dirstamp): @$(MKDIR_P) client/gtk @: > client/gtk/$(am__dirstamp) client/gtk/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) client/gtk/$(DEPDIR) @: > client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-admin-gtk.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-audio.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-avahi.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-avahi-browser.$(OBJEXT): \ client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-callbacks.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-chat.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-connect.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-develop.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-discard.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-frontend.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-gameover.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-gold.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-gui.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-histogram.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-identity.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-interface.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-legend.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-monopoly.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-name.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-notification.$(OBJEXT): \ client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-offline.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-plenty.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-player.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-quote.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-quote-view.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-resource.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-resource-view.$(OBJEXT): \ client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-resource-table.$(OBJEXT): \ client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-settingscreen.$(OBJEXT): \ client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-state.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) client/gtk/pioneers-trade.$(OBJEXT): client/gtk/$(am__dirstamp) \ client/gtk/$(DEPDIR)/$(am__dirstamp) pioneers$(EXEEXT): $(pioneers_OBJECTS) $(pioneers_DEPENDENCIES) $(EXTRA_pioneers_DEPENDENCIES) @rm -f pioneers$(EXEEXT) $(LINK) $(pioneers_OBJECTS) $(pioneers_LDADD) $(LIBS) editor/gtk/$(am__dirstamp): @$(MKDIR_P) editor/gtk @: > editor/gtk/$(am__dirstamp) editor/gtk/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) editor/gtk/$(DEPDIR) @: > editor/gtk/$(DEPDIR)/$(am__dirstamp) editor/gtk/pioneers_editor-editor.$(OBJEXT): \ editor/gtk/$(am__dirstamp) \ editor/gtk/$(DEPDIR)/$(am__dirstamp) editor/gtk/pioneers_editor-game-devcards.$(OBJEXT): \ editor/gtk/$(am__dirstamp) \ editor/gtk/$(DEPDIR)/$(am__dirstamp) editor/gtk/pioneers_editor-game-buildings.$(OBJEXT): \ editor/gtk/$(am__dirstamp) \ editor/gtk/$(DEPDIR)/$(am__dirstamp) editor/gtk/pioneers_editor-game-resources.$(OBJEXT): \ editor/gtk/$(am__dirstamp) \ editor/gtk/$(DEPDIR)/$(am__dirstamp) pioneers-editor$(EXEEXT): $(pioneers_editor_OBJECTS) $(pioneers_editor_DEPENDENCIES) $(EXTRA_pioneers_editor_DEPENDENCIES) @rm -f pioneers-editor$(EXEEXT) $(LINK) $(pioneers_editor_OBJECTS) $(pioneers_editor_LDADD) $(LIBS) meta-server/$(am__dirstamp): @$(MKDIR_P) meta-server @: > meta-server/$(am__dirstamp) meta-server/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) meta-server/$(DEPDIR) @: > meta-server/$(DEPDIR)/$(am__dirstamp) meta-server/pioneers_meta_server-main.$(OBJEXT): \ meta-server/$(am__dirstamp) \ meta-server/$(DEPDIR)/$(am__dirstamp) pioneers-meta-server$(EXEEXT): $(pioneers_meta_server_OBJECTS) $(pioneers_meta_server_DEPENDENCIES) $(EXTRA_pioneers_meta_server_DEPENDENCIES) @rm -f pioneers-meta-server$(EXEEXT) $(LINK) $(pioneers_meta_server_OBJECTS) $(pioneers_meta_server_LDADD) $(LIBS) server/pioneers_server_console-main.$(OBJEXT): server/$(am__dirstamp) \ server/$(DEPDIR)/$(am__dirstamp) server/pioneers_server_console-glib-driver.$(OBJEXT): \ server/$(am__dirstamp) server/$(DEPDIR)/$(am__dirstamp) pioneers-server-console$(EXEEXT): $(pioneers_server_console_OBJECTS) $(pioneers_server_console_DEPENDENCIES) $(EXTRA_pioneers_server_console_DEPENDENCIES) @rm -f pioneers-server-console$(EXEEXT) $(LINK) $(pioneers_server_console_OBJECTS) $(pioneers_server_console_LDADD) $(LIBS) server/gtk/$(am__dirstamp): @$(MKDIR_P) server/gtk @: > server/gtk/$(am__dirstamp) server/gtk/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) server/gtk/$(DEPDIR) @: > server/gtk/$(DEPDIR)/$(am__dirstamp) server/gtk/pioneers_server_gtk-main.$(OBJEXT): \ server/gtk/$(am__dirstamp) \ server/gtk/$(DEPDIR)/$(am__dirstamp) pioneers-server-gtk$(EXEEXT): $(pioneers_server_gtk_OBJECTS) $(pioneers_server_gtk_DEPENDENCIES) $(EXTRA_pioneers_server_gtk_DEPENDENCIES) @rm -f pioneers-server-gtk$(EXEEXT) $(LINK) $(pioneers_server_gtk_OBJECTS) $(pioneers_server_gtk_LDADD) $(LIBS) client/ai/$(am__dirstamp): @$(MKDIR_P) client/ai @: > client/ai/$(am__dirstamp) client/ai/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) client/ai/$(DEPDIR) @: > client/ai/$(DEPDIR)/$(am__dirstamp) client/ai/pioneersai-ai.$(OBJEXT): client/ai/$(am__dirstamp) \ client/ai/$(DEPDIR)/$(am__dirstamp) client/ai/pioneersai-greedy.$(OBJEXT): client/ai/$(am__dirstamp) \ client/ai/$(DEPDIR)/$(am__dirstamp) client/ai/pioneersai-lobbybot.$(OBJEXT): client/ai/$(am__dirstamp) \ client/ai/$(DEPDIR)/$(am__dirstamp) pioneersai$(EXEEXT): $(pioneersai_OBJECTS) $(pioneersai_DEPENDENCIES) $(EXTRA_pioneersai_DEPENDENCIES) @rm -f pioneersai$(EXEEXT) $(LINK) $(pioneersai_OBJECTS) $(pioneersai_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f client/ai/pioneersai-ai.$(OBJEXT) -rm -f client/ai/pioneersai-greedy.$(OBJEXT) -rm -f client/ai/pioneersai-lobbybot.$(OBJEXT) -rm -f client/common/libpioneersclient_a-build.$(OBJEXT) -rm -f client/common/libpioneersclient_a-callback.$(OBJEXT) -rm -f client/common/libpioneersclient_a-client.$(OBJEXT) -rm -f client/common/libpioneersclient_a-develop.$(OBJEXT) -rm -f client/common/libpioneersclient_a-main.$(OBJEXT) -rm -f client/common/libpioneersclient_a-player.$(OBJEXT) -rm -f client/common/libpioneersclient_a-resource.$(OBJEXT) -rm -f client/common/libpioneersclient_a-robber.$(OBJEXT) -rm -f client/common/libpioneersclient_a-setup.$(OBJEXT) -rm -f client/common/libpioneersclient_a-stock.$(OBJEXT) -rm -f client/common/libpioneersclient_a-turn.$(OBJEXT) -rm -f client/gtk/pioneers-admin-gtk.$(OBJEXT) -rm -f client/gtk/pioneers-audio.$(OBJEXT) -rm -f client/gtk/pioneers-avahi-browser.$(OBJEXT) -rm -f client/gtk/pioneers-avahi.$(OBJEXT) -rm -f client/gtk/pioneers-callbacks.$(OBJEXT) -rm -f client/gtk/pioneers-chat.$(OBJEXT) -rm -f client/gtk/pioneers-connect.$(OBJEXT) -rm -f client/gtk/pioneers-develop.$(OBJEXT) -rm -f client/gtk/pioneers-discard.$(OBJEXT) -rm -f client/gtk/pioneers-frontend.$(OBJEXT) -rm -f client/gtk/pioneers-gameover.$(OBJEXT) -rm -f client/gtk/pioneers-gold.$(OBJEXT) -rm -f client/gtk/pioneers-gui.$(OBJEXT) -rm -f client/gtk/pioneers-histogram.$(OBJEXT) -rm -f client/gtk/pioneers-identity.$(OBJEXT) -rm -f client/gtk/pioneers-interface.$(OBJEXT) -rm -f client/gtk/pioneers-legend.$(OBJEXT) -rm -f client/gtk/pioneers-monopoly.$(OBJEXT) -rm -f client/gtk/pioneers-name.$(OBJEXT) -rm -f client/gtk/pioneers-notification.$(OBJEXT) -rm -f client/gtk/pioneers-offline.$(OBJEXT) -rm -f client/gtk/pioneers-player.$(OBJEXT) -rm -f client/gtk/pioneers-plenty.$(OBJEXT) -rm -f client/gtk/pioneers-quote-view.$(OBJEXT) -rm -f client/gtk/pioneers-quote.$(OBJEXT) -rm -f client/gtk/pioneers-resource-table.$(OBJEXT) -rm -f client/gtk/pioneers-resource-view.$(OBJEXT) -rm -f client/gtk/pioneers-resource.$(OBJEXT) -rm -f client/gtk/pioneers-settingscreen.$(OBJEXT) -rm -f client/gtk/pioneers-state.$(OBJEXT) -rm -f client/gtk/pioneers-trade.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-aboutbox.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-colors.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-common_gtk.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-config-gnome.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-game-rules.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-game-settings.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-gtkbugs.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-guimap.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-metaserver.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-player-icon.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-polygon.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-scrollable-text-view.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-select-game.$(OBJEXT) -rm -f common/gtk/libpioneers_gtk_a-theme.$(OBJEXT) -rm -f common/libpioneers_a-buildrec.$(OBJEXT) -rm -f common/libpioneers_a-cards.$(OBJEXT) -rm -f common/libpioneers_a-common_glib.$(OBJEXT) -rm -f common/libpioneers_a-cost.$(OBJEXT) -rm -f common/libpioneers_a-driver.$(OBJEXT) -rm -f common/libpioneers_a-game.$(OBJEXT) -rm -f common/libpioneers_a-log.$(OBJEXT) -rm -f common/libpioneers_a-map.$(OBJEXT) -rm -f common/libpioneers_a-map_query.$(OBJEXT) -rm -f common/libpioneers_a-network.$(OBJEXT) -rm -f common/libpioneers_a-notifying-string.$(OBJEXT) -rm -f common/libpioneers_a-quoteinfo.$(OBJEXT) -rm -f common/libpioneers_a-state.$(OBJEXT) -rm -f editor/gtk/pioneers_editor-editor.$(OBJEXT) -rm -f editor/gtk/pioneers_editor-game-buildings.$(OBJEXT) -rm -f editor/gtk/pioneers_editor-game-devcards.$(OBJEXT) -rm -f editor/gtk/pioneers_editor-game-resources.$(OBJEXT) -rm -f meta-server/pioneers_meta_server-main.$(OBJEXT) -rm -f server/gtk/pioneers_server_gtk-main.$(OBJEXT) -rm -f server/libpioneers_server_a-admin.$(OBJEXT) -rm -f server/libpioneers_server_a-avahi.$(OBJEXT) -rm -f server/libpioneers_server_a-buildutil.$(OBJEXT) -rm -f server/libpioneers_server_a-develop.$(OBJEXT) -rm -f server/libpioneers_server_a-discard.$(OBJEXT) -rm -f server/libpioneers_server_a-gold.$(OBJEXT) -rm -f server/libpioneers_server_a-meta.$(OBJEXT) -rm -f server/libpioneers_server_a-player.$(OBJEXT) -rm -f server/libpioneers_server_a-pregame.$(OBJEXT) -rm -f server/libpioneers_server_a-resource.$(OBJEXT) -rm -f server/libpioneers_server_a-robber.$(OBJEXT) -rm -f server/libpioneers_server_a-server.$(OBJEXT) -rm -f server/libpioneers_server_a-trade.$(OBJEXT) -rm -f server/libpioneers_server_a-turn.$(OBJEXT) -rm -f server/pioneers_server_console-glib-driver.$(OBJEXT) -rm -f server/pioneers_server_console-main.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@client/ai/$(DEPDIR)/pioneersai-ai.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/ai/$(DEPDIR)/pioneersai-greedy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/ai/$(DEPDIR)/pioneersai-lobbybot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-build.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-callback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-develop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-player.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-resource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-robber.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-setup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-stock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/common/$(DEPDIR)/libpioneersclient_a-turn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-admin-gtk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-avahi-browser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-avahi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-chat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-develop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-discard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-frontend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-gameover.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-gold.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-histogram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-identity.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-legend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-monopoly.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-name.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-notification.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-offline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-player.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-plenty.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-quote-view.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-quote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-resource-table.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-resource-view.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-resource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-settingscreen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-state.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@client/gtk/$(DEPDIR)/pioneers-trade.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-buildrec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-cards.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-common_glib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-cost.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-driver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-map.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-map_query.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-network.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-notifying-string.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-quoteinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libpioneers_a-state.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@editor/gtk/$(DEPDIR)/pioneers_editor-editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@meta-server/$(DEPDIR)/pioneers_meta_server-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-admin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-avahi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-buildutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-develop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-discard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-gold.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-meta.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-player.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-pregame.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-resource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-robber.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-trade.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/libpioneers_server_a-turn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/pioneers_server_console-glib-driver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/$(DEPDIR)/pioneers_server_console-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< common/libpioneers_a-buildrec.o: common/buildrec.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-buildrec.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-buildrec.Tpo -c -o common/libpioneers_a-buildrec.o `test -f 'common/buildrec.c' || echo '$(srcdir)/'`common/buildrec.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-buildrec.Tpo common/$(DEPDIR)/libpioneers_a-buildrec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/buildrec.c' object='common/libpioneers_a-buildrec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-buildrec.o `test -f 'common/buildrec.c' || echo '$(srcdir)/'`common/buildrec.c common/libpioneers_a-buildrec.obj: common/buildrec.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-buildrec.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-buildrec.Tpo -c -o common/libpioneers_a-buildrec.obj `if test -f 'common/buildrec.c'; then $(CYGPATH_W) 'common/buildrec.c'; else $(CYGPATH_W) '$(srcdir)/common/buildrec.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-buildrec.Tpo common/$(DEPDIR)/libpioneers_a-buildrec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/buildrec.c' object='common/libpioneers_a-buildrec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-buildrec.obj `if test -f 'common/buildrec.c'; then $(CYGPATH_W) 'common/buildrec.c'; else $(CYGPATH_W) '$(srcdir)/common/buildrec.c'; fi` common/libpioneers_a-cards.o: common/cards.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-cards.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-cards.Tpo -c -o common/libpioneers_a-cards.o `test -f 'common/cards.c' || echo '$(srcdir)/'`common/cards.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-cards.Tpo common/$(DEPDIR)/libpioneers_a-cards.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/cards.c' object='common/libpioneers_a-cards.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-cards.o `test -f 'common/cards.c' || echo '$(srcdir)/'`common/cards.c common/libpioneers_a-cards.obj: common/cards.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-cards.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-cards.Tpo -c -o common/libpioneers_a-cards.obj `if test -f 'common/cards.c'; then $(CYGPATH_W) 'common/cards.c'; else $(CYGPATH_W) '$(srcdir)/common/cards.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-cards.Tpo common/$(DEPDIR)/libpioneers_a-cards.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/cards.c' object='common/libpioneers_a-cards.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-cards.obj `if test -f 'common/cards.c'; then $(CYGPATH_W) 'common/cards.c'; else $(CYGPATH_W) '$(srcdir)/common/cards.c'; fi` common/libpioneers_a-common_glib.o: common/common_glib.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-common_glib.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-common_glib.Tpo -c -o common/libpioneers_a-common_glib.o `test -f 'common/common_glib.c' || echo '$(srcdir)/'`common/common_glib.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-common_glib.Tpo common/$(DEPDIR)/libpioneers_a-common_glib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/common_glib.c' object='common/libpioneers_a-common_glib.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-common_glib.o `test -f 'common/common_glib.c' || echo '$(srcdir)/'`common/common_glib.c common/libpioneers_a-common_glib.obj: common/common_glib.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-common_glib.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-common_glib.Tpo -c -o common/libpioneers_a-common_glib.obj `if test -f 'common/common_glib.c'; then $(CYGPATH_W) 'common/common_glib.c'; else $(CYGPATH_W) '$(srcdir)/common/common_glib.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-common_glib.Tpo common/$(DEPDIR)/libpioneers_a-common_glib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/common_glib.c' object='common/libpioneers_a-common_glib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-common_glib.obj `if test -f 'common/common_glib.c'; then $(CYGPATH_W) 'common/common_glib.c'; else $(CYGPATH_W) '$(srcdir)/common/common_glib.c'; fi` common/libpioneers_a-cost.o: common/cost.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-cost.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-cost.Tpo -c -o common/libpioneers_a-cost.o `test -f 'common/cost.c' || echo '$(srcdir)/'`common/cost.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-cost.Tpo common/$(DEPDIR)/libpioneers_a-cost.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/cost.c' object='common/libpioneers_a-cost.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-cost.o `test -f 'common/cost.c' || echo '$(srcdir)/'`common/cost.c common/libpioneers_a-cost.obj: common/cost.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-cost.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-cost.Tpo -c -o common/libpioneers_a-cost.obj `if test -f 'common/cost.c'; then $(CYGPATH_W) 'common/cost.c'; else $(CYGPATH_W) '$(srcdir)/common/cost.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-cost.Tpo common/$(DEPDIR)/libpioneers_a-cost.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/cost.c' object='common/libpioneers_a-cost.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-cost.obj `if test -f 'common/cost.c'; then $(CYGPATH_W) 'common/cost.c'; else $(CYGPATH_W) '$(srcdir)/common/cost.c'; fi` common/libpioneers_a-driver.o: common/driver.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-driver.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-driver.Tpo -c -o common/libpioneers_a-driver.o `test -f 'common/driver.c' || echo '$(srcdir)/'`common/driver.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-driver.Tpo common/$(DEPDIR)/libpioneers_a-driver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/driver.c' object='common/libpioneers_a-driver.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-driver.o `test -f 'common/driver.c' || echo '$(srcdir)/'`common/driver.c common/libpioneers_a-driver.obj: common/driver.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-driver.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-driver.Tpo -c -o common/libpioneers_a-driver.obj `if test -f 'common/driver.c'; then $(CYGPATH_W) 'common/driver.c'; else $(CYGPATH_W) '$(srcdir)/common/driver.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-driver.Tpo common/$(DEPDIR)/libpioneers_a-driver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/driver.c' object='common/libpioneers_a-driver.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-driver.obj `if test -f 'common/driver.c'; then $(CYGPATH_W) 'common/driver.c'; else $(CYGPATH_W) '$(srcdir)/common/driver.c'; fi` common/libpioneers_a-game.o: common/game.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-game.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-game.Tpo -c -o common/libpioneers_a-game.o `test -f 'common/game.c' || echo '$(srcdir)/'`common/game.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-game.Tpo common/$(DEPDIR)/libpioneers_a-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/game.c' object='common/libpioneers_a-game.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-game.o `test -f 'common/game.c' || echo '$(srcdir)/'`common/game.c common/libpioneers_a-game.obj: common/game.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-game.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-game.Tpo -c -o common/libpioneers_a-game.obj `if test -f 'common/game.c'; then $(CYGPATH_W) 'common/game.c'; else $(CYGPATH_W) '$(srcdir)/common/game.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-game.Tpo common/$(DEPDIR)/libpioneers_a-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/game.c' object='common/libpioneers_a-game.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-game.obj `if test -f 'common/game.c'; then $(CYGPATH_W) 'common/game.c'; else $(CYGPATH_W) '$(srcdir)/common/game.c'; fi` common/libpioneers_a-log.o: common/log.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-log.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-log.Tpo -c -o common/libpioneers_a-log.o `test -f 'common/log.c' || echo '$(srcdir)/'`common/log.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-log.Tpo common/$(DEPDIR)/libpioneers_a-log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/log.c' object='common/libpioneers_a-log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-log.o `test -f 'common/log.c' || echo '$(srcdir)/'`common/log.c common/libpioneers_a-log.obj: common/log.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-log.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-log.Tpo -c -o common/libpioneers_a-log.obj `if test -f 'common/log.c'; then $(CYGPATH_W) 'common/log.c'; else $(CYGPATH_W) '$(srcdir)/common/log.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-log.Tpo common/$(DEPDIR)/libpioneers_a-log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/log.c' object='common/libpioneers_a-log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-log.obj `if test -f 'common/log.c'; then $(CYGPATH_W) 'common/log.c'; else $(CYGPATH_W) '$(srcdir)/common/log.c'; fi` common/libpioneers_a-map.o: common/map.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-map.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-map.Tpo -c -o common/libpioneers_a-map.o `test -f 'common/map.c' || echo '$(srcdir)/'`common/map.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-map.Tpo common/$(DEPDIR)/libpioneers_a-map.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/map.c' object='common/libpioneers_a-map.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-map.o `test -f 'common/map.c' || echo '$(srcdir)/'`common/map.c common/libpioneers_a-map.obj: common/map.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-map.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-map.Tpo -c -o common/libpioneers_a-map.obj `if test -f 'common/map.c'; then $(CYGPATH_W) 'common/map.c'; else $(CYGPATH_W) '$(srcdir)/common/map.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-map.Tpo common/$(DEPDIR)/libpioneers_a-map.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/map.c' object='common/libpioneers_a-map.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-map.obj `if test -f 'common/map.c'; then $(CYGPATH_W) 'common/map.c'; else $(CYGPATH_W) '$(srcdir)/common/map.c'; fi` common/libpioneers_a-map_query.o: common/map_query.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-map_query.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-map_query.Tpo -c -o common/libpioneers_a-map_query.o `test -f 'common/map_query.c' || echo '$(srcdir)/'`common/map_query.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-map_query.Tpo common/$(DEPDIR)/libpioneers_a-map_query.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/map_query.c' object='common/libpioneers_a-map_query.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-map_query.o `test -f 'common/map_query.c' || echo '$(srcdir)/'`common/map_query.c common/libpioneers_a-map_query.obj: common/map_query.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-map_query.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-map_query.Tpo -c -o common/libpioneers_a-map_query.obj `if test -f 'common/map_query.c'; then $(CYGPATH_W) 'common/map_query.c'; else $(CYGPATH_W) '$(srcdir)/common/map_query.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-map_query.Tpo common/$(DEPDIR)/libpioneers_a-map_query.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/map_query.c' object='common/libpioneers_a-map_query.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-map_query.obj `if test -f 'common/map_query.c'; then $(CYGPATH_W) 'common/map_query.c'; else $(CYGPATH_W) '$(srcdir)/common/map_query.c'; fi` common/libpioneers_a-network.o: common/network.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-network.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-network.Tpo -c -o common/libpioneers_a-network.o `test -f 'common/network.c' || echo '$(srcdir)/'`common/network.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-network.Tpo common/$(DEPDIR)/libpioneers_a-network.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/network.c' object='common/libpioneers_a-network.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-network.o `test -f 'common/network.c' || echo '$(srcdir)/'`common/network.c common/libpioneers_a-network.obj: common/network.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-network.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-network.Tpo -c -o common/libpioneers_a-network.obj `if test -f 'common/network.c'; then $(CYGPATH_W) 'common/network.c'; else $(CYGPATH_W) '$(srcdir)/common/network.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-network.Tpo common/$(DEPDIR)/libpioneers_a-network.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/network.c' object='common/libpioneers_a-network.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-network.obj `if test -f 'common/network.c'; then $(CYGPATH_W) 'common/network.c'; else $(CYGPATH_W) '$(srcdir)/common/network.c'; fi` common/libpioneers_a-notifying-string.o: common/notifying-string.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-notifying-string.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-notifying-string.Tpo -c -o common/libpioneers_a-notifying-string.o `test -f 'common/notifying-string.c' || echo '$(srcdir)/'`common/notifying-string.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-notifying-string.Tpo common/$(DEPDIR)/libpioneers_a-notifying-string.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/notifying-string.c' object='common/libpioneers_a-notifying-string.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-notifying-string.o `test -f 'common/notifying-string.c' || echo '$(srcdir)/'`common/notifying-string.c common/libpioneers_a-notifying-string.obj: common/notifying-string.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-notifying-string.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-notifying-string.Tpo -c -o common/libpioneers_a-notifying-string.obj `if test -f 'common/notifying-string.c'; then $(CYGPATH_W) 'common/notifying-string.c'; else $(CYGPATH_W) '$(srcdir)/common/notifying-string.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-notifying-string.Tpo common/$(DEPDIR)/libpioneers_a-notifying-string.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/notifying-string.c' object='common/libpioneers_a-notifying-string.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-notifying-string.obj `if test -f 'common/notifying-string.c'; then $(CYGPATH_W) 'common/notifying-string.c'; else $(CYGPATH_W) '$(srcdir)/common/notifying-string.c'; fi` common/libpioneers_a-quoteinfo.o: common/quoteinfo.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-quoteinfo.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-quoteinfo.Tpo -c -o common/libpioneers_a-quoteinfo.o `test -f 'common/quoteinfo.c' || echo '$(srcdir)/'`common/quoteinfo.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-quoteinfo.Tpo common/$(DEPDIR)/libpioneers_a-quoteinfo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/quoteinfo.c' object='common/libpioneers_a-quoteinfo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-quoteinfo.o `test -f 'common/quoteinfo.c' || echo '$(srcdir)/'`common/quoteinfo.c common/libpioneers_a-quoteinfo.obj: common/quoteinfo.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-quoteinfo.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-quoteinfo.Tpo -c -o common/libpioneers_a-quoteinfo.obj `if test -f 'common/quoteinfo.c'; then $(CYGPATH_W) 'common/quoteinfo.c'; else $(CYGPATH_W) '$(srcdir)/common/quoteinfo.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-quoteinfo.Tpo common/$(DEPDIR)/libpioneers_a-quoteinfo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/quoteinfo.c' object='common/libpioneers_a-quoteinfo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-quoteinfo.obj `if test -f 'common/quoteinfo.c'; then $(CYGPATH_W) 'common/quoteinfo.c'; else $(CYGPATH_W) '$(srcdir)/common/quoteinfo.c'; fi` common/libpioneers_a-state.o: common/state.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-state.o -MD -MP -MF common/$(DEPDIR)/libpioneers_a-state.Tpo -c -o common/libpioneers_a-state.o `test -f 'common/state.c' || echo '$(srcdir)/'`common/state.c @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-state.Tpo common/$(DEPDIR)/libpioneers_a-state.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/state.c' object='common/libpioneers_a-state.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-state.o `test -f 'common/state.c' || echo '$(srcdir)/'`common/state.c common/libpioneers_a-state.obj: common/state.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/libpioneers_a-state.obj -MD -MP -MF common/$(DEPDIR)/libpioneers_a-state.Tpo -c -o common/libpioneers_a-state.obj `if test -f 'common/state.c'; then $(CYGPATH_W) 'common/state.c'; else $(CYGPATH_W) '$(srcdir)/common/state.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/$(DEPDIR)/libpioneers_a-state.Tpo common/$(DEPDIR)/libpioneers_a-state.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/state.c' object='common/libpioneers_a-state.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/libpioneers_a-state.obj `if test -f 'common/state.c'; then $(CYGPATH_W) 'common/state.c'; else $(CYGPATH_W) '$(srcdir)/common/state.c'; fi` common/gtk/libpioneers_gtk_a-aboutbox.o: common/gtk/aboutbox.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-aboutbox.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Tpo -c -o common/gtk/libpioneers_gtk_a-aboutbox.o `test -f 'common/gtk/aboutbox.c' || echo '$(srcdir)/'`common/gtk/aboutbox.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/aboutbox.c' object='common/gtk/libpioneers_gtk_a-aboutbox.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-aboutbox.o `test -f 'common/gtk/aboutbox.c' || echo '$(srcdir)/'`common/gtk/aboutbox.c common/gtk/libpioneers_gtk_a-aboutbox.obj: common/gtk/aboutbox.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-aboutbox.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Tpo -c -o common/gtk/libpioneers_gtk_a-aboutbox.obj `if test -f 'common/gtk/aboutbox.c'; then $(CYGPATH_W) 'common/gtk/aboutbox.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/aboutbox.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-aboutbox.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/aboutbox.c' object='common/gtk/libpioneers_gtk_a-aboutbox.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-aboutbox.obj `if test -f 'common/gtk/aboutbox.c'; then $(CYGPATH_W) 'common/gtk/aboutbox.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/aboutbox.c'; fi` common/gtk/libpioneers_gtk_a-colors.o: common/gtk/colors.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-colors.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Tpo -c -o common/gtk/libpioneers_gtk_a-colors.o `test -f 'common/gtk/colors.c' || echo '$(srcdir)/'`common/gtk/colors.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/colors.c' object='common/gtk/libpioneers_gtk_a-colors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-colors.o `test -f 'common/gtk/colors.c' || echo '$(srcdir)/'`common/gtk/colors.c common/gtk/libpioneers_gtk_a-colors.obj: common/gtk/colors.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-colors.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Tpo -c -o common/gtk/libpioneers_gtk_a-colors.obj `if test -f 'common/gtk/colors.c'; then $(CYGPATH_W) 'common/gtk/colors.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/colors.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-colors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/colors.c' object='common/gtk/libpioneers_gtk_a-colors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-colors.obj `if test -f 'common/gtk/colors.c'; then $(CYGPATH_W) 'common/gtk/colors.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/colors.c'; fi` common/gtk/libpioneers_gtk_a-common_gtk.o: common/gtk/common_gtk.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-common_gtk.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Tpo -c -o common/gtk/libpioneers_gtk_a-common_gtk.o `test -f 'common/gtk/common_gtk.c' || echo '$(srcdir)/'`common/gtk/common_gtk.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/common_gtk.c' object='common/gtk/libpioneers_gtk_a-common_gtk.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-common_gtk.o `test -f 'common/gtk/common_gtk.c' || echo '$(srcdir)/'`common/gtk/common_gtk.c common/gtk/libpioneers_gtk_a-common_gtk.obj: common/gtk/common_gtk.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-common_gtk.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Tpo -c -o common/gtk/libpioneers_gtk_a-common_gtk.obj `if test -f 'common/gtk/common_gtk.c'; then $(CYGPATH_W) 'common/gtk/common_gtk.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/common_gtk.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-common_gtk.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/common_gtk.c' object='common/gtk/libpioneers_gtk_a-common_gtk.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-common_gtk.obj `if test -f 'common/gtk/common_gtk.c'; then $(CYGPATH_W) 'common/gtk/common_gtk.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/common_gtk.c'; fi` common/gtk/libpioneers_gtk_a-config-gnome.o: common/gtk/config-gnome.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-config-gnome.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Tpo -c -o common/gtk/libpioneers_gtk_a-config-gnome.o `test -f 'common/gtk/config-gnome.c' || echo '$(srcdir)/'`common/gtk/config-gnome.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/config-gnome.c' object='common/gtk/libpioneers_gtk_a-config-gnome.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-config-gnome.o `test -f 'common/gtk/config-gnome.c' || echo '$(srcdir)/'`common/gtk/config-gnome.c common/gtk/libpioneers_gtk_a-config-gnome.obj: common/gtk/config-gnome.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-config-gnome.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Tpo -c -o common/gtk/libpioneers_gtk_a-config-gnome.obj `if test -f 'common/gtk/config-gnome.c'; then $(CYGPATH_W) 'common/gtk/config-gnome.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/config-gnome.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-config-gnome.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/config-gnome.c' object='common/gtk/libpioneers_gtk_a-config-gnome.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-config-gnome.obj `if test -f 'common/gtk/config-gnome.c'; then $(CYGPATH_W) 'common/gtk/config-gnome.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/config-gnome.c'; fi` common/gtk/libpioneers_gtk_a-game-rules.o: common/gtk/game-rules.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-game-rules.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Tpo -c -o common/gtk/libpioneers_gtk_a-game-rules.o `test -f 'common/gtk/game-rules.c' || echo '$(srcdir)/'`common/gtk/game-rules.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/game-rules.c' object='common/gtk/libpioneers_gtk_a-game-rules.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-game-rules.o `test -f 'common/gtk/game-rules.c' || echo '$(srcdir)/'`common/gtk/game-rules.c common/gtk/libpioneers_gtk_a-game-rules.obj: common/gtk/game-rules.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-game-rules.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Tpo -c -o common/gtk/libpioneers_gtk_a-game-rules.obj `if test -f 'common/gtk/game-rules.c'; then $(CYGPATH_W) 'common/gtk/game-rules.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/game-rules.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-rules.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/game-rules.c' object='common/gtk/libpioneers_gtk_a-game-rules.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-game-rules.obj `if test -f 'common/gtk/game-rules.c'; then $(CYGPATH_W) 'common/gtk/game-rules.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/game-rules.c'; fi` common/gtk/libpioneers_gtk_a-game-settings.o: common/gtk/game-settings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-game-settings.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Tpo -c -o common/gtk/libpioneers_gtk_a-game-settings.o `test -f 'common/gtk/game-settings.c' || echo '$(srcdir)/'`common/gtk/game-settings.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/game-settings.c' object='common/gtk/libpioneers_gtk_a-game-settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-game-settings.o `test -f 'common/gtk/game-settings.c' || echo '$(srcdir)/'`common/gtk/game-settings.c common/gtk/libpioneers_gtk_a-game-settings.obj: common/gtk/game-settings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-game-settings.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Tpo -c -o common/gtk/libpioneers_gtk_a-game-settings.obj `if test -f 'common/gtk/game-settings.c'; then $(CYGPATH_W) 'common/gtk/game-settings.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/game-settings.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-game-settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/game-settings.c' object='common/gtk/libpioneers_gtk_a-game-settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-game-settings.obj `if test -f 'common/gtk/game-settings.c'; then $(CYGPATH_W) 'common/gtk/game-settings.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/game-settings.c'; fi` common/gtk/libpioneers_gtk_a-gtkbugs.o: common/gtk/gtkbugs.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-gtkbugs.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Tpo -c -o common/gtk/libpioneers_gtk_a-gtkbugs.o `test -f 'common/gtk/gtkbugs.c' || echo '$(srcdir)/'`common/gtk/gtkbugs.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/gtkbugs.c' object='common/gtk/libpioneers_gtk_a-gtkbugs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-gtkbugs.o `test -f 'common/gtk/gtkbugs.c' || echo '$(srcdir)/'`common/gtk/gtkbugs.c common/gtk/libpioneers_gtk_a-gtkbugs.obj: common/gtk/gtkbugs.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-gtkbugs.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Tpo -c -o common/gtk/libpioneers_gtk_a-gtkbugs.obj `if test -f 'common/gtk/gtkbugs.c'; then $(CYGPATH_W) 'common/gtk/gtkbugs.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/gtkbugs.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-gtkbugs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/gtkbugs.c' object='common/gtk/libpioneers_gtk_a-gtkbugs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-gtkbugs.obj `if test -f 'common/gtk/gtkbugs.c'; then $(CYGPATH_W) 'common/gtk/gtkbugs.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/gtkbugs.c'; fi` common/gtk/libpioneers_gtk_a-guimap.o: common/gtk/guimap.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-guimap.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Tpo -c -o common/gtk/libpioneers_gtk_a-guimap.o `test -f 'common/gtk/guimap.c' || echo '$(srcdir)/'`common/gtk/guimap.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/guimap.c' object='common/gtk/libpioneers_gtk_a-guimap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-guimap.o `test -f 'common/gtk/guimap.c' || echo '$(srcdir)/'`common/gtk/guimap.c common/gtk/libpioneers_gtk_a-guimap.obj: common/gtk/guimap.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-guimap.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Tpo -c -o common/gtk/libpioneers_gtk_a-guimap.obj `if test -f 'common/gtk/guimap.c'; then $(CYGPATH_W) 'common/gtk/guimap.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/guimap.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-guimap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/guimap.c' object='common/gtk/libpioneers_gtk_a-guimap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-guimap.obj `if test -f 'common/gtk/guimap.c'; then $(CYGPATH_W) 'common/gtk/guimap.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/guimap.c'; fi` common/gtk/libpioneers_gtk_a-metaserver.o: common/gtk/metaserver.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-metaserver.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Tpo -c -o common/gtk/libpioneers_gtk_a-metaserver.o `test -f 'common/gtk/metaserver.c' || echo '$(srcdir)/'`common/gtk/metaserver.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/metaserver.c' object='common/gtk/libpioneers_gtk_a-metaserver.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-metaserver.o `test -f 'common/gtk/metaserver.c' || echo '$(srcdir)/'`common/gtk/metaserver.c common/gtk/libpioneers_gtk_a-metaserver.obj: common/gtk/metaserver.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-metaserver.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Tpo -c -o common/gtk/libpioneers_gtk_a-metaserver.obj `if test -f 'common/gtk/metaserver.c'; then $(CYGPATH_W) 'common/gtk/metaserver.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/metaserver.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-metaserver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/metaserver.c' object='common/gtk/libpioneers_gtk_a-metaserver.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-metaserver.obj `if test -f 'common/gtk/metaserver.c'; then $(CYGPATH_W) 'common/gtk/metaserver.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/metaserver.c'; fi` common/gtk/libpioneers_gtk_a-player-icon.o: common/gtk/player-icon.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-player-icon.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Tpo -c -o common/gtk/libpioneers_gtk_a-player-icon.o `test -f 'common/gtk/player-icon.c' || echo '$(srcdir)/'`common/gtk/player-icon.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/player-icon.c' object='common/gtk/libpioneers_gtk_a-player-icon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-player-icon.o `test -f 'common/gtk/player-icon.c' || echo '$(srcdir)/'`common/gtk/player-icon.c common/gtk/libpioneers_gtk_a-player-icon.obj: common/gtk/player-icon.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-player-icon.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Tpo -c -o common/gtk/libpioneers_gtk_a-player-icon.obj `if test -f 'common/gtk/player-icon.c'; then $(CYGPATH_W) 'common/gtk/player-icon.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/player-icon.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-player-icon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/player-icon.c' object='common/gtk/libpioneers_gtk_a-player-icon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-player-icon.obj `if test -f 'common/gtk/player-icon.c'; then $(CYGPATH_W) 'common/gtk/player-icon.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/player-icon.c'; fi` common/gtk/libpioneers_gtk_a-polygon.o: common/gtk/polygon.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-polygon.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Tpo -c -o common/gtk/libpioneers_gtk_a-polygon.o `test -f 'common/gtk/polygon.c' || echo '$(srcdir)/'`common/gtk/polygon.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/polygon.c' object='common/gtk/libpioneers_gtk_a-polygon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-polygon.o `test -f 'common/gtk/polygon.c' || echo '$(srcdir)/'`common/gtk/polygon.c common/gtk/libpioneers_gtk_a-polygon.obj: common/gtk/polygon.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-polygon.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Tpo -c -o common/gtk/libpioneers_gtk_a-polygon.obj `if test -f 'common/gtk/polygon.c'; then $(CYGPATH_W) 'common/gtk/polygon.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/polygon.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-polygon.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/polygon.c' object='common/gtk/libpioneers_gtk_a-polygon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-polygon.obj `if test -f 'common/gtk/polygon.c'; then $(CYGPATH_W) 'common/gtk/polygon.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/polygon.c'; fi` common/gtk/libpioneers_gtk_a-scrollable-text-view.o: common/gtk/scrollable-text-view.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-scrollable-text-view.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Tpo -c -o common/gtk/libpioneers_gtk_a-scrollable-text-view.o `test -f 'common/gtk/scrollable-text-view.c' || echo '$(srcdir)/'`common/gtk/scrollable-text-view.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/scrollable-text-view.c' object='common/gtk/libpioneers_gtk_a-scrollable-text-view.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-scrollable-text-view.o `test -f 'common/gtk/scrollable-text-view.c' || echo '$(srcdir)/'`common/gtk/scrollable-text-view.c common/gtk/libpioneers_gtk_a-scrollable-text-view.obj: common/gtk/scrollable-text-view.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-scrollable-text-view.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Tpo -c -o common/gtk/libpioneers_gtk_a-scrollable-text-view.obj `if test -f 'common/gtk/scrollable-text-view.c'; then $(CYGPATH_W) 'common/gtk/scrollable-text-view.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/scrollable-text-view.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-scrollable-text-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/scrollable-text-view.c' object='common/gtk/libpioneers_gtk_a-scrollable-text-view.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-scrollable-text-view.obj `if test -f 'common/gtk/scrollable-text-view.c'; then $(CYGPATH_W) 'common/gtk/scrollable-text-view.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/scrollable-text-view.c'; fi` common/gtk/libpioneers_gtk_a-select-game.o: common/gtk/select-game.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-select-game.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Tpo -c -o common/gtk/libpioneers_gtk_a-select-game.o `test -f 'common/gtk/select-game.c' || echo '$(srcdir)/'`common/gtk/select-game.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/select-game.c' object='common/gtk/libpioneers_gtk_a-select-game.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-select-game.o `test -f 'common/gtk/select-game.c' || echo '$(srcdir)/'`common/gtk/select-game.c common/gtk/libpioneers_gtk_a-select-game.obj: common/gtk/select-game.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-select-game.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Tpo -c -o common/gtk/libpioneers_gtk_a-select-game.obj `if test -f 'common/gtk/select-game.c'; then $(CYGPATH_W) 'common/gtk/select-game.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/select-game.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-select-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/select-game.c' object='common/gtk/libpioneers_gtk_a-select-game.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-select-game.obj `if test -f 'common/gtk/select-game.c'; then $(CYGPATH_W) 'common/gtk/select-game.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/select-game.c'; fi` common/gtk/libpioneers_gtk_a-theme.o: common/gtk/theme.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-theme.o -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Tpo -c -o common/gtk/libpioneers_gtk_a-theme.o `test -f 'common/gtk/theme.c' || echo '$(srcdir)/'`common/gtk/theme.c @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/theme.c' object='common/gtk/libpioneers_gtk_a-theme.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-theme.o `test -f 'common/gtk/theme.c' || echo '$(srcdir)/'`common/gtk/theme.c common/gtk/libpioneers_gtk_a-theme.obj: common/gtk/theme.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT common/gtk/libpioneers_gtk_a-theme.obj -MD -MP -MF common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Tpo -c -o common/gtk/libpioneers_gtk_a-theme.obj `if test -f 'common/gtk/theme.c'; then $(CYGPATH_W) 'common/gtk/theme.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/theme.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Tpo common/gtk/$(DEPDIR)/libpioneers_gtk_a-theme.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common/gtk/theme.c' object='common/gtk/libpioneers_gtk_a-theme.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_gtk_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o common/gtk/libpioneers_gtk_a-theme.obj `if test -f 'common/gtk/theme.c'; then $(CYGPATH_W) 'common/gtk/theme.c'; else $(CYGPATH_W) '$(srcdir)/common/gtk/theme.c'; fi` server/libpioneers_server_a-admin.o: server/admin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-admin.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-admin.Tpo -c -o server/libpioneers_server_a-admin.o `test -f 'server/admin.c' || echo '$(srcdir)/'`server/admin.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-admin.Tpo server/$(DEPDIR)/libpioneers_server_a-admin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/admin.c' object='server/libpioneers_server_a-admin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-admin.o `test -f 'server/admin.c' || echo '$(srcdir)/'`server/admin.c server/libpioneers_server_a-admin.obj: server/admin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-admin.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-admin.Tpo -c -o server/libpioneers_server_a-admin.obj `if test -f 'server/admin.c'; then $(CYGPATH_W) 'server/admin.c'; else $(CYGPATH_W) '$(srcdir)/server/admin.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-admin.Tpo server/$(DEPDIR)/libpioneers_server_a-admin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/admin.c' object='server/libpioneers_server_a-admin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-admin.obj `if test -f 'server/admin.c'; then $(CYGPATH_W) 'server/admin.c'; else $(CYGPATH_W) '$(srcdir)/server/admin.c'; fi` server/libpioneers_server_a-avahi.o: server/avahi.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-avahi.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-avahi.Tpo -c -o server/libpioneers_server_a-avahi.o `test -f 'server/avahi.c' || echo '$(srcdir)/'`server/avahi.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-avahi.Tpo server/$(DEPDIR)/libpioneers_server_a-avahi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/avahi.c' object='server/libpioneers_server_a-avahi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-avahi.o `test -f 'server/avahi.c' || echo '$(srcdir)/'`server/avahi.c server/libpioneers_server_a-avahi.obj: server/avahi.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-avahi.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-avahi.Tpo -c -o server/libpioneers_server_a-avahi.obj `if test -f 'server/avahi.c'; then $(CYGPATH_W) 'server/avahi.c'; else $(CYGPATH_W) '$(srcdir)/server/avahi.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-avahi.Tpo server/$(DEPDIR)/libpioneers_server_a-avahi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/avahi.c' object='server/libpioneers_server_a-avahi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-avahi.obj `if test -f 'server/avahi.c'; then $(CYGPATH_W) 'server/avahi.c'; else $(CYGPATH_W) '$(srcdir)/server/avahi.c'; fi` server/libpioneers_server_a-buildutil.o: server/buildutil.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-buildutil.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-buildutil.Tpo -c -o server/libpioneers_server_a-buildutil.o `test -f 'server/buildutil.c' || echo '$(srcdir)/'`server/buildutil.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-buildutil.Tpo server/$(DEPDIR)/libpioneers_server_a-buildutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/buildutil.c' object='server/libpioneers_server_a-buildutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-buildutil.o `test -f 'server/buildutil.c' || echo '$(srcdir)/'`server/buildutil.c server/libpioneers_server_a-buildutil.obj: server/buildutil.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-buildutil.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-buildutil.Tpo -c -o server/libpioneers_server_a-buildutil.obj `if test -f 'server/buildutil.c'; then $(CYGPATH_W) 'server/buildutil.c'; else $(CYGPATH_W) '$(srcdir)/server/buildutil.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-buildutil.Tpo server/$(DEPDIR)/libpioneers_server_a-buildutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/buildutil.c' object='server/libpioneers_server_a-buildutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-buildutil.obj `if test -f 'server/buildutil.c'; then $(CYGPATH_W) 'server/buildutil.c'; else $(CYGPATH_W) '$(srcdir)/server/buildutil.c'; fi` server/libpioneers_server_a-develop.o: server/develop.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-develop.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-develop.Tpo -c -o server/libpioneers_server_a-develop.o `test -f 'server/develop.c' || echo '$(srcdir)/'`server/develop.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-develop.Tpo server/$(DEPDIR)/libpioneers_server_a-develop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/develop.c' object='server/libpioneers_server_a-develop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-develop.o `test -f 'server/develop.c' || echo '$(srcdir)/'`server/develop.c server/libpioneers_server_a-develop.obj: server/develop.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-develop.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-develop.Tpo -c -o server/libpioneers_server_a-develop.obj `if test -f 'server/develop.c'; then $(CYGPATH_W) 'server/develop.c'; else $(CYGPATH_W) '$(srcdir)/server/develop.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-develop.Tpo server/$(DEPDIR)/libpioneers_server_a-develop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/develop.c' object='server/libpioneers_server_a-develop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-develop.obj `if test -f 'server/develop.c'; then $(CYGPATH_W) 'server/develop.c'; else $(CYGPATH_W) '$(srcdir)/server/develop.c'; fi` server/libpioneers_server_a-discard.o: server/discard.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-discard.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-discard.Tpo -c -o server/libpioneers_server_a-discard.o `test -f 'server/discard.c' || echo '$(srcdir)/'`server/discard.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-discard.Tpo server/$(DEPDIR)/libpioneers_server_a-discard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/discard.c' object='server/libpioneers_server_a-discard.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-discard.o `test -f 'server/discard.c' || echo '$(srcdir)/'`server/discard.c server/libpioneers_server_a-discard.obj: server/discard.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-discard.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-discard.Tpo -c -o server/libpioneers_server_a-discard.obj `if test -f 'server/discard.c'; then $(CYGPATH_W) 'server/discard.c'; else $(CYGPATH_W) '$(srcdir)/server/discard.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-discard.Tpo server/$(DEPDIR)/libpioneers_server_a-discard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/discard.c' object='server/libpioneers_server_a-discard.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-discard.obj `if test -f 'server/discard.c'; then $(CYGPATH_W) 'server/discard.c'; else $(CYGPATH_W) '$(srcdir)/server/discard.c'; fi` server/libpioneers_server_a-gold.o: server/gold.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-gold.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-gold.Tpo -c -o server/libpioneers_server_a-gold.o `test -f 'server/gold.c' || echo '$(srcdir)/'`server/gold.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-gold.Tpo server/$(DEPDIR)/libpioneers_server_a-gold.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/gold.c' object='server/libpioneers_server_a-gold.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-gold.o `test -f 'server/gold.c' || echo '$(srcdir)/'`server/gold.c server/libpioneers_server_a-gold.obj: server/gold.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-gold.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-gold.Tpo -c -o server/libpioneers_server_a-gold.obj `if test -f 'server/gold.c'; then $(CYGPATH_W) 'server/gold.c'; else $(CYGPATH_W) '$(srcdir)/server/gold.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-gold.Tpo server/$(DEPDIR)/libpioneers_server_a-gold.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/gold.c' object='server/libpioneers_server_a-gold.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-gold.obj `if test -f 'server/gold.c'; then $(CYGPATH_W) 'server/gold.c'; else $(CYGPATH_W) '$(srcdir)/server/gold.c'; fi` server/libpioneers_server_a-meta.o: server/meta.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-meta.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-meta.Tpo -c -o server/libpioneers_server_a-meta.o `test -f 'server/meta.c' || echo '$(srcdir)/'`server/meta.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-meta.Tpo server/$(DEPDIR)/libpioneers_server_a-meta.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/meta.c' object='server/libpioneers_server_a-meta.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-meta.o `test -f 'server/meta.c' || echo '$(srcdir)/'`server/meta.c server/libpioneers_server_a-meta.obj: server/meta.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-meta.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-meta.Tpo -c -o server/libpioneers_server_a-meta.obj `if test -f 'server/meta.c'; then $(CYGPATH_W) 'server/meta.c'; else $(CYGPATH_W) '$(srcdir)/server/meta.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-meta.Tpo server/$(DEPDIR)/libpioneers_server_a-meta.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/meta.c' object='server/libpioneers_server_a-meta.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-meta.obj `if test -f 'server/meta.c'; then $(CYGPATH_W) 'server/meta.c'; else $(CYGPATH_W) '$(srcdir)/server/meta.c'; fi` server/libpioneers_server_a-player.o: server/player.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-player.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-player.Tpo -c -o server/libpioneers_server_a-player.o `test -f 'server/player.c' || echo '$(srcdir)/'`server/player.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-player.Tpo server/$(DEPDIR)/libpioneers_server_a-player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/player.c' object='server/libpioneers_server_a-player.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-player.o `test -f 'server/player.c' || echo '$(srcdir)/'`server/player.c server/libpioneers_server_a-player.obj: server/player.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-player.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-player.Tpo -c -o server/libpioneers_server_a-player.obj `if test -f 'server/player.c'; then $(CYGPATH_W) 'server/player.c'; else $(CYGPATH_W) '$(srcdir)/server/player.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-player.Tpo server/$(DEPDIR)/libpioneers_server_a-player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/player.c' object='server/libpioneers_server_a-player.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-player.obj `if test -f 'server/player.c'; then $(CYGPATH_W) 'server/player.c'; else $(CYGPATH_W) '$(srcdir)/server/player.c'; fi` server/libpioneers_server_a-pregame.o: server/pregame.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-pregame.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-pregame.Tpo -c -o server/libpioneers_server_a-pregame.o `test -f 'server/pregame.c' || echo '$(srcdir)/'`server/pregame.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-pregame.Tpo server/$(DEPDIR)/libpioneers_server_a-pregame.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/pregame.c' object='server/libpioneers_server_a-pregame.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-pregame.o `test -f 'server/pregame.c' || echo '$(srcdir)/'`server/pregame.c server/libpioneers_server_a-pregame.obj: server/pregame.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-pregame.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-pregame.Tpo -c -o server/libpioneers_server_a-pregame.obj `if test -f 'server/pregame.c'; then $(CYGPATH_W) 'server/pregame.c'; else $(CYGPATH_W) '$(srcdir)/server/pregame.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-pregame.Tpo server/$(DEPDIR)/libpioneers_server_a-pregame.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/pregame.c' object='server/libpioneers_server_a-pregame.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-pregame.obj `if test -f 'server/pregame.c'; then $(CYGPATH_W) 'server/pregame.c'; else $(CYGPATH_W) '$(srcdir)/server/pregame.c'; fi` server/libpioneers_server_a-resource.o: server/resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-resource.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-resource.Tpo -c -o server/libpioneers_server_a-resource.o `test -f 'server/resource.c' || echo '$(srcdir)/'`server/resource.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-resource.Tpo server/$(DEPDIR)/libpioneers_server_a-resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/resource.c' object='server/libpioneers_server_a-resource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-resource.o `test -f 'server/resource.c' || echo '$(srcdir)/'`server/resource.c server/libpioneers_server_a-resource.obj: server/resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-resource.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-resource.Tpo -c -o server/libpioneers_server_a-resource.obj `if test -f 'server/resource.c'; then $(CYGPATH_W) 'server/resource.c'; else $(CYGPATH_W) '$(srcdir)/server/resource.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-resource.Tpo server/$(DEPDIR)/libpioneers_server_a-resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/resource.c' object='server/libpioneers_server_a-resource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-resource.obj `if test -f 'server/resource.c'; then $(CYGPATH_W) 'server/resource.c'; else $(CYGPATH_W) '$(srcdir)/server/resource.c'; fi` server/libpioneers_server_a-robber.o: server/robber.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-robber.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-robber.Tpo -c -o server/libpioneers_server_a-robber.o `test -f 'server/robber.c' || echo '$(srcdir)/'`server/robber.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-robber.Tpo server/$(DEPDIR)/libpioneers_server_a-robber.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/robber.c' object='server/libpioneers_server_a-robber.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-robber.o `test -f 'server/robber.c' || echo '$(srcdir)/'`server/robber.c server/libpioneers_server_a-robber.obj: server/robber.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-robber.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-robber.Tpo -c -o server/libpioneers_server_a-robber.obj `if test -f 'server/robber.c'; then $(CYGPATH_W) 'server/robber.c'; else $(CYGPATH_W) '$(srcdir)/server/robber.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-robber.Tpo server/$(DEPDIR)/libpioneers_server_a-robber.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/robber.c' object='server/libpioneers_server_a-robber.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-robber.obj `if test -f 'server/robber.c'; then $(CYGPATH_W) 'server/robber.c'; else $(CYGPATH_W) '$(srcdir)/server/robber.c'; fi` server/libpioneers_server_a-server.o: server/server.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-server.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-server.Tpo -c -o server/libpioneers_server_a-server.o `test -f 'server/server.c' || echo '$(srcdir)/'`server/server.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-server.Tpo server/$(DEPDIR)/libpioneers_server_a-server.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/server.c' object='server/libpioneers_server_a-server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-server.o `test -f 'server/server.c' || echo '$(srcdir)/'`server/server.c server/libpioneers_server_a-server.obj: server/server.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-server.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-server.Tpo -c -o server/libpioneers_server_a-server.obj `if test -f 'server/server.c'; then $(CYGPATH_W) 'server/server.c'; else $(CYGPATH_W) '$(srcdir)/server/server.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-server.Tpo server/$(DEPDIR)/libpioneers_server_a-server.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/server.c' object='server/libpioneers_server_a-server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-server.obj `if test -f 'server/server.c'; then $(CYGPATH_W) 'server/server.c'; else $(CYGPATH_W) '$(srcdir)/server/server.c'; fi` server/libpioneers_server_a-trade.o: server/trade.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-trade.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-trade.Tpo -c -o server/libpioneers_server_a-trade.o `test -f 'server/trade.c' || echo '$(srcdir)/'`server/trade.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-trade.Tpo server/$(DEPDIR)/libpioneers_server_a-trade.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/trade.c' object='server/libpioneers_server_a-trade.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-trade.o `test -f 'server/trade.c' || echo '$(srcdir)/'`server/trade.c server/libpioneers_server_a-trade.obj: server/trade.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-trade.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-trade.Tpo -c -o server/libpioneers_server_a-trade.obj `if test -f 'server/trade.c'; then $(CYGPATH_W) 'server/trade.c'; else $(CYGPATH_W) '$(srcdir)/server/trade.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-trade.Tpo server/$(DEPDIR)/libpioneers_server_a-trade.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/trade.c' object='server/libpioneers_server_a-trade.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-trade.obj `if test -f 'server/trade.c'; then $(CYGPATH_W) 'server/trade.c'; else $(CYGPATH_W) '$(srcdir)/server/trade.c'; fi` server/libpioneers_server_a-turn.o: server/turn.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-turn.o -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-turn.Tpo -c -o server/libpioneers_server_a-turn.o `test -f 'server/turn.c' || echo '$(srcdir)/'`server/turn.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-turn.Tpo server/$(DEPDIR)/libpioneers_server_a-turn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/turn.c' object='server/libpioneers_server_a-turn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-turn.o `test -f 'server/turn.c' || echo '$(srcdir)/'`server/turn.c server/libpioneers_server_a-turn.obj: server/turn.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/libpioneers_server_a-turn.obj -MD -MP -MF server/$(DEPDIR)/libpioneers_server_a-turn.Tpo -c -o server/libpioneers_server_a-turn.obj `if test -f 'server/turn.c'; then $(CYGPATH_W) 'server/turn.c'; else $(CYGPATH_W) '$(srcdir)/server/turn.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/libpioneers_server_a-turn.Tpo server/$(DEPDIR)/libpioneers_server_a-turn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/turn.c' object='server/libpioneers_server_a-turn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneers_server_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/libpioneers_server_a-turn.obj `if test -f 'server/turn.c'; then $(CYGPATH_W) 'server/turn.c'; else $(CYGPATH_W) '$(srcdir)/server/turn.c'; fi` client/common/libpioneersclient_a-build.o: client/common/build.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-build.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-build.Tpo -c -o client/common/libpioneersclient_a-build.o `test -f 'client/common/build.c' || echo '$(srcdir)/'`client/common/build.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-build.Tpo client/common/$(DEPDIR)/libpioneersclient_a-build.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/build.c' object='client/common/libpioneersclient_a-build.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-build.o `test -f 'client/common/build.c' || echo '$(srcdir)/'`client/common/build.c client/common/libpioneersclient_a-build.obj: client/common/build.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-build.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-build.Tpo -c -o client/common/libpioneersclient_a-build.obj `if test -f 'client/common/build.c'; then $(CYGPATH_W) 'client/common/build.c'; else $(CYGPATH_W) '$(srcdir)/client/common/build.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-build.Tpo client/common/$(DEPDIR)/libpioneersclient_a-build.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/build.c' object='client/common/libpioneersclient_a-build.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-build.obj `if test -f 'client/common/build.c'; then $(CYGPATH_W) 'client/common/build.c'; else $(CYGPATH_W) '$(srcdir)/client/common/build.c'; fi` client/common/libpioneersclient_a-callback.o: client/common/callback.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-callback.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-callback.Tpo -c -o client/common/libpioneersclient_a-callback.o `test -f 'client/common/callback.c' || echo '$(srcdir)/'`client/common/callback.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-callback.Tpo client/common/$(DEPDIR)/libpioneersclient_a-callback.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/callback.c' object='client/common/libpioneersclient_a-callback.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-callback.o `test -f 'client/common/callback.c' || echo '$(srcdir)/'`client/common/callback.c client/common/libpioneersclient_a-callback.obj: client/common/callback.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-callback.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-callback.Tpo -c -o client/common/libpioneersclient_a-callback.obj `if test -f 'client/common/callback.c'; then $(CYGPATH_W) 'client/common/callback.c'; else $(CYGPATH_W) '$(srcdir)/client/common/callback.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-callback.Tpo client/common/$(DEPDIR)/libpioneersclient_a-callback.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/callback.c' object='client/common/libpioneersclient_a-callback.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-callback.obj `if test -f 'client/common/callback.c'; then $(CYGPATH_W) 'client/common/callback.c'; else $(CYGPATH_W) '$(srcdir)/client/common/callback.c'; fi` client/common/libpioneersclient_a-client.o: client/common/client.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-client.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-client.Tpo -c -o client/common/libpioneersclient_a-client.o `test -f 'client/common/client.c' || echo '$(srcdir)/'`client/common/client.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-client.Tpo client/common/$(DEPDIR)/libpioneersclient_a-client.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/client.c' object='client/common/libpioneersclient_a-client.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-client.o `test -f 'client/common/client.c' || echo '$(srcdir)/'`client/common/client.c client/common/libpioneersclient_a-client.obj: client/common/client.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-client.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-client.Tpo -c -o client/common/libpioneersclient_a-client.obj `if test -f 'client/common/client.c'; then $(CYGPATH_W) 'client/common/client.c'; else $(CYGPATH_W) '$(srcdir)/client/common/client.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-client.Tpo client/common/$(DEPDIR)/libpioneersclient_a-client.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/client.c' object='client/common/libpioneersclient_a-client.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-client.obj `if test -f 'client/common/client.c'; then $(CYGPATH_W) 'client/common/client.c'; else $(CYGPATH_W) '$(srcdir)/client/common/client.c'; fi` client/common/libpioneersclient_a-develop.o: client/common/develop.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-develop.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-develop.Tpo -c -o client/common/libpioneersclient_a-develop.o `test -f 'client/common/develop.c' || echo '$(srcdir)/'`client/common/develop.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-develop.Tpo client/common/$(DEPDIR)/libpioneersclient_a-develop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/develop.c' object='client/common/libpioneersclient_a-develop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-develop.o `test -f 'client/common/develop.c' || echo '$(srcdir)/'`client/common/develop.c client/common/libpioneersclient_a-develop.obj: client/common/develop.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-develop.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-develop.Tpo -c -o client/common/libpioneersclient_a-develop.obj `if test -f 'client/common/develop.c'; then $(CYGPATH_W) 'client/common/develop.c'; else $(CYGPATH_W) '$(srcdir)/client/common/develop.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-develop.Tpo client/common/$(DEPDIR)/libpioneersclient_a-develop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/develop.c' object='client/common/libpioneersclient_a-develop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-develop.obj `if test -f 'client/common/develop.c'; then $(CYGPATH_W) 'client/common/develop.c'; else $(CYGPATH_W) '$(srcdir)/client/common/develop.c'; fi` client/common/libpioneersclient_a-main.o: client/common/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-main.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-main.Tpo -c -o client/common/libpioneersclient_a-main.o `test -f 'client/common/main.c' || echo '$(srcdir)/'`client/common/main.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-main.Tpo client/common/$(DEPDIR)/libpioneersclient_a-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/main.c' object='client/common/libpioneersclient_a-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-main.o `test -f 'client/common/main.c' || echo '$(srcdir)/'`client/common/main.c client/common/libpioneersclient_a-main.obj: client/common/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-main.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-main.Tpo -c -o client/common/libpioneersclient_a-main.obj `if test -f 'client/common/main.c'; then $(CYGPATH_W) 'client/common/main.c'; else $(CYGPATH_W) '$(srcdir)/client/common/main.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-main.Tpo client/common/$(DEPDIR)/libpioneersclient_a-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/main.c' object='client/common/libpioneersclient_a-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-main.obj `if test -f 'client/common/main.c'; then $(CYGPATH_W) 'client/common/main.c'; else $(CYGPATH_W) '$(srcdir)/client/common/main.c'; fi` client/common/libpioneersclient_a-player.o: client/common/player.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-player.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-player.Tpo -c -o client/common/libpioneersclient_a-player.o `test -f 'client/common/player.c' || echo '$(srcdir)/'`client/common/player.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-player.Tpo client/common/$(DEPDIR)/libpioneersclient_a-player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/player.c' object='client/common/libpioneersclient_a-player.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-player.o `test -f 'client/common/player.c' || echo '$(srcdir)/'`client/common/player.c client/common/libpioneersclient_a-player.obj: client/common/player.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-player.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-player.Tpo -c -o client/common/libpioneersclient_a-player.obj `if test -f 'client/common/player.c'; then $(CYGPATH_W) 'client/common/player.c'; else $(CYGPATH_W) '$(srcdir)/client/common/player.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-player.Tpo client/common/$(DEPDIR)/libpioneersclient_a-player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/player.c' object='client/common/libpioneersclient_a-player.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-player.obj `if test -f 'client/common/player.c'; then $(CYGPATH_W) 'client/common/player.c'; else $(CYGPATH_W) '$(srcdir)/client/common/player.c'; fi` client/common/libpioneersclient_a-resource.o: client/common/resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-resource.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-resource.Tpo -c -o client/common/libpioneersclient_a-resource.o `test -f 'client/common/resource.c' || echo '$(srcdir)/'`client/common/resource.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-resource.Tpo client/common/$(DEPDIR)/libpioneersclient_a-resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/resource.c' object='client/common/libpioneersclient_a-resource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-resource.o `test -f 'client/common/resource.c' || echo '$(srcdir)/'`client/common/resource.c client/common/libpioneersclient_a-resource.obj: client/common/resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-resource.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-resource.Tpo -c -o client/common/libpioneersclient_a-resource.obj `if test -f 'client/common/resource.c'; then $(CYGPATH_W) 'client/common/resource.c'; else $(CYGPATH_W) '$(srcdir)/client/common/resource.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-resource.Tpo client/common/$(DEPDIR)/libpioneersclient_a-resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/resource.c' object='client/common/libpioneersclient_a-resource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-resource.obj `if test -f 'client/common/resource.c'; then $(CYGPATH_W) 'client/common/resource.c'; else $(CYGPATH_W) '$(srcdir)/client/common/resource.c'; fi` client/common/libpioneersclient_a-robber.o: client/common/robber.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-robber.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-robber.Tpo -c -o client/common/libpioneersclient_a-robber.o `test -f 'client/common/robber.c' || echo '$(srcdir)/'`client/common/robber.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-robber.Tpo client/common/$(DEPDIR)/libpioneersclient_a-robber.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/robber.c' object='client/common/libpioneersclient_a-robber.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-robber.o `test -f 'client/common/robber.c' || echo '$(srcdir)/'`client/common/robber.c client/common/libpioneersclient_a-robber.obj: client/common/robber.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-robber.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-robber.Tpo -c -o client/common/libpioneersclient_a-robber.obj `if test -f 'client/common/robber.c'; then $(CYGPATH_W) 'client/common/robber.c'; else $(CYGPATH_W) '$(srcdir)/client/common/robber.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-robber.Tpo client/common/$(DEPDIR)/libpioneersclient_a-robber.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/robber.c' object='client/common/libpioneersclient_a-robber.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-robber.obj `if test -f 'client/common/robber.c'; then $(CYGPATH_W) 'client/common/robber.c'; else $(CYGPATH_W) '$(srcdir)/client/common/robber.c'; fi` client/common/libpioneersclient_a-setup.o: client/common/setup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-setup.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-setup.Tpo -c -o client/common/libpioneersclient_a-setup.o `test -f 'client/common/setup.c' || echo '$(srcdir)/'`client/common/setup.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-setup.Tpo client/common/$(DEPDIR)/libpioneersclient_a-setup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/setup.c' object='client/common/libpioneersclient_a-setup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-setup.o `test -f 'client/common/setup.c' || echo '$(srcdir)/'`client/common/setup.c client/common/libpioneersclient_a-setup.obj: client/common/setup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-setup.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-setup.Tpo -c -o client/common/libpioneersclient_a-setup.obj `if test -f 'client/common/setup.c'; then $(CYGPATH_W) 'client/common/setup.c'; else $(CYGPATH_W) '$(srcdir)/client/common/setup.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-setup.Tpo client/common/$(DEPDIR)/libpioneersclient_a-setup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/setup.c' object='client/common/libpioneersclient_a-setup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-setup.obj `if test -f 'client/common/setup.c'; then $(CYGPATH_W) 'client/common/setup.c'; else $(CYGPATH_W) '$(srcdir)/client/common/setup.c'; fi` client/common/libpioneersclient_a-stock.o: client/common/stock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-stock.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-stock.Tpo -c -o client/common/libpioneersclient_a-stock.o `test -f 'client/common/stock.c' || echo '$(srcdir)/'`client/common/stock.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-stock.Tpo client/common/$(DEPDIR)/libpioneersclient_a-stock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/stock.c' object='client/common/libpioneersclient_a-stock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-stock.o `test -f 'client/common/stock.c' || echo '$(srcdir)/'`client/common/stock.c client/common/libpioneersclient_a-stock.obj: client/common/stock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-stock.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-stock.Tpo -c -o client/common/libpioneersclient_a-stock.obj `if test -f 'client/common/stock.c'; then $(CYGPATH_W) 'client/common/stock.c'; else $(CYGPATH_W) '$(srcdir)/client/common/stock.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-stock.Tpo client/common/$(DEPDIR)/libpioneersclient_a-stock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/stock.c' object='client/common/libpioneersclient_a-stock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-stock.obj `if test -f 'client/common/stock.c'; then $(CYGPATH_W) 'client/common/stock.c'; else $(CYGPATH_W) '$(srcdir)/client/common/stock.c'; fi` client/common/libpioneersclient_a-turn.o: client/common/turn.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-turn.o -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-turn.Tpo -c -o client/common/libpioneersclient_a-turn.o `test -f 'client/common/turn.c' || echo '$(srcdir)/'`client/common/turn.c @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-turn.Tpo client/common/$(DEPDIR)/libpioneersclient_a-turn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/turn.c' object='client/common/libpioneersclient_a-turn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-turn.o `test -f 'client/common/turn.c' || echo '$(srcdir)/'`client/common/turn.c client/common/libpioneersclient_a-turn.obj: client/common/turn.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/common/libpioneersclient_a-turn.obj -MD -MP -MF client/common/$(DEPDIR)/libpioneersclient_a-turn.Tpo -c -o client/common/libpioneersclient_a-turn.obj `if test -f 'client/common/turn.c'; then $(CYGPATH_W) 'client/common/turn.c'; else $(CYGPATH_W) '$(srcdir)/client/common/turn.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/common/$(DEPDIR)/libpioneersclient_a-turn.Tpo client/common/$(DEPDIR)/libpioneersclient_a-turn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/common/turn.c' object='client/common/libpioneersclient_a-turn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpioneersclient_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/common/libpioneersclient_a-turn.obj `if test -f 'client/common/turn.c'; then $(CYGPATH_W) 'client/common/turn.c'; else $(CYGPATH_W) '$(srcdir)/client/common/turn.c'; fi` client/gtk/pioneers-admin-gtk.o: client/gtk/admin-gtk.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-admin-gtk.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-admin-gtk.Tpo -c -o client/gtk/pioneers-admin-gtk.o `test -f 'client/gtk/admin-gtk.c' || echo '$(srcdir)/'`client/gtk/admin-gtk.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-admin-gtk.Tpo client/gtk/$(DEPDIR)/pioneers-admin-gtk.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/admin-gtk.c' object='client/gtk/pioneers-admin-gtk.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-admin-gtk.o `test -f 'client/gtk/admin-gtk.c' || echo '$(srcdir)/'`client/gtk/admin-gtk.c client/gtk/pioneers-admin-gtk.obj: client/gtk/admin-gtk.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-admin-gtk.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-admin-gtk.Tpo -c -o client/gtk/pioneers-admin-gtk.obj `if test -f 'client/gtk/admin-gtk.c'; then $(CYGPATH_W) 'client/gtk/admin-gtk.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/admin-gtk.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-admin-gtk.Tpo client/gtk/$(DEPDIR)/pioneers-admin-gtk.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/admin-gtk.c' object='client/gtk/pioneers-admin-gtk.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-admin-gtk.obj `if test -f 'client/gtk/admin-gtk.c'; then $(CYGPATH_W) 'client/gtk/admin-gtk.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/admin-gtk.c'; fi` client/gtk/pioneers-audio.o: client/gtk/audio.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-audio.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-audio.Tpo -c -o client/gtk/pioneers-audio.o `test -f 'client/gtk/audio.c' || echo '$(srcdir)/'`client/gtk/audio.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-audio.Tpo client/gtk/$(DEPDIR)/pioneers-audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/audio.c' object='client/gtk/pioneers-audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-audio.o `test -f 'client/gtk/audio.c' || echo '$(srcdir)/'`client/gtk/audio.c client/gtk/pioneers-audio.obj: client/gtk/audio.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-audio.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-audio.Tpo -c -o client/gtk/pioneers-audio.obj `if test -f 'client/gtk/audio.c'; then $(CYGPATH_W) 'client/gtk/audio.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/audio.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-audio.Tpo client/gtk/$(DEPDIR)/pioneers-audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/audio.c' object='client/gtk/pioneers-audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-audio.obj `if test -f 'client/gtk/audio.c'; then $(CYGPATH_W) 'client/gtk/audio.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/audio.c'; fi` client/gtk/pioneers-avahi.o: client/gtk/avahi.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-avahi.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-avahi.Tpo -c -o client/gtk/pioneers-avahi.o `test -f 'client/gtk/avahi.c' || echo '$(srcdir)/'`client/gtk/avahi.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-avahi.Tpo client/gtk/$(DEPDIR)/pioneers-avahi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/avahi.c' object='client/gtk/pioneers-avahi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-avahi.o `test -f 'client/gtk/avahi.c' || echo '$(srcdir)/'`client/gtk/avahi.c client/gtk/pioneers-avahi.obj: client/gtk/avahi.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-avahi.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-avahi.Tpo -c -o client/gtk/pioneers-avahi.obj `if test -f 'client/gtk/avahi.c'; then $(CYGPATH_W) 'client/gtk/avahi.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/avahi.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-avahi.Tpo client/gtk/$(DEPDIR)/pioneers-avahi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/avahi.c' object='client/gtk/pioneers-avahi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-avahi.obj `if test -f 'client/gtk/avahi.c'; then $(CYGPATH_W) 'client/gtk/avahi.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/avahi.c'; fi` client/gtk/pioneers-avahi-browser.o: client/gtk/avahi-browser.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-avahi-browser.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-avahi-browser.Tpo -c -o client/gtk/pioneers-avahi-browser.o `test -f 'client/gtk/avahi-browser.c' || echo '$(srcdir)/'`client/gtk/avahi-browser.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-avahi-browser.Tpo client/gtk/$(DEPDIR)/pioneers-avahi-browser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/avahi-browser.c' object='client/gtk/pioneers-avahi-browser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-avahi-browser.o `test -f 'client/gtk/avahi-browser.c' || echo '$(srcdir)/'`client/gtk/avahi-browser.c client/gtk/pioneers-avahi-browser.obj: client/gtk/avahi-browser.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-avahi-browser.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-avahi-browser.Tpo -c -o client/gtk/pioneers-avahi-browser.obj `if test -f 'client/gtk/avahi-browser.c'; then $(CYGPATH_W) 'client/gtk/avahi-browser.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/avahi-browser.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-avahi-browser.Tpo client/gtk/$(DEPDIR)/pioneers-avahi-browser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/avahi-browser.c' object='client/gtk/pioneers-avahi-browser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-avahi-browser.obj `if test -f 'client/gtk/avahi-browser.c'; then $(CYGPATH_W) 'client/gtk/avahi-browser.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/avahi-browser.c'; fi` client/gtk/pioneers-callbacks.o: client/gtk/callbacks.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-callbacks.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-callbacks.Tpo -c -o client/gtk/pioneers-callbacks.o `test -f 'client/gtk/callbacks.c' || echo '$(srcdir)/'`client/gtk/callbacks.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-callbacks.Tpo client/gtk/$(DEPDIR)/pioneers-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/callbacks.c' object='client/gtk/pioneers-callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-callbacks.o `test -f 'client/gtk/callbacks.c' || echo '$(srcdir)/'`client/gtk/callbacks.c client/gtk/pioneers-callbacks.obj: client/gtk/callbacks.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-callbacks.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-callbacks.Tpo -c -o client/gtk/pioneers-callbacks.obj `if test -f 'client/gtk/callbacks.c'; then $(CYGPATH_W) 'client/gtk/callbacks.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/callbacks.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-callbacks.Tpo client/gtk/$(DEPDIR)/pioneers-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/callbacks.c' object='client/gtk/pioneers-callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-callbacks.obj `if test -f 'client/gtk/callbacks.c'; then $(CYGPATH_W) 'client/gtk/callbacks.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/callbacks.c'; fi` client/gtk/pioneers-chat.o: client/gtk/chat.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-chat.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-chat.Tpo -c -o client/gtk/pioneers-chat.o `test -f 'client/gtk/chat.c' || echo '$(srcdir)/'`client/gtk/chat.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-chat.Tpo client/gtk/$(DEPDIR)/pioneers-chat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/chat.c' object='client/gtk/pioneers-chat.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-chat.o `test -f 'client/gtk/chat.c' || echo '$(srcdir)/'`client/gtk/chat.c client/gtk/pioneers-chat.obj: client/gtk/chat.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-chat.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-chat.Tpo -c -o client/gtk/pioneers-chat.obj `if test -f 'client/gtk/chat.c'; then $(CYGPATH_W) 'client/gtk/chat.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/chat.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-chat.Tpo client/gtk/$(DEPDIR)/pioneers-chat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/chat.c' object='client/gtk/pioneers-chat.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-chat.obj `if test -f 'client/gtk/chat.c'; then $(CYGPATH_W) 'client/gtk/chat.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/chat.c'; fi` client/gtk/pioneers-connect.o: client/gtk/connect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-connect.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-connect.Tpo -c -o client/gtk/pioneers-connect.o `test -f 'client/gtk/connect.c' || echo '$(srcdir)/'`client/gtk/connect.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-connect.Tpo client/gtk/$(DEPDIR)/pioneers-connect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/connect.c' object='client/gtk/pioneers-connect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-connect.o `test -f 'client/gtk/connect.c' || echo '$(srcdir)/'`client/gtk/connect.c client/gtk/pioneers-connect.obj: client/gtk/connect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-connect.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-connect.Tpo -c -o client/gtk/pioneers-connect.obj `if test -f 'client/gtk/connect.c'; then $(CYGPATH_W) 'client/gtk/connect.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/connect.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-connect.Tpo client/gtk/$(DEPDIR)/pioneers-connect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/connect.c' object='client/gtk/pioneers-connect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-connect.obj `if test -f 'client/gtk/connect.c'; then $(CYGPATH_W) 'client/gtk/connect.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/connect.c'; fi` client/gtk/pioneers-develop.o: client/gtk/develop.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-develop.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-develop.Tpo -c -o client/gtk/pioneers-develop.o `test -f 'client/gtk/develop.c' || echo '$(srcdir)/'`client/gtk/develop.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-develop.Tpo client/gtk/$(DEPDIR)/pioneers-develop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/develop.c' object='client/gtk/pioneers-develop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-develop.o `test -f 'client/gtk/develop.c' || echo '$(srcdir)/'`client/gtk/develop.c client/gtk/pioneers-develop.obj: client/gtk/develop.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-develop.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-develop.Tpo -c -o client/gtk/pioneers-develop.obj `if test -f 'client/gtk/develop.c'; then $(CYGPATH_W) 'client/gtk/develop.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/develop.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-develop.Tpo client/gtk/$(DEPDIR)/pioneers-develop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/develop.c' object='client/gtk/pioneers-develop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-develop.obj `if test -f 'client/gtk/develop.c'; then $(CYGPATH_W) 'client/gtk/develop.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/develop.c'; fi` client/gtk/pioneers-discard.o: client/gtk/discard.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-discard.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-discard.Tpo -c -o client/gtk/pioneers-discard.o `test -f 'client/gtk/discard.c' || echo '$(srcdir)/'`client/gtk/discard.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-discard.Tpo client/gtk/$(DEPDIR)/pioneers-discard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/discard.c' object='client/gtk/pioneers-discard.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-discard.o `test -f 'client/gtk/discard.c' || echo '$(srcdir)/'`client/gtk/discard.c client/gtk/pioneers-discard.obj: client/gtk/discard.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-discard.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-discard.Tpo -c -o client/gtk/pioneers-discard.obj `if test -f 'client/gtk/discard.c'; then $(CYGPATH_W) 'client/gtk/discard.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/discard.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-discard.Tpo client/gtk/$(DEPDIR)/pioneers-discard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/discard.c' object='client/gtk/pioneers-discard.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-discard.obj `if test -f 'client/gtk/discard.c'; then $(CYGPATH_W) 'client/gtk/discard.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/discard.c'; fi` client/gtk/pioneers-frontend.o: client/gtk/frontend.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-frontend.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-frontend.Tpo -c -o client/gtk/pioneers-frontend.o `test -f 'client/gtk/frontend.c' || echo '$(srcdir)/'`client/gtk/frontend.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-frontend.Tpo client/gtk/$(DEPDIR)/pioneers-frontend.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/frontend.c' object='client/gtk/pioneers-frontend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-frontend.o `test -f 'client/gtk/frontend.c' || echo '$(srcdir)/'`client/gtk/frontend.c client/gtk/pioneers-frontend.obj: client/gtk/frontend.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-frontend.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-frontend.Tpo -c -o client/gtk/pioneers-frontend.obj `if test -f 'client/gtk/frontend.c'; then $(CYGPATH_W) 'client/gtk/frontend.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/frontend.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-frontend.Tpo client/gtk/$(DEPDIR)/pioneers-frontend.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/frontend.c' object='client/gtk/pioneers-frontend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-frontend.obj `if test -f 'client/gtk/frontend.c'; then $(CYGPATH_W) 'client/gtk/frontend.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/frontend.c'; fi` client/gtk/pioneers-gameover.o: client/gtk/gameover.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-gameover.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-gameover.Tpo -c -o client/gtk/pioneers-gameover.o `test -f 'client/gtk/gameover.c' || echo '$(srcdir)/'`client/gtk/gameover.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-gameover.Tpo client/gtk/$(DEPDIR)/pioneers-gameover.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/gameover.c' object='client/gtk/pioneers-gameover.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-gameover.o `test -f 'client/gtk/gameover.c' || echo '$(srcdir)/'`client/gtk/gameover.c client/gtk/pioneers-gameover.obj: client/gtk/gameover.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-gameover.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-gameover.Tpo -c -o client/gtk/pioneers-gameover.obj `if test -f 'client/gtk/gameover.c'; then $(CYGPATH_W) 'client/gtk/gameover.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/gameover.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-gameover.Tpo client/gtk/$(DEPDIR)/pioneers-gameover.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/gameover.c' object='client/gtk/pioneers-gameover.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-gameover.obj `if test -f 'client/gtk/gameover.c'; then $(CYGPATH_W) 'client/gtk/gameover.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/gameover.c'; fi` client/gtk/pioneers-gold.o: client/gtk/gold.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-gold.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-gold.Tpo -c -o client/gtk/pioneers-gold.o `test -f 'client/gtk/gold.c' || echo '$(srcdir)/'`client/gtk/gold.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-gold.Tpo client/gtk/$(DEPDIR)/pioneers-gold.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/gold.c' object='client/gtk/pioneers-gold.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-gold.o `test -f 'client/gtk/gold.c' || echo '$(srcdir)/'`client/gtk/gold.c client/gtk/pioneers-gold.obj: client/gtk/gold.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-gold.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-gold.Tpo -c -o client/gtk/pioneers-gold.obj `if test -f 'client/gtk/gold.c'; then $(CYGPATH_W) 'client/gtk/gold.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/gold.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-gold.Tpo client/gtk/$(DEPDIR)/pioneers-gold.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/gold.c' object='client/gtk/pioneers-gold.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-gold.obj `if test -f 'client/gtk/gold.c'; then $(CYGPATH_W) 'client/gtk/gold.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/gold.c'; fi` client/gtk/pioneers-gui.o: client/gtk/gui.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-gui.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-gui.Tpo -c -o client/gtk/pioneers-gui.o `test -f 'client/gtk/gui.c' || echo '$(srcdir)/'`client/gtk/gui.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-gui.Tpo client/gtk/$(DEPDIR)/pioneers-gui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/gui.c' object='client/gtk/pioneers-gui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-gui.o `test -f 'client/gtk/gui.c' || echo '$(srcdir)/'`client/gtk/gui.c client/gtk/pioneers-gui.obj: client/gtk/gui.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-gui.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-gui.Tpo -c -o client/gtk/pioneers-gui.obj `if test -f 'client/gtk/gui.c'; then $(CYGPATH_W) 'client/gtk/gui.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/gui.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-gui.Tpo client/gtk/$(DEPDIR)/pioneers-gui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/gui.c' object='client/gtk/pioneers-gui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-gui.obj `if test -f 'client/gtk/gui.c'; then $(CYGPATH_W) 'client/gtk/gui.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/gui.c'; fi` client/gtk/pioneers-histogram.o: client/gtk/histogram.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-histogram.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-histogram.Tpo -c -o client/gtk/pioneers-histogram.o `test -f 'client/gtk/histogram.c' || echo '$(srcdir)/'`client/gtk/histogram.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-histogram.Tpo client/gtk/$(DEPDIR)/pioneers-histogram.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/histogram.c' object='client/gtk/pioneers-histogram.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-histogram.o `test -f 'client/gtk/histogram.c' || echo '$(srcdir)/'`client/gtk/histogram.c client/gtk/pioneers-histogram.obj: client/gtk/histogram.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-histogram.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-histogram.Tpo -c -o client/gtk/pioneers-histogram.obj `if test -f 'client/gtk/histogram.c'; then $(CYGPATH_W) 'client/gtk/histogram.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/histogram.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-histogram.Tpo client/gtk/$(DEPDIR)/pioneers-histogram.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/histogram.c' object='client/gtk/pioneers-histogram.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-histogram.obj `if test -f 'client/gtk/histogram.c'; then $(CYGPATH_W) 'client/gtk/histogram.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/histogram.c'; fi` client/gtk/pioneers-identity.o: client/gtk/identity.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-identity.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-identity.Tpo -c -o client/gtk/pioneers-identity.o `test -f 'client/gtk/identity.c' || echo '$(srcdir)/'`client/gtk/identity.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-identity.Tpo client/gtk/$(DEPDIR)/pioneers-identity.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/identity.c' object='client/gtk/pioneers-identity.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-identity.o `test -f 'client/gtk/identity.c' || echo '$(srcdir)/'`client/gtk/identity.c client/gtk/pioneers-identity.obj: client/gtk/identity.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-identity.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-identity.Tpo -c -o client/gtk/pioneers-identity.obj `if test -f 'client/gtk/identity.c'; then $(CYGPATH_W) 'client/gtk/identity.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/identity.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-identity.Tpo client/gtk/$(DEPDIR)/pioneers-identity.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/identity.c' object='client/gtk/pioneers-identity.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-identity.obj `if test -f 'client/gtk/identity.c'; then $(CYGPATH_W) 'client/gtk/identity.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/identity.c'; fi` client/gtk/pioneers-interface.o: client/gtk/interface.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-interface.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-interface.Tpo -c -o client/gtk/pioneers-interface.o `test -f 'client/gtk/interface.c' || echo '$(srcdir)/'`client/gtk/interface.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-interface.Tpo client/gtk/$(DEPDIR)/pioneers-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/interface.c' object='client/gtk/pioneers-interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-interface.o `test -f 'client/gtk/interface.c' || echo '$(srcdir)/'`client/gtk/interface.c client/gtk/pioneers-interface.obj: client/gtk/interface.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-interface.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-interface.Tpo -c -o client/gtk/pioneers-interface.obj `if test -f 'client/gtk/interface.c'; then $(CYGPATH_W) 'client/gtk/interface.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/interface.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-interface.Tpo client/gtk/$(DEPDIR)/pioneers-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/interface.c' object='client/gtk/pioneers-interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-interface.obj `if test -f 'client/gtk/interface.c'; then $(CYGPATH_W) 'client/gtk/interface.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/interface.c'; fi` client/gtk/pioneers-legend.o: client/gtk/legend.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-legend.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-legend.Tpo -c -o client/gtk/pioneers-legend.o `test -f 'client/gtk/legend.c' || echo '$(srcdir)/'`client/gtk/legend.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-legend.Tpo client/gtk/$(DEPDIR)/pioneers-legend.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/legend.c' object='client/gtk/pioneers-legend.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-legend.o `test -f 'client/gtk/legend.c' || echo '$(srcdir)/'`client/gtk/legend.c client/gtk/pioneers-legend.obj: client/gtk/legend.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-legend.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-legend.Tpo -c -o client/gtk/pioneers-legend.obj `if test -f 'client/gtk/legend.c'; then $(CYGPATH_W) 'client/gtk/legend.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/legend.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-legend.Tpo client/gtk/$(DEPDIR)/pioneers-legend.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/legend.c' object='client/gtk/pioneers-legend.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-legend.obj `if test -f 'client/gtk/legend.c'; then $(CYGPATH_W) 'client/gtk/legend.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/legend.c'; fi` client/gtk/pioneers-monopoly.o: client/gtk/monopoly.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-monopoly.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-monopoly.Tpo -c -o client/gtk/pioneers-monopoly.o `test -f 'client/gtk/monopoly.c' || echo '$(srcdir)/'`client/gtk/monopoly.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-monopoly.Tpo client/gtk/$(DEPDIR)/pioneers-monopoly.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/monopoly.c' object='client/gtk/pioneers-monopoly.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-monopoly.o `test -f 'client/gtk/monopoly.c' || echo '$(srcdir)/'`client/gtk/monopoly.c client/gtk/pioneers-monopoly.obj: client/gtk/monopoly.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-monopoly.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-monopoly.Tpo -c -o client/gtk/pioneers-monopoly.obj `if test -f 'client/gtk/monopoly.c'; then $(CYGPATH_W) 'client/gtk/monopoly.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/monopoly.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-monopoly.Tpo client/gtk/$(DEPDIR)/pioneers-monopoly.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/monopoly.c' object='client/gtk/pioneers-monopoly.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-monopoly.obj `if test -f 'client/gtk/monopoly.c'; then $(CYGPATH_W) 'client/gtk/monopoly.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/monopoly.c'; fi` client/gtk/pioneers-name.o: client/gtk/name.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-name.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-name.Tpo -c -o client/gtk/pioneers-name.o `test -f 'client/gtk/name.c' || echo '$(srcdir)/'`client/gtk/name.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-name.Tpo client/gtk/$(DEPDIR)/pioneers-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/name.c' object='client/gtk/pioneers-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-name.o `test -f 'client/gtk/name.c' || echo '$(srcdir)/'`client/gtk/name.c client/gtk/pioneers-name.obj: client/gtk/name.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-name.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-name.Tpo -c -o client/gtk/pioneers-name.obj `if test -f 'client/gtk/name.c'; then $(CYGPATH_W) 'client/gtk/name.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/name.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-name.Tpo client/gtk/$(DEPDIR)/pioneers-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/name.c' object='client/gtk/pioneers-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-name.obj `if test -f 'client/gtk/name.c'; then $(CYGPATH_W) 'client/gtk/name.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/name.c'; fi` client/gtk/pioneers-notification.o: client/gtk/notification.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-notification.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-notification.Tpo -c -o client/gtk/pioneers-notification.o `test -f 'client/gtk/notification.c' || echo '$(srcdir)/'`client/gtk/notification.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-notification.Tpo client/gtk/$(DEPDIR)/pioneers-notification.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/notification.c' object='client/gtk/pioneers-notification.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-notification.o `test -f 'client/gtk/notification.c' || echo '$(srcdir)/'`client/gtk/notification.c client/gtk/pioneers-notification.obj: client/gtk/notification.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-notification.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-notification.Tpo -c -o client/gtk/pioneers-notification.obj `if test -f 'client/gtk/notification.c'; then $(CYGPATH_W) 'client/gtk/notification.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/notification.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-notification.Tpo client/gtk/$(DEPDIR)/pioneers-notification.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/notification.c' object='client/gtk/pioneers-notification.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-notification.obj `if test -f 'client/gtk/notification.c'; then $(CYGPATH_W) 'client/gtk/notification.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/notification.c'; fi` client/gtk/pioneers-offline.o: client/gtk/offline.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-offline.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-offline.Tpo -c -o client/gtk/pioneers-offline.o `test -f 'client/gtk/offline.c' || echo '$(srcdir)/'`client/gtk/offline.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-offline.Tpo client/gtk/$(DEPDIR)/pioneers-offline.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/offline.c' object='client/gtk/pioneers-offline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-offline.o `test -f 'client/gtk/offline.c' || echo '$(srcdir)/'`client/gtk/offline.c client/gtk/pioneers-offline.obj: client/gtk/offline.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-offline.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-offline.Tpo -c -o client/gtk/pioneers-offline.obj `if test -f 'client/gtk/offline.c'; then $(CYGPATH_W) 'client/gtk/offline.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/offline.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-offline.Tpo client/gtk/$(DEPDIR)/pioneers-offline.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/offline.c' object='client/gtk/pioneers-offline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-offline.obj `if test -f 'client/gtk/offline.c'; then $(CYGPATH_W) 'client/gtk/offline.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/offline.c'; fi` client/gtk/pioneers-plenty.o: client/gtk/plenty.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-plenty.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-plenty.Tpo -c -o client/gtk/pioneers-plenty.o `test -f 'client/gtk/plenty.c' || echo '$(srcdir)/'`client/gtk/plenty.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-plenty.Tpo client/gtk/$(DEPDIR)/pioneers-plenty.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/plenty.c' object='client/gtk/pioneers-plenty.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-plenty.o `test -f 'client/gtk/plenty.c' || echo '$(srcdir)/'`client/gtk/plenty.c client/gtk/pioneers-plenty.obj: client/gtk/plenty.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-plenty.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-plenty.Tpo -c -o client/gtk/pioneers-plenty.obj `if test -f 'client/gtk/plenty.c'; then $(CYGPATH_W) 'client/gtk/plenty.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/plenty.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-plenty.Tpo client/gtk/$(DEPDIR)/pioneers-plenty.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/plenty.c' object='client/gtk/pioneers-plenty.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-plenty.obj `if test -f 'client/gtk/plenty.c'; then $(CYGPATH_W) 'client/gtk/plenty.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/plenty.c'; fi` client/gtk/pioneers-player.o: client/gtk/player.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-player.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-player.Tpo -c -o client/gtk/pioneers-player.o `test -f 'client/gtk/player.c' || echo '$(srcdir)/'`client/gtk/player.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-player.Tpo client/gtk/$(DEPDIR)/pioneers-player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/player.c' object='client/gtk/pioneers-player.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-player.o `test -f 'client/gtk/player.c' || echo '$(srcdir)/'`client/gtk/player.c client/gtk/pioneers-player.obj: client/gtk/player.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-player.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-player.Tpo -c -o client/gtk/pioneers-player.obj `if test -f 'client/gtk/player.c'; then $(CYGPATH_W) 'client/gtk/player.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/player.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-player.Tpo client/gtk/$(DEPDIR)/pioneers-player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/player.c' object='client/gtk/pioneers-player.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-player.obj `if test -f 'client/gtk/player.c'; then $(CYGPATH_W) 'client/gtk/player.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/player.c'; fi` client/gtk/pioneers-quote.o: client/gtk/quote.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-quote.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-quote.Tpo -c -o client/gtk/pioneers-quote.o `test -f 'client/gtk/quote.c' || echo '$(srcdir)/'`client/gtk/quote.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-quote.Tpo client/gtk/$(DEPDIR)/pioneers-quote.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/quote.c' object='client/gtk/pioneers-quote.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-quote.o `test -f 'client/gtk/quote.c' || echo '$(srcdir)/'`client/gtk/quote.c client/gtk/pioneers-quote.obj: client/gtk/quote.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-quote.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-quote.Tpo -c -o client/gtk/pioneers-quote.obj `if test -f 'client/gtk/quote.c'; then $(CYGPATH_W) 'client/gtk/quote.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/quote.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-quote.Tpo client/gtk/$(DEPDIR)/pioneers-quote.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/quote.c' object='client/gtk/pioneers-quote.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-quote.obj `if test -f 'client/gtk/quote.c'; then $(CYGPATH_W) 'client/gtk/quote.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/quote.c'; fi` client/gtk/pioneers-quote-view.o: client/gtk/quote-view.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-quote-view.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-quote-view.Tpo -c -o client/gtk/pioneers-quote-view.o `test -f 'client/gtk/quote-view.c' || echo '$(srcdir)/'`client/gtk/quote-view.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-quote-view.Tpo client/gtk/$(DEPDIR)/pioneers-quote-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/quote-view.c' object='client/gtk/pioneers-quote-view.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-quote-view.o `test -f 'client/gtk/quote-view.c' || echo '$(srcdir)/'`client/gtk/quote-view.c client/gtk/pioneers-quote-view.obj: client/gtk/quote-view.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-quote-view.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-quote-view.Tpo -c -o client/gtk/pioneers-quote-view.obj `if test -f 'client/gtk/quote-view.c'; then $(CYGPATH_W) 'client/gtk/quote-view.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/quote-view.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-quote-view.Tpo client/gtk/$(DEPDIR)/pioneers-quote-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/quote-view.c' object='client/gtk/pioneers-quote-view.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-quote-view.obj `if test -f 'client/gtk/quote-view.c'; then $(CYGPATH_W) 'client/gtk/quote-view.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/quote-view.c'; fi` client/gtk/pioneers-resource.o: client/gtk/resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-resource.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-resource.Tpo -c -o client/gtk/pioneers-resource.o `test -f 'client/gtk/resource.c' || echo '$(srcdir)/'`client/gtk/resource.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-resource.Tpo client/gtk/$(DEPDIR)/pioneers-resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/resource.c' object='client/gtk/pioneers-resource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-resource.o `test -f 'client/gtk/resource.c' || echo '$(srcdir)/'`client/gtk/resource.c client/gtk/pioneers-resource.obj: client/gtk/resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-resource.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-resource.Tpo -c -o client/gtk/pioneers-resource.obj `if test -f 'client/gtk/resource.c'; then $(CYGPATH_W) 'client/gtk/resource.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/resource.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-resource.Tpo client/gtk/$(DEPDIR)/pioneers-resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/resource.c' object='client/gtk/pioneers-resource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-resource.obj `if test -f 'client/gtk/resource.c'; then $(CYGPATH_W) 'client/gtk/resource.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/resource.c'; fi` client/gtk/pioneers-resource-view.o: client/gtk/resource-view.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-resource-view.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-resource-view.Tpo -c -o client/gtk/pioneers-resource-view.o `test -f 'client/gtk/resource-view.c' || echo '$(srcdir)/'`client/gtk/resource-view.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-resource-view.Tpo client/gtk/$(DEPDIR)/pioneers-resource-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/resource-view.c' object='client/gtk/pioneers-resource-view.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-resource-view.o `test -f 'client/gtk/resource-view.c' || echo '$(srcdir)/'`client/gtk/resource-view.c client/gtk/pioneers-resource-view.obj: client/gtk/resource-view.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-resource-view.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-resource-view.Tpo -c -o client/gtk/pioneers-resource-view.obj `if test -f 'client/gtk/resource-view.c'; then $(CYGPATH_W) 'client/gtk/resource-view.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/resource-view.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-resource-view.Tpo client/gtk/$(DEPDIR)/pioneers-resource-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/resource-view.c' object='client/gtk/pioneers-resource-view.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-resource-view.obj `if test -f 'client/gtk/resource-view.c'; then $(CYGPATH_W) 'client/gtk/resource-view.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/resource-view.c'; fi` client/gtk/pioneers-resource-table.o: client/gtk/resource-table.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-resource-table.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-resource-table.Tpo -c -o client/gtk/pioneers-resource-table.o `test -f 'client/gtk/resource-table.c' || echo '$(srcdir)/'`client/gtk/resource-table.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-resource-table.Tpo client/gtk/$(DEPDIR)/pioneers-resource-table.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/resource-table.c' object='client/gtk/pioneers-resource-table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-resource-table.o `test -f 'client/gtk/resource-table.c' || echo '$(srcdir)/'`client/gtk/resource-table.c client/gtk/pioneers-resource-table.obj: client/gtk/resource-table.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-resource-table.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-resource-table.Tpo -c -o client/gtk/pioneers-resource-table.obj `if test -f 'client/gtk/resource-table.c'; then $(CYGPATH_W) 'client/gtk/resource-table.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/resource-table.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-resource-table.Tpo client/gtk/$(DEPDIR)/pioneers-resource-table.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/resource-table.c' object='client/gtk/pioneers-resource-table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-resource-table.obj `if test -f 'client/gtk/resource-table.c'; then $(CYGPATH_W) 'client/gtk/resource-table.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/resource-table.c'; fi` client/gtk/pioneers-settingscreen.o: client/gtk/settingscreen.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-settingscreen.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-settingscreen.Tpo -c -o client/gtk/pioneers-settingscreen.o `test -f 'client/gtk/settingscreen.c' || echo '$(srcdir)/'`client/gtk/settingscreen.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-settingscreen.Tpo client/gtk/$(DEPDIR)/pioneers-settingscreen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/settingscreen.c' object='client/gtk/pioneers-settingscreen.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-settingscreen.o `test -f 'client/gtk/settingscreen.c' || echo '$(srcdir)/'`client/gtk/settingscreen.c client/gtk/pioneers-settingscreen.obj: client/gtk/settingscreen.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-settingscreen.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-settingscreen.Tpo -c -o client/gtk/pioneers-settingscreen.obj `if test -f 'client/gtk/settingscreen.c'; then $(CYGPATH_W) 'client/gtk/settingscreen.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/settingscreen.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-settingscreen.Tpo client/gtk/$(DEPDIR)/pioneers-settingscreen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/settingscreen.c' object='client/gtk/pioneers-settingscreen.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-settingscreen.obj `if test -f 'client/gtk/settingscreen.c'; then $(CYGPATH_W) 'client/gtk/settingscreen.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/settingscreen.c'; fi` client/gtk/pioneers-state.o: client/gtk/state.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-state.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-state.Tpo -c -o client/gtk/pioneers-state.o `test -f 'client/gtk/state.c' || echo '$(srcdir)/'`client/gtk/state.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-state.Tpo client/gtk/$(DEPDIR)/pioneers-state.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/state.c' object='client/gtk/pioneers-state.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-state.o `test -f 'client/gtk/state.c' || echo '$(srcdir)/'`client/gtk/state.c client/gtk/pioneers-state.obj: client/gtk/state.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-state.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-state.Tpo -c -o client/gtk/pioneers-state.obj `if test -f 'client/gtk/state.c'; then $(CYGPATH_W) 'client/gtk/state.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/state.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-state.Tpo client/gtk/$(DEPDIR)/pioneers-state.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/state.c' object='client/gtk/pioneers-state.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-state.obj `if test -f 'client/gtk/state.c'; then $(CYGPATH_W) 'client/gtk/state.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/state.c'; fi` client/gtk/pioneers-trade.o: client/gtk/trade.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-trade.o -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-trade.Tpo -c -o client/gtk/pioneers-trade.o `test -f 'client/gtk/trade.c' || echo '$(srcdir)/'`client/gtk/trade.c @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-trade.Tpo client/gtk/$(DEPDIR)/pioneers-trade.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/trade.c' object='client/gtk/pioneers-trade.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-trade.o `test -f 'client/gtk/trade.c' || echo '$(srcdir)/'`client/gtk/trade.c client/gtk/pioneers-trade.obj: client/gtk/trade.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/gtk/pioneers-trade.obj -MD -MP -MF client/gtk/$(DEPDIR)/pioneers-trade.Tpo -c -o client/gtk/pioneers-trade.obj `if test -f 'client/gtk/trade.c'; then $(CYGPATH_W) 'client/gtk/trade.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/trade.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/gtk/$(DEPDIR)/pioneers-trade.Tpo client/gtk/$(DEPDIR)/pioneers-trade.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/gtk/trade.c' object='client/gtk/pioneers-trade.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/gtk/pioneers-trade.obj `if test -f 'client/gtk/trade.c'; then $(CYGPATH_W) 'client/gtk/trade.c'; else $(CYGPATH_W) '$(srcdir)/client/gtk/trade.c'; fi` editor/gtk/pioneers_editor-editor.o: editor/gtk/editor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-editor.o -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-editor.Tpo -c -o editor/gtk/pioneers_editor-editor.o `test -f 'editor/gtk/editor.c' || echo '$(srcdir)/'`editor/gtk/editor.c @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-editor.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/editor.c' object='editor/gtk/pioneers_editor-editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-editor.o `test -f 'editor/gtk/editor.c' || echo '$(srcdir)/'`editor/gtk/editor.c editor/gtk/pioneers_editor-editor.obj: editor/gtk/editor.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-editor.obj -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-editor.Tpo -c -o editor/gtk/pioneers_editor-editor.obj `if test -f 'editor/gtk/editor.c'; then $(CYGPATH_W) 'editor/gtk/editor.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/editor.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-editor.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/editor.c' object='editor/gtk/pioneers_editor-editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-editor.obj `if test -f 'editor/gtk/editor.c'; then $(CYGPATH_W) 'editor/gtk/editor.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/editor.c'; fi` editor/gtk/pioneers_editor-game-devcards.o: editor/gtk/game-devcards.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-game-devcards.o -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Tpo -c -o editor/gtk/pioneers_editor-game-devcards.o `test -f 'editor/gtk/game-devcards.c' || echo '$(srcdir)/'`editor/gtk/game-devcards.c @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/game-devcards.c' object='editor/gtk/pioneers_editor-game-devcards.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-game-devcards.o `test -f 'editor/gtk/game-devcards.c' || echo '$(srcdir)/'`editor/gtk/game-devcards.c editor/gtk/pioneers_editor-game-devcards.obj: editor/gtk/game-devcards.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-game-devcards.obj -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Tpo -c -o editor/gtk/pioneers_editor-game-devcards.obj `if test -f 'editor/gtk/game-devcards.c'; then $(CYGPATH_W) 'editor/gtk/game-devcards.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/game-devcards.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-game-devcards.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/game-devcards.c' object='editor/gtk/pioneers_editor-game-devcards.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-game-devcards.obj `if test -f 'editor/gtk/game-devcards.c'; then $(CYGPATH_W) 'editor/gtk/game-devcards.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/game-devcards.c'; fi` editor/gtk/pioneers_editor-game-buildings.o: editor/gtk/game-buildings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-game-buildings.o -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Tpo -c -o editor/gtk/pioneers_editor-game-buildings.o `test -f 'editor/gtk/game-buildings.c' || echo '$(srcdir)/'`editor/gtk/game-buildings.c @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/game-buildings.c' object='editor/gtk/pioneers_editor-game-buildings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-game-buildings.o `test -f 'editor/gtk/game-buildings.c' || echo '$(srcdir)/'`editor/gtk/game-buildings.c editor/gtk/pioneers_editor-game-buildings.obj: editor/gtk/game-buildings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-game-buildings.obj -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Tpo -c -o editor/gtk/pioneers_editor-game-buildings.obj `if test -f 'editor/gtk/game-buildings.c'; then $(CYGPATH_W) 'editor/gtk/game-buildings.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/game-buildings.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-game-buildings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/game-buildings.c' object='editor/gtk/pioneers_editor-game-buildings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-game-buildings.obj `if test -f 'editor/gtk/game-buildings.c'; then $(CYGPATH_W) 'editor/gtk/game-buildings.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/game-buildings.c'; fi` editor/gtk/pioneers_editor-game-resources.o: editor/gtk/game-resources.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-game-resources.o -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Tpo -c -o editor/gtk/pioneers_editor-game-resources.o `test -f 'editor/gtk/game-resources.c' || echo '$(srcdir)/'`editor/gtk/game-resources.c @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/game-resources.c' object='editor/gtk/pioneers_editor-game-resources.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-game-resources.o `test -f 'editor/gtk/game-resources.c' || echo '$(srcdir)/'`editor/gtk/game-resources.c editor/gtk/pioneers_editor-game-resources.obj: editor/gtk/game-resources.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT editor/gtk/pioneers_editor-game-resources.obj -MD -MP -MF editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Tpo -c -o editor/gtk/pioneers_editor-game-resources.obj `if test -f 'editor/gtk/game-resources.c'; then $(CYGPATH_W) 'editor/gtk/game-resources.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/game-resources.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Tpo editor/gtk/$(DEPDIR)/pioneers_editor-game-resources.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='editor/gtk/game-resources.c' object='editor/gtk/pioneers_editor-game-resources.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_editor_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o editor/gtk/pioneers_editor-game-resources.obj `if test -f 'editor/gtk/game-resources.c'; then $(CYGPATH_W) 'editor/gtk/game-resources.c'; else $(CYGPATH_W) '$(srcdir)/editor/gtk/game-resources.c'; fi` meta-server/pioneers_meta_server-main.o: meta-server/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_meta_server_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT meta-server/pioneers_meta_server-main.o -MD -MP -MF meta-server/$(DEPDIR)/pioneers_meta_server-main.Tpo -c -o meta-server/pioneers_meta_server-main.o `test -f 'meta-server/main.c' || echo '$(srcdir)/'`meta-server/main.c @am__fastdepCC_TRUE@ $(am__mv) meta-server/$(DEPDIR)/pioneers_meta_server-main.Tpo meta-server/$(DEPDIR)/pioneers_meta_server-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='meta-server/main.c' object='meta-server/pioneers_meta_server-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_meta_server_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o meta-server/pioneers_meta_server-main.o `test -f 'meta-server/main.c' || echo '$(srcdir)/'`meta-server/main.c meta-server/pioneers_meta_server-main.obj: meta-server/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_meta_server_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT meta-server/pioneers_meta_server-main.obj -MD -MP -MF meta-server/$(DEPDIR)/pioneers_meta_server-main.Tpo -c -o meta-server/pioneers_meta_server-main.obj `if test -f 'meta-server/main.c'; then $(CYGPATH_W) 'meta-server/main.c'; else $(CYGPATH_W) '$(srcdir)/meta-server/main.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) meta-server/$(DEPDIR)/pioneers_meta_server-main.Tpo meta-server/$(DEPDIR)/pioneers_meta_server-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='meta-server/main.c' object='meta-server/pioneers_meta_server-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_meta_server_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o meta-server/pioneers_meta_server-main.obj `if test -f 'meta-server/main.c'; then $(CYGPATH_W) 'meta-server/main.c'; else $(CYGPATH_W) '$(srcdir)/meta-server/main.c'; fi` server/pioneers_server_console-main.o: server/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/pioneers_server_console-main.o -MD -MP -MF server/$(DEPDIR)/pioneers_server_console-main.Tpo -c -o server/pioneers_server_console-main.o `test -f 'server/main.c' || echo '$(srcdir)/'`server/main.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/pioneers_server_console-main.Tpo server/$(DEPDIR)/pioneers_server_console-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/main.c' object='server/pioneers_server_console-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/pioneers_server_console-main.o `test -f 'server/main.c' || echo '$(srcdir)/'`server/main.c server/pioneers_server_console-main.obj: server/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/pioneers_server_console-main.obj -MD -MP -MF server/$(DEPDIR)/pioneers_server_console-main.Tpo -c -o server/pioneers_server_console-main.obj `if test -f 'server/main.c'; then $(CYGPATH_W) 'server/main.c'; else $(CYGPATH_W) '$(srcdir)/server/main.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/pioneers_server_console-main.Tpo server/$(DEPDIR)/pioneers_server_console-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/main.c' object='server/pioneers_server_console-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/pioneers_server_console-main.obj `if test -f 'server/main.c'; then $(CYGPATH_W) 'server/main.c'; else $(CYGPATH_W) '$(srcdir)/server/main.c'; fi` server/pioneers_server_console-glib-driver.o: server/glib-driver.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/pioneers_server_console-glib-driver.o -MD -MP -MF server/$(DEPDIR)/pioneers_server_console-glib-driver.Tpo -c -o server/pioneers_server_console-glib-driver.o `test -f 'server/glib-driver.c' || echo '$(srcdir)/'`server/glib-driver.c @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/pioneers_server_console-glib-driver.Tpo server/$(DEPDIR)/pioneers_server_console-glib-driver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/glib-driver.c' object='server/pioneers_server_console-glib-driver.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/pioneers_server_console-glib-driver.o `test -f 'server/glib-driver.c' || echo '$(srcdir)/'`server/glib-driver.c server/pioneers_server_console-glib-driver.obj: server/glib-driver.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/pioneers_server_console-glib-driver.obj -MD -MP -MF server/$(DEPDIR)/pioneers_server_console-glib-driver.Tpo -c -o server/pioneers_server_console-glib-driver.obj `if test -f 'server/glib-driver.c'; then $(CYGPATH_W) 'server/glib-driver.c'; else $(CYGPATH_W) '$(srcdir)/server/glib-driver.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/$(DEPDIR)/pioneers_server_console-glib-driver.Tpo server/$(DEPDIR)/pioneers_server_console-glib-driver.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/glib-driver.c' object='server/pioneers_server_console-glib-driver.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_console_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/pioneers_server_console-glib-driver.obj `if test -f 'server/glib-driver.c'; then $(CYGPATH_W) 'server/glib-driver.c'; else $(CYGPATH_W) '$(srcdir)/server/glib-driver.c'; fi` server/gtk/pioneers_server_gtk-main.o: server/gtk/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_gtk_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/gtk/pioneers_server_gtk-main.o -MD -MP -MF server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Tpo -c -o server/gtk/pioneers_server_gtk-main.o `test -f 'server/gtk/main.c' || echo '$(srcdir)/'`server/gtk/main.c @am__fastdepCC_TRUE@ $(am__mv) server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Tpo server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/gtk/main.c' object='server/gtk/pioneers_server_gtk-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_gtk_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/gtk/pioneers_server_gtk-main.o `test -f 'server/gtk/main.c' || echo '$(srcdir)/'`server/gtk/main.c server/gtk/pioneers_server_gtk-main.obj: server/gtk/main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_gtk_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server/gtk/pioneers_server_gtk-main.obj -MD -MP -MF server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Tpo -c -o server/gtk/pioneers_server_gtk-main.obj `if test -f 'server/gtk/main.c'; then $(CYGPATH_W) 'server/gtk/main.c'; else $(CYGPATH_W) '$(srcdir)/server/gtk/main.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Tpo server/gtk/$(DEPDIR)/pioneers_server_gtk-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='server/gtk/main.c' object='server/gtk/pioneers_server_gtk-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneers_server_gtk_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server/gtk/pioneers_server_gtk-main.obj `if test -f 'server/gtk/main.c'; then $(CYGPATH_W) 'server/gtk/main.c'; else $(CYGPATH_W) '$(srcdir)/server/gtk/main.c'; fi` client/ai/pioneersai-ai.o: client/ai/ai.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/ai/pioneersai-ai.o -MD -MP -MF client/ai/$(DEPDIR)/pioneersai-ai.Tpo -c -o client/ai/pioneersai-ai.o `test -f 'client/ai/ai.c' || echo '$(srcdir)/'`client/ai/ai.c @am__fastdepCC_TRUE@ $(am__mv) client/ai/$(DEPDIR)/pioneersai-ai.Tpo client/ai/$(DEPDIR)/pioneersai-ai.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/ai/ai.c' object='client/ai/pioneersai-ai.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/ai/pioneersai-ai.o `test -f 'client/ai/ai.c' || echo '$(srcdir)/'`client/ai/ai.c client/ai/pioneersai-ai.obj: client/ai/ai.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/ai/pioneersai-ai.obj -MD -MP -MF client/ai/$(DEPDIR)/pioneersai-ai.Tpo -c -o client/ai/pioneersai-ai.obj `if test -f 'client/ai/ai.c'; then $(CYGPATH_W) 'client/ai/ai.c'; else $(CYGPATH_W) '$(srcdir)/client/ai/ai.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/ai/$(DEPDIR)/pioneersai-ai.Tpo client/ai/$(DEPDIR)/pioneersai-ai.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/ai/ai.c' object='client/ai/pioneersai-ai.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/ai/pioneersai-ai.obj `if test -f 'client/ai/ai.c'; then $(CYGPATH_W) 'client/ai/ai.c'; else $(CYGPATH_W) '$(srcdir)/client/ai/ai.c'; fi` client/ai/pioneersai-greedy.o: client/ai/greedy.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/ai/pioneersai-greedy.o -MD -MP -MF client/ai/$(DEPDIR)/pioneersai-greedy.Tpo -c -o client/ai/pioneersai-greedy.o `test -f 'client/ai/greedy.c' || echo '$(srcdir)/'`client/ai/greedy.c @am__fastdepCC_TRUE@ $(am__mv) client/ai/$(DEPDIR)/pioneersai-greedy.Tpo client/ai/$(DEPDIR)/pioneersai-greedy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/ai/greedy.c' object='client/ai/pioneersai-greedy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/ai/pioneersai-greedy.o `test -f 'client/ai/greedy.c' || echo '$(srcdir)/'`client/ai/greedy.c client/ai/pioneersai-greedy.obj: client/ai/greedy.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/ai/pioneersai-greedy.obj -MD -MP -MF client/ai/$(DEPDIR)/pioneersai-greedy.Tpo -c -o client/ai/pioneersai-greedy.obj `if test -f 'client/ai/greedy.c'; then $(CYGPATH_W) 'client/ai/greedy.c'; else $(CYGPATH_W) '$(srcdir)/client/ai/greedy.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/ai/$(DEPDIR)/pioneersai-greedy.Tpo client/ai/$(DEPDIR)/pioneersai-greedy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/ai/greedy.c' object='client/ai/pioneersai-greedy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/ai/pioneersai-greedy.obj `if test -f 'client/ai/greedy.c'; then $(CYGPATH_W) 'client/ai/greedy.c'; else $(CYGPATH_W) '$(srcdir)/client/ai/greedy.c'; fi` client/ai/pioneersai-lobbybot.o: client/ai/lobbybot.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/ai/pioneersai-lobbybot.o -MD -MP -MF client/ai/$(DEPDIR)/pioneersai-lobbybot.Tpo -c -o client/ai/pioneersai-lobbybot.o `test -f 'client/ai/lobbybot.c' || echo '$(srcdir)/'`client/ai/lobbybot.c @am__fastdepCC_TRUE@ $(am__mv) client/ai/$(DEPDIR)/pioneersai-lobbybot.Tpo client/ai/$(DEPDIR)/pioneersai-lobbybot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/ai/lobbybot.c' object='client/ai/pioneersai-lobbybot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/ai/pioneersai-lobbybot.o `test -f 'client/ai/lobbybot.c' || echo '$(srcdir)/'`client/ai/lobbybot.c client/ai/pioneersai-lobbybot.obj: client/ai/lobbybot.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT client/ai/pioneersai-lobbybot.obj -MD -MP -MF client/ai/$(DEPDIR)/pioneersai-lobbybot.Tpo -c -o client/ai/pioneersai-lobbybot.obj `if test -f 'client/ai/lobbybot.c'; then $(CYGPATH_W) 'client/ai/lobbybot.c'; else $(CYGPATH_W) '$(srcdir)/client/ai/lobbybot.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) client/ai/$(DEPDIR)/pioneersai-lobbybot.Tpo client/ai/$(DEPDIR)/pioneersai-lobbybot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='client/ai/lobbybot.c' object='client/ai/pioneersai-lobbybot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pioneersai_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o client/ai/pioneersai-lobbybot.obj `if test -f 'client/ai/lobbybot.c'; then $(CYGPATH_W) 'client/ai/lobbybot.c'; else $(CYGPATH_W) '$(srcdir)/client/ai/lobbybot.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-man6: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man6dir)" || $(MKDIR_P) "$(DESTDIR)$(man6dir)" @list=''; test -n "$(man6dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.6[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man6dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man6dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man6dir)" || exit $$?; }; \ done; } uninstall-man6: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man6dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.6[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man6dir)'; $(am__uninstall_files_from_dir) install-ccflickrthemeDATA: $(ccflickrtheme_DATA) @$(NORMAL_INSTALL) test -z "$(ccflickrthemedir)" || $(MKDIR_P) "$(DESTDIR)$(ccflickrthemedir)" @list='$(ccflickrtheme_DATA)'; test -n "$(ccflickrthemedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(ccflickrthemedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(ccflickrthemedir)" || exit $$?; \ done uninstall-ccflickrthemeDATA: @$(NORMAL_UNINSTALL) @list='$(ccflickrtheme_DATA)'; test -n "$(ccflickrthemedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(ccflickrthemedir)'; $(am__uninstall_files_from_dir) install-classicthemeDATA: $(classictheme_DATA) @$(NORMAL_INSTALL) test -z "$(classicthemedir)" || $(MKDIR_P) "$(DESTDIR)$(classicthemedir)" @list='$(classictheme_DATA)'; test -n "$(classicthemedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(classicthemedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(classicthemedir)" || exit $$?; \ done uninstall-classicthemeDATA: @$(NORMAL_UNINSTALL) @list='$(classictheme_DATA)'; test -n "$(classicthemedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(classicthemedir)'; $(am__uninstall_files_from_dir) install-configDATA: $(config_DATA) @$(NORMAL_INSTALL) test -z "$(configdir)" || $(MKDIR_P) "$(DESTDIR)$(configdir)" @list='$(config_DATA)'; test -n "$(configdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(configdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(configdir)" || exit $$?; \ done uninstall-configDATA: @$(NORMAL_UNINSTALL) @list='$(config_DATA)'; test -n "$(configdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(configdir)'; $(am__uninstall_files_from_dir) install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)" @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) install-freecivthemeDATA: $(freecivtheme_DATA) @$(NORMAL_INSTALL) test -z "$(freecivthemedir)" || $(MKDIR_P) "$(DESTDIR)$(freecivthemedir)" @list='$(freecivtheme_DATA)'; test -n "$(freecivthemedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(freecivthemedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(freecivthemedir)" || exit $$?; \ done uninstall-freecivthemeDATA: @$(NORMAL_UNINSTALL) @list='$(freecivtheme_DATA)'; test -n "$(freecivthemedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(freecivthemedir)'; $(am__uninstall_files_from_dir) install-icelandthemeDATA: $(icelandtheme_DATA) @$(NORMAL_INSTALL) test -z "$(icelandthemedir)" || $(MKDIR_P) "$(DESTDIR)$(icelandthemedir)" @list='$(icelandtheme_DATA)'; test -n "$(icelandthemedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icelandthemedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icelandthemedir)" || exit $$?; \ done uninstall-icelandthemeDATA: @$(NORMAL_UNINSTALL) @list='$(icelandtheme_DATA)'; test -n "$(icelandthemedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icelandthemedir)'; $(am__uninstall_files_from_dir) install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)" @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) install-pixmapDATA: $(pixmap_DATA) @$(NORMAL_INSTALL) test -z "$(pixmapdir)" || $(MKDIR_P) "$(DESTDIR)$(pixmapdir)" @list='$(pixmap_DATA)'; test -n "$(pixmapdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pixmapdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pixmapdir)" || exit $$?; \ done uninstall-pixmapDATA: @$(NORMAL_UNINSTALL) @list='$(pixmap_DATA)'; test -n "$(pixmapdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pixmapdir)'; $(am__uninstall_files_from_dir) install-tinythemeDATA: $(tinytheme_DATA) @$(NORMAL_INSTALL) test -z "$(tinythemedir)" || $(MKDIR_P) "$(DESTDIR)$(tinythemedir)" @list='$(tinytheme_DATA)'; test -n "$(tinythemedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tinythemedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(tinythemedir)" || exit $$?; \ done uninstall-tinythemeDATA: @$(NORMAL_UNINSTALL) @list='$(tinytheme_DATA)'; test -n "$(tinythemedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(tinythemedir)'; $(am__uninstall_files_from_dir) install-wesnoththemeDATA: $(wesnoththeme_DATA) @$(NORMAL_INSTALL) test -z "$(wesnoththemedir)" || $(MKDIR_P) "$(DESTDIR)$(wesnoththemedir)" @list='$(wesnoththeme_DATA)'; test -n "$(wesnoththemedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(wesnoththemedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(wesnoththemedir)" || exit $$?; \ done uninstall-wesnoththemeDATA: @$(NORMAL_UNINSTALL) @list='$(wesnoththeme_DATA)'; test -n "$(wesnoththemedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(wesnoththemedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man6dir)" "$(DESTDIR)$(ccflickrthemedir)" "$(DESTDIR)$(classicthemedir)" "$(DESTDIR)$(configdir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(freecivthemedir)" "$(DESTDIR)$(icelandthemedir)" "$(DESTDIR)$(icondir)" "$(DESTDIR)$(pixmapdir)" "$(DESTDIR)$(tinythemedir)" "$(DESTDIR)$(wesnoththemedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f client/ai/$(DEPDIR)/$(am__dirstamp) -rm -f client/ai/$(am__dirstamp) -rm -f client/common/$(DEPDIR)/$(am__dirstamp) -rm -f client/common/$(am__dirstamp) -rm -f client/gtk/$(DEPDIR)/$(am__dirstamp) -rm -f client/gtk/$(am__dirstamp) -rm -f common/$(DEPDIR)/$(am__dirstamp) -rm -f common/$(am__dirstamp) -rm -f common/gtk/$(DEPDIR)/$(am__dirstamp) -rm -f common/gtk/$(am__dirstamp) -rm -f editor/gtk/$(DEPDIR)/$(am__dirstamp) -rm -f editor/gtk/$(am__dirstamp) -rm -f meta-server/$(DEPDIR)/$(am__dirstamp) -rm -f meta-server/$(am__dirstamp) -rm -f server/$(DEPDIR)/$(am__dirstamp) -rm -f server/$(am__dirstamp) -rm -f server/gtk/$(DEPDIR)/$(am__dirstamp) -rm -f server/gtk/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) @IS_MINGW_PORT_FALSE@install-exec-hook: clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf client/ai/$(DEPDIR) client/common/$(DEPDIR) client/gtk/$(DEPDIR) common/$(DEPDIR) common/gtk/$(DEPDIR) editor/gtk/$(DEPDIR) meta-server/$(DEPDIR) server/$(DEPDIR) server/gtk/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-ccflickrthemeDATA install-classicthemeDATA \ install-configDATA install-desktopDATA \ install-freecivthemeDATA install-icelandthemeDATA \ install-iconDATA install-man install-pixmapDATA \ install-tinythemeDATA install-wesnoththemeDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man6 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf client/ai/$(DEPDIR) client/common/$(DEPDIR) client/gtk/$(DEPDIR) common/$(DEPDIR) common/gtk/$(DEPDIR) editor/gtk/$(DEPDIR) meta-server/$(DEPDIR) server/$(DEPDIR) server/gtk/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-ccflickrthemeDATA \ uninstall-classicthemeDATA uninstall-configDATA \ uninstall-desktopDATA uninstall-freecivthemeDATA \ uninstall-icelandthemeDATA uninstall-iconDATA uninstall-man \ uninstall-pixmapDATA uninstall-tinythemeDATA \ uninstall-wesnoththemeDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man6 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-data-am \ install-exec-am install-strip tags-recursive uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstPROGRAMS ctags ctags-recursive dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-local distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS \ install-ccflickrthemeDATA install-classicthemeDATA \ install-configDATA install-data install-data-am \ install-data-hook install-desktopDATA install-dvi \ install-dvi-am install-exec install-exec-am install-exec-hook \ install-freecivthemeDATA install-html install-html-am \ install-icelandthemeDATA install-iconDATA install-info \ install-info-am install-man install-man6 install-pdf \ install-pdf-am install-pixmapDATA install-ps install-ps-am \ install-strip install-tinythemeDATA install-wesnoththemeDATA \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-ccflickrthemeDATA \ uninstall-classicthemeDATA uninstall-configDATA \ uninstall-desktopDATA uninstall-freecivthemeDATA \ uninstall-hook uninstall-icelandthemeDATA uninstall-iconDATA \ uninstall-man uninstall-man6 uninstall-pixmapDATA \ uninstall-tinythemeDATA uninstall-wesnoththemeDATA # Use GOB to create new classes %.gob.stamp %.c %.h %-private.h: %.gob @mkdir_p@ $(dir $@) $(GOB2) --output-dir $(dir $@) $< touch $@ # creating icons %.png: %.svg @mkdir_p@ $(dir $@) $(svg_renderer_path) $(svg_renderer_width)48$(svg_renderer_height)48 $< $(svg_renderer_output) $@ # Only maintainers need to do this. It is distributed in the tarball @CREATE_WINDOWS_ICON_TRUE@%.ico: %.svg @CREATE_WINDOWS_ICON_TRUE@ @mkdir_p@ $(dir $@) @CREATE_WINDOWS_ICON_TRUE@ $(svg_renderer_path) $(svg_renderer_width)16$(svg_renderer_height)16 $< $(svg_renderer_output) $@-p16.png @CREATE_WINDOWS_ICON_TRUE@ $(pngtopnm) $@-p16.png > $@-p16.pnm @CREATE_WINDOWS_ICON_TRUE@ pngtopnm -alpha $@-p16.png > $@-p16a.pnm @CREATE_WINDOWS_ICON_TRUE@ pnmcolormap 256 $@-p16.pnm > $@-p16colormap.pnm @CREATE_WINDOWS_ICON_TRUE@ pnmremap -mapfile=$@-p16colormap.pnm $@-p16.pnm > $@-p16256.pnm @CREATE_WINDOWS_ICON_TRUE@ $(svg_renderer_path) $(svg_renderer_width)32$(svg_renderer_height)32 $< $(svg_renderer_output) $@-p32.png @CREATE_WINDOWS_ICON_TRUE@ pngtopnm $@-p32.png > $@-p32.pnm @CREATE_WINDOWS_ICON_TRUE@ pngtopnm -alpha $@-p32.png > $@-p32a.pnm @CREATE_WINDOWS_ICON_TRUE@ pnmcolormap 256 $@-p32.pnm > $@-p32colormap.pnm @CREATE_WINDOWS_ICON_TRUE@ pnmremap -mapfile=$@-p32colormap.pnm $@-p32.pnm > $@-p32256.pnm @CREATE_WINDOWS_ICON_TRUE@ $(svg_renderer_path) $(svg_renderer_width)48$(svg_renderer_height)48 $< $(svg_renderer_output) $@-p48.png @CREATE_WINDOWS_ICON_TRUE@ pngtopnm $@-p48.png > $@-p48.pnm @CREATE_WINDOWS_ICON_TRUE@ pngtopnm -alpha $@-p48.png > $@-p48a.pnm @CREATE_WINDOWS_ICON_TRUE@ pnmcolormap 256 $@-p48.pnm > $@-p48colormap.pnm @CREATE_WINDOWS_ICON_TRUE@ pnmremap -mapfile=$@-p48colormap.pnm $@-p48.pnm > $@-p48256.pnm @CREATE_WINDOWS_ICON_TRUE@ ppmtowinicon -andpgms $@-p48256.pnm $@-p48a.pnm $@-p32256.pnm $@-p32a.pnm $@-p16256.pnm $@-p16a.pnm > $@ @CREATE_WINDOWS_ICON_TRUE@ rm $@-p16.png @CREATE_WINDOWS_ICON_TRUE@ rm $@-p16.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p16a.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p16colormap.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p16256.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p32.png @CREATE_WINDOWS_ICON_TRUE@ rm $@-p32.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p32a.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p32colormap.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p32256.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p48.png @CREATE_WINDOWS_ICON_TRUE@ rm $@-p48.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p48a.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p48colormap.pnm @CREATE_WINDOWS_ICON_TRUE@ rm $@-p48256.pnm @CREATE_WINDOWS_ICON_FALSE@%.ico: %.svg @CREATE_WINDOWS_ICON_FALSE@ @$(ECHO) Microsoft Windows icons cannot be generated @CREATE_WINDOWS_ICON_FALSE@ @$(ECHO) Run configure again with --enable-maintainer-mode @CREATE_WINDOWS_ICON_FALSE@ @exit 1 # Will be used in Windows builds @USE_WINDOWS_ICON_TRUE@%.res: %.rc %.ico @USE_WINDOWS_ICON_TRUE@ @mkdir_p@ $(dir $@) @USE_WINDOWS_ICON_TRUE@ windres -I$(top_srcdir) -O coff -o $@ $< @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@client/gtk/data/splash.png: client/gtk/data/splash.svg @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ @mkdir_p@ $(dir $@) @BUILD_CLIENT_TRUE@@HAVE_GNOME_TRUE@ $(svg_renderer_path) $(svg_renderer_width)400$(svg_renderer_height)400 $< $(svg_renderer_output) $@ @IS_MINGW_PORT_TRUE@install-exec-hook: install-MinGW @IS_MINGW_PORT_TRUE@install-MinGW: @IS_MINGW_PORT_TRUE@ cp /mingw/bin/freetype6.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/intl.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libatk-1.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libcairo-2.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libcroco-0.6-3.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libexpat-1.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libfontconfig-1.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgdk_pixbuf-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgdk-win32-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgio-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libglib-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgmodule-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgobject-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgthread-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libgtk-win32-2.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libpango-1.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libpangocairo-1.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libpangoft2-1.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libpangowin32-1.0-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libpng14-14.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/librsvg-2-2.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libssp-0.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/libxml2-2.dll /usr/local @IS_MINGW_PORT_TRUE@ cp /mingw/bin/zlib1.dll /usr/local @IS_MINGW_PORT_TRUE@ mkdir -p /usr/local/lib/gdk-pixbuf-2.0/2.10.0 @IS_MINGW_PORT_TRUE@ cp $(srcdir)/MinGW/loaders.cache /usr/local/lib/gdk-pixbuf-2.0/2.10.0 common/authors.h: AUTHORS @mkdir_p@ common printf '#define AUTHORLIST ' > $@ $(SED) -e's/ <.*//; s/$$/", \\/; s/^/"/; /^"[[:space:]]*", \\$$/d' $< >> $@ printf 'NULL\n' >> $@ # This target is not called common/version.h (although it builds that file), # because it must be PHONY, but should only be rebuilt once. build_version: @mkdir_p@ common printf '#define FULL_VERSION "$(VERSION)' > common/version.new if svn info > /dev/null 2>&1; then \ svn info | \ $(AWK) '$$1 == "Revision:" { printf ".r%s", $$2 }' \ >> common/version.new ;\ if svn status | $(GREP) -vq ^\? ; then \ printf '.M' >> common/version.new ;\ fi ;\ fi printf '"\n' >> common/version.new if diff common/version.h common/version.new > /dev/null 2>&1; then \ rm common/version.new ;\ else \ mv common/version.new common/version.h ;\ fi # always try to rebuild version.h .PHONY: build_version @INTLTOOL_DESKTOP_RULE@ distclean-local: rm -f *~ rm -rf autom4te.cache # Reformat the code. reindent: find . -name '*.[ch]' -exec indent -kr -i8 '{}' ';' find . -name '*.[ch]' -exec indent -kr -i8 '{}' ';' restorepo: svn revert po/*.po po/pioneers.pot # Remove ALL generated files pristine: maintainer-clean svn status --no-ignore | awk '$$1=="I" { print substr($$0, 9, 255) }' | tr '\n' '\0' | xargs -0 rm %.48x48_apps.png: %.svg @mkdir_p@ $(dir $@) $(svg_renderer_path) $(svg_renderer_width)48$(svg_renderer_height)48 $< $(svg_renderer_output) $@ install-icons: @mkdir_p@ $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps @mkdir_p@ $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps for icon in $(icons); do \ ICONNAME=`echo $$icon | $(AWK) '{ c = split($$0, a, "/"); print substr(a[c], 1, index(a[c], ".") - 1) }'`; \ INPUTNAME=`echo $$icon | $(AWK) '{ gsub(".svg", ""); print }'`; \ $(INSTALL_DATA) $(srcdir)/$$INPUTNAME.48x48_apps.png $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/$$ICONNAME.png; \ $(INSTALL_DATA) $(srcdir)/$$INPUTNAME.svg $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps/$$ICONNAME.svg; \ done; uninstall-icons: -for icon in $(icons); do \ ICONNAME=`echo $$icon | $(AWK) '{ c = split($$0, a, "/"); print substr(a[c], 1, index(a[c], ".") - 1) }'`; \ rm -f $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/$$ICONNAME.png; \ rm -f $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps/$$ICONNAME.svg; \ done; install-data-hook: install-icons uninstall-hook: uninstall-icons # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pioneers-14.1/config.h.in0000644000175000017500000001510711760645765012254 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* The name of the Avahi service */ #undef AVAHI_ANNOUNCE_NAME /* The Avahi network protocol value */ #undef AVAHI_NETWORK_PROTOCOL /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* The type of the third argument of getsockopt */ #undef GETSOCKOPT_ARG3 /* The gettext package name */ #undef GETTEXT_PACKAGE /* Define if AVAHI available */ #undef HAVE_AVAHI /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `freeaddrinfo' function. */ #undef HAVE_FREEADDRINFO /* Define to 1 if you have the `gai_strerror' function. */ #undef HAVE_GAI_STRERROR /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Defined when getaddrinfo. gai_strerror and freeaddrinfo are present */ #undef HAVE_GETADDRINFO_ET_AL /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Defined when online help is present */ #undef HAVE_HELP /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Defined if libgnome is present and needed */ #undef HAVE_LIBGNOME /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Defined if libnotify is present */ #undef HAVE_NOTIFY /* Defined if an older version of GTK is available */ #undef HAVE_OLD_GTK /* Defined if an older version of libnotify is available */ #undef HAVE_OLD_NOTIFY /* Define to 1 if you have the rint function. */ #undef HAVE_RINT /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strspn' function. */ #undef HAVE_STRSPN /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_WS2TCPIP_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Protocol version used by the meta server */ #undef META_PROTOCOL_VERSION /* The network protocol value */ #undef NETWORK_PROTOCOL /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The default port for the admin interface */ #undef PIONEERS_DEFAULT_ADMIN_PORT /* The default host for a new game */ #undef PIONEERS_DEFAULT_GAME_HOST /* The default port for a new game */ #undef PIONEERS_DEFAULT_GAME_PORT /* The port for the meta server */ #undef PIONEERS_DEFAULT_META_PORT /* The default meta server */ #undef PIONEERS_DEFAULT_META_SERVER /* Protocol version used by the program */ #undef PROTOCOL_VERSION /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Substitute for socklen_t */ #undef socklen_t /* Define as `fork' if `vfork' does not work. */ #undef vfork pioneers-14.1/pioneers.spec.in0000644000175000017500000001144710655346322013326 00000000000000Name: @PACKAGE_NAME@ Summary: Playable implementation of the Settlers of Catan Version: @VERSION@ Release: 1 Group: Amusements/Games License: GPL Url: http://pio.sourceforge.net/ Packager: The Pioneers developers Source: http://downloads.sourceforge.net/pio/@PACKAGE_TARNAME@-@VERSION@.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: libgnome-devel, scrollkeeper BuildRequires: gtk2-devel >= @GTK_REQUIRED_VERSION@ BuildRequires: glib2-devel >= @GLIB_REQUIRED_VERSION@ Requires(post): scrollkeeper %description Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. This is the client software to play the game. %package ai Summary: Pioneers AI Player Group: Amusements/Games %description ai Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. This package contains a computer player that can take part in Pioneers games. %package server-console Summary: Pioneers Console Server Group: Amusements/Games Requires: pioneers-server-data %description server-console Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. %package server-gtk Summary: Pioneers GTK Server Group: Amusements/Games Requires: pioneers, pioneers-server-data %description server-gtk Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. The server has a user interface in which you can customise the game parameters. Customisation is fairly limited at the moment, but this should change in later versions. Once you are happy with the game parameters, press the Start Server button, and the server will start listening for client connections. %package server-data Summary: Pioneers Data Group: Amusements/Games %description server-data Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. This package contains the data files for a game server. %package meta-server Summary: Pioneers Meta Server Group: Amusements/Games %description meta-server Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. The meta server registers available game servers and offers them to new players. It can also create new servers on client request. %package editor Summary: Pioneers Game Editor Group: Amusements/Games Requires: pioneers, pioneers-server-data %description editor Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. The game editor allows maps and game descriptions to be created and edited graphically. %prep %setup -q %build %configure make %install make install DESTDIR="%buildroot" rm -rf %{buildroot}%{localstatedir}/scrollkeeper/ %find_lang %{name} %clean rm -rf %{buildroot} %files -f %name.lang %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneers.6.gz %{_bindir}/pioneers %{_datadir}/applications/pioneers.desktop %{_datadir}/pixmaps/pioneers.png %{_datadir}/pixmaps/pioneers/* %{_datadir}/games/pioneers/themes/* %{_datadir}/gnome/help/pioneers/C/*.xml %{_datadir}/gnome/help/pioneers/C/images/* %{_datadir}/omf/pioneers/pioneers-C.omf %post scrollkeeper-update -q -o %{_datadir}/omf/pioneers %postun scrollkeeper-update -q %files ai %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneersai.6.gz %{_bindir}/pioneersai %{_datadir}/games/pioneers/computer_names %files server-console %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneers-server-console.6.gz %{_bindir}/pioneers-server-console %files server-gtk %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneers-server-gtk.6.gz %{_bindir}/pioneers-server-gtk %{_datadir}/pixmaps/pioneers-server.png %{_datadir}/applications/pioneers-server.desktop %files server-data %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %{_datadir}/games/pioneers/*.game %files meta-server %defattr(-,root,root) %doc %_mandir/man6/pioneers-meta-server.6.gz %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %{_bindir}/pioneers-meta-server %files editor %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %{_bindir}/pioneers-editor %{_datadir}/pixmaps/pioneers-editor.png %{_datadir}/applications/pioneers-editor.desktop pioneers-14.1/configure0000755000175000017500000207656711760645764012162 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for pioneers 14.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: pio-develop@lists.sourceforge.net about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='pioneers' PACKAGE_TARNAME='pioneers' PACKAGE_VERSION='14.1' PACKAGE_STRING='pioneers 14.1' PACKAGE_BUGREPORT='pio-develop@lists.sourceforge.net' PACKAGE_URL='' ac_unique_file="client" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS IS_MINGW_PORT_FALSE IS_MINGW_PORT_TRUE BUILD_META_SERVER_FALSE BUILD_META_SERVER_TRUE BUILD_SERVER_FALSE BUILD_SERVER_TRUE BUILD_EDITOR_FALSE BUILD_EDITOR_TRUE BUILD_CLIENT_FALSE BUILD_CLIENT_TRUE USE_WINDOWS_ICON_FALSE USE_WINDOWS_ICON_TRUE CREATE_WINDOWS_ICON_FALSE CREATE_WINDOWS_ICON_TRUE pioneers_localedir pioneers_themedir_embed pioneers_themedir pioneers_datadir MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES CATOBJEXT CATALOGS MSGFMT_OPTS GETTEXT_PACKAGE DATADIRNAME ALL_LINGUAS INTLTOOL_PERL GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE AM_DEFAULT_VERBOSITY INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS ADMIN_GTK_SUPPORT_FALSE ADMIN_GTK_SUPPORT_TRUE AVAHI_GLIB_LIBS AVAHI_GLIB_CFLAGS AVAHI_CLIENT_LIBS AVAHI_CLIENT_CFLAGS HAVE_SCROLLKEEPER_FALSE HAVE_SCROLLKEEPER_TRUE HAVE_GNOME_FALSE HAVE_GNOME_TRUE GNOME2_LIBS GNOME2_CFLAGS GTK_OPTIMAL_VERSION_LIBS GTK_OPTIMAL_VERSION_CFLAGS HAVE_GTK2_FALSE HAVE_GTK2_TRUE GTK2_LIBS GTK2_CFLAGS LIBNOTIFY_OPTIMAL_VERSION_LIBS LIBNOTIFY_OPTIMAL_VERSION_CFLAGS LIBNOTIFY_LIBS LIBNOTIFY_CFLAGS GOBJECT2_LIBS GOBJECT2_CFLAGS GLIB2_LIBS GLIB2_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG SCROLLKEEPER_CONFIG SCROLLKEEPER_REQUIRED GTK_DEPRECATION GLIB_DEPRECATION DEBUGGING WARNINGS AM_LDFLAGS AM_CFLAGS pngtopnm svg_renderer_output svg_renderer_height svg_renderer_width svg_renderer_path whitespace_trick GOB2 ECHO CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_shared enable_static with_pic enable_fast_install enable_dependency_tracking with_gnu_ld with_sysroot enable_libtool_lock enable_warnings enable_debug enable_deprecation_checks enable_admin_gtk enable_protocol enable_nls ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GLIB2_CFLAGS GLIB2_LIBS GOBJECT2_CFLAGS GOBJECT2_LIBS LIBNOTIFY_CFLAGS LIBNOTIFY_LIBS LIBNOTIFY_OPTIMAL_VERSION_CFLAGS LIBNOTIFY_OPTIMAL_VERSION_LIBS GTK2_CFLAGS GTK2_LIBS GTK_OPTIMAL_VERSION_CFLAGS GTK_OPTIMAL_VERSION_LIBS GNOME2_CFLAGS GNOME2_LIBS AVAHI_CLIENT_CFLAGS AVAHI_CLIENT_LIBS AVAHI_GLIB_CFLAGS AVAHI_GLIB_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures pioneers 14.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/pioneers] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of pioneers 14.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-libtool-lock avoid locking (might break parallel builds) --enable-warnings Compile with check for compiler warnings (gcc-only). --enable-debug Enable debug information. --enable-deprecation-checks Enable strict deprecation checks. --enable-admin-gtk Turn on (unstable) network administration support. --enable-protocol Specify the network protocol (IPv4/unspecified) --disable-nls do not use Native Language Support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GLIB2_CFLAGS C compiler flags for GLIB2, overriding pkg-config GLIB2_LIBS linker flags for GLIB2, overriding pkg-config GOBJECT2_CFLAGS C compiler flags for GOBJECT2, overriding pkg-config GOBJECT2_LIBS linker flags for GOBJECT2, overriding pkg-config LIBNOTIFY_CFLAGS C compiler flags for LIBNOTIFY, overriding pkg-config LIBNOTIFY_LIBS linker flags for LIBNOTIFY, overriding pkg-config LIBNOTIFY_OPTIMAL_VERSION_CFLAGS C compiler flags for LIBNOTIFY_OPTIMAL_VERSION, overriding pkg-config LIBNOTIFY_OPTIMAL_VERSION_LIBS linker flags for LIBNOTIFY_OPTIMAL_VERSION, overriding pkg-config GTK2_CFLAGS C compiler flags for GTK2, overriding pkg-config GTK2_LIBS linker flags for GTK2, overriding pkg-config GTK_OPTIMAL_VERSION_CFLAGS C compiler flags for GTK_OPTIMAL_VERSION, overriding pkg-config GTK_OPTIMAL_VERSION_LIBS linker flags for GTK_OPTIMAL_VERSION, overriding pkg-config GNOME2_CFLAGS C compiler flags for GNOME2, overriding pkg-config GNOME2_LIBS linker flags for GNOME2, overriding pkg-config AVAHI_CLIENT_CFLAGS C compiler flags for AVAHI_CLIENT, overriding pkg-config AVAHI_CLIENT_LIBS linker flags for AVAHI_CLIENT, overriding pkg-config AVAHI_GLIB_CFLAGS C compiler flags for AVAHI_GLIB, overriding pkg-config AVAHI_GLIB_LIBS linker flags for AVAHI_GLIB, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF pioneers configure 14.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------------------ ## ## Report this to pio-develop@lists.sourceforge.net ## ## ------------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by pioneers $as_me 14.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=pioneers VERSION=14.1 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers config.h" PROTOCOL_VERSION=14 META_PROTOCOL_VERSION=1.3 PIONEERS_DEFAULT_GAME_PORT=5556 PIONEERS_DEFAULT_GAME_HOST=localhost PIONEERS_DEFAULT_ADMIN_PORT=5555 PIONEERS_DEFAULT_META_PORT=5557 PIONEERS_DEFAULT_META_SERVER=pioneers.debian.net GLIB_REQUIRED_VERSION=2.16 GTK_REQUIRED_VERSION=2.20 GTK_OPTIMAL_VERSION=2.24 LIBNOTIFY_REQUIRED_VERSION=0.5.0 LIBNOTIFY_OPTIMAL_VERSION=0.7.4 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Extract the first word of "echo", so it can be a program name with args. set dummy echo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ECHO+:} false; then : $as_echo_n "(cached) " >&6 else case $ECHO in [\\/]* | ?:[\\/]*) ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ECHO=$ac_cv_path_ECHO if test -n "$ECHO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 $as_echo "$ECHO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi if test $USE_MAINTAINER_MODE = yes; then # Extract the first word of "gob2", so it can be a program name with args. set dummy gob2; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GOB2+:} false; then : $as_echo_n "(cached) " >&6 else case $GOB2 in [\\/]* | ?:[\\/]*) ac_cv_path_GOB2="$GOB2" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GOB2="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GOB2=$ac_cv_path_GOB2 if test -n "$GOB2"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GOB2" >&5 $as_echo "$GOB2" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! x$GOB2 = x; then if test ! x2.0.0 = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gob-2 >= 2.0.0" >&5 $as_echo_n "checking for gob-2 >= 2.0.0... " >&6; } g_r_ve=`echo 2.0.0|sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` g_r_ma=`echo 2.0.0|sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` g_r_mi=`echo 2.0.0|sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` g_ve=`$GOB2 --version 2>&1|sed 's/Gob version \([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` g_ma=`$GOB2 --version 2>&1|sed 's/Gob version \([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` g_mi=`$GOB2 --version 2>&1|sed 's/Gob version \([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test $g_ve -eq $g_r_ve; then if test $g_ma -ge $g_r_ma; then if test $g_mi -ge $g_r_mi; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else if test $g_ma -gt $g_r_ma; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "\"found $g_ve.$g_ma.$g_mi requires $g_r_ve.$g_r_ma.$g_r_mi\"" "$LINENO" 5 fi fi else as_fn_error $? "\"found $g_ve.$g_ma.$g_mi requires $g_r_ve.$g_r_ma.$g_r_mi\"" "$LINENO" 5 fi else if test $g_ve -gt $g_r_ve; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "major version $g_ve found but $g_r_ve required" "$LINENO" 5 fi fi unset gob_version unset g_ve unset g_ma unset g_mi unset g_r_ve unset g_r_ma unset g_r_mi fi else as_fn_error $? "Cannot find GOB-2, check http://www.5z.com/jirka/gob.html" "$LINENO" 5 fi pioneers_warnings=yes; pioneers_debug=yes; pioneers_deprecationChecks=yes; else pioneers_warnings=no; pioneers_debug=no; pioneers_deprecationChecks=no; fi # Try to find a suitable renderer for the svg images whitespace_trick=" " # Extract the first word of "rsvg-convert", so it can be a program name with args. set dummy rsvg-convert; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_svg_renderer_path+:} false; then : $as_echo_n "(cached) " >&6 else case $svg_renderer_path in [\\/]* | ?:[\\/]*) ac_cv_path_svg_renderer_path="$svg_renderer_path" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_svg_renderer_path="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi svg_renderer_path=$ac_cv_path_svg_renderer_path if test -n "$svg_renderer_path"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $svg_renderer_path" >&5 $as_echo "$svg_renderer_path" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$svg_renderer_path != x; then svg_renderer_width="--width \$(whitespace_trick)" svg_renderer_height="\$(whitespace_trick) --height \$(whitespace_trick)" svg_renderer_output="\$(whitespace_trick) -o \$(whitespace_trick)" else # Extract the first word of "rsvg", so it can be a program name with args. set dummy rsvg; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_svg_renderer_path+:} false; then : $as_echo_n "(cached) " >&6 else case $svg_renderer_path in [\\/]* | ?:[\\/]*) ac_cv_path_svg_renderer_path="$svg_renderer_path" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_svg_renderer_path="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi svg_renderer_path=$ac_cv_path_svg_renderer_path if test -n "$svg_renderer_path"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $svg_renderer_path" >&5 $as_echo "$svg_renderer_path" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$svg_renderer_path != x; then svg_renderer_width="--width \$(whitespace_trick)" svg_renderer_height="\$(whitespace_trick) --height \$(whitespace_trick)" svg_renderer_output="\$(whitespace_trick)" else # Extract the first word of "convert", so it can be a program name with args. set dummy convert; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_svg_renderer_path+:} false; then : $as_echo_n "(cached) " >&6 else case $svg_renderer_path in [\\/]* | ?:[\\/]*) ac_cv_path_svg_renderer_path="$svg_renderer_path" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_svg_renderer_path="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi svg_renderer_path=$ac_cv_path_svg_renderer_path if test -n "$svg_renderer_path"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $svg_renderer_path" >&5 $as_echo "$svg_renderer_path" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$svg_renderer_path != x; then svg_renderer_width="-background \"\#000001\" -transparent \"\#000001\" -resize \$(whitespace_trick)" svg_renderer_height="x" svg_renderer_output="\$(whitespace_trick)" else # Add other SVG rendering programs here # Don't let configure fail, in the distributed tarballs is already # a current .png file svg_renderer_path=false fi fi fi # Is netpbm installed (should be needed only for maintainer builds) # netpbm will generate the icon for the Windows executables # Extract the first word of "pngtopnm", so it can be a program name with args. set dummy pngtopnm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_pngtopnm+:} false; then : $as_echo_n "(cached) " >&6 else case $pngtopnm in [\\/]* | ?:[\\/]*) ac_cv_path_pngtopnm="$pngtopnm" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_pngtopnm="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi pngtopnm=$ac_cv_path_pngtopnm if test -n "$pngtopnm"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pngtopnm" >&5 $as_echo "$pngtopnm" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$pngtopnm" = ""; then # Don't let configure fail, in the distributed tarballs is already # a current .png file pngtopnm=false fi # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; case "${enableval}" in full) pioneers_warnings=full;; yes) pioneers_warnings=yes ;; "") pioneers_warnings=yes ;; *) pioneers_warnings=no ;; esac fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; case "${enableval}" in yes) pioneers_debug=yes ;; "") pioneers_debug=yes ;; *) pioneers_debug=no ;; esac fi # Check whether --enable-deprecation-checks was given. if test "${enable_deprecation_checks+set}" = set; then : enableval=$enable_deprecation_checks; case "${enableval}" in yes) pioneers_deprecationChecks=yes ;; "") pioneers_deprecationChecks=yes ;; *) pioneers_deprecationChecks=no ;; esac fi ## The warnings are in the same order as in 'man gcc' if test "x$GCC" = xyes; then # Flags from Debian hardening (dpkg-buildflags --get CFLAGS) AM_CFLAGS="$AM_CFLAGS -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security" AM_CFLAGS="$AM_CFLAGS -D_FORTIFY_SOURCE=2" AM_CFLAGS="$AM_CFLAGS -pie -fPIE" # Flags from Debian hardening (dpkg-buildflags --get LDFLAGS) AM_LDFLAGS="$AM_LDFLAGS -Wl,-z,relro" AM_LDFLAGS="$AM_LDFLAGS -Wl,-z,now" # Only link the directly needed libraries AM_CFLAGS="$AM_CFLAGS -Wl,--as-needed" if test "$pioneers_warnings" = yes -o "$pioneers_warnings" = full; then WARNINGS="-Wall" WARNINGS="$WARNINGS -W" WARNINGS="$WARNINGS -Wpointer-arith" WARNINGS="$WARNINGS -Wcast-qual" WARNINGS="$WARNINGS -Wwrite-strings" WARNINGS="$WARNINGS -Wno-sign-compare" WARNINGS="$WARNINGS -Waggregate-return" WARNINGS="$WARNINGS -Wstrict-prototypes" WARNINGS="$WARNINGS -Wmissing-prototypes" WARNINGS="$WARNINGS -Wmissing-declarations" WARNINGS="$WARNINGS -Wredundant-decls" WARNINGS="$WARNINGS -Wnested-externs" WARNINGS="$WARNINGS -O" fi if test "$pioneers_warnings" = full; then flags="-Wfloat-equal" flags="$flags -Wdeclaration-after-statement" flags="$flags -Wundef" flags="$flags -Wendif-labels" flags="$flags -Wshadow" flags="$flags -Wbad-function-cast" flags="$flags -Wconversion" flags="$flags -Wold-style-definition" flags="$flags -Wunreachable-code" flags="$flags -pedantic" # This for loop comes from gnome-compiler-flags.m4 for option in $flags; do SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc understands $option" >&5 $as_echo_n "checking whether gcc understands $option... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : has_option=yes else has_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$SAVE_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5 $as_echo "$has_option" >&6; } if test $has_option = yes; then WARNINGS="$WARNINGS $option" fi unset has_option unset SAVE_CFLAGS done unset option unset flags fi fi if test "$pioneers_debug" = yes; then DEBUGGING="-ggdb3" fi if test "$pioneers_deprecationChecks" = yes; then GLIB_DEPRECATION="-DG_DISABLE_DEPRECATED" GLIB_DEPRECATION="$GLIB_DEPRECATION -DG_DISABLE_SINGLE_INCLUDES" GTK_DEPRECATION="-DGDK_DISABLE_DEPRECATED" GTK_DEPRECATION="$GTK_DEPRECATION -DGTK_DISABLE_DEPRECATED" GTK_DEPRECATION="$GTK_DEPRECATION -DGNOME_DISABLE_DEPRECATED" GTK_DEPRECATION="$GTK_DEPRECATION -DGDK_DISABLE_SINGLE_INCLUDES" GTK_DEPRECATION="$GTK_DEPRECATION -DGTK_DISABLE_SINGLE_INCLUDES" GTK_DEPRECATION="$GTK_DEPRECATION -DGSEAL_ENABLE" fi if test "$with_help" = no; then pioneers_help="no, disabled in configure" have_scrollkeeper=no else ## Scrollkeeper dependency test taken from gnome-games 2.6.2 ## Begin tests for scrollkeeper # SCROLLKEEPER_REQUIRED is never used? SCROLLKEEPER_REQUIRED=0.3.8 # Extract the first word of "scrollkeeper-config", so it can be a program name with args. set dummy scrollkeeper-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SCROLLKEEPER_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SCROLLKEEPER_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SCROLLKEEPER_CONFIG="$SCROLLKEEPER_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SCROLLKEEPER_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SCROLLKEEPER_CONFIG" && ac_cv_path_SCROLLKEEPER_CONFIG="no" ;; esac fi SCROLLKEEPER_CONFIG=$ac_cv_path_SCROLLKEEPER_CONFIG if test -n "$SCROLLKEEPER_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SCROLLKEEPER_CONFIG" >&5 $as_echo "$SCROLLKEEPER_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$SCROLLKEEPER_CONFIG = xno; then have_scrollkeeper=no pioneers_help="no, scrollkeeper not found" else have_scrollkeeper=yes pioneers_help="yes" fi fi # glib is always needed if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB2" >&5 $as_echo_n "checking for GLIB2... " >&6; } if test -n "$GLIB2_CFLAGS"; then pkg_cv_GLIB2_CFLAGS="$GLIB2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB2_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= $GLIB_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB2_LIBS"; then pkg_cv_GLIB2_LIBS="$GLIB2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= \$GLIB_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= $GLIB_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB2_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= $GLIB_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED_VERSION" 2>&1` else GLIB2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= $GLIB_REQUIRED_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glib-2.0 >= $GLIB_REQUIRED_VERSION) were not met: $GLIB2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLIB2_CFLAGS and GLIB2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLIB2_CFLAGS and GLIB2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLIB2_CFLAGS=$pkg_cv_GLIB2_CFLAGS GLIB2_LIBS=$pkg_cv_GLIB2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT2" >&5 $as_echo_n "checking for GOBJECT2... " >&6; } if test -n "$GOBJECT2_CFLAGS"; then pkg_cv_GOBJECT2_CFLAGS="$GOBJECT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 >= \$GLIB_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 >= $GLIB_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT2_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 >= $GLIB_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GOBJECT2_LIBS"; then pkg_cv_GOBJECT2_LIBS="$GOBJECT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 >= \$GLIB_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 >= $GLIB_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT2_LIBS=`$PKG_CONFIG --libs "gobject-2.0 >= $GLIB_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GOBJECT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gobject-2.0 >= $GLIB_REQUIRED_VERSION" 2>&1` else GOBJECT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gobject-2.0 >= $GLIB_REQUIRED_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GOBJECT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gobject-2.0 >= $GLIB_REQUIRED_VERSION) were not met: $GOBJECT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GOBJECT2_CFLAGS and GOBJECT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GOBJECT2_CFLAGS and GOBJECT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GOBJECT2_CFLAGS=$pkg_cv_GOBJECT2_CFLAGS GOBJECT2_LIBS=$pkg_cv_GOBJECT2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # # Check for libnotify # pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNOTIFY" >&5 $as_echo_n "checking for LIBNOTIFY... " >&6; } if test -n "$LIBNOTIFY_CFLAGS"; then pkg_cv_LIBNOTIFY_CFLAGS="$LIBNOTIFY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify >= \$LIBNOTIFY_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify >= $LIBNOTIFY_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNOTIFY_CFLAGS=`$PKG_CONFIG --cflags "libnotify >= $LIBNOTIFY_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBNOTIFY_LIBS"; then pkg_cv_LIBNOTIFY_LIBS="$LIBNOTIFY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify >= \$LIBNOTIFY_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify >= $LIBNOTIFY_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNOTIFY_LIBS=`$PKG_CONFIG --libs "libnotify >= $LIBNOTIFY_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify >= $LIBNOTIFY_REQUIRED_VERSION" 2>&1` else LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify >= $LIBNOTIFY_REQUIRED_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBNOTIFY_PKG_ERRORS" >&5 if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_libnotify="no, libnotify version too old" else have_libnotify="no, libnotify not installed" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_libnotify" >&5 $as_echo "$have_libnotify" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_libnotify" >&5 $as_echo "$have_libnotify" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_libnotify="no, libnotify version too old" else have_libnotify="no, libnotify not installed" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_libnotify" >&5 $as_echo "$have_libnotify" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_libnotify" >&5 $as_echo "$have_libnotify" >&6; } else LIBNOTIFY_CFLAGS=$pkg_cv_LIBNOTIFY_CFLAGS LIBNOTIFY_LIBS=$pkg_cv_LIBNOTIFY_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libnotify=yes fi if test "$have_libnotify" = "yes"; then $as_echo "#define HAVE_NOTIFY 1" >>confdefs.h pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNOTIFY_OPTIMAL_VERSION" >&5 $as_echo_n "checking for LIBNOTIFY_OPTIMAL_VERSION... " >&6; } if test -n "$LIBNOTIFY_OPTIMAL_VERSION_CFLAGS"; then pkg_cv_LIBNOTIFY_OPTIMAL_VERSION_CFLAGS="$LIBNOTIFY_OPTIMAL_VERSION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify >= \$LIBNOTIFY_OPTIMAL_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify >= $LIBNOTIFY_OPTIMAL_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNOTIFY_OPTIMAL_VERSION_CFLAGS=`$PKG_CONFIG --cflags "libnotify >= $LIBNOTIFY_OPTIMAL_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBNOTIFY_OPTIMAL_VERSION_LIBS"; then pkg_cv_LIBNOTIFY_OPTIMAL_VERSION_LIBS="$LIBNOTIFY_OPTIMAL_VERSION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify >= \$LIBNOTIFY_OPTIMAL_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "libnotify >= $LIBNOTIFY_OPTIMAL_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBNOTIFY_OPTIMAL_VERSION_LIBS=`$PKG_CONFIG --libs "libnotify >= $LIBNOTIFY_OPTIMAL_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBNOTIFY_OPTIMAL_VERSION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libnotify >= $LIBNOTIFY_OPTIMAL_VERSION" 2>&1` else LIBNOTIFY_OPTIMAL_VERSION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libnotify >= $LIBNOTIFY_OPTIMAL_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBNOTIFY_OPTIMAL_VERSION_PKG_ERRORS" >&5 $as_echo "#define HAVE_OLD_NOTIFY 1" >>confdefs.h elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define HAVE_OLD_NOTIFY 1" >>confdefs.h else LIBNOTIFY_OPTIMAL_VERSION_CFLAGS=$pkg_cv_LIBNOTIFY_OPTIMAL_VERSION_CFLAGS LIBNOTIFY_OPTIMAL_VERSION_LIBS=$pkg_cv_LIBNOTIFY_OPTIMAL_VERSION_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Gtk+ support if test x$with_gtk = xno; then have_gtk2="no, disabled in configure" else pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK2" >&5 $as_echo_n "checking for GTK2... " >&6; } if test -n "$GTK2_CFLAGS"; then pkg_cv_GTK2_CFLAGS="$GTK2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= $GTK_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK2_LIBS"; then pkg_cv_GTK2_LIBS="$GTK2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_REQUIRED_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $GTK_REQUIRED_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= $GTK_REQUIRED_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= $GTK_REQUIRED_VERSION" 2>&1` else GTK2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= $GTK_REQUIRED_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK2_PKG_ERRORS" >&5 if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_gtk2="no, Gtk+ version too old" else have_gtk2="no, Gtk+ not installed" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk2" >&5 $as_echo "$have_gtk2" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_gtk2="no, Gtk+ version too old" else have_gtk2="no, Gtk+ not installed" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk2" >&5 $as_echo "$have_gtk2" >&6; } else GTK2_CFLAGS=$pkg_cv_GTK2_CFLAGS GTK2_LIBS=$pkg_cv_GTK2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_gtk2=yes fi fi if test "$have_gtk2" = "yes"; then HAVE_GTK2_TRUE= HAVE_GTK2_FALSE='#' else HAVE_GTK2_TRUE='#' HAVE_GTK2_FALSE= fi if test "$have_gtk2" = "yes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_OPTIMAL_VERSION" >&5 $as_echo_n "checking for GTK_OPTIMAL_VERSION... " >&6; } if test -n "$GTK_OPTIMAL_VERSION_CFLAGS"; then pkg_cv_GTK_OPTIMAL_VERSION_CFLAGS="$GTK_OPTIMAL_VERSION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_OPTIMAL_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $GTK_OPTIMAL_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_OPTIMAL_VERSION_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= $GTK_OPTIMAL_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_OPTIMAL_VERSION_LIBS"; then pkg_cv_GTK_OPTIMAL_VERSION_LIBS="$GTK_OPTIMAL_VERSION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$GTK_OPTIMAL_VERSION\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $GTK_OPTIMAL_VERSION") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_OPTIMAL_VERSION_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= $GTK_OPTIMAL_VERSION" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_OPTIMAL_VERSION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= $GTK_OPTIMAL_VERSION" 2>&1` else GTK_OPTIMAL_VERSION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= $GTK_OPTIMAL_VERSION" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_OPTIMAL_VERSION_PKG_ERRORS" >&5 $as_echo "#define HAVE_OLD_GTK 1" >>confdefs.h elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define HAVE_OLD_GTK 1" >>confdefs.h else GTK_OPTIMAL_VERSION_CFLAGS=$pkg_cv_GTK_OPTIMAL_VERSION_CFLAGS GTK_OPTIMAL_VERSION_LIBS=$pkg_cv_GTK_OPTIMAL_VERSION_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Gtk ScrollKeeper -> Test Build # libgnome Help # N X N N # Y N N N # Y Y Y if have libgnome # libgnome is only needed for help if test "$have_gtk2" = "yes"; then test_libgnome=$have_scrollkeeper; else test_libgnome=no; with_ms_icons=no; fi have_graphical=$have_gtk2; if test "$test_libgnome" = "yes"; then # libgnome-2.0 support pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNOME2" >&5 $as_echo_n "checking for GNOME2... " >&6; } if test -n "$GNOME2_CFLAGS"; then pkg_cv_GNOME2_CFLAGS="$GNOME2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgnome-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgnome-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GNOME2_CFLAGS=`$PKG_CONFIG --cflags "libgnome-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GNOME2_LIBS"; then pkg_cv_GNOME2_LIBS="$GNOME2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgnome-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgnome-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GNOME2_LIBS=`$PKG_CONFIG --libs "libgnome-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GNOME2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libgnome-2.0" 2>&1` else GNOME2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libgnome-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GNOME2_PKG_ERRORS" >&5 have_gnome="no, libgnome-2.0 not installed" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gnome" >&5 $as_echo "$have_gnome" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_gnome="no, libgnome-2.0 not installed" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gnome" >&5 $as_echo "$have_gnome" >&6; } else GNOME2_CFLAGS=$pkg_cv_GNOME2_CFLAGS GNOME2_LIBS=$pkg_cv_GNOME2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_gnome="yes" fi if test "$have_gnome" = "yes"; then $as_echo "#define HAVE_LIBGNOME 1" >>confdefs.h fi if test "$have_scrollkeeper" = "yes"; then # Turn off the help if libgnome not installed have_scrollkeeper=$have_gnome; fi fi if test "$have_graphical" = "yes"; then HAVE_GNOME_TRUE= HAVE_GNOME_FALSE='#' else HAVE_GNOME_TRUE='#' HAVE_GNOME_FALSE= fi if test "$have_scrollkeeper" = "yes"; then HAVE_SCROLLKEEPER_TRUE= HAVE_SCROLLKEEPER_FALSE='#' else HAVE_SCROLLKEEPER_TRUE='#' HAVE_SCROLLKEEPER_FALSE= fi # Avahi support if test x$with_avahi = xno; then have_avahi="no, disabled in configure" else pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVAHI_CLIENT" >&5 $as_echo_n "checking for AVAHI_CLIENT... " >&6; } if test -n "$AVAHI_CLIENT_CFLAGS"; then pkg_cv_AVAHI_CLIENT_CFLAGS="$AVAHI_CLIENT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVAHI_CLIENT_CFLAGS=`$PKG_CONFIG --cflags "avahi-client" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVAHI_CLIENT_LIBS"; then pkg_cv_AVAHI_CLIENT_LIBS="$AVAHI_CLIENT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVAHI_CLIENT_LIBS=`$PKG_CONFIG --libs "avahi-client" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVAHI_CLIENT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "avahi-client" 2>&1` else AVAHI_CLIENT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "avahi-client" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVAHI_CLIENT_PKG_ERRORS" >&5 have_avahi="no, avahi-client is missing" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_avahi" >&5 $as_echo "$have_avahi" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_avahi="no, avahi-client is missing" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_avahi" >&5 $as_echo "$have_avahi" >&6; } else AVAHI_CLIENT_CFLAGS=$pkg_cv_AVAHI_CLIENT_CFLAGS AVAHI_CLIENT_LIBS=$pkg_cv_AVAHI_CLIENT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVAHI_GLIB" >&5 $as_echo_n "checking for AVAHI_GLIB... " >&6; } if test -n "$AVAHI_GLIB_CFLAGS"; then pkg_cv_AVAHI_GLIB_CFLAGS="$AVAHI_GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-glib\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-glib") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVAHI_GLIB_CFLAGS=`$PKG_CONFIG --cflags "avahi-glib" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$AVAHI_GLIB_LIBS"; then pkg_cv_AVAHI_GLIB_LIBS="$AVAHI_GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-glib\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-glib") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVAHI_GLIB_LIBS=`$PKG_CONFIG --libs "avahi-glib" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then AVAHI_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "avahi-glib" 2>&1` else AVAHI_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "avahi-glib" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVAHI_GLIB_PKG_ERRORS" >&5 have_avahi="no, avahi-glib is missing" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_avahi" >&5 $as_echo "$have_avahi" >&6; } elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_avahi="no, avahi-glib is missing" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_avahi" >&5 $as_echo "$have_avahi" >&6; } else AVAHI_GLIB_CFLAGS=$pkg_cv_AVAHI_GLIB_CFLAGS AVAHI_GLIB_LIBS=$pkg_cv_AVAHI_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_avahi="yes" $as_echo "#define HAVE_AVAHI 1" >>confdefs.h $as_echo "#define AVAHI_ANNOUNCE_NAME \"_pioneers._tcp\"" >>confdefs.h fi fi fi # Check whether --enable-admin-gtk was given. if test "${enable_admin_gtk+set}" = set; then : enableval=$enable_admin_gtk; case "${enableval}" in yes) admin_gtk_support=yes ;; "") admin_gtk_support=yes ;; *) admin_gtk_support=no ;; esac else admin_gtk_support=no fi if test x$admin_gtk_support = xyes; then ADMIN_GTK_SUPPORT_TRUE= ADMIN_GTK_SUPPORT_FALSE='#' else ADMIN_GTK_SUPPORT_TRUE='#' ADMIN_GTK_SUPPORT_FALSE= fi # Check whether --enable-protocol was given. if test "${enable_protocol+set}" = set; then : enableval=$enable_protocol; case "${enableval}" in IPv4) pioneers_network_protocol=AF_INET; avahi_network_protocol=AVAHI_PROTO_INET;; *) pioneers_network_protocol=AF_UNSPEC; avahi_network_protocol=AVAHI_PROTO_UNSPEC;; esac else pioneers_network_protocol=AF_UNSPEC; avahi_network_protocol=AVAHI_PROTO_UNSPEC fi cat >>confdefs.h <<_ACEOF #define NETWORK_PROTOCOL $pioneers_network_protocol _ACEOF cat >>confdefs.h <<_ACEOF #define AVAHI_NETWORK_PROTOCOL $avahi_network_protocol _ACEOF for ac_header in netdb.h fcntl.h netinet/in.h sys/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in limits.h do : ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIMITS_H 1 _ACEOF fi done for ac_header in syslog.h do : ac_fn_c_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" if test "x$ac_cv_header_syslog_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSLOG_H 1 _ACEOF pioneers_have_syslog=yes; else pioneers_have_syslog=no; fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi # Functions ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_header in sys/select.h sys/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 $as_echo_n "checking types of arguments for select... " >&6; } if ${ac_cv_func_select_args+:} false; then : $as_echo_n "(cached) " >&6 else for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_SYS_SELECT_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif int main () { extern int select ($ac_arg1, $ac_arg234, $ac_arg234, $ac_arg234, $ac_arg5); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done done # Provide a safe default value. : "${ac_cv_func_select_args=int,int *,struct timeval *}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 $as_echo "$ac_cv_func_select_args" >&6; } ac_save_IFS=$IFS; IFS=',' set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` IFS=$ac_save_IFS shift cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG1 $1 _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG234 ($2) _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG5 ($3) _ACEOF rm -f conftest* # Mathematics ac_fn_c_check_func "$LINENO" "rint" "ac_cv_func_rint" if test "x$ac_cv_func_rint" = xyes; then : $as_echo "#define HAVE_RINT 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rint in -lm" >&5 $as_echo_n "checking for rint in -lm... " >&6; } if ${ac_cv_lib_m_rint+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rint (); int main () { return rint (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_rint=yes else ac_cv_lib_m_rint=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_rint" >&5 $as_echo "$ac_cv_lib_m_rint" >&6; } if test "x$ac_cv_lib_m_rint" = xyes; then : $as_echo "#define HAVE_RINT 1" >>confdefs.h LIBS="$LIBS -lm" fi fi for ac_func in sqrt do : ac_fn_c_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" if test "x$ac_cv_func_sqrt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SQRT 1 _ACEOF fi done # String functions for ac_func in strchr strspn strstr strcspn do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memmove memset do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Network and I/O functions for ac_func in gethostname gethostbyname select socket do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done getsockopt_arg3="void *"; # getaddrinfo and friends for ac_func in getaddrinfo gai_strerror freeaddrinfo do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF cat >>confdefs.h <<_ACEOF #define HAVE_GETADDRINFO_ET_AL 1 _ACEOF fi done # The Windows ports (Cygwin and MinGW) are client-only pioneers_is_mingw_port=no; case $host in *-*-cygwin*) pioneers_is_windows_port=yes;; *-*-mingw*) pioneers_is_windows_port=yes; pioneers_is_mingw_port=yes;; *) pioneers_is_windows_port=no;; esac # Can a non-blocking socket be created? pioneers_have_non_blocking_sockets=no; for ac_func in fcntl do : ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" if test "x$ac_cv_func_fcntl" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FCNTL 1 _ACEOF pioneers_have_non_blocking_sockets=yes fi done if test "$pioneers_have_non_blocking_sockets" = "no"; then # Only check for ws2tcpip now, # because it will cause problems under Cygwin for ac_header in ws2tcpip.h do : ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default" if test "x$ac_cv_header_ws2tcpip_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WS2TCPIP_H 1 _ACEOF pioneers_have_non_blocking_sockets=yes; getsockopt_arg3="char *"; fi done fi cat >>confdefs.h <<_ACEOF #define GETSOCKOPT_ARG3 $getsockopt_arg3 _ACEOF # Functions needed for the hack to override the language for ac_func in setlocale do : ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETLOCALE 1 _ACEOF fi done # Data types { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Check if socklen_t is present { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 $as_echo_n "checking for socklen_t... " >&6; } if ${ac_cv_type_socklen_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WS2TCPIP_H #include #else #include #include #endif int main () { socklen_t len = 42; return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_socklen_t=yes else ac_cv_type_socklen_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_socklen_t" >&5 $as_echo "$ac_cv_type_socklen_t" >&6; } if test $ac_cv_type_socklen_t != yes; then $as_echo "#define socklen_t int" >>confdefs.h fi # Defines, accessible for all source files cat >>confdefs.h <<_ACEOF #define PROTOCOL_VERSION "$PROTOCOL_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define META_PROTOCOL_VERSION "$META_PROTOCOL_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PIONEERS_DEFAULT_GAME_PORT "$PIONEERS_DEFAULT_GAME_PORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PIONEERS_DEFAULT_GAME_HOST "$PIONEERS_DEFAULT_GAME_HOST" _ACEOF cat >>confdefs.h <<_ACEOF #define PIONEERS_DEFAULT_ADMIN_PORT "$PIONEERS_DEFAULT_ADMIN_PORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PIONEERS_DEFAULT_META_PORT "$PIONEERS_DEFAULT_META_PORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PIONEERS_DEFAULT_META_SERVER "$PIONEERS_DEFAULT_META_SERVER" _ACEOF ## internationalization support { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.35 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "0.35"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.35" >&5 $as_echo_n "checking for intltool >= 0.35... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.35 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi GETTEXT_PACKAGE=pioneers cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES if test $pioneers_is_mingw_port = yes; then # The check for WSACleanup in ws2_32 needs an include of ws2tcpip.h # This is not possible with the AC_CHECK_LIB macro # AC_CHECK_LIB(ws2_32, WSACleanup) # Just add ws2_32 to the list of libraries LIBS="-lws2_32 $LIBS" AM_CFLAGS="-mms-bitfields $AM_CFLAGS" AM_CFLAGS="$AM_CFLAGS -DWIN32_LEAN_AND_MEAN" # No console window for the graphical applications GTK2_LIBS="$GTK2_LIBS -mwindows" # Don't use bin, lib and share subdirectories datadir='${prefix}' bindir='${prefix}' libdir='${prefix}' pioneers_datadir=. pioneers_themedir=$datadir/themes pioneers_themedir_embed=themes pioneers_localedir=locale DATADIRNAME=. else pioneers_datadir=$datadir pioneers_themedir=$datadir/games/pioneers/themes pioneers_themedir_embed=$pioneers_themedir pioneers_localedir=$datadir/locale fi # All checks are completed. # Determine which executables cannot be built pioneers_build_client_ai=yes; pioneers_build_client_gtk=yes; pioneers_build_editor=yes; pioneers_build_server_console=yes; pioneers_build_server_gtk=yes; pioneers_build_metaserver=yes; if test "$pioneers_have_syslog" = "no"; then pioneers_build_metaserver=no; fi if test "$have_graphical" != "yes"; then pioneers_build_client_gtk=$have_graphical; pioneers_build_editor=$have_graphical; pioneers_build_server_gtk=$have_graphical; fi if test "$pioneers_have_non_blocking_sockets" = "no"; then pioneers_build_client_ai=no; pioneers_build_client_gtk=no; pioneers_build_server_console=no; pioneers_build_server_gtk=no; pioneers_build_metaserver=no; fi # The server functionality is not ported to MinGW yet if test "$pioneers_is_mingw_port" = "yes"; then pioneers_build_server_console="no, not implemented for MinGW"; pioneers_build_server_gtk="no, not implemented for MinGW"; fi # The metaserver functionality is not ported to MS Windows if test "$pioneers_is_windows_port" = "yes"; then pioneers_build_metaserver="no, not implemented for MS Windows"; fi # Construct a nice text about Microsoft Windows icons if test $USE_MAINTAINER_MODE = yes; then if test "$with_ms_icons" = "no"; then if test $pioneers_is_windows_port = yes; then as_fn_error $? "Icons cannot be disabled in maintainermode in MS Windows" "$LINENO" 5 fi pioneers_ms_icons="Disabled, make dist is disabled too" else if test "$pngtopnm" = "false"; then as_fn_error $? "Icons cannot be generated, rerun configure with --without-ms-icons or install netpbm" "$LINENO" 5 fi pioneers_ms_icons="Icons generated" fi else if test $pioneers_is_windows_port = yes; then pioneers_ms_icons="Icons are used" else pioneers_ms_icons="Not needed" fi fi if test $USE_MAINTAINER_MODE = yes -a "$with_ms_icons" != "no"; then CREATE_WINDOWS_ICON_TRUE= CREATE_WINDOWS_ICON_FALSE='#' else CREATE_WINDOWS_ICON_TRUE='#' CREATE_WINDOWS_ICON_FALSE= fi if test $pioneers_is_windows_port = yes; then USE_WINDOWS_ICON_TRUE= USE_WINDOWS_ICON_FALSE='#' else USE_WINDOWS_ICON_TRUE='#' USE_WINDOWS_ICON_FALSE= fi if test "$pioneers_build_client_gtk" = "yes" -o "$pioneers_build_client_ai" = yes; then BUILD_CLIENT_TRUE= BUILD_CLIENT_FALSE='#' else BUILD_CLIENT_TRUE='#' BUILD_CLIENT_FALSE= fi if test "$pioneers_build_editor" = "yes"; then BUILD_EDITOR_TRUE= BUILD_EDITOR_FALSE='#' else BUILD_EDITOR_TRUE='#' BUILD_EDITOR_FALSE= fi if test "$pioneers_build_server_gtk" = "yes" -o "$pioneers_build_server_console" = "yes"; then BUILD_SERVER_TRUE= BUILD_SERVER_FALSE='#' else BUILD_SERVER_TRUE='#' BUILD_SERVER_FALSE= fi if test "$pioneers_build_metaserver" = "yes"; then BUILD_META_SERVER_TRUE= BUILD_META_SERVER_FALSE='#' else BUILD_META_SERVER_TRUE='#' BUILD_META_SERVER_FALSE= fi if test "$pioneers_is_mingw_port" = "yes"; then IS_MINGW_PORT_TRUE= IS_MINGW_PORT_FALSE='#' else IS_MINGW_PORT_TRUE='#' IS_MINGW_PORT_FALSE= fi if test "$have_scrollkeeper" = "yes"; then $as_echo "#define HAVE_HELP 1" >>confdefs.h pioneers_help="yes, scrollkeeper"; fi ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files pioneers.spec" ac_config_files="$ac_config_files MinGW/pioneers.nsi" ac_config_files="$ac_config_files po/Makefile.in" ac_config_files="$ac_config_files client/help/C/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GTK2_TRUE}" && test -z "${HAVE_GTK2_FALSE}"; then as_fn_error $? "conditional \"HAVE_GTK2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GNOME_TRUE}" && test -z "${HAVE_GNOME_FALSE}"; then as_fn_error $? "conditional \"HAVE_GNOME\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SCROLLKEEPER_TRUE}" && test -z "${HAVE_SCROLLKEEPER_FALSE}"; then as_fn_error $? "conditional \"HAVE_SCROLLKEEPER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ADMIN_GTK_SUPPORT_TRUE}" && test -z "${ADMIN_GTK_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"ADMIN_GTK_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${CREATE_WINDOWS_ICON_TRUE}" && test -z "${CREATE_WINDOWS_ICON_FALSE}"; then as_fn_error $? "conditional \"CREATE_WINDOWS_ICON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_WINDOWS_ICON_TRUE}" && test -z "${USE_WINDOWS_ICON_FALSE}"; then as_fn_error $? "conditional \"USE_WINDOWS_ICON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_CLIENT_TRUE}" && test -z "${BUILD_CLIENT_FALSE}"; then as_fn_error $? "conditional \"BUILD_CLIENT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_EDITOR_TRUE}" && test -z "${BUILD_EDITOR_FALSE}"; then as_fn_error $? "conditional \"BUILD_EDITOR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_SERVER_TRUE}" && test -z "${BUILD_SERVER_FALSE}"; then as_fn_error $? "conditional \"BUILD_SERVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_META_SERVER_TRUE}" && test -z "${BUILD_META_SERVER_FALSE}"; then as_fn_error $? "conditional \"BUILD_META_SERVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IS_MINGW_PORT_TRUE}" && test -z "${IS_MINGW_PORT_FALSE}"; then as_fn_error $? "conditional \"IS_MINGW_PORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by pioneers $as_me 14.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ pioneers config.status 14.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "pioneers.spec") CONFIG_FILES="$CONFIG_FILES pioneers.spec" ;; "MinGW/pioneers.nsi") CONFIG_FILES="$CONFIG_FILES MinGW/pioneers.nsi" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "client/help/C/Makefile") CONFIG_FILES="$CONFIG_FILES client/help/C/Makefile" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: $PACKAGE v$VERSION configuration: Source code location: ${srcdir} Install location: ${prefix} Compiler: ${CC} Build graphical client $pioneers_build_client_gtk Build computer player $pioneers_build_client_ai Build game editor $pioneers_build_editor Build graphical server $pioneers_build_server_gtk Build console server $pioneers_build_server_console Build metaserver $pioneers_build_metaserver Build help $pioneers_help AVAHI support $have_avahi LIBNOTIFY support $have_libnotify Developers only: Use compiler warnings $pioneers_warnings Add debug information $pioneers_debug Enable deprecation checks $pioneers_deprecationChecks Maintainers only: Microsoft Windows icons $pioneers_ms_icons " >&5 $as_echo "$as_me: $PACKAGE v$VERSION configuration: Source code location: ${srcdir} Install location: ${prefix} Compiler: ${CC} Build graphical client $pioneers_build_client_gtk Build computer player $pioneers_build_client_ai Build game editor $pioneers_build_editor Build graphical server $pioneers_build_server_gtk Build console server $pioneers_build_server_console Build metaserver $pioneers_build_metaserver Build help $pioneers_help AVAHI support $have_avahi LIBNOTIFY support $have_libnotify Developers only: Use compiler warnings $pioneers_warnings Add debug information $pioneers_debug Enable deprecation checks $pioneers_deprecationChecks Maintainers only: Microsoft Windows icons $pioneers_ms_icons " >&6;} pioneers-14.1/AUTHORS0000644000175000017500000000071110471013525011251 00000000000000Dave Cole Andy Heroff Roman Hodek Dan Egnor Steve Langasek Bibek Sahu Roderick Schertler Jeff Breidenbach David Fallon Matt Waggoner Geoff Hanson Bas Wijnen Roland Clobus Brian Wellington pioneers-14.1/COPYING0000644000175000017500000004311210363024766011247 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. pioneers-14.1/ChangeLog0000644000175000017500000071770411760645213012003 000000000000002012-05-28 Roland Clobus * common/gtk/theme.c: Removed deprecated warning. * common/gtk/config-gnome.c, server/player.c: Suppress warnings for the use of write. * server/pregame.c, client/common/client.c: Deprecated the 'player disconnected' message. * common/network.c: Fixed memory leak in debug code. * docs/README.release: Updated location of ClientVersionType. * client/gtk/data/splash.svg: Updated for protocol 14. * NEWS: Release notes for 14.1. * TODO: Refered to the Feature Request page on SourceForge. * client/ai/lobbybot.c: Mentioned 14.1. 2012-05-19 Roland Clobus * editor/gtk/editor.c, common/gtk/game-rules.c: Translator hints. 2012-05-17 Roland Clobus * server/Evil_square.game, server/ubuntuland.game, server/default.game, server/crane_island.game, server/GuerreDe100ans.game, server/Mini_another_swimming_pool_in_the_wall.game, server/canyon.game, server/archipel_gold.game, server/iles.game, server/conquest.game, server/conquest+ports.game, server/small.game, server/seafarers.game, server/north_america.game, server/coeur.game, server/lorindol.game, server/seafarers-gold.game, server/5-6-player.game, server/lobby.game, server/south_africa.game, server/Another_swimming_pool_in_the_wall.game, server/henjes.game, server/Cube.game: Use the new descriptions. All games are saved by the editor. 2012-04-27 Roland Clobus * server/gtk/main.c, client/gtk/offline.c, editor/gtk/editor.c, common/gtk/theme.c, common/gtk/theme.h: Cleanup themes for valgrind. * common/gtk/guimap.c, common/gtk/theme.c, common/gtk/select-game.c, common/gtk/select-game.h: More cleanup for valgrind. * common/gtk/theme.c: Removed double rendering. * editor/gtk/editor.c: Reenabled the context menu on right-click which was disabled on 2011-02-23. 2012-04-06 Roland Clobus * editor/gtk/editor.c: Added a file filter. 2012-04-05 Roland Clobus * editor/gtk/editor.c: Use default folder in file dialogs. * common/map.c: Correctly handle NULL for chits, as introduced on 2012-03-21. 2012-04-03 Roland Clobus * common/network.c, common/network.h, server/admin.c: Restrict knowledge of the Session struct to network.c 2012-03-28 Roland Clobus * client/gtk/callbacks.c, client/common/client.c: Show and hide nosetup nodes for the viewer too. * common/game.c: Don't send strings twice in game settings. 2012-03-21 Roland Clobus * editor/gtk/editor.c, common/gtk/game-rules.c, common/gtk/game-rules.h, common/game.c, common/game.h, server/gtk/main.c: Added island discovery bonus widget. Cleanup of params in the editor (with thanks to Micah Bunting for the initial version). 2012-02-24 Roland Clobus * common/game.c, common/map.c: Moved NULL check to map_free. 2012-02-12 Roland Clobus * Makefile.am: Added 'pristine' target to remove svn:ignore files. * configure.ac: Split AC_CONFIG_FILES. Needed for MinGW builds. * client/gtk/resource-view.gob: Fixed layout bug introduced 2011-11-12. 2012-02-10 Roland Clobus * configure.ac, Makefile.am, client/gtk/data/Makefile.am: The script rsvg is deprecated. Using rsvg-convert which was called by rsvg. * MinGW/Makefile.am: MinGW port requires libssp-0.dll too. Also use the install-hook to automagically install the DLLs. 2012-02-09 Roland Clobus * configure.ac: Use the same flags as for Debian hardening and also use the minimal linking flags. * common/game.c, common/game.h, server/server.c: Find duplicate games. 2012-02-02 Roland Clobus * Makefile.am: Don't include source files in BUILT_SOURCES. * common/Makefile.am, common/gtk/Makefile.am, client/gtk/Makefile.am: Better marking for gob related files. 2012-01-30 Roland Clobus * editor/gtk/Makefile.am, server/gtk/Makefile.am, Makefile.am, client/gtk/data/Makefile.am: Created the large icons for the GNOME 3 desktop. * editor/gtk/pioneers-editor.desktop.in, server/gtk/pioneers-server.desktop.in, client/gtk/pioneers.desktop.in: Removed the obsolete UTF-8 encoding tag and removed the filename extension from the Icon tag. 2012-01-17 Roland Clobus * client/common/client.c: Fixed string building function. * server/gtk/main.c: Fixed the bug introduced on 2011-11-06, which did not correctly disabled the entries related to 'Register server'. 2012-01-13 Roland Clobus * client/gtk/trade.c: Fixed the bug introduced on 2011-08-18, which broke the trade in games without interplayer trade (it worked in 0.12.4). * client/gtk/gui.c, client/gtk/interface.c: Remove the quote tab when leaving a game. * client/gtk/trade.c: Invalidate offers that are not interesting anymore. * server/turn.c, server/player.c, server/server.h, server/pregame.c, server/buildutil.c, client/common/client.c: Simpler longest road check. 2012-01-09 Roland Clobus * docs/pioneers-server-gtk.6, docs/pioneers-meta-server.6, docs/pioneersai.6, docs/pioneers.6, docs/pioneers-server-console.6, docs/pioneers-editor.6: Updated man pages. 2012-01-06 Roland Clobus * client/gtk/offline.c: Send the new avatar style (it worked in 0.12.3). 2012-01-05 Roland Clobus * editor/gtk/editor.c: Fixed a crash when a game needs logging. 2011-12-11 Roland Clobus * client/gtk/connect.c, server/gtk/main.c, server/server.c: Added newline to log messages about errors starting a program. 2011-12-10 Roland Clobus * meta-server/main.c: Replaced strerror 2x by g_strerror, as found by autoscan. 2011-12-07 Roland Clobus * editor/gtk/editor.c, common/gtk/scrollable-text-view.gob, common/gtk/Makefile.am, common/game.c, common/game.h: Store the comments in the editor. With many thanks to Micah Bunting for the initial versions of this patch. 2011-12-02 Roland Clobus * pioneers.nsi.in, README.MinGW, MinGW/pioneers.nsi.in, MinGW/README.txt, configure.ac: Moved MinGW related stuff to MinGW directory. New instructions in the README.txt. 2011-12-01 Roland Clobus * server/lobby.game, server/theme_preview.game: Removed obsolete rule. 2011-11-29 Roland Clobus * server/pregame.c, server/player.c, server/server.h, common/game.c, common/game.h: Allow versioned rules. * common/state.c: Easier debugging of the state machine. 2011-11-28 Roland Clobus * client/ai/ai.c: Removed old debug line. * pioneers.nsi.in, MinGW/gdk-pixbuf.loaders, MinGW/Makefile.am, MinGW/loaders.cache, README.MinGW: Release of 0.12.5 for Windows. Code from the 0.12.5 branch. 2011-11-26 Roland Clobus * Makefile.am: Remove incorrect guard for BUILD_SERVER. 2011-11-21 Roland Clobus * common/gtk/theme.c, common/gtk/theme.h: Speedup of server-gtk by not rescaling the theme when it is not necessary. 2011-11-12 Roland Clobus * editor/gtk/editor.c, common/gtk/gtkcompat.h, common/gtk/theme.c, common/gtk/common_gtk.h, common/gtk/guimap.c, common/gtk/player-icon.c, common/gtk/select-game.c, common/gtk/common_gtk.c, configure.ac, server/gtk/main.c, client/gtk/plenty.c, client/gtk/name.c, client/gtk/resource-view.gob, client/gtk/gold.c, client/gtk/player.c, client/gtk/legend.c, client/gtk/quote-view.c, client/gtk/gameover.c, client/gtk/discard.c, client/gtk/monopoly.c, client/gtk/settingscreen.c, client/gtk/gui.c, client/gtk/identity.c, client/gtk/connect.c, client/gtk/histogram.c: Enable GSEAL_ENABLE. 2011-11-07 Roland Clobus * editor/gtk/game-resources.c, editor/gtk/game-devcards.c, editor/gtk/game-buildings.c, editor/gtk/game-settings.c, common/gtk/aboutbox.c, server/gtk/main.c: Some preparation for Gtk+3. 2011-11-06 Roland Clobus * server/gtk/main.c: Removed Gtk-CRITICAL messages by setting the togglebutton after the items to be disabled have been created. 2011-10-30 Roland Clobus * configure.ac: Work version is 14.1 2011-10-30 Roland Clobus * Released 0.12.5 2011-10-30 Roland Clobus * server/player.c, server/server.c, server/server.h, server/pregame.c: Forget players in the lobby when they disconnect. Don't start the lobby game. * admin-scripts/meta.sh: Allow more games to be hosted. * client/gtk/resource-view.gob: Don't request more space for the single resource view. * common/gtk/guimap.c, server/gtk/main.c, server/turn.c, server/pregame.c, client/gtk/frontend.c, client/gtk/gui.c, client/gtk/connect.c, client/common/client.c, client/ai/greedy.c: Fixed some shadowed variable names. * client/ai/greedy.c: Fixed a datatype when finding the best road. * client/gtk/gui.c: Used a simpler routine to build the icons for the toolbar. * server/develop.c: Added extra check to see if the development card that is being played is valid. With thanks to miton for reporting this issue. * server/develop.c: Fixed a bug that would stop the server on an assert when the road building action was used to win the game before the dice were rolled. * NEWS: Release notes for 0.12.5 * TODO: Remove one old and one implemented feature. * client/ai/lobbybot.c: Mention 0.12.5 2011-10-27 Roland Clobus * client/gtk/frontend.h, client/gtk/notification.c, client/gtk/notification.h, client/gtk/quote.c, client/gtk/trade.c, client/gtk/interface.c: Use the toolbar icons in the notification messages. * client/gtk/data/Makefile.am, client/gtk/data/*.svg, client/gtk/data/*.png: Replaced PNG bitmaps of the toolbar items by SVG vector images. * server/theme_preview.game: Included bridges and ship in the preview. * client/common/client.c: Removed old stack dump. 2011-10-22 Roland Clobus * common/gtk/game-rules.c, common/gtk/game-rules.h, common/game.c, common/game.h, server/gtk/main.c, client/gtk/identify.c: Removed the colored dice patch which was written early after the release of 0.12.4 to have a last release in the 0.12-series. * common/gtk/Makefile.am: Added gtkcompat.h for make distcheck. * client/gtk/resource-view.gob: Removed compiler warnings. * common/gtk/theme.c, client/gtk/name.c: Removed compiler warnings for -Wbad-function-cast. 2011-10-21 Roland Clobus * client/gtk/quote.c, client/gtk/trade.c: Fixed comment for translators. * client/gtk/connect.c: Fixed a typo. 2011-10-20 Roland Clobus * client/gtk/trade.c: make reindent. * meta-server/main.c: Fixed a memory leak. * docs/pioneers-meta-server.6, meta-server/main.c: Allow gracefull shutdown of the meta-server by sending SIGUSR1. * editor/gtk/game-resources.c, editor/gtk/editor.c, editor/gtk/game-building.c: Fixed a few warnings with --enable-warnings=full. 2011-10-18 Roland Clobus * common/gtk/game-rules.c: Turn off pirate when there are no ships. * client/gtk/trade.c: Fix compiler warning. * configure.ac, client/gtk/notification.c: Backport of libnotify for Debian Stable. 2011-10-17 Roland Clobus * configure.ac, client/gtk/interface.c, client/gtk/notification.c, client/gtk/notification.h, client/gtk/quote.c, client/gtk/trade.c, client/gtk/offline.c, client/gtk/gui.c, client/gtk/Makefile.am: Added notifications. Many thanks to Patrick who wrote the basis for the patch. 2011-09-18 Roland Clobus * server/robber.c: Fix a crash when moving the pirate before a robber was visible. 2011-09-10 Roland Clobus * server/gtk/main.c: Fit the server in 1024x768. 2011-08-18 Micah Bunting * client/gtk/trade.c: Follow GNOME HIG (no frames) * editor/gtk/editor.c, common/gtk/common_gtk.c, common/gtk/common_gtk.h: Move build_frames to common location. * server/gtk/main.c: Follow GNOME HIG (no frames) * client/gtk/identity.c: Code simplification. 2011-08-10 Micah Bunting * server/gtk/main.c: Code cleanup. 2011-08-05 Micah Bunting * editor/gtk/editor.c: Follow GNOME HIG (no frames) 2011-08-03 Roland Clobus * client/ai/greedy.c: Fix compiler warnings about mixed enums. 2011-07-25 Micah Bunting * editor/gtk/editor.c, client/gtk/gui.c: Add fullscreen. 2011-07-25 Roland Clobus * Makefile.am, client/gtk/frontend.h, client/gtk/resource-view.gob, client/gtk/resource.c, client/gtk/legend.c, client/gtk/gui.c, client/gtk/Makefile.am, client/gtk/gui.h: Move all display functions of resources to resource-view.gob. Also fix the .gob make rules. Also use cairo for the display of the resources, which allows for fractional coordinates and smooth resizing. 2011-07-20 Roland Clobus * common/notifying-string.gob: make reindent 2011-07-14 Roland Clobus * common/gtk/theme.c, common/gtk/gtkcompat.h: Restore compatibility with Debian Stable. 2011-07-06 Roland Clobus * common/gtk/player-icon.c, common/gtk/polygon.c, common/gtk/polygon.h, client/gtk/player.c, client/gtk/quote-view.c: Replace GdkGC. 2011-07-01 Roland Clobus * common/gtk/theme.c: Replace GDK deprecated functions. * client/gtk/identity.c: Replace GDK deprecated functions. 2011-06-26 Roland Clobus * MinGW/Makefile.am, pioneers.nsi.in: Fix the Windows installer. (Taken from the 0.12.4 branch) 2011-06-13 Roland Clobus * common/gtk/player-icon.c, common/gtk/player-icon.h, common/gtk/common_gtk.c, common/log.c, common/log.h, server/gtk/main.c, server/gold.c, server/player.c, server/trade.c, server/server.h, server/pregame.c, NEWS, client/callback.h, client/gtk/callbacks.c, client/gtk/name.c, client/gtk/frontend.h, client/gtk/player.c, client/gtk/quote.c, client/gtk/chat.c, client/gtk/offline.c, client/gtk/gui.c, client/gtk/identity.c, client/gtk/connect.c, client/common/client.c, client/common/client.h, client/common/callback.c, client/common/player.c, client/help/C/pioneers.xml, client/ai/ai.c, client/ai/lobbybot.c: Change 'viewer' to 'spectator'. * meta-server/main.c, server/pregame.c, client/gtk/offline.c, client/common/player.c: Remove unused variables. Thanks to gcc-4.6 for finding them. 2011-06-05 Roland Clobus * configure.ac, client/callback.h, client/gtk/callbacks.c, client/gtk/name.c, client/gtk/frontend.h, client/gtk/offline.c, client/gtk/Makefile.am, client/gtk/connect.c, client/common/client.c, client/common/client.h, client/common/callback.c, client/ai/ai.h, client/ai/greedy.c, client/ai/Makefile.am, client/ai/ai.c, client/ai/lobbybot.c: Use NotifyingString as the only place to store the name and style of the player. Fix a race condition in connect.c which whould result in a crash when the dialog was shown after a failed connection. To be able to use NotifyingString, the initialisation of glib is split from the other init functions. * editor/gtk/editor.c: Fix compiler warning 2011-06-04 Roland Clobus * common/gtk/guimap.c, common/gtk/guimap.h, common/map.c, common/map.h: Replace detection of the location of the cursor on the map with GdkRegion by mathematics. 2011-05-31 Roland Clobus * common/gtk/gtkcompat.h, configure.ac, client/gtk/gui.c, client/gtk/connect.c: Restore compatibility with Debian Stable. 2011-05-20 Roland Clobus * common/gtk/guimap.c: Prefer bridge over settlement. 2011-05-14 Roland Clobus * common/gtk/guimap.c, common/gtk/guimap.h, common/gtk/polygon.c, common/gtk/polygon.h, client/gtk/identity.c: Use cairo in guimap.c 2011-05-04 Roland Clobus * editor/gtk/editor.c: Upgrade to GTK 2.24 2011-05-03 Roland Clobus * common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/histogram.c: Migrate histogram.c to cairo. 2011-04-30 Roland Clobus * client/gtk/resource.c, client/gtk/legend.c, client/gtk/gui.c, client/gtk/gui.h: Upgrade gui.c to GTK 2.24 2011-04-29 Roland Clobus * common/gtk/guimap.c, client/gtk/resource.c: Replace gdk_draw_drawable. * client/gtk/connect.c, configure.ac: Upgrade to GTK 2.24 2011-02-23 Micah Bunting * editor/gtk/editor.c, common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/gui.c: Add pan and zoom for the scroll wheel. 2011-02-23 Roland Clobus * common/gtk/theme.c, common/gtk/theme.h, common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/legend.c, client/gtk/quote-view.c, client/gtk/histogram.c: Move terrain drawing code to theme. 2011-02-21 Micah Bunting and Roland Clobus * editor/gtk/editor.c, common/map.c, common/map.h: Resize the map with insert and remove at both ends. 2011-02-18 Micah Bunting * common/map.c: Use new accessor functions. 2011-02-16 Micah Bunting * common/map.c: Fixed infinite loop for large maps. 2011-02-15 Roland Clobus * client/gtk/gameover.c: Remove second log entry about winning. 2011-02-13 Roland Clobus * client/common/player.c: Translate the name of the additional points. 2011-02-05 Roland Clobus * client/gtk/identity.c: Use array for dice. 2011-02-05 Matt Zagrabelny * common/game.c, common/game.h, common/gtk/game-rules.c, common/gtk/game-rules.h: Added checkbox to enable experimental Cities and Knights expansion rules. * server/gtk/main.c: Store the value of the checkbox. * common/gtk/colors.c, common/gtk/colors.h, client/gtk/identity.c: Use colored dice for Cities and Knights. 2011-01-26 Roland Clobus * configure.ac: Work version is 0.12.5. 2011-01-26 Roland Clobus * Released 0.12.4. 2011-01-26 Roland Clobus * MinGW/gdk-pixbuf.loaders, MinGW/Makefile.am, pioneers.nsi.in, macros/type_socklen_t.m4, configure.ac, Makefile.am, README.MinGW: Fixed the MinGW port. * client/ai/lobbybot.c: Mention 0.12.4. * docs/README.release: Use the tag for the release build. 2011-01-23 Roland Clobus * client/gtk/data/themes/ccFlickr/Makefile.am: Fix typo in path. 2011-01-15 Roland Clobus * NEWS: Updated for release of 0.12.4 * Makefile.am: Remove intltool-*.in, fixes 'make distcheck' on Debian stable 2011-01-10 Roland Clobus * common/Makefile.am: Fix build for Mac OSX (don't use echo -n), with thanks to Camillo Lugaresi (camillol@users.sourceforge.net) for reporting and testing. 2011-01-08 Roland Clobus * README.Cygwin: Added information about gob2 2010-12-29 Roland Clobus * client/common/client.c, client/ai/ai.c: Added a logbot, as suggested by Andreas Steinel * common/gtk/gtkbugs.c: Fixed and explained the guard around Gtk bug 56070. 2010-12-10 Roland Clobus * client/common/client.c: Don't process zero num_soldiers on reconnect, to avoid setting statistics for viewers. 2010-12-08 Roland Clobus * common/gtk/gtkbugs.c, common/gtk/gtkbugs.h, client/gtk/gold.c, client/gtk/player.c, client/gtk/discard.c: Remove code for column resizing (was needed only for Gtk+ 2.6) 2010-12-07 Roland Clobus * common/gtk/gtkbugs.c, common/gtk/gtkbugs.h: Remove workaround for tooltips, because 2.12 is the minimum required version in configure.ac 2010-11-24 Ron Yorgason * pioneers.nsi.in, server/Makefile.am, server/north_america.game: After nearly six years, this map finally moved from the contrib section on the website to the distributed version. 2010-11-10 Matt Perry * pioneers.nsi.in, server/Makefile.am, server/ubuntuland.game: New layout in the shape of the Ubuntu logo. 2010-11-07 Roland Clobus * client/gtk/plenty.c: Show the right amount to select in the year of plenty dialog after the dialog was closed. 2010-10-31 Roland Clobus * server/develop.c, client/ai/greedy.c: Let computer player trade after playing a monopoly development card. Play development card when the required resource can be got or when it can be obtained by trade. 2010-10-26 Roland Clobus * configure.ac: Add -lm when needed (rint, sqrt). * editor/gtk/editor.c, common/gtk/game-rules.c, common/gtk/common_gtk.c, common/state.c, common/log.c, common/cards.c, server/gtk/main.c, server/turn.c, client/gtk/plenty.c, client/gtk/resource-table.c, client/gtk/name.c, client/gtk/gold.c, client/gtk/resource.c, client/gtk/quote.c, client/gtk/develop.c, client/gtk/legend.c, client/gtk/gameover.c, client/gtk/avahi-browser.c, client/gtk/discard.c, client/gtk/monopoly.c, client/gtk/settingscreen.c, client/gtk/chat.c, client/gtk/gui.c, client/gtk/connect.c, client/gtk/histogram.c, client/common/develop.c, client/common/player.c, client/ai/greedy.c, client/ai/ai.c, client/ai/lobbybot.c: Update and reenable translator hints. 2010-10-25 Roland Clobus * admin-scripts: Added various scripts to automate the meta-server. * getVersions.sh, kill-game.sh: Moved to admin-scripts. 2010-10-24 Roland Clobus * common/state.c: Fix bug introduced on 2010-10-20 * common/state.c: g_return_if_fail was not required. 2010-10-20 Roland Clobus * common/game.c, common/game.h, common/state.c, common/state.h, server/player.c: Renamed sm_vformat to game_vprintf and try_recv to game_vscanf, for better generic location. 2010-10-15 Roland Clobus * configure.ac: Extra quotes for GOB2 check, needed for Debian Stable. 2010-10-14 Roland Clobus * server/gold.c: Set gold counter to zero after automatic distribution of gold. 2010-10-13 Roland Clobus * server/player.c, server/server.h, server/main.c: Automatically quit a game that is started on the metaserver that has no human player for 30 minutes. * pioneers.nsi.in: Adding en_GB and gl. 2010-10-07 Roland Clobus * common/notifying-string.gob, common/Makefile.am, configure.ac, Makefile.am, client/gtk/name.c, client/gtk/frontend.h, client/gtk/offline.c, client/gtk/connect.c: Ensure that the name of the player is always up to date in any view. 2010-10-06 Roland Clobus * configure.ac: Make $(ECHO) work on Cygwin too * README.Cygwin: Updated to match Cygwin 1.7 * configure.ac: Server appears to work in Cygwin 2010-10-05 Roland Clobus * client/gtk/gui.c, server/gtk/main.c, common/gtk/common_gtk.c, common/gtk/common_gtk.h: Added a close button on tab pages. Based on a patch by Anti Sullin and layout suggestions from http://www.gtkforums.com/about4027.html 2010-09-22 Roland Clobus * common/gtk/gtkbugs.c, common/gtk/guimap.c, client/gtk/histogram.c: Build with full deprecation checks on Gtk+ 2.20.1 2010-09-21 Roland Clobus * server/theme_preview.game: Game to test the look of a new theme. 2010-09-02 Roland Clobus * common/network.c: Return CONNECT_FAIL when connection fails. 2010-09-01 Roland Clobus * client/gtk/avahi.c: Stop attempt to register Avahi on error. 2010-06-26 Roland Clobus * server/main.c, server/admin.c, server/admin.h: Quit when socket is not available. * server/player.c: Quit when only computer players are present. 2010-06-14 Roland Clobus * meta-server/main.c: Fixed leak of open sockets when out of games. 2010-06-12 Roland Clobus * bash_completion: Completion rules for bash. 2010-06-08 Roland Clobus * client/gtk/connect.c: Use row variable to add elements to the table. * debian/control, debian/changelog, configure.ac, server/gtk/main.c, server/gtk/Makefile.am, server/avahi.c, server/avahi.h, server/main.c, server/Makefile.am, Makefile.am, po/POTFILES.in, client/gtk/avahi.c, client/gtk/avahi.h, client/gtk/avahi-browser.c, client/gtk/avahi-browser.h, client/gtk/Makefile.am, client/gtk/connect.c: Added Avahi support. Many thanks to Andreas Steinel who provided the ground work. * client/gtk/avahi.c, client/gtk/avahi-browser.c, client/gtk/avahi-browser.h: Use resolved IP-address for Avahi. 2010-06-06 Roland Clobus * client/gtk/discard.c, client/gtk/gold.c: Replace fixes size buffer, use ngettext. 2010-05-25 Roland Clobus * server/server.c, server/meta.c: Fill Game.hostname at the right place. 2010-05-14 Roland Clobus * client/gtk/connect.c: Fix capitalization again. 2010-05-13 Roland Clobus * client/gtk/connect.c: Add ordering to connect dialog. * server/pregame.c: Fix compiler warning. * common/gtk/player-icon.c, common/game.c, common/game.h, server/player.c, server/server.h, client/gtk/name.c, client/gtk/offline.c, client/common/player.c: Add function determine_player_type and variable default_player_style. * client/gtk/offline.c: Show better message when not connected. * client/common/client.c: Don't show 'Waiting for your turn' for viewers. Added full stop for several instructions. * editor/gtk/game-resources.c, editor/gtk/editor.c, editor/gtk/game-buildings.c, common/gtk/game-rules.c, common/gtk/game-settings.c, common/cards.c, server/gtk/main.c, client/gtk/interface.c, client/gtk/name.c, client/gtk/gold.c, client/gtk/player.c, client/gtk/quote.c, client/gtk/develop.c, client/gtk/legend.c, client/gtk/trade.c, client/gtk/gameover.c, client/gtk/discard.c, client/gtk/settingscreen.c, client/gtk/offline.c, client/gtk/gui.c, client/gtk/connect.c: Adjust capitalization. * common/gtk/common_gtk.c: Add caption to dialog. 2010-04-27 Roland Clobus * server/player.c: Don't show 'This game starts soon' for the last player to enter the game. * server/pregame.c: When all players are present, stop the tournament timer. * server/pregame.c: Reset the statistics for viewers. * client/common/player.c: Added a missing full stop. 2010-04-07 Roland Clobus * client/ai/greedy.c: Play soldier before starting the turn when own resource is blocked. 2010-03-27 Roland Clobus * client/gtk/monopoly.c, client/common/player.c: Use en_US spelling 2010-03-11 Roland Clobus * client/gtk/data/themes/FreeCIV-like/theme.cfg, client/gtk/data/themes/Wesnoth-like/theme.cfg: Fix the themes to avoid drawing black letters on a black background. (Fixes Ubuntu bug #530988) * client/gtk/data/themes/ccFlickr: Added a new theme written by Aaron Williamson 2010-03-09 Roland Clobus * editor/gtk/game-devcards.c, editor/gtk/game-devcards.h, common/cards.h, common/cards.c, po/POTFILES.in, client/callback.h, client/gtk/develop.c, client/common/develop.c: Add tooltip with description of the development cards. (Many thanks to aaron@copiesofcopies.org who wrote the basis for the patch 2008-04-12) 2010-03-02 Roland Clobus * client/ai/greedy.c: Let the AI select only available resources. * configure.ac: Upgrade to GTK+ to 2.12 and glib to 2.16. * configure.ac, common/Makefile.am: Fixes the previous patch to common/Makefile.am. The newest version of libtool.m4 did not publish ECHO. 2010-02-28 Roland Clobus * meta-server/main.c: Fix some memory leaks. * common/Makefile.am: Use variables for sed and echo. (Thanks to Hans Fugal who wrote the initial patch) 2010-02-16 Roland Clobus * kill-game.sh: Added maintenance script for the meta-server. * server/player.c: Stop and deregister the tournament timer when the time has passed. Cleanup all players that disconnected during the registration persiod, to fix the bug that the added computer players would leave the game thinking that they are viewers. With the timer still running, and even restarting this would cause a fork bomb. 2010-02-10 Roland Clobus * getVersions.sh: Update for many distributors * meta-server/main.c: Fix a resource leak which would cause the meta- server to stop sending the names of the games eventually. 2010-01-10 Roland Clobus * pioneers.nsi.in: Update the Windows installer to include all DLLs. * Makefile.am: Invoke indent twice to fix unstable reindents. 2009-12-31 Roland Clobus * common/network.c: Fix FTBFS for Windows. 2009-11-29 Roland Clobus * editor/gtk/editor.c: Use the correct size for the icons in the context menu. * editor/gtk/editor.c, common/gtk/guimap.c, common/gtk/guimap.h: The editor can set/unset nosetup nodes. 2009-11-04 Roland Clobus * configure.ac: Work version is 0.12.4 2009-11-04 Roland Clobus * Released 0.12.3 2009-11-04 Roland Clobus * docs/README.release: Mention the .in files * client/ai/lobbybot.c: Mention 0.12.3 * NEWS: Release notes for 0.12.3 2009-10-25 Roland Clobus * xmldocs.make, omf.make: Synchronized with gnome-common, to remove warnings. * pioneers.nsi.in: Theme pixmaps have moved. 2009-10-15 Roland Clobus * client/gtk/interface.c: No beep after the robber has moved. * client/gtk/gui.c: Fix double keyboard shortcut in Game menu. * common/gtk/theme.c, client/gtk/data/themes/Iceland/theme.cfg, client/gtk/data/themes/FreeCIV-like/theme.cfg, client/gtk/data/themes/Makefile.am: Remove special handling of old default theme. * client/gtk/data/themes/*.png: Removed, because not used anymore. 2009-09-30 Roland Clobus * client/gtk/gui.h: Add extra debug information. 2009-09-26 Roland Clobus * common/gtk/theme.c: Only add the default theme when no other theme has been added. * client/gtk/data/themes/FreeCIV-like/Makefile.am, client/gtk/data/themes/FreeCIV-like/gold.png, client/gtk/data/themes/Iceland.am, client/gtk/data/themes/Iceland/board.png, client/gtk/data/themes/Iceland/sea.png: Add and mention the images that are shared from the (old) default theme. * client/gtk/data/themes/Makefile.am: Mention the Classic theme. * client/gtk/data/themes/Classic/*: Added the Classic theme (the images are from client/gtk/data/themes) 2009-09-22 Roland Clobus * editor/gtk/game-resources.c, editor/gtk/game-devcards.c, editor/gtk/game-buildings.c, common/gtk/game-settings.c, client/gtk/admin-gtk.c, client/gtk/connect.c: Set sensible page increment and set page_size to zero for all GtkAdjustments, to avoid warnings on the console. * docs/pioneers-meta-server.6: Added all commandline options, updated the BUGS section. * meta-server/main.c: Write a pid file, based on patch #2813162, written by Bas Wijnen. 2009-09-16 Roland Clobus * common/gtk/theme.c, docs/pioneers.6: Scan for user themes in $XDG_DATA_HOME/pioneers/themes, based on patch #1939885 written by Aaron (hasqldiesel@users.sourceforge.net) 2009-09-14 Roland Clobus * client/gtk/connect.c: Fixed a memory leak that was reported by cppcheck. 2009-09-13 Bas Wijnen * Makefile.am: Suppress GNU make specific warnings. 2009-09-06 Roland Clobus * common/network.c, common/network.h: Use all available protocols when connecting to a server. Fixes Debian bug #530032, Ubuntu bug #375745. * meta-server/main.c: Use a format string for the call to syslog. 2009-08-29 Roland Clobus * editor/gtk/game-resources.c, editor/gtk/game-devcards.c, editor/gtk/game-resources.h, editor/gtk/game-buildings.c, editor/gtk/game-devcards.h, editor/gtk/game-buildings.h, common/gtk/game-rules.c, common/gtk/game-rules.h, common/gtk/game-settings.c, common/gtk/game-settings.h, common/gtk/metaserver.c, common/gtk/metaserver.h, common/gtk/select-game.c, common/gtk/select-game.h, configure.ac, client/gtk/plenty.c, client/gtk/resource-table.c, client/gtk/resource-table.h, client/gtk/player.c, client/gtk/quote-view.h, client/gtk/settingscreen.c, client/gtk/chat.c, client/gtk/gui.c, client/gtk/connect.c: Prepare for GTK3 by implementing more strict deprecation rules. * po/fr.po: Fixed a typo (thanks to Olivier Berger for reporting) 2009-08-27 Roland * client/gtk/gui.c, client/gtk/legend.c: Show legend dialog without scrollbars when it is shown as a separate window. * macros/gnome-autogen.sh: Synchronized with gnome-common, to add support for automake-1.10. * editor/gtk/editor.c, common/gtk/game-rules.c, common/gtk/theme.c, common/gtk/guimap.c, common/game.c, common/map.c, server/gtk/main.c, server/meta.c, server/turn.c, server/pregame.c, server/admin.c, server/buildutil.c, client/gtk/player.c, client/gtk/legend.c, client/gtk/trade.c, client/gtk/quote-view.c, client/gtk/settingscreen.c, client/gtk/gui.c, client/gtk/connect.c, client/common/client.c, client/ai/greedy.c, client/ai/ai.c: make reindent * common/gtk/metaserver.c: Reenable support for Gtk 2.6. * configure.ac, pioneers.nsi.in: Fixes for Windows. 2009-07-08 Steve Langasek * server/main.c: If no game file is specified and there are more than 4 players, use the 5/6 player board by default. 2008-06-27 Bas Wijnen * docs/pioneers-editor.6, docs/Makefile.am: Add manual page for pioneers-editor. 2008-05-04 Roland Clobus * docs/pioneers-server-gtk.6, docs/pioneers-server-console.6, server/gtk/main.c, server/server.c, server/server.h, server/main.c, client/help/C/pioneers.xml: Use less memory for server-console. Add support for games in $XDG_DATA_HOME/pioneers. 2008-05-01 Roland Clobus * configure.ac: Work version is 0.12.3 2008-05-01 Roland Clobus * Released version 0.12.2 2008-05-01 Roland Clobus * server/player.c: The tournament minute has 60 seconds again, instead of only one. (Fix for 2008-03-24) * client/common/callback.c: Client send rejected quote again. (Fix for 2008-04-23) * NEWS: Release notes for 0.12.2 * client/ai/lobbybot.c: Mention 0.12.2 2008-04-27 Roland Clobus * configure.ac: Work version is 0.12.2 2008-04-27 Roland Clobus * Released version 0.12.1 2008-04-27 Roland Clobus * server/player.c, server/server.h: Added version 0.12. * client/gtk/data/splash.svg: Version 0.12. * docs/README.release: Added note for protocol changes. * configure.ac, README.subversion: Fix for previous change, the options are now 'IPv4' and 'unspecified'. IPv6 does not work, the name 'localhost' is not a IPv6 name. * common/network.c: Remove debug code from previous commit. * NEWS: Release notes for 0.12.1 * docs/README.release: Updated the release notes * client/ai/lobbybot.c: Mention 0.12.1 2008-04-23 Roland Clobus * configure.ac, README.subversion, common/network.c: Specify IPv4 or IPv6 for sockets. * server/turn.c, server/player.c, server/trade.c, server/server.h, server/pregame.c, client/common/client.c, client/common/callback.c, docs/server_states_trade.dot: Simplified the state machine for trade, this fixes a bug that could overflow the stack when a client did not acknowledge that the trade has ended. * configure.ac: Protocol to 0.12.1, due to the change in trade. * server/south_africa.game: New map, created by Petri Jooste 2008-03-26 Roland Clobus * common/gtk/aboutbox.c: Add translator_credits. * String freeze for 0.11.4 2008-03-24 Roland Clobus * server/player.c, server/server.h: Tournament timer improvements: Only start the timer on players, not viewers, reset the time when the last player left. 2008-03-23 Roland Clobus * configure.ac, autogen.sh: After running autoupdate, the minimum version for autoconf is 2.61, and intltool 0.35. * configure.ac, po/LINGUAS: Upgrade intltool to 0.35. * client/callback.h, client/gtk/offline.c, client/common/main.c, client/common/Makefile.am: Removed commandline argument to override the language. * client/common/i18n.c: No longer in use. * common/state.c: Removed compiler warning. * client/gtk/interface.c, client/gtk/player.c, client/gtk/audio.c, client/gtk/audio.h, client/gtk/chat.c, client/gtk/gui.c, client/gtk/Makefile.am, client/gtk/gui.h: Added silent mode, as requested by Mike Pater (SF #1655951) * common/gtk/metaserver.c, common/gtk/metaserver.h, common/gtk/Makefile.am, server/gtk/main.c, client/gtk/connect.c: Easier selection for meta servers (by using a combo box) * docs/pioneers-meta-server.6, meta-server/main.c: When -p is not specified, the meta server will not be able to create games. * meta-server/main.c: Add tournament mode to games created on the meta server. * configure.ac: No need to attempt to create MS icons when Gtk+ is not present. * editor/gtk/game-devcards.c: Remove some warnings when all warnings are turned on. * server/gtk/main.c: Use consistent capitalisation for Start/Stop Server. * client/help/C/pioneers.xml: Use menuchoice tags, update for the meta server combo. 2008-03-12 Roland Clobus * server/gtk/main.c, server/player.c, server/server.c, server/server.h, server/main.c, server/admin.c, client/ai/ai.c: Make all names for the computer players unique. Based on a patch by chrysn@users.sourceforge.net 2008-02-13 Roland Clobus * server/turn.c, server/admin.c, server/admin.h: Added 'admin fix-dice' to fix the dice roll. * editor/gtk/pioneers-editor.desktop -> editor/gtk/pioneers-editor.desktop.in, editor/gtk/Makefile.am, configure.ac, server/gtk/pioneers-server.desktop -> server/gtk/pioneers-server.desktop.in, server/gtk/Makefile.am, Makefile.am, po/POTFILES.in, client/gtk/data/pioneers.desktop -> client/gtk/pioneers.desktop.in, client/gtk/data/Makefile.am, client/gtk/Makefile.am: Added i18n support for *.desktop files. pioneers.desktop had to be moved, to keep 'make distcheck' happy. * po/POTFILES.skip: Added the very old, unmaintained admin-gtk.c to the list of excluded files for i18n. * common/network.c: Only use AF_UNSPEC (instead of PF_UNSPEC too). 2008-01-22 Roland Clobus * client/help/C/Makefile.am: Create Yelp like output. * client/help/C/pioneers.xml: Add index to the FAQ entries. * common/state.c, common/state.h: More stack information for push and pop. * server/player.c: When reviving a player that was previously reconnecting, do not push an extra mde_pre_game, otherwise an assert will be triggered. * editor/gtk/editor.c, common/buildrec.h, common/map_query.c, common/gtk/guimap.c, common/game.c, common/map.c, common/map.h, common/buildrec.c, server/gtk/main.c, server/turn.c, server/trade.c, server/server.h, server/pregame.c, client/callback.h, client/gtk/interface.c, client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/quote-view.c, client/gtk/gui.c, client/common/client.c, client/common/build.c, client/common/setup.c, client/common/client.h, client/common/turn.c, client/common/robber.c, client/common/callback.c, client/common/player.c, client/ai/greedy.c, client/ai/ai.c: Refactoring of the map code. In the server code: use the map members of the hex/edge/node instead of passing a map pointer. In the client code: remove the static map object for the Gtk+ part, to fix a crash when running on OpenBSD. * server/player.c: When (re)connecting, reuse the disconnected players when there are no empty players slots available. 2007-12-25 Roland Clobus * common/gtk/game-rules.c, common/gtk/game-settings.c, common/game.c, common/state.c, common/network.c, server/gtk/main.c, server/meta.c, server/turn.c, server/player.c, server/server.c, server/main.c, client/gtk/resource-table.c, client/gtk/develop.c, client/gtk/monopoly.c, client/gtk/gui.c, client/gtk/connect.c, client/common/client.c, client/common/develop.c, client/common/player.c, client/ai/greedy.c, client/ai/lobbybot.c: Reactivate comments for translators that were deactivated by 'make reindent'. 2007-12-16 Roland Clobus * editor/gtk/game-resources.c, editor/gtk/game-devcards.c, editor/gtk/game-buildings.c, common/gtk/game-rules.c, common/gtk/gtkbugs.c, common/gtk/game-rules.h, common/gtk/game-settings.c, common/gtk/gtkbugs.h, common/gtk/select-game.c, server/gtk/main.c, client/gtk/resource-table.c, client/gtk/resource-table.h, client/gtk/resource.c, client/gtk/gui.c, client/gtk/connect.c: Added support for the new tooltip API of GTK+ 2.12 2007-11-22 Roland Clobus * client/ai/greedy.c: Don't attempt to buy a development card when the stock is empty. 2007-11-22 Roland Clobus and Bas Wijnen * The patches 2007-11-22 and 2007-09-16 fix CVE-2007-5933. (Both fixed bugs would cause a DoS by crashing the server) 2007-11-22 Bas Wijnen * common/state.c: Fix for an assert when a connection is broken before the state machine has been properly initialized. 2007-10-30 Roland Clobus * client/gtk/quote.c, client/gtk/legend.c, client/gtk/trade.c, client/gtk/offline.c, client/gtk/gui.c, client/gtk/gui.h: Use scrollbars where needed. The splash screen hides the chat. 2007-10-23 Roland Clobus * common/gtk/game-rules.c, common/gtk/game-rules.h, common/game.c, common/game.h, server/gtk/main.c, server/turn.c, server/server.h, client/gtk/settingscreen.c: Check for victory either at the end of the turn, or when a point is scored. Many thanks to Lalo Martins for the original patch. 2007-10-14 Roland Clobus * editor/gtk/pioneers-editor.desktop, server/gtk/pioneers-server.desktop, client/gtk/data/pioneers.desktop: Removed double menu entry (Reported by Jussi Schultink on launchpad.net) 2007-10-07 Roland Clobus * configure.ac: Work version is 0.11.4 2007-10-07 Roland Clobus * Released version 0.11.3 2007-10-07 Roland Clobus * common/state.c: Purge cache when disconnecting. * server/player.c: Cached players must receive broadcasts. * common/network.c: Log when a connection has a time out. 2007-10-03 Roland Clobus * configure.ac, server/server.c: Use sigaction instead signal. 2007-09-16 Roland Clobus * common/network.h, common/state.c, common/network.c: The server could crash when a SIGPIPE was received. 2007-08-11 Roland Clobus * common/network.c: Added net_would_block and net_write_error to help porting the server to MS Windows (based on a patch by Keishi Suenaga). * server/player.c: When a player is still connecting, don't reuse the player number. 2007-08-08 Roland Clobus * getVersions.sh: Updated for SF 2007-08-05 Roland Clobus * configure.ac: Work version is 0.11.3 * docs/README.release: updated svn branch command. 2007-08-05 Roland Clobus * Released version 0.11.2 2007-08-05 Roland Clobus * server/robber.c: Do not use sm_send in the server, but player_send. * common/network.c: Added \n after a log message. * pioneers.spec.in: Corrected download location, changed packager name. * docs/README.release: Updated release script * README, NEWS, client/ai/lobbybot.c: Prepare for release 0.11.2 2007-08-05 Bas Wijnen * client/common/client.c: Fixed OK button in discard dialog 2007-08-04 Roland Clobus * common/map_query.c: Added checks against NULL pointers, based on the patch by ffaadd (#1767378), which could crash the server. 2007-08-01 Roland Clobus * client/help/C/pioneers.xml, client/help/C/images/quote.png, client/help/C/images/trade.png, client/help/C/images/server-create.png, client/help/C/images/plenty-dialog.png, client/help/C/images/sea.png, client/help/C/images/monopoly-dialog.png, client/help/C/images/map.png, client/help/C/images/pasture.png, client/help/C/images/field.png, client/help/C/images/desert.png, client/help/C/images/player-summary.png, client/help/C/images/hill.png, client/help/C/images/identity.png, client/help/C/images/brick.png, client/help/C/images/grain.png, client/help/C/images/actions.png, client/help/C/images/forest.png, client/help/C/images/gameover-dialog.png, client/help/C/images/join-private-dialog.png, client/help/C/images/discard-dialog.png, client/help/C/images/resources.png, client/help/C/images/client.png, client/help/C/images/wool.png, client/help/C/images/gold.png, client/help/C/images/ore.png, client/help/C/images/connect-dialog.png, client/help/C/images/servers-dialog.png, client/help/C/images/lumber.png, client/help/C/images/mountain.png, client/help/C/images/legend-dialog.png: Updated the manual * docs/README.release: Added a note about the manual 2007-07-29 Roland Clobus * pioneers.nsi.in: Added city_wall.png 2007-07-22 Roland Clobus * configure.ac: Work version is 0.11.2 * NEWS: Fixed a typo * client/common/client.c, client/common/gui.c: Fixed for gcc-2.95 * client/gtk/name.c: make reindent 2007-07-22 Roland Clobus * Released version 0.11.1 2007-07-22 Roland Clobus * pioneers.spec.in: Updated. It works for openSUSE 10.2. * server/gtk/main.c: Cosmetic changes. * server/server.c, server/server.h, server/admin.c, server/admin.h: Added 'send-message', 'help', 'info' to the admin commands. The addition of 'send-message' is based on a patch by David Hall * common/gtk/theme.c: The default theme is now 'Tiny'. * common/gtk/guimap.c: Use the full size for the map. The font size in the server was effectively always 1pt. * pioneers.nsi.in: Added Afrikaans and Japanese. * pioneers.nsi.in: Added style-*.png * client/ai/computer_names: Corrected spelling of 'Gödel' * README, NEWS: Updated for 0.11.1 * client/gtk/data/splash.svg: Updated to 0.11 * client/ai/lobbybot.c: Updated to 0.11 2007-07-21 Roland Clobus * server/server.h: Added robber undo in 0.11 change list. 2007-07-21 Roland Clobus * common/gtk/player-icon.c, common/gtk/player-icon.h, common/gtk/Makefile.am, server/player.c, server/server.h, server/pregame.c, client/callback.h, client/gtk/callbacks.c, client/gtk/name.c, client/gtk/frontend.h, client/gtk/data/Makefile.am, client/gtk/player.c, client/gtk/quote-view.c, client/gtk/chat.c, client/gtk/offline.c, client/gtk/connect.c, client/common/client.c, client/common/client.h, client/common/callback.c, client/common/player.c, client/ai/ai.c: Added a customizable player icon. Based on a patch by Giancarlo Capella . 2007-07-21 Bas Wijnen * common/map.c, server/player.c, server/robber.c, server/server.h, client/callback.h, client/gtk/interface.c, client/gtk/callbacks.c, client/gtk/frontend.h, client/common/client.c, client/common/client.h, client/common/robber.c, client/common/callback.c, client/ai/greedy.c: Show the robber in the new place when choosing who to steal from. 2007-07-21 Roland Clobus * configure.ac, pioneers.nsi.in: Add minimum required Gtk+ version from configure.ac in the installer builder script. 2007-07-21 Bas Wijnen * ChangeLog, docs/README.game, common/gtk/gtkbugs.c, common/state.c, configure.ac, po/ChangeLog, client/gtk/quote.c, client/help/C/custom.xsl: Clean up whitespace. 2007-07-20 Roland Clobus * common/state.c, common/state.h, configure.ac, server/gold.c, server/resource.c, server/turn.c, server/player.c, server/develop.c, server/trade.c, server/discard.c, server/robber.c, server/server.h, server/pregame.c, server/buildutil.c, client/common/client.c: Updating the protocol to 0.11. All messages sent by the server are versioned. Based on a patch by Bas Wijnen . 2007-07-19 Roland Clobus * common/gtk/guimap.c: gmap->area was unref'd too often. * client/callback.h, client/gtk/player.c: Cleanup of player->user_data. * server/gtk/main.c: Allow themes. 2007-06-05 Roland Clobus * common/gtk/gtkbugs.c: action_set_sensitive is still (Gtk+-2.10) not fixed, so the version check is disabled. * client/gtk/connect.c: Removed a debug message. 2007-05-13 Roland Clobus * editor/gtk/game-parameters.h, editor/gtk/editor.c, editor/gtk/Makefile.am, editor/gtk/game-parameters.c, common/map-query.c, common/gtk/common_gtk.h, common/gtk/game-settings.c, common/gtk/game-settings.h, common/gtk/Makefile.am, common/gtk/commmon_gtk.c, common/game.c, common/map.c, common/game.h, common/map.h, server/gtk/main.c, client/gtk/connect.c: Added victory point check. Game rules are split from game settings. * editor/gtk/game-settings.c -> common/gtk/game-rules.c, editor/gtk/game-settings.h -> common/gtk/game-rules.h: Renamed * pioneers.spec.in: Sorted the language list, added af and ja. 2007-05-13 Brian Wellington * editor/gtk/game-buildings.c, common/map_query.c, common/gtk/guimap.c, common/gtk/guimap.h, common/cost.c, common/game.c, common/cost.h, common/state.c, common/map.h, common/buildrec.h, server/turn.c, server/discard.c, server/server.h, server/pregame.c, server/buildutil.c, client/callback.h, client/gtk/interface.c, client/gtk/frontend.c, client/gtk/frontend.h, client/gtk/data/Makefile.am, client/gtk/data/city_wall.png, client/gtk/player.c, client/gtk/legend.c, client/gtk/settingscreen.c, client/gtk/gui.c, client/gtk/identity.c, client/common/client.c, client/common/client.h, client/common/stock.c, client/common/callback.c, client/common/player.c: Added support for city walls (using 'extension' in the protocol) 2005-05-13 Roland Clobus * server/player.c, server/server.h: Use 'extension' for broadcasts. 2007-05-08 Roland Clobus * editor/gtk/editor.c, common/gtk/guimap.c, common/gtk/select-game.c, common/gtk/guimap.h, common/gtk/select-game.h, server/gtk/main.c, client/gtk/gui.c: Map preview in the server. 2007-04-29 Brian Wellington * common/gtk/polygon.c, common/gtk/polygon.h, common/gtk/guimap.c: Add the poly_draw_with_border() function to draw bordered polygons. 2007-04-29 Brian Wellington * client/gtk/gui.c: Add support for NULL pointer for shortcuts. 2007-04-29 Roland Clobus * common/gtk/guimap.c: Simplified code to handle better updates. 2007-04-29 Brian Wellington * client/gtk/gui.c: Add a workaround for gtk bug #434261 that causes strings like (Fn) in toolbar labels to be mishandled. 2007-04-29 Roland Clobus * client/gtk/gui.c: Upgraded the code to 2.6, and allow for toolbuttons without shortcut keys. * common/network.c: Don't log the keepalive messages. 2007-04-28 Roland Clobus * common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/interface.c, client/gtk/frontend.c: Single click actions are set enabled with the same mechanism as the GtkActions. 2007-04-17 Roland Clobus * common/state.c, server/pregame.c: Disconnect during mode_pregame could crash the server. 2007-04-15 Bernd Ernesti * editor/gtk/editor.c, meta-server/main.c, server/gtk/main.c, server/main.c: #include where needed. 2007-04-09 Roland Clobus * pioneers.nsi.in: Added a better check for the Gtk+ runtime, and allow the installer to continue, even when no runtime is found. 2007-04-08 Roland Clobus * configure.ac: Reorder the language codes (now alphabetical) 2007-03-04 Roland CLobus * common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/identify.c: Fix for #1589423. Sets a minimum size, to avoid drawing a polygon with only (0,0) as coordinates. 2007-02-18 Roland Clobus * server/player.c: Fix for #1473765. Don't recycle player objects when a (re)connect is in progress. * common/game.c, common/game.h, common/state.h, common/cards.c, server/develop.c, client/callback.h, client/gtk/settingscreen.c, client/common/client.c, client/common/develop.c: Renamed STAT_UNIVERSITY enum. * client/gtk/develop.c: Cluster development cards of the same type. 2006-11-18 Roland Clobus * client/ai/computer_names: Fixed a typo (present since 2000 :-) 2006-10-14 Roland Clobus * client/gtk/gui.c: Move the chat panel to the right or the bottom of the screen. Based on a patch by Rich Harkins which required a restart. * ChangeLog: Enabled a BOM, so the comment about utf-8 is no longer required. * configure.ac, server/gtk/main.c, server/server.c, server/server.h, server/main.c: Replaced alarm with g_timeout_add. * common/network.c: Added wrapper functions for reporting error messages. 2006-10-01 Rich Harkins * Makefile.am, server/gtk/main.c: Launch the client from the server. 2006-09-16 Roland Clobus * configure.ac: Subversion repository is at 0.10.3. * server/gtk/Makefile.am, server/gtk/pioneers-server.rc: Add Windows icon for the server. 2006-09-16 Roland Clobus * Released version 0.10.2 2006-09-16 Roland Clobus * editor/gtk/editor.c, server/gtk/main.c, server/main.c, client/gtk/offline.c, client/ai/ai.c: Added --version. * common/network.h, common/network.c, meta-server/main.c, server/player.c, server/server.c, server/server.h, server/admin.c: Use net_closesocket to close a socket (Windows port closes sockets differently). * common/gtk/gtkbugs.c: Cannot press a button twice without moving the cursor out and in again. The workaround depends on the runtime version of Gtk+, not the version at compile time. (Refinement of the patch 2006-09-03) * server/meta.c: Log when unknown messages are sent from the meta server. * Makefile.am: Add 48x48 icons (for Windows XP, Thumbnail view). 2006-09-12 Stefan Walter * common/Makefile.am: Creation of version.h compatible with FreeBSD. 2006-09-12 Roland Clobus * server/meta.c, meta-server/main.c: Meta server disconnects unresponsive servers. Server shows a message when the meta server disconnects. * client/gtk/interface.c: Don't change GUI state when a second quote is issued. * common/game.c: Return NULL pointer when game not found. 2006-09-10 Bas Wijnen * common/game.c: Treat errors in files as end-of-file, and an incomplete line at the end as a complete line. 2006-09-10 LT-P * server/iles.game, server/GuerreDe100ans.game: Added island-discovery-bonus. 2006-09-10 Roland Clobus * configure.ac, meta-server/main.c: Added glib commandline parsing, --debug, --syslog-debug, --version. Fixed a bug for the current number of players. Added the servername to the syslog output. * client/gtk/data/Makefile.am: Added splash.svg to the tarball. * common/state.c, server/player.c, server/trade.c, server/server.h, server/pregame.c: Reconnect during trade. 2006-09-07 Roland Clobus * client/gtk/data/Makefile.am: Add rule for splash.png 2006-09-03 Thomas Schürger * common/gtk/gtkbugs.c: Enabled workaround for toolbuttons that could not be pressed twice. 2006-09-03 Roland Clobus * client/gtk/data/Makefile.am, editor/gtk/Makefile.am: Remove the *.res files from the tarball (partly revert 2006-09-01) * Changed ChangeLog to utf8. 2006-09-02 Roland Clobus * client/gtk/data/splash.png: Removed, replaced by splash.svg * configure.ac, Makefile.am, client/gtk/Makefile.am, client/gtk/data/Makefile.am: Fix themedir for Windows. * pioneers.nsi.in, client/gtk/data/tick.png, client/gtk/data/cross.png: Images are no longer in use. * configure.ac: Nicer feedback from configure script when Gtk not present. 2006-09-01 Roland Clobus * editor/gtk/Makefile.am, client/gtk/data/Makefile.am, Makefile.am: Add the resource files for Microsoft Windows to the tarball. 2006-08-31 Roland Clobus * client/gtk/data/splash.svg: Version 0.10 is shown now. * docs/README.release: What to do extra when the protocol changes. * README.Cygwin: Found more Cygwin packages. 2006-08-26 Roland Clobus * configure.ac: Subversion repository is at 0.10.2. * docs/README.release: Added the command for tagging the repository. 2006-08-26 Roland Clobus * Released version 0.10.1 2006-08-26 Roland Clobus * client/ai/lobbybot.c: Make it build with gcc-2.95 again. * server/gtk/main.c, server/meta.c: Changed reported hostname to overridden hostname. If it is left empty, the metaserver will do a hostname lookup. * common/network.h: Include time.h too. * client/help/C/pioneers.xml: Rename AI -> computer player. * client/common/client.c, server/develop.c: Year of Plenty communicates with "plenty %R" instead of "receives %R". * client/gtk/interface.c: Disable single click cursor until all players have discarded or chosen gold. * common/network.c, common/network.h: Cleanup the timer when the session is closed. * client/help/C/pioneers.xml: Updated the FAQ. * server/conquest.game, server/conquest+ports.game: Added nosetup for the smaller islands. 2006-08-26 Bas Wijnen * common/network.h, common/state.c, common/state.h, common/network.c, server/player.c, server/admin.c: Send keepalive packets when connection is idle, and disconnect when no reply is received. * client/gtk/player.c: Don't beep for players which are seen during connecting. * client/gtk/trade.c, client/gtk/quote-view.c, client/gtk/quote-view.h: Show maritime trades only when they match the supply, or no supply is specified. 2006-08-21 Bas Wijnen * common/gtk/config-gnome.c: Added include file. * server/gold.c, client/callback.h, client/common/client.c, client/ai/greedy.c: Notify players when resources are not distributed due to empty bank. 2006-08-17 Roland Clobus * server/player.c: Use ERR as prefix when too many connections are made. * server/gtk/main.c, server/server.c, server/server.h, server/main.c, server/admin.c: No global GameParams object. Added --file to server-console. * docs/README.game, common/buildrec.h, common/map_query.c, common/game.c, common/game.h, common/map.h, common/buildrec.c, server/turn.c, server/conquest.game, server/conquest+ports.game, server/player.c, server/server.h, server/pregame.c, server/four-islands.game, server/buildutil.c, client/callback.h, client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/player.c, client/gtk/settingscreen.c, client/common/client.c, client/common/build.c, client/common/client.h, client/common/player.c: Added island-discovery-bonus keyword. 2006-08-17 Bas Wijnen * AUTHORS, editor/gtk/editor.c: Show full authorlist in editor's help->about, and add Brian to the full list. 2006-08-15 Roland Clobus * client/gtk/connect.c: Don't connect to a new game at the meta server as a viewer. * common/network.h, common/log.c, common/network.c, README.subversion, configure.ac, server/gtk/main.c, server/main.c, client/gtk/callbacks.c, client/gtk/state.c, client/gtk/offline.c, client/gtk/gui.h, client/ai/ai.c: Added --debug for debug messages, instead of --enable-logging in configure. * Makefile.am: Added dependency for icons. * editor/gtk/Makefile.am, client/gtk/data/Makefile.am: Cleanup the *-icon.o files. (Enables 'make distcheck' on Cygwin) * common/gtk/aboutbox.c: Added homepage, and cleanup. * README.subversion, configure.ac: Added --without-help. * configure.ac, server/admin.c, client/gtk/player.c, common/gtk/config-gnome.c: Cleanup configure.ac. * Makefile.am: Remove trailing slash. 2006-08-14 Bas Wijnen * client/gtk/data/Makefile.am, editor/gtk/Makefile.am: Remove incorrect direct dependency on *.rc files by executables. 2006-08-14 Roland Clobus * editor/gtk/Makefile.am, README.subversion, configure.ac, Makefile.am, client/gtk/data/Makefile.am, client/gtk/Makefile.am: Reduce the need for netpbm. * client/gtk/connect.c: Translate the data from the meta server. * server/lobby.game: Tournament-time is not a keyword anymore. * client/gtk/interface.c: No build cursor during trade. * server/gtk/main.c, server/server.c, server/server.h, server/main.c, server/admin.c: Fix regression of random seating order dd 2006-08-10 2006-08-14 Bas Wijnen * client/callback.h, client/gtk/offline.h, client/common/client.c, client/common/main.c, client/ai/ai.h, client/ai/greedy.c, client/ai/ai/c: Make AI quit nicely instead of calling exit. Also quit nicely if setup is impossible instead of crashing. 2006-08-11 Roland Clobus * client/common/client.c: Marked a string for translation. * client/gtk/interface.c: More robust gui_state changes. 2006-08-10 Roland Clobus * client/common/client.c: Don't say 'A is now A' in the client. * server/serer.c: Fix for a scope bug made 2006-08-05. * server/player.c, client/common/client.c: i18n for NOTE messages, close connection when a bad version is encountered, clearer message when entering a tournament game. * configure.ac: Protocol is now 0.10 * common/game.c, common/game.h: Don't broadcast tournament-time. * docs/README.game: Information about *.game files * editor/gtk/editor.c, common/game.c, common/map.c, common/game.h, common/map.h, server/x.game, server/star.game, server/canyon.game, server/pond.game, server/seafarers.game, server/lorindol.game, server/seafarers-gold.game: Deserts need chit sequence numbers, chit length must be correct. * server/gtk/main.c, server/server.c, server/server.h: Replace global 'random_order'. 2006-08-05 Roland Clobus * server/gtk/main.c, server/meta.c, server/server.c, server/server.h, server/main.c, server/admin.c: Replaced a variable of global scope with a variable of file scope to make -r implied when -m is specified. * common/gtk/guimap.c: Use gmap->area when it exists. * editor/gtk/editor.c, client/ai/lobbybot.c: Added translator comments. 2006-08-05 Bas Wijnen * client/gtk/connect.c: Avoid use of comma-operator. * client/ai/greedy.c: Fix possible infinite loop after playing monopoly card. * docs/README.states, docs/client_states.fig: Updated to new situation (the changes below, and changes which had been made before). * common/state.c, common/state.h, client/common/client.c, client/common/callback.c: Improved state handling. 2006-08-04 Roland Clobus * client/gtk/interface.c: Enable roll dice for the second game of the same instance of the client. * client/common/client.c: Don't show waiting for your turn for viewers. * client/ai/greedy.c: AI can trade lumber again. * server/turn.c: Unregister from the metaserver at game over. * server/coeur.game: Don't shuffle gold tiles. * client/gtk/gui.c: Settings used wrong variable. * README.subversion: Information about building from the subversion repository. * editor/gtk/editor.c, common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/callbacks.c, client/gtk/gui.c, client/gtk/gui.h: Show nosetup nodes in the editor and in the client (for players only). * client/common/resource.c: Fix regression of 2006-07-27. * docs/README.release, client/callback.h, client/gtk/interface.c, client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/chat.c, client/common/client.c, client/common/client.h, client/common/Makefile.am, client/common/player.c, client/common/chat.c, client/ai/ai.h, client/ai/greedy.c, client/ai/Makefile.am, client/ai/ai.c, client/ai/lobbybot.c: Added robot for the lobby. * client/gtk/interface.c, client/gtk/frontend.h, client/gtk/discard.c, client/gtk/state.c, client/gtk/offline.c, client/gtk/gui.c: Leave a game without quitting the client. 2006-08-01 Bas Wijnen * configure.ac: Mention install root in notification. * configure.ac, Makefile.am: Let configure.ac not touch AM_* variables. 2006-07-29 Roland Clobus * editor/gtk/editor.c: Added keyboard shortcuts to the editor * client/common/client.c: Allow a player to initiate trade when he has no resources 2006-07-27 Bas Wijnen * editor/gtk/editor.c, common/gtk/theme.c, common/gtk/select-game.c, common/game.c, common/map.c, common/game.h, common/state.c, common/log.c, common/map.h, common/state.h, common/network.c, meta-server/main.c, server/player.c, server/pregame.c, client/gtk/callbacks.c, client/gtk/player.c, client/gtk/settingscreen.c, client/gtk/state.c, client/gtk/gui.c, client/gtk/connect.c, client/common/develop.c, client/common/robber.c, client/common/client.c, client/common/client.h, client/common/resource.c, client/common/player.c, client/ai/ai.c: Use dynamic instead of static memory to allow arbitrary large strings in most situations. Still use static strings for network traffic, to avoid denial of service opportunities. * server/gtk/main.c: Show all authors. 2006-07-27 Bas Wijnen * macros/Makefile.am, editor/gtk/Makefile.am, editor/gtk/pioneers-editor.rc, editor/Makefile.am, docs/Makefile.am, common/gtk/aboutbox.c, common/gtk/Makefile.am, common/Makefile.am, meta-server/Makefile.am, configure.ac, server/gtk/Makefile.am, server/pregame.c, server/Makefile.am, Makefile.am, autogen.sh, client/gtk/pioneers.rc, client/gtk/data/themes/Tiny/Makefile.am, client/gtk/data/themes/Iceland/Makefile.am, client/gtk/data/themes/FreeCIV-like/Makefile.am, client/gtk/data/themes/Wesnoth-like/Makefile.am, client/gtk/data/themes/Makefile.am, client/gtk/data/Makefile.am, client/gtk/offline.c, client/gtk/Makefile.am, client/common/Makefile.am, client/help/Makefile.am, client/ai/Makefile.am, client/Makefile.am: Move to a single-Makefile system. * server/pregame.c: Remove unused static variable. 2006-07-25 Roland Clobus * server/lobby.game: New, non-empty map * server/main.c: create a listening admin socket only when requested from the command line * client/gtk/player.c, client/gtk/gui.c, client/gtk/gui.h: Announce new players and viewers when they enter 2006-07-05 Roland Clobus * editor/gtk/editor.c, common/gtk/theme.c, common/gtk/config-gnome.c, common/game.c, common/state.c, common/network.c, server/gtk/main.c, client/gtk/offline.c, client/gtk/gui.c, client/common/client.c, client/common/player.c: Removed translation tags in g_error and g_warning * docs/README.release: Update steps for a release * server/lobby.game: Added an empty map, for the lobby * editor/gtk/editor.c, common/gtk/config-gnome.c, configure.ac, server/gtk/main.c, client/gtk/offline.c, client/gtk/gui.c, client/ai/ai.c: Removed Glib 2.6 #ifdef code 2006-06-23 Roland Clobus * getVersions.sh: View the versions in the various distributions 2006-06-06 Roland Clobus * Released version 0.9.64 * Subversion commit date: 2006-06-19 2006-06-06 Roland Clobus * server/main.c: Allow games with more than 3 victory points, when started from the commandline * server/trade.c: Restored to 0.9.52 version * Subversion commit date: 2006-06-19 2006-05-30 Roland Clobus * Released version 0.9.63 2006-05-30 Roland Clobus * configure.ac, client/gtk/quote.c, client/gtk/offline.c, client/common/client.h, client/common/callback.c: Minimum requirement is Glib 2.6 and Gtk+ 2.6. Remove use of Gtk+ 2.8 icon. Fixed compiler warnings 2006-05-28 Roland Clobus * Released version 0.9.62 2006-05-28 Roland Clobus * client/gtk/interface.c, client/gtk/frontend.h, client/gtk/player.c, client/gtk/quote.c, client/gtk/trade.c, client/gtk/quote-view.c, client/gtk/quote-view.h: Rewrite of quote.c * server/trade.c: Throw away the quotes before ending the trade 2006-05-28 Bas Wijnen * client/callback.h, client/gtk/name.c, client/gtk/frontend.h, client/gtk/offline.c, client/gtk/connect.c, client/common/client.c, client/common/client.h, client/common/callback.c, client/common/player.c, client/ai/ai.c: Separate requested name and viewerness from actual values during the game, add commandline-option to select meta-server in gtk client. 2006-05-27 Roland Clobus * client/gtk/gui.c: Moved legend, game settings and dice histgram from help to game menu. * client/gtk/offline.c, client/gtk/gui.c: Fixed the help. When an error occurs, show it in the chat log. 2006-05-26 Bas Wijnen * common/network.c: Write logged escaped bytes as bytes, now words. * common/gtk/theme.c: Allow scaling scalable themes to 0. 2006-05-26 Roland CLobus * editor/gtk/editor.c, server/gtk/main.c, server/main.c, client/gtk/offline.c, client/ai/ai.c: Quit when unknown commandline options are passed * client/help/C/pioneers.xml: Describe all chat commands 2006-05-25 Bas Wijnen * common/state.c, common/state.h, server/player.c: Make server handle broken pipe correctly. 2006-05-25 Roland Clobus * common/gtk/common_gtk.c, common/log.c, common/log.h, client/common/chat.c: Better layout for the log to the console 2006-05-24 Roland Clobus * configure.ac: Nicer feedback when something is not built 2006-05-23 Roland Clobus * editor/gtk/editor.c, server/gtk/main.c, server/main.c, client/gtk/offline.c: Updates comments for translators * client/common/client.c: Removed g_warning() text from translations 2006-05-21 Giancarlo Capella * client/gtk/frontend.h, client/gtk/resource.c, client/gtk/data/grain.png, client/gtk/data/wool.png, client/gtk/data/ore.png, client/gtk/data/Makefile.am, client/gtk/data/lumber.png, client/gtk/data/brick.png, client/gtk/legend.c, client/gtk/gui.c, client/gtk/gui.h: Visual display of the resources in the resources panel and the legend 2006-05-20 Roland Clobus * common/quoteinfo.c, common/game.c, common/quoteinfo.h, client/callback.h, client/gtk/interface.c, client/gtk/plenty.c, client/gtk/frontend.h, client/gtk/gold.c, client/gtk/quote.c, client/gtk/legend.c, client/gtk/trade.c, client/gtk/discard.c, client/gtk/chat.c, client/common/client.c, client/common/client.h, client/common/resource.c, client/common/callback.c, client/common/player.c: Added const for resources * client/gtk/Makefile.am: Added quote-view.c and quote-view.h * client/gtk/trade.c, client/gtk/quote-view.c, client/gtk/quote-view.h: Moved code from trade.c to quote-view.c and replaced frames * client/gtk/player.c, client/gtk/discard.c: More descriptive asserts * client/gtk/resource-table.c, client/gtk/resource-table.h: New functions added for trade and quote * meta-server/main.c, client/gtk/gui.c: Signed->unsigned cleanup 2006-05-17 Bas Wijnen * client/ai/greedy.c: Fix for AI segfault. * client/gtk/interface.c: Allow reuse of client after winning by playing a soldier. 2006-05-14 Bas Wijnen * server/pregame.c, client/common/client.c: Fix reconnect procedure, add RSETUP state command. 2006-05-13 Roland Clobus * client/help/C/custom.xsl, client/help/C/pioneers.xml, client/help/C/Makefile.am: Manual updates. Manual conversion to html and htmlhelp added. 2006-05-09 Bas Wijnen * docs/pioneers-meta-server.6: Updated. 2006-05-02 Bas Wijnen * client/gtk/interface.c, client/gtk/plenty.c, client/gtk/frontend.h: Disable Ok button in Year of Plenty dialog when too few resources are selected. * server/pregame.c, client/callback.h, client/gtk/name.c, client/gtk/frontend.h, client/gtk/offline.c, client/gtk/connect.c, client/gtk/identity.c, client/common/client.c, client/common/client.h, client/common/callback.c, client/ai/ai.c: Allow players to connect as viewer. 2006-04-30 Roland Clobus * editor/gtk/editor.c, server/gtk/main.c, server/main.c, po/POTFILES.in, client/gtk/offline.c, client/ai/ai.c: Use GOptionContext for command line parsing * editor/gtk/editor.c: Make the last loaded/saved game persistent 2006-04-25 Roland Clobus * README.Cygwin: Updated for Subversion * client/gtk/gui.c: Message window as editable 2006-04-23 Roland Clobus * docs/README.release: Added a small guide for the steps needed to make a release 2006-04-21 Roland Clobus * common/gtk/common_gtk.h, common/gtk/common_gtk.c, client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/player.c, client/gtk/trade.c, client/gtk/chat.c: Easier /beep * client/gtk/player.c: Make disconnected icon symmetrical. 2006-04-18 Roland Clobus * common/gtk/guimap.c, common/gtk/common_gtk.c, common/cost.c, common/game.c, common/map.c, server/gtk/main.c, server/meta.c, server/server.c, client/gtk/interface.c, client/gtk/resource-table.c, client/gtk/frontend.c, client/gtk/name.c, client/gtk/gold.c, client/gtk/resource.c, client/gtk/player.c, client/gtk/develop.c, client/gtk/legend.c, client/gtk/discard.c, client/gtk/offline.c, client/gtk/gui.c, client/gtk/identity.c, client/gtk/histogram.c, client/common/develop.c, client/common/build.c, client/common/setup.c, client/common/client.c, client/common/stock.c, client/common/resource.c, client/common/turn.c, client/common/player.c, client/common/callback.c: Remove old-style function definition warnings. 2006-04-14 Roland CLobus * common/network.c: Add the time to the logged network traffic. 2006-04-09 Roland Clobus * Released version 0.9.61 2006-04-09 Bas Wijnen * client/callback.h, client/gtk/plenty.c, client/gtk/monopoly.c, client/common/client.c: If somehow the dialog was closed, show it again 2006-04-09 Roland Clobus * client/help/C/pioneers.xml, client/help/C/images/discards.png, client/help/C/images/place-robber.png, client/help/C/images/quote.png, client/help/C/images/trade.png, client/help/C/images/messages.png, client/help/C/images/plenty-dialog.png, client/help/C/images/monopoly-dialog.png, client/help/C/images/steal-from.png, client/help/C/images/map.png, client/help/C/images/chat.png, client/help/C/images/player-summary.png, client/help/C/images/identity.png, client/help/C/images/actions.png, client/help/C/images/gameover-dialog.png, client/help/C/images/join-private-dialog.png, client/help/C/images/discard-dialog.png, client/help/C/images/resources.png, client/help/C/images/client.png, client/help/C/images/status.png, client/help/C/images/servers-dialog.png, client/help/C/images/connect-dialog.png, client/help/C/images/develop-cards.png client/help/C/images/legend-dialog.png: Updated screenshots for 0.9.61 * docs/pioneers.6, docs/pioneers-server-console.6, docs/pioneers-server-gtk.6: Updated the man pages * common/gtk/config-gnome.c: Fixed the regression of 0.9.23 * server/admin.c: Fixed the assert when a connection is made to the admin interface 2006-04-08 Roland Clobus * client/gtk/gui.c: Disable the unused menu item 'Leave Game' 2006-04-06 Bas Wijnen * common/game.c: Remove compiler warnings. 2006-04-03 Roland Clobus * common/gtk/guimap.c, common/gtk/guimap.h, client/gtk/interface.c, client/gtk/gui.c, client/gtk/gui.h: Implemented 'single click build' for the movement of ships. (Click anywhere to cancel) * client/gtk/gui.c: Always show the map after a (re)connect. * Makefile.am: let 'make restorepo' work with Subversion. * configure.ac, Makefile.am, macros/Makefile.am: add the macros subdirectory in the tarball (without the .svn directory) * client/common/player.c: Remove compiler warnings 2006-04-02 0.9.61 Bas Wijnen * server/gtk/main.c: Split interface for running and non-running state. * client/common/develop.c: Disallow road building if there's no place to build it. * client/ai/greedy.c: Do a proper check for roadbuilding. 2006-03-30 0.9.57 Roland Clobus * client/help/C/pioneers.xml: Updated documentation. Corrected spelling to en_us. * client/callback.h, client/common/chat.c, client/common/client.h, client/common/player.c: Fixed a crash in the client when a /beep is sent when not all players are present yet. * server/meta.c, server/server.c, server/server.h: Unregister from the meta-server when the server stops. * client/gtk/gui.c: Activate the map page when trade tabs have been shown. Also hide the legend tab page after a connect (when turned off in the preferences). 2006-03-30 Samual Wright * client/help/C/pioneers.xml: Fixed a typo 2006-03-30 Repository converted from cvs to svn 2006-03-14 0.9.56 Roland Clobus * server/pregame.c: Show disconnected players when reconnecting 2006-02-09 0.9.55 Roland Clobus * configure.ac, meta-server/README.protocol: New version for the meta server * meta-server/main.c: Partly reverse the patch for 0.9.54, disable the 'create' command globally, instead of per connection. 2006-02-08 Roland Clobus * client/gtk/data/.cvsignore, editor/gtk/.cvsignore: Ignore icons 2006-02-07 0.9.54 Roland Clobus * pioneers.nsi.in: Added Swedish translation to installer. * client/gtk/connect.c, client/gtk/gui.c, editor/gtk/editor.c, server/server.c, server/gtk/main.c: Initialize GError * to NULL * meta-server/main.c: Fixes crashes in the metaserver that did allow the creation of new servers even when the metaserver does not support it. * common/gtk/guimap.c (calc_edge_poly): Apply gravity to ships and bridges. 2006-02-04 0.9.53 Roland Clobus * server/main.c, server/player.c, server/server.c, server/server.h, server/turn.c, server/gtk/main.c: Fixed memory leaks, at game over the GTK server will enable its interface when all players have left. * server/trade.c: Fixed a memory leak (based on a patch by Bas Wijnen ) * common/gtk/guimap.c (guimap_cursor_move): Implemented single click build for ship/bridge situations * README.Cygwin, configure.ac, client/gtk/data/Makefile.am, editor/gtk/Makefile.am: The icons for Microsoft Windows executables are generated using netpbm. * client/gtk/data/pioneers.ico, editor/gtk/pioneers-editor.ico: Removed, they are now generated from the corresponding SVG files. 2006-02-02 0.9.52 Roland Clobus * client/gtk/callbacks.c (frontend_new_bank): Removed compiler warning. * autogen.sh: Require automake1.7 as minimum version. 2006-01-27 0.9.51 Stefan Walter * client/gtk/settingscreen.c: Patch for gcc-2.95 2006-01-26 0.9.50 Brian Wellington * pioneers.spec.in: Added Swedish translation 2006-01-25 0.9.49 Roland Clobus * client/gtk/frontend.c, common/gtk/gtkbugs.c, common/gtk/gtkbugs.h: For Gtk+-2.6, don't disconnect the shortcut keys when the action is set to insensitive. * pioneers.nsi.in: Added Wesnoth-like theme * NEWS, README.Cygwin: Updated for the release 2006-01-22 0.9.48 Roland Clobus * configure.ac: Scrollkeeper only built when present, and when libgnome is present. Protect script variables with "" * configure.ac: Added AC_CONFIG_AUX_DIR * pioneers.nsi.in: Check the presence of the Gtk+ runtime before installing. 2006-01-17 0.9.47 Bas Wijnen * (Almost) all files: Change FSF postal address, change my e-mail address, fixed copyright statements. * server/server.h, server/player.c (player_by_name): Make player_by_name a static function. 2006-01-15 0.9.46 Roland Clobus * client/common/chat.c, client/gtk/chat.c, client/gtk/connect.c, client/gtk/name.c, common/game.h, server/player.c, server/server.h: Limit the maximum length for the chat and player name. 2006-01-13 0.9.45 Roland Clobus * configure.ac: Added Swedish translation, fixed locale dir * debian/control, debian/pioneers-client.install, debian/pioneers-client.menu, debian/pioneers-server-gtk.install, debian/pioneers-server-gtk.menu, debian/rules: Updated Debian files * debian/copyright: Updated download URL 2006-01-03 0.9.44 Roland Clobus * configure.ac, client/gtk/data/Makefile.am, editor/gtk/Makefile.am, server/gtk/Makefile.am: The svg renderer is called with width and height. * client/gtk/Makefile.am: Reverted Fink patch of 0.9.40 * editor/gtk/Makefile.am: Patch for Fink 2006-01-02 0.9.43 Roland Clobus * configure.ac: Build online help only when both libgnome and scrollkeeper are present. * macros/gnome-autogen.sh: Added bootstrap script from gnome-common 2.12.0-1 * macros/ChangeLog, macros/Makefile.am, macros/aclocal-include.m4, macros/autogen.sh, macros/compiler-flags.m4, macros/curses.m4, macros/gnome-bonobo-check.m4, macros/gnome-common.m4, macroos/gnome-cxx-check.m4, macros/gnome-fileutils.m4, macros/gnome-gettext.m4, macros/gnome-ghttp-check.m4, macros/gnome-gnorba-check.m4, macros/gnome-guile-checks.m4, macros/gnome-libgtop-check.m4, macros/gnome-objc-checks.m4, macros/gnome-orbit-check.m4, macros/gnome-print-check.m4, macros/gnome-pthread-check.m4, macros/gnome-support.m4, macros/gnome-undelfs.m4, macros/gnome-vfs.m4, macros/gnome-x-checks.m4, macros/gnome-xml-check.m4, macros/gnome.m4, macros/linger.m4, macros/macros.dep, macros/need-declaration.m4, macros/.cvsignore: Remove the old GNOME1 macros. * autogen.sh: Use the gnome-autogen.sh from the macros directory if gnome-common not installed. * client/gtk/data/gnome-pioneers.png: Removed, is replaced by pioneers.png 2006-01-01 0.9.42 Roland Clobus * client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/gui.c, client/gtk/gui.h, client/gtk/histogram.c, client/gtk/histogram.h, client/gtk/legend.c, client/gtk/offline.c, client/gtk/settingscreen.c, client/gtk/trade.c, common/gtk/theme.c, common/gtk/theme.h: Update all images when the theme changes. Update the rules in the legend when a new game is started. 2005-12-30 Brian Wellington * Add theme based on Battle of Wesnoth artwork (patch from Phil Ezolt). 2005-12-30 0.9.41 Roland Clobus * common/gtk/config-gnome.c (config_get_string, config_get_int): Set the default_used flag in all code paths. 2005-12-29 Stephen Jacob * pioneers.spec.in: Added the new icons and desktop files 2005-12-25 Roland Clobus * client/gtk/guic, common/network.c, common/state.c, common/state.h, common/gtk/config-gnome.c, editor/gtk/editor.c, server/player.c, server/pregame.c, server/gtk/main.c: make reindent 2005-12-21 0.9.40 Roland Clobus * configure.ac, pioneers.nsi.in: Windows installer script. (nsis.sf.net) * client/gtk/Makefile.am, meta-server/Makefile.am: Added extra include for driver.o (needed for Fink port, based on the patch by Tristan Thiede) * configure.ac, client/gtk/data/Makefile.am, editor/gtk/Makefile.am, server/gtk/Makefile.am: Configurable SVG renderer. * .cvsignore: Ignore pioneers.nsi. * client/gt/data/pioneers.ico: Updated to match the icons of 0.9.38. * editor/gtk/Makefile.am, editor/gtk/pioneers-editor.ico, editor/gtk/pioneers-editor.rc: Windows icon for the editor. * NEWS: Updated for the release 2005-12-18 0.9.39 Roland Clobus * client/common/callback.c, client/gtk/interface.c: Fixed a crash when a robber could be placed in a game with more than six players. * common/network.h, common/state.c, common/state.h, server/player.c, server/pregame.c, server/server.h: Allow many connections to the server at once. 2005-12-11 0.9.38 Roland Clobus * client/gtk/Makefile.am, client/gtk/gui.c, client/gtk/data/Makefile.am, client/gtk/data/pioneers.desktop, editor/gtk/Makefile.am, editor/gtk/editor.c, editor/gtk/pioneers-editor.desktop, server/gtk/Makefile.am, server/gtk/main.c, server/gtk/pioneer-server.desktop: Use the new icons (automatically rendered from the svg files from 0.9.37) * client/gtk/data/.cvsignore, editor/gtk/.cvsignore, server/gtk/.cvsignore: Ignore the generated .png files 2005-12-05 0.9.37 Roland Clobus * client/gtk/data/pioneers.svg, editor/gtk/pioneers-editor.svg, server/gtk/pioneers-server.svg: Added icon files. 2005-11-23 0.9.36 Roland Clobus * configure.ac: No console window for graphical applications in MinGW port. 2005-11-15 0.9.35 Roland Clobus [Windows native port] * rules.make: Removed, functionality moved to configure.ac * client/gtk/pioneers.rc, client/gtk/data/pioneers.ico: Windows icon. * Makefile.am, configure.ac, client/Makefile.am, client/ai/Makefile.am, client/common/Makefile.am, client/gtk/Makfile.am, client/gtk/data/Makefile.am, client/gtk/data/themes/Makefile.am, client/gtk/data/themes/FreeCIV-like/Makefile.am, client/gtk/data/themes/Iceland/Makefile.am, client/gtk/data/themes/Tiny/Makefile.am, client/help/Makefile.am, client/help/C/Makefile.am, common/Makefile.am, common/gtk/Makefile.am, docs/Makefile.am, editor/Makefile.am, editor/gtk/Makefile.am, meta-server/Makefile.am, server/Makefile.am, server/gtk/Makefile.am: Stop using rules.make, all is managed from configure.ac * client/gtk/gui.c: Don't use gtk_icon_source_set_filename anymore, it does not allow relative paths, as needed for Windows and klik. * configure.ac: Use pio-develop@lists.sourceforge.net as contact email address. 2005-11-14 Brian Wellington * editor/gtk/editor.c: After a 'save as', remember the filename. 2005-11-09 Brian Wellington * editor/gtk/editor.c: File|New resets/redraws the map. Use the 'Save as' icon. Don't show the robber in the editor. 2005-10-23 0.9.34 Bas Wijnen * client/common/callback.c: Removed some debug text. 2005-10-23 Roland Clobus * Makefile.am, configure.ac: Whether the client, server, meta-server or editor are built is controlled from the configure script. * Makefile.am, README.MinGW: Added README.Cygwin and README.MinGW to the distributed tarball. * configure.ac, client/common/i18n.c, common/network.c, common/network.h: The code can be configured and built from the MinGW environment. Use send and recv instead of write and read. 2005-10-02 0.9.33 Roland Clobus * configure.ac: Enable debug, enable deprecation-check and enable logging were always active. 2005-10-02 0.9.32 Roland Clobus * configure.ac, client/gtk/offline.c, common/gtk/config-gnome.c, common/gtk/config-gnome.h, editor/gtk/editor.c, server/gtk/main.c: Added optional support for GLib-2.6 (g_key_file). For environments that cannot build the help, libgnome is no longer a build requirement. * client/callback.h, client/ai/greedy.c, client/common/setup.c, client/gtk/interface.c, common/map.h, common/map_query.c, common/gtk/guimap.h, server/robber.c: Replaced all casts to CheckFunc by functions with the correct prototype. This allows player of the PPC to play Pioneers again. Cleanup of unused arguments in the used functions. * configure.ac, common/network.c, meta-server/main.c: Replace the last uses of strerror by g_strerror. 2005-10-02 Bas Wijnen * client/ai/greedy.c: Do not trade if the wanted resource is not in the bank. (Fixes Debian bug #328880) 2005-09-25 0.9.31 Roland Clobus * configure.ac, rules.make, client/ai/Makefile.am, client/common/Makefile.am, client/gtk/Makefile.am, common/Makefile.am, common/gtk/Makefile.am, editor/gtk/Makefile.am, meta-server/Makefile.am, server/Makefile.am, server/gtk/Makefile.am: Moved $(debug_includes) from rules.make to configure.ac. There are now four new commandline options to ./configure. All four are per default enabled when --enable-maintainer-mode is given. The four are: --enable-warnings, --enable-debug, --enable-logging, --enable-deprecation-checks. This patch is based on a patch by Bas Wijnen. 2005-09-17 0.9.30 Roland Clobus * client/gtk/quote.c, common/gtk/config-gnome.c: Removed the definition of *_DISABLED_DEPRECATED to make the source build again 2005-09-17 Roland Clobus * README.Cygwin: Added gettext-devel as required package 2005-09-16 0.9.29 Roland Clobus * client/gtk/gui.c: Add #ifdef HAVE_HELP around static declaration * configure.ac, client/ai/Makefile.am, client/common/Makefile.am, common/Makefile.am, meta-server/Makefile.am, server/Makefile.am: Use GLib includes in Makefile.am where needed 2005-09-14 0.9.28 Bas Wijnen * client/gtk/frontend.c: Apply workaround for Gtk bug to action buttons. 2005-09-14 0.9.27 Bas Wijnen * editor/gtk/editor.c: Warn instead of crash when clearing nonexistant hex. Set minimum map size to 1, not 2. Set sensitivity of correct buttons when resize limits are hit. Let ports disappear correctly. * client/gtk/gold.c, client/gtk/discard.c: Reindented. 2005-09-13 0.9.26 Roland Clobus , based on the patch by Ferenc Bánhidi * configure.ac, client/gtk/gui.c, editor/gtk/editor.c: Disable online help if it cannot be built * client/ai/ai.c (ai_start_game), client/common/i18n.c (change_nls), client/gtk/connect.c (meta_create_notify): Use glib functions * client/common/main.c (run_main), common/network.c, common/network.h, meta-server/main.c (main), server/main.c (main) serverk/gtk/main.c (main): Use new functions net_init and net_cleanup, as preparation for the Windows native port 2005-09-13 Bas Wijnen * client/callback.h, client/ai/greedy.c, client/common/client.c, client/gtk/frontend.h, client/gtk/interface.c, client/gtk/plenty.c, client/gtk/resource-table.c, client/gtk/resource-table.h: Made function prototype with const bank * client/gtk/discard.c, client/gtk/gold.c: If somehow the dialog was closed, show it again 2005-09-13 Roland Clobus * common/gtk/gtkbugs.c, common/gtk/gtkbugs.h, common/gtk/Makefile.am, client/gtk/discard.c, client/gtk/gold.c, client/gtk/player.c: Moved fix for bug in Gtk-2.6 to gtkbugs.c 2005-09-09 0.9.25 Ferenc Bánhidi * configure.ac, client/common/i18n.c, po/hu.po: Added Hungarian translation 2005-09-09 Roland Clobus * client/common/client.c (mode_build_response): Remove debug code 2005-09-01 0.9.24 Roland Clobus * client/gtk/connect.c (meta_dlg_cb), client/gtk/frontend.c (gui_free), common/network.c (net_connect, net_free): Fixed memory leaks 2005-08-17 0.9.23 Roland Clobus * client/gtk/frontend.c (set_sensitive): Disable the hotkeys when the GtkAction is disabled 2005-08-14 0.9.22 Roland Clobus * client/gtk/connect.c: Fixed buffer overrun * client/gtk/gui.c: Fix for crash at startup with toolbar hidden 2005-08-05 0.9.21 Stefan Walter * meta-server/main.c: Added missing #includes for FreeBSD 2005-08-01 0.9.20 Roland Clobus * client/gtk/player.c (player_build_summary): Add missing line in summary for Gtk+-2.6 * common/gtk/aboutbox.c (aboutbox_display): Add close button to about dialog 2005-07-14 0.9.19 Roland Clobus * README.cygwin: Added instructions for building from CVS. * autogen.sh: Added automake-1.9 * configure.ac, client/gtk/Makefile.am, client/gtk/frontend.c, client/gtk/frontend.h, client/gtk/gui.c, client/gtk/offline.c, common/gtk/Makefile.am, editor/gtk/Makefile.am, server/gtk/Makefile.am: use libgnome+gtk instead of libgnomeui * Makefile.am: Renamed indent make target to reindent 2005-07-09 0.9.18 Roland Clobus * common/gtk/guimap.c: Single click build: when a ship and road can be built, a ship is chosen when the cursor is at sea, a road is chosen when the cursor is over land. 2005-07-07 Roland Clobus * client/common/gnocatan.c renamed to main.c * meta-server/gnocatan-meta-server.c renamed to main.c * server/server.c renamed to main.c * server/gnocatan-server.c renamed to admin.c, contains only admin code * server/gnocatan-server.h renamed to admin.h, contains only admin code * server/gtk/gnocatan-server-gtk.c renamed to main.c * server/server.c, server/server.h: moved server code from admin.c and admin.h to these files * client/common/Makefile.am, meta-server/Makefile.am, po/POTFILES.in, server/Makefile.am, server/gtk/Makefile.am: use the renamed files * pioneers.spec.in: Updated home page 2005-07-03 Roland Clobus * common/gtk/guimap.c, editor/gtk/editor.c: Use the Q_() macro for the short translatable strings 2005-07-02 Roland Clobus * client/help/C/pioneers.xml: Updated link to homepage * client/common/client.c: fixed the hello string (protocol change) 2005-06-29 Roland Clobus * client/help/C/pioneers-C.omf, client/help/C/pioneers.xml: updated help pages * docs/pioneers-meta-server.6, docs/pioneers-server-console.6, docs/pioneers-server-gtk.6, docs/pioneers.6, docs/pioneersai.6: updated man pages * client/gtk/offline: use Pioneers settings * docs/README.states: fix use of "Gnocatan" * client/gtk/gameover.c: Last translatable string with Gnocatan. * README, README.Cygwin, client/ai/ai.c, common/network.c, common/network.h, editor/gtk/editor.c, meta-server/README.protocol, meta-server/gnocatan-meta-server.c, server/archipel_gold.game, server/crane_island.game, server/gnocatan-server.c, server/pregame.c, server/gtk/gnocatan-server-gtk.c: Use "Pioneers" in the README files, renamed 'get_gnocatan_dir' to 'get_pioneers_dir', updated protocol for the hello message, use settings for Pioneers. * server/buildutil.c, server/develop.c, server/discard.c, server/glib-driver.c, server/glib-driver.h, server/gnocatan-server.h, server/gold.c, server/player.c, server/pregame.c, server/resource.c, server/robber.c, server/server.h, server/trade.c, server/turn.c, common/buildrec.c, common/buildrec.h, common/cards.c, common/cards.h, common/common_glib.c, common/common_glib.h, common/cost.c, common/cost.h, common/driver.c, common/driver.h, common/game.c, common/game.h, common/log.c, common/log.h, common/map.c, common/map.h, common/map_query.c, common/quoteinfo.c, common/quoteinfo.h, common/state.c, common/state.h, common/gtk/colors.c, common/gtk/colors.h, common/gtk/common_gtk.c, common/gtk/common_gtk.h, common/gtk/config-gnome.c, common/gtk/config-gnome.h, common/gtk/game-settings.c, common/gtk/game-settings.h, common/gtk/guimap.c, common/gtk/guimap.h, common/gtk/polygon.c, common/gtk/polygon.h, common/gtk/select-game.c, common/gtk/select-game.h, common/gtk/theme.c, common/gtk/theme.h, client/gtk/admin-gtk.c, client/gtk/callbacks.c, client/gtk/chat.c, client/gtk/develop.c, client/gtk/discard.c, client/gtk/frontend.c, client/gtk/frontend.h, client/gtk/gameover.c, client/gtk/gold.c, client/gtk/gui.h, client/gtk/histogram.c, client/gtk/histogram.h, client/gtk/identity.c, client/gtk/interface.c, client/gtk/legend.c, client/gtk/monopoly.c, client/gtk/name.c, client/gtk/player.c, client/gtk/plenty.c, client/gtk/quote.c, client/gtk/resource-table.c, client/gtk/resource-table.h, client/gtk/resource.c, client/gtk/settingscreen.c, client/gtk/state.c, client/gtk/trade.c, client/callback.h, client/ai/ai.h, client/ai/greedy.c, client/common/build.c, client/common/callback.c, client/common/chat.c, client/common/client.c, client/common/client.h, client/common/develop.c, client/common/gnocatan.c, client/common/i18n.c, client/common/player.c, client/common/resource.c, client/common/robber.c, client/common/setup.c, client/common/stock.c, client/common/turn.c: fix uses of the name "Gnocatan" in the header comments 2005-06-28 Roland Clobus * client/common/develop.c, client/gtk/player.c, client/gtk/settingscreen.c, editor/gtk/game-devcards.c: change the development card to 'Pioneer University' 2005-06-26 Steve Langasek * client/gtk/connect.c, server/gtk/gnocatan-server-gtk.c: Auto-migrate metaserver values from 'gnocatan.debian.net' to 'pioneers.debian.net' (done in a pretty ugly, hard-coded fashion, but this should be just a temporary hack) 2005-06-26 Roland Clobus * client/gtk/data/splash.svg, client/gtk/data/splash.png: Set name to Pioneers * client/gtk/gui.c: Use the correct splash image 2005-06-25 Steve Langasek * autogen.sh: tested with automake-1.8, so allow the package to be built using that version * macros/autogen.sh: fix broken references to configure.in (should now be configure.ac). * Makefile.am: drop the dist hook for debian/, it doesn't belong in the tarball * configure.ac, rules.make, client/Makefile.am, client/ai/Makefile.am, client/common/Makefile.am, client/gtk/Makefile.am, client/gtk/connect.c, client/gtk/gui.c, client/gtk/data/Makefile.am, client/gtk/data/themes/Makefile.am, client/gtk/data/themes/FreeCIV-like/Makefile.am, client/gtk/data/themes/Iceland/Makefile.am, client/gtk/data/themes/Tiny/Makefile.am, client/help/Makfile.am, client/help/C/Makefile.am, common/Makefile.am, common/gtk/Makefile.am, editor/Makefile.am, meta-server/gnocatan-meta-server.c, server/Makefile.am, server/gnocatan-server-console.c, server/gnocatan-server.c, server/gtk/Makefile.am, server/gtk/gnocatan-server-gtk.c: fix uses of the name "Gnocatan" in the source * configure.ac: change the PACKAGE name to "pioneers" * configure.ac, client/help/C/gnocatan.xml, meta-server/meta-report: change the default metaserver to pioneers.debian.net * client/ai/Makefile.am, client/common/Makefile.am, client/gtk/Makefile.am, common/Makefile.am, common/gtk/Makefile.am, editor/gtk/Makefile.am, meta-server/Makefile.am, server/Makefile.am, server/gtk/Makefile.am: change the names of the binaries being built * docs/Makefile.am, docs/pioneers.6, docs/pioneers-server-gtk.6, docs/pioneers-server-console.6, docs/pioneersai.6, docs/pioneers-meta-server.6: rename the manpages to match * rules.make, server/gnocatan-server-console.c: fix up all embedded paths to binaries to use the new names * client/gtk/connect.c, client/gtk/gui.c, common/gtk/aboutbox.c, editor/gtk/editor.c, meta-server/gnocatan-meta-server.c, server/gtk/gnocatan-server-gtk.c: fix names embedded in the GUI * client/gtk/data/gnocatan.desktop, server/gtk/gnocatan-server.desktop: fix both the display names and the paths to the binaries * Makefile.am, configure.ac, pioneers.spec.in: fix up the RPM packaging to match * client/gtk/data/pioneers.desktop, client/help/C/pioneers-C.omf, client/gtk/data/gnome-pioneers.png, client/help/C/pioneers.xml, server/gtk/pioneers-server.desktop, server/gtk/Makefile.am, client/gtk/data/Makefile.am, client/help/C/Makefile.am, client/gtk/gui.c, server/gtk/gnocatan-server-gtk.c: fix the names of installed data files * rules.make, editor/gtk/Makefile.am, common/gtk/aboutbox.c, client/ai/Makefile.am, client/gtk/Makefile.am, client/gtk/data/Makefile.am, client/gtk/data/themes/Makefile.am, client/gtk/data/themes/FreeCIV-like/Makefile.am, client/gtk/data/themes/Iceland/Makefile.am, client/gtk/data/themes/Tiny/Makefile.am, server/Makefile.am, server/gtk/Makefile.am, common/gtk/Makefile.am: fix remaining paths where data files are installed * configure.ac, rules.make, client/ai/ai.c, client/gtk/connect.c, client/gtk/gui.c, client/gtk/offline.c, common/network.c, common/network.h, meta-server/gnocatan-meta-server.c, meta-server/meta-report, server/gnocatan-server-console.c, server/gnocatan-server.c, server/meta.c, server/server.c, server/gtk/gnocatan-server-gtk.c: fix up all variables in the source, including environmental variables; support using old env variable names as fallbacks. 2005-06-05 Brian Wellington * common/game.c, common/game.h, common/map.c, common/map.h, editor/gtk/editor.c: Remove the chits field in the GameParams structure. 2005-06-05 0.9.17 Roland Clobus * configure.ac: Require GLib minimum version 2.4 * common/log.h: Use glib/gi18n.h 2005-05-26 0.9.16 Roland Clobus * common/game.c, common/game.h: Constness for params_copy. * common/map.c (layout_chits), server/server.c (game_free), server/gtk/gnocatan-server-gtk.c (build_game_settings): Fixed memory leaks. * common/gtk/guimap.c: Implemented the todo in the single click building. The cursor will switch between node and edge, whichever is closest. 2005-05-25 Brian Wellington * client/common/client.c, server/pregame.c: Send the number of development cards that have been bought to connecting clients, so that the client's state is correct after a reconnect. 2005-05-22 Roland Clobus * apply 'make indent' again 2005-05-19 0.9.15 Roland Clobus * nearly all: replaced numElems and UNUSED macros by the GLib macros G_N_ELEMENTS and G_GNUC_UNUSED 2005-05-17 0.9.14 Roland Clobus * client/ai/greedy.c (resource_desire): Fixed a typo from 0.9.13 2005-05-16 0.9.13 Roland Clobus * client/ai/greedy.c (resource_desire): Don't consider resources that have no value (fixes monopoly deadlock) 2005-05-15 Brian Wellington * client/ai/greedy.c: Rework the AI's maritime trading code to reduce the number of pointless trades and increase the effectiveness of trades. 2005-05-15 0.9.12 Roland Clobus * common/gtk/common_gtk.c: Removed GTK compatibility code. It is not needed since 2.4 is required. * common/gtk/guimap.c: Moved comments back that were moved by a make indent, such that the translators see them again. 2005-05-01 0.9.11 Roland Clobus * server/gtk/gnocatan-server-gtk.c (main): Enabled translations in the menu. * editor/gtk/editor.c: Use GINT_TO_POINTER and GPOINTER_TO_INT * editor/gtk/editor.c, editor/gtk/game-buildings.c, editor/gtk/game-devcards.c: Enabled some translations. * client/gtk/settingsscreen.c: Fixed a string 2005-04-24 Brian Wellington * common/map.[ch]: Add map_add_hex(). * client/gtk/gui.c, common/gtk/guimap.[ch]: Move map widget and event handling code to guimap.c 2005-04-24 Brian Wellington * common/gtk/guimap.[ch]: Add guimap_find_hex(). 2005-04-20 Brian Wellington * client/ai/greedy.c: Fix a problem with the AI's monopoly card support. * client/gtk/guimap.[ch], client/gtk/Makefile.am, common/gtk/guimap.[ch], common/gtk/Makefile.am: Move map display code to common/gtk. 2005-04-21 0.9.10 Roland Clobus * client/callback.h, client/common/resource.c, common/buildrec.h, common/cost.c, common/cost.h, server/resource.c, server/server.h: Add const for function prototypes. * client/ai/greedy.c: Use cost_* functions 2005-04-20 Brian Wellington * client/gtk/frontend.h, client/gtk/gui.c, client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/player.c, common/gtk/Makefile.am, common/gtk/colors.c, common/gtk/colors.h: Move non-client-specific code to common/gtk. 2005-04-20 0.9.9 Roland Clobus * rules.make, server/gnocatan-server-console.c: Add G_DISABLE_DEPRECATED, and replace the old functions. * server/gtk/gnocatan-server-gtk.c: Replace libgnomeui calls with libgnome and Gtk+ calls. * client/common/callback.c, client/gtk/gui.c, client/gtk/interface.c: No direct build of a city in the client. First a settlement has to be built. * common/network.c, meta-server/gnocatan-meta-server.c: Added code that will allow the tarball to be built under Cygwin. The client uses IPv4 functions, the server will not create listening sockets, and the metaserver will not create new games. 2005-04-19 Brian Wellington * configure.ac, Makefile.am, editor: Add gnocatan-editor. 2005-04-18 Brian Wellington * client/gtk/plenty.c: Remove duplicated and deprecated code by using the resource table widget. * server/gnocatan-server-console.c, server/player.c, server/server.c, server/server.h, server/gtk/gnocatan-server-gtk.c: Add the ability to disable AI chatting from gnocatan-server-gtk. * client/gtk/polygon.[ch], client/gtk/theme.[ch], client/gtk/Makefile.am, common/gtk/polygon.[ch], common/gtk/theme.[ch], common/gtk/Makefile.am: Move theme and polygon code from client/gtk to common/gtk. * client/ai/greedy.c: The AI can now play monopoly cards. 2005-04-17 Stephen Jacob * client/callback.h, client/ai/greedy.c, client/common/callback.c, client/common/player.c, client/gtk/player.c: The AI now holds VP dev cards until it has enough points to win. 2005-04-14 Brian Wellington * common/game.c, server/pregame.c: Make params_write_file() create a valid game file. 2004-04-14 0.9.8 Roland Clobus * server/server.c (accept_connection): Used wrong file descriptor, bug was introduced in 0.9.6 * common/game.c (params_copy), common/map.c (disconnect_hex), server/square.game: Fixed the core dump which resulted in the imcomplete file. Added some descriptions of the errors. * client/ai/greedy.c (greedy_turn): Fix for bug introduced in 0.9.6. * client/ai/greedy.c (trade_desired, greedy_consider_quote): Let the AI accept free offers during trade. * common/map.c (layout_chits): Use at most one robber per map. * common/map.c (map_copy): Use robber and pirate hex from the copied map, not the original map. * configure.ac: Do not use Gtk+ for console-only applications. 2005-04-09 0.9.7 Daniel * server/gnocatan-server.c: When duplicate game titles exist, a number is added to the title. 2005-04-09 Yusei * crane_island.game: Added a new map 2005-04-09 LT-P * iles.game, coeur.game: Added new maps * Evil_square.game: Updated the map 2005-04-09 Blyx * archipel_gold.game: Added a new map 2005-04-06 Stephen Jacob * common/gtk/common-gtk.c: Change the text color of player 3's messages, since light gray on white is really hard to read. 2005-04-06 0.9.6 Roland Clobus * configure.ac, common/network.c, common/network.h, meta-server/gnocatan-meta-server.c, server/gnocatan-server-console.c, server/gnocatan-server.c, server/gnocatan-server.h, server/meta.c, server/server.c, server/server.h, server/gtk/gnocatan-server-gtk.c: Removed global variables for serverhostname and port. Moved duplicate code of server and meta-server to common/network.c. All ports are now strings (service names), there are no conversions to integers left. Upgraded meta-server protocol to 1.2. * rules.make, client/gtk/connect.c, client/gtk/plenty.c, client/gtk/quote.c: Added GTK_DISABLE_DEPRECATED for developer-only builds. Marked the files that still use deprecated calls. 2005-04-03 Brian Wellington * configure.ac, common/Makefile.am, common/map.[ch], common/mt_rand.[ch], server/server.c: Remove the old random number generator. 2005-04-03 0.9.5 Roland Clobus * client/ai/greedy.c: AI can use gold (and prefer it) during setup. The nosetup nodes are honoured. Year of Plenty will only be played when the bank has at least 2 resources left. 2005-04-02 Brian Wellington * client/gtk/gui.c, client/gtk/guimap.c, client/gtk/legend.c, client/gtk/offline.c, client/gtk/theme.c, client/gtk/theme.h: Cleanups to the theme code. * client/gtk/connect.c, meta-server/gnocatan-meta-server.c, server/server.c: Use g_spawn_async instead of open-coded fork()/exec(). 2005-04-02 0.9.4 Roland Clobus * client/ai/greedy.c: When receiving gold, the AI must choose something, even when it has enough resources. 2005-03-31 Brian Wellington * client/ai/ai.c: The AI should not stay in a game if it is full. 2005-03-28 Brian Wellington * client/gtk/connect.c, client/gtk/gui.c, client/gtk/theme.c, client/gtk/theme.h, common/gtk/select-game.c, common/gtk/select-game.h: Replace deprecated GtkOptionMenus with GtkComboBoxes. 2005-03-28 0.9.3 Roland Clobus * Makefile.am: Added target 'restorepo', to make it easier to remove the changes to the *.po files when make distcheck has been used, but no new translations have been added. * client/gtk/data/splash.svg, client/gtk/data/splash.png: Updated splash screen image to version 0.9 * configure.ac: Require Gtk+-2.4. Added checks, which 'autoscan' did recommend. 2005-03-26 0.9.2 Roland Clobus * client/callback.h, client/ai/greedy.c, client/common/client.c, client/common/client.h, client/common/player.c, client/common/resource.c, client/gtk/callbacks.c, client/gtk/connect.c, client/gtk/gui.c, client/gtk/gui.h, client/gtk/legend.c, client/gtk/settingscreen.c, client/gtk/trade.c, common/log.c, common/log.h, common/gtk/common_gtk.c: Made several gchar* arguments const gchar* argument. 2005-03-24 Brian Wellington * client/gtk/connect.c: Remove static buffers. 2005-03-23 Brian Wellington * client/ai/greedy.c: Add gold support to the AI. * server/player.c: The patch to enable random seating ordered caused gtk assertions when connecting to a full game. * Makefile.am, configure.ac, client/ai/Makefile.am, ai/: Remove the old AI; enable the new AI. 2005-03-23 0.9.1 Roland Clobus * New version numbering: only 3 digits. The first two match the protocol version, and the third is the build number. * client/gtk/frontend.h, client/gtk/offline.c, client/gtk/theme.h: Moved declaration of init_themes to theme.h * server/player.c: Version check to only two digits. Added message when version does not match. * client/common/client.c, common/game.c, common/game.h, common/map.c, common/map.h, server/pregame.c: Small protocol change, to avoid sending unused data. Added option to send secrets of the map. * client/ai/ai.c: Code cleanup to random_name. Randomizer needs to be initialized only once. * po/POTFILES.in: Added client/ai/ai.c * client/gtk/connect.c: Made metaserver redirects insensitive to buffer overflows. 2005-03-23 Bas Wijnen * client/common/client.c, server/gold.c, server/pregame.c: Fixed race condition for client after rolling dice. 2005-03-22 Brian Wellington * meta-server/gnocatan-meta-server.c: Removed compiler warnings when compiling with -pedantic. 2005-03-20 0.8.1.59 Roland Clobus * common/game.c: The automatic indent did break the sending of gameinfo. 2005-03-20 0.8.1.58 Roland Clobus * ALL: Applied 'make indent' 2005-03-20 0.8.1.57 Roland Clobus * server/gnocatan-server.c: Made random seating order the default. * server/gtk/gnocatan-server-gtk.c: Made random order setting persistent. * Makefile.am: Added 'make indent' target. 2005-03-16 Brian Wellington * common/game.c, common/game.h, server/meta.c, server/player.c, server/server.c, server/server.h: Move the register-server, server-port, and random-order fields from the GameParams object to the Game object. * client/gtk/resource-table.c (resource_table_new): Removed the use of a fixed-size buffer. 2005-03-14 0.8.1.56 Brian Wellington * common/gtk/aboutbox.c, common/gtk/aboutbox.h, common/gtk/Makefile.am, client/gtk/gui.c, server/gtk/gnocatan-server-gtk.c: Add common code for displaying about boxes; make the client and server use it. * common/game.c, common/game.h, server/gnocatan-server.c: Add params_load_file()/params_write_file() helper functions. * common/game.h, server/gnocatan-server.c, server/gnocatan-server.h, server/player.c, server/pregame.c, server/server.c, server/server.h, server/gtk/gnocatan-server-gtk.c: Add the ability to randomize seating order. * client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/gui.c, client/gtk/gui.h, client/gtk/callbacks.c: When starting a new game, clear the highlighted chits, pointed out by Arjan Schrijver. Gnocatan is joined by a new developer: Brian Wellington 2005-03-12 0.8.1.55 Roland Clobus * configure.ac, added gnocatan.spec.in, removed gnocatan.spec: The spec is automatically generated and uses the current version. * ai/ai.c, client/ai/ai.c, client/gtk/connect.c, common/network.c, common/network.h, meta-server/Makefile.am, meta-server/gnocatan-meta-server.c, server/gnocatan-server-console.c, server/gnocatan-server.c, server/gnocatan-server.h, server/meta.c, server/server.c, server/server.h, server/gtk/gnocatan-server-gtk.c: More consistent use of the environment variables GNOCATAN_DIR, GNOCATAN_META_SERVER, GNOCATAN_SERVER_CONSOLE and GNOCATAN_SERVER_NAME. Moved common code to common/network.c. * docs/gnocatan-meta-server.6, docs/gnocatan-server-console.6, docs/gnocatan-server-gtk.6, docs/gnocatan.6, docs/gnocatanai.6: Added ENVIRONMENT section and FILES section. Added documentation of some new commandline options. * meta-server/gnocatan-meta-server.c (client_create_new_server): Use -m and -n commandline options instead of the environment variable. The server-console started from the meta-server will use the same hostname as the meta-server. * server/gnocatan-server-console.c (main): Correctly initialise hostname. 2005-03-12 Arjan Schrijver * meta-server/gnocatan-meta-server.c: Added commandline options to limit the portrange of the metaserver, and to set the hostname. 2005-03-02 0.8.1.54 Roland Clobus * client/gtk/interface.c: Reversal of the patch in 0.8.1.48, because it would set the client to the state turn when performing a maritime trade. Added a reset of the have_turn flag when game over is reached. 2005-03-02 Brian Wellington * client/gtk/interface.c: Disable the reject button when the trade was already rejected. 2005-02-05 0.8.1.53 Roland Clobus * server/gnocatan-server.c, meta-server/gnocatan-meta-server.c: Forgot the NULL termination of g_build_filename, pointed out by Brian Wellington. 2005-02-05 Brian Wellington * gnocatan.spec: Updated to version 0.8.1 2005-02-03 0.8.1.52 Roland Clobus * client/gtk/gui.c, server/gtk/gnocatan-server-gtk.c: Fix for crash in about dialog. Also reintroduces the version number. * client/gtk/gui.c, client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/theme.c, client/gtk/theme.h, server/gtk/gnocatan-server-gtk.c: Theme.c rewrite, using g_build_filename instead of gnome_program_locate_file. * client/gtk/trade.c: Fixed a memory leak. * common/game.c, common/game.h, common/map.c, server/gnocatan-server.c, server/gnocatan-server.h: Server will not crash on invalid/unreadable games. * configure.ac, rules.make, client/gtk/connect.c, client/help/C/gnocatan.xml, client/help/C/images/connect-dialog.png, client/help/C/images/server-create.png, client/help/C/images/server-create.png, client/help/C/images/servers-dialog.png, meta-server/gnocatan-meta-server.c: Meta server protocol updated to 1.1. New keyword: capability. When 'create games' is sent, the metaserver is capable of locally creating new game. Updated the documentation to reflect the change. * server/gtk/gnocatan-server-gtk.c(game_activate): Disabled the 'Add Computer Player' button when gnocatanai is not installed. 2005-01-25 0.8.1.51 Roland Clobus * common/gtk/common_gtk.c: Added stub for gtk_alignment_set_padding, allowing to code to build with Gtk+-2.0 and 2.2 again. * client/gtk/gold.c(gold_choose_player_must): Replaced the last Gtk+ deprecated funcion call in this file. 2005-01-25 Stefan Walter * common/network.c, meta-server/gnocatan-meta-server.c, server/server.c: Restored the include files needed for FreeBSD that disappeared in 0.8.1.48 2005-01-23 0.8.1.50 Roland Clobus * client/common/client.c: Removed unused variables from recovery_info_t, does not show turn 0 anymore. * common/map.c: Added default case * common/state.c, common/state.h, server/gold.c, server/pregame.c, server/server.h: Fixed reconnect during distribution of gold. * client/common/client.c, client/common/client.h, client/common/develop.c: Removed unused function road_building_begin. * client/gtk/gold.c, client/gtk/resource-table.c, client/gtk/resource-table.h: Replaced gtk_clist. * server/player.c, server/pregame.c, server/server.h: Server crashed when the player who is in the setup phase reconnected with another name. 2005-01-15 Roland Clobus * INSTALL, .cvsignore: Removed INSTALL from CVS. It is generated * README: Added information from the old INSTALL 2005-01-15 0.8.1.49 Daniel * common/map.c, common/map.h: Patch #1100340: Added the option to mark a tile such that it will never be shuffled, by adding a + (plus) after the number in the .game file. All gold tiles will now be shuffled, unless they are marked. * server/henjes.game, server/seafarers-gold.game: Patch #1101870: Marked all gold tiles such that they will not be shuffled, when random map is turned on. 2005-01-09 0.8.1.48 Roland Clobus * common/buildrec.c, common/map.h, common/map_query.c: Bug #1094484: Disallow the building of a road during setup phase when the settlement cannot be built. * common/network.c, meta-server/gnocatan-meta-server.c: Minimal system include files. * server/buildutil.c, server/develop.c, server/discard.c, server/gold.c, server/meta.c, server/player.c, server/pregame.c, server/resource.c, server/robber.c, server/server.c, server/trade.c, server/turn.c: Minimal list of include files. * client/gtk/interface.c: Bug #1027642, Bug #942472: Player did not get a turn after the setup phase in a second game with the same client. * client/gtk/gui.c: Minor spelling change, to make text in about boxes of client and server the same. 2004-12-25 0.8.1.47 Etan Reisner * server/gtk/gnocatan-server-gtk.c, client/gtk/gui.c: Replaced GNOME about dialog with Gtk code. 2004-12-25 Roland Clobus * client/gtk/discard.c, client/gtk/resource.c, client/common/client.c: Removed usused variable * server/player.c: Removed unused code. * common/state.c, common/state.h: Added stack dump code. * server/player.c: Added stack names when restoring the disconnect player. 2004-12-21 0.8.1.46 Roland Clobus * configure.ac: Renamed configure.in to the more modern configure.ac * autogen.sh: Changed configure.in to configure.ac 2004-12-19 Etan Reisner * ai/client.c, common/gtk/select-game.c, meta-server/gnocatan-meta-server.c, server/gtk/gnocatan-server-gtk.c: Using g_strdup instead of strdup * client/common/callback.c, server/gnocatan-server-console.c: Removing unused/duplicate #include lines 004-12-03 0.8.1.45 Roland Clobus * client/gtk/resource-table.c, client/gtk/resource-table.h, client/gtk/Makefile.am: Added a simple way to add a selection for resources in the client. * client/gtk/frontend.c: Reenabled the workaround for a Gtk+ bug. * client/common/player.c: A leaving player is a normal message, not an error message. * client/common/client.c, client/gtk/interface.c, server/discard.c, server/pregame.c, server/server.h: Fixed reconnect in state DISCARD and YOUAREROBBER. * client/gtk/discard.c: Using the new resource-table widget, and removed deprecated gtk_clist. * client/gtk/frontend.h, client/gtk/player.c: Made player_create_icon accessible to other source files. * client/gtk/gui.c(gui_set_game_params): Initially the map pixmap was too small. (Debian bug #284063) 2004-11-28 0.8.1.44 Roland Clobus * client/gtk/gui.h: Fix for the macro that would have bad side effects when used in if statements * client/common/client.c, server/pregame.c: Enable sending the bank by the server * client/gtk/gui.c(gui_highlight_chits), client/gtk/guimap.c(guimap_highlight_chits): Enable highlighted chits when reconnected. * client/gtk/monopoly.c(monopoly_create_dlg): Only show one dialog when reconnecting. * client/common/client.c, client/gtk/guimap.c: Fix for crash when reconnecting during RoadBuilding card that was played before a dice roll. * client/common/develop.c(develop_bought_turn): Development cards can be played when reconnected. * client/common/client.c, server/pregame.c: Dialog did not show when reconnecting when a Year of Plenty card has been played. 2004-11-21 0.8.1.43 Roland Clobus * client/gtk/offline.c(frontend_offline): Game|Connect incorrectly available when client is started with a commandline with server and port * client/gtk/guimap.c(guimap_cursor_move): Crash when leaving the map with a cursor active * client/gtk/chat.c, client/gtk/develop.c, client/gtk/discard.c, client/gtk/gold.c, client/gtk/gui.c, client/gtk/player.c, client/gtk/resource.c: Main screen consistent again, now without frames * client/common/callback.c, client/gtk/connect.c, client/gtk/develop.c, client/gtk/discard.c, client/gtk/frontend.c, client/gtk/frontend.h, client/gtk/gameover.c, client/gtk/gold.c, client/gtk/gui.c, client/gtk/gui.h, client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/histogram.c, client/gtk/identity.c, client/gtk/legend.c, client/gtk/monopoly.c, client/gtk/offline.c, client/gtk/player.c, client/gtk/plenty.c, client/gtk/quote.c, client/gtk/resource.c, client/gtk/settingscreen.c, client/gtk/state.c, client/gtk/trade.c: Preparations for 'Leave Game', added some constness, chat disabled when offline, frontend_gui_register_* can handle more than one widget, removed toolbar hack (not needed anymore) * client/gtk/guimap.c: Removed compiler warnings when compiling with --pedantic * ai/client.c, ai/client.h: Removed dead code * client/common/client.c, common/common_glib.c, common/driver.h, common/state.c, common/state.h, common/gtk/common_gtk.c: Removed reference to widget from StateMachine. The code was moved to the gtk directory in 0.8.0 2004-11-12 Roland Clobus * Actually updated the build number to 0.8.1.42 2004-11-05 0.8.1.42 Roland Clobus * client/gtk/resource.c: Translation was not active * client/callback.h, client/ai/greedy.c, client/common/client.c, client/common/develop.c, client/gtk/frontend.h, common/cards.c, common/cards.h: More const in prototypes * client/gtk/develop.c: Rewrite without deprecated GTK calls * client/common/callbacks.c: Reset development cards when a new game starts 2004-10-27 0.8.1.41 Roland Clobus * client/common/client.c: Added dummy callsbacks to remove compiler warnings * common/common_glib.c, common/common_glib.h, common/driver.h, common/network.c, server/gnocatan-server.c, server/server.c: Using the new typedef InputFunc * rules.make: When compiling with --enable-debug, GNOME_DISABLE_DEPRECATED can be used * ai/ai.c, ai/client.c, ai/computer.c, ai/player.c, ai/resource.c, ai/trade.c: gnome.h previously included string.h, now we must do it ourselves * client/gtk/gui.c: Rewrite of Preference dialog. It uses instant-apply. Toolbar settings removed, because GNOME already saves it * client/common/chat.c, common/log.c, common/log.h, common/gtk/common_gtk.c: Chat color separate from use of color of messages * client/gtk/identity.c: Removed compiler warnings 2004-10-24 0.8.1.40 Roland Clobus * client/gtk/gui.c, client/gtk/gui.h, client/gtk/trade.c: Removed the second global variable map. (The other is client/common/client.[ch]) * client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/histogram.c: Reenabled the dots that indicate the probability (when enough space in the hex/chit is available) * client/common/callback.c(can_move_ship), common/buildrec.c(can_setup_settlement): Removed the compiler warnings about losing const-ness, introduced in 0.8.1.39 (It is still cheating: a temporary non-const pointer is used to temporarily modify the map) * common/common_glib.c, common/common_glib.h, common/driver.h: Removed compiler warning: ISO C forbids passing arg 2 of pointer to function between function pointer and `void *' 2004-10-17 0.8.1.39 Roland Clobus * common/map.h, common/map_query.c: Fixed longest road detection * client/gtk/monopoly.c: No longer uses deprecated calls. Removed frame * client/callback.h, client/common/build.c, client/common/client.h, client/common/resource.c, client/common/setup.c, client/gtk/frontend.h, client/gtk/gui.c, client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/interface.c, common/buildrec.c, common/buildrec.h, common/map.h, common/map_query.c: Many pointers are now const * client/common/robber.c: Removed unused code * client/gtk/frontend.c, client/gtk/gameover.c, client/gtk/resource.c: Replaced deprecated calls * client/gtk/gui.c, client/gtk/guimap.c, client/gtk/guimap.h: Single click building * common/log.c, common/log.h, common/gtk/common_gtk.c, common/gtk/common_gtk.h: Log uses less memory * server/player.c: Fix for lost longest road on reconnect 2004-10-08 0.8.1.38 Roland Clobus * All *.c: Added #include "config.h" * configure.in, ai/ai.c, client/ai/ai.c, client/gtk/connect.c, client/gtk/offline.c, common/Makefile.am, meta-server/gnocatan-meta-server.c, server/gnocatan-server-console.c, server/gnocatan-server.c, server/gtk/gnocatan-server-gtk.c, server/meta.c, server/server.c: Moved contents of meta.h and port numbers to configure.in * common/meta.h: Replaced by contents in configure.in * client/callback.h, client/common/i18n.c, client/gtk/offline.c: Added commandline to gnocatan client * rules.make, client/common/resource.c, client/gtk/callbacks.c, client/gtk/gui.c, client/gtk/guimap.c, client/gtk/histogram.c, client/gtk/player.c, client/gtk/trade.c, common/game.c, common/network.c: Added -pedantic to --enable-debug, and resolving many warnings * client/gtk/develop.c, client/gtk/connect.c, client/gtk/discard.c, client/gtk/frontend.c, client/gtk/gameover.c, client/gtk/gold.c, client/gtk/monopoly.c, client/gtk/plenty.c, client/gtk/polygon.c, client/gtk/quote.c, client/gtk/settingscreen.c: Replace gnome.h includes with gtk and/or gdk * client/gtk/gui.c: Removed language setting in GUI. Override is now only possible with the normal environment variables, and the commandline * client/gtk/name.c: Added per default the current name * common/gtk/game-settings.c, common/gtk/common_gtk.c: Added some stub functions for compatibility with versions of Gtk before 2.4 * client/help/C/gnocatan.xml: Added technical chapter * server/gnocatan-server.c, server/server.c, server/server.h: Enabled server-stop for administrator, added a few checks to admin interface 2004-10-01 0.8.1.37 Roland Clobus * client/help/C/gnocatan-C.omf: Added line with DTD to make xmllint happy. * ai/computer_names: moved to client/ai * server/gnocatan-server-gtk.c, server/gnocatan-server.desktop: moved to server/gtk * common/select-game.c, common/select-game.h, common/config-gnome.c, common/config-gnome.h, common/common_gtk.c, common/common_gtk.h, common/game-settings.c, common/game-settings.h: moved to common/gtk. All gtk related code is now in separate subdirectories. * server/gtk/.cvsignore, server/gtk/Makefile.am, common/gtk/.cvsignore, common/gtk/Makefile.am: Initial versions, based on the parent directories. * Makefile.am: Don't try to build ai, if no gnome found * ai/Makefile.am: Removed dependency on gtk libraries, installation of computer_names move to client/ai/Makefile.am * client/ai/Makefile.am: Now installs computer_names * configure.in, client/gtk/Makefile.am, common/Makefile.am, server/.cvsignore, server/Makefile.am: Adjustment for the new directories. * common/.cvsignore: Removed gnocatan-path.h * po/ChangeLog: Add changes regarding the po directory will be loggged in po/ChangeLog, and not in this file. * configure.in, ai/Makefile.am, client/ai/Makefile.am, ai/ai.c: Added option to install new or old ai. Current default: old ai 2004-09-26 0.8.1.36 Roland Clobus * Makefile.am, autogen.sh, configure.in, omf.make, rules.make, xmldocs.make, ai/Makefile.am, client/Makefile.am, client/ai/Makefile.am, client/common/Makefile.am, common/Makefile.am, meta-server/Makefile.am, client/gtk/Makefile.am, server/Makefile.am, server/gnocatan-server-gtk.c: New autogen.sh script, with optional Gnome/Gtk and scrollkeeper. * ai/ai.c, client/ai/ai.h, meta-server/gnocatan-meta-server.c, server/gnocatan-server.h, server/server.c: Removed the need for the generated file gnocatan-path.h * client/callback.h, client/ai/ai.c, client/common/gnocatan.c, client/common/i18n.c, client/gtk/callbacks.c, client/gtk/offline.c: The new frontend_init uses the argc and argv, instead of set_callbacks * client/ai/greedy.c, client/common/resource.c: Removed unneeded Gnome dependency * .cvsignore, common/.cvsignore: updated for removed files * depcomp, install-sh, missing, mkinstalldirs, stamp.h.in, po/Makefile.in.in: Removed (autogenerated files) * common/gnocatan-path.h.in: Removed (replaced by rules.make) * intl/*, ABOUT-NLS: Removed (using glib-gettext instead) * macros/type_socklen_t.m4: Added check for struct socklen_t 2004-09-06 0.8.1.35 Roland Clobus * client/gtk/gui.c, client/gtk/gui.h: Made left pane resizable. * client/gtk/identity.c: Made identity panel resizable. * client/gtk/player.c: Player summary uses Gtk2 widget, is resizable. * client/gtk/resource.c(resource_build_panel): Resource panel resizable. 2004-09-03 Jeff Breidenbach * debian/changelog: sync Debian & upstream versioning. 2004-08-29 0.8.1.34 Roland Clobus * ai/client.c: Added global flag 'played_soldier_card' to fix stack overflow. * server/gnocatan-server-gtk.c(start_clicked_cb): Remembered game did start with wrong map. * client/common/resource.c(resource_modify), client/gtk/frontend.h: Argument contains absolute value, not a difference. * client/gtk/resource.c(resource_build_panel, frontend_resource_change): Fixed size of resource counter to 2 positions. 2004-08-21 Jeff Breidenbach * debian/control: added yelp dependency for gnocatan-help * Released as Debian package, 0.8.1-6. 2004-08-07 0.8.1.33 Roland Clobus * common/game.c: changed server-port parameter to string, fixed memory leak in params_free. * server/gnocatan-server.c(start_server), server/gnocatan-server.h, server/server.c(server_startup), server/server.h: added const in the parameters. * server/server.c, server/server.h: removed server_restart (not used). 2004-08-07 Claudio Fontana (sick_soul@users.sourceforge.net> * client/common/client.c: Removed deprecated lvalue casts. 2004-07-31 0.8.1.32 Roland Clobus * common/game-settings.c: more specific include files. * common/select-game.c (select_game_add), server/gnocatan-server-gtk.c (start_clicked_cb): Fixed bug that 'Default' game would be started instead of preselected game. * client/common/player.c, client/gtk/trade.c, common/game-settings.c, common/select-game.c, server/gnocatan-server-gtk.c, server/server.c: Added comments for translations. * common/game-settings.c(game_settings_init): Spin button right aligns, this code is disabled until the build requires Gtk2.4 * po/POTFILES.in: enabled translation for common/game-settings and commong/select-game. * po/nl.po: Updated translations 2004-07-31 Hans Fugal * client/gtk/interface.c: Quick fix for 'Second click on reject trade crashes the server'. 2004-07-31 Giancarlo Capella * po/it.po: Updated italian translation 2004-07-24 0.8.1.31 Roland Clobus * configure.in, client/common/i18n.c: Enabled italian in the UI, made some checks more strict. * ai/greedy.c, client/ai/greedy.c, client/common/chat.c, TODO: Enabled translated chats for the AI * client/gtk/legend.c, client/gtk/theme.c: Fixed display of tiles in the legend dialog/tabpage. (Foundation layed by Giancarlo Capella) Replaced deprecated function calls. * client/gtk/theme.c: Fixed crash on theme change before a game is started. * rules.make, client/gtk/gui.c, common/common_gtk.c: Enabled GDK_DISABLE_DEPRECATED check in --enable-debug mode, all deprecated functions are replaced. * client/callback.h: Removed prototypes for static functions * client/common/callback.c(pirate_count_victims): Fixed small memory leak. * client/gtk/guimap.c, client/gtk/guimap.h, client/gtk/histogram.c: Dynamic scaling of the font in the chit, removed duplicate code * client/gtk/interface.c: Removed the need for some global variables. Fixed bug that a ship to steal from could not be selected. * client/gtk/polygon.c, client/gtk/polygon.h: Added some const correctness. * client/gtk/theme.c, client/gtk/theme.h: Port tiles are now always centered. 2004-07-24 Giancarlo Capella * po/it.po: Added italian translation 2004-07-08 Jeff Breidenbach * Released as Debian package, 0.8.1-5. 2004-07-08 0.8.1.30 Roland Clobus * client/gtk/histogram.c: Added more margins, last dice roll is shown * ai/client.c, ai/greedy.c, client/ai/greedy.c, client/gtk/gui.c, common/game.c, common/game.h, server/develop.c, server/gnocatan-server-console.c, server/gnocatan-server-gtk.c, server/gnocatan-server.c, server/gnocatan-server.h, server/turn.c: Replaced all references to Exit with Quit * ai/greedy.c (score_hex_hurt_opponents), client/ai/greedy.c (score_hex_hurt_opponents): AI does not try to move the robber onto water * NEWS: Updated to reflect the release on SF * rules.make: removed GTK_ITEM_FACTORY define, it will no longer work with Gtk 2.4 * po/nl.po: Updated some translations 2004-07-02 Jeff Breidenbach * Released as Debian package, 0.8.1-4. 2004-07-01 Roland Clobus * server/pregame.c, ai/client.c: Oops, forgot a ; 2004-06-29 0.8.1.29 Roland Clobus * ai/client.c, ai/trade.c, client/common/client.c, client/gtk/frontend.h, client/gtk/interface.c, client/gtk/quote.c, client/common/quoteinfo.c, common/quoteinfo.h, server/pregame.h: Various changes. quotelist_new and quotelist_delete changed prototypes to allow for checks on 'quote-leaks'. * ai/greedy.c (trade_desired), client/ai/greedy.c (trade_desired): Fix for AI losing resources during trade. * client/callback.h, client/gtk/identity.c, client/gtk/player.c: Removed unused color field, added player_or_viewer_color. * client/gtk/chat.c, client/gtk/gui.c: Added flag to indicate whether the focus can be grabbed. * client/gtk/trade.c: Gtk2 widgets for trade page. Redesign. * common/network.c: Removed an obsolete FIXME. * server/trade.c: More informative error messages. Duplicate quote is now a note, not an error. 2004-05-30 0.8.1.28 Roland Clobus * client/ai/greedy.c (greedy_year_of_plenty), ai/client.h (mode_year_of_plenty), ai/computer.h, ai/greedy.c (greedy_year_of_plenty): Fix year of plenty bug, AI will now always choose available resources 2004-05-26 Jeff Breidenbach * 0.8.1.27 Released as Debian package, 0.8.1-3. 2004-05-23 0.8.1.27 Roland Clobus * client/gtk/chat.c, client/gtk/connect.c, client/gtk/histogram.c, client/gtk/name.c, common/game-settings.c, common/select-game.c, server/gnocatan-server-gtk.c: Removed *_DISABLE_DEPRECATED defines to allow the code to build with Gtk 2.4. * client/gtk/frontend.c, common/common_gtk.c: Replaced casts to gpointer with more portable GINT_TO_POINTER. * server/gnocatan-server-gtk.c: Added #include , needed when building with gcc flag -O0. * po/nl.po: Added dutch translations. 2004-05-04 Roland Clobus * po/de.po, po/es.po, po/nl.po, po/fr.po, po/gnocatan.pot: Updated translation files to reflect current texts. (No changes to translated texts) 2004-04-25 0.8.1.26 Released as Debian package, 0.8.1-2 2004-04-25 0.8.1.26 Roland Clobus * client/common/build.c (build_add), client/common/client.c (mode_load_gameinfo), client/common/client.h (build_add), common/buildrec.h (struct BuildRec), server/pregame.c (mode_pre_game): Reconnect fix when something was built in the current turn. * common/game-settings.c, common/game-settings.h, common/select-game.c, common/select-game.h, common/Makefile.am: New Gtk widgets for server and client. * client/gtk/connect.c: New connection scheme. * client/gtk/frontend.h: Cleanup connect_get_port_str. * client/gtk/gui.c: Replaced some deprecated icons. * client/gtk/name.c: Replaced deprecated code. * client/gtk/offline.c: Moved code regarding settings to client/gtk/connect.c. * meta-server/gnocatan-meta-server.c (debug): Prototype fix. * server/gnocatan-server-gtk.c: Replaced deprecated code, added tooltips, used new widgets * server/player.c, server/server.h: Some cleanup. 2004-04-25 0.8.1.26 Tobias Jakobs * client/gtk/data/splash.png: New image (400x400 pixels) * client/gtk/data/splash.svg: Source for splash.png 2004-04-25 0.8.1.25 Bas Wijnen * client/callback.h (struct callbacks), client/common/client.c (client_init, check_other_players), client/common/player.c (player_stole_from), client/ai/greedy.c (greedy_new_statistics, greedy_player_robbed, greedy_get_rolled_resources, greedy_played_develop, greedy_init): added and used new callbacks for ai chatting. * client/gtk/callbacks.c (frontend_error, frontend_set_callbacks): gtk client callback cleanup. 2004-03-28 0.8.1.24 Roland Clobus * ai/client.c (mode_play_develop_response), ai/develop.c (can_play_develop), client/common/client.c (mode_play_develop_response), client/common/develop.c (can_play_develop): Less stringent check if Road building development card can be played. * client/common/callback.c (road_building_can_finish)m client/common/client.c (mode_road_building): Road building can be aborted when nothing can be built anymore. * client/common/develop.c (develop_played): Out of resource is a warning instead of an error. 2004-03-23 0.8.1.23 Roland Clobus * client/gtk/state.c (route_gui_event): Added #ifdef DEBUG 2004-02-29 0.8.1.22 Roland Clobus * client/common.client.c (mode_load_gameinfo): Fixed textual error. * server/pregame.c (mode_pre_game): Fixed bugs for viewers with ID >= MAX_PLAYERS. * server/gnocatan-server-gtk.c (gui_player_change), server/gold.c (distribute_next, distribute_first), server/player.c (next_player_num, player_setup, player_free, player_archive, player_is_viewer), server/pregame.c (mode_pre_game), server/server.h, server/trade.c (trade_finish_domestic, process_call_domestic, trade_begin_domestic): new function player_is_viewer. * common/state.c (sm_pop): Fixed too relaxed assertion. * client/gtk/chat.c (chat_build_panel, chat_set_focus): Avoided selection of chat entry text on every gui update. 2004-02-28 0.8.1.21 Bas Wijnen * client/common/client.c (client_init): added initialisation for init and new_bank * client/common/resource.c (resource_format_type): added 'nothing' when nothing is offered in a trade 2004-02-08 0.8.1.20 Bas Wijnen * client/common/player.c, client/gtk/gameover.c, common/common_gtk.c, common/log.c, common/log.h: Removed MSG_NAMEANON, added prefixes to log_message_string_console. * client/common/develop.c: Removed selected_card_idx that was originally used for the gtk interface. * client/gtk/state.c, common/log.c, common/network.c, common/network.h, common/state.c: Renamed LOG defines to DEBUG. Made the log more readable. * client/callback.h, client/common/client.c, client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/player.c, client/common/player.c: Added rename for viewers, viewers are shown in Player Summary again. * client/callback.h, client/common/callback.c, client/common/client.c, client/common/client.h, client/common/player.c, client/common/resource.c, client/gtk/callbacks.c: Added support in the client to count the resources in the bank. * client/gtk/player.c: Added plurals for several development cards. 2004-02-08 0.8.1.19 Bas Wijnen , Roland Clobus * client/common/client.c (mode_road_building): Changed interpretation of argument of callbacks.roadbuilding to facilitate AI programs. 2004-02-08 0.8.1.18 Bas Wijnen * client/callback.h, client/common/callback.c, common/state.c, common/state.h: Added cb_disconnect and sm_close 2004-02-06 0.8.1.17 Roland Clobus * client/gtk/player.c (player_show_connected_at_row): Fixed bug displaying random line below player icon. 2004-01-26 0.8.1.16 Roland Clobus * server/server.c (game_server_start): Show random seed in the server. 2004-01-25 0.8.1.15 Bas Wijnen * common/state.c, common/state.h: Added a stackdump when overflow occurs. * client/common/client.c, common/state.c, common/state.h: Added sm_push_noenter, sm_pop_noenter, sm_goto_noenter, needed for the AI. * client/gtk/histogram.c: Added enter after last line 2004-01-15 Jeff Breidenbach * doc/Makefile.am, doc/gnocatan-meta-server.6, debian/gnocatan-meta-server.files: Added metaserver manpage. 2004-01-11 0.8.1.14 Roland Clobus * client/callback.h, client/common/client.c, client/common/turn.c, client/gtk/callbacks.c: renamed callbacks.dice to callbacks.rolled_dice. * client/gtk/callbacks.c, client/gtk/frontend.h, client/gtk/interface.c: renamed frontend_dice to frontend_rolled_dice. * client/gtk/callbacks.c (frontend_init_game): added histogram_init. * client/gtk/guimap.c, client/gtk/guimap.h: add color lightblue. * client/gtk/histogram.c, client/gtk/histogram.h: complete rewrite of the histogram diagram. Now fully scalable. * client/common/resource.c (resource_format_num): support "no resources" situation. 2004-01-11 0.8.1.13 Bas Wijnen * client/callback.h, client/common/client.c, client/gtk/callbacks.c, client/gtk/frontend.c, client/gtk/ftontend.h, client/gtk/trade.c: Fixes bug with maritime trade * client/common/callback.c, client/gtk/offline.c: Fix for unknown host bug * ai/client.c: AI can handle auto-discard * configure.in, client/Makefile.am, client/callback.h, client/common/callback.c, client/ai/Makefile.am, client/ai/ai.c, client/ai/ai.h, client/ai/greedy.c: Added first version of the AI in the new structure. 2004-01-02 0.8.1.12 Roland Clobus * client/callback.h (struct callbacks), client/common/client.c (mode_start, mode_load_game, mode_load_gameinfo, mode_start_response), client/common/client.h, client/common/player.c (player_reset, player_reset_statistic), client/gtk/callbacks.c (frontend_init_game, forntend_start_game), client/gtk/frontend.h, client/gtk/player.c (player_clear_summary): Fix bug #866431: Play several games with same client. * client/gtk/callbacks.c (frontend_start_game), client/gtk/frontend.h, client/gtk/identity.c (top level, draw_building_and_count, expose_identity_area_cb, identity_draw, identity_set_dice, identity_build_panel, identity_reset): Fixed bug #824624: Polygons in identity panel disappear under dice. 2004-01-02 0.8.1.12 Bas Wijnen * configure.in, Makefile.am, ai/Makefile.am, client/Makefile.am, client/common/Makefile.am, client/gtk/Makefile.am, client/gtk/data/Makefile.am, client/gtk/data/themes/Makefile.am, client/gtk/data/themes/FreeCIV-like/Makefile.am, client/gtk/data/themes/Iceland/Makefile.am, client/gtk/data/themes/Tiny/Makefile.am, client/help/Makefile.am, client/help/C/Makefile.am, common/Makefile.am, docs/Makefile.am, macros/Makefile.am, meta-server/Makefile.am, server/Makefile.am, rules.make (new file): Added support for --enable-debug to autogen.sh. * common/network.c, client/gtk/state.c: Give debugging output when --enable-debug is specified. 2004-01-02 0.8.1.11 Bas Wijnen * common/Makefile.am, common/Makefile.am, common/authors.h: Moved authors.h from client/common to common * client/common/i18n.c, client/common/gnocatan.c, client/common/i18n.h: Removed i18n.h and merged into client/callback.h * client/gtk/Makefile.am, client/gtk/frontend.h, client/gtk/gui.c: Removed directories in #include statements * client/Makefile.am, client/common/Makefile.am, client/callback.h: Moved callback.h from client/common to client 2004-01-02 0.8.1.10 Roland Clobus * client/gtk/legend.c (legend_create_dlg): The legend dialog now has a close button, like the other dialogs. * client/gtk/quote.c (top level, quote_build_page): The translation now works. * client/gtk/settingscreen.c (top level, add_setting_val, settings_create_dlg): Shuffled the boxed around in game settings dialog, for better layout, numbers (where possible) right aligned. * po/de.po, po/es.po, po/fr.po, po/nl.po, po/gnocatan.pot: Translations modified for the new string 'Reject Domestic Trade'. (still marked fuzzy, because I'm not a native speaker.) 2004-01-01 0.8.1.9 Bas Wijnen * (nearly) all files: Removed compiler warnings when compiling with -Wall -W -Wpointer-arith -Wcast-qual -Wno-sign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wwrite-strings. * client/common/modes.h: Removed 2003-12-30 0.8.1.8 Bas Wijnen * client/common/build.c, client/common/callback.h, * client/common/client.c, client/common/setup.c, * client/gtk/frontend.h, client/gtk/interface.c: Removed dependency on BuildRec, modified prototype of callbacks.setup. 2003-12-29 0.8.1.7 Bas Wijnen * client/common/build.c (build_move), client/common/callback.h * (top level, struct callbacks), client/common/client.c (top level, * client_init, mode_domestic_trade), client/gtk/callbacks.c * (frontend_trade, frontend_set_callbacks), client/gtk/trade.c * (trade_update, trade_perform_maritime, trade_perform_domestic): Fixed bug #863901: maritime quote doesn't disappear when resources are no longer available. * client/common/client.c (mode_discard, mode_domestic_trade), * client/common/player.c (player_build_add, player_build_remove): Code cleanup. * Added can_play_any_develop, get_devel_deck, get_bank, get_map, * callbacks.error, frontend_error: Preparation for new AI structure. * cb_place_robber, client_start, frontend_init: Changed prototype. 2003-12-28 0.8.1.6 Roland Clobus * client/common/player.c (player_has_quit): Fix for (null) receives... (Bug #865870). * clinet/gtk/player.c (calc_statistic_row): Fix for viewers. * client/gtk/name.c (name_create_dlg): Remove scrolling from name change dialog. 2003-12-25 Jeff Breidenbach * docs/Makefile.am: registered gnocatanai manpage 2003-12-21 0.8.1.5 Roland Clobus * po/nl.po: Improved translation. 2003-12-21 0.8.1.4 Bas Wijnen * client/gtk/interface.c (frontend_discard_remove), client/gtk/discard.c (discard_player_did): Removed warning at automatic discard. 2003-12-21 0.8.1.3 Roland Clobus * ai/client.c, ai/greedy.c, ai/trade.c, client/common/callback.c, client/common/client.h, client/common/gnocatan.c, client/common/player.c, client/gtk/frontend.h, client/gtk/gui.c, client/gtk/player.c, common/game.c, server/gold.c, server/player.c, server/pregame.c, server/turn.c: Code cleanup. 2003-12-21 0.8.1.2 Roland Clobus * client/gtk/guimap.c (guimap_draw_hex): Fixed bug #230252; draw complete hex, not only robber/pirate area. 2003-12-21 0.8.1.1 Bas Wijnen * client/common/callback.h: Added comments * client/common/callback.h, client/common/client.c (client_start), * client/common/gnocatan.c, client/gtk/callbacks.c, * client/gtk/frontend.h, client/gtk/offline.c: Changes to frontend intialisation 2003-12-21 0.8.1.1 Bas Wijnen * client/common/Makefile.am: Generalized file generation for authors.h. * client/gtk/develop.c: Removed debugging statements. * client/gtk/interface.c (global, frontend_discard_remove, place_robber, frontend_robber): Fixed state bug (#863836). 2003-12-20 Bas Wijnen and Roland Clobus * theme/*/Makefile.am: Added Makefile.am in all directories * client/gtk/data/Makefile.am, client/gtk/theme.c, * client/gtk/guimap.c: renamed images directory to themes directory. splash.png moved to pixmap directory * po/fr.po, po/de.po: removed some obvious wrong fuzzy translations 2003-12-17 Roland Clobus * client/common/i18n.c, po/fr.po: Added french translation by Arnaud MALON * client/common/i18n.c, client/gtk/gui.c: The untranslated language strings will be converted to UTF-8. 2003-12-16 Bas Wijnen * All files except ai: Added proper copyright notice. * client/admin-gtk.c, client/build.c, client/client.c, client/client.h, client/chat.c, client/connect.c, client/develop.c, client/discard.c, gameover.c, gnocatan.c, gold.c, gui.c, gui.h, guimap.c, guimap.h, histogram.c, histogram.h, i18n.c, i18n.h, identity.c, legend.c, monopoly.c, name.c, player.c, player.h, plenty.c, polygon.c, polygon.h, quote.c, resource.c, road_building.c, robber.c, setup.c, settingscreen.c, stock.c, theme.c, theme.h, trade.c, turn.c: removed. * client/common/authors.h, client/common/build.c, client/common/callback.c, client/common/callback.h, client/common/chat.c, client/common/client.c, client/common/client.h, client/common/develop.c, client/common/gnocatan.c, client/common/i18n.c, client/common/i18n.h, client/common/modes.h, client/common/player.c, client/common/resource.c, client/common/robber.c, client/common/setup.c, client/common/stock.c, client/common/turn.c, client/gtk/admin-gtk.c, client/gtk/frontend.h, client/gtk/gui.h, client/gtk/guimap.h, client/gtk/histogram.h, client/gtk/polygon.h, client/gtk/theme.h, client/gtk/callbacks.c, client/gtk/chat.c, client/gtk/connect.c, client/gtk/develop.c, client/gtk/discard.c, client/gtk/frontend.c, client/gtk/gameover.c, client/gtk/gold.c, client/gtk/gui.c, client/gtk/guimap.c, client/gtk/histogram.c, client/gtk/identity.c, client/gtk/interface.c, client/gtk/legend.c, client/gtk/monopoly.c, client/gtk/name.c, client/gtk/offline.c, client/gtk/plenty.c, client/gtk/polygon.c, client/gtk/player.c, client/gtk/quote.c, client/gtk/resource.c, client/gtk/settingscreen.c, client/gtk/state.c, client/gtk/theme.c, client/gtk/trade.c: Added. Seperated gui from network in client as a preparation to other clients, including the AI. 2003-12-02 Roland Clobus * client/gui.c, client/guimap.c: When applying a new theme, the tiles were not scaled correctly. * legend.c: When showing the legend tabpage, the client would crash when a scaled theme was active. * client/theme.c: the extra colors of the tile for gold were not correctly used. * client/theme.c: the board tile in the theme is never scaled, but tiled. * client/theme.h: the size of arrays in the struct MapTheme was defined by digits, not by constants in variable names. 2003-12-02 Roland Clobus * seafarers.game, seafarers-gold.game: removed unknown keyword. * Cube.game, Another_swimming_in_the_wall.game, Evil_square.game, 2003-12-06 Roland Clobus * client/client.c, client/player.c, common/common-gtk.c, * common/driver.h, common/game.c, common/state.c, common/state.h, * server/buildutil.c, server/glib-driver.c, server/glib-driver.h, * server/gnocatan-server-console.c, server/gnocatan-server-gtk.c, * server/gold.c, server/player.c, server/pregame.c, server/server.c, * server/server.h, server/turn.c: Fixed reconnect (excluding gold), client does not crash when added lots of viewers, some variable declarations moved for gcc-2.95 compatibility, replace the clist widget in server-gtk, removed calls to player_name, fixed server crash when reconnecting, server now keeps the current player by number, not by name. 2003-12-02 Roland Clobus * seafarers.game, seafarers-gold.game: removed unknown keyword. * Cube.game, Another_swimming_in_the_wall.game, Evil_square.game, 2003-12-11 Bas Wijnen * server/trade.c: Fixed bug #848386, state stack overflow. Allow asking for free resources in server. 2003-12-10 Roland Clobus * ai/greedy.c: Fixed AI to build only on land. * common/map_query.c: Fixed AI placing robber in water. 2003-12-05 Bas Wijnen * common/build_rec.h, common/cards.h, common/common_gtk.h, common/cost.h: Added some #include statements * common/network.h, common/state.h: Removed the comma after the last value in the enum. 2003-12-02 Roland Clobus * seafarers.game, seafarers-gold.game: removed unknown keyword. * Cube.game, Another_swimming_in_the_wall.game, Evil_square.game, GuerreDe100ans.game, Mini_another_swimming_pool_in_the_wall.game: Added games by LT-P * henjes.game: Added game by Robert Henjes * lorindol.game: Added game by Martin Brotzeller * server/Makefile.am: changed to add the new games * server/gnocatan-server-gtk.c: raised the limit for victory points 2003-11-16 Roland Clobus * client/gui.c: Reduced startup window size for smaller displays. * client/player.c (player_build_add), server/pregame.c (send_gameinfo): Fixed bridges. 2003-11-05 Roland Clobus * server/gnocatan-server-gtk.c: Fixed bug 816848 2003-11-05 Roland Clobus * client/chat.c, client/player.c, common/log.c, common/log.h: Bug #826894: First message is not time stamped. 2003-11-05 Roland Clobus * ai/client.c, server/player.c, server/server.c: Refuse connection when a game is over. * common/game.c, common/game.h, server/gnocatan-server-gtk.c, server/server.c, server/server.h: Repaired -x option, implemented rudimentary restart. * client/Makefile.am, common/Makefile.am, */config-gnome.c, */config-gnome.h: Moved config-gnome.* from client/ to common/ * server/gnocatan-server-gtk.c: Added save settings. * server/gnocatan-server.c, server/gnocatan-server.h: Ordered the names of the games. 2003-10-29 Roman Hodek * po/de.po: removed fuzzy tags, cared for two untranslated msgs, made some items sound better in German. * ai/monopoly.c (monopoly_player), client/monopoly.c (monopoly_create_dlg): joined the two messages for better translations, needed a tmp string for that. 2003-10-28 Roman Hodek * server/gnocatan-server-console.c (main): New option -n to set hostname reported to meta server (analogous field in GTK server). * meta-server/README.protocol: updated 2003-10-26 Jeff Breidenbach * docs/gnocatan*.6: added gnocatanai man page 2003-10-25 Roman Hodek * server/meta.c (meta_send_details): send PROTOCOL_VERSION, not program VERSION. * meta-server/README.protocol: new file 2003-10-25 Roland Clobus * gnocatan.spec: Applied patch 829404 by Daniel Jensen * client/gui.c: Removed compiler warning introduced at 2003-10-19 2003-10-24 Jeff Breidenbach * debian/*: More scrollkeeper packaging fixes. 2003-10-20 Jeff Breidenbach * debian/rules, debian/control: Better scrollkeeper-ing. 2003-10-19 Roland Clobus * client/gui.c: Added word wrap to client messages window. 2003-10-17 Roland Clobus * ai/player.c, client/player.c, po/de.po, po/es.po, po/gnocatan.pot: Updated german translations. 2003-10-17 Bas Wijnen * client/client.c, client/player.c, client/player.h: Fixed reconnect bug. * common/network.c, server/gnocatan-server.c: Fixed broken pipe bug. 2003-10-17 Bas Wijnen * po/de.po, po/es.po, po/gnocatan.pot: Updated. * server/gnocatan-server-gtk.c: Improved code. * server/gnocatan-server.c: Ignored broken pipe. 2003-10-15 Bas Wijnen 2003-10-14 Jason Long * INSTALL: removed note about requiring the Gnome prefix. * client/gui.c, server/gnocatan-server-gtk.c: replace gnome_pixmap_file with gnome_program_locate_file, which uses the application-specific pixmap directory instead of Gnome's pixmap directory. * server/Makefile.am: make DATADIR available to gnocatan-server-gtk. * client/trade.c: Fixed reconnect bug. * po/de.po, po/es.po, po/gnocatan.pot: Updated. * server/conquest+ports.game, server/conquest.game, server/four-islands.game, server/seafarers-gold.game, server/seafarers.game, server/x.game: Added pirate. 2003-10-15 Bas Wijnen * README: Changed version number. * client/player.c: bugfix. * po/de.po, po/es.po, po/gnocatan.pot: updated. 2003-10-15 Bas Wijnen * ai/client.c: Use new disconnect protocol. * client/build.c: Fixed ship move undo bug. * server/gold.c, server/robber.c, server/trade.c: Fixed viewer bugs. * po/de.po, po/es.po, po/gnocatan.pot: Updated. 2003-10-13 Bas Wijnen * client/client.c, server/pregame.c: Added pirate position to reconnect info. * common/game.c, server/player.c, server/pregame.c, server/server.h: Bugfixes. * common/game.c, server/player.c, server/pregame.c: Bugfixes. 2003-10-12 Roland Clobus * client/admin_gtk.c, client/connect.c, common/network.c, common/network.h, common/state.c, meta-server/gnocatan-meta-server.c, server/gnocatan-server.c, server/meta.c: Changed net_free to NULLify the session, changed the meta-server connection dialog, fixed bug #717982, added meta-server redirections without port-number. 2003-10-12 Bas Wijnen * AUTHORS: Added my name. * Makefile.am: Fixed make distcheck bug. * po/de.po, po/es.po, po/gnocatan.pot: Updated. 2003-10-12 Bas Wijnen * ai/client.c, client/client.c: Fixed version conflict bug. * po/de.po, po/es.po, po/gnocatan.pot: Updated. 2003-10-10 Jason Long * Removed client/help/C/images/*.gif client/help/C/gnocatan.sgml, client/help/C/topic.dat; added xmldocs.make, omf.make, client/help/C/gnocatan.xml, client/help/C/gnocatan-C.omf, client/help/C/legal.xml, client/help/C/images/*.png; changed client/help/C/Makefile.am, Makefile.am, client/Makefile.am, client/gnocatan.c: bring Gnocatan help system up to Gnome2 standards. 2003-10-04 Roland Clobus * client/client.c,client/config-gnome.c,client/config-gnome.h, client/connect.c,client/gui.c,client/i18n.c: Settings dialog uses config-gnome.c. Removed French and Italian, due to unavailable translations. 2003-10-04 Roland Clobus * client/gui.c,server/gnocatan-server-gtk.c: The application icons are now shown. 2003-10-12 Bas Wijnen * common/game.c, common/map.c, common/map.h, common/map_query.c: Added support for nodes where setup is not allowed. 2003-10-12 Bas Wijnen * client/client.c, client/player.c, client/player.h, common/game.h, server/server.h: Added arbitrary point tokens. 2003-10-12 Bas Wijnen * client/identity.c, client/player.c, client/player.h, server/player.c, server/pregame.c: Finished viewer support. * common/map_query.c: Fixed bug with pirate. 2003-10-12 Bas Wijnen * server/develop.c, server/player.c, server/server.h: Allowed multiple development cards of the same type. * client/client.c, server/discard.c, server/gold.c, server/robber.c, server/server.c, server/player.c, server/pregame.c, server/server.h, server/turn.c: Added support for viewers and disconnected players. * server/develop.c, server/player.c, server/pregame.c, server/resource.c, server/robber.c, server/turn.c: Cleanup. 2003-10-12 Jeff Breidenbach * debian/control, debian/changelog: prepare for 0.8.0 package 2003-10-11 Bas Wijnen * ai/greedy.c, client/client.c, client/client.h, client/guimap.c, client/robber.c, common/map.c, common/map.h, common/map_query.c, server/robber.c: Prepared client for pirates, bugfixes. * client/build.c, client/client.c. client/guimap.c, client/robber.c, client/turn.c, common/map.h, common/map_query.c, server/buildutil.c, server/robber.c server/server.h server/turn.c: Completed pirates in server and client. Bugfixes. * common/log.c: Code cleanup. * server/gnocatan-server-gtk.c: Used message window for log. 2003-10-10 Bas Wijnen * common/game.c, common/game.h, common/map.c, common/map.h, common/map_query.c, server/robber.c, server/turn.c: prepared server for pirates. 2003-10-10 Bas Wijnen * ai/client.c: Fixed AI naming bug. * client/gui.c: Made code nicer, fixed bugs. * client/robber.c: Fixed language bug. * client/theme.c: Made code nicer, fixed scaling bugs. 2003-10-03 Roland Clobus * client/gold.c: Cosmetic change for the Choose Gold dialog. 2003-10-03 Bas Wijnen * server/player.c: Bugfix. * server/buildutil.c: Fixed bug #817465. * server/gold.c: Removed debugging statement. * client/gui.c: Inserted startsize patch (fixes bug #722641). 2003-10-03 Bas Wijnen * server/player.c: Bugfix. 2003-10-01 Bas Wijnen * ai/client.c, client/client.c, server/player.c, server/pregame.c, server/server.c, server/server.h: Changed protocol for sending initial player name. * ai/client.c, client/client.c, server/player.c: Added extensions to protocol, to allow future features without needing a minor version change (which would break compatibility). 2003-09-30 Bas Wijnen * many files, didn't record which: Fixed const<->non-const warnings introduced by previous 2 patches. * client/theme.c: Bugfixes in scaling tiles. * client/guimap.c: Improved code. * client/gui.c: Fixed settings update bug. 2003-08-17 Jason Long * client/admin-gtk.c, client/connect.c, client/discard.c, client/gameover.c, client/gui.c, client/histogram.c, client/legend.c, client/monopoly.c, client/name.c, client/plenty.c, client/settingscreen.c: use GtkDialog instead of deprecated GnomeDialog 2003-08-17 Jason Long * configure.in: remove references to macros directory and add checks for Gnome2 * client/Makefile.am, common/Makefile.am, server/Makefile.am, ai/Makefile.am, meta-server/Makefile.am: use GNOME2_CFLAGS and GNOME2_LIBS or GLIB2_LIBS for INCLUDES and LDADD * client/connect.c: don't destroy cserver_dlg a second time * client/gui.c (gui_draw_hex, gui_draw_edge, gui_highlight_chits, expose_map_cb), client/guimap.c (redraw_node): fixed some drawing issues (Gnocatan was trying to draw to the backing store before it was created) * client/gui.c (build_messages_panel), common/common_gtk.c, server/gnocatan-server-gtk.c (build_interface): use GtkTextView instead of deprecated GtkText * client/gui.c (register_gnocatan_pixmaps): use GtkIconFactory instead of deprecated gnome_stock_pixmap_register * client/guimap.c (guimap_terrain), client/theme.c: use GdkPixbuf instead of Imlib * client/config-gnome.c, client/gui.c, client/i18n.c, client/identity.c, server/gnocatan-server-gtk.c: miscellaneous changes for Gnome2 2003-09-29 Bas Wijnen * ai/client.c, client/client.c, server/turn.c: made ship move back more logical in protocol. * server/buildutil.c, server/buildutil.c: bugfixes. * common/map_query.c: Made query more general. 2003-09-29 Bas Wijnen * server/buildutil.c, server/server.h, server/turn.c: Fixed longest road bug. * ai/client.h: Fixed bug. * client/client.c, server/buildutil.c, server/develop.c, server/pregame.c, server/server.h, server/turn.c: Changed undo protocol to let the server do the thinking. * server/turn.c: Fixed bug #698611 2003-09-28 Bas Wijnen * server/gnocatan-server-gtk.c: Fixed UI bug in sevens rule. 2003-09-28 Bas Wijnen * ai/ai.c, ai/client.h, ai/greedy.c: Chat when aborting a game with gold. Function is not actually implemented yet. * client/client.c, client/client.h, client/gold.c: Fixed bugs in gold and changed some states from goto to push/pop. * common/buildrec.h: Preparing to fix longest road undo bug. * common/map_query.c, server/buildutil.c: Fixed longest road bug. * server/develop.c, server/discard.c, server/gold.c, server/player.c, server/pregame.c, server/robber.c, server/server.h, server/trade.c, server/turn.c: Fixed bugs and changed most states from goto to push/pop. * docs/server_states.fig, docs/client_states.fig, docs/README.states: New files documenting the (new) state model of server and client. 2003-09-26 Bas Wijnen * ai/client.c, ai/computer.h, ai/greedy.c: AI crashed when there was gold in the game. Now it exits gracefully. 2003-08-15 Roland Clobus * common/Makefile.am, meta-server/Makefile.am, po/Makefile.in.in: 'make distcheck' aborted with an error. Removed reference to non-existing po/Changelog and updated the generation of common/gnocatan-path.h * po/de.po, po/es.po, po/gnocatan.pot: Changed automatically (line numbers in comments) by make distcheck. 2003-09-25 Bas Wijnen * ai/greedy.c: Fixed bug. * server/player.c, client/player.c, client/client.c: Fixed bug. * common/map_query.c, server/gold.c: Fixed incorrect C. 2003-08-15 Yusei * server/player.c: fixed a bug with anonymous players that caused the first player to get their turn. 2003-08-15 Roland Clobus * client/legend.c: fixed text-display for gold in legend-dialog 2003-09-25 Bas Wijnen * ai/client.c: Let ai prefer 2:1 trade. 2003-08-18 Roland Clobus * client/client.c, server/resource.c, ai/client.c, ai/greedy.c, ai/client.h: Fixed bug 652707. The ai now correctly handles the out-of-resource-card situation. Also the client is fixed. As a side effect, I enabled the 2:1 trade for the AI. Applied with minor changes by Bas Wijnen. 2003-09-25 Bas Wijnen * po/de.po: Fixed a translation. 2003-08-14 Bas Wijnen * server/gold.c, client/gold.c: fixed bug that gold was not taken out of the bank. Added support for giving out gold during setup. Fixed display of gold choosing dialog (update bank etc). 2003-08-14 Bas Wijnen * server/pregame.c server/gold.c server/server.h: gold is now also given out in setup phase. 2003-08-14 Bas Wijnen * client/themes/Iceland/theme.cfg: Made the Iceland theme use its gold tile. 2003-08-14 Yusei * new file client/ship_move.c; common/game.c, client/gui.c, client/Makefile.am, common/common_gtk.c: Fixed truncated long lines from server, added a ship move icon, added possibility to make message window a fifo. 2003-08-09 Roland Clobus * client/player.c: Keep showing the names and scores of disconnected players. Now you can see the scores of the other players at the end of the game. 2003-08-03 Roland Clobus * client/client.c, client/client.h, client/develop.c, client/player.c, client/player.h, client/resource.c: Fixed bug 600765. The client can now play several consecutive games, restart is not needed anymore. 2003-08-02 Bas Wijnen * new files client/gold.c, client/gold.png, server/gold.c, server/seafarers-gold.game; configure.in, client/Makefile.am, client/admin-gtk.c, client/client.c, client/client.h, client/gui.c, client/gui.h, client/guimap.c, client/legend.c, client/resource.c, client/theme.c, client/theme.h, common/map.c, common/map.h, common/network.h, po/Makefile.in.in, server/Makefile.am, server/glib-driver.c, server/gnocatan-server.c, server/player.c, server/pregame.c, server/resource.c, server/server.h, server/turn.c: Some bugfixes, added support for gold terrain. Set version to 0.8.0 due to changes in the protocol. 2003-07-26 Bas Wijnen * ai/client.c, ai/player.c, ai/player.h, client/build.c, client/client.c, client/client.h, client/gui.c, client/guimap.c, client/player.c, client/player.h, client/turn.c, common/buildrec.c, common/map.h, common/map_query.c, common/state.c, server/buildutil.c, server/server.h, server/turn.c: Added sailing of ships. * Fixed bug that ships may disappear on reconnect. 2003-07-19 Bas Wijnen * ai/greedy.c: Fixed ai building bug 772865 * server/gnocatan-server-gtk.c, server/meta.c, server/server.h: Added "Send hostname" for metaserver to allow masqueraded hosts to show correctly (they need a forwarded port). * server/player.c, server/pregame.c: Fixed bug 770314. * common/map_query.c: New longest road algorithm, fixes bugs #762927 and #774107. 2003-07-04 Bas Wijnen * client/gui.c: Added hotkey support for standard actions 2003-05-31 Jeff Breidenbach * Security fixes courtesy of Bas Wijnen 2003-02-21 Jeff Breidenbach * debian/rules: Adjusted .deb build rules to Steve's suggestion. Allows debuild to run from pristine CVS checkout while still allowing debian/ tweakers to avoid some build latency. 2003-02-14 Andy Heroff * server/player.c: Fixed several GList usage issues in player reconnection code. Need to always store the return value from an append or remove, also don't need to allocate a list node when the GList pointer is NULL. NULL is considered the empty list value. * server/turn.c: Check for NULL player when trying to hand out resources after a roll. We can run into this if a player drops and a roll occurs while he is disconnected. Fixes bug 621358, but creates bug 686956. 2003-02-13 Andy Heroff * Batch fix of bugs 205475, 480328, 482336, 482744. Cleaned up compiler warnings. * ai/ai.c: Removed goto. Added warning when the computer names file can't be found. * server/gnocatan-server-console.c: Added printing of usage information if attempt to start server returns FALSE. * server/gnocatan-server.c: Added missing CR to log message. Changed g_error call to g_critical call when game params are not found to prevent server from exiting at that point, also allowing the call to return FALSE in that case. 2003-02-11 Andy Heroff * server/trade.c: Fixed SF bug 660814 regarding server crash during trading. Wrong quote list nodes were being deleted when a new quote was issued which removed a request for a resource for which there was already a quote on the table. 2003-01-24 Steve Langasek * client/settingscreen.c, po/gnocatan.pot, po/de.po: fix misspelling. * po/es.po: translation improvements. Although only 60% of the gettext strings are translated, the game is now almost completely playable in Spanish. * debian/rules: tweak Debian build script so that we can skip certain developer-only tasks, and so we don't end up with an extra changelog in the directory. 2003-01-23 Steve Langasek * client/connect.c, common/meta.h: automatically upgrade the metaserver setting to one that works if the old metaserver is saved in the client settings. 2003-01-21 Steve Langasek * client/client.h, client/resource.c, client/monopoly.c, client/player.c: use caller-provided buffer for resource_cards(), to eliminate the previous kludge :) 2003-01-21 Roman Hodek * po/de.po: Fixed a few German translations after Steves changes below. * client/resource.c (resource_cards): let it use two alternating static buffers, because this function is sometimes called twice as function argument. 2003-01-21 Steve Langasek * client/client.c, client/client.h, client/player.c, client/resource.c, client/trade.c: extensive reworking of string handling for better i18n support. The code still needs some work to not depend on English-style plural rules, but the game should now be sanely translatable to a wide range of languages. * po/de.po, po/es.po, po/gnocatan.pot: update the Spanish and German translations in accordance with the above. 2003-01-19 Roman Hodek * po/gnocatan.pot: rebuilt * po/de.po, po/es.po: updated from new .pot; de is fixed already (not many changes...), es still needs more translations * ai/greedy.c: AI chat spelling fixes by Tril * client/trade.c (is_domestic_trade_allowed): patch by Tril : allow trade even if nobody has the resource in question, in case somebody wants to give away for free :) * gnocatan.spec: applied patch by Daniel Jensen , adding manpages and fixing images (release 3) 2003-01-16 Steve Langasek * common/meta.h, meta-server/meta-report: change to using gnocatan.debian.net as the default metaserver instead of the defunct term1.dccs.com.au. 2003-01-15 Jeff Breidenbach * themes.c: incorporate string terminator patch from Hal Eisen 2003-01-15 Steve Langasek * gnocatan.spec: RPM packaging updates from Daniel Jensen 2003-01-14 Steve Langasek * client/Makefile.am: add an explicit dependency on authors.h to make sure it's generated when we need it. 2003-01-12 Jeff Breidenbach * AUTHORS: adjust my email 2003-01-12 Steve Langasek * ai/Makefile.am: don't link GNOME libs for a binary that has no gui. 2003-01-11 Steve Langasek * client/Makefile.am, client/guimap.c, client/theme.c, debian/rules: further refine the placement of image files. * configure.in, ai/client.c, ai/develop.c, ai/player.c, ai/resource.c, client/chat.c, client/client.c, client/develop.c, client/player.c, client/resource.c, client/settingscreen.c, po/de.po, po/es.po, po/gnocatan.pot: Gettext enhancements: don't construct strings by concatenation, don't mark strings for translation with _N() that are non-translatable (such as '%s'). Add Spanish to the list of supported languages and begin localizing. Revert accidental breakage of the de.po file. * server/Makefile.am, server/gnocatan-server-gtk.c: fix the directory lookup for game themes 2003-01-10 Steve Langasek * docs/Makefile.am, docs/gnocatan.6, docs/gnocatan-server-gtk.6, docs/gnocatan-server-console.6, Makefile.am, configure.in, docs/.cvsignore, debian/gnocatan-server-console.files, debian/gnocatan-server-gtk.files, debian/rules: add preliminary manpages. * debian/gnocatan-server-console.undocumented, debian/gnocatan-server-gtk.undocumented, debian/gnocatan-client.undocumented: Not undocumented anymore. 2003-01-09 Steve Langasek * AUTHORS, client/Makefile.am, client/gui.c, po/gnocatan.pot, po/de.po: bring the AUTHORS file up-to-date, and autogenerate the about box list from this file. * client/Makefile.am: s/pixmap_DATA/image_DATA/, to please automake. 2003-01-08 Steve Langasek * client/theme.c: use a more portable variadic macro syntax, to address OS X concerns * server/gnocatan-server.desktop, server/Makefile.am: add a GNOME desktop entry for the GTK server, so it's easier to start from the menu. * ai/Makefile.am, client/Makefile.am, common/gnocatan-path.h.in, server/Makefile.am, debian/dirs, debian/gnocatan-ai.files, debian/gnocatan-server-data.files, debian/rules, gnocatan.spec, server/gnocatan-server.c: move /usr/share/gnocatan to /usr/share/games/gnocatan, per the FHS; move things-that-are-not-pixmaps out of /usr/share/pixmaps. 2003-01-01 Jeff Breidenbach * debian/gnocatan-meta-server.init: privilige reduction * debian/control: adjust dependencies, add co-maintainers. * debian/changelong: prepare for upload to Debian 2002-12-25 Roman Hodek * configure.in: Some changes to make it work with autoconf2.50 and automake-1.7. Set version to 0.7.1.90 [internal snapshot] * depcomp, po/ChangeLog: new * acconfig.h: removed obsolete file * Makefile.am (distclean-local): remove some more stuff * gnocatan.spec: applied patch by Brian Wellington * client/player.c (player_has_quit): remove player also from internal list for a more meaningful message on reconnection. * server/player.c, server/pregame.c, server/server.h: remove redundant is_game_full variable and replace by game->num_players == game->params->num_players * server/player.c (player_revive): send an explicit note to players that a reconnection has happened * server/player.c (player_set_name): explicitly tell if name was already in use and so why one is 'anonymous' 2002-07-22 Roman Hodek * client/Makefile.am (install-data-hook): fix silly thinko. 2002-07-21 Roman Hodek * 0.7.1 released!! * debian/changelog, gnocatan.spec: bump version number to 0.7.1. * client/gui.c (menu_settings_cb): use GTK_EXPAND attribute in x dir (looks better). Delay signal_connect calls for language buttons to avoid gtk assertation failures. * client/Makefile.am: omit CVS dirs for theme file installing and exporting * client/help/C/Makefile.am: $(DESTDIR) was missing 2002-07-09 Roman Hodek * ai/greedy.c: Introduce better, situation-related chat messages. * ai/client.c (client_chat): obey chatty parameter, call computer_funcs.chat() with occasion parameters * ai/client.c: added hooks for client_chat() * ai/client.h, ai/computer: changed prototypes for client_chat() et al. * po/de.po: updated 2002-07-06 Jeff Breidenbach * debian/rules: package upstream changelog, readme 2002-07-06 Roman Hodek * theme.c, theme.h: new files for theme handling * client/Makefile.am: added theme.[ch], added hook for installing theme data * client/gnocatan.c: call init_themes() * client/gui.c (menu_settings_cb, settings_apply_cb): new option menu to select theme added to setting dialog * client/guimap.c: in many places replace hardcoded pixmaps/colors by what's defined in current theme * client/guimap.h: New parameter 'terrain' for draw_dice_roll(). * client/histogram.c: pass new parameter to draw_dice_roll(). * po/de.po: updated 2002-06-19 Jeff Breidenbach * debian/rules: adapt to non-temporary Makefile.in files 2002-06-17 Roman Hodek * ai/ai.c (main): result of getopt must be stored in an int. * client/connect.c (connect_create_dlg): saved_meta_server must be strdup-ped if coming from env or fixed str. 2002-06-12 Jeff Breidenbach * debian/control: package description tweaks 2002-06-09 Roman Hodek * ai/greedy.c (greedy_consider_quote, trade_desired), ai/trade.c, ai/client.c: new functions to make AI respond to trade requests; maybe not really clever yet, but at least a start. Again removed some unnecessary printf()s. * ai/greedy.c (best_road_to_road_spot): don't set up roads on sea. * ai/client.c (mode_year_of_plenty): send plenty selection _after_ receiving what is in bank to avoid protocol error. * client/client.c (mode_game_over): accept all messages in mode_game_over to avoid error messages. * client/monopoly.c: added #include "config.h" before gnome.h to make gettext work * common/state.c (sm_pop_all_and_goto): new func to avoid undefined state after sm_pop_all(). * client/client.c (check_other_players): when receiving game won message, use sm_pop_all_and_goto(), otherwise it can happen that the NET_CLOSE event is already received during processing of the sm_goto() and the state is undefined and an assertation fails. * server/gnocatan-server.c (cfg_set_*): check for params != NULL. 2002-06-07 Jeff Breidenbach * debian/contol: merge debian packaging update 2002-06-06 Roman Hodek * configure.in, acconfig.h: export ALL_LINGUAS to config.h * client/i18n.[ch]: new files for language setting handling handles available languages, initializing NLS from saved setting or environment, and changing language * client/Makefile.am: added i18n.[ch] * client/gnocatan.c (main): call init_nls() instead of doing stuff itself * client/gui.c: make settings dialog have separate pages, now that the number of setting grows... new page for language setting (TODO: dynamic GUI switch!) * po/de.po: updated 2002-06-03 Roman Hodek * client/gui.c (splash_build_page): use a viewport widget around the splash pixmap to avoid it is drawn over the tab area if space is too small for it. * po/.cvsignore, intl/.cvsignore: new 2002-06-02 Roman Hodek * configure.in: bumped version to 0.7.1 (prelim.), enabled NLS * client/chat.c (chat_set_focus): new function to grab focus for chat entry window (to not have to type on it all the time...) client/client.c: call chat_set_focus in various places * everywhere: run gettextize to create po/ subdir, change configure.in and Makefiles for gettext, created German translation, add more _() marks in a bunch of places, include config.h where needed before gnome.h * ai/client.c: one more exit fix, remove some unnecessary printfs. * ai/*.c: started to prepare AI player for domestic trade * client/histogram.c: Force histogram_dlg and table to NULL if dialog is closed. * maintained */.cvsignore 2002-05-31 Roman Hodek * meta-server/gnocatan-meta-server.c (client_create_new_server): revert -m localhost to -r 2002-05-28 Andy Heroff * client/chat.c: Fixed parsing of /me command in chat. 2002-05-27 Roman Hodek * 0.7.0 released!! * configure.in, gnocatan.spec, debian/changelog: bumped version to 0.7.0. * server/pregame.c, ai/greedy.c, common/map_query.c: catched a bunch of NULL pointer accesses revealed by 'The Pond' that isn't totally surrounded by sea. * INSTALL, README: modernized a bit * server/Makefile.am: added $(includedir) to INCLUDES so that gdk_imlib.h is found in all cases. 2002-05-24 Roman Hodek * configure.in: set default prefix to output of gnome-config --prefix (if available) * common/Makefile.am: new rule to generate gnocatan-path.h from gnocatan-path.h.in with datadir and bindir substituted 2002-05-23 Roman Hodek * client/histogram.c: if new value is registered, update the graph; this revealed that the drawing worked only by incident, the curve area overlayed the bars... solution was to draw bars and curve in the same expose callback. * common/common_gtk.c (check_gtk_widget): Work around a GTK bug: if mouse is inside a toolbar button that becomes sensitive (e.g. the "Roll Dice" button), you had to move out and in the mouse before you could click. * server/gnocatan-server-console.c (main): added new option -m to set meta server name * server/gnocatan-server-gtk.c (build_interface): added new field for meta server name * server/meta.c: make name of meta server to connect to a global var * client/connect.c (create_server_dlg): remove "start server" button in create server dialog, and use standard OK/Cancel buttons instead. (I finally found out how to do this :) 2002-05-22 Roman Hodek * client/gui.c: new option to show legend as a page besides the map (someone with lack of screen space for the dialog suggested that) * client/legend.c (legend_create_content): separated out from legend_create_dialog so legend page can use same code * client/gui.c: two new checkboxes in the settings dialog to disable use of colors in the message window and player summary. * common/common_gtk.c (log_set_func_message_color_enable): new interface to en/disable colors in message window (message_window_log_message_string): if msg_colors is false, use black * client/player.c (player_modify_statistic): obey color_summary_enabled 2002-05-21 Roman Hodek * client/help/C/gnocatan.sgml: Updated with respect to recent developments/changes, updated some images to match current looking. * meta-server/gnocatan-meta-server.c (client_create_new_server): Pass full hostname to created servers in environment. Otherwise the server will register to the meta-server as running on "localhost" and it won't be reachable from outside. * debian/gnocatan-ai.menu: Fix typo ('-' too much again) * debian/gnocatan-meta-server.conffiles: init.d files is a conffile 2002-05-20 Jeff Breidenbach * Fix splash screen packaging bug. 2002-05-20 Roman Hodek * client/gui.[ch], client/client.c: on startup show a splash screen that disappears on the first connect. Image contributed by Tobias Jakobs. * client/gui.c (help_about_cb): collected more names from the ChangeLog and added them to the about box. * client/histogram.c: paint chips as x axis labelling like on map; probability is a triangle rather Gaussian!! fix drawing. * client/guimap.c (display_hex): separate out drawing of dice chip into draw_dice_roll (needed by histogram also now). * ai/client.c (global_filter): if net connection was close, print message and exit. * client/client.c (global_filter): likewise, but set status to offline. * client/histogram.c: added y axis labelling, draw normal distribution * server/server.c (new_computer_player): close inherited fd's, use _exit normally to avoid GTK atexit procedures running. * deian/gnocatan-ai.menu: fix typo 2002-05-19 Roman Hodek * Release 0.6.99 here as beta for 0.7.0. * client/connect.c (build_create_interface): new spin for number of ai players. * ai/ai.c (random_name): don't open computer_names in rw mode; added srand to avoid rather likely case that two ai players started closely together choose the same name. * server/player.c: made tournament mode work; Added PB_SILENT mode for player_broadcast. * server/server.c (new_computer_player): new argument 'server' (for completeness), simplify a bit, start a second child to avoid zombies * server/gnocatan-server-console.c: new -c option to start a number of computer players * meta-server/gnocatan-meta-server.c (client_create_new_server): parse number of ai players and pass it on to server * ai/Makefile.am: remove admin-gtk stuff, obviously copied from client/Makefile.am * Makefile.am (dist-hook): added spec file, autogen.sh, and debian files to dist tarball * server/Makefile.am: added new games * common/Makefile.am: added gnocatan-path.h * client/help/C/Makefile.am (dist-hook): add images to dist tarball * gnocatan.spec: best-effort try to implement same sub packages scheme as for Debian, but untested * debian/control: added Recommends: gnocatan-ai to both server packages, as they can start ai clients 2002-05-16 Roman Hodek * client/chat.c (chat_parser): Fix /me. * meta-server/gnocatan-meta-server.c (client_create_new_server): Emit an syslog error message if server cannot be exec-ed. * Make everything compile also with -Werror. * debian subdir: New package layout: - merge -data into -client, data are too small to justify a separate Arch: all package - split -server into -server-gtk, -server-console (much less dependencies!), and -server-data (common stuff) - new -meta-server and -ai packages A few debian/rules cleanups. 2002-05-13 Roman Hodek * client/connect.c (show_waiting_box, close_waiting_box): new dialog box indicating the we're waiting for an answer from a meta server add net functions for querying meta server about game types and creating a new server (meta_notify): parse welcome line for protocol version, send own version, parse proto 1.0 data (create_server_dlg): new dialog for creating a new game server via meta server (create_meta_dlg): add proto 1.0 data (victory points, sevens rule) and a button to create a new server (if proto >= 1.0) * client/client.c: implemented server notes (not used yet). * client/chat.c: implemented IRC-compatible /me. * ai/ai.c: use gnocatan-path.h * server/player.c (check_versions): ignore rightmost number (after final '.') because patchlevel changes shouldn't make protocol incompatible, otherwise simplify (mode_bad_version, mode_game_full): send ERR to client (mode_global): call start_timeout * server/server.c (game_server_start): pass Game* to meta_send_details implemented timeout to exit server after some time without players. * server/server.h (struct Game): add client_version (prototypes): pass Game* to meta_send_details * server/gnocatan-server.h: use gnocatan-path.h * server/meta.c (meta_send_details): send proto 1.0 data if server can take it, need Game* as argument for current number of players (meta_event): parse welcome message for version, send own version generally pass Game* instead of GameParams* to meta_send_details * server/gnocatan-server.c (cfg_set_timeout): new * server/gnocatan-server-console.c (main): new options -k (kill server after some with no players), -T (terrain type), remove unneeded optarg for -r (usage): clean up * meta-server/gnocatan-meta-server.c (struct Client): add protocol_{major,minor} (client_list_servers): send more data for proto 1.0 clients (client_list_types): new function to list available game types (client_create_new_server): new function to start a game server on client request (try_make_server_complete): cope with proto 0 clients (client_process_line): process proto 1.0 requests and version info coming from client (select_loop): call new reap_children to get rid of zombie servers (setup_accept_sock): loop over addrinfos to not miss the IPv4 one :) (setmyhostname): new, hostname needed when starting a server (general): undefine LOG (general): do some logging via syslog * meta-server/meta-report: New calling syntax: meta-report [request [server [protocol]]] defaults: request=client, server=$GNOCATAN_META_SERVER, protocol=1.0 * meta-server/Makefile.am: also include from common/ * common/network.c: (write_ready, net_write): protect against closed sessions. PF_UNSPEC cleaner than AF_UNSPEC. Undefine LOG. * configure.in: introduce META_PROTOCOL_VERSION, bump version to 0.6.99 (beta for 0.7.0) * acconfig.h: added META_PROTOCOL_VERSION 2002-05-06 Roman Hodek * ai/greedy.c, ai/client.h: Fix "no prototype for foobar" warnings by introducing some statics and a new prototype. * Merged in latest Debian version (0.6.1-6), including: - IPv6 support by using getaddrinfo() - my connect dialog changes that add a new field for naming the meta server to contact * Added new games in server/, contributed by : canyon.game conquest.game pond.game square.game star.game x.game And one extended by me to have ports: conquest+ports.game 2002-03-10 Steve Langasek * clean up the SGML handling so that it matches the behavior of the Debian tools (which everyone seems to be using). 2002-03-10 Andy Heroff * Modified call to execv, as per SF bug 482743. 2002-03-10 Steve Langasek * Begin cleaning up the source to make it usable again. * Bump the protocol version, since, well, that's what you're supposed to do when you change the bloody protocol. 2001-05-29 David Fallon * Added Geoff Hanson's reconnect patch. The short version of how this works is when someone disconnects, instead of the usual cleanup, player_archive is called which saves the names of the disconnected individuals. On all connects, the player name is searched for to see if this is a player that has been archived, and if so, the player_revive function is called to bring them back. There's also a new gameinfo struct that is used to pass the game state back to the client. Note, if we ever have a gnocatan tournament, we'll have some security problems, but that's okay as there's no other security anyways. * Changed client/build.c, client.c, client.h, develop.c, player.c, player.h * Changed server/develop.c, discard.c, player.c, pregame.c, robber.c, server.h, trade.c, turn.c 2001-03-09 Matt Waggoner * One of the official rule variants for Settlers of Catan is to disallow rolling a 7 on the first two rounds. This has been added as a feature of gnocatan, as well as an additional variant: always reroll 7s. These are accessed from the console server with the "-R n" parameter (n = 0 is normal, n = 1 is no 7s on first 2 turns, and n = 2 is reroll all 7s), and via radio buttons in the GTK+ server. 2001-03-06 Matt Waggoner * Changed some more chat text colors; added a color for the beep message. 2001-03-03 Dave Cole * client/client.c: Fixed bad explanation in comment. 2001-03-02 Matt Waggoner * client/connect.c: fixed a minor bug with the server MRU list. 2001-03-01 Matt Waggoner * client/connect.c and client/client.c: Changed the server MRU list so that it also handles the user name, not just the server and port values. 2001-03-01 Dave Cole * common/state.c (sm_vnformat): Caught a segfault which appeared to be a buffer overrun in sm_vnformat(). Added code to actaully limit formatting to buffer length and abort if overrun to allow real bug to be found. 2001-02-28 David Falllon * Changed client/client.h, client/gui.h, client/gnocatan.c to fix misc. compiler warnings. :) It offended my sensibilities. 2001-02-28 Matt Waggoner * Changed client/connect.c and client/client.c to add a "Recent Servers" drop-box to the connection dialog. It saves the last 100 servers connected to, moving the most recently used one to the top of the list. There's not currently any way to delete an entry from the list, but you can manually edit your ~/.gnome/gnocatan file if you feel so inclined. Only servers that you actually successfully connect to, will be added to the MRU list. 2001-02-27 Matt Waggoner * Changed client/gui.c to have the Game > Settings dialog box include an option regarding whether or not each user's chat text appears in their text color. Added a global config var to client/gui.h and appropriate checking code to client/chat.c. 2001-02-23 Matt Waggoner * Changed client/chat.c to intercept chat text that begins with a slash. This could be the start of a general-purpose slash-command syntax. The only command that is intercepted now is /beep NAME, where NAME is a name of one of the players in the game. If you are the player whose name is NAME, a beep sound is generated; otherwise, it is ignored. The purpose of this command is for players to be able to get someone's attention. * Changed client/histogram.c to include number of times each value was rolled, percentage of the time each value was rolled, and text labels along the left side. 2001-02-22 David Fallon * Added walrusmonkey's port background patch. (SF Patch #103768) I like this patch... One change might be to make the port icons a little larger, but all in all, the more I use it, the more I prefer it over the old tiles. * client/guimap.c: Changes how the port background rendering works. I changed the radius from 13 to 15 and the x/y offsets to make the circle a bit bigger (so the "type" is easier to figure out) and the 2:1/3:1 be centered. (in addition to the raw patch) 2001-02-22 Matt Waggoner * Added a chat window message when someone wins. In shiny purple! 2001-02-16 David Fallon * Added Jeff Breidenbach's histogram patch. (SF Patch # 103459, 103460, 103461) * client/Makefile.am: Added histogram.[ch] to sources * client/histogram.c: Added the file - it handles the dice recording and the actual histogram dialog generation * client/histogram.h: Added the file - heade file for histogram.c * client/gui.c - Added help_histogram_cb function, added "Dice Histogram" menu option to the Help menu. * client/turn.c - Added call to "dice_histogram" function to record dice rolls for the histogram generation. 2001-02-16 Matt Waggoner * A whole bunch of changes to various files, implementing multiple message colors (i.e. resource gain messages are now blue), chat messages are in the player's color, a timestamp before each message in the window, and the player summary box has each line in a different color now! Also note that because SourceForge is broken at the moment, I was not able to make these commits using my regular account (dirtside), which is why they show up under dfallon. List of files changed: * common/log.h: added several new MSG_* defines and a global log_timestamp variable * common/log.c: added a timestamp to each log message * common/common_gtk.c: added many new colors and associated those colors with the new MSG types defined in log.h * client/develop.c: changed several MSG_INFO to MSG_DEVCARD * client/player.h: changed the definition of the statistics struct to contain a pointer to a GdkColor object * client/player.c: added several new color types, associated those colors with items in the statistics array, made the statistic update function use the colors, and also changed many many MSG_INFO messages to various other MSG types * client/resource.c: changed MSG_INFO to MSG_RESOURCE * client/turn.c: changed MSG_INFO to MSG_DICE 2001-02-16 David Fallon * client/build.c: Fixed SF Bug #108981 2000-09-03 Jeff Breidenbach * debian/gnocatan-server.menu: Fix Debian bug #70831 2000-09-18 Andy Heroff * server/5-6-player.game: Set default number of players to 5. * server/buildutil.c: Fixed bug where any edge build (road, ship bridge) would count against total number of roads. 2000-09-03 Jeff Breidenbach * debian/copyright: Added link to Gnocatan website 2000-08-26 Andy Heroff * Version 0.6.1 released! * configure.in: Version update to 0.6.1. * server/develop.c: In Road Building dev card code, modified code so that when RB is complete, edges build during process are removed from the build list. Affects ability to trade. * server/trade.c: In domestic trade code, added check for valid trade conditions (No trade before the roll, and if strict trade is active, no trade after building or buying a dev card). * client/help/C/gnocatan.sgml: Started to update help code. This is by no means a finished product. 2000-08-25 Jeff Breidenbach * debian/control, debian/changelog: preparation for point release 2000-08-24 Daniel Kobras * configure.in: Fix handling of 'PROTOCOL_VERSION' so it shows up as a string in config.h, not as an int. 2000-08-21 Andy Heroff * client/settingscreen.c: Modified justifications. Added i8n calls to all text. 2000-08-21 Steve Langasek * server/player.c, client/client.c, acconfig.h, configure.in: Use a distinct protocol version number for client-server negotiation, so that versions of the client and server that behave compatibly will be able to connect to one another. 2000-08-18 Andy Heroff * client/settingscreen.c, client/gui.c, client/client.h, client/Makefile.am: Added file. Added game settings screen. 2000-08-06 Jeff Breidenbach * debian/control: Tweak build dependencies (Debian bug #68516) 2000-08-01 Andy Heroff * client/gui.c: Quick change to VP target text to make less ambiguous. * server/turn.c: Added debug for 'too-many' error. In the future, all errors should be unique in some way (An identifier after the description) so we can track the source of bugs. 2000-07-31 Andy Heroff * client/gui.c: Fixed resize bug once and for all. Added VP target listing in the status bar. 2000-07-30 Jeff Breidenbach * debian/rules: Explicitly clean client/help/C/gnocatan to fix Debian bug #67287 (problem with the debian build of gnocatan-help). This is a non-beautiful solution. 2000-07-19 Bibek Sahu * client/client.c, client/config-gnome.c, client/config-gnome.h, client/connect.c, client/gnocatan.c, client/gui.c: Abstracted getting/setting configuration values to be platform-agnostic. Still based on gnome-config, though; perhaps we want to stratify the 'config path' into its various components? 2000-07-17 Andy Heroff * server/turn.c, server/develop.c, server/server.h: Fixed bug in which the server would not check for a player victory after a road building card had been played. 2000-07-09 Jeff Breidenbach * debian/control: First pass at Build-Depends: field. (presumably useful for the Debian autobuilders.) 2000-07-08 Andy Heroff * client/gui.c: Changed notebook tabs from left to top to fix the client resizing bug seen going in and out of trade. 2000-06-23 Jeff Breidenbach * debian/README.debian: removed as recommended by http://www.debian.org/doc/maint-guide/ch-dother.html#s-readme 2000-06-21 Andy Heroff * server/player.c: Fixed a bug where a player with an older client that doesn't report its version would have a player number of 0. 2000-06-19 Jeff Breidenbach * debian/control, debian/changelog: update maintainer name, version numbers for debian packages. 2000-06-19 Dave Cole * client/connect.c (connect_create_dlg): Removed code which forced uppercase first character on gnome config player name. 2000-06-18 Andy Heroff * Version 0.6.0 released for general consumption! * client/player.c: Added a couple clauses for BUILD_BRIDGE to remove compile time warnings. 2000-06-18 Bibek Sahu * configure.in, client/Makefile.am, client/gui.c: Made network administration code optional in client. * server/gnocatan-server.[ch]: Code cleanups to remove warnings. Also changed some comments in gnocatan-server.h to make section breaks stand out more. 2000-06-18 Andy Heroff * debian/control, debian/rules, debian/gnocatan-server.undocumented, debian/gnocatan-client.undocumented: Applied patches submitted by Jeff Breidenbach to bring Debian build files up to compliance for submission to the Debian release group. We're going to be a part of the official distro! Yay! * server/STATES, server/player.c, server/server.h, client/client.c: Added version checking to the connect sequence. Also added connection error messages. 2000-06-15 Steve Langasek * gnocatan.spec: cleaned up RedHat build to not include files twice. 2000-06-15 Andy Heroff * Bumped version again to 0.5.6, just in case, to prepare for another package release, mostly to get Gnocatan in the Debian distro. 2000-06-12 Andy Heroff * debian/gnocatan-server.files: Applied patch from Aaron Denney that fixes build problems with the Debian packages. 2000-06-08 Bibek Sahu * common/network.c: changed net_write() to queue data on in-progress connections. The queueing logic was already there; just fixed that bit of logic. * client/admin-gtk.c: made the system clean up after a failed admin connection (same code as closing an admin connection). 2000-06-07 Steve Langasek * common/game.h: Removed redundant 'VERSION' define in header. We have config.h, let's start using it. 2000-06-07 Dave Cole * client/legend.c (legend_create_dlg): Fixed segfault dereferencing NULL game_params before game connection established. 2000-06-06 Andy Heroff * Changed version number to 0.5.5 to prevent CVS users from using incompatable versions. 2000-06-06 Roderick Schertler * client/resource.c: add a 'total' field to your list of resources. 2000-06-04 Steve Langasek * server/into-the-desert.map, server/greater-catan.map: Removed old-style .map files; these have been obsoleted by the .game files. 2000-06-01 Steve Langasek * gnocatan.spec: RPM layout fixed up to conform with the rest of Gnome packages. 2000-05-30 Bibek Sahu * server/gnocatan-server.c: Fixed a minor bug where the game was no longer being set to the first one loaded. 2000-05-30 Steve Langasek * acconfig.h, configure.in, common/map.[ch], server/server.c: Added support for new glib g_rand functions. Untested. 2000-05-28 Dave Cole * client/client.c (mode_start): Goto mode_offline after sm_pop_all(), prevents stack underflow. 2000-05-28 Bibek Sahu * client/Makefile.am client/gui.c client/gui.h client/admin-gtk.c server/gnocatan-server.c: Added a basic network administration interface (stole the interface from the gtk server). Needs work. 2000-05-27 Steve Langasek * common/map.c, server/server.c: Converted common/map.c to use the Mersenne Twister PRNG; further tweaks in g_rand() (non)support. * server/mt_rand.[ch], server/Makefile.am, common/mt_rand.[ch], common/Makefile.am: Moved Mersenne Twister to the common/ subdir, as it's needed elsewhere. 2000-05-27 Andy Heroff * client/gui.c: Added total functionality to what is in the settings dialog. What's there works. More settings will be added as needed. * server/.cvsignore: Readded gnocatan-server to the ignore list for now for those with dirty build directories. Will remove later. 2000-05-27 Bibek Sahu * server/gnocatan-server.c: added a little debugging output. Will be useful soon for network configuration. * server/Makefile.am, server/gnocatan-server.c, server/gnocatan-server.h, server/gnocatan-server-gtk.c, server/gnocatan-server-console.c: Made as much code as possible common between the two servers. Added rudimentary network administration functions. * server/server.c: separated networking code from player connection code so I could use it elsewhere w/o having to rewrite it. * server/Makefile.am: removed line where console server was being linked against common gtk code. 2000-05-27 Steve Langasek * server/server.c, server/mt_rand.[ch], server/Makefile.am, configure.in: Switched to using the Mersenne Twister for our PRNG; should give better dice rolls. 2000-05-25 Steve Langasek * configure.in, acconfig.h: Set up for the use of glib's grand() function as a better PRNG. * client/client.c: Squashed that nasty robber bug. If it comes back to life, we know it's a roach. 2000-05-22 Andy Heroff * server/buildutils.c: Removed longest road debug define to prevent spamming the server's console. The debug code is still in there. * client/gui.c: Built a settings dialog. It only has one setting, and it doesn't work yet. That's next. 2000-05-22 Roderick Schertler * client/player.c: Added player's total victory points to the stat window * common/network.c: Fixed name resolution code to honor hostnames that begin with a digit 2000-05-18 Steve Langasek * server/gnocatan-server-console.c: Plugged in getopt() support so that the user has (some) control over the game settings in the console server. Documentation later. 2000-05-17 Bibek Sahu * server/gnocatan-server-console.c: removed game_list_item_t structure. The params structure stores a title, so just use that instead. Original filename is not all that relevant; if it becomes relevant, we can add it to GameParams later. Also added a function to lookup parameters by title. Changed hash table to store/lookup by string, rather than pointer address. 2000-05-17 Bibek Sahu * server/gnocatan-server-console.c: filled in global variables, and added a function to stuff all the game types in a hash. This will be relevant later when it can be changed over the network. ----> Made the console-only server work. :-) 2000-05-17 Steve Langasek * common/driver.c, server/glib-driver.c: Finished moving glib driver to the common/ subdirectory. * common/common_gtk.c: Removed gdk-dependent input functions. * server/gnocatan-server-console.c: Moved some initialization code for the console server's UI driver into the main loop. * server/server.h: Polished the include list to eliminate redundancies. * common/Makefile.am: Added common_glib.c, common_glib.h to file list. * common/common_glib.[ch]: Added generic glib driver for common code. * common/driver.h: Fixed prototypes within the UI driver to use guint in place of gint. * common/common_gtk.h: Changed __common_gui_h to __common_gtk_h. * server/glib-driver.c: Used the G_PRIORITY_DEFAULT define in place of constant as argument. 2000-05-17 Bibek Sahu * server/Makefile.am: Added glib-driver.c and glib-driver.h, which are used by the console server. * server/glib-driver.[ch]: Functions necessary for the console server. * server/gnocatan-server-console.c: Added some muscle to the skeleton: Implemented some of the stuff necessary for a console server. * server/server.h: Added some headers that it depended on, so it didn't scream at me when I tried to include it just for the Player structure. 2000-05-17 Bibek Sahu * configure.in: added GLIB configuration. * common/common_gtk.c, common/driver.h: Added hooks for input read/write callbacks and [server] player update callbacks. Actually put the input read/write callbacks into common/common_gtk.c. * common/network.c, server/server.c: Switched to using driver's input read/write callbacks. * server/server.c, server/player.c: Switched to using driver's player update callbacks. * server/Makefile.am: Added preliminary files for gui-less server. * server/gnocatan-server.c: Connect the server player-update functions. * server/gnocatan-server-console.c: Preliminary skeleton code for gui-less server. 2000-05-15 Steve Langasek * client/connect.c: Set reasonable defaults for the connect dialog if there isn't a saved config (shuts up GTK, too). * common/Makefile.am, client/Makefile.am, server/Makefile.am: Changed library name from libgnocatan_gui.a to libgnocatan_gtk.a, allowing for the possibility of multiple front-ends 2000-05-13 Bibek Sahu * common/driver.[ch], client/gnocatan.c, server/gnocatan-server.c: Moved the global driver definition to driver.c, and added a function set_ui_driver( UIDriver* ). Moved logging into the driver structure. Note that the gtk driver starts by logging to the console and must be told to move that to a window later on. 2000-05-12 Steve Langasek * common/common_gtk.c, common/state.c: Pulled all GTK-specific code out of state.c, moving it to common_gtk.c. * client/gnocatan.c, server/gnocatan-server.c: Changed main() loops to initialize an appropriate UIDriver. * common/state.h: Exported [inc,dec]_use_count() so that they're available to the interface drivers. * common/driver.h, common/game.h, common/state.h: Fixed some header files so that they automatically include headers on which they depend, instead of expecting the c file to take care of it all. * common/driver.h, common_gtk.h: Began creating the structure for independent interface drivers (GTK, console). 2000-05-12 Bibek Sahu * common/common_gui.[ch], common/common_gtk.[ch]: Renamed common/common_gui.[ch] -> common/common_gtk.[ch] per Steve's request. More appropriate, considering its function. 2000-05-12 Steve Langasek * common/state.[ch], server/buildutil.c, server/develop.c, server/discard.c, server/meta.c, server/player.c, server/pregame.c, server/resource.c, server/robber.c, server/server.c, server/trade.c, server/turn.c: Made the 'widget' within the StateMachine an opaque pointer, so that code that depends on the StateMachine is not bound to any one GUI. * configure.in, meta-server/gnocatan-meta-server.c: Included autoconf fix for cross-platform getopt support 2000-05-12 Bibek Sahu * Moved the common gui stuff into a separate library, so a non-gui program won't depend on the gui functions. 2000-05-12 Dave Cole * client/client.c, common/state.c, common/state.h, server/develop.c, server/discard.c, server/player.c, server/pregame.c, server/robber.c, server/trade.c, server/turn.c: Removed all of the sm_resp_{ok,err,handler}() API from the state machine. Simplified each entry on the state stack down to a single StateFunc. Modified client state machine to use simplified state machine API. * client/client.c, client/trade.c, client/turn.c: Fixed (untested) bug where could not trade after playing road building card before rolling dice. Altered is_maritime_trade_allowed() to look at the strict_trade flag. 2000-05-12 Bibek Sahu * Completely rewrote logging setup. It's now very modular in design, and the main logging stuff does not depend on gtk/gnome (which is the reason it was done). Most files that did logging were moderately modified -- the following functions were converted: log_error(...) -> log_message( MSG_ERROR, ... ) log_info(...) -> log_message( MSG_INFO, ... ) log_color(...) -> log_message( MSG_CHAT, ... ) * The client's initialization sequence now logs to the console until all the windows are set up, then switches logging to the message window. This is step 1 on the road to a server that doesn't require a gui... 2000-05-11 Dave Cole * client/client.c, common/state.[ch]: Removed all of the resphook from the state machine API code and replaced it with some wrappers to sm_resp_{ok,err,handler}() in client.c. First stage in reducing the client state machine complexity. Moved a lot of code around in client.c in an effort to partition the functionality so the stack overflow bug can be found. 2000-05-10 Steve Langasek * common/buildrec.c, common/cards.c, common/cost.c, common/game.c, common/map.c, common/map_query.c, common/network.c, common/quoteinfo.c, common/state.c, server/buildutil.c, server/develop.c, server/discard.c, server/meta.c, server/player.c, server/pregame.c, server/resource.c, server/robber.c, server/server.c, server/trade.c, server/turn.c: Removed includes where they aren't necessary, to ease the transition to a gui-less or gtk-only server. * common/log.h: Internationalization definitions handled internally, so we don't have to include to get them. 2000-05-08 Dave Cole * common/map.h: Changed the visited attribute in Edge and Node to gint for new longest road algorithm. * common/map_query.c: Implemented new longest road algorithm which can handle edge cycles. * server/develop.c: Fixed "ERR wrong-plenty" bug. Was using variable before it received a value in resource_available(). 2000-05-07 Andy Heroff * common/log.c, common/log.h: Added log to console if use_console boolean is set by call to log_set_use_console_bool(). 2000-05-07 Dave Cole * common/cost.c: Fixed cost of bridges. * client/legend.c: Show cost of ships and bridges when appropriate. * client/setup.c: Check num_build_type[] in setup_can_build_*(). 2000-05-06 Dave Cole * client/Makefile.am: Added bridge.png, removed ship_building.c * gnocatan.spec, debian/gnocatan-server.files, server/four-islands.game: Added basic Seafarers game and bridge.png. * client/road.png: Rotated road bitmap to match drawing in identity panel. * client/bridge.png: Added bridge bitmap. * client/build.c, client/stock.c, client/turn.c, client/identity.c: Added bridge support. * client/client.c: Added bridge support. Fixed setup statusbar prompts. Merged road/ship/bridge setup code. Fixed road building development to allow ships and bridges and removed ship building development. * client/ship_building.c: Deleted file - code was obsolete. * client/client.h, client/develop.c: Fixed road building development to allow ships and bridges and removed ship building development. * client/gui.c: Added bridge toolbar button. * client/guimap.c, client/guimap.h: Added polygon for bridge shape. Added bridge drawing and cursor BRIDGE_CURSOR. * client/road_building.c: Fix road building to build ships and bridges in games which use them. * client/setup.c: Add support for ships and bridges in games which use them. * common/buildrec.c: Almost complete rewrite/restructure to fix setup support for ships and bridges. * common/buildrec.h: Added buildrec_get_edge() * common/cost.c, common/cost.h: Added cost_bridge(). * common/game.c (params_load_finish): Set have_bridges flag in map if game with bridges. * common/game.h: Removed DEVEL_SHIP_BUILDING. * common/map.c, common/map.h: Added map pointer to owner Map in Hex, Node, and Edge structures. * common/map.h, common/map_query.c: Added node_has_ship_owned_by(), node_has_bridge_owned_by(), can_bridge_be_setup(), can_bridge_be_built(), map_can_place_bridge(), map_bridge_vacant(), map_bridge_connect_ok(). Fixed is_node_spacing_ok(), is_road_valid(), can_settlement_be_built(), can_city_be_built(), map_building_connect_ok() to handle bridges. * common/state.h: Fixed comments; removed DEVEL_SHIP_BUILDING, added BUILD_BRIDGE. * server/buildutil.c, server/server.h: Merged road_add() and ship_add() into edge_add() which handles bridges as well. * server/develop.c (mode_road_building): Fixed road building to support ships and bridges as well. * server/pregame.c: Added support for bridge building. * server/turn.c (build_add): Added bridge building support. * server/Makefile.am: Added basic Seafarers game. 2000-05-06 Andy Heroff * client/client.c, client/connect.c: Connect dialogue now 'remembers' your last server, port, and name. 2000-05-04 Andy Heroff * client/player.c: Modified all colors to less intense shades. Changed first four colors to match those of the board game. 2000-05-02 Andy Heroff * Project imported into the SourceForge CVS server. * INSTALL: Added 'simple' instructions for building Debian and Red Hat binary packages. * Updated all version references to 0.5.0 for release. * Released version 0.5.0. 2000-04-28 Andy Heroff * client/connect.c, client/name.c: Added " closes dialog" functionality to both of the above files/dialogs. * client/chat.c, client/client.c: Added chat parser with posing (:) and semi-posing (;) functionality. 1999-12-22 Dan Egnor * server/STATES: Attempt at documenting the server state machine. * server/trade.c: Fixed? a possible trade race condition. Actually, the fix was already there, I just think it wasn't quite right, since it didn't reset the player's state properly. This should be reviewed. * server/5-6-player.game: New game file for 5/6 player expansion (from tlau@cs.washington.edu). * client/turn.c, server/trade.c: Implemented option to remove build/trade order restriction, as per 5/6 player expansion rules (from tlau@cs.washington.edu). * server/gnocatan-server.c, meta-server/gnocatan-meta-server.c: Portability fixes (e.g. for Solaris). * client/Makefile.am, meta-server/Makefile.am, server/Makefile.am: Removed silly setgid "games" from install target. * client/help/C/gnocatan.sgml: Fixed some errors in the SGML help-file source. (Too bad this help file is getting out of date anyway...) * macros/Makefile.in: removed from CVS, since it's generated. 1999-12-16 Dan Egnor * Fixed bug which prevented anyone who didn't build a ship during setup from building a ship later (the check to see if the user was out of ships was incorrect). * "make dist" works now, and has the right version number. * Fixed bug #2 (the "domestic-trade delete" bug). * Added .cvsignore files to kill those pesky ?'s. * client/player.c: Beep when it's your turn. Is this a good idea? I know I'm often distracted and don't notice when my turn comes up. It should probably be an option, but I hate to get into the business of having "gnocatan preferences"... * server/gnocatan-server.c: Fix some problems with the terrain randomization toggle; clean up (?) the UI enable/disable logic some (the UI is now fully disabled when you start a game). * server/seafarers.game: Added chit placement numbers to the tiles. Without this, there are no chits, which makes this map a little less useful. I'm pretty sure the numbers aren't in the right places (there are lots of neighboring 8's and such); I'll get out our copy of Seafarers and do the right thing at some point. At least this way we can start testing. * server/server.c: setsockopt(SO_REUSEADDR) *before* bind(). 1999-12-16 Dave Cole * client/gui.c: Added gui_set_game_params() to notify gui code when map is available, and to pass game parameters. Hide toolbar buttons that are not used in the game. * client/identity.c: Do not display shapes that are not used in the game. 1999-11-20 Dave Cole * client/guimap.c: Replaced all of the bogus hand building of ships, roads, settlements and cities with a single shape for each which is scaled and rotated as required. * client/chat.c: Small code reformat. 1999-09-04 Dave Cole * gnocatan.spec, debian/gnocatan-server.files, server/Makefile.am, server/small.game: Added small.game. * server/gnocatan-server.c (build_interface): Call load_game_types() to after creating all widgets. * client/trade.c, common/game.c, common/game.h, server/default.game, seafarers.game, server/trade.c, server/turn.c: Added domestic_trade flag to allow domestic trading to be disabled for in a game. When disabled, the domestic trading GUI is not shown. * server/robber.c (mode_place_robber): Fixed core dump in games where the robber is not initially displayed (small.game). * client/client.c, client/client.h, client/develop.c: Dynamically allocate the development card deck when the game parameters have been received from the server. Fixes bug where DevelDeck.max_cards was not being initialised for player. * server/develop.c, server/player.c, server/server.h: Dynamically allocate the development card deck for each player when allocated. Fixes bug where DevelDeck.max_cards was not being initialised for player. 1999-09-03 Dave Cole * common/game.[ch]: Added params_copy() to create an independant copy of a GameParams structure. * common/map.[ch]: Added map_copy() to create an independant copy of a Map structure. * server/buildutil.c, server/develop.c, server/player.c, server/pregame.c, server/robber.c, server/server.c, server/server.h, server/trade.c, server/turn.c: Changed game->params into a pointer to a copy of the GameParams loaded from the game file. This enables the map to be reinitialised properly on game restart. Removed unused game->map and use game->params->map instead. * common/map.c (layout_chits): Fixed bug which assumed that the number of terrain hexes equaled the number of chits in the layout sequence. * README: Updated version number to 0.4.0 * gnocatan.spec, client/Makefile.am, server/Makefile.am, debian/changelog, debian/control, debian/gnocatan-server.files: Updated to include new 0.4.0 files. 1999-09-02 Dave Cole * client/client.c: Removed global Map @game_map and replaced it with GameParams @game_params, which includes the game map. Removed mode_map(), mode_map_load() and replaced them with mode_load_game() which encapsulates the entire game loading. * client/client.h: Removed global Map @game_map and replaced it with GameParams @game_params, which includes the game map. * client/develop.c, common/cards.[ch]: Renamed card_*() functions to deck_card_*(). * client/develop.c (can_play_develop): Rearranged logic to improve clarity. * common/cards.[ch]: Added deck_new(), deck_free(). Development card decks are now dynamically allocated. * client/gui.c (gui_build_interface): Moved call to stock_init() to client.c (mode_load_game). * client/guimap.c (display_hex): Fixed inconsistent indentation. * client/guimap.c, client/player.c, client/robber.c, client/setup.c, common/buildrec.c, common/map_query.c, server/buildutil.c, server/pregame.c, server/robber.c, server/turn.c, common/game.h, common/map.h, server/server.h: Removed EdgeType and Building enums, expanded BuildType enum to describe all types of building. Renamed Node.building to Node.type to be consistent with Edge.type. * client/guimap.c: Deleted find_ship(), build_ship_regions() as they were identical to find_road(), build_road_regions(). Renamed find_road(), build_road_regions() to find_edge(), build_edge_regions(). * client/player.[ch], client/quote.c, client/trade.c: Replaced max_players/num_players() with game_params->num_players. * client/quote.c, common/game.h, server/server.c: Replaced RESOURCE_LIMIT with game_params->resource_count. * client/stock.c, common/game.h: Replaced DEF_MAX_ROADS, DEF_MAX_SHIPS, DEF_MAX_SETTLEMENTS, DEF_MAX_CITIES with game_params->num_build_type[BUILD_*]. Replaced NUM_DEVELOP with total of game_params->num_develop_type[]. * common/Makefile.am: Added game.c. * common/buildrec.c (ship_has_place_for_settlement): Added check is_node_on_land(). Fixed formatting of a lot of code. * common/buildrec.h, common/map.h: Moved enum BuildType, enum Terrain, enum Resources to common/map.h * common/game.h: Removed NUM_DEVELOP. Expanded GameParams to make all previously static game parameters dynamic. Added params_*() functions to encapsulate GameParams loading / saving / parsing. * server/develop.c, server/server.h: Replaced static description of development card deck with dynamic description from game_params. * common/map.[ch]: Removed static chat_values[] chit layout sequence and replaced it with dynamically defined sequence in GameParams. Added map_set_chits() to bind a chit sequence to a map. * server/buildutil.c, server/player.c, server/turn.c: Made player->num_* count the number of each type that the player has built, instead of store the number of each type the player has left to build. * server/gnocatan-server.c: Almost completely reworked GUI handling code. * server/pregame.c: Removed send_game_map() as this task is now performed during GameParam transfer. * server/resource.c, server/robber.c, server/server.h, server/trade.c: Removed obsolete FIND_STUPID_RESOURCE_BUG code. 1999-06-29 JT * server/*.c: Made sure the server reset features were correct. 1999-06-16 JT * server/server.c (close_player): Fixed bug where server was reporting to the meta-server, players leaving the game who had never joined it. It was possible to make the meta-server report -ve player counts. 1999-06-08 Dave Cole * Released 0.3.3 * client/help/C/gnocatan.sgml: Updated help to include description of the tick / cross in the trade list. * client/help/C/images: Replaced trade.gif and quote.gif * gnocatan.spec: Bumped version number and added new pixmap files. * debian/control: Fixed bogus Recommend field to be Recommends. Changed gnocatan-client to depend on gnocatan-data >= 0.3.3. * client/tick.png, client/cross.png: Added new pixmaps for domestic trade list. * client/guimap.[ch] (load_pixmap): Made function global and added mask parameter to return pixmap mask from gdk_imlib_load_file_to_pixmap(). * client/player.c (player_set_name): When changing player name, report player by previous name when possible. * client/quote.c (quote_finish): Do not clear quote_list, as we need to be able to interpret quotes accepted even after we have rejected domestic trade. * client/quote.c (add_reject_row, remove_reject_rows): Pasted these functions from trade.c. Should clean up trading code for 0.4.x. * client/trade.c (quote_trade_call, quote_trade_reject): Add player rejected trade row to indicate that other players are rejecting domestic trade. * client/quote.c (quote_trade_accept): Monitor domestic trade activity even after we have rejected trade. This allows us to maintain correct resource counts in the player summary. * client/trade.c (is_good_quote, load_pixmaps, check_domestic_trades, trade_domestic_quote): Added pixmaps for tick and cross to indicate validity of each quote from other players. * common/game.h: Bumped version number to 0.3.3. * server/server.c, server/server.h (get_rand): Modified random number generation to match the technique described in the rand() man page. * server/robber.c, server/turn.c: Use new get_rand() function for all random numbers. 1999-05-29 Dave Cole * Released 0.3.2 1999-05-28 Dave Cole * ChangeLog: Started on a real ChangeLog since I just received the first code contribution. * client/chat.c (chat_cb): Strip '\n' out of message text * client/client.c (is_player_status), client.h, client/resource.c (resource_player_check), server/develop.c (monopoly_mode), server/resource.c (resource_debug, resource_maritime_trade, resource_end), server/robber.c (steal_card_from), server/server.h, server/trade.c (domestic_initiate_mode): Added debug code to check that the client and server have the same resource counts for each player. This was to help find a reported bug, but no luck so far. * client/connect.c (connect_create_dlg): Removed term1.dccs.com.au as the default server host. Set input focus to the server textfield on initialisation. * client/name.c (name_create_dlg): Set input focus to the name textfield on initialisation. * client/quote.c (more_resource_cb): Limit the number of resources in a quote to RESOURCE_LIMIT. * client/trade.c (mode_domestic_response, accept_trade_cb): Eliminate the trade_quote static variable. * common/game.h: Bumped game version to "0.3.2" * debian/changelog: Bumped game version to 0.32-1 * gnocatan.spec: Changed homepage. Bumped version to 0.32 * server/trade.c (domestic_initiate_mode): After a domestic trade has been performed, remove all trades that the quoting player can no longer accomodate. 1999-05-23 Thomas Koester * client/player.c (player_domestic_trade): Fixed trading where one party does not supply anything 1999-05-23 Preben Randhol * gnocatan.spec: Sent file to Dave for integration with distribution. pioneers-14.1/NEWS0000644000175000017500000002134311760645213010713 00000000000000Subversion release 14.1 * New features: * Added the game comments to the editor. With thanks to Micah Bunting * Added island discovery bonus in the editor. With thanks to Micah Bunting * Spectators see the nosetup nodes * Editor uses shortcuts for games folders * Large icons for the GNOME3 desktop * Bugfixes: * Speedup of server-gtk * Setting the avatar icon works again * Trade is possible again in games without interplayer trade * Right-click in the editor shows the menu again * Code cleanup (Preparation for Gtk+3, hardening flags, memory leaks, ...) Subversion release 0.12.5 * New features: * These features were written by Micah Bunting: * The maps in the editor can be manipulated more easily * The map can be zoomed * Full screen mode * Notifications. With thanks to Patrick * Bugfixes: * Cosmetic fixes to the way the map is drawn * Fixed some crashes involving the pirate * Fixed some memory leaks in the meta server Subversion release 0.12.4 * New features: * Added a logbot type computer player. With thanks to Andreas Steinel * New map: North Americ by Ron Yorgason * New map: Ubuntuland by Matt Perry * Added a close button on tab pages. With thanks to Anti Sullin * Use AVAHI, With thanks to Andreas Steinel * In the connect dialog, the games can be sorted * Computer player uses the soldier cards and monopoly cards better * New theme ccFlickr, by Aaron Williamson * Tooltips for the development cards. With thanks to Aaron Williamson * The editor can set/unset nosetup nodes * Bugfixes * Fixed the FreeCIV-like and Wesnoth-like themes * The computer player is more stable * The meta-server is more stable * Use the correct size for the icons in the context menu in the editor Subversion release 0.12.3 * New feature: Look in $XDG_DATA_HOME/pioneers/themes for themes * New feature: Look in $XDG_DATA_HOME/pioneers for games * Fixed IPv4 vs IPv6 connection issues when adding local computer players * Some cosmetic changes Subversion Snapshot release 0.12.2 * Bugfix: Rejected trade was not sent * Bugfix: Tournament mode used seconds instead of minutes * Translation updates Subversion Snapshot release 0.12.1 * Removed double menu entries * New feature: the moment of checking for victory can be influenced. With thanks to Lalo Martins. * Use scrollbars, so Pioneers will work correctly on smaller screens. * Fixes for DoS that could stop the server. * The computer player will not attempt to buy development cards when none are available. * Changed the order of distributing player numbers when (re)connecting. * Fixes for the new OpenBSD port. * All names of the computer players are unique. With thanks to chrysn@users.sourceforge.net * Easier selection of meta servers. * Games created by the meta server will automatically add computer players after a minute. * Tournament mode: the timer will only be started when a player enters the game, and the timer will be reset when the last player leaves before the time has elapsed. * Fixed a crash that could occur after many trades. * A new command line option to ./configure: '--enable-protocol=IPv4'. When this is given (needed for the *BSD ports), only connections on IPv4 are made. * New language: Czech * New board: South Africa Subversion Snapshot release 0.11.3 * Update for the server only: resolved issues for servers that run for a long time. Subversion Snapshot release 0.11.2 * Fixed a bug: It as not possible to press the OK button when discard cards after a seven was rolled Subversion Snapshot release 0.11.1 * New languages: Afrikaans and Japanese * Added customizable player icons * Added winnable check in the server and editor * New game feature: city walls * Map preview in the server * Cluster development cards of the same type * The chat panel can be moved to the right * Lauch the client from the server * Cosmetic changes * Various bugfixes * The 0.11 server can also handle 0.10 clients Subversion Snapshot release 0.10.2 * Added --version for all executables * Workaround for a Gtk+ bug * The metaserver unregisters inactive servers * The contents of the tarball is more complete * Various bugfixes Subversion Snapshot release 0.10.1 * Build script updated for easier building * Switch between games without quitting the client * Victory points for discovering an island * More strings are translatable * Announce new players when they enter the game * Lobby + robot * Better handling for disconnected players * Register games with the correct hostname at the metaserver * Various bugfixes Subversion Snapshot release 0.9.64 * Fix for the bugs introduced in 0.9.63 and 0.9.62 Subversion Snapshot release 0.9.63 * Minimum required versions: Glib 2.6, Gtk+ 2.6 * Does not use Gtk+ 2.8 icons anymore Subversion Snapshot release 0.9.62 * Several cosmetic changes * You can now choose to connect as a spectator * Several small fixes * Visual display of the resources * New quote tab page Subversion Snapshot release 0.9.61 * Manual updated * Several small fixes Security release 0.9.55 * Fixes the meta server for meta servers that do allow the creation of new games Security release 0.9.54 [revoked] * Fixes crashes in the public meta server CVS Snapshot release 0.9.49 * New theme, based on Battle of Wesnoth * Configure script updated * Added Swedish translation * Client and server chat length limited to safer lengths * Windows installer checks for the Gtk+ runtime * Several small bugs fixed, code cleanup CVS Snapshot release 0.9.40 * Released Microsoft Windows Native port, requires Gtk+ runtime libraries * Fink port patches integrated * New icons * Fixed the server to allow connections of many players at once * Several small bugs fixed CVS Snapshot release 0.9.33 * Fixed infinite loop when AI tries to trade for something that is not in the bank anymore * Fixed PPC: the cursor on the map is now working again * Introduced extra options to ./configure * Workaround for Gtk-bug with button * Added Hungarian translation * Several small bugs fixed * Added several portability patches CVS Snapshot release 0.9.23 * Fixed: Several bug fixes * New: Left panel shows information during the game First release of Pioneers 0.9.19 * An editor has been added * The AI is stronger, can also play on maps with gold * We have a new name: Pioneers * Pioneers client runs under Cygwin (server not yet implemented) * New maps have been added * Bug fixes, and code cleanup CVS Snapshot release 0.8.1.59 Random player seating order Metaserver can serve a limited number of games Updated man pages CVS Snapshot release 0.8.1.54 Fix for maritime trade CVS Snapshot release 0.8.1.53 Update of gnocatan.spec Fixed about dialog Less severe errors when writing new themes or games Disabled 'Add Computer Player' button in server when gnocatanai is not installed New functionality in meta server: it will tell whether it supports creation of new games CVS Snapshot release 0.8.1.51 Restored compatibility with Gtk+-2.0 and 2.2 Restored compatibility with FreeBSD CVS Snapshot release 0.8.1.50 Fixed reconnect during distribution of gold Tiles can be excluded from shuffling CVS Snapshot release 0.8.1.48 New about dialog Player did not get a turn when playing a second game with the same client Made rules for building roads near 'nosetup' nodes more strict CVS Snapshot release 0.8.1.45 Reconnect fixed when robber active Cosmetic fix on initial size of the map CVS Snapshot release 0.8.1.43 Bugfixes Fixed crash with cursor on the border of a map CVS Snapshot release 0.8.1.42 New preference dialog Development cards cleared when playing second game CVS Snapshot release 0.8.1.40 New again: probability dots are back Code cleanup CVS Snapshot release 0.8.1.39 New: single click building Fixed: longest road detection CVS Snapshot release 0.8.1.38 New: commandline for the client New: compiles with Gtk-2.0, 2.2 and 2.4 Fixed: replaces 127.0.0.1 with localhost CVS Snapshot release 0.8.1.37 What's new/fixed: * Gnocatan can now build the console-only applications if GNOME2/Gtk+ is not found * Several cosmetic changes in the client * Fixed a bug in the ai when playing too many soldier cards * Server-gtk remembers the previous map * Quick fix applied for crash after pressing 'Reject Trade' * Italian translation added * Removed a few memory leaks Release 0.8.1.30 What's new/fixed: * Fixed many bugs regarding the 'Trade Page' * Fixed AI losing resources when offering a trade * Fixed AI choosing unavailable resources when playing the Year of Plenty card * New connection scheme * Added tooltips in the server-gtk * New image for the splash screen, provided by Tobias Jakobs * Fixed bugs regarding the Road Building card * Connection as spectator in a game with more than 8 players+spectators is possible * Updated the log in the console * Minor user interface issues Release 0.8.1.16 Previous release on SF pioneers-14.1/TODO0000644000175000017500000000016211760645213010700 00000000000000Feature requests are located here: http://sourceforge.net/tracker/?func=browse&group_id=5095&atid=355095&status=1 pioneers-14.1/compile0000755000175000017500000001533711760645766011615 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-01-04.17; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free # Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l*) lib=${1#-l} found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes set x "$@" "$dir/$lib.dll.lib" break fi if test -f "$dir/$lib.lib"; then found=yes set x "$@" "$dir/$lib.lib" break fi done IFS=$save_IFS test "$found" != yes && set x "$@" "$lib.lib" shift ;; -L*) func_file_conv "${1#-L}" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pioneers-14.1/config.guess0000755000175000017500000012743211760645766012557 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pioneers-14.1/config.sub0000755000175000017500000010517611760645766012223 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: pioneers-14.1/depcomp0000755000175000017500000004755611760645767011625 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2011-12-04.11; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/ \1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/ / G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pioneers-14.1/install-sh0000755000175000017500000003325611760645766012243 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pioneers-14.1/ltmain.sh0000644000175000017500000105202211760645754012045 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 pioneers-14.1/missing0000755000175000017500000002415211760645766011631 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pioneers-14.1/mkinstalldirs0000755000175000017500000000672211760645767013044 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pioneers-14.1/autogen.sh0000755000175000017500000000134310771471222012211 00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. PKG_NAME="Pioneers" REQUIRED_AUTOCONF_VERSION="2.61" REQUIRED_AUTOMAKE_VERSION="1.9" REQUIRED_INTLTOOL_VERSION="0.35" (test -f $srcdir/configure.ac \ && test -f $srcdir/ChangeLog \ && test -d $srcdir/client \ && test -d $srcdir/server) || { echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo " top-level $PKG_NAME directory" exit 1 } # Create acinclude.m4 from the extra macro cp macros/type_socklen_t.m4 acinclude.m4 which gnome-autogen.sh || { echo "gnome-common not found, using the included version" . $srcdir/macros/gnome-autogen.sh exit 0 } . gnome-autogen.sh pioneers-14.1/pioneers.spec0000644000175000017500000001141611760646024012715 00000000000000Name: pioneers Summary: Playable implementation of the Settlers of Catan Version: 14.1 Release: 1 Group: Amusements/Games License: GPL Url: http://pio.sourceforge.net/ Packager: The Pioneers developers Source: http://downloads.sourceforge.net/pio/pioneers-14.1.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: libgnome-devel, scrollkeeper BuildRequires: gtk2-devel >= @GTK_REQUIRED_VERSION@ BuildRequires: glib2-devel >= @GLIB_REQUIRED_VERSION@ Requires(post): scrollkeeper %description Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. This is the client software to play the game. %package ai Summary: Pioneers AI Player Group: Amusements/Games %description ai Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. This package contains a computer player that can take part in Pioneers games. %package server-console Summary: Pioneers Console Server Group: Amusements/Games Requires: pioneers-server-data %description server-console Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. %package server-gtk Summary: Pioneers GTK Server Group: Amusements/Games Requires: pioneers, pioneers-server-data %description server-gtk Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. The server has a user interface in which you can customise the game parameters. Customisation is fairly limited at the moment, but this should change in later versions. Once you are happy with the game parameters, press the Start Server button, and the server will start listening for client connections. %package server-data Summary: Pioneers Data Group: Amusements/Games %description server-data Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. This package contains the data files for a game server. %package meta-server Summary: Pioneers Meta Server Group: Amusements/Games %description meta-server Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. The meta server registers available game servers and offers them to new players. It can also create new servers on client request. %package editor Summary: Pioneers Game Editor Group: Amusements/Games Requires: pioneers, pioneers-server-data %description editor Pioneers is an Internet playable implementation of the Settlers of Catan board game. The aim is to remain as faithful to the board game as is possible. The game editor allows maps and game descriptions to be created and edited graphically. %prep %setup -q %build %configure make %install make install DESTDIR="%buildroot" rm -rf %{buildroot}%{localstatedir}/scrollkeeper/ %find_lang %{name} %clean rm -rf %{buildroot} %files -f %name.lang %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneers.6.gz %{_bindir}/pioneers %{_datadir}/applications/pioneers.desktop %{_datadir}/pixmaps/pioneers.png %{_datadir}/pixmaps/pioneers/* %{_datadir}/games/pioneers/themes/* %{_datadir}/gnome/help/pioneers/C/*.xml %{_datadir}/gnome/help/pioneers/C/images/* %{_datadir}/omf/pioneers/pioneers-C.omf %post scrollkeeper-update -q -o %{_datadir}/omf/pioneers %postun scrollkeeper-update -q %files ai %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneersai.6.gz %{_bindir}/pioneersai %{_datadir}/games/pioneers/computer_names %files server-console %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneers-server-console.6.gz %{_bindir}/pioneers-server-console %files server-gtk %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %doc %_mandir/man6/pioneers-server-gtk.6.gz %{_bindir}/pioneers-server-gtk %{_datadir}/pixmaps/pioneers-server.png %{_datadir}/applications/pioneers-server.desktop %files server-data %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %{_datadir}/games/pioneers/*.game %files meta-server %defattr(-,root,root) %doc %_mandir/man6/pioneers-meta-server.6.gz %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %{_bindir}/pioneers-meta-server %files editor %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog INSTALL README NEWS %{_bindir}/pioneers-editor %{_datadir}/pixmaps/pioneers-editor.png %{_datadir}/applications/pioneers-editor.desktop pioneers-14.1/xmldocs.make0000644000175000017500000000615411271132651012521 00000000000000# # No modifications of this Makefile should be necessary. # # To use this template: # 1) Define: figdir, docname, lang, omffile, and entities in # your Makefile.am file for each document directory, # although figdir, omffile, and entities may be empty # 2) Make sure the Makefile in (1) also includes # "include $(top_srcdir)/xmldocs.make" and # "dist-hook: app-dist-hook". # 3) Optionally define 'entities' to hold xml entities which # you would also like installed # 4) Figures must go under $(figdir)/ and be in PNG format # 5) You should only have one document per directory # 6) Note that the figure directory, $(figdir)/, should not have its # own Makefile since this Makefile installs those figures. # # example Makefile.am: # figdir = figures # docname = scrollkeeper-manual # lang = C # omffile=scrollkeeper-manual-C.omf # entities = fdl.xml # include $(top_srcdir)/xmldocs.make # dist-hook: app-dist-hook # # About this file: # This file was taken from scrollkeeper_example2, a package illustrating # how to install documentation and OMF files for use with ScrollKeeper # 0.3.x and 0.4.x. For more information, see: # http://scrollkeeper.sourceforge.net/ # Version: 0.1.2 (last updated: March 20, 2002) # # ********** Begin of section some packagers may need to modify ********** # This variable (docdir) specifies where the documents should be installed. # This default value should work for most packages. docdir = $(datadir)/gnome/help/$(docname)/$(lang) # ********** You should not have to edit below this line ********** xml_files = $(entities) $(docname).xml EXTRA_DIST = $(xml_files) $(omffile) CLEANFILES = omf_timestamp include $(top_srcdir)/omf.make all: omf $(docname).xml: $(entities) -ourdir=`pwd`; \ cd $(srcdir); \ cp $(entities) $$ourdir app-dist-hook: if test "$(figdir)"; then \ $(mkinstalldirs) $(distdir)/$(figdir); \ for file in $(srcdir)/$(figdir)/*.png; do \ basefile=`echo $$file | sed -e 's,^.*/,,'`; \ $(INSTALL_DATA) $$file $(distdir)/$(figdir)/$$basefile; \ done \ fi install-data-local: omf $(mkinstalldirs) $(DESTDIR)$(docdir) for file in $(xml_files); do \ cp $(srcdir)/$$file $(DESTDIR)$(docdir); \ done if test "$(figdir)"; then \ $(mkinstalldirs) $(DESTDIR)$(docdir)/$(figdir); \ for file in $(srcdir)/$(figdir)/*.png; do \ basefile=`echo $$file | sed -e 's,^.*/,,'`; \ $(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \ done \ fi install-data-hook: install-data-hook-omf uninstall-local: uninstall-local-doc uninstall-local-omf uninstall-local-doc: -if test "$(figdir)"; then \ for file in $(srcdir)/$(figdir)/*.png; do \ basefile=`echo $$file | sed -e 's,^.*/,,'`; \ rm -f $(DESTDIR)$(docdir)/$(figdir)/$$basefile; \ done; \ rmdir $(DESTDIR)$(docdir)/$(figdir); \ fi -for file in $(xml_files); do \ rm -f $(DESTDIR)$(docdir)/$$file; \ done -rmdir $(DESTDIR)$(docdir) clean-local: clean-local-doc clean-local-omf # for non-srcdir builds, remove the copied entities. clean-local-doc: if test $(srcdir) != .; then \ rm -f $(entities); \ fi pioneers-14.1/omf.make0000644000175000017500000000435011271132651011625 00000000000000# # No modifications of this Makefile should be necessary. # # This file contains the build instructions for installing OMF files. It is # generally called from the makefiles for particular formats of documentation. # # Note that you must configure your package with --localstatedir=/var # so that the scrollkeeper-update command below will update the database # in the standard scrollkeeper directory. # # If it is impossible to configure with --localstatedir=/var, then # modify the definition of scrollkeeper_localstate_dir so that # it points to the correct location. Note that you must still use # $(localstatedir) in this or when people build RPMs it will update # the real database on their system instead of the one under RPM_BUILD_ROOT. # # Note: This make file is not incorporated into xmldocs.make because, in # general, there will be other documents install besides XML documents # and the makefiles for these formats should also include this file. # # About this file: # This file was derived from scrollkeeper_example2, a package # illustrating how to install documentation and OMF files for use with # ScrollKeeper 0.3.x and 0.4.x. For more information, see: # http://scrollkeeper.sourceforge.net/ # Version: 0.1.3 (last updated: March 20, 2002) # omf_dest_dir=$(datadir)/omf/@PACKAGE@ scrollkeeper_localstate_dir = $(localstatedir)/scrollkeeper # At some point, it may be wise to change to something like this: # scrollkeeper_localstate_dir = @SCROLLKEEPER_STATEDIR@ omf: omf_timestamp omf_timestamp: $(omffile) -for file in $(omffile); do \ scrollkeeper-preinstall $(docdir)/$(docname).xml $(srcdir)/$$file $$file.out; \ done; \ touch omf_timestamp install-data-hook-omf: $(mkinstalldirs) $(DESTDIR)$(omf_dest_dir) for file in $(omffile); do \ $(INSTALL_DATA) $$file.out $(DESTDIR)$(omf_dest_dir)/$$file; \ done -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir) -o $(DESTDIR)$(omf_dest_dir) uninstall-local-omf: -for file in $(srcdir)/*.omf; do \ basefile=`basename $$file`; \ rm -f $(DESTDIR)$(omf_dest_dir)/$$basefile; \ done -rmdir $(DESTDIR)$(omf_dest_dir) -scrollkeeper-update -p $(DESTDIR)$(scrollkeeper_localstate_dir) clean-local-omf: -for file in $(omffile); do \ rm -f $$file.out; \ done pioneers-14.1/README.Cygwin0000644000175000017500000000277411512157217012337 00000000000000Short guide to install Pioneers in Cygwin Install Cygwin ============== 1) Get 'setup.exe' from the Cygwin site (www.cygwin.com) 2) Select (additional packages will automatically be selected): gcc4 gettext-devel gnome-common gvim intltool libgtk2.0-devel libtool make netpbm patch patchutils rsvg subversion twm xinit 3) Download and install gob2 (at least 2.0.18) http://ftp.5z.com/pub/gob (./configure, make all install) You now have the setup needed to build and run Pioneers. Build Pioneers from the repository ================================== If you only want to use released versions, skip to the 'Install Pioneers' section. 1) Get the code from the Subversion repository svn checkout https://svn.sourceforge.net/svnroot/pio/trunk/pioneers pioneers 2) Go to the pioneers directory 3) Run automake, build and install ./autogen.sh make make install Install Pioneers ================ 1) Download the source tarball to your Cygwin home directory (c:\cygwin\home\%username%) 2) Start the Cygwin shell 3) Expand the source tarball (tar xvzf pioneers-%versionnumber%.tar.gz) 4) Enter the source directory (cd pioneers-%versionnumber%) 5) Configure, build and install ./configure make make install Play Pioneers ============= 6) Start the X server (startx) 7) Start Pioneers from the XTerm (pioneers) Known limitations ================= * The help is not built * The metaserver does not work (not ported to MS Windows) Roland Clobus 2011-01-08 (Pioneers 0.12.4) pioneers-14.1/README.MinGW0000644000175000017500000000013011666260063012044 00000000000000Instructions for building Pioneers in the MinGW environment are in the MinGW directory. pioneers-14.1/po/0000755000175000017500000000000011760646037010714 500000000000000pioneers-14.1/po/Makefile.in.in0000644000175000017500000001604611760645755013323 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pioneers-14.1/po/POTFILES.in0000644000175000017500000000242111453562064012404 00000000000000client/ai/ai.c client/ai/greedy.c client/ai/lobbybot.c client/common/client.c client/common/develop.c client/common/player.c client/common/resource.c client/common/robber.c client/common/setup.c client/common/turn.c client/gtk/avahi-browser.c client/gtk/chat.c client/gtk/connect.c client/gtk/develop.c client/gtk/discard.c client/gtk/gameover.c client/gtk/gold.c client/gtk/gui.c client/gtk/histogram.c client/gtk/interface.c client/gtk/legend.c client/gtk/monopoly.c client/gtk/name.c client/gtk/offline.c client/gtk/pioneers.desktop.in client/gtk/player.c client/gtk/plenty.c client/gtk/quote.c client/gtk/quote-view.c client/gtk/resource.c client/gtk/resource-table.c client/gtk/settingscreen.c client/gtk/trade.c common/cards.c common/game.c common/gtk/aboutbox.c common/gtk/common_gtk.c common/gtk/game-rules.c common/gtk/game-settings.c common/gtk/guimap.c common/gtk/metaserver.c common/gtk/select-game.c common/gtk/theme.c common/log.c common/network.c common/state.c editor/gtk/editor.c editor/gtk/game-buildings.c editor/gtk/game-devcards.c editor/gtk/game-resources.c editor/gtk/pioneers-editor.desktop.in meta-server/main.c server/admin.c server/avahi.c server/gtk/main.c server/gtk/pioneers-server.desktop.in server/main.c server/meta.c server/player.c server/server.c server/turn.c pioneers-14.1/po/af.po0000644000175000017500000026560111760645356011577 00000000000000# Pioneers - Settlers of Catan for GNOME. # This file is distributed under the same license as the pioneers package. # # Petri Jooste , 2006. # Petri Jooste , 2006. msgid "" msgstr "" "Project-Id-Version: Pioneers 0.10.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2011-10-30 14:57+0100\n" "Last-Translator: Arthur Rilke \n" "Language-Team: Afrikaans \n" "Language: af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-09-26 08:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Language: Afrikaans\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Bedienernaam" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Bedienerpoort" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 #, fuzzy msgid "Computer name (mandatory)" msgstr "Naam vir robotspeler (leeg = enige naam)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Tyd om te wag tussen beurte (in millisekondes)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Robotspelers moenie gesels nie" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Tipe robotspeler" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Skakel ontfoutboodskappe aan" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Wys weergawe-inligting" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Robotspeler vir Pioniers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioniers weergawe:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "'n Naam moet verskaf word.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Tipe robotspeler: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Die spel is reeds vol. Ek gaan weg." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Geen dorpe in voorraad om op te stel nie" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Daar is nie plek om 'n dorp te bou nie" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Geen paaie in voorraad om op te stel nie" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Daar is nie plek om 'n pad te bou nie" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Goed, kom ons begin!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Nou gaan ek julle almal wen! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Nou vir nog 'n probeerslag ..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Ten minste kry ek iets ..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Een is beter as niks!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Kyk net, ek word nou ryk ;-)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Hierdie is regtig 'n goeie jaar vir my!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Jy verdien nie regtig soveel nie!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Jy sal nie weet wat om met soveel hulpbronne te maak nie ;-)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Toemaar, wag net vir my rower en jy verloor dit alles weer!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "He he he!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Rower, hou so aan!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Jou vuilgoed!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Kan jy nie dalk die rower iewers anders heen skuif nie?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Hoekom altyd ek??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Ag Nee!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Wie de duiwel het daardie 7 gerol??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Hoekom altyd ek?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Sê totsiens vir jou kaarte ... :-)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*grynslag*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me sê vaarwel aan jou kaarte ;-)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Dit is wat dit kos om ryk te wees ... :-)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Haai! Waar is daardie kaart heen?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Dief! Dief!!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Wag maar net tot ek wraak neem ..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Ag Nee :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Moet dit NOU gebeur??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Ha ha ha, my soldate is die beste!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Eers beroof jy ons, dan gryp jy die punte..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Kyk daardie pad!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Gmf, jy sal nie met paaie alleen kan wen nie..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Handel word afgewys.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Foutboodskap ontvang van bediener: %s. Besig om uit te gaan\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Jippie!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Geluk van my kant af!" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hallo, welkom in die voorportaal. Ek is 'n eenvoudige robot. Tik '/help' in " "die geselsvenster om te sien watter opdragte ek ken." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' sal weer hierdie boodskap wys" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' sal verduidelik wat die doel is met hierdie vreemde borduitleg" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' sal wys wat is die mees onlangse weergawe" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Hierdie bord word nie bedoel as 'n spel wat gespeel moet word nie. Spelers " "kan mekaar hier ontmoet en dan besluit watter bord hulle wil speel. Dan " "moet een van die spelers die voorgestelde spel opstel en aanbied deur 'n " "bediener daarvoor aan die gang te sit en dit by 'n metabediener te " "registreer. Die ander spelers kan daarna die voorportaal verlaat en by die " "nuwe spel aansluit." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "Die mees onlangse weergawe van Pioniers is" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "Die spel begin nou. Ek word nie meer hier benodig nie. Totsiens." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Wagtend" #: ../client/common/client.c:108 msgid "Idle" msgstr "Ledig" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Ons is uit die spel geskop.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Nie gekoppel nie" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Fout (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Kennisgewing: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s ontvang geen %s nie, want die bank is leeg.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s ontvang slegs %s, want die bank het nie meer daarvan oor nie.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s ontvang %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s vat %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s spandeer %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s word %s terugbetaal.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s weggegooi %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s het die spel gewen met %d oorwinningspunte!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Laai tans" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Weergawes pas nie." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Weergawes pas nie. Maak asb. seker die kliënt en bediener is op datum.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Bou twee dorpe, elkeen met 'n verbindende" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Bou 'n dorp met 'n verbindende" #: ../client/common/client.c:1416 msgid "road" msgstr "pad" #: ../client/common/client.c:1418 msgid "bridge" msgstr "brug" #: ../client/common/client.c:1420 msgid "ship" msgstr "skip" #: ../client/common/client.c:1427 msgid " or" msgstr " of" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Wag vir jou beurt." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Kies die gebou om van te steel." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Kies die skip om van te steel." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Plaas die rower." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Maak die padbou klaar." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Bou een padsegment." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Bou twee padsegmente." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Dit is jou beurt." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Jammer, %s is beskikbaar.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Die spel is verby." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Jy het die %s ontwikkelingskaart gekoop.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Jy het 'n %s ontwikkelingskaart gekoop.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s het 'n ontwikkelingskaart gekoop.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s het die %s ontwikkelingskaart gespeel.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s het 'n %s ontwikkelingskaart gespeel.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Jy het nie meer padsegmente oor nie.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Jy kry %s vanaf %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s het %s by jou gevat.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s het %s by %s gevat.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Toeskouer %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "toeskouer %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Speler %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "speler %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Nuwe toeskouer %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s is nou %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Speler %d is nou %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s is weg.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Daar is nie 'n grootste weermag nie.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s het die grootste weermag.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Daar is nie 'n langste pad nie.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s het die langste pad.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Ek wag vir %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s het 'n hulpbron gesteel by %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Jy het %s gesteel by %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s het %s by jou gesteel.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s het vir %s niks gegee nie!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s het vir %s %s verniet gegee.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s het vir %s %s gegee in ruil vir %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s het %s omgeruil vir %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s het 'n pad gebou.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s het 'n skip gebou.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s het 'n dorp gebou.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s het 'n stad gebou.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s het 'n stadsmuur gebou.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add geroep met BUILD_NONE vir gebruiker %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s het 'n brug gebou.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s het 'n pad weggevat.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s het 'n skip weggevat.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s het 'n dorp weggevat.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s het 'n stad weggevat.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s het 'n stadsmuur verwyder.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove geroep met BUILD_NONE vir gebruiker %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s het 'n brug weggevat.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s het 'n skip se skuif gekanselleer.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s het 'n skip geskuif.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s het %s ontvang.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "bediener vra om ongeldige punt weg te vat.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s het %s verloor.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "bediener vra om ongeldige punt te beweeg.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s het %s verloor aan %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "baksteen" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Baksteen" #: ../client/common/resource.c:36 msgid "grain" msgstr "graan" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Graan" #: ../client/common/resource.c:37 msgid "ore" msgstr "erts" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Erts" #: ../client/common/resource.c:38 msgid "wool" msgstr "wol" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Wol" #: ../client/common/resource.c:39 msgid "lumber" msgstr "hout" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Hout" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "geen hulpbron (fout)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Geen hulpbron (fout)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "enige hulpbron (fout)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Enige hulpbron (fout)" #: ../client/common/resource.c:42 msgid "gold" msgstr "goud" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Goud" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "'n baksteenkaart" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d baksteenkaarte" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "'n graankaart" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d graankaarte" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "'n ertskaart" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d ertskaarte" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "'n wolkaart" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d wolkaarte" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "'n houtkaart" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d houtkaarte" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "niks" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s en %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, fuzzy, c-format msgid "%s has undone the robber movement.\n" msgstr "%s moet die rower skuif.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s het die rower geskuif.\n" #: ../client/common/robber.c:75 #, fuzzy, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s het 'n skip se skuif gekanselleer.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s het die seerower geskuif.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s moet die rower skuif." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Opstelling vir %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Dubbele opstelling vir %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s het %d gerol.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Beurt %d vir %s het nou begin.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Gesels" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Biepertoets.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s het jou gebiep.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Jy het %s gebiep.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Jy kon nie %s biep nie.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " het gesê: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Metabediener by %s, poort %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Klaar.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Meta-bediener het ons afgeskop\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Besig om name te kry vanaf metabediener.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Nuwe spelbediener aangevra op %s poort %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Onbekende boodskap vanaf die metabediener: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Te veel metabediener herleidings\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Foutiewe verwysing: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Metabediener te oud om nuwe bedieners te skep (weergawe %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normaal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Rol weer op 1ste en 2e beurte" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Rol weer alle 7s" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Verstek" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Ewekansig" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Herlei na metabediener by %s, poort %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Ontvang tans 'n lys van Pioniersbedieners vanaf die meta-bediener.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Nota:\n" "\tDie Metabediener stuur geen inligting oor die spel nie.\n" "\tStel asb. self geskikte waardes op." #. Label #: ../client/gtk/connect.c:726 #, fuzzy msgid "Number of computer players" msgstr "Tipe robotspeler" #. Tooltip #: ../client/gtk/connect.c:746 #, fuzzy msgid "The number of computer players" msgstr "Die hoeveelheid spelers" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Nuwe spelbediener word aangevra\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Fout met begin van diens %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Skep 'n openbare spel" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Betree 'n openbare spel" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nuwe afgeleë spel" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Verfris die lys van spelle" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Skep 'n nuwe openbare spel by die metabediener" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Moenie 'n openbare spel betree nie" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Betree die gekose spel" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Kies 'n spel om te betree" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Kaartnaam" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Naam van die spel" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Tans" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Aantal spelers in die spel" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Maks" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Maksimum spelers vir die spel" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terrein" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Geskommelde verstekterrein" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Wenpunte" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Punte nodig om te wen" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Sewes-reël" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Sewes-reël" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Gasheer" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Gasheer van die spel" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Poort" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "Poort van die spel" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Weergawe" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Weergawe van die gasheer" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Begin 'n nuwe spel" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Spelernaam" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Tik jou naam" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Toeskouer" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Wil jy 'n toeskouer wees?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta-bediener" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Betree openbare spel" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Betree 'n openbare spel" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Skep spel" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Skep 'n spel" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Betree privaatspel" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Betree 'n private spel" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Bedienernaam" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Naam van die gasheer van die spel" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Bedienerpoort" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Poort van die gasheer van die spel" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Onlangse spelle" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Ontwikkelingskaarte" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Speel kaart" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Gooi hulpbronne weg" #: ../client/gtk/discard.c:101 #, fuzzy, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Jy moet %d hulpbronne weggooi" msgstr[1] "Jy moet %d hulpbronne weggooi" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Totaal weggegooi" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Wag tans dat spelers hulpbronne opgee" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Spel verby" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s het die spel gewen met %d oorwinningspunte!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Geluk aan %s, heerser van hierdie wêreld!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Kies hulpbronne" #: ../client/gtk/gold.c:96 #, fuzzy, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Jy mag %d hulpbronne kies" msgstr[1] "Jy mag %d hulpbronne kies" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Hulpbrontotaal" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Wag tans vir spelers om te kies" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Spel" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nuwe Spel" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Begin 'n nuwe spel" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "Ver_laat spel" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Verlaat hierdie spel" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administreer Pioniers-bediener" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "S_pelernaam" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Verander jou spelernaam" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "_Uiteensetting" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Terreinuiteensetting en boukostes" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Spel-instellings" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Instellings vir die huidige spel" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Histogram van kansgetalle" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogram van kansgetalle" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Verlaat" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Verlaat die program" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Aksies" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Gooi" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Gooi kanssteentjies" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Ruilhandel" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Herroep" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Klaar" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Pad" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Bou 'n pad" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Skip" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Bou 'n skip" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Skuif 'n skip" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Bou 'n skip" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Brug" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Bou 'n brug" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Dorp" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Bou 'n dorp" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Stad" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Bou 'n stad" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Ontwikkel" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Koop 'n ontwikkelingskaart" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Stadsmuur" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Bou 'n stadsmuur" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "Op_stellings" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Voor_keure" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Konfigureer die toepassing" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Hulp" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "Aangaande Pioniers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Inligting oor Pioniers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Wys die handleiding" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Nutsbalk" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Wys of verberg die nutsbalk" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Punte nodig om te wen: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Boodskappe" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Landkaart" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Stop met ruilhandel" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Kwotasie" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Verwerp plaaslike handel" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Uiteensetting" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Welkom by Pioniers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Pioniers voorkeure" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Kies een van die temas" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Wys uiteensetting" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Wys die uiteensetting as 'n bladsy langs die landkaart" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Boodskappe in kleur" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Wys nuwe boodskappe in kleur" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Gesels in die kleur van die speler" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Wys nuwe boodskappe in die kleur van die speler" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Opsomming met kleure" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Gebruikl kleure in die speleropsomming" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Nutsbalk met kortpaaie" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Wys sleutelbordkortpaaie in die nutsbalk" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Kondig nuwe spelers aan" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "Maak 'n geluid wanner 'n nuwe speler of toeskouer die spel betree" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Gebruik 16:9 uitleg" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Gebruik 'n 16:9-vriendelike uitleg vir die venster" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Aangaande Pioniers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Welkom by Pioniers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioniers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Kansgetalhistogram" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Skip-skuif gekanselleer." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Kies 'n nuwe plek vir die skip." #. Notification #: ../client/gtk/interface.c:892 #, fuzzy msgid "It is your turn to setup." msgstr "Dit is jou beurt." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Heuwel" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Veld" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Berg" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Weiveld" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Woud" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Woestyn" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "See" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Terrein-opbrengs" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Boukoste" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Stadsmuur" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Ontwikkelingskaart" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopolie" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Kies die hulpbron wat jy wil monopoliseer." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Verander spelernaam" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Spelernaam:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Gesig:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Skakel in as 'n toeskouer" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Metabediener gasheer" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Kies 'n spel om te betree." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Besig om te koppel" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Speel 'n Pioniers-spel" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Speel 'n Pioniers-spel" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Dorpe" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Stede" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Stadsmure" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Grootste weermag" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Langste pad" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kapel" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kapelle" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pionier Universiteit" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pionier Universiteite" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Ampswoning" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Ampswonings" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Biblioteek" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Biblioteke" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Mark" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Markte" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldaat" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldate" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Hulpbronkaart" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Hulpbronkaarte" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Ontwikkelingskaarte" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Speler-opsomming" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Oorvloedjaar" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Kies asb. een hulpbron van die bank" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Kies asb. twee hulpbronne van die bank" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "Die bank is leeg" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s het %s, en wil graag %s hê" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Ek gee" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Vee uit" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Verwerp plaaslike handel" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Speler" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Kwotasies" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s vir %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Handel verwerp" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Hulpbronne" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Totaal" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Aantal beskikbaar" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "meer>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Vermeerder die hoeveelheid" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Gekose hoeveelheid" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Die huidig geselekteerde lêernaam" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "Die kleur kan nie geïnstalleer word nie." #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Ja" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Nee" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Onbekend" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Geen spel is tans besig nie..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Algemene instellings" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Aantal spelers:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Wenpunteteiken:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Geskommelde verstekterrein:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "" #: ../client/gtk/settingscreen.c:166 #, fuzzy msgid "Allow trade only before building or buying:" msgstr "Word ruilhandel slegs toegelaat voor bou/koop?" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Aantal van elke hulpbron:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Sewes-reël:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Eiland-ontdekbonusse:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Boukwotas" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Paaie:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Dorpe:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Stede:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Stadsmure:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Skepe:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Stapel van ontwikkelingskaarte" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Padboukaarte:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopoliekaarte:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Oorvloedjaarkaarte:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Kapelkaarte:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Pionier Universiteitkaarte:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Ampswoningkaarte:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Biblioteekkaarte:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Markkaarte:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Soldaatkaarte:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Huidige spelinstellings" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "vra vir gratis %s" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "gee %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "gee %s vir %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Ek wil %s hê en sal %s gee" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Vra vir kwotasies" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "Aanvaar kwotasie" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Stop met ruilhandel" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Padbou" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Oorvloedjaar" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Hierdie spel kan nie gewen word nie." #: ../common/game.c:891 msgid "There is no land." msgstr "" #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Dit is moontlik dat hierdie spel nie gewen kan word nie." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioniers is gebaseer op die uitstekende\n" "bordspel \"Settlers of Catan\".\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Weergawe:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Tuisblad:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Outeurs:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Launchpad Contributions:\n" " Arthur Rilke https://launchpad.net/~arthurrilke\n" " petri.jooste https://launchpad.net/~petri-jooste" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Alle sewes skuif die rower of seerower" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "In die eerste twee beurte word alle sewes vervang" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Alle sewes word vervang" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Geskommelde verstekterrein" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Verewekansig die terrein" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Gebruik seerower" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Streng handel" #: ../common/gtk/game-rules.c:125 #, fuzzy msgid "Allow trade only before building or buying" msgstr "Word ruilhandel slegs toegelaat voor bou/koop?" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Plaaslike handel" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "Eiland-ontdekbonusse:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "Eiland-ontdekbonusse:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Aantal spelers" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Die hoeveelheid spelers" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Wenpuntteiken" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Die punte wat nodig is om die spel te wen" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Is dit moontlik om hierdie spel te wen?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "Baksteenhawe" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "Graanhawe" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "Ertshawe" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Wolhawe" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Houthawe" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Kies 'n meta-bediener" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Kies 'n spel" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*Fout* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Gesels: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Hulpbron: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Bou: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Kansstene: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Steel: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Ruil: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Ontwikkeling: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Weermag: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Pad: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BIEP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Speler 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Speler 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Speler 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Speler 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Speler 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Speler 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Speler 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Speler 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** Onbekende boodskaptipe ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Fout met nagaan van konneksiestatus: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Fout met koppeling na gasheer '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Fout tydens sokskrywing: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Fout met skryf na sok: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Leesbuffer het oorgeloop - ontkoppel tans\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Fout tydens lees van sok: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Fout met skep van sok: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Fout met stel van sok na \"close-on-exec\": %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Fout met stel van sok na \"non-blocking\": %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Kon nie aan %s koppel nie: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Kan nie %s poort %s uitvind nie: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Kan nie %s se poort %s bepaal nie: gasheer nie gevind\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Fout tydens skep van \"addrinfo\": %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Fout tydens skep van luister-sok: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Fout tydens luister op sok: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Luister word nog nie ondersteun op hierdie platform nie." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "onbekend" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Kon naam nie opspoor nie: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Kon nie masjienadres opspoor nie: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "\"Net_get_peer_name\" word nog nie op hierdie platform ondersteun nie." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Kon nie die konneksie aanvaar nie: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Konnekteer aan %s, poort %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "Statusstapel loop oor. Stapel word gestort op standaardfoutafvoer.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Heuwel" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Veld" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Berg" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Weiveld" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "W_oud" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "Woest_yn" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_See" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Goud" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Niks" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Baksteen (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Graan (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Erts (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Wol (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Hout (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Alles (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "O" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NO" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NW" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "W" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SW" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SO" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Skommel" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Spelparameters" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Reëls" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Hulpbronne" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Geboue" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Pioniers-redigeerder" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Kon nie '%s' laai nie" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Kon nie '%s' stoor nie" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Spel" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Maak spel oop" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Stoor As..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Verander titel" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Nuwe titel:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Aangaande die Pioniersredigeerder" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Lêer" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Nuwe" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Skep nuwe spel" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Open..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Maak 'n bestaande spel oop" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Stoor" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Stoor spel" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Stoor _As..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Stoor as" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Verander titel" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Verander die spel se titel" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Kontrolleer of die spel gewen kan word" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Verlaat" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Aangaande die Pioniersredigeerder" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Inligting oor Pioniersredigeerder" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Maak hierdie lêer oop" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "Lêernaam" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Redigeerder vir Pioniersspelle" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Bou van kieslyste het misluk: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Instellings" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Aantal hulpbronne" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Skep u eie spel vir Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Loop die metabediener in die agtergrond wanneer dit begin" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Herlei kliënte na 'n ander metabediener" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Gebruik hierdie masjiennaam wanneer nuwe spelle geskep word" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "masjiennaam" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 #, fuzzy msgid "Use this port range when creating new games" msgstr "Gebruik hierdie poortreeks wanneer nuwe spelle geskep word" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "vanaf-na" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Ontfout syslog-boodskappe" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Metabediener vir Pioniers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "metabediener protokol:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, fuzzy, c-format msgid "Avahi error: %s, %s\n" msgstr "Fout (%s): %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Aangaande Pioniersbediener" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Inligting oor Pioniersbediener" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Stop bediener" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Begin bediener" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Stop die bediener" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Begin die bediener" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Speler %s van %s tree in\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Speler %s van %s tree uit\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Speler %d is nou %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Die poort vir die spelbediener" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Registreer bediener" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registreer hierdie spel by die metabediener" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Masjiennaam soos verskaf" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Publieke naam van hierdie rekenaar (nodig wanneer van agter 'n netskans " "\"firewall\" gespeel word)" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "Maak beurtvolgorde deurmekaar" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Maak beurtvolgorde deurmekaar" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Wys alle spelers en toeskouers wat aan die bediener gekoppel is" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Gekonnekteer" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Is die speler tans gekonnekteer?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Naam" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Spelernaam" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Plek" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Masjiennaam van die speler" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Nommer" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Spelernommer" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Rol" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Speler of toeskouer" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Lanseer Pioneers-kliënt" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Lanseer die Pioneers-kliënt" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Skakel gesels aan" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Skakel geselsboodskappe aan" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Voeg robotspeler by" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Voeg 'n robotspeler by die spel" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Boodskappe vanaf die bediener" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Spelinstellings" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Bedienerparameters" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Spel word tans geloop" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Spelers het toegetree" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Robotspelers" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Boodskappe" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Die Pioniers-spelbediener" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "Die spel is verby.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Skep 'n Pioniersspel" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioniersbediener" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Speel gasheer vir 'n spel Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Speltitel om te gebruik" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Spellêer om te gebruik" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Poort om na te luister" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Beheer aantal spelers" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Verander die aantal punte wat nodig is om die spel te wen" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Verander die sewes-reëlhantering" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Verander die terreintipe, 0=verstek, 1=ewekansig" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Voeg N robotspelers by" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registreer bediener by metabediener" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registreer by die metabediener (impliseer -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Gebruik hierdie masjiennaam vir registrasie" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Verlaat die spel wanneer 'n speler gewen het" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Verlaat die spel na N sekondes sonder spelers" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Toernooi-modus, rekenaars bygevoeg na N minute" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Adminpoort om op te luister" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "Moenie die spel dadelik begin nie, wag vir 'n opdrag op die adminpoort" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Gee nommers aan spelers soos wat hulle die spel betree" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Opsies vir die metabediener" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opsies vir die metabediener" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Verskeie opsies" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Verskeie opsies" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Kan die spel-parameters nie laai nie\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registreer by metabediener %s, poort %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Verbreek koppeling met meta-bediener\n" #: ../server/player.c:140 msgid "chat too long" msgstr "geselslyn te lank" #: ../server/player.c:157 msgid "name too long" msgstr "naam te lank" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "onbekende uitbreiding word geïgnoreer" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "" #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Die spel begin, robotspelers word bygevoeg." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "Die spel begin oor %s minute." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "Die spel begin oor %s minuut." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Robotspeler" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Jammer, die spel is verby." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Speler vanaf %s word weggewys: spel is verby\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Naam is nie verander nie: nuwe naam word reeds gebruik" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s het weer gekonnekteer." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Weergawes pas nie: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Hierdie spel gaan binnekort begin." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Spel word voorberei" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Spel gids '%s' nie gevind nie\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonus vir eilandontdekking" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Addisionele eilandbonus" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Het probeer om hulpbronne toe te ken aan die NULL-speler.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "" #~ msgid "Viewer %d" #~ msgstr "Toeskouer %d" #~ msgid "viewer %d" #~ msgstr "toeskouer %d" #~ msgid "I want" #~ msgstr "Ek wil hê" #~ msgid "Give them" #~ msgstr "Ek gee" #~ msgid "Viewer: " #~ msgstr "Toeskouer: " #~ msgid "Number of AI Players" #~ msgstr "Aantal robotspelers" #~ msgid "The number of AI players" #~ msgstr "Die aantal robotspeler" #~ msgid "Recent Games" #~ msgstr "Onlangse Spelle" #~ msgid "You may choose 1 resource" #~ msgstr "Jy mag een hulpbron kies" #~ msgid "_Player name" #~ msgstr "S_pelernaam" #~ msgid "The Pioneers Game" #~ msgstr "Die Pioniers-spel" #~ msgid "Select the ship to steal from" #~ msgstr "Kies die skip om van te steel" #~ msgid "Select the building to steal from" #~ msgstr "Kies die gebou om van te steel" #~ msgid "Development Card" #~ msgstr "Ontwikkelingskaart" #~ msgid "Player Name:" #~ msgstr "Spelernaam:" #~ msgid "I Want" #~ msgstr "Ek wil hê" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Word tussenspeler ruilhandel toegelaat?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Word ruilhandel slegs toegelaat voor bou/koop?" #~ msgid "Sevens Rule:" #~ msgstr "Sewes-reël:" #~ msgid "Use Pirate:" #~ msgstr "Gebruik seerower:" #~ msgid "Number of Players" #~ msgstr "Aantal spelers" #~ msgid "Development Cards" #~ msgstr "Ontwikkelingskaarte" #~ msgid "Save as..." #~ msgstr "Stoor as..." #~ msgid "Pioneers Game Editor" #~ msgstr "Pioniersspelredigeerder" #~ msgid "_Change title" #~ msgstr "_Verander titel" #~ msgid "Random Turn Order" #~ msgstr "Ewekansige beurtvolgorde" #~ msgid "_Legend" #~ msgstr "_Uiteensetting" #~ msgid "bad scaling mode '%s'" #~ msgstr "foutiewe skaalmodus '%s'" #~ msgid "Missing game directory\n" #~ msgstr "Spelgids ontbreek\n" #~ msgid "Leave empty for the default meta server" #~ msgstr "Los oop vir die verstek metabediener" #~ msgid "Override the language of the system" #~ msgstr "Oorheers die taal van die stelsel" #~ msgid "The address of the meta server" #~ msgstr "Die adres van die metabediener" pioneers-14.1/po/cs.po0000644000175000017500000026765211760645356011626 00000000000000msgid "" msgstr "" "Project-Id-Version: Pioneers 0.12.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2010-03-28 01:29+0000\n" "Last-Translator: Ladislav Dobias \n" "Language-Team: \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-04-06 06:08+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Country: CZECH REPUBLIC\n" "X-Poedit-Language: Czech\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Adresa serveru" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Port serveru" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Název počítače (povinný)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Čekací čas mezi koly (v ms)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Zastavit povídání strojového hráče" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Typ strojového hráče" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Povolit ladící hlášení" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Ukázat informaci o verzi" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Strojový hráč pro Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Verze Pioneers:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Jméno musí být vyplněno.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Typ strojového hráče: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Tato hra je již plná. Odcházím." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Nejsou vesnice na skladě pro fázi zakládání" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Není již místo pro založení vesnice" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Nejsou silnice na skladě pro fázi zakládání" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Není již místo pro založení silnice." #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "OK, tak jdem na to!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Všechny vás pobiju! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Zkusím to znovu..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Aspoň já jsem něco dostal..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Něco je lepší než nic..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Jů!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Hej, já bohatnu ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Toto je vskutku dobrý rok!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Ty si určitě tolik nezasloužíš!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Ty nevíš co dělat s tolika surovinami ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Hej, počkej na mého zloděje a přijdeš o to všechno znova!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Jdi, zloději, jdi!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Ty bastarde!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Nemůžeš toho zloděje posunout někam jinam?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Proč vždycky já??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Ó, ne!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Vrrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Kdo to sakra hodil tu 7??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Proč vždycky já?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Rozluč se se svými kartami... ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*dábelský škleb*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me říká sbohem tvým kartám ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "To je cena za to být bohatý... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Ha! Kam se ta karta poděla?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Zloděj! Zloděj!!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Počkej na moji pomstu..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Ó, ne :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Muselo se to stát TEĎ??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Sakra" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Haha, moje vojsko je nejlepší!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Nejdříve nás okrada, pak si nahrabe body..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Hele, silnice!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pchá, nevyhraješ, pokud budeš jen stavět silnice..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Obchod odmítnut.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Obdržena chyba ze serveru: %s. Končím\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Hurá!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Gratuluji" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Ahoj. Vítejte do lobby. Já jsem jednoduchý robot. Napište '/help' v chatu, a " "uvidíte seznam příkazů. které znám." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' ukáže tuto zprávu znovu" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' vysvětlí důvod toho divného rozložení na desce" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' řekne, jaká je poslední vydaná verze" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Tato hrací plocha neslouží pro hraní hry Pioneers, nýbrž pro nalezení " "dalších hráčů, kteří se zde můžou domluvit, kterou hru si zahrají. Potom, " "jeden z nich vytvoří server domluvené hry a registruje ji na meta serveru. " "Ostatní hráči můžou potom lobby opustit a připojit se k té hře." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "Poslední vydaná verze Pioneers je" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "Hra právě začíná. Již nejsem potřeba. Sbohem." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Čekání" #: ../client/common/client.c:108 msgid "Idle" msgstr "Nečinný" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Byl jsi vykopnut z této hry.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Nepřipojen" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Chyba (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Oznámení: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s nedostane surovinu: %s, protože bank je prázdný.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s dostane jen %s, protože v banku není více.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s obdržel: %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s bere: %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s použil: %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s je nahrazen %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s odhodil %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s vyhrál tuto hru s %d vítěznými body!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Náhrávání" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Verze nesouhlasí." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Verze nesouhlasí. Ujistěte se, prosím, zda klient i server jsou aktuální.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Postavte dvě vesnice, ke každé připojte" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Postavte vesnici, ke které připojte" #: ../client/common/client.c:1416 msgid "road" msgstr "silnici" #: ../client/common/client.c:1418 msgid "bridge" msgstr "most" #: ../client/common/client.c:1420 msgid "ship" msgstr "loď" #: ../client/common/client.c:1427 msgid " or" msgstr " nebo" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Čekání na váš tah." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Zvolte stavbu, ze které se bude krást." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Zvolte loď, ze které se bude krást." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Přemístěte zloděje." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Ukončit akci: stavba silnice." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Postavte jednu silnici." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Postavte dvě silnice." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Jste na tahu." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Promiňte, dostupno je pouze %s.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Tato hra skončila." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Koupil jsi akční kartu: %s.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Koupil jsi akční kartu: %s.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s koupil akční kartu.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s zahrál akční kartu: %s.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s zahrál akční kartu: %s.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Již nemáš žádné díly silnice.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Dostal jsi %s od hráče %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s ti sebral kartu %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s sebral kartu %s hráči %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Hráč %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "hráč %d" #: ../client/common/player.c:214 #, fuzzy, c-format msgid "New spectator: %s.\n" msgstr "Nový pozorovatel: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s je nyní %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Hráč %d je nyní %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s skončil.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Není žádné největší vojsko.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s má největší vojsko.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Není žádná nejdelší obchodní cesta.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s má nejdelší obchodní cestu.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Čekání na %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s ukradl surovinu hráči %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Ukradl jsi %s hráči %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s ti ukradl %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s nedal hráči %s nic!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s dal hráči %s zdarma %s.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s dal hráči %s %s výměnou za %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s vyměnil %s za %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s postavil silnici.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s postavil loď.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s postavil vesnici.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s postavil město.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s postavil městskou zeď.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add volán s BUILD_NONE pro uživatele %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s postavil most.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s odstranil silnici.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s odstranil loď.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s odstranil vesnici.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s odstranil město.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s odstranil městkou zeď.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove volán s BUILD_NONE pro uživatele %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s odstranil most.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s zrušil pohyb lodi.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s pohnul lodí.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s obdržel %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "server požaduje pozbýt neplatný bod.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s přišel o %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "server požaduje posun na neplatný bod.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s přišel o %s díky %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "cihly" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Cihly" #: ../client/common/resource.c:36 msgid "grain" msgstr "obilí" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Obilí" #: ../client/common/resource.c:37 msgid "ore" msgstr "ruda" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Ruda" #: ../client/common/resource.c:38 msgid "wool" msgstr "vlna" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Vlna" #: ../client/common/resource.c:39 msgid "lumber" msgstr "dřevo" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Dřevo" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "žádná surovina (chyba)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Žádná surovina (chyba)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "libovolná surovina (chyba)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Libovolná surovina (chyba)" #: ../client/common/resource.c:42 msgid "gold" msgstr "zlato" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Zlato" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "cihly" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d cihly" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "obilí" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d obilí" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "ruda" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d rudy" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "vlna" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d vlny" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "dřevo" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d dřeva" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "nic" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s a %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s vrátil zpět posun zloděje.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s posunul zloděje.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s vrátil zpět posun piráta.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s posunul piráta.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s musí posunout zloděje." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Fáze zakládání pro hráče %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Dvojité zakládání pro hráče %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s hodil %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Začátek kola %d pro hráče %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Test pípátka.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s na vás pípl.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Vy jste pípli na %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Nelze pípnout na %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " řekl: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta server na adrese %s, port %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Ukončen.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Meta server nás vykopl\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Získávám jména her z meta serveru.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Nový herní server požadován na adrese %s, port %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Neznámá zpráva z meta serveru: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Velmi mnoho přesměrování na meta serveru\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Špatná řádka přesměrování: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Meta server je moc starý na vytváření serverů (verze %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normální" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Házet znovu první 2 kola" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Házet znovu při každé 7" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Standardní" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Náhodná" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Přesměrováno na meta server %s, port %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Získávám seznam serverů Pioneers z meta serveru.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Poznámka:\n" "\tMeta server neposílá informace o hrách.\n" "\tProsím, nastavte požadované hodnoty sami." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Počet počítačových hráčů" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "Počet počítačových hráčů" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Požadován nový hrací server\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Chyba při startu %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Vytvořit veřejnou hru" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Připojit se k veřejné hře" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nová vzdálená hra" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Obnovit seznam her" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Vytvořit novou veřejnou hru na meta serveru" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Nepřipojit se k veřejné hře" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Připojit se k vybrané hře" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Zvolte hru k připojení" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Mapa" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Jméno hry" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Hráči" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Počet hráčů ve hře" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Maximální počet hráčů pro hru" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Krajina" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Rozmísťování krajiny - náhodné nebo standardní" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Vítěz. bodů" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Body potřebné k vítězství" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Pravidlo sedmiček" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Pravidlo sedmiček" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Počítač" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Adresa počítače s hrou" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "Port pro hru" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Verze" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Verze hry na serveru" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Spustit novou hru" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Jméno hráče" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Vložte své jméno" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "" #: ../client/gtk/connect.c:1280 #, fuzzy msgid "Check if you want to be a spectator" msgstr "Chcete být jen pozorovatel?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Připojit se" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta server" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Připojit k veřejné hře" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Připojit se k veřejné hře" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Vytvořit hru" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Vytvořit hru - nastavit a spustit vlastní server" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Připojit k soukromé hře" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Připojit k soukromé hře (která není oznámena na meta serveru)" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Adresa serveru" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Jméno počítače s hrou" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Port serveru" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Port na počítači s hrou" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Současné hry" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Akční karty" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Hrát kartu" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Odhodit suroviny" #: ../client/gtk/discard.c:101 #, fuzzy, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Musíte odhodit suroviny: %d" msgstr[1] "Musíte odhodit suroviny: %d" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Celkem odhodit" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Čekání na odhazujícího hráče" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Konec hry" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s vyhrál tuto hru s %d vítěznými body!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Buď blahořečený, %s, Pane poznaného světa!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Zvolit suroviny" #: ../client/gtk/gold.c:96 #, fuzzy, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Můžete zvolit surovin: %d" msgstr[1] "Můžete zvolit surovin: %d" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Celkem surovin" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Čekání na hráče, až si vyberou" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Hra" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nová hra" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Spustit novou hru" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Opustit hru" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Opustit tuto hru" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrovat server Pioneers" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "_Jméno hráče" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Změnit jméno vašeho hráče" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "_Legenda" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Legenda krajiny a náklady na stavění" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Herní nastavení" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Nastavení pro současnou hry" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "Histogram ho_dů" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogram hodů kostkami" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Konec" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Ukončit program" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Akce" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Hodit kostky" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Hodit kostkami" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Obchod" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Zpět" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Dokončit" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Silnice" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Postavit silnici" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Loď" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Postavit loď" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Posunout loď" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Posunout lodí" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Most" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Postavit most" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Vesnice" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Postavit vesnici" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Město" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Postavit město" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Akční karta" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Koupit akční kartu" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Městská zeď" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Postavit městskou zeď" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "Na_stavení" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Vlast_nosti" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Konfigurovat aplikaci" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 #, fuzzy msgid "_View" msgstr "Pozorovatel" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Nápověda" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_O Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informace o hře Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Ukázat manuál" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "Nástrojová liš_ta" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Ukáže či skryje nástrojovou lištu" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Body pro vítězství:%i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Hlášení" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Mapa" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Ukončit obchodování" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Kotovat" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Odmítnout vnitřní obchod" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Legenda" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Vítejte ve hře Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Vlastnosti Pioneers" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Téma:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Vyberte jedno téma" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Ukázat legendu" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Ukázat legendu jako stránku vedle mapy" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Barevná hlášení" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Ukázat nová hlášení barevně" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Chat v barvě hráče" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Obarví hlášky hráče podle jeho barvy" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Barevné shrnutí" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Použít barvy v shrnutí hráče" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Nástrojová lišta se zkratkami" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Ukázat klávesové zkratky v nástrojové liště" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Tichý mód" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "V tichém módu jsou všechny zvuky vypnuty" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Oznámit nové hráče" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 #, fuzzy msgid "Make a sound when a new player or spectator enters the game" msgstr "Udělat zvuk, když nový hráč nebo pozorovatel vstoupí do hry" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 #, fuzzy msgid "Show notifications" msgstr "Ukázat informaci o verzi" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Použít rozložení 16:9" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Použít rozložení vhodné pro okna v poměru 16:9" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "O Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Vítejte ve hře Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Histogram hodů" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Pohyb lodi zrušen." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Zvolit novou pozici pro loď." #. Notification #: ../client/gtk/interface.c:892 #, fuzzy msgid "It is your turn to setup." msgstr "Jste na tahu." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Pahorkatina" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Pole" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Hory" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pastvina" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Les" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Poušť" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Moře" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Výnosy krajiny" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Stavební náklady" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Městská zeď" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Akční karta" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Pokrok - Monopol" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Zvolte surovinu, kterou chcete monopolizovat" #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Změnit jméno hráče" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Jméno hráče:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Obličej:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Varianta:" #: ../client/gtk/offline.c:62 #, fuzzy msgid "Connect as a spectator" msgstr "Připojit jako pozorovatel" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Adresa meta serveru" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Zvolte hru k připojení." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Připojuji" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Hrát hru Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Zahrát si Pioneers hru" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Vesnice" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Města" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Městské zdi" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Největší vojsko" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Nejdelší obchodní cesta" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kostel" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kostely" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Univerzita" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Univerzity" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Radnice" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Radnice" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Knihovna" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Knihovny" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Tržiště" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Tržiště" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Rytíř" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Rytíři" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Karta surovin" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Karty surovin" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Akční karty" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Přehled o hráčích" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Pokrok - Vynález" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Zvolte prosím jednu surovinu z banku" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Zvolte prosím dvě suroviny z banku" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "Bank je prázdný" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "Hráč %s má %s, a shání: %s" #. Notification #: ../client/gtk/quote.c:217 #, fuzzy, c-format msgid "New offer from %s." msgstr "Ukradl jsi %s hráči %s.\n" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Já chci" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Dát jim" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Smazat" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Odmítnout vnitřní obchod" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Hráč" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Nabídky" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s za %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Obchod odmítnut" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Suroviny" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Celkem" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Množství v ruce" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "více>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Zvýšit zvolené množství" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Zvolené množství" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Celkem zvolené množství" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "Bank nemůže být vyprázdněn" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Ano" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Ne" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Neznámý" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Žádná hra zde neběží..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Obecná nastavení" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Počet hráčů:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Počet bodů pro vítězství:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Náhodná krajina:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Dovolit obchodování mezi hráči:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Dovolit obchodovat pouze před stavěním nebo nákupem:" #: ../client/gtk/settingscreen.c:171 #, fuzzy msgid "Check victory only at end of turn:" msgstr "Kontrolovat vítězství až na konci tahu" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Množství každé suroviny:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Pravidlo sedmiček:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Používat piráta pro blokování lodí:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonusy za objevení ostrova:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Stavební příděl" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Silnice:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Vesnice:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Města:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Městské zdi:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Lodě:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Mosty:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Balíček akčních karet" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Karty Pokrok - Stavba silnic:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Karty Pokrok - Monopol:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Karty Pokrok - Vynález:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Karty kostel:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Karty univerzita:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Karty radnice:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Karty knihovna:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Karty tržiště:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Karty rytíř:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Nastavení současné hry" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "požaduje %s zdarma" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "dám %s zdarma" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "dám %s za %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Já chci %s, a dám jim %s" #. Notification #: ../client/gtk/trade.c:348 #, fuzzy, c-format msgid "Quote received from %s." msgstr "%s obdržel %s.\n" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Získat nabídky" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "Přijmout n_abídku" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Ukončit _obchodování" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Pokrok - Stavba silnic" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Pokrok - Vynález" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Tato hra nemůže být vyhrána." #: ../common/game.c:891 msgid "There is no land." msgstr "Není zde žádná pevnina." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Je možné, že tuto hru nebude možné vyhrát." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "Tato hra může být vyhrána, jen pokud se postaví i vesnice i města." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Počet bodů k vítězství: %d\n" "Body získané za postavení všeho: %d\n" "Body v akčních kartách: %d\n" "Nejdelší obchodní cesta/největší vojsko: %d+%d\n" "Maximální bonus za objevení ostrovů: %d\n" "Celkem: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers je založeno na skvělé\n" "deskové hře Osadníci z Katanu.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Verze:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Domácí stránka:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Autoři:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Launchpad Contributions:\n" " Jakub Žáček https://launchpad.net/~dawon\n" " Konki https://launchpad.net/~pavel-konkol\n" " Ladislav Dobias https://launchpad.net/~lada-preklad" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers je přeloženo do :\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Všechny sedmičky posunou zloděje nebo piráta" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "V prvních dvou kolech se po sedmičkách hází znovu" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Po sedmičkách se vždy hází znovu" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Náhodná krajina" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Náhodně rozmístit díly krajiny" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Používat piráta" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Používat piráta pro blokování lodí" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Striktní obchod" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Dovolit obchodovat pouze před stavěním nebo nákupem" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Vnitřní obchod" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Dovolit obchodování mezi hráči" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Vítězství na konci tahu" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Kontrolovat vítězství až na konci tahu" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "Bonusy za objevení ostrova:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "Bonusy za objevení ostrova:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Počet hráčů" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Počet hráčů" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Počet bodů pro vítězství" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Kolik bodů je potřeba k vítězství" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Je možné vyhrát tuto hru?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "C" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "T" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "R" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "V" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "D" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Zvolit hru" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*CHYBA* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Chat: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Suroviny: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Stavět: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Kostky: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Ukrást: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Obchod: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Pokrok: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Vojsko: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Silnice: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*PÍP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Hráč 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Hráč 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Hráč 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Hráč 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Hráč 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Hráč 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Hráč 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Hráč 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** NEZNÁMÝ TYP HLÁŠENÍ ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Chyba při zjišťování stavu připojení: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Chyba při připojování k počítači '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Chyba při zápisu do socketu: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Chyba při zápisu do socketu: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Přetečení vstupního zásobníku - odpojuji\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Chyba při čtení socketu: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Chyba při vytváření socketu: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Chyba při nastavování socketu na uzavřít-při-spuštění: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Chyba při nastavování socketu na neblokující: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Chyba při spojování k %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Nelze přeložit jméno %s, port %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Nelze rozluštit %s, port %s: počítač nenalezen\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Chyba při vytváření struktury addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Chyba při vytváření naslouchacího socketu: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Chyba při naslouchání na socketu: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Naslouchání ještě není podporováno na této platformě." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "neznámý" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Chyba při získávání jména kolegy: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Chyba při překladu adresy: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name není ještě podporováno na této platformě." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Chyba při potvrzení spojení: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Připojování k %s, port %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" "Přetečení zásobníku stavů. Obsah zásobníku poslán na standardní chybový " "výstup.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "Pa_horkatina" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "P_ole" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "Ho_ry" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pastviny" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Les" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "Po_ušť" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Moře" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Zlato" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Nic" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Cihly (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Obilí (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Ruda (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Vlna (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Dřevo (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "Co_koliv (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "V" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "SV" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "SZ" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "Z" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "JZ" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "JV" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 #, fuzzy msgid "Delete a row" msgstr "Smazat" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Přeházet" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Parametry hry" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Pravidla" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Suroviny" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Budovy" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Pioneers Editor" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Nepodařilo se nahrát '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Nepodařilo se uložit do '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Hra" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Otevřít hru" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Uložit jako..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Změnit název" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Nový název:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "O Pioneers Editoru" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Soubor" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Nová" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Vytvořit novou hru" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Otevřít..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Otevřít existující hru" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Uložit" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Uložit hru" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Uložit _jako..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Uložit pod jiným jménem" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Změnit název" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Změnit název hry" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Zkontrolovat počet bodů pro vítěztví" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Zkontrolovat, zda hra může být vyhrána" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Konec" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_O Pioneers Editoru" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informace o Pioneers Editoru" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Otevřít tento soubor" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "soubor" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor pro hry Pioneers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Selhalo vytváření menu: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Nastavení" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Počet surovin" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Založte vaši vlastní hru Pionýři" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Použít tuto adresu při vytváření nových her" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "jméno počítače" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Použít tento rozsah portů při vytváření nových her" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "od-do" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Ladící informace v syslogu" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Pioneers Meta server" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, fuzzy, c-format msgid "Avahi error: %s, %s\n" msgstr "Chyba (%s): %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 #, fuzzy msgid "Unable to register Avahi server" msgstr "Odregistrovat od meta serveru\n" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_O Pioneers Serveru" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Informace o Pioneers Serveru" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Zastavit server" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Spustit server" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Zastavit ten server" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Spustit ten server" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Vstoupil hráč %s z %s.\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Odešel hráč %s z %s\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Hráč %d je nyní %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Port pro hrací serveru" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Registrovat server" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registruje server na meta serveru" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Nahlásit jméno počítače" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Veřejné jméno (adresa) tohoto počítače - je potřeba, když jste za firewallem" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "Náhodně přeházet pořadí hráčů" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Náhodně přeházet pořadí hráčů" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 #, fuzzy msgid "Shows all players and spectators connected to the server" msgstr "Ukázat všechny hráče a pozorovatele připojené k serveru" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Spojeno" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Je hráč nyní připojen?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Jméno" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Jméno hráče" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Adresa" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Adresa počítače, kde je hráč" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Číslo" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Číslo hráče" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Role" #. Tooltip for column Role #: ../server/gtk/main.c:765 #, fuzzy msgid "Player or spectator" msgstr "Hráč nebo pozorovatel" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Spustit Pioneers klienta" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Spustí klienta hry Pioneers" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Povolit chat" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Povolí chatování mezi strojovými hráči" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Přidat strojového hráče" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Přidá do hry strojového hráče" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Hlášení ze servery" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Herní nastavení" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Parametry serveru" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Spuštěná hra" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Připojení hráči" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Strojoví hráči" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Hlášení" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Server hry Pioneers" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "Tato hra skončila.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Hostovat hru Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Server Pioneers" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Hostovat hru Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Název hry" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Jméno souboru" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Port pro naslouchání" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Přepsat počet hráčů" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Přepsat počet bodů potřebných pro vítězství" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Přepsat pravidlo sedmiček" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Přepsat typ krajiny, 0=standardní, 1=náhodná" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Přidat N strojových hráčů" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registrovat server na meta serveru" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registruje server na meta serveru (zahrnuje -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Při oznamování použít tento název počítače" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Odejít když hráč vyhraje" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Skončit po N sekundách bez hráčů" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Typ hry: turnaj, strojoví hráči jsou přidáni po N minutách" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Síťový port, na kterém poslouchat" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "Nestartovat hru okamžitě, čekat na příkaz na administračním portu" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Dát hráčům čísla vzhledem k pořadí, jak se připojili do hry" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Možnosti meta serveru" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Možnosti pro meta server" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Různé možnosti" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Různé možnosti" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Nelze načíst parametry hry\n" #. Error message #: ../server/main.c:275 #, fuzzy, c-format msgid "Admin port not available.\n" msgstr "Promiňte, dostupno je pouze %s.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registrovat na meta serveru na adrese %s, port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Odregistrovat od meta serveru\n" #: ../server/player.c:140 msgid "chat too long" msgstr "příliš dlouhý chat" #: ../server/player.c:157 msgid "name too long" msgstr "příliš dlouhé jméno" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignoruji neznámou příponu" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "" #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Hra začíná, přidávání počíačových hráčů." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "Hra začne za %s minut." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "Hra začne za %s minutu." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Strojový hráč" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Promiňte, hra skončila." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Hráč z adresy %s je odmítnut: hra skončila\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Jméno nebylo změněno: nové jméno se již používá jinde" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Nečinně jsem čekal moc dlouho bez hráčů...sbohem.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s se znovu připojil." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Verze nesouhlasí: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Tato hra začne již brzy." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Příprava hry" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonus za objevení ostrovů" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Dodatečný ostrovní bonus" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Pokus o přiřazení surovin hráči NULL.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "" #~ msgid "Viewer %d" #~ msgstr "Pozorovatel %d" #~ msgid "viewer %d" #~ msgstr "pozorovatel %d" #~ msgid "I want" #~ msgstr "Já chci" #~ msgid "Give them" #~ msgstr "Dát jim" #~ msgid "Viewer: " #~ msgstr "Pozorovatel: " #~ msgid "Number of AI Players" #~ msgstr "Počet strojových hráčů" #~ msgid "The number of AI players" #~ msgstr "Počet hráčů hraných počítačem" #~ msgid "Recent Games" #~ msgstr "Současné hry" #~ msgid "You may choose 1 resource" #~ msgstr "Můžete zvolit 1 surovinu" #~ msgid "_Player name" #~ msgstr "_Jméno hráče" #~ msgid "The Pioneers Game" #~ msgstr "Hra Pioneers" #~ msgid "Select the ship to steal from" #~ msgstr "Zvolte loď ze které se bude krást" #~ msgid "Select the building to steal from" #~ msgstr "Zvolte budovu - odkud krást" #~ msgid "Development Card" #~ msgstr "Akční karta" #~ msgid "Player Name:" #~ msgstr "Jméno hráče:" #~ msgid "I Want" #~ msgstr "Já chci" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Dovolit obchod mezi hráči?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Dovolit obchod pouze před stavěním/obchodem?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Kontrolovat vítězství až na konci tahu?" #~ msgid "Sevens Rule:" #~ msgstr "Pravidlo sedmiček:" #~ msgid "Use Pirate:" #~ msgstr "Použít piráta:" #~ msgid "Number of Players" #~ msgstr "Počet hráčů" #~ msgid "Development Cards" #~ msgstr "Akční karty" #~ msgid "Save as..." #~ msgstr "Uložit jako..." #~ msgid "Pioneers Game Editor" #~ msgstr "Editor hry Pioneers" #~ msgid "_Change title" #~ msgstr "_Změnit název" #~ msgid "Random Turn Order" #~ msgstr "Náhodné pořadí" #~ msgid "_Legend" #~ msgstr "_Legenda" #~ msgid "bad scaling mode '%s'" #~ msgstr "chybný režim škálování '%s'" #~ msgid "Missing game directory\n" #~ msgstr "Chybí adresář hry\n" #~ msgid "Leave empty for the default meta server" #~ msgstr "Necháte-li prázdné, použije se standardní meta server." #~ msgid "Override the language of the system" #~ msgstr "Potlačit jazyk systému" #~ msgid "The address of the meta server" #~ msgstr "Adresa meta serveru" pioneers-14.1/po/da.po0000644000175000017500000026356311760645356011602 00000000000000# Danish translation for Pioneers # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the pioneers package. # carson (http://launchpad.net/~nanker), 2007. # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.11.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2008-04-29 09:36+0000\n" "Last-Translator: carson\n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-04-29 09:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Server vært" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Server port" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Computer navn (frivilligt)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Ventetid mellem ture (i millisekunder)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Stop computerspillers snak" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Type af computerspiller" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Aktivér fejlmeddelelser" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Vis versionsinformation" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- computerspilller for Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioneers version:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Et navn skal angives.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Type af computerspiller: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Spillet er fyldt op. Jeg smutter." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Ingen bebyggelse klar på lager til brug" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Der er intet sted at placere en bebyggelse" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Ingen veje klar på lager til brug" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Der er intet sted at placere en vej" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "OK lad os komme igang!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Jeg slår jer alle nu!:)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Nu et nyt forsøg.." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Endelig får jeg noget..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "En er bedre end ingenting..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Ups, jeg er ved at blive rig :)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Dette er et super år!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Du fortjener ikke såå meget!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Du aner jo ikke hvad du skal bruge så mange ressourser til :)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Hej - vent på min røver og tab det hele igen!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "He he !" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Afsted røver!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Din snydepels!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Kan du ikke flytte den røver et andet sted hen?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Hvorfor er det altid mig?!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Åh nej!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Hmmmm!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Hvem fanden slog den 7'er??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Hvorfor altid mig??!" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Hils farvel til dine kort... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*ondt grin*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me siger farvel til dine kort ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Det er prisen for at være rig... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Ups! Hvor er det kort blevet af?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Tyve! Tyve!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Vent på min hævn..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Åh nej :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Skal det ske lige NU??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Arhh" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "He he - det er mine soldater der styrer!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Først røver de os - badefter snupper de pointene..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Se den vej!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Veje alene giver ingen sejer..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Afviste handel\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Modtog fejl fra server: %s. Afslutter\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Juhuu!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Tillykke !" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hej, velkommen til forhallen. Jeg er bare en simpel robot. Skriv '/help' i " "chatten for at få en liste over kommandoer jeg kender." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' viser denne meddelelse igen" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' forklarer formålet med denne mærkeligt udseende spilleplade" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' fortæller om seneste version" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Denne spilleplade er ikke tænkt som et spil du kan spille. Istedet kan " "spillere finde hinanden og bestemme hvilken plade de vil spille på. Derefter " "kan en af spillerne være vært for spillet ved at starte en server og " "registrere den som metaserver. De andre spillere kan herefter en af gangen " "forlade forhallen og deltage i spillet." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "Den seneste version af Pioneers er" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "Spillet er under opstart. Jeg er ikke nødvendig længere. Farvel." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Venter" #: ../client/common/client.c:108 msgid "Idle" msgstr "Ledig" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Vi er blevet smidt ud af spillet.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Offline" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Fejl (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Bemærk: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s modtager ikke noget %s, fordi banken er tom.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s modtager kun %s, fordi banken ikke har mere.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s modtager %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s tager %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s bruger %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s bliver refunderet %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s bortkastede %s\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s har vundet spillet med %d sejers point!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Indlæser" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versioner passer ikke sammen." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versioner passer ikke sammen. Vær sikker på at klient og server er " "opdaterede.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Byg to bebyggelser, hver med en forbindelse" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Byg en bebyggelse med en forbindelse" #: ../client/common/client.c:1416 msgid "road" msgstr "vej" #: ../client/common/client.c:1418 msgid "bridge" msgstr "bro" #: ../client/common/client.c:1420 msgid "ship" msgstr "skib" #: ../client/common/client.c:1427 msgid " or" msgstr " eller" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Vent på din tur." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Vælg en bygning at stjæle fra." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Vælg et skib at stjæle fra." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Placér en røver." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Afslut vejbygningen." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Byg et vejstykke." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Byg to vejstykker." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Det er din tur." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Beklager, %s tilgængelig.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Spillet er slut." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Du købte %s udviklingskortet.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Du købte et %s udviklingskort.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s købte et udviklingskort.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s spillede %s udviklingskortet.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s spillede et %s udviklingskort.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Du er løbet tør for vejstykker.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Du modtager %s fra %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s tog %s fra dig.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s tog %s fra %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Spiller %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "spiller %d" #: ../client/common/player.c:214 #, fuzzy, c-format msgid "New spectator: %s.\n" msgstr "Ny seer: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s er nu %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Spiller %d er nu %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s har forladt os.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Der er ikke nogen største hær.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s har den største hær.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Der erikke nogen længeste vej.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s har den længste vej.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Venter på %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s stjal en ressource fra %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Du stjal %s fra %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s stjal %s fra dig.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s gav %s ingenting!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s gav %s %s gratis.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s gav %s %s i bytte for %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s byttede %s for %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s byggede en vej.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s byggede et skib.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s byggede en bebyggelse.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s byggede en by.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s byggede en bymur.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add kaldte med BUILD_NONE for bruger %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s byggede en bro.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s fjernede en vej.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s fjernede et skib.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s fjernede en bebyggelse.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s fjernede en by.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s fjernede en bymur.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove kaldte med BUILD_NONE for bruger %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s fjernede en bro.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s har fortrudt en flytning af et skib.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s flyttede et skib.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s modtog %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "server spørger om at tabe fejlbehæftede point.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s tabte %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "serser spørger om at flytte fejlbehæftede point.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s tabte %s til %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "mursten" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Mursten" #: ../client/common/resource.c:36 msgid "grain" msgstr "korn" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Korn" #: ../client/common/resource.c:37 msgid "ore" msgstr "malm" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Malm" #: ../client/common/resource.c:38 msgid "wool" msgstr "uld" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Uld" #: ../client/common/resource.c:39 msgid "lumber" msgstr "tømmer" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Tømmer" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "ingen ressourcer (fejl)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Ingen ressourcer (fejl)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "nogle ressourcer (fejl)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Enhver ressource (fej)" #: ../client/common/resource.c:42 msgid "gold" msgstr "guld" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Guld" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "et murstens kort" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d murstens kort" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "et korn kort" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d korn kort" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "et malm kort" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d malm kort" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "et uld kort" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d uld kort" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "et tømmer kort" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d tømmer kort" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "intet" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s og %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s har fortrudt røverens bevægelse.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s flyttede røveren.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s har fortrudt piratens bevægelse.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s flyttede piraten.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s skal flytte røveren." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Opsætning for %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Dobbelt opsætning for %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s slog %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Begynd tur %d for %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Test af bipper.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s bippede dig.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Du bippede %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Du kunne ikke bippe %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " sagde: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Mataserver på %s, port %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Afsluttet.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Mataserver smed os af\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Modtager spilnavne fra metaserveren.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Ny spilserver anmodning på %s port %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Ukendt meddelelse fra metaserveren: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "For mange metaserver omdirigeringer\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Dårlig omdirigeringslinje: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Metaserver for gammel til at lave servere (version %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Omslag på de to første ture" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Slå alle 7'ere om" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Forhåndsvalg" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Tilfældig" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Omdirigeret til metaserver %s, port %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Modtager en liste over Pioneer servere fra metaserveren.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Bemærk:\n" "\tMetaserveren sender ikke information om spillene.\n" "\tSæt selv passende værdier." #. Label #: ../client/gtk/connect.c:726 #, fuzzy msgid "Number of computer players" msgstr "Type af computerspiller" #. Tooltip #: ../client/gtk/connect.c:746 #, fuzzy msgid "The number of computer players" msgstr "Antallet af spillere" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Anmoder om ny spilserver\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Fejl startende %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Skab et offentligt spil" #. Dialog caption #: ../client/gtk/connect.c:955 #, fuzzy msgid "Join a Public Game" msgstr "Deltag i et offenligt spil" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nyt fjern spil" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Genopfrisk listen over spil" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Skab et nyt offentligt spil på metaserveren" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Deltag ikke i et offentligt spil" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Deltag i det valgte spil" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Vælg et spil at deltage i" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Kort navn" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Navn på spillet" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Antal spillere i spillet" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Maks" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Maksimalt antal spillere for spillet" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terræn" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Tilfældigt standard terræn" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Sejers point" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Point nødvendige for at vinde" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "7'er regel" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "7'er regel" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Vært" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Vært for spillet" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "Spillets port" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Version" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Version for vært" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Start et nyt spil" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Spillernavn" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Indtast dit navn" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "" #: ../client/gtk/connect.c:1280 #, fuzzy msgid "Check if you want to be a spectator" msgstr "Vil du være tilskuer?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Metaserver" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Deltag i offentligt spil" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Deltag i et offenligt spil" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Skab spil" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Skab et spil" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Deltag i privat spil" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Deltag i et privat spil" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Server vært" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Navn på værten for spillet" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Server port" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Port for værten af spillet" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Seneste spil" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Udviklingskort" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Spil kort" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Bortkast ressourcer" #: ../client/gtk/discard.c:101 #, fuzzy, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Du skal bortkaste %d ressourcer" msgstr[1] "Du skal bortkaste %d ressourcer" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Totalt antal kast" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Venter på at spillere skal kaste" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Spil slut" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s har vundet spillet med %d sejers point!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Tilbed %s, Hersker af den kendte verden!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Vælg ressourser" #: ../client/gtk/gold.c:96 #, fuzzy, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Du kan vælge %d ressource" msgstr[1] "Du kan vælge %d ressource" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Totale ressourcer" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Venter på at spillerne vælger" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Spil" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nyt spil" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Start et nyt spil" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Forlad spil" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Forlad dette spil" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrer Pioneers server" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "S_pillernavn" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Ændre dit spillernavn" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "_Forklaring" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Terrænforklaring og bygningsomkostninger" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Spil opsætninger" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Opsætning for dette spil" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Ternings histogram" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogram for terningskast" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Afslut" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Forlad dette program" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Handlinger" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Kast terning" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Kast terningen" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Handel" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Fortryd" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Afslut" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Vej" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Byg en vej" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Skib" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Byg et skib" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Flyt skib" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Flyt et skib" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Bro" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Byg en bro" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Bebyggelse" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Byg en bebyggelse" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "By" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Byg en by" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Udvikle" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Køb et udviklingskort" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Bymur" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Byg en bymur" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Indstillinger" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Indstilli_nger" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Konfigurér applikationen" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 #, fuzzy msgid "_View" msgstr "Tilskuer" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Hjælp" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Om Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Information om Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Vis manual" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Værktøjslinje" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Vis eller skjul værktøjslinje" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Point nødvendige for at vinde: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Meddelelser" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Kort" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Afslut handel" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Citat" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Afvis indenlandsk handel" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Forklaring" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Velkommen til Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Pioneers opsætning" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Vælg et af temaerne" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Vis forklaring" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Vis forklaring som en side ved siden af kortet" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Meddelelser med farver" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Vis en ny meddelelse med farve" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Caht i spillerens farve" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Vis nye chat meddelelser i spillerens farve" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Sammenfatning i farver" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Anvend farver i spiller sammenfatning" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Værktøjslinje med genveje" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Vis genveje i værktøjslinje" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Tyst tilstand" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "I tyst tilstand der laves ikke lyd" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Annoncér nye spillere" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 #, fuzzy msgid "Make a sound when a new player or spectator enters the game" msgstr "Lav en lyd når en ny spiller eller seer ankommer til spillet" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 #, fuzzy msgid "Show notifications" msgstr "Vis versionsinformation" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Anvend 16:9 layout" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Anvend et 16:9 venligt layout for skærmen" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Om Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Velkommen til Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Ternings histogram" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Bevægelse af skib annulleret" #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Vælg en ny lokation for skibet." #. Notification #: ../client/gtk/interface.c:892 #, fuzzy msgid "It is your turn to setup." msgstr "Det er din tur." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Bakke" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Mark" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Bjerg" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Græsmark" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Skov" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Ørken" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Hav" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Terænudbytte" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Bygningsomkostninger" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Bymur" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Udviklingskort" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopol" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Vælg den ressource du vil have monopol på." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Ændre spiller navn" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Spillernavn:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Forside:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variant:" #: ../client/gtk/offline.c:62 #, fuzzy msgid "Connect as a spectator" msgstr "Deltag som seer" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Metaserver vært" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Vælg et spil at deltage i." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Forbinder" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Spil et spil Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Spil et spil Pioneers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Bebyggelser" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Byer" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Bymurer" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Største hær" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Længste vej" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kapel" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kapeller" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pioneer Universitet" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pioneers Universiteter" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Borgmesterens hus" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Borgmester huse" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Bibliotek" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Biblioteker" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Marked" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Markeder" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldat" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldater" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Ressourcekort" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Ressourcekort" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Udviklingskort" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Sammendrag for spillere" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Gyldent år" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Vælg venligst en ressource fra banken" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Vælg venligst to ressourcer fra banken" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "Banken er tom" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s har %s, og er på udkig efter %s" #. Notification #: ../client/gtk/quote.c:217 #, fuzzy, c-format msgid "New offer from %s." msgstr "Du stjal %s fra %s.\n" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Jeg ønsker" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Giv dem" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Slet" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Afvis indenlandsk handel" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Spiller" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Citater" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s for %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Afvis handel" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Ressourcer" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "I alt" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Mængde på hånden" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "mere>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Øg det valgte beløb" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Vælg beløb" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Samlet valgt beløb" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "Banken kan ikke tømmes" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Ja" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Nej" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Ukendt" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Der pågår ingen spil..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "General opsætning" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Antal spillere:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Pointmål for at vinde:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Tilfældigt terræn:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Tillad handel mellem spillere:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Tillad kun handel før bygning eller indkøb:" #: ../client/gtk/settingscreen.c:171 #, fuzzy msgid "Check victory only at end of turn:" msgstr "Tjek for sejer ved turens slutning" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Mængde af hver ressource:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "7'er regel:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Brug piraten til at blokkere skibe:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonus for opdagelse af ø:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Bygningsomkostninger" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Veje:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Bebyggelser:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Byer:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Bymurer:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Skibe:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Broer:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Udviklingskort" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Vejbygningskort:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopol kort:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Gyldent år kort:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Kapel kort:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Pioneer Universitets kort:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Borgmester hus kort:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Biblioteks kort:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Markeds kort:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Soldater kort:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Aktuel spil opsætning" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "spørg om gratis %s" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "giv %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "giv %s for %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Jeg ønsker %s, og giver dem %s" #. Notification #: ../client/gtk/trade.c:348 #, fuzzy, c-format msgid "Quote received from %s." msgstr "%s modtog %s.\n" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Spørg efter pris" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Accepter pris" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Afslut handel" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Vejbygning" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Gyldent år" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Dette spill kan ikke vindes" #: ../common/game.c:891 msgid "There is no land." msgstr "Der er ikke noget land." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Det er muligt at dette spil ikke kan vindes." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "Dette spil kan kun vindes ved at bygge alle bebyggelser og byer." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Krævede sejers point: %d\n" "Point opnået ved bygning ialt: %d\n" "Point fra udviklingskort: %d\n" "Længeste vej/største hær: %d+%d\n" "Maksimal bonus for opdagelse af øer: %d\n" "Total: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers er baseret på det fantastiske\n" "Settlers og Catan brædtspil.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Version:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Hjemmeside:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Forfattere:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Launchpad Contributions:\n" " carson https://launchpad.net/~nanker" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers er oversat til dansk af:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Alle 7'ere flytter røvere eller pirater" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "I de to første ture slås alle 7'ere om" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Alle 7'ere slås om" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Tilfældigt terræn" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Lav tilfældigt terræn" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Brug pirat" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Brug piraten til at blokkere skibe" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Begrænset handel" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Tillad kun handel før bygning eller indkøb" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Indenlandsk handel" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Tillad handel mellem spillere" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Sejer ved turens slutning" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Tjek for sejer ved turens slutning" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "Bonus for opdagelse af ø:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "Bonus for opdagelse af ø:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Antal spillere" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Antallet af spillere" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Point for sejer" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Nødvendigt antal point for at vinde spillet" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Er det muligt at vinde dette spil?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2 for 1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3 for 1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "Murstens port|M" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "Korn port|K" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "Malm port|M" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Uld port|U" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Tømmer port|T" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Start meta server" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Vælg et spil" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*FEJL* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Caht: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Ressource: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Byg: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Terning: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Stjæl: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Handel: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Udvikling: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Hær: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Vej: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*Bip* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Spiller 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Spiller 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Spiller 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Spiller 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Spiller 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Spiller 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Spiller 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Spiller 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** UKENDT MEDDELELSESTYPE ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Fejl ved kontrol af tilslutningsstatus: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Fejl under tilslutning til vært '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Fejl ved tilslutning til %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Lytning endnu ikke understøttet på denne platform." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "ukendt" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Fejl ved læsning af modpartens navn: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Fejl ved opslag af adresse: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name er endnu ikke understøttet på denne platform." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Fejl ved accept af tilslutning: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Opretter forbindelse til %s, port %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Bakke" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Mark" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Bjerg" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "G_ræsmark" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Skov" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Ørken" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Hav" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Guld" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Ingen" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Mursten (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Korn (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Malm (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Uld (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Tømmer (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Noget (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "Øst|Ø" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "Nord Øst|NØ" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "Nord Vest|NV" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "Vest|V" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "Syd Vest|SV" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "Syd Øst|SØ" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 #, fuzzy msgid "Delete a row" msgstr "Slet" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Bland" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Spil parametre" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Regler" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Ressourcer" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Bygninger" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Editor for Pioneers" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Kunne ikke indlæse '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Kunne ikke gemme '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Spil" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Åbn spil" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Gem som..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Ændre titel" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Ny titel:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Om Pioneers editor" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Arkivér" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Ny" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Skab et nyt spil" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Åben..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Åben et bestående spil" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Gem" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Gem spil" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Gem _som..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Gem som" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "Ændre _titel" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Ændre spil titel" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Tjek _pointmål for at vinde" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Tjek om spillet kan vindes" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Afslut" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Om Pioneers editor" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Information om Pioneers editor" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Åben denne fil" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "filnavn" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor for Pioneers spil" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Opsætninger" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Ressource optælling" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Skab dit eget spil til Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 #, fuzzy msgid "Daemonize the meta-server on start" msgstr "Kør metaserver i baggrund ved start" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 #, fuzzy msgid "Redirect clients to another meta-server" msgstr "Omdiriger klienter til en anden metaserver" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Brug dette værtsnavn når der skabes et nyt spil" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "værtsnavn" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Anvend det her portinterval når nye spil skabes" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "fra-til" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Fejlmeddelelse til systemlog" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Metaserver for Pioneers" #: ../meta-server/main.c:1135 #, fuzzy, c-format msgid "meta-server protocol:" msgstr "metaserver protekol:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, fuzzy, c-format msgid "Avahi error: %s, %s\n" msgstr "Fejl (%s): %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Om Pioneers server" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Information om Pioneers server" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Stop server" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Start server" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Stop serveren" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Start serveren" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Spiller %s fra %s ankommet\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Spiller %s fra %s forlod spil\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Spiller %d er nu %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Porten for spil serveren" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Registrer server" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registrer dette spil på metaserveren" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Rapporteret værtsnavn" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Det offentlige navn for denne computer (nødvendigt når der spilles bag en " "firewall)" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "Skab en tilfældig tur rækkefølge" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Skab en tilfældig tur rækkefølge" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 #, fuzzy msgid "Shows all players and spectators connected to the server" msgstr "Vis alle spillere og tilskuere, der er tilsluttet serveren" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Tilsluttet" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "er spilleren tilsluttet?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Navn" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Navn på spiller" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Placering" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Værts navn for spilleren" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Nummer" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Spiller nummer" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Rolle" #. Tooltip for column Role #: ../server/gtk/main.c:765 #, fuzzy msgid "Player or spectator" msgstr "Tilskuere" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Start Pioneers klient" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Start Pioneers klienten" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Tilslut chat" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Tillad chat meddelelser" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Tilføj computer spiller" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Tilføj en computerspiller til spillet" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Meddelelse fra serveren" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Spilopsætning" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Server parametre" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Kører spillet" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Spillere tilsluttet" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Computer spillere" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Beskeder" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Pioneers spil server" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "Spiller er slut.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Vær vært for et spil Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioneer Server" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Vær vært for et spil Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Spil titel der kan bruges" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Spil fil der kan bruges" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Port at lytte til" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Tilsidesæt antal spillere" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "tilsidesæt antal point, der er nødvendige for at vinde" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Tilsidesæt 7'er regel" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Tilsidesæt terræntype, 0=standard 1=tilfældig" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Tilføj N computerspillere" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registrer server hos metaserver" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Brug dette værtsnavn ved registrering" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Afbryd når en spiller har vundet" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Afbryd efter N sekunder uden spillere" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Administrationsport at lytte på" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "Start ikke spilllet lige nu, vent for besked på admin port" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "" "Giv spillerne et nummer svarende til den rækkefølge de meldte sig til spillet" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Metaserver muligheder" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opsætning af metaserver" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Diverse indstillinger" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Diverse indstillinger" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Kan ikke indlæse parametre for spillet\n" #. Error message #: ../server/main.c:275 #, fuzzy, c-format msgid "Admin port not available.\n" msgstr "Beklager, %s tilgængelig.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registrer med metaserver %s, port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Afregistrerer fra metaserver\n" #: ../server/player.c:140 msgid "chat too long" msgstr "char for lang" #: ../server/player.c:157 msgid "name too long" msgstr "navn for langt" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ser bort fra ukendt extension" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "" #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Spil starter, tilføjer computer spillere" #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "Spillet starter om %s minutter." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "Spillet starter om %s minutter." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Computerspiller" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Beklager, spillet er afsluttet." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Spiller fra %s er afvist: Spil er overstået\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Navn ikke ændret: Nyt navn allerede i brug" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Ventede for længe uden spillere... farvel\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s har tilsluttet sig igen." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versions uoverensstemmelse: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Dette spil vil starte om lidt." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Forbereder spil" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonus for opdagelse af ø" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bonus for yderligere ø" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Forsøgte at tildele ressourcer til NUL spiller.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "" #~ msgid "Viewer %d" #~ msgstr "Seer %d" #~ msgid "viewer %d" #~ msgstr "seer %d" #~ msgid "I want" #~ msgstr "Jeg ønsker" #~ msgid "Give them" #~ msgstr "Giv dem" #~ msgid "Viewer: " #~ msgstr "Tilskuer: " #~ msgid "Number of AI Players" #~ msgstr "Antal spillere" #~ msgid "The number of AI players" #~ msgstr "Antallet af spillere" #~ msgid "Recent Games" #~ msgstr "Seneste spil" #~ msgid "You may choose 1 resource" #~ msgstr "Du kan vælge en ressource" #~ msgid "_Player name" #~ msgstr "_Spillernavn" #~ msgid "The Pioneers Game" #~ msgstr "Pioneer spillet" #~ msgid "Select the ship to steal from" #~ msgstr "Vælg hvilket skib, der skal stjæles fra" #~ msgid "Select the building to steal from" #~ msgstr "Vælg en bygning at stjæle fra" #~ msgid "Development Card" #~ msgstr "Udviklingskort" #~ msgid "Player Name:" #~ msgstr "Spiller navn:" #~ msgid "I Want" #~ msgstr "Jeg ønsker" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Handel mellem spillere tilladt?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Handel kun tilladt før bygning/indkøb?" #~ msgid "Sevens Rule:" #~ msgstr "7'er regel:" #~ msgid "Use Pirate:" #~ msgstr "Brug pirat:" #~ msgid "Number of Players" #~ msgstr "Antal spillere" #~ msgid "Development Cards" #~ msgstr "Udviklingskort" #~ msgid "Save as..." #~ msgstr "Gem som ..." #~ msgid "Pioneers Game Editor" #~ msgstr "Pioneers spil editor" #~ msgid "_Change title" #~ msgstr "_Ændre titel" #~ msgid "Random Turn Order" #~ msgstr "Tilfældig rækkefølge" #~ msgid "_Legend" #~ msgstr "_Forklaring" #~ msgid "Missing game directory\n" #~ msgstr "Mangler spil katalog\n" pioneers-14.1/po/de.po0000644000175000017500000027067711760645356011612 00000000000000# Pioneers - Settlers of Catan for GNOME. # Copyright (C) 1999-2001 Dave Cole # Copyright (C) 2000-2002 Andy Heroff # This file is distributed under the same license as the pioneers package. # Roman Hodek , 2002. # Pit Garbe , 2007. # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.12.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2012-05-19 11:56+0000\n" "Last-Translator: Pit Garbe \n" "Language-Team: Pit Garbe , Roman Hodek , de " "\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-05-23 05:36+0000\n" "X-Generator: Launchpad (build 15282)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Serverrechner" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Serverport" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Computername (erforderlich)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Zeit zwischen den Zügen (in Millisekunden)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Computerspielern das Chatten verbieten" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Computerspieler-Typ" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Debug-Nachrichten einschalten" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Versionsnummer anzeigen" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Computerspieler für Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioneers Version:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Ein Name muss angegeben werden.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Computerspieler-Typ: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Das Spiel ist schon voll, ich gehe." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Keine Siedlungen mehr übrig" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Es gibt keinen Platz für eine Siedlung" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Keine Straßen mehr übrig" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Es gibt keinen Platz für eine Straße" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Auf geht's!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Ich werd euch jetzt alle abhängen! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Ok, noch ein Versuch..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Wenigstens bekomme ich irgendwas..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Eine ist besser als keine..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Toll!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Hey, ich werde reich! ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Das ist wirklich ein gutes Jahr!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Du verdienst wirklich nicht so viel!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Du weißt eh nicht, was du mit sovielen Karten anfangen sollst ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "He, warte auf meinen Räuber, dann ist das alles wieder weg!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Los, Räuber, los!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Schweinehund!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Kannst du den Räuber nicht woanders hinstellen?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Warum immer ich??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Oh nein!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Wer zum Teufel hat die 7 gewürfelt??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Warum immer ich?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Sag Tschüss zu deinen Karten... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*bösegrins*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me sagt Lebwohl zu deinen Karten ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Das ist der Preis für's Reichsein... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "He! Wo ist die Karte hin?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Diebe! Diebe!!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Warte auf meine Rache..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh nein :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Muß das ausgerechnet jetzt passieren??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hehe, meine Ritter geben hier den Ton an!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Erst uns ausrauben und dann noch Punkte dafür kassieren..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Schaut euch diese Straße an!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pft, mit Straßen allein gewinnt keiner..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Handel abgelehnt.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Fehler vom Server erhalten: %s. Verlasse das Spiel\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Juhu!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Glückwunsch!" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Willkommen in der Lobby. Ich bin ein einfacher Roboter. Sende '/help' im " "Chat um die Liste der Befehle, die ich kenne, zu sehen." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' zeigt diese Nachricht nochmals" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' erklärt den Grund für dieses komische Brettlayout" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' zeigt die zuletzt erschienene Version" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Dieses Brett ist nicht zum Spielen vorgesehen. Dafür können sich Spieler " "hier treffen und entscheiden, auf welchem Brett sie miteinander spielen " "wollen. Dann muss einer der Spieler das Spiel eröffnen, indem er einen " "Server startet und ihn beim Metaserver registriert. Die anderen Spieler " "können dann die Lobby verlassen und das neue Spiel betreten." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "Die zuletzt veröffentlichte Version von Pioneers ist" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "Das Spiel beginnt. Ich werde nicht mehr benötigt. Auf Wiedersehen." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Warte" #: ../client/common/client.c:108 msgid "Idle" msgstr "Untätig" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Du wurdest aus dem Spiel geworfen.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Offline" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Fehler (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Mitteilung: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s bekommt kein %s, weil die Bank leer is.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s bekommt nur %s, weil die Bank nicht mehr davon hat.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s bekommt %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s nimmt %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s zahlt %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s erhält %s zurück.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s hat %s abgelegt.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s hat das Spiel mit %d Punkten gewonnen!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Lade" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versionsunterschied." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versionsunterschied. Bitte stelle sicher, dass der Client und der Server auf " "dem neuesten Stand sind.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Baue zwei Siedlungen mit je einer verbundenen" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Baue eine Siedlung mit einer verbundenen" #: ../client/common/client.c:1416 msgid "road" msgstr "Straße" #: ../client/common/client.c:1418 msgid "bridge" msgstr "Brücke" #: ../client/common/client.c:1420 msgid "ship" msgstr "Schiff" #: ../client/common/client.c:1427 msgid " or" msgstr " oder" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Warte auf deinen Zug." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Wähle das Gebäude, von dem gestohlen werden soll." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Wähle das Schiff, von dem du stehlen willst." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Setze den Räuber." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Beende die Straßenbauaktion." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Baue eine Straße." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Baue zwei Straßen." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Du bist am Zug." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Entschuldigung, %s verfügbar.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Das Spiel ist beendet." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Du hast die %s-Entwicklungskarte gekauft.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Du hast eine %s-Entwicklungskarte gekauft.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s hat eine Entwicklungskarte gekauft.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s hat die %s-Entwicklungskarte ausgespielt.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s hat eine %s-Entwicklungskarte ausgespielt.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Du hast keine Straßensegmente mehr.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Du bekommst %s von %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s hat %s von dir genommen.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s hat %s von %s genommen.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Zuschauer %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "Zuschauer %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Spieler %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "Spieler %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Neue Zuschauer: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s heißt jetzt %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Spieler %d heißt jetzt %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s hat das Spiel verlassen.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Es gibt keine größte Rittermacht.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s hat die größte Rittermacht.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Es gibt keine längste Handelsstraße.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s hat die längste Handelsstraße.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Warte auf %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s hat eine Karte von %s gestohlen.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Du hast %s von %s gestohlen.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s hat %s von dir gestohlen.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s hat %s nichts gegeben!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s hat %s %s gratis gegeben.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%1$s hat von %2$s %4$s für %3$s bekommen.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s hat %s gegen %s getauscht.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s hat eine Straße gebaut.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s hat ein Schiff gebaut.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s hat eine Siedlung gebaut.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s hat eine Stadt gebaut.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s hat eine Stadtmauer gebaut.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add mit BUILD_NONE für Benutzer %s aufgerufen\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s hat eine Brücke gebaut.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s hat eine Straße entfernt.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s hat ein Schiff entfernt.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s hat eine Siedlung entfernt.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s hat eine Stadt entfernt.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s hat eine Stadtmauer entfernt.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove mit BUILD_NONE für Benutzer %s aufgerufen\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s hat eine Brücke entfernt.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s hat eine Schiffsbewegung zurückgenommen.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s hat ein Schiff bewegt.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s hat %s bekommen.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "Server will einen nicht vorhandenen Punkt wegnehmen.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s hat %s verloren.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "Server will einen nicht vorhandenen Punkt übertragen.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s hat %s an %s verloren.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "Lehm" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Lehm" #: ../client/common/resource.c:36 msgid "grain" msgstr "Getreide" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Getreide" #: ../client/common/resource.c:37 msgid "ore" msgstr "Erz" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Erz" #: ../client/common/resource.c:38 msgid "wool" msgstr "Wolle" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Wolle" #: ../client/common/resource.c:39 msgid "lumber" msgstr "Holz" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Holz" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "kein Rohstoff (Fehler)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Kein Rohstoff (Fehler)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "beliebiger Rohstoff (Fehler)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Beliebiger Rohstoff (Fehler)" #: ../client/common/resource.c:42 msgid "gold" msgstr "Gold" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Gold" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "eine Lehm-Karte" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d Lehm-Karten" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "eine Getreide-Karte" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d Getreide-Karten" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "eine Erz-Karte" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d Erz-Karten" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "eine Wolle-Karte" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d Wolle-Karten" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "eine Holz-Karte" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d Holz-Karten" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "nichts" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s und %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s hat den Räuber zurückgesetzt.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s hat den Räuber gesetzt.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s hat eine Piratenbewegung zurückgenommen.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s hat den Pirat gesetzt.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s muß den Räuber setzen." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Gründungsphase für %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Doppelte Gründungsphase für %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s hat %d gewürfelt.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Beginn Runde %d für %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Wähle ein automatisch entdecktes Spiel" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) auf %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Piepser-Test.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s hat dich angepiepst.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Du hast %s angepiepst.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Du konntest %s nicht anpiepsen.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " sagte: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Metaserver auf %s, Port %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Fertig.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Metaserver hat die Verbindung beendet.\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Empfange Spielenamen vom Metaserver.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Neuer Spielserver angefordert auf %s port %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Unbekannte Nachricht vom Metaserver: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Zu viele Metaserver-Weiterleitungen\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Fehlerhafte Weiterleitungszeile: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Metaserver zu alt, um Spielserver zu starten (Version %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Standard" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Wiederholen in ersten 2 Runden" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Immer wiederholen" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Standard" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Zufällig" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Weitergeleitet zu Metaserver auf %s, Port %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Empfange eine Liste von Pioneers-Servern vom Metaserver.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Notiz:\n" "\tDer Metaserver sendet keine Informationen über die Spiele.\n" "\tBitte setze die entsprechenden Werte selbst." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Anzahl der Computerspieler" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "Die Anzahl der Computerspieler" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Anfrage für einen neuen Spielserver gesendet\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Fehler beim Starten von %s: %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Ein öffentliches Spiel erstellen" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "An einem öffentlichen Spiel teilnehmen" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Neues Netzwerkspiel" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Spiel-Liste aktualisieren" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Neues öffentliches Spiel auf dem Metaserver erstellen" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Nicht an öffentlichem Spiel teilnehmen" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "An ausgewähltem Spiel teilnehmen" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Wähle ein Spiel zur Teilnahme" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Kartenname" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Name des Spiels" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Akt" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Anzahl der Spieler im Spiel" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Höchste Spieleranzahl für das Spiel" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Gelände" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Zufällige Geländeverteilung" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Siegpunkte" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Punkte für Sieg" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "7-Regel" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "7-Regel" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Host-Rechner" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Host des Spiels" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Netzwerk-Port des Spiels" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Version" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Version des Hosts" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Ein neues Spiel starten" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Spielername" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Gib deinen Namen ein" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Zuschauer" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Anwählen falls Sie als Beobachter teilnehmen wollen" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Teilnehmen" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Spiele ein automatisch entdecktes Spiel" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Metaserver" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "An öffentlichem Spiel teilnehmen" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "An einem öffentlichen Spiel teilnehmen" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Spiel erstellen" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Ein Spiel erstellen" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "An privatem Spiel teilnehmen" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "An einem privaten Spiel teilnehmen" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Serverrechner" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Name des Spiel-Hosts" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Serverport" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Port des Spiel-Hosts" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Zuletzt besuchte Spielserver" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Entwicklungskarten" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Karte ausspielen" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Karten ablegen" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Du mußt %d Karte ablegen" msgstr[1] "Du mußt %d Karten ablegen" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Insgesamt abgelegte Karten" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Warte auf Spieler, die ablegen müssen" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Spiel beendet" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s hat das Spiel mit %d Punkten gewonnen!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Lobet %s, den Herrscher der bekannten Welt!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Karten wählen" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Du mußt %d Karte wählen" msgstr[1] "Du mußt %d Karten wählen" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Insgesamt" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Warte auf Spieler, die wählen müssen" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Spiel" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Neues Spiel" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Ein neues Spiel starten" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "Spiel ver_lassen" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Dieses Spiel verlassen" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Administration" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Pioneers-Server verwalten" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Spielername" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Ändern des Spielernamens" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "_Erklärung" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Geländeerklärung und Gebäudekosten" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Spieleinstellungen" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Einstellungen des aktuellen Spiels" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Würfelhistogramm" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogramm der Würfelergebnisse" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Quit" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Das Programm verlassen" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Aktionen" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Würfeln" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Würfeln" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Handel" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Rückgängig" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Fertig" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Straße" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Baue eine Straße" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Schiff" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Baue ein Schiff" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Schiff verlegen" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Bewege ein Schiff" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Brücke" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Baue eine Brücke" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Siedlung" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Baue eine Siedlung" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Stadt" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Baue eine Stadt" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Entwicklungskarte" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Kaufe eine Entwicklungskarte" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Stadtmauer" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Baue eine Stadtmauer" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Einstellungen" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Einstellu_ngen" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Konfiguriere die Anwendung" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_Ansicht" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Zurücksetzen" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "Zeige ganze Karte" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Zentrieren" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "Zentriert die Karte" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Hilfe" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "Ü_ber Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informationen über Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Das Handbuch zeigen" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Vollbild" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Umschalten in den Vollbildmodus" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Werkzeugleiste" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Werkzeugleiste zeigen oder verstecken" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Punkte für Sieg: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Nachrichten" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Karte" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Handel beenden" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Angebot" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Handel ablehnen" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Erklärung" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Willkommen zu Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Pioneers Einstellungen" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Thema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Wähle eins der Themen" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Legende Anzeigen" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Erklärung als eigene Seite neben der Karte anzeigen" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Nachrichten mit Farben anzeigen" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Neue Nachrichten mit Farben anzeigen" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Chat in den Spielerfarben" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Neue Chatnachrichten in den Farben der Spieler zeigen" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Zusammenfassung mit Farben anzeigen" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Farben in der Spielerzusammenfassung benutzen" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Werkzeugleiste mit Shortcuts" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Tastatur-Shortcuts in der Werkzeugleiste zeigen" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Stummschaltung" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "Bei Stummschaltung werden keine Klänge abgespielt" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Neue Spieler ankündigen" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "" "Spiele ein Geräusch, wenn ein neuer Spieler oder Zuschauer das Spiel betritt" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Zeige Benachrichtigungen" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" "Zeigt Meldungen, wenn Sie an der Reihe sind oder wenn ein neuer Handel " "möglich ist" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Benutze 16:9 Layout" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Benutze ein 16:9-freundliches Layout für das Fenster" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Über Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Willkommen zu Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Würfelhistogramm" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Schiff-Bewegung abgebrochen." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Wähle die neue Position des Schiffes." #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "Sie sind an der Reihe mit der Startaufstellung" #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Hügelland" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Ackerland" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Gebirge" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Weideland" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Wald" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Wüste" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Meer" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Geländeerträge" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Gebäudekosten" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Stadtmauer" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Entwicklungskarte" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopol" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Wähle den zu monopolisierenden Rohstoff." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Spielernamen ändern" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Spielername:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Gesicht:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variante:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Als Zuschauer verbinden" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Metaserver-Rechner" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Wähle ein Spiel zur Teilnahme." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Verbinde" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Spiel ein Spiel Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Spiele ein Pioneers-Spiel" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Siedlungen" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Städte" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Stadtmauern" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Größte Rittermacht" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Längste Handelsstraße" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kathedrale" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kathedralen" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pioneer Universität" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pioneer Universitäten" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Regierungsgebäude" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Regierungsgebäude" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Bibliothek" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Bibliotheken" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Marktplatz" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Marktplätze" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Ritter" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Ritter" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Rohstoffkarte" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Rohstoffkarten" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Entwicklungskarten" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Spielerübersicht" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Erfindung" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Bitte nimm einen Rohstoff von der Bank" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Bitte nimm zwei Rohstoffe von der Bank" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "Die Bank ist leer" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s hat %s und möchte %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "Neues Angebot von %s." #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Angebot von %s." #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Ich will" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Ich gebe dafür" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Löschen" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Handel ablehnen" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Spieler" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Angebote" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s für %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Handel abgelehnt" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Rohstoffe" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Insgesamt" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Karten in der Hand" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "mehr>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Die gewählte Menge erhöhen" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Gewählte Menge" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Gesamte ausgewählte Menge" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "Die Bank kann nicht geleert werden" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Ja" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Nein" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Unbekannt" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Es läuft gerade kein Spiel..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Allgemein" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Anzahl Spieler:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Siegpunkte:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Zufällige Geländeverteilung:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Handel unter den Spielern erlauben:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Handel nur vor dem Bauen oder Kaufen erlauben:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Sieg nur am Ende einer Runde überprüfen:" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Anzahl aller Rohstoffkarten:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "7-Regel:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Den Pirat benutzen, um Schiffe zu blockieren:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Insel-Entdeckungs-Bonus:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Gebäudeanzahl" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Straßen:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Siedlungen:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Städte:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Stadtmauern:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Schiffe:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Brücken:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Entwicklungskartenstapel" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Straßenbau-Karten:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopol-Karten:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Erfindungs-Karten:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Kathedralen-Karten:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Pioneer-Universitäts-Karten:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Regierungsgebäude-Karten:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Bibliotheks-Karten:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Marktplatz-Karten:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Ritter-Karten:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Aktuelle Spieleinstellungen" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "möchte %s gratis" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "gibt %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "gibt %s für %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Ich möchte %s, und gebe dafür %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Angebot erhalten von %s." #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "Angebote einholen" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "Angebot annehmen" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Handel beenden" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Straßenbau" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Erfindung" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Baue zwei Straßen." #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" "Wähle eine Rohstoffart und erhalte von den anderen Mitspielern alle Karten " "dieser Art" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" "Nehmen Sie 2 beliebige Rohstoffkarten von der Bank (Karten können gleich " "oder unterschiedlich sein)" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "Ein Siegpunkt" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Setzen Sie den Räuber in ein anderes Feld und nehmen Sie eine Rohstoffkarte " "von einem Mitspieler, der an dieses Feld angrenzt" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Dieses Spiel kann nicht gewonnen werden." #: ../common/game.c:891 msgid "There is no land." msgstr "Hier gibt es kein Land." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Es ist möglich, dass dieses Spiel unentschieden endet." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Dieses Spiel kann allein durch das Bauen aller Siedlungen und Städte " "gewonnen werden." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Benötigte Siegpunkte: %d\n" "Punkte durch Gebäude: %d\n" "Punkte durch Entwicklungskarten: %d\n" "Längste Straße/Stärkste Rittermacht: %d+%d\n" "Größter Insel-Entdeckungs-Bonus: %d\n" "Gesamt: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers basiert auf dem exzellenten\n" "Brettspiel 'Die Siedler von Catan'.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Version:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Homepage:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Autoren:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Launchpad Contributions:\n" " Daniel Winzen https://launchpad.net/~q-d\n" " Dominik R. https://launchpad.net/~visual-night\n" " Eberhard Allgaier https://launchpad.net/~e-allgaier\n" " Jochen Kemnade https://launchpad.net/~jochenkemnade\n" " Markus Groß https://launchpad.net/~mag-privat\n" " Philipp Kleinhenz https://launchpad.net/~lopho\n" " Roland Clobus https://launchpad.net/~rclobus\n" " Vinzenz Vietzke https://launchpad.net/~vinzv" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers wird auf Deutsch übersetzt von:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Siegpunkt-Analyse" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Jede 7 bewegt den Räuber oder Pirat" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "In den ersten beiden Runden wird jede 7 wiederholt gewürfelt." #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Jede 7 wird wiederholt gewürfelt" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Zufällige Geländeverteilung" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Zufällige Geländeverteilung" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Pirat benutzen" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Den Pirat benutzen, um Schiffe zu blockieren" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Strenger Handel" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Handel nur vor dem Bauen oder Kaufen erlauben" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Binnenhandel" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Handel unter den Spielern erlauben" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Sieg am Ende des Zuges" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Sieg nur am Ende einer Runde überprüfen" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Insel-Entdeckungs-Bonus" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Anzahl Spieler" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Die Anzahl der Spieler" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Siegpunkte" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Punkte für Sieg" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Ist es möglich, dieses Spiel zu gewinnen?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "S" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "G" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "E" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "W" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "H" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Einen Metaserver auswählen" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Wähle ein Spiel" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*FEHLER* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Chat: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Rohstoff: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Bauen: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Würfeln: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Stehlen: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Handel: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Entwicklung: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Ritter: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Straße: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*PIEP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Spieler 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Spieler 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Spieler 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Spieler 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Spieler 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Spieler 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Spieler 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Spieler 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Zuschauer: " #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** UNBEKANNTER NACHRICHTENTYP ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Fehler beim Prüfen des Verbindungsstatus: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Fehler beim Verbinden zum Rechner '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Fehler beim Schreiben auf Socket: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Fehler beim Schreiben auf Socket: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Überlauf des Lesepuffers - Ende der Verbindung\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Fehler beim Lesen des Sockets: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Fehler beim Anlegen eines Sockets: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Fehler beim Setzen von close-on-exec beim Socket: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Fehler, den Socket nicht-blockierend zu machen: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Fehler beim Verbinden zu %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Kann %s Port %s nicht auflösen: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Kann %s Port %s nicht auflösen: Rechner unbekannt\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Fehler beim Erzeugen einer struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Fehler beim Anlegen des annehmenden Sockets: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Fehler beim Versetzen des Sockets in Annahme-Zustand: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Listen-Modus wird auf dieser Plattform noch nicht unterstützt." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "unbekannt" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Fehler beim Holen des Namens des Kommunikationspartners: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Fehler beim Auflösen der Adresse: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name wird auf dieser Plattform noch nicht unterstützt." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Fehler beim Annehmen einer Verbindung: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Verbinde zu %s Port %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "Zustandsstack-Überlauf. Stack dump an 'standard error' gesendet.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Hügelland" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Ackerland" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Gebirge" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "We_ideland" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "Wa_ld" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "Wü_ste" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Meer" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "G_old" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Keine" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Lehm (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Getreide (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Erz (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Wolle (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Holz (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Alles (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "O" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NO" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NW" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "W" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SW" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SO" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Reihe einfügen" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Reihe löschen" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Spalte einfügen" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Spalte löschen" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Mischen" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Spiel-Parameter" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Regeln" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Rohstoffe" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Gebäude" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Pioneers Editor" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Laden von '%s' fehlgeschlagen" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Speichern nach '%s' fehlgeschlagen" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Spiel öffnen" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Speichern unter..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Titel ändern" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Neuer Titel:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Über Pioneers Editor" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Datei" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Neu" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Neues Spiel erstellen" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "Ö_ffnen..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Existierendes Spiel öffnen" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Speichern" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Spiel speichern" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Speichern _unter..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Speichern unter" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Titel ändern" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Spieltitel ändern" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Zeige die Anzahl der benötigten Siegpunkte" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Überprüfe, ob das Spiel gewonnen werden kann" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Quit" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "Ü_ber Pioneers Editor" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informationen über den Pioneers Editor" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Diese Datei öffnen" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "Dateiname" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor für Pioneers-Spiele" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Menüaufbau fehlgeschlagen: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Einstellungen" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Rohstoffe" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Erstelle dein eigenes Pioneers-Spiel" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Starte Meta-Server beim Programmstart als eigenständigen Prozess" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "" "Zu erstellende Pid-Datei, wenn Meta-Server als eigenständiger Prozess " "gestartet wird (bewirkt -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Verbinde Clients mit anderem Meta-Server" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Diesen Host beim Erstellen neuer Spiele benutzen" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "Hostname" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Diesen Port-Bereich für neu erstellte Spiele verwenden" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "von-bis" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Debugge Syslog Nachrichten" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Metaserver für Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "Protokoll des Meta-Servers:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Avahi Registrierung erfolgreich.\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "Avahi-Dienstname Zusammenstoß, benenne Dienst um zu '%s'.\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Avahi-Fehler: %s\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Avahi-Fehler: %s, %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "Konnte Avahi-Server nicht registrieren" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Lösche Avahi aus dem Register.\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "Ü_ber Pioneers-Server" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Informationen über den Pioneers-Server" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Server stoppen" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Server starten" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Den Server anhalten" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Den Server starten" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Spieler %s von %s eingetreten\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Spieler %s von %s gegangen\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Spieler %d heißt jetzt %s.\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Der Port für den Spielserver" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Server registrieren" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Dieses Spiel beim Metaserver registrieren" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Angezeigter Hostname" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Öffentlicher Name dieses Computers (wird benötigt, wenn er hinter einer " "Firewall steht)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Rundenreihenfolge mischen" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Rundenreihenfolge mischen" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Zeigt alle Spieler und Zuschauer die zum Server verbunden sind" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Verbunden" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Ist der Spieler zur Zeit verbunden?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Name" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Name des Spielers" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Standort" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Hostname des Spielers" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Nummer" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Spielernummer" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Rolle" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Spieler oder Zuschauer" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Pioneers-Client starten" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Den Pioneers-Client starten" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Chat aktivieren" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Chatnachrichten aktivieren" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Computerspieler hinzufügen" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Einen Computerspieler hinzufügen" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Nachrichten vom Server" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Spieleinstellungen" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Server-Einstellungen" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Laufendes Spiel" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Verbundene Spieler" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Computerspieler" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Nachrichten" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Der Pioneers-Spielserver" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "Ende des Spiels.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Einen Pioneerserver betreiben" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioneers-Server" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Ein Pioneers-Spiel bereitstellen" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Zu benutzender Spieltitel" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Zu verwendende Spieldatei" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Port auf dem gewartet werden soll" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Überschreibe die Anzahl der Spieler" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Überschreibe die Anzahl der Siegpunkte" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Überschreibe die 7-Regel" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Überschreibe den Gelände-Typ, 0=Standard 1=Zufällig" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "N Computerspieler hinzufügen" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Server beim Metaserver registrieren" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Bei ausgewähltem Metaserver registrieren (impliziert -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Diesen Hostnamen beim Registrieren benutzen" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Beenden nachdem ein Spieler gewonnen hat" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Nach N Sekunden ohne Spieler beenden" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Turniermodus, nach N Minuten werden Computerspieler hinzugefügt" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Administrator-Port" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "Das Spiel nicht sofort starten, sondern auf den Befehl auf dem Adminport " "hören" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Den Spielern in der Reihenfolge der Teilnahme Nummern zuteilen" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Metaserver-Optionen" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Optionen für den Metaserver" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Diverse Optionen" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Diverse Optionen" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" "Spiel-Titel und Dateiname können nicht zur gleichen Zeit gesetzt werden.\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Port des Spiel-Hosts\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "Administrator Port nicht verfügbar.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "Admin-Port ist nicht festgelegt, kann Spielstart auch nicht deaktivieren\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registriere bei Metaserver %s Port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Beim Meta-Server austragen\n" #: ../server/player.c:140 msgid "chat too long" msgstr "Chat ist zu lang" #: ../server/player.c:157 msgid "name too long" msgstr "Name ist zu lang" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignoriere unbekannte Erweiterung" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "Der letzte Spieler ist gegangen, der Turnier-Timer wird zurückgesetzt." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "Keine menschlichen Spieler anwesend. Tschüss." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Spiel beginnt, füge Computerspieler hinzu." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "Das Spiel beginnt in %s Minuten." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "Das Spiel beginnt in %s Minute." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Computerspieler" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Das Spiel ist beendet." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Spieler von %s abgelehnt: Das Spiel ist vorbei\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Name nicht geändert: neuer Name wird schon benutzt" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Habe zu lange auf andere Spieler gewartet... tschüss.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" "Der letzte menschliche Spieler ist gegangen. Warte auf das wiederkehren " "eines Spielers." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Spiel fortsetzen." #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s hat sich neu verbunden." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versionsunterschied: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Das Spiel beginnt bald." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Bereite Spiel vor" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Suche Spielstände in '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Spielverzeichnis '%s' nicht gefunden\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Insel-Entdeckungs-Bonus" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Extra Insel-Bonus" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Versuchte Ressourcen NULL Spieler zuzuteilen.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "Das Würfeln wurde vom Administrator bestimmt." pioneers-14.1/po/en_GB.po0000644000175000017500000026631311760645356012164 00000000000000# English (United Kingdom) translation for pioneers # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the pioneers package. # Philipp Kleinherz , 2010. # Roland Clobus , 2010 # msgid "" msgstr "" "Project-Id-Version: Pioneers 14.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2011-10-22 15:31+0100\n" "Last-Translator: Roland Clobus \n" "Language-Team: English (United Kingdom) \n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-03-11 19:44+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" "X-Poedit-Language: English\n" "X-Poedit-Country: UNITED KINGDOM\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Server Host" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Server Port" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Computer name (mandatory)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Time to wait between turns (in milliseconds)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Stop computer player from talking" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Type of computer player" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Enable debug messages" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Show version information" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Computer player for Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioneers version:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "A name must be provided.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Type of computer player: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "The game is already full. I'm leaving." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "No settlements in stock to use for setup" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "There is no place to setup a settlement" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "No roads in stock to use for setup" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "There is no place to setup a road" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Ok, let's go!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "I'll beat you all now! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Now for another try..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "At least I get something..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "One is better than none..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Ey, I'm becoming rich ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "This is really a good year!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "You really don't deserve that much!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "You don't know what to do with that many resources ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Ey, wait for my robber and lose all this again!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Go, robber, go!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "You bastard!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Can't you move that robber somewhere else?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Why always me??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Oh no!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Who the hell rolled that 7??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Why always me?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Say good bye to your cards... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*evilgrin*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me says farewell to your cards ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "That's the price for being rich... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Ey! Where's that card gone?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Thieves! Thieves!!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Wait for my revenge..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh no :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Must this happen NOW??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hehe, my soldiers rule!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "First robbing us, then grabbing the points..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "See that road!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pf, you won't win with roads alone..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Rejecting trade.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Received error from server: %s. Quitting\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Yippie!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "My congratulations" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' shows this message again" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' explains the purpose of this strange board layout" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' tells the last released version" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "The last released version of Pioneers is" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "The game is starting. I'm not needed anymore. Goodbye." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Waiting" #: ../client/common/client.c:108 msgid "Idle" msgstr "Idle" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "We have been kicked out of the game.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Offline" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Error (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Notice: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s does not receive any %s, because the bank is empty.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s only receives %s, because the bank didn't have any more.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s receives %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s takes %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s spent %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s is refunded %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s discarded %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s has won the game with %d victory points!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Loading" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Version mismatch." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "Version mismatch. Please make sure client and server are up to date.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Build two settlements, each with a connecting" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Build a settlement with a connecting" #: ../client/common/client.c:1416 msgid "road" msgstr "road" #: ../client/common/client.c:1418 msgid "bridge" msgstr "bridge" #: ../client/common/client.c:1420 msgid "ship" msgstr "ship" #: ../client/common/client.c:1427 msgid " or" msgstr " or" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Waiting for your turn." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Select the building to steal from." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Select the ship to steal from." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Place the robber." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Finish the road building action." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Build one road segment." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Build two road segments." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "It is your turn." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Sorry, %s available.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "The game is over." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "You bought the %s development card.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "You bought a %s development card.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s bought a development card.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s played the %s development card.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s played a %s development card.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "You have run out of road segments.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "You get %s from %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s took %s from you.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s took %s from %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Spectator %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "spectator %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Player %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "player %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "New spectator: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s is now %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Player %d is now %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s has quit.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "There is no largest army.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s has the largest army.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "There is no longest road.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s has the longest road.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Waiting for %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s stole a resource from %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "You stole %s from %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s stole %s from you.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s gave %s nothing!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s gave %s %s for free.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s gave %s %s in exchange for %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s exchanged %s for %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s built a road.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s built a ship.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s built a settlement.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s built a city.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s built a city wall.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add called with BUILD_NONE for user %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s built a bridge.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s removed a road.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s removed a ship.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s removed a settlement.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s removed a city.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s removed a city wall.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove called with BUILD_NONE for user %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s removed a bridge.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s has cancelled a ship's movement.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s moved a ship.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s received %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "server asks to lose invalid point.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s lost %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "server asks to move invalid point.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s lost %s to %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "brick" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Brick" #: ../client/common/resource.c:36 msgid "grain" msgstr "grain" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Grain" #: ../client/common/resource.c:37 msgid "ore" msgstr "ore" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Ore" #: ../client/common/resource.c:38 msgid "wool" msgstr "wool" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Wool" #: ../client/common/resource.c:39 msgid "lumber" msgstr "lumber" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Lumber" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "no resource (bug)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "No resource (bug)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "any resource (bug)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Any resource (bug)" #: ../client/common/resource.c:42 msgid "gold" msgstr "gold" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Gold" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "a brick card" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d brick cards" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "a grain card" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d grain cards" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "an ore card" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d ore cards" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "a wool card" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d wool cards" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "a lumber card" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d lumber cards" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "nothing" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s and %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s has undone the robber movement.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s moved the robber.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s has undone the pirate movement.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s moved the pirate.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s must move the robber." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Setup for %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Double setup for %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s rolled %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Begin turn %d for %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Select an automatically discovered game" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) on %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Beeper test.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s beeped you.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "You beeped %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "You could not beep %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " said: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta-server at %s, port %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Finished.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Meta-server kicked us off\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Receiving game names from the meta server.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "New game server requested on %s port %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Unknown message from the metaserver: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Too many meta-server redirects\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Bad redirect line: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Meta server too old to create servers (version %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Reroll on 1st 2 turns" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Reroll all 7s" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Default" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Random" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Redirected to meta-server at %s, port %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Receiving a list of Pioneers servers from the meta server.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Number of computer players" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "The number of computer players" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Requesting new game server\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Error starting %s: %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Create a Public Game" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Join a Public Game" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_New Remote Game" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Refresh the list of games" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Create a new public game at the meta server" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Don't join a public game" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Join the selected game" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Select a game to join" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Map Name" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Name of the game" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Curr" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Number of players in the game" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Maximum players for the game" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terrain" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Random of default terrain" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Vic. Points" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Points needed to win" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Sevens Rule" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Sevens rule" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Host" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Host of the game" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Port of the game" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Version" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Version of the host" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Start a New Game" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Player name" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Enter your name" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Spectator" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Check if you want to be a spectator" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Join" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Join an automatically discovered game" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta server" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Join Public Game" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Join a public game" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Create Game" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Create a game" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Join Private Game" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Join a private game" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Server host" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Name of the host of the game" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Server port" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Port of the host of the game" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Recent games" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Development cards" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Play Card" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Discard Resources" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "You must discard %d resource" msgstr[1] "You must discard %d resources" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Total discards" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Waiting for players to discard" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Game Over" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s has won the game with %d victory points!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "All praise %s, Lord of the known world!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Choose Resources" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "You may choose %d resource" msgstr[1] "You may choose %d resources" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Total resources" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Waiting for players to choose" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Game" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_New Game" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Start a new game" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Leave Game" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Leave this game" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administer Pioneers server" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "_Player Name" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Change your player name" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "L_egend" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Terrain legend and building costs" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Game Settings" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Settings for the current game" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Dice Histogram" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogram of dice rolls" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Quit" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Quit the program" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Actions" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Roll Dice" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Roll the dice" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Trade" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Undo" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Finish" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Road" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Build a road" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Ship" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Build a ship" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Move Ship" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Move a ship" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Bridge" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Build a bridge" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Settlement" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Build a settlement" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "City" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Build a city" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Develop" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Buy a development card" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "City Wall" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Build a city wall" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Settings" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Prefere_nces" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Configure the application" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_View" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Reset" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "View the full map" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Centre" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "Centre the map" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Help" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_About Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Information about Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Show the manual" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Fullscreen" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Set window to full screen mode" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Toolbar" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Show or hide the toolbar" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Points needed to win: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Messages" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Map" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Finish trading" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Quote" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Reject domestic trade" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Legend" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Welcome to Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Pioneers Preferences" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Theme:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Choose one of the themes" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Show legend" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Show the legend as a page beside the map" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Messages with colour" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Show new messages with colour" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Chat in colour of player" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Show new chat messages in the colour of the player" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Summary with colour" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Use colours in the player summary" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Toolbar with shortcuts" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Show keyboard shortcuts in the toolbar" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Silent mode" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "In silent mode no sounds are made" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Announce new players" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "Make a sound when a new player or spectator enters the game" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Show notifications" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "Show notifications when it's your turn or when new trade is available" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Use 16:9 layout" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Use a 16:9 friendly layout for the window" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "About Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Welcome to Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Dice Histogram" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Ship movement cancelled." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Select a new location for the ship." #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "It is your turn to setup." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Hill" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Field" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Mountain" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pasture" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Forest" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Desert" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Sea" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Terrain yield" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Building costs" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "City wall" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Development card" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopoly" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Select the resource you wish to monopolise." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Change Player Name" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Player name:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Face:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variant:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Connect as a spectator" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Meta-server Host" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Select a game to join." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Connecting" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Play a game of Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Play a game of Pioneers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Settlements" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Cities" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "City walls" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Largest army" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Longest road" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Chapel" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Chapels" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pioneer university" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pioneer universities" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Governor's house" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Governor's houses" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Library" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Libraries" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Market" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Markets" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldier" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldiers" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Resource card" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Resource cards" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Development cards" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Player summary" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Year of Plenty" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Please choose one resource from the bank" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Please choose two resources from the bank" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "The bank is empty" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s has %s, and is looking for %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "New offer from %s." #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Offer from %s." #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "I want" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Give them" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Delete" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Reject Domestic Trade" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Player" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Quotes" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s for %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Rejected trade" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Resources" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Total" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Amount in hand" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "more>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Increase the selected amount" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Selected amount" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Total selected amount" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "The bank cannot be emptied" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Yes" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "No" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Unknown" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "No game in progress..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "General settings" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Number of players:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Victory point target:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Random terrain:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Allow trade between players:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Allow trade only before building or buying:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Check victory only at end of turn:" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Amount of each resource:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Sevens rule:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Use the pirate to block ships:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Island discovery bonuses:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Building quotas" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Roads:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Settlements:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Cities:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "City walls:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Ships:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Bridges:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Development card deck" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Road building cards:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopoly cards:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Year of plenty cards:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Chapel cards:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Pioneer university cards:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Governor's house cards:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Library cards:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Market cards:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Soldier cards:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Current Game Settings" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "ask for %s for free" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "give %s for free" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "give %s for %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "I want %s, and give them %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Quote received from %s." #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Call for Quotes" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Accept Quote" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Finish Trading" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Road building" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Year of plenty" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Build two new roads" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" "Select a resource type and take every card of that type held by all other " "players" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "One victory point" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "Obsolete rule: '%s'\n" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "This game cannot be won." #: ../common/game.c:891 msgid "There is no land." msgstr "There is no land." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "It is possible that this game cannot be won." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "This game can be won by only building all settlements and cities." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Version:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Homepage:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Authors:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Roland Clobus \n" "Philipp Kleinhenz https://launchpad.net/~zweistecken" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers is translated to British by:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Victory Point Analysis" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "All sevens move the robber or pirate" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "In the first two turns all sevens are rerolled" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "All sevens are rerolled" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Randomise terrain" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Randomise the terrain" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Use pirate" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Use the pirate to block ships" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Strict trade" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Allow trade only before building or buying" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Domestic trade" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Allow trade between players" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Victory at end of turn" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Check for victory only at end of turn" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Island discovery bonuses" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "A comma seperated list of bonus points for discovering islands" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "Check and correct island discovery bonuses" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Number of players" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "The number of players" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Victory point target" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "The points needed to win the game" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Is it possible to win this game?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "B" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "G" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "O" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "W" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "L" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Select a meta server" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Select a game" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERROR* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Chat: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Resource: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Build: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dice: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Steal: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Trade: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Development: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Army: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Road: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BEEP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Player 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Player 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Player 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Player 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Player 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Player 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Player 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Player 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Spectator: " #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** UNKNOWN MESSAGE TYPE ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Error checking connect status: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Error connecting to host '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Error writing socket: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Error writing to socket: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Read buffer overflow - disconnecting\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Error reading socket: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Error creating socket: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Error setting socket close-on-exec: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Error setting socket non-blocking: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Error connecting to %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Cannot resolve %s port %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Cannot resolve %s port %s: host not found\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Error creating struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Error creating listening socket: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Error during listen on socket: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Listening not yet supported on this platform." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "unknown" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Error getting peer name: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Error resolving address: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name not yet supported on this platform." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Error accepting connection: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Connecting to %s, port %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "State stack overflow. Stack dump sent to standard error.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Hill" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Field" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Mountain" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pasture" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "F_orest" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Desert" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Sea" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Gold" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_None" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Brick (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Grain (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Ore (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Wool (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Lumber (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Any (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "E" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NE" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NW" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "W" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SW" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SE" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Insert a row" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Delete a row" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Insert a column" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Delete a column" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Shuffle" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Game parameters" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Rules" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Resources" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Buildings" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Pioneers Editor" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Failed to load '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Failed to save to '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "Games" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "Unfiltered" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Open Game" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Save As..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Change Title" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "New title:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "About Pioneers Game Editor" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_File" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_New" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Create a new game" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Open..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Open an existing game" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Save" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Save game" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Save _As..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Save as" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Change Title" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Change game title" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "_Check Victory Point Target" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Check whether the game can be won" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Quit" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_About Pioneers Editor" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Information about Pioneers Editor" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Open this file" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "filename" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor for games of Pioneers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Building menus failed: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Settings" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "Comments" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Resource count" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Create your own game for Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Daemonise the meta-server on start" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Pidfile to create when daemonising (implies -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Redirect clients to another meta-server" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Use this hostname when creating new games" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "hostname" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Use this port range when creating new games" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "from-to" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Debug syslog messages" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta server for Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "meta-server protocol:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Avahi registration successful.\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "Avahi service name collision, renaming service to '%s'.\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Avahi error: %s\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Avahi error: %s, %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "Unable to register Avahi server" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Unregistering Avahi.\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_About Pioneers Server" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Information about Pioneers Server" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Stop Server" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Start Server" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Stop the server" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Start the server" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Player %s from %s entered\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Player %s from %s left\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Player %d is now %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "The port for the game server" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Register server" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Register this game at the meta server" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Reported hostname" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "The public name of this computer (needed when playing behind a firewall)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Random turn order" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Randomise turn order" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Shows all players and spectators connected to the server" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Connected" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Is the player currently connected?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Name" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Name of the player" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Location" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Host name of the player" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Number" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Player number" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Role" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Player or spectator" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Launch Pioneers Client" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Launch the Pioneers client" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Enable chat" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Enable chat messages" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Add Computer Player" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Add a computer player to the game" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Messages from the server" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Game settings" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Server parameters" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Running game" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Players connected" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Computer players" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Messages" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "The Pioneers Game Server" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "The game is over.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Host a game of Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioneers Server" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Host a game of Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Game title to use" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Game file to use" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Port to listen on" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Override number of players" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Override number of points needed to win" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Override seven-rule handling" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Override terrain type, 0=default 1=random" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Add N computer players" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Register server with meta-server" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Register at meta-server name (implies -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Use this hostname when registering" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Quit after a player has won" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Quit after N seconds with no players" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Tournament mode, computer players added after N minutes" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Admin port to listen on" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "Don't start game immediately, wait for a command on admin port" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Give players numbers according to the order they enter the game" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Meta-server Options" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Options for the meta-server" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Miscellaneous Options" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Miscellaneous options" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "Cannot set game title and filename at the same time\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Cannot load the parameters for the game\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "Admin port not available.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "Admin port is not set, cannot disable game start too\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Register with meta-server at %s, port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Unregister from meta-server\n" #: ../server/player.c:140 msgid "chat too long" msgstr "chat too long" #: ../server/player.c:157 msgid "name too long" msgstr "name too long" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignoring unknown extension" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "The last player left, the tournament timer is reset." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "No human players present. Bye." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Game starts, adding computer players." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "The game starts in %s minutes." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "The game starts in %s minute." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Computer Player" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Sorry, game is over." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Player from %s is refused: game is over\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Name not changed: new name is already in use" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Was hanging around for too long without players... bye.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "The last human player left. Waiting for the return of a player." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Resuming the game." #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s has reconnected." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Version mismatch: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "This game will start soon." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Preparing game" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Looking for games in '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Game directory '%s' not found\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Island Discovery Bonus" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Additional Island Bonus" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Tried to assign resources to NULL player.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "The dice roll has been determined by the administrator." #~ msgid "Viewer %d" #~ msgstr "Viewer %d" #~ msgid "viewer %d" #~ msgstr "viewer %d" #~ msgid "I want" #~ msgstr "I want" #~ msgid "Give them" #~ msgstr "Give them" #~ msgid "Viewer: " #~ msgstr "Viewer: " #~ msgid "Number of AI Players" #~ msgstr "Number of AI Players" #~ msgid "The number of AI players" #~ msgstr "The number of AI players" #~ msgid "Recent Games" #~ msgstr "Recent Games" #~ msgid "You may choose 1 resource" #~ msgstr "You may choose 1 resource" #~ msgid "_Player name" #~ msgstr "_Player name" #~ msgid "The Pioneers Game" #~ msgstr "The Pioneers Game" #~ msgid "Select the ship to steal from" #~ msgstr "Select the ship to steal from" #~ msgid "Select the building to steal from" #~ msgstr "Select the building to steal from" #~ msgid "Development Card" #~ msgstr "Development Card" #~ msgid "Player Name:" #~ msgstr "Player Name:" #~ msgid "I Want" #~ msgstr "I Want" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Interplayer Trading Allowed?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Trading allowed only before build/buy?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Check Victory Only At End Of Turn?" #~ msgid "Sevens Rule:" #~ msgstr "Sevens Rule:" #~ msgid "Use Pirate:" #~ msgstr "Use Pirate:" #~ msgid "Number of Players" #~ msgstr "Number of Players" #~ msgid "Development Cards" #~ msgstr "Development Cards" #~ msgid "Save as..." #~ msgstr "Save as..." #~ msgid "Pioneers Game Editor" #~ msgstr "Pioneers Game Editor" #~ msgid "_Change title" #~ msgstr "_Change title" #~ msgid "Random Turn Order" #~ msgstr "Random Turn Order" pioneers-14.1/po/es.po0000644000175000017500000027103211760645356011613 00000000000000# Pioneers - Settlers of Catan for GNOME. # Copyright (C) 1999-2001 Dave Cole # Copyright (C) 2000-2002 Andy Heroff # Copyright (C) 2006 Marco Antonio Giraldo # This file is distributed under the same license as the pioneers package. # Steve Langasek , 2002-2003. # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.12.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2012-05-19 11:54+0000\n" "Last-Translator: DiegoJ \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-05-23 05:36+0000\n" "X-Generator: Launchpad (build 15282)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Servidor" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Puerto" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Nombre de equipo (requerido)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Tiempo de espera entre turnos (en milisegundos)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Parar de hablar el adversario electrónico" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Tipo de adversario electrónico" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Activar mensajes depurados" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Mostrar información de la versión" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Adversario electrónico de Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Versión de Pioneers:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Debes de proveer un nombre.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Tiempo de adversario electrónico: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "El juego ya está lleno. Me voy." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "No hay asentamientos en reservas para usar en el montaje" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "No hay lugar para instalar un asentamiento" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "No hay caminos en reservas para usar en el montaje" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "No hay lugar para instalar un camino" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Ok, ¡vamos!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Ahora los venceré a todos" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Intentemos otra vez..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Al menos obtuve algo..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Es mejor que nada..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Ey, me estoy enriqueciendo ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "¡Este es realmente un buen año!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "¡Realmente no mereces tanto!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "No sabes qué hacer con tantos recursos ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "¡Ey, espera a mi ladrón y pierde todo de nuevo!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "¡Ejeje!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "¡Ve ladron, ve!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "¡Maldito!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "¿No puedes mover ese ladrón a otra parte?" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "¿Por qué siempre yo?" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "¡Oh, no!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "¡Grr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "¿Quién diablos tiró ese 7?" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "¿Por qué siempre yo?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Dile adios a tus cartas... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "Diablillo!!" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me dice adios a tus cartas ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Ese es el precio de ser rico... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "¡Ey!, ¿a donde se fue esa carta?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "¡Ladrón, ladrón!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Espera mi revancha..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh no :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "¿Tenía que pasar ahora?" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Vaya!!" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Je je, mis soldados mandan" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Primero nos robas, luego nos coges los puntos..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "¡Mira ese camino!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pff, no ganarás solo con caminos..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Rechazando negocio.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Error recibido del servidor: %s. Saliendo\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Yupi!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Mis felicitaciones" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hola, bienvenido al salón. Soy un simple robot. Escriba '/help' en la sala " "de charla para ver la lista de comandos que conozco." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' muestra este mensaje de nuevo" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' explica el propósito de esta extraña presentación del tablero" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' dice cuál es la ultima versión que ha salido" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Este tablero no pretende ser sólo un juego que pueda ser jugado. En lugar de " "ello, los jugadores se pueden encontrar aquí y decidir que trablero quieren " "usar. Entonces, uno de los jugadores será el anfitrión del juego propuesto " "iniciando un servidor y registrándolo en el Meta-servidor. Los otros " "jugadores pueden seguidamente salir del salón y entrar al juego." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "La más reciente versión de Pioneers es" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "El juego está comenzando. No me necesitan más. Adios." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Esperando" #: ../client/common/client.c:108 msgid "Idle" msgstr "Libre" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Hemos sido expulsados del juego.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "desconectado" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Error (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Note: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s no recibe %s, porque el banco está vacío.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s sólo recibe %s, porque el banco no tiene más.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s recibe %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s toma a %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s gasta %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "Se reembolsa %2s a %1s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s desecha %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s ha ganado con %d puntos!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Bajando" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versión no coincide." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versión no coincide, Por favor asegúrese de que el cliente y el servidor " "están actualizados.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Contruya dos asentamientos, cada uno con una conexión" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Construya un asentamiento con una conexión" #: ../client/common/client.c:1416 msgid "road" msgstr "camino" #: ../client/common/client.c:1418 msgid "bridge" msgstr "puente" #: ../client/common/client.c:1420 msgid "ship" msgstr "barco" #: ../client/common/client.c:1427 msgid " or" msgstr " o" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Esperando tu turno." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Escoge el edificio que quieres robar." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Seleccione el barco a robar" #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Coloca el ladrón." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Termina la acción de construcción del camino" #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Construir un segmento de camino." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Construye dos segmentos de camino." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Te toca a tí." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Lo siento, %s disponible.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Fin del juego" #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Has comprado la carta de desarrollo «%s».\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Has comprado una carta de desarrollo «%s».\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s ha comprado una carta de desarrollo.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s ha usado la carta de desarrollo «%s».\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s ha usado una carta de desarrollo «%s».\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Has gastado todos los segmentos de camino.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Recibes %s de %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s te quita %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s toma %s de %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Espectador %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "espectador %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Jugador %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "jugador %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Nuevo espectador: %s\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s es ahora %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Jugador %d se llama ahora %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s ha salido.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "No hay un ejército más grande.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s tiene el ejército más grande.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "No hay un camino más largo.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s tiene el camino más largo.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Esperando a %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s le roba una carta de recurso a %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Robas %s a %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s te roba %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "¿¡%s no da nada a %s!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s da %s a %s gratis.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%1s le da %3s a %2s a cambio de %4s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s cambia %s por %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s construye un camino.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s construye un barco.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s edifica un pueblo.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s edifica una ciudad.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s hizo amurallar una ciudad.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "Se llamó player_build_add con BUILD_NONE para el usuario %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s construye un puente.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s quita un camino.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s quita un barco.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s quita un pueblo.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s quita una ciudad.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s quitó el muro a una ciudad.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "Se llamó player_build_remove con BUILD_NONE para el usuario %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s quita un puente.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s cancela un movimiento de barco.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s mueve un barco.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s recibe %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "El servidor pide perder punto invalido.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s gasta %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "El servidor pide mover punto inválido.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s pierde %s a %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "ladrillo" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Ladrillo" #: ../client/common/resource.c:36 msgid "grain" msgstr "cereales" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Cereales" #: ../client/common/resource.c:37 msgid "ore" msgstr "minerales" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Minerales" #: ../client/common/resource.c:38 msgid "wool" msgstr "lana" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Lana" #: ../client/common/resource.c:39 msgid "lumber" msgstr "madera" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Madera" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "no recurso (gusano)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "No recurso (gusano)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "cualquier recurso (gusano)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Cualquier recurso (gusano)" #: ../client/common/resource.c:42 msgid "gold" msgstr "oro" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Oro" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "una carta de ladrillo" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d cartas de ladrillo" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "una carta de cereales" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d cartas de cereales" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "una carta de minerales" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d cartas de minerales" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "una carta de lana" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d cartas de lana" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "una carta de madera" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d cartas de madera" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "nada" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s y %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s ha deshecho el movimiento de los ladrones.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s mueve el ladrón.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s ha deshecho el movimiento pirata.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s mueve el pirata.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s debe mover el ladrón." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Colocación inicial para %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Colocación inicial doble para %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s tiró %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Comienza turno %d para %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Selecciona un juego que ha sido detectado automáticamente" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) en %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Charlar" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Prueba de pito.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s te pita.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Has pitado a %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "No pudiste pitar a %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " dice: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta-servidor en %s, puerto %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Terminado.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Meta-servidor nos sacó\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Recibiendo nombres del juego de Meta-servidor.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Nuevo servidor de juego solicitado en %s puerto %s.\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Mensaje desconocido del Meta-servidor: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Demasiados desvíos del meta-servidor\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Mala linea de desvío: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Meta-servidor muy viejo para crear servidores(versión %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Tirar de nuevo durante las dos primeras vueltas" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Tirar de nuevo cada siete" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Por defecto" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Al azar" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Desviado al Meta-servidor en %s, puerto %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Recibiendo una lista de servidores Pioneers del Meta-servidor.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Nota:\n" "\tThe Meta-servidor no envía información acerca de los juegos.\n" "\tPor favor ajuste los valores apropiados usted mismo." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Número de jugadores de la computador" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "El Número de jugadores de la computador" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Pidiendo nuevo servidor de juego\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Error al empezar %s: %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Crear un juego publico" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Adherir a un juego publico" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nuevo juego remoto" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Renovar la lista de juegos" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Crear un nuevo juego publicoen el Meta-servidor" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "No adherir a un juego publico" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Adherir al juego seleccionado" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Seleccionar un juego para adherir" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Nombre de mapa" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Nombre del juego" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Corr." #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Número de jugadores en el juego" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Máx." #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Maximo de jugadores para el juego" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terreno" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Terreno por defecto al azar" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Puntos de Vic." #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Puntos necesitados para ganar" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Regla de los sietes" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Regla de los sietes" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Servidor" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Servidor del juego" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Puerto" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Puerto para el juego" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Versión" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Versión del anfitrion" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Comenzar un nuevo juego" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Nombre de jugador" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Entra tu nombre de jugador" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Espectador" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Marcar para ser un espectador" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Adherir" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Adherir un juego descubierto automáticamente" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta-servidor" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Adherir a juego publico" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Adherir a un juego publico" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Crear juego" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Crear un juego" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Adherir a juego privado" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Adherir a juego privado" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Servidor" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Nombre del anfitrion del juego" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Puerto" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Puerto del anfitrion del juego" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Juegos recientes" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Cartas de desarrollo" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Jugar carta de desarrollo" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Deseche recursos" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Tienes que desechar %d carta de recurso" msgstr[1] "Tienes que desechar %d cartas de recurso" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Rechazos totales" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Esperando a que los jugadores descarten" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Fin del juego" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s ha ganado con %d puntos!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Alabanzas a %s, Señor del mundo conocido!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Elige recursos" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Puedes escoger %d recurso" msgstr[1] "Puedes escoger %d recursos" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Recursos totales" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Esperando a que los jugadores escojan" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Juego" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nuevo juego" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Comenzar un nuevo juego" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Dejar juego" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Dejar este juego" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrar servidor de Pioneers" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Nombre de _jugador" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Cambiar tu nombre de jugador" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "L_eyenda" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Leyenda de terreno y costos de construccion" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Ajustes de juego" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Ajustes del juego actual" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Histograma de los dados" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histograma de las tiradas" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Salir" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Salir del programa" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Acciones" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Tirar los dados" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Tirar los dados" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Comercio" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Deshacer" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Terminar" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Camino" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Construir camino" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Barco" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Construir un barco" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Quitar barco" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Quitar un barco" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Puente" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Construir un puente" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Asentamiento" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Construir un asentamiento" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Ciudad" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Construir una ciudad" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Desarrollar" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Comprar una carta de desarrollo" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Muralla" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Construir un muro de ciudad" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Ajustes" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Prefere_ncias" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Configurar aplicacion" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_Ver" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Reiniciar" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "Ver todo el mapa" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Centrar" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "Centrar el mapa" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "A_yuda" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Acerca de Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informacion acerca de Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Mostrar el manual" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Pantalla completa" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Cambiar a modo de pantalla completa" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Barra de herramientas" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Muestre o esconder barra de herramientas" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Puntos necesarios para ganar: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Mensajes" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Mapa" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Terminar negocio" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Presupuestos" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Rechazar Negocio Domestico" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Leyenda" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Bienvenido al Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Preferencias de Pioneers" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Escoger uno de los temas" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Mostrar leyenda" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "¿Mostrar la leyenda como una página junto al mapa?" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "¿Usar colores en los mensajes?" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "¿Usar colores en los mensajes nuevos?" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "¿Charlar con el color del jugador?" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Mostrar nuevos mensajes de charla en el color del jugador" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Resumen en color" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Usar color en el resumen del jugador" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Barra de herramientas con acceso directo" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Mostrar accesos directos de teclado en barra de herramientas" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Modo silencioso" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "En modo de silencio, no se reproducen sonidos." #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Anunciar nuevos jugadores" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "" "Reproducir un sonido cuando un nuevo jugador o espectador entra en el juego" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Mostrar notificaciones" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" "Mostrar notificaciones cuando sea tu turno o cuando haya una oferta de " "comercio" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Usa un tema de 16:9" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Usar una disposición para la ventana de 16:9" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Acerca de Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "¡Bienvenido a Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Histograma de los dados" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Movimiento de barco cancelado" #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Seleccione una nueva locacion para el barco" #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "" #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Colina" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Vega" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Montaña" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pasto" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Selva" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Desierto" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Mar" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Produccion de terreno" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Costes de construcción" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Muralla" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Carta de desarrollo" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopolio" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Escoge el recurso que quieres monopolizar." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Cambiar tu nombre de jugador" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Nombre de jugador:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Cara:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variante:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Conectarse como un espectador" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Meta-servidor del anfitrion" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Seleccionar un juego para adherir." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Conectando" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Jugar un juego de Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Jugar al juego de los pioneros" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Asentamientos" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Ciudades" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Muros de la Ciudad" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Ejército Mayor" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Camino Más Largo" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Capilla" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Capillas" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Universidad Pionera" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Universidades Pioneras" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Palacio del Gobernador" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Palacio del Gobernador" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Biblioteca" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Biblioteca" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Mercado" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Mercados" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldado" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldados" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Carta de recurso" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Cartas de recurso" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Cartas de desarrollo" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Resumen de jugadores" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Año de Abundancia" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Por favor escoja un recurso del banco" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Por favor escoja dos recursos del banco" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "El banco esta vacio" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s tiene %s y quiere %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "Nueva oferta de %s." #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Oferta de %s." #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Quiero..." #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Dales..." #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Borrar" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Rechazar Negocio Domestico" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Jugador" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Presupuestos" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s por %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Negocio rechazado" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Recursos" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Total" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Cartas de recurso en mano" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "más>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Incrementar la cantidad seleccionada" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Cantidad seleccionada" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Cantidad seleccionada total" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "El banco no se puede vaciar" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Sí" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "No" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Desconocido" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "No hay juego en proceso" #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Ajuste general" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Número de jugadores:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Punto de victoria:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Terreno Aleatorio:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Permitir comerciar entre jugadores:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Permitir comerciar sólo antes de construir o comprar:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Revisar por victoria únicamente al fin del turno" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Cantidad de cada recurso:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Regla de los sietes:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Usa al pirata para bloquear barcos:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonificaciones por descubrimiento de islas:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Costes de construcción" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Caminos:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Asentamientos:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Ciudades:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Muros de la Ciudad:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Barcos:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Puentes:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Cartas de desarrollo" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Cartas de construir caminos:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Cartas de monopolio:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Cartas de año de abundancia:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Cartas de capilla:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Cartas Universidad de Pioneers:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Cartas Palacio del Gobernador:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Cartas de biblioteca:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Cartas de mercado:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Cartas de soldado:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Ajusted de juego actual" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "pide %s gratis" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "ofrece %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "ofrece %s por %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Quiero %s, y darles %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Cita recibida de %s." #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "Pedir presupuestos" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Aceptar presupuesto" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Terminar negocio" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Construcción de caminos" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Año de Abundancia" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Construir dos caminos nuevos" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "Escoger un tipo de recurso y tomar todo de lo mismo de todos jugadores" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" "Tomar dos cartas de recurso del banco de cualquier tipo (las pueden ser " "iguales or diferentes)" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "Un punto de victoria" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Mover el ladrón al espacio diferente y robar una carta de recurso del otro " "jugador que está adyacente a ese espacio" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Este juego no se puede ganar." #: ../common/game.c:891 msgid "There is no land." msgstr "No hay tierra" #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Es posible que este juego no pueda ser ganado." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Este juego puede ser ganado con solo construir todos los asentamientos y " "ciudades." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Puntos de victoria necesarios: %d\n" "Puntos obtenidos por construcciones: %d\n" "Puntos al desarrollar cartas: %d\n" "Carretera más larga/Ejército más grande: %d+%d\n" "Bonificación máxima por descubrimiento de islas: %d\n" "Total: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers está basado en el excelente\n" "juego de mesa 'Los fundadores de Catán'.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Versión:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Página principal:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Autores:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Marco Antonio Giraldo\n" "Michael Wiktowy\n" "Launchpad Contributions:\n" " Braxton Schafer https://launchpad.net/~braxton-schafer\n" " Eduardo Ruiz https://launchpad.net/~eduardo-ruizcarrillo\n" " Felipe Hommen https://launchpad.net/~felibank\n" " Fitoschido https://launchpad.net/~fitoschido\n" " José A. Fuentes Santiago https://launchpad.net/~joanfusan\n" " Kiibakun https://launchpad.net/~kiba\n" " Marco Antonio Giraldo https://launchpad.net/~m-a-giraldo" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers es traducido al español por:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Análisis de Punto de Victoria" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Todos los 7 quitan el ladron o pirata" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "En los primeros dos turnos todos los 7 se tiran de nuevo" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Todos los 7 se tiran de nuevo" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Hacer aleatorio el terreno" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Hacer aleatorio el terreno" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Use Pirata" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Usa al pirata para bloquear barcos" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Negocio riguroso" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Permitir comerciar sólo antes de construir o comprar" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Negocio local" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Permitir comerciar entre jugadores" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Victoria al terminar el turno" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Revisa la victoria únicamente al fin del turno" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Bonificaciones por descubrimiento de islas" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Número de jugadores" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Número de jugadores" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Punto de victoria" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Puntos necesarios para ganar el juego" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "¿Se puede ganar este juego?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "Ld" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "C" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "Mi" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Ln" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Ma" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Seleccionar un meta-servidor" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Seleccione un juego" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERROR* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Charlar: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Recursos: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Construir: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dados: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Robar: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Comercio: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Desarrollo: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Ejercito: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Camino: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*PITO* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Jugador 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Jugador 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Jugador 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Jugador 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Jugador 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Jugador 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Jugador 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Jugador 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Espectador: " #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** TIPO DE MENSAJE DESCONOCIDO ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Error chequeando estado de conexion: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Error conectando a anfitrion '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Error escribiendo conector: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "error escribiendo conector: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Leer buffer sobreflujo - desconectando\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Error leyendo conector: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Error creando conector: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Error ajustando conector close-on-exec: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Error setting socket non-blocking: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Error conectando a %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "No se puede resolver %s puerto %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "No se puede resolver %s puerto %s: anfitrion no encontrado\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Error creando struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Error creando conector de escucha: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Error durante la escucha en conector: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Escucha no soportada aun en esta plataforma." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "Desconocido" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Error obteniendo nombre de camarada: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Error consiguiendo direccion: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name no soportada aun en esta plataforma" #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Error aceptando coneccion: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Conectando a %s, puerto %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "State stack overflow. Stack dump sent to standard error.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Colina" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Siembra" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Montaña" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pasto" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Bosque" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Desierto" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "M_ar" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Oro" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Ninguno" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "La_drillo (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Cereales (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "Mine_rales (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Lana (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Madera (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "Cualquiera (_3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "E" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NE" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NO" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "O" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SO" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SE" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Insertar una línea" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Borrar una línea" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Insertar una columna" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Borrar una columna" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Desordenar" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Parametros de juego" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Reglas" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Recursos" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Construcciones" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Editos de Pioneers" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Falla al bajar '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Falla al salvar a '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Juego abierto" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Grabar como..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Cambiar titulo" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Nuevo titulo:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Acerca de Editor de Pioneers" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Archivo" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Nuevo" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Crear un nuevo juego" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Abrir" #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Abrir un juego existente" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Grabar" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Grabar juego" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Grabar _como..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Guardar como" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Cambiar título" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Cambiar título del juego" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "_Comprueba el objetivo de puntos de victoria" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Comprueba cuando puede ganarse el juego" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Salir" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Acerca de Editor de Pioneers" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informacion acerca de Editor de Pioneers" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Abrir este archivo" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "Nombre de archivo" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor para juegos de Pioneers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Construcción menus fallida: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Ajustes" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Cuenta de Recursos" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Crea tu propio juego para Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Daemonizar el metaservidor al iniciar" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Archivo PID a crear al daemonizar (implica -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Redirigir clientes a otro metaservidor" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Usar este nombre de servidor al crear nuevas partidas" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "nombre de servidor" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Usa este rango de puertos cuando estés creando nuevos juegos" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "de-para" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Depurar mensajes del log de sistema" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta Servidor para Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "protocolo del metaservidor:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Registro de Avahi fue un éxito.\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" "Los nombres del servicio de Avahi conflicto, el nombre del servicio esta " "cambiando a '%s'.\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Avahi error: %s\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Avahi error: %s, %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "No lo puede registrar el servidor Avahi" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Anulando el registro Avahi.\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Acerca del Servidor Pioneers" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Información del Servidor Pioneers" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Parar servidor" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Iniciar servidor" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Parar el servidor" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Comience el servidor" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Jugador %s de %s ha entrado\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Jugador %s de %s se ha ido\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Jugador %d es ahora %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "El puerto para el servidor el juego" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Hacer incribirse el servidor" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registrar este juego en el Meta-servidor" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Nombre de Anfitrión Reportado" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "El nombre público de este computador (necesario cuando se juega a través de " "un firewall)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Desordenar el orden de la vuelta" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Desordenar orden de turnos" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Muestra todos los jugadores y espectadores conectados al servidor" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Conectado" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "¿Está el jugador actualmente conectado?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Nombre" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Nombre del jugador" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Sitio" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Nombre del jugador anfitrión" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Número" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Número del jugador" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Función" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Jugador o espectador" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Lanzar cliente de Pioneers" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Lanzar el cliente de Pioneers" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Habilitar charla" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Habilitar mensajes de charla" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Añadir un adversario electrónico" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Añadir un adversario electrónico" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Mensaje del servidor" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Ajuste del juego" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Parámetros del servidor" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Juego actual" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Jugadores conectados" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Adversario electrónico" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Mensajes" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "El servidor del Juego Pionners" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "El juego ha terminado.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Organice un juego de Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Servidor de Pioneers" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Hospedar una partida de Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Titulo de juego para usar" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Archivo de juego para usar" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Puerto para escuchar" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Invalidar número de adversarios" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Invalidar número de puntos necesarios para ganar" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Invalidar regla del 7" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Invalidar tipo de terreno, 0=Omisión 1=aleatorio" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Añadir N adversarios electrónicos" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Hacer incribirse el servidor con el Meta-servidor" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registro en nombre de Meta-servidor (supone -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Usar este nombre de huesped cuando se registre" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Salir luego de que un jugador ha ganado" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Salir luego de N segundos sin jugadores" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Modo de torneo, adversarios electrónicos agregados luego de N minutos" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Puerto Admin para escucha" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "No comience el juego inmediatamente, espere un comando del puerto " "administrador" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Dar números de jugadores de acuerdo al orden en que entren al juego" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Opciones de Meta-servidor" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opciones para el Meta-servidor" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Opciones variadas" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Opciones variadas" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" "No se puede establecer un titulo al juego y un nombre al archivo al mismo " "tiempo\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "No se pueden cargar los parámetros de la partida\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "El Puerto de administración no es disponible.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "El puerto de administración no está asignado, no se puede desactivar el " "inicio de juego también\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registro con Meta-servidor en %s, puerto %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Registro del Meta-servidor\n" #: ../server/player.c:140 msgid "chat too long" msgstr "Charla demasiado larga" #: ../server/player.c:157 msgid "name too long" msgstr "Nombre demasiado largo" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignorar extension desconocida" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "El ultimo jugador salió, el contador del torne es restablecido." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "No hay jugadores humanos. Chao." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "La partida empieza, añadiendo jugadores no-humanos." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "El juego comienza en %s minutos." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "El juego comienza en %s minutos." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Adversario electrónico" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "El juego ha terminado." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Jugador de %s rechazado: fin del juego\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Nombre no ha cambiado: nuevo nombre está ya en uso" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Ha estado esperando demasiado tiempo sin jugadores... Adiós.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "El último jugador humano salió. Esperando el regreso de un jugador." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Reanudando el juego" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s se ha reconectado." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versión no coincide: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Este juego comenzará pronto" #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Preparando juego" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Buscando juegos en '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Directorio de juegos '%s' no encontrado\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonificación por descubrimiento de islas" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bonificación por islas adicionales" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Tried to assign resources to NULL player.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "El rol del dado ha sido determinado por el administrador." pioneers-14.1/po/fr.po0000644000175000017500000027667211760645356011632 00000000000000# Pioneers - Settlers of Catan for GNOME. # Copyright (C) 1999-2001 Dave Cole # Copyright (C) 2000-2002 Andy Heroff # This file is distributed under the same license as the pioneers package. # Arnaud MALON , 2003. # Jean-Charles GRANGER , 2006. # msgid "" msgstr "" "Project-Id-Version: Pioneers 14.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2012-05-22 14:36+0100\n" "Last-Translator: Jean-Charles GRANGER \n" "Language-Team: Français , LT-P , Yusei " ", Arnaud MALON , Jean-Charles " "GRANGER \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Country: FRANCE\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-Language: French\n" "Plural-Forms: nplurals=2; plural=(n>1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Hôte serveur" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Port du serveur" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Nom de l'AI (obligatoire)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Temps d'attente entre les tours (en millisecondes)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Empêcher l'AI de parler" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Type d'AI" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Activer les messages de débogage" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Voir les informations de version" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- AI pour Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Version de Pioneers :" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Un nom doit être indiqué.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Type d'AI : %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "La partie est déjà pleine. Je pars." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Plus de colonies en stock pour configuration" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Il n'y a plus de place pour fonder une colonie" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Il n'y a plus de routes en stock pour configuration" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Il n'y a plus de place pour construire une route" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Ok, allons-y !" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Je vais tous vous battre ! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Essayons encore..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Au moins je reçois quelque-chose..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "C'est toujours mieux que rien..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Waouh !" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Hé, je deviens riche ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "C'est vraiment une bonne année !" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Vous ne méritez pas tout cela !" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Et vous savez quoi faire avec toutes ces ressources ? ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "" "Hé, attendez un peu que je vous présente mon voleur et que vous perdiez " "tout, encore !" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hé hé !" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Allez le voleur, allez !" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Salopard !" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Vous ne pouviez pas mettre ce voleur ailleurs ?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Pourquoi toujours moi ??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Oh non !" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr !" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Qui a fait ce satané 7 ??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Pourquoi toujours moi ?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Dites au revoir à vos cartes... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*rire sadique*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me dit adieu à vos cartes... ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "C'est le prix de la richesse... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Hé ! Où est passé cette carte ?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Au voleur ! Au voleur !" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Vous ne perdez rien pour attendre..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh non :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Est-ce que cela devait vraiment arriver MAINTENANT ??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Arg" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hé hé, trop fort mon chevalier !" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "D'abord je vous vole, et ensuite j'engrange les points..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Regarde cette route !" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pfff, on ne gagne pas qu'avec des routes..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Echange rejeté.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Reçu une erreur du serveur : %s. Sortie\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Youpi !" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Félicitations" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Bonjour, bienvenue dans le Hall d'Accueil. Je suis un simple robot. Tapez la " "commande '/help' dans la zone de discussion pour voir la liste des commandes " "que je connais." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' affiche ce message à nouveau" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' explique le pourquoi de cet étrange plateau de jeu" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' indique quelle est la dernière version de Pioneers" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Ce plateau n'est pas une partie où l'on peut jouer : c'est un lieu où l'on " "peut rencontrer d'autres joueurs et décider quel plateau jouer. L'un des " "joueurs hébergera la partie choisie en démarrant un serveur et en " "l'enregistrant sur le metaserveur. Les autres joueurs pourront ensuite se " "déconnecter du Hall d'Accueil, et entrer dans la partie." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "La dernière version de Pioneers est" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "La partie démarre. Je ne vous suis plus d'aucune utilité. Au revoir." #: ../client/common/client.c:106 msgid "Waiting" msgstr "En attente" #: ../client/common/client.c:108 msgid "Idle" msgstr "Inactif" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Vous avez été expulsé de la partie.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Déconnecté" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Erreur (%s) : %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Avertissement : %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s n'a reçu aucune ressource %s (la banque est vide).\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s a reçu uniquement %s, car la banque n'en a pas plus.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s reçoit %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s prend %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s dépense %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s est remboursé de %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s jete %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s a gagné la partie avec %d points de victoire !\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Chargement" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versions incompatibles." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versions incompatibles. Vérifiez que le client et le serveur sont à jour.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Fondez deux colonies avec une voie de liaison pour chacune" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Fondez une colonie et sa voie de liaison" #: ../client/common/client.c:1416 msgid "road" msgstr "route" #: ../client/common/client.c:1418 msgid "bridge" msgstr "pont" #: ../client/common/client.c:1420 msgid "ship" msgstr "navire" #: ../client/common/client.c:1427 msgid " or" msgstr " ou" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Nous attendons notre tour." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Choisissez la construction à voler." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Choisissez le navire à voler." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Déplacez le voleur." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Finissez la construction des routes." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Construit un segment de route." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Construit deux segments de route" #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "C'est votre tour." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Désolé, %s indisponible.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "La partie est finie." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Vous avez acheté la carte de développement %s.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Vous avez acheté une carte de développement %s.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s achète une carte de développement.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s joue la carte de développement %s.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s joue la carte de développement %s.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Vous êtes à court de routes.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Vous recevez %s de %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s vous prend %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s prend %s à %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Spectateur %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "spectateur %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Joueur %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "joueur %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Nouveau spectateur : %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s s'appelle maintenant %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Le joueur %d s'appelle maintenant %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s est parti.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Il n'y a pas de chevalier le plus puissant.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s détient le chevalier le plus puissant.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Il n'y a pas de route la plus longue.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s a la route la plus longue.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "En attende de %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s vole une ressource à %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Vous volez %s à %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s vous vole %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s ne donne rien à %s !?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s donne %s %s gratuitement.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s donne %s %s en échange de %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s échange %s contre %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s construit une route.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s construire un navire.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s fonde une colonie.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s érige une ville.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s construit un rempart.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add est appellé avec BUILD_NONE pour le joueur %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s construit un pont.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s retire une route.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s retire un navire.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s retire une colonie.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s retire une ville.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s supprime un rempart.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove est appellé avec BUILD_NONE pour le joueur %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s retire un pont.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s a annulé un mouvement de navire.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s déplace un navire.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s a reçu %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "le serveur demande la perte du point incorrect.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s perd %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "le serveur demande de déplacer le point incorrect.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s perd %s à %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "argile" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Argile" #: ../client/common/resource.c:36 msgid "grain" msgstr "blé" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Blé" #: ../client/common/resource.c:37 msgid "ore" msgstr "pierre" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Pierre" #: ../client/common/resource.c:38 msgid "wool" msgstr "laine" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Laine" #: ../client/common/resource.c:39 msgid "lumber" msgstr "bois" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Bois" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "pas de ressources (bug)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Pas de ressources (bug)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "n'importe quelle ressource (bug)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "N'importe quelle ressource (bug)" #: ../client/common/resource.c:42 msgid "gold" msgstr "or" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Or" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "une carte d'argile" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d cartes d'argile" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "une carte de blé" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d cartes de blés" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "une carte de pierre" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d cartes de pierre" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "une carte de laine" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d cartes de laine" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "une carte de bois" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d cartes de bois" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "rien" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s et %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s a annulé le déplacement du voleur.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s déplace le voleur.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s a annulé le déplacement du pirate.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s déplace le pirate.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s doit déplacer le voleur." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Placement pour %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Double placement pour %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s a fait %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Début du tour %d pour %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Sélectionner une partie découverte automatiquement" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) sur %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Dialogue" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Essai de bip.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s vous bipe.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Vous bipez %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Vous ne pouved pas biper %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " a dit : " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta-serveur à l'adresse %s, port %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Terminé.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Le meta-serveur nous a expulsé\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Reception du nom des parties du meta-serveur.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Une nouvelle partie commence sur le serveur %s, port %s.\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Message inconnu du meta-serveur : %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Trop de redirections du meta-serveur\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Mauvaise redirection ligne %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "" "Le meta-serveur est trop vieux pour créer des parties (version %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Relancer les dés les 2 premiers tours" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Relancer tous les 7" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Par défaut" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Aléatoire" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Redirection sur le meta-serveur %s, port %s.\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Réception d'une liste de serveurs Pioneers depuis le meta-serveur.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Note :\n" "\tLe meta-server n'envoit pas d'information sur les parties.\n" "\tA vous de les définir vous-même." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Type d'AI" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "Nombre de joueurs AI" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Demander une nouvelle partie\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Erreur lors du démarrage de %s : %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Créer une partie publique" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Rejoindre une partie publique" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nouvelle partie distante" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Rafraîchir la liste des parties" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Créer une nouvelle partie publique sur le meta-serveur" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Ne pas rejoindre une partie publique" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Rejoindre la partie sélectionnée" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Choisir une partie à rejoindre" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Nom de la carte" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Nom de la partie" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Cour." #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Nombre de joueurs" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Nombre maximum de joueurs" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Carte" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Carte aléatoire" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Pts de Vic." #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Points requis pour gagner" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Règle des sept" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Règle des sept" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Adresse" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Adresse de la partie" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Port de la partie" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Version" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Version du serveur" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Commencer une nouvelle partie" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Nom du joueur" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Entrez votre nom" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Spectateur" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Cochez si vous souhaitez être spectateur" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Rejoindre" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Rejoindre une partie découverte automatiquement" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta-serveur" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Rejoindre une partie publique" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Rejoindre une partie publique" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Créer une partie" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Créer une partie" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Rejoindre une partie privée" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Rejoindre une partie privée" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Hôte serveur" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Nom du serveur hébergeant la partie" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Port du serveur" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Port du serveur hébergeant la partie" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Parties récentes" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Cartes de développement" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Jouer la carte" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Jeter les ressources" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Vous devez jeter %d ressource" msgstr[1] "Vous devez jeter %d ressources" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Total des cartes jetées" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "En attente des joueurs jetant des cartes" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Partie terminée" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s a gagné la partie avec %d points de victoire !" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Gloire à %s, seigneur du monde connu !" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Choisissez des ressources" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Vous devez choisir %d ressource" msgstr[1] "Vous devez choisir %d ressources" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Total des ressources" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "En attente des joueurs qui choisissent" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Partie" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nouvelle partie" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Commencer une nouvelle partie" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "Abandonner _la partie" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Quitter cette partie" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Administrateur" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrer le serveur Pioneers" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Nom du joueur" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Changer de pseudonyme" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "Lég_ende" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Légende des terrains et des coûts de construction" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "P_aramètres de la partie" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Paramètres de la partie actuelle" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Histogramme des lancers de dés" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogramme des lancers de dés" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Quitter" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Quitter le programme" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Actions" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Lancer les dés" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Lancer les dés" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Échange" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Annuler" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Terminer" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Route" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Construire une route" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Navire" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Construire un navire" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Déplacer un navire" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Déplacer un navire" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Pont" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Construire un pont" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Colonie" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Fonder une colonie" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Ville" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Eriger une cité" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Carte de Dév." #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Acheter une carte de développement" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Rempart" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Construire un rempart" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "Préférence_s" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Préfére_nces" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Configurer l'application" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_Voir" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Réinitialiser" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "Voir la carte complète" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Centrer" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "Centrer la carte" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "A_ide" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "À _propos de Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informations à propos de Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Montrer le manuel" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Plein écran" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Mettre la fenêtre en mode plein écran" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "Barre d'ou_tils" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Afficher ou masquer la barre d'outils" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Pts requis pour gagner : %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Messages" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Carte" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Fin des échanges" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Offre" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Refuser l'offre" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Légende" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Bienvenue à Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Préférences de Pioneers" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Thème :" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Choisissez un thème" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Afficher la légende" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Afficher la légende en dessous de la carte" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Afficher les messages en couleur" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Afficher les nouveaux messages en couleur" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Afficher les dialogues en couleur" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Afficher les nouveaux messages des joueurs en couleurs" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Afficher les joueurs en couleur" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Utiliser des couleurs pour afficher les joueurs" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Barre d'outils avec ses raccorucis" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Afficher les raccourcis clavier dans la barre d'outils" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Mode silencieux" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "En mode silencieux, aucun son n'est émis" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Annoncer les nouveaux joueurs" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "" "Jouer un son quand un nouveau joueur ou un spectateur entre dans la partie" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Voir les notifications" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" "Afficher les notifications quand c'est votre tour ou quand un nouvel échange " "est proposé" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Utiliser un plateau de jeu 16:9" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Utiliser pour la fenêtre un plateau de jeu compatible 16:9" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "À propos de Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Bienvenue dans Pioneers !" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Histogramme des lancers de dés" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Déplacement du navire annulé" #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Choisissez un nouvel emplacement pour le navire" #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "C'est votre tour." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Colline" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Champs" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Montagne" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pré" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Forêt" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Désert" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Mer" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Production des terrains" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Coûts de construction" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Rempart" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Carte de développement" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopole" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Choisissez la ressource à monopoliser" #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Renommer le joueur" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Nom du joueur :" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Figure :" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variante :" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Se connecter en tant que spectateur" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Hôte du meta-serveur" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Choisir une partie à rejoindre." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Connexion" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Jouer à une partie de Pionneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Jouer à une partie de Pioneers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Colonies" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Villes" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Remparts" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Le chevalier le plus puissant" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "La route la plus longue" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Chapelle" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Chapelles" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Université" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Universités" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Palais du Gouverneur" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Palais du Gouverneur" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Bibliothèque" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Bibliothèques" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Marché" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Marchés" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Chevalier" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Chevaliers" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Carte de ressource" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Cartes de ressource" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Cartes de développement" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Les joueurs" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Année faste" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Prenez une ressource à la banque" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Prenez deux ressources à la banque" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "La banque est vide" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s a %s et cherche %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "Nouvelle offre de %s." #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Offre de %s." #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Je veux" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Accepter" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Effacer" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Refuser l'offre" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Joueur" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Offres" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d : 1 %s pour %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Offre refusée" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Ressources" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Total" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Ressources en main" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "plus>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Augmenter le montant sélectionné" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Montant sélectionné" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Montant total sélectionné" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "La banque ne peut pas être vide" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Oui" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Non" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Inconnu" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Pas de parties en cours..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Paramètres généraux" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Nombre de joueurs :" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Pts de victoire requis :" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Carte aléatoire :" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Autoriser les échanges entre joueurs :" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Autoriser les échanges uniquement avant de construire ou d'acheter :" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Vérifie la victoire uniquement à la fin du tour :" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Nombre de chaque ressource :" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Règle des sept :" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Utiliser le pirate pour bloquer les bateaux :" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonus pour la découverte d'une île :" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Quotas de construction" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Routes :" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Colonies :" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Villes :" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Remparts :" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Navires :" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Ponts :" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Pioche des cartes de développement" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Cartes Construction de routes :" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Cartes Monopole :" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Cartes Année faste :" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Cartes Chapelle :" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Cartes Université :" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Cartes Palais du Gouverneur :" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Cartes Bibliothèque :" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Cartes Marché :" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Cartes Chevalier :" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Paramètres de la partie en cours" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "demande %s gratuitement" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "donne %s gratuitement" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "donne %s contre %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Je voudrais %s, et donner %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Offre reçue de %s." #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Appel d'offre" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Accepter l'offre" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Fin des échanges" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Construction de route" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Année faste" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Construire deux nouvelles routes" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" "Sélectionnez un type de ressource et prenez toutes les cartes de ce type " "possédées par les autres joueurs" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" "Prenez deux cartes de ressources de n'importe quel type à la banque (les " "cartes peuvent être les mêmes ou de type différent)" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "Un point de victoire" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Déplacez le voleur à un autre endroit et prenez une carte de ressource à un " "joueur adjacent à cet espace" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "Règle obsolète : '%s'\n" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" "Cette partie utilise la nouvelle règle '%s' alors qu'elle n'est pas encore " "supportée. Vous devriez faire une mise à jour.\n" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Cette partie ne peut pas être gagnée." #: ../common/game.c:891 msgid "There is no land." msgstr "Il n'y a pas de terrain." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Il est possible que ce jeu ne puissent pas être gagné." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Cette partie ne peut pas être gagnée uniquement en construisant des colonies " "et des villes." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Points de victoire requis : %d\n" "Points obtenus en tout construisant : %d\n" "Points dans les cartes de développement : %d\n" "Route la plus longue / chevalier le plus puissant : %d+%d\n" "Bonus maximum pour la découverte d'iles : %d\n" "Total : %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers est basé sur l'excellent\n" "jeu de plateau 'Les colons de Catane'.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Version :" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Page d'accueil :" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Auteurs :" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "LT-P\n" "Arnaud MALON\n" "Yusei\n" "Jean-Charles GRANGER\n" "\n" "Launchpad Contributions:\n" " Clément Lorteau https://launchpad.net/~northern-lights" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers a été traduit en français par :\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Analyse des points de victoire" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Sur 7, il faut déplacer le voleur ou le pirate" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "Durant les 2 premier tours, on relance les 7" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Tous les 7 sont relancés" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Carte aléatoire" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Carte aléatoire" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Jouer avec le pirate" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Utiliser le pirate pour bloquer les bateaux" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Échanges stricts" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Autoriser les échanges uniquement avant de construire ou d'acheter" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Échanges commerciaux" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Autoriser les échanges entre joueurs" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Victoire en fin de tour" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Vérifie la victoire uniquement à la fin du tour" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Bonus pour la découverte d'une île" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" "Liste des points de bonus (séparés par des virgules) pour la découverte des " "îles" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "Vérifiez et corrigez les bonus pour la découverte d'une île" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Nombre de joueurs" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Nombre de joueurs" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Pts de victoire requis" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Pts requis pour gagner : %i" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Est-il possible de gagner ce jeu ?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "A" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "Bl" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "P" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "L" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Bo" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Choisir un meta-serveur" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Sélectionnez une partie" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERREUR* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Dialogue : " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Ressources : " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Construction : " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dé : " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Vole : " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Echanges : " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Carte de développement : " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Armée : " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Route : " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BIP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Joueur 1 : " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Joueur 2 : " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Joueur 3 : " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Joueur 4 : " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Joueur 5 : " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Joueur 6 : " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Joueur 7 : " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Joueur 8 : " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Spectateur :" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** TYPE DE MESSAGE INCONNU ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Erreur lors de la vérification de la connexion : %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Erreur lors de la connexion à '%s' : %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Erreur lors de l'écriture du socket : %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Erreur lors de l'écriture du socket : %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Débordement du tampon de lecture - déconnexion\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Erreur lors de la lecture du socket : %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Erreur lors de la création du socket : %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Erreur lors de la définition du socket 'close-on-exec' : %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Erreur lors de la définition du socket 'non-blocking' : %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Erreur lors de la connexion à %s : %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Impossible de trouver le serveur %s port %s : %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Impossible de trouver le serveur %s port %s : serveur introuvable\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Erreur lors de la création de la structure addrinfo : %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Erreur lors de la création du socket d'écoute : %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Erreur lors de l'écoute sur le socket : %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "L'écoute n'est pas encore supportée sur cette plate-forme." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "inconnu" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Erreur en récupérant le nom du pair : %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Erreur durant la résolution de l'adresse : %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name n'est pas encore supporté sur cette plate-forme." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Erreur en acceptant la connexion : %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Connexion à %s, port %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" "Débordement de la pile d'état. Copie de la pile sur la sortie d'erreur.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Colline" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "C_hamps" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Montagne" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pré" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "F_orêt" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Désert" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "Me_r" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Or" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "Aucu_n" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Argile (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Blé (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Pierre (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Laine (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "B_ois (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "N'importe _quoi (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "E" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NE" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NO" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "O" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SO" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SE" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Insérer une ligne" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Supprimer une ligne" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Insérer une colonne" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Supprimer une colonne" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Mélanger" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Paramètres de la partie" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Règles" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Ressources" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Constructions" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Éditeur de partie" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "N'a pas réussi à charger '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "N'a pas réussi à enregistrer '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "Parties" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "Non filtré" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Ouvrir une partie" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Enregistrer sous..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Changer le nom" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Nouveau titre :" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "_À propos de l'éditeur de parties" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Fichier" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Nouveau" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Créer une nouvelle partie" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Ouvrir..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Ouvrir une partie existante" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "Enregi_strer" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Enregistrer une partie" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Enregistrer sous..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Enregistrer sous" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Changer le titre" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Changer le nom de la partie" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Vérifier les points de vi_ctoire requis" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Vérifier si le jeu peut être gagné" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Quitter" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_À propos de l'éditeur de partie" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informations à propos de l'éditeur de partie" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Ouvrir le fichier" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "nom de fichier" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editeur de parties pour Pioneers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Échec de la construction des menus : %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Préférences" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "Commentaires" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Nombre de ressources" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Créez votre propre partie de Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Démoniser le meta-serveur au démarrage" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Fichier PID à créer lors de la démonisation (implique -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Rediriger les clients vers un autre meta-serveur" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Utiliser ce nom d'hôte lors de la création de nouvelles parties" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "nom d'hôte" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Utiliser cette plage de ports lors de la création de nouvelles parties" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "de-à" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Messages de débogage système (syslog)" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta-serveur pour Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "protocole du meta-serveur :" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Enregistrement auprès du serveur Avahi réussi.\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" "Collision de nom pour le serveur Avahi, renommage du service en '%s'.\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Erreur Avahi : %s\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Erreur Avahi : %s, %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "Impossible de s'enregistrer sur le serveur Avahi" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Désenregistrement auprès du serveur Avahi.\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_À propos du serveur de Pioneers" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Information sur le serveur de Pioneers" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Arrêter le serveur" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Démarrer le serveur" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Arrêter le serveur" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Démarrer le serveur" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Arrivé du joueur %s depuis %s\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Départ du joueur %s depuis %s\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Le joueur %d s'appelle maintenant %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Le port du serveur" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Annoncer le serveur" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Annoncer cette partie sur le meta-serveur" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Nom d'hôte" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Le nom de cet ordinateur (nécessaire pour jouer depuis derrière un pare-feu)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Tours de jeu aléatoires" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Rendre les tours de jeu aléatoires" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Montrer tous les joueurs et spectateurs connectés au serveur" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Connecté" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Est-ce que le joueur est bien connecté ?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Nom" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Nom du joueur" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Adresse" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Adresse du joueur" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Nombre" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Nombre de joueurs" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Rôle" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Joueur ou spectateur" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Lancer le client Pioneers" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Lancer le client Pioneers" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Discussion autorisée" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Autoriser les messages" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Ajouter une IA" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Ajouter une IA" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Messaage du serveur" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Paramètres de la partie" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Paramètres du serveur" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Partie en cours" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Joueurs connectés" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "IA" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Messages" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Le serveur Pioneers" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "La partie est terminée.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Héberger une partie de Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Serveur Pioneers" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Héberger une partie de Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Nom de la partie" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Fichier de partie à utiliser" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Port à écouter" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Outrepasser le nombre de joueurs" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Outrepasser le nombre de points requis pour gagner" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Outrepasser la gestion de la règle des 7" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Outrepasser le type de terrain : 0 = défaut, 1 = aléatoire" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Ajouter N joueurs IA" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Annoncer cette partie sur le meta-serveur" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Nom du meta-serveur d'enregistrement (implique -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Utiliser ce nom d'hôte lors de l'enregistrement" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Quitter après qu'un joueur ait gagné" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Quitter après N secondes sans joueurs" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Mode tournoi, joueurs AI ajoutés après N minutes" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Port à écouter pour l'administration" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "Ne pas démarrer la partie immédiatement, attendre une commande sur le port " "d'administration" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "" "Attribuer aux joueurs un numéro selon leur ordre d'arrivée dans la partie" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Options du meta-serveur" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Options du meta-serveur" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Options Diverses" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Options diverses" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" "Impossible de définir le titre du jeu et le nom de fichier en même temps\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Impossible de charger les paramètres de la partie\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "Port d'administration non disponible.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "Le port d'Admin n'est pas défini, impossible de désactiver le démarrage du " "jeu\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Annoncé sur le meta-serveur : %s, port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Se désinscrire du meta-serveur\n" #: ../server/player.c:140 msgid "chat too long" msgstr "dialogue trop long" #: ../server/player.c:157 msgid "name too long" msgstr "nom trop grand" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignorer les extensions inconnues" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "Le dernier joueur est parti, le timer du tournoi a été réinitialisé." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "Aucun joueur humain présent. Au revoir." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "La partie démarre, ajout des IA." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "La partie démarre dans %s minutes." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "La partie démarre dans %s minute." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "IA" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "La partie est terminée." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Le joueur depuis %s a été rejeté : la partie est terminée\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Le nom n'a pas été changé : le nouveau nom est déjà pris" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "" "Le serveur fonctionne depuis trop longtemps sans qu'il n'y ait de joueurs... " "Au revoir.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "Le dernier joueur humain est parti. Attendons le retour d'un joueur." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Recommencer la partie." #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s s'est reconnecté." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versions incompatibles : %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "La partie va bientôt démarrer." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Préparation de la partie" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Recherche de parties sur '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Répertoire de parties '%s' introuvable\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonus de découverte d'île" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bonus dîle supplémentaire" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "tentative d'attribuer des ressources au joueur NULL.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "Le jet du dé a été défini par l'administrateur." #~ msgid "Viewer %d" #~ msgstr "Spectateur %d" #~ msgid "viewer %d" #~ msgstr "spectateur %d" #~ msgid "I want" #~ msgstr "Je voudrais" #~ msgid "Give them" #~ msgstr "Accepter" #~ msgid "Viewer: " #~ msgstr "Spectateur : " #~ msgid "Number of AI Players" #~ msgstr "Nombre d'IA" #~ msgid "The number of AI players" #~ msgstr "Nombre d'IA" #~ msgid "Recent Games" #~ msgstr "Serveurs récents" #~ msgid "You may choose 1 resource" #~ msgstr "Vous pouvez choisir 1 ressource" #~ msgid "_Player name" #~ msgstr "_Pseudonyme du joueur" #~ msgid "The Pioneers Game" #~ msgstr "Pioneers" #~ msgid "Select the ship to steal from" #~ msgstr "Choisissez le navire à voler." #~ msgid "Select the building to steal from" #~ msgstr "Choisissez la construction à voler." #~ msgid "Development Card" #~ msgstr "Carte de développement" #~ msgid "Player Name:" #~ msgstr "Nom du joueur :" #~ msgid "I Want" #~ msgstr "Je voudrais" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Autoriser les échanges entre joueurs ?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Autoriser les échanges avant de construire ?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Vérifier la victoire uniquement à la fin du tour ?" #~ msgid "Sevens Rule:" #~ msgstr "Règle des sept :" #~ msgid "Use Pirate:" #~ msgstr "Jouer avec le pirate :" #~ msgid "Number of Players" #~ msgstr "Nombre de joueurs" #~ msgid "Development Cards" #~ msgstr "Cartes de développement" #~ msgid "Save as..." #~ msgstr "Enregistrer sous..." #~ msgid "Pioneers Game Editor" #~ msgstr "Éditeur de partie" #~ msgid "_Change title" #~ msgstr "_Changer le nom" #~ msgid "Random Turn Order" #~ msgstr "Tour de jeu aléatoire" #~ msgid "_Legend" #~ msgstr "_Légende" #~ msgid "bad scaling mode '%s'" #~ msgstr "mauvais mode scalaire '%s'" #~ msgid "Missing game directory\n" #~ msgstr "Répertoire du jeu absent\n" pioneers-14.1/po/gl.po0000644000175000017500000027126411760645356011615 00000000000000# Galician translation for Pioneers # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the Pioneers package. # Indalecio Freiría Santos , 2010. # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.12.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2010-04-05 08:14+0000\n" "Last-Translator: Indalecio Freiría Santos \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-04-06 06:08+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Servidor" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Porto do Servidor" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Nome do computador (requerido)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Tempo de espera entre quendas (en milisegundos)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Parar de falar co xogador do computador" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Tipo de xogador do computador" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Activar as mensaxes depuradas" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Amosar información da versión" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "Xogador do computador para Pioneiros" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Versión de Pioneiros:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Debes de prover un nome.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Tipo de xogador do computador:%s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "O xogo xa está cheo. Voume." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Non hai asentamentos nas reservas para usar na montaxe" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Non hai sitio para instalar un asentamento" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Non hai camiños nas reservas para usar na montaxe" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Non hai sitio para instalar un camiño" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "De acordo, vamos!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Agora vencereinos a todos" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Intentalo outra vez..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Polo menos obtiven algo" #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Un é mellor que nada..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Ei, estoume enriquecendo ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Este é realmente un bo ano!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Realmente non mereces tanto!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Non sabes que facer con tantos recursos ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Ei, espera ao meu ladrón e perde todo de novo!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Jeje!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Vai ladrón, vai!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Cabrón!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Non podes mover ese ladrón a outra parte?" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Por que sempre eu?" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Non!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Quen demo tirou ese 7?" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Por que sempre eu?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Dille adeus ás túas cartas... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*Sorriso maligno*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me adeus ás túas cartas ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Ese é o prezo de ser rico... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Ei!, a onde foi esa carta?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Ladrón, ladrón!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Espera polo meu desquite..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Non :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Tiña que pasar agora?" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Je je, mandan os meus soldados" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Primeiro róubasnos, e logo cóllesnos os puntos..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Mira ese camiño!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pff, non gañarás só con camiños..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Rexeitando o negocio.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Erro recibido do servidor: %s. Saíndo\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Viva!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Os meus parabéns" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Ola, benvido ao salón. Son un simple robot. Escriba '/help' na sala de " "conversa para ver a lista de ordes que coñezo." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' amosa esta mensaxe de novo" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' explica o propósito desta estraña presentación do taboleiro" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' dá cal é a ultima versión que saíu" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Este taboleiro non pretende ser só un xogo que poida ser xogado. En lugar " "diso, os xogadores pódense atopar aquí e decidir que taboleiro queren usar. " "Entón, un dos xogadores será o anfitrión do xogo proposto iniciando un " "servidor e rexistrándoo no Meta-servidor. Os outros xogadores poden " "seguidamente saír do salón e entrar ao xogo." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "A versión de Pioneiros máis recente é" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "O xogo está comezando. Non me precisan máis. Adeus." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Agardando" #: ../client/common/client.c:108 msgid "Idle" msgstr "Inactivo" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Fomos expulsados do xogo.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Sen conexión" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Erro(%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Noticia: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s non recibe %s, porque o banco está baleiro.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s só recibe %s, porque o banco non ten máis.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s recibe %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s toma a %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s gasta %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "Reembolsase %2s a %1s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s descartou %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s gañou con %d puntos!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Cargando" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versión incompatíbel." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versión é incompatíbel, Asegúrese de que o cliente e o servidor están " "actualizados.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Constrúa dous asentamentos, cada un cunha conexión" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Constrúa un asentamento cunha conexión" #: ../client/common/client.c:1416 msgid "road" msgstr "camiño" #: ../client/common/client.c:1418 msgid "bridge" msgstr "ponte" #: ../client/common/client.c:1420 msgid "ship" msgstr "barco" #: ../client/common/client.c:1427 msgid " or" msgstr " ou" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Esperando quenda." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Elixe o edificio que queres roubar." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Elixe o barco queres roubar" #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Coloca o ladrón." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Remata a acción de construción do camiño" #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Construír un tramo do camiño." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Construír dous tramos do camiño" #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Tócache." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Sintoo, %s dispoñíbel.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Rematou o xogo." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Mercaches a carta de desenvolvemento «%s».\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Mercaches unha carta de desenvolvemento «%s».\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s mercou unha carta de desenvolvemento.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s usou a carta de desenvolvemento «%s».\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s usou unha carta de desenvolvemento «%s».\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Gastaches todos os tramos para o camiño.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Recibes %s de %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s quítache %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s toma %s de %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Xogador %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "Xogador %d" #: ../client/common/player.c:214 #, fuzzy, c-format msgid "New spectator: %s.\n" msgstr "Novo visualizador: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s é agora %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "O xogador %d chámase agora %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s foise.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Non hai un exército máis grande.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s ten o exército máis grande.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Non hai un camiño máis longo.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s ten o camiño máis longo.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Esperando a %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s róuballe unha carta de recurso a %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Roubas %s a %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s róubache %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "¿¡%s non da nada a %s!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s da %s a %s gratis.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%1s dalle %3s a %2s a cambio de %4s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s cambia %s por %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s constrúe un camiño.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s constrúe un barco.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s crea un pobo.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s crea unha cidade.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s amurallou unha cidade.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "Chamouse player_build_add con BUILD_NONE para o usuario %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s constrúe unha ponte.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s quita un camiño.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s quita un barco.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s quita un pobo.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s quita unha cidade.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s quitou a muralla a unha cidade.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "Chamouse player_build_remove con BUILD_NONE para o usuario %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s quita unha ponte.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s cancela un movemento de barco.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s move un barco.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s recibe %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "O servidor solicita perder punto invalido.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s gasta %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "O servidor solicita mover punto inválido.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s perde %s a %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "ladrillo" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Ladrillo" #: ../client/common/resource.c:36 msgid "grain" msgstr "cereais" #: ../client/common/resource.c:36 msgid "Grain" msgstr "cereais" #: ../client/common/resource.c:37 msgid "ore" msgstr "minerais" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Minerais" #: ../client/common/resource.c:38 msgid "wool" msgstr "la" #: ../client/common/resource.c:38 msgid "Wool" msgstr "La" #: ../client/common/resource.c:39 msgid "lumber" msgstr "madeira" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Madeira" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "ningún recurso (erro)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Ningún recurso (erro)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "calquera recurso (erro)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Calquera recurso (erro)" #: ../client/common/resource.c:42 msgid "gold" msgstr "ouro" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Ouro" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "unha carta de ladrillo" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d cartas de ladrillo" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "unha carta de cereais" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d cartas de cereais" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "unha carta de minerais" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d cartas de minerais" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "unha carta de la" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d cartas de la" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "unha carta de madeira" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d cartas de madeira" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "ningún" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s e %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s desfixo o movemento dos ladróns.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s move o ladrón.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s desfixo o movemento pirata.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s move o pirata.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s debe mover o ladrón." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Instalación para %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Dobre instalación para %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s tirou %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Comeza a quenda %d para %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Falar" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Proba de pitado.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s pítache.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Pitaches a %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Non puideches pitar a %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " di: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Metaservidor en %s, porto %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Rematado.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Botounos o Meta-servidor\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Recibindo nomes do xogo dende o metaservidor.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Novo servidor solicitado en %s porto %s.\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Mensaxe descoñecida do metaservidor: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Demasiada redireccións do metaservidor\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Mala liña de redireccionamento: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Metaservidor moi vello para crear servidores(versión %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Volver a tirar durante as dúas primeiras quendas" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Tirar de novo todos os setes" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Predefinido" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Aleatorio" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Desviado ao metaservidor en %s, porto %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Recibindo unha lista de servidores Pioneiros do meta-servidor.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Nota:\n" "\tO metaservidor non envía información acerca dos xogos.\n" "\tPor favor, axuste os valores apropiados vostede mesmo." #. Label #: ../client/gtk/connect.c:726 #, fuzzy msgid "Number of computer players" msgstr "Tipo de xogador do computador" #. Tooltip #: ../client/gtk/connect.c:746 #, fuzzy msgid "The number of computer players" msgstr "Número de xogadores" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Pidindo un novo servidor de xogo\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Erro ao empezar %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 #, fuzzy msgid "Create a Public Game" msgstr "Crear un xogo público" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Unir a un xogo público" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Novo xogo remoto" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Renovar a lista de xogos" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Crear un xogo público novo no metaservidor" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Non unirse a un xogo público" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Unirse ao xogo seleccionado" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Seleccionar un xogo para unirse" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Nome do mapa" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Nome do xogo" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Corr." #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Número de xogadores na partida" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Máximo" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Máximo de xogadores para a partida" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terreo" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Terreo predeterminado aleatorio" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Puntos de Vic." #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Puntos precisados para gañar" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Regra dos setes" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Regra dos setes" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Servidor" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Servidor do xogo" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Porto" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "Porto do xogo" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Versión" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Versión do servidor" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Comezar un xogo novo" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Nome de xogador" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Insire o teu nome de xogador" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "" #: ../client/gtk/connect.c:1280 #, fuzzy msgid "Check if you want to be a spectator" msgstr "Queres ser un espectador?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Metaservidor" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Unirse a un xogo público" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Unir a un xogo público" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Crear un xogo" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Crear un xogo" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Unirse a un xogo privado" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Unirse a un xogo privado" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Servidor" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Nome do servidor do xogo" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Porto do Servidor" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Porto do servidor do xogo" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Xogos recentes" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Cartas de desenvolvemento" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Carta de xogo" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Descarta recursos" #: ../client/gtk/discard.c:101 #, fuzzy, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Tes que descartar %d recursos" msgstr[1] "Tes que descartar %d recursos" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Descartes totais" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Esperando a que os xogadores descarten" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Fin da partida" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s gañou con %d puntos!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Louvanzas a %s, Señor do mundo coñecido!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Elixe recursos" #: ../client/gtk/gold.c:96 #, fuzzy, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Podes elixir %d recursos" msgstr[1] "Podes elixir %d recursos" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Recursos totais" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Esperando a que os xogadores elixan" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Xogo" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "Partida _nova" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Comezar un xogo novo" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Abandonar a partida" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Abandonar esta partida" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Administrar" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrar o servidor de Pioneiros" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Nome do _xogador" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Cambiar o teu nome de xogador" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "L_enda" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Lenda do terreo e costos de construción" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Axustes do xogo" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Axustes do xogo actual" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Histograma dos dados" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histograma das tiradas" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Saír" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Saír do aplicativo" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Accións" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Tirar os dados" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Tirar os dados" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Comercio" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Desfacer" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Rematar" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Camiño" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Construir un camiño" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Barco" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Construir un barco" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Mover o barco" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Mover un barco" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Ponte" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Construír unha ponte" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Asentamento" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Construír un asentamento" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Cidade" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Construir unha cidade" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Desenvolver" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Mercar unha carta de desenvolvemento" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Muralla da cidade" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Construír unha muralla para a cidade" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Axustes" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Prefere_ncias" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Configurar o aplicativo" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 #, fuzzy msgid "_View" msgstr "Visor" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Axuda" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Acerca de Pioneiros" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Información acerca de Pioneiros" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Amosar o manual" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Barra de ferramentas" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Amosar ou ocultar a barra de ferramentas" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Puntos necesarios para gañar: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Mensaxes" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Mapa" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Rematar negocio" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Comiñas" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Rexeitar negocio domestico" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Lenda" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Benvido ao Pioneiros" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Preferencias de Pioneiros" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Elixir un dos temas" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Amosar a lenda" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Amosar a lenda como unha páxina xunto ao mapa?" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Usar cores nas mensaxes?" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Usar cores nas mensaxes novas?" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "conversar coa cor do xogador?" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Amosar as novas mensaxes de conversa na cor do xogador" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Resume con cor" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Usar cores no resume do xogador" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Barra de ferramentas con acceso directo" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Amosar os accesos directos de teclado na barra de ferramentas" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Modo silencioso" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "En modo de silencio, non se reproducen sons." #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Anunciar novos xogadores" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 #, fuzzy msgid "Make a sound when a new player or spectator enters the game" msgstr "Facer un son cando un xogador novo ou visor entre ao xogo" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 #, fuzzy msgid "Show notifications" msgstr "Amosar información da versión" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Usa un tema de 16:9" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Usar unha disposición para a xanela de 16:9" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Acerca de Pioneiros" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Benvenido ao Pioneiros!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneiros" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Histograma dos dados" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Movemento de barco cancelado" #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Seleccione unha localización nova para o barco" #. Notification #: ../client/gtk/interface.c:892 #, fuzzy msgid "It is your turn to setup." msgstr "Tócache." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Montículo" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Campo" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Montaña" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pasto" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Bosque" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Deserto" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Mar" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Produción de terreo" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Custes de construción" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Muralla da cidade" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Carta de desenvolvemento" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopolio" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Elixe o recurso que queres monopolizar." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Cambiar o teu nome de xogador" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Nome de xogador:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Cara:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variante:" #: ../client/gtk/offline.c:62 #, fuzzy msgid "Connect as a spectator" msgstr "Conectar como visor" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Meta-servidor do anfitrion" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Seleccionar un xogo para unirse." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Conectando" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Xogar unha partida de Pioneiros" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Xogar unha partida de Pioneiros" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Asentamentos" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Cidades" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Muros da Cidade" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Maior exército" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Camiño máis longo" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Capela" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Capelas" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Universidade pioneira" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Universidades Pioneiras" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Palacio do gobernador" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Palacio do Gobernador" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Biblioteca" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Bibliotecas" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Mercado" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Mercados" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldado" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldados" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Carta de recurso" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Cartas de recurso" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Cartas de desenvolvemento" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Resumo de xogadores" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Ano de abundancia" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Elixa un recurso do banco" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Elixa dous recursos do banco" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "O banco está vacio" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s ten %s e quere %s" #. Notification #: ../client/gtk/quote.c:217 #, fuzzy, c-format msgid "New offer from %s." msgstr "Roubas %s a %s.\n" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Quero..." #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Dalles..." #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Eliminar" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Rexeitar negocio domestico" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Xogador" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Comiñas" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s por %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Negocio rexeitado" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Recursos" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Total" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Cartas de recurso en man" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "máis>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Incrementar a cantidade seleccionada" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Cantidade seleccionada" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Cantidade seleccionada total" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "O banco non se pode baleirar" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Si" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Non" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Descoñecido" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "No hai xogo en proceso" #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Configuracións xerais" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Número de xogadores:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Punto de victoria:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Terreo ao chou:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Permitir comerciar entre xogadores:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Permitir comerciar só antes de construír ou mercar:" #: ../client/gtk/settingscreen.c:171 #, fuzzy msgid "Check victory only at end of turn:" msgstr "Revisa a vitoria unicamente ao rematar a quenda" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Cantidade de cada recurso:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Regra dos setes:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Use ao pirata para bloquear barcos:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonificacións por descubrimento de illas:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Custos de construción" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Camiños:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Asentamentos:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Cidades:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Muros da cidade:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Barcos:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Pontes:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Cartas de desenvolvemento" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Cartas de construír camiños:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Cartas de monopolio:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Cartas de ano de abundancia:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Cartas de capela:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Cartas de universidade de Pioneiros:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Cartas de palacio do gobernador:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Cartas de biblioteca:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Cartas de mercado:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Cartas de soldado:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Axuste do xogo actual" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "pida %s gratis" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "ofreza %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "ofreza %s por %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Quero %s, e darlles %s" #. Notification #: ../client/gtk/trade.c:348 #, fuzzy, c-format msgid "Quote received from %s." msgstr "%s recibe %s.\n" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "Pedir orzamentos" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Aceptar orzamento" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Rematar negocio" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Construción de camiños" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Ano de abundancia" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Este xogo non se puede gañar." #: ../common/game.c:891 msgid "There is no land." msgstr "Non hai terra" #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "É posíbel que este xogo non se poida gañar." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Este xogo pode gañarse con só construír todos os asentamentos e cidades." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Puntos de vitoria necesarios: %d\n" "Puntos obtidos por construccións: %d\n" "Puntos ao desenvolver cartas: %d\n" "Estrada máis longa/Exército máis grande: %d+%d\n" "Bonificación máxima por descubrimento de illas: %d\n" "Total: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneiros está baseado no excelente\n" "xogo de mesa «Os fundadores de Catan».\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Versión:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Páxina de inicio:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Autores:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Launchpad Contributions:\n" " Indalecio Freiría Santos https://launchpad.net/~ifreiria" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneiros tradúcese ao galego por:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Todos os 7 quitan o ladrón ou o pirata" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "Nas primeiras dúas quendas todos os 7 tíranse de novo" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Todos os 7 tíranse de novo" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Facer o terreo ao chou" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Facer o terreo ao chou" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Use pirata" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Use ao pirata para bloquear barcos" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Negocio rigoroso" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Permitir comerciar só antes de construír ou mercar" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Negocio local" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Permitir comerciar entre xogadores" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Vitoria ao rematar a quenda" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Revisa a vitoria unicamente ao rematar a quenda" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "Bonificacións por descubrimento de illas:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "Bonificacións por descubrimento de illas:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Número de xogadores" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Número de xogadores" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Punto de vitoria" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Puntos precisos para gañar o xogo" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Pódese gañar este xogo?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "Porto de Ladrillo|L" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "Porto de cereais|C" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "Porto de ouro|O" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Porto de lá|La" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Porto de madeira|M" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Seleccionar un meta-servidor" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Seleccione un xogo" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERRO* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Falar: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Recursos: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Construír: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dados: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Roubar: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Comercio: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Desenvolvemento: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Exercito: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Camiño: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*TON DE AVISO* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Xogador 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Xogador 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Xogador 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Xogador 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Xogador 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Xogador 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Xogador 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Xogador 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** TIPO DE MENSAXE DESCOÑECIDA ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Erro comprobando o estado da conexión: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Erro conectando ao anfitrión '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Erro escribindo conectador: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "erro escribindo conectador: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Ler desbordamento de buffer - desconectando\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Erro lendo conectador: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Erro creando conectador: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Erro axustando conectador close-on-exec: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Erro axustando conectador de non bloqueo:%s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Erro conectando a %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Non se pode resolver %s porto %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Non se pode resolver %s porto %s: anfitrión non atopado\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Erro creando struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Erro creando conectador de escoita: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Erro durante a escoita no conectador: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Escoita non compatíbel aínda nesta plataforma." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "descoñecido" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Erro obtendo nome ao mesmo nivel: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Erro conseguindo enderezo: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name aínda non é compatíbel con esta plataforma" #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Produciuse un erro ao aceptar a conexión : %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Conectando a %s, porto %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" "Estado de desbordamento de pila. Volteado de pila enviado a erro estándar.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Outeiro" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Leira" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Montaña" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Prado" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Bosque" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Deserto" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "M_ar" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "O_uro" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Ningún" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "La_drillo (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Cereais (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "Mine_rais (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Lá (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Madeira (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "Calquera (_3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "Leste|L" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "Nordeste|NE" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "Noroeste|NO" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "Oeste@O" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "Suroeste|SO" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "Sureste|SE" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 #, fuzzy msgid "Delete a row" msgstr "Eliminar" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Ao chou" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Parametros do xogo" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Regras" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Recursos" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Construccións" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Editor de Pioneiros" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Falla ao cargar '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Falla ao gardar a '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Xogo" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Abrir partida" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Gardar como..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Cambiar titulo" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Novo titulo:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Acerca do editor de Pioneiros" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Ficheiro" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Novo" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Crear un novo xogo" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Abrir..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Abrir un xogo existente" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Gardar" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Gardar o xogo" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Gardar _como..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Gardar como" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "Cambiar _titulo" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Cambiar titulo do xogo" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Comproba o obxetivo de puntos de _victoria" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Comproba cando pode gañarse o xogo" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Saír" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Acerca do editor de Pioneiros" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informacion acerca de editor de Pioneiros" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Abrir este ficheiro" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "nome de ficheiro" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor para xogos de Pioneiros" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Construción menús fallada: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Axustes" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Conta de recursos" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Crea o teu propio xogo para Pioneiros" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Converter en daemon o meta servidor ao iniciar" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Ficheiro PID a crear ao converter en daemon (implica -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Redirixir clientes a outro meta-servidor" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Usar este nome de servidor ao crear novas partidas" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "nome de equipo" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Usa este rango de portos cando estea creando novos xogos" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "de-para" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Depurar mensaxes do log do sistema" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta Servidor para Pioneiros" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "protocolo do meta-servidor:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, fuzzy, c-format msgid "Avahi error: %s, %s\n" msgstr "Erro(%s): %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 #, fuzzy msgid "Unable to register Avahi server" msgstr "Darse de baixa do metaservidor\n" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Acerca do servidor de Pioneiros" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Información do servidor Pioneiros" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Deter o servidor" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Iniciar o servidor" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Deter o servidor" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Inicie o servidor" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Entrou o xogador %s de %s\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "O xogador %s de %s foise\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "O xogador %d é agora %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "O porto para o servidor do xogo" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Rexistrar o servidor" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Rexistrar este xogo no meta-servidor" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Nome informado do anfitrión" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "O nome público deste computador (preciso cando se xoga a través dun firewall)" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "Desordenar a orde das quendas" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Desordenar a orde das quendas" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 #, fuzzy msgid "Shows all players and spectators connected to the server" msgstr "Amosar todos os xogadores e visores conectados ao servidor" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Conectado" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Está conectado actualmente o xogador ?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Nome" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Nome do xogador" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Ubicación" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Nome do xogador anfitrión" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Número" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Número do xogador" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Rol" #. Tooltip for column Role #: ../server/gtk/main.c:765 #, fuzzy msgid "Player or spectator" msgstr "Xogador de visor" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Lanzar o cliente de Pioneiros" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Lanzar o cliente de Pioneiros" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Permitir conversa" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Permitir as mensaxes de conversa" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Engadir un xogador do computador" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Engadir un xogador do computador no xogo" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Mensaxes do servidor" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Configuración do xogo" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Parámetros do servidor" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Xogo actual" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Xogadores conectados" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Xogadores do computador" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Mensaxes" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "O servidor do xogo Pioneiros" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "O xogo rematou.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Organice un xogo de Pioneiros" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Servidor de Pioneiros" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Hospedar unha partida de Pioneiros" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Título do xogo para usar" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Ficheiro de xogo para usar" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Porto para escoitar" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Anular o número de xogadores" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Anular o número de puntos precisos para gañar" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Anular a regra do 7" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Anular tipo de terreo, 0=predefinido 1=ao chou" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Engadir N xogadores do computador" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Rexistrar o servidor co meta-servidor" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Rexistrar en nome do meta-servidor (supón -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Usar este nome de máquina cando se rexistre" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Saír despois de que un xogador gañe" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Saír despois de N segundos sen xogadores" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Modo de torneo, xogadores do computador engadidos despois de N minutos" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Porto administrador para a escoita" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "Non comece o xogo inmediatamente, espere unha orde do porto administrador" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Dar números de xogadores de acordo á orde na que entren no xogo" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Opción do metaservidor" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opción para o metaservidor" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Opcións varias" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Opcións varias" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" "Non se pode establecer un titulo ao xogo e un nome ao ficheiro ao mesmo " "tempo\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Non se poden cargar os parámetros da partida\n" #. Error message #: ../server/main.c:275 #, fuzzy, c-format msgid "Admin port not available.\n" msgstr "Sintoo, %s dispoñíbel.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "O porto de administración non está asignado, tampouco se pode desactivar o " "inicio do xogo\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Rexistrar co metaservidor no %s, porto %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Darse de baixa do metaservidor\n" #: ../server/player.c:140 msgid "chat too long" msgstr "Conversa demasiado longa" #: ../server/player.c:157 msgid "name too long" msgstr "Nome demasiado longo" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignorar extensión descoñecida" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "O ultimo xogador saíu, o contador do torneo restableceuse." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "A partida comeza, engadindo xogadores do computador." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "O xogo comeza en %s minutos." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "O xogo comeza en %s minutos." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Xogador do computador" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "O xogo rematou." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Xogador de %s rexeitado: fin do xogo\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "O nome non cambiou: o novo nome xa está en uso" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Esperouse demasiado tempo sen xogadores... Adeus.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s reconectouse." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "A versión non coincide: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Este xogo comezará en breve" #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Preparando a partida" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Buscando xogos en '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Directorio de xogos '%s' non atopado\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonificación por descubrimento de illas" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bonificación por illas adicionais" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Tentouse asignar recursos para un xogador nulo.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "O rol do dado foi determinado polo administrador." #~ msgid "Viewer %d" #~ msgstr "Visualizador %d" #~ msgid "viewer %d" #~ msgstr "Visualizador %d" #~ msgid "I want" #~ msgstr "Quero..." #~ msgid "Give them" #~ msgstr "Dalles..." #~ msgid "Viewer: " #~ msgstr "Visor: " #~ msgid "Number of AI Players" #~ msgstr "Número de xogadores do computador" #~ msgid "The number of AI players" #~ msgstr "Número de xogadores do computador" #~ msgid "Recent Games" #~ msgstr "Xogos recentes" #~ msgid "You may choose 1 resource" #~ msgstr "Podes elixir 1 recurso" #~ msgid "_Player name" #~ msgstr "Nome do _xogador" #~ msgid "The Pioneers Game" #~ msgstr "O xogo de Pioneiros" #~ msgid "Select the ship to steal from" #~ msgstr "Seleccione o barco a roubar" #~ msgid "Select the building to steal from" #~ msgstr "Elixe o edificio que queres roubar" #~ msgid "Development Card" #~ msgstr "Carta de desenvolvemento" #~ msgid "Player Name:" #~ msgstr "Nome do xogador:" #~ msgid "I Want" #~ msgstr "Quero..." #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Permítese comercio entre os xogadores?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Comercio permitido só antes de construír/mercar?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Comprobar victoria só ao final da quenda?" #~ msgid "Sevens Rule:" #~ msgstr "Regra dos setes:" #~ msgid "Use Pirate:" #~ msgstr "Use Pirata:" #~ msgid "Number of Players" #~ msgstr "Número de xogadores" #~ msgid "Development Cards" #~ msgstr "Carta de desenvolvemento" #~ msgid "Save as..." #~ msgstr "Gardar como..." #~ msgid "Pioneers Game Editor" #~ msgstr "Editor do xogo Pioneiros" #~ msgid "_Change title" #~ msgstr "Cambiar _titulo" #~ msgid "Random Turn Order" #~ msgstr "Orde de quendas ao chou" pioneers-14.1/po/hu.po0000644000175000017500000027202511760645356011623 00000000000000# Pioneers - Settlers of Catan for GNOME. # Copyright (C) 1999-2001 Dave Cole # Copyright (C) 2000-2002 Andy Heroff # This file is distributed under the same license as the pioneers package. # Ferenc Bánhidi , 2005-2007. # # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.12.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2008-04-05 15:37+0200\n" "Last-Translator: Ferenc Bánhidi \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Szerver gép" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Szerver port" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Gép név (kötelező)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Körök között ennyit vár (milliszekundumban)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Robot játékos nem beszél" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "A játékos típusa" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Debug üzenetek engedélyezése" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Verzió információ" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Robot játékos a Pioneers játékhoz" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioneers verzió" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Meg kell adni egy nevet.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Robot játékos típusa: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Ez a játék már megtelt. Távozom." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Nincsenek települések a készletben" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Nincs hely beállítani egy települést" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Nincsenek utak raktáron, melyek használhatók a beállításhoz" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Nincs hely beállíani egy utat" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Oké, na rajta!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Most mindenkit legyőzök ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Most még egy kísérlet..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Legalább kapok valami keveset..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Egy több mint a semmi..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Remek!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Én leszek a legjobb ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Ez valóban egy jó év!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Te valóban nem érdemelsz többet!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Nem tudsz mit csinálni a rengeteg nyersanyaggal ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Na, várj csak majd kirabollak, és elveszítesz mindent újból!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Menj, rabló menj!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Szemét!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Nem tennéd a rablót valahová máshová?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Miért mindig én??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Ó, ne!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Ki a bánat dobta azt a 7-est??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Miért mindig én?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Búcsúzz el a kártyáidtól... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*sátáni vigyor*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me hogy mondj búcsút a kártyáidnak ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Ez az ár a létező legjobb... ;)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Ej! Hol veszet el az a kártya?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Tolvaj! Tolvaj!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Várd csak a bosszúmat..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Ó ne :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Csak ez adódik MOST??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hehe, én vagyok a hódító!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Kiraboltak minket, majd elvették a pontjainkat..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Nézd az utat!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pf, te csak utépíéssel akarsz nyerni..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Elutasított üzlet.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Hiba vétele a szervertől: %s. Kilépés\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Hurrá!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Gratulálok" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hello, üdvözöllek a hallban. Én egy egyszerű robot vagyok. Írd a chat-be '/" "help' és megmutatom milyen parancsokat ismerek." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'help' megmutatja ezt az üzenetet újra" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' elmagyarázza a célját, ennek a különleges táblának" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' megtudhatod az utolsó kiadott verziót" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Ez a tábla nem játékra lett tervezve. Helyette a játékosok itt " "megtalálhatják egymást, és eldönthetik melyik táblán akarnak játszani. " "Megállapodnak ki lesz a tervezett játék gazdája. Ő indít egy szervert, " "melyet regisztrál a metaszerverhez. A többi játékos kilép a hallból, és " "csatlakozik ahhoz a játékhoz." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "Az utolsó kiadott Pioneers verzió:" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "A játék indul. Már nem kellek többet. Viszlát." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Várj" #: ../client/common/client.c:108 msgid "Idle" msgstr "Tétlen" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Minket kirúgtak a játékból.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Nincs kapcsolatban" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Hiba (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Figyelmeztetés: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "A bank üres, %s nem kap semmi %s.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s kaphat csak %s, mert a banknak nincs több.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s kap %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s felhasznál %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s elhasznált %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s visszafizet %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s eldob %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s megnyerte a játékot, %d ponttal!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Betöltés" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Eltérő verzió." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Verzió eltérés. Kérlek ellenőrizd van-e frissítés a klienshez és a " "szerverhez.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Építs két falut, és mindegyikhez csatlakozzon egy" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Építs egy falut és csatlakozzon hozzá egy" #: ../client/common/client.c:1416 msgid "road" msgstr "út" #: ../client/common/client.c:1418 msgid "bridge" msgstr "híd" #: ../client/common/client.c:1420 msgid "ship" msgstr "hajó" #: ../client/common/client.c:1427 msgid " or" msgstr " vagy" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Várj a körödre." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "" "Válaszd ki az épüetet\n" "akitől lopni szeretnél." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "" "Válaszd ki a hajót\n" "akitől lopni szeretnél." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Helyezd el a rablót." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Vége az útépítésnek." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Épít egy utat." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Épít két utat." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Ez a te köröd." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Bocs, %s használható.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "A játéknak vége." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Vásároltál egy %s fejlesztés kártyát.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Vásároltál egy %s fejlesztés kártyát.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s vásárolt egy fejlesztés kártyát.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s kijátszotta %s fejlesztés kártyáját.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s kijátszotta egy %s fejlesztés kártyáját.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Nincs több köved az útépítéshez.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Kaptál %s %s játékostól.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s elvesz tőled %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s elvesz %s játékostól %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Játékos %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "játékos %d" #: ../client/common/player.c:214 #, fuzzy, c-format msgid "New spectator: %s.\n" msgstr "Új szemlélő: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s most %s lett.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "%d játékos %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s kilépett.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Az ott nem a legnagyobb hadsereg.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s vezeti a legnagyobb hasereget.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Az ott nem a leghosszabb út.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s építette a leghosszabb utat.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "%s játékosra várunk." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s lop egy nyersanyagot %s játékostól.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Lopsz %s %s játékostól.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s lop tőled %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s ad %s semmit!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s ad %s %s ingyen.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s játékos ad %s játékosnak %s cserébe kap %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s cserélt %s kapott érte %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s épített egy utat.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s épített egy hajót.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s épített egy falut.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s épített egy várost.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s épített egy város falatt.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "%s felhasználó a player_build_add függvényt 'BUILD_NONE'-val hívta\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s épített egy hidat.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s megszüntet egy utat.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s megszüntet egy hajót.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s megszüntet egy falut.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s megszüntet egy várost.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s megszüntet egy város falat.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "" "%s felhasználó a player_build_remove függvényt 'BUILD_NONE'-val hívta\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s megszüntet egy hidat.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s törölte a hajók mozgását.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s mozgat egy hajót.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s kap %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "érvénytelen pont.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s elvesztett %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "érvénytelen pontra történő mozgás.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s elvesztett %s %s ért.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "tégla" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Tégla" #: ../client/common/resource.c:36 msgid "grain" msgstr "gabona" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Gabona" #: ../client/common/resource.c:37 msgid "ore" msgstr "érc" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Érc" #: ../client/common/resource.c:38 msgid "wool" msgstr "gyapjú" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Gyapjú" #: ../client/common/resource.c:39 msgid "lumber" msgstr "rönk" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Rönk" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "nincs nyersanyag (bug)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Nincs nyersanyag (bug)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "bármelyik nyersanyag (bug)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Bármelyik nyersanyag (bug)" #: ../client/common/resource.c:42 msgid "gold" msgstr "aranyat" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Arany" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "egy darab tégla kártyát" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d db tégla kártyát" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "egy darab gabona kártyát" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d db gabona kártyát" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "egy darab érc kártyát" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d db érc kártyát" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "egy darab gyapjú kártyát" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d db gyapjú kártyát" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "egy darab rönk kártyát" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d db rönk kártyát" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "semmit" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s és %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s törölte a rabló mozgását.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s áthelyezte a rablót.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s törölte a hajók mozgását.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s áthelyezte a kalózt.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s mozgatja a rablót." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "%s beállítása.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "%s kétszeres beállítása.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s dobása %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "%d. köre kezdődik, %s játékosnak.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Teszt sípolás.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s sípolt neked.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Te sípoltál %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Te nem tudsz sípolni %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " mondja: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta szerver: %s, port: %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Kész.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "A meta szerver kirúgott minket\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Játékok vétele a meta szerverről.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Szerver kérés új játékra: %s, port: %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Ismeretlen üzenet a metaszervertől: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Túl sok meta szerver átirányítás\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Hibás átirányított vonal: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Meta szerver túl régi a szerver létrehozáshoz (verzió %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normál" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Első két körben újradobás" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Mindig újradobás" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Alapértelmezett" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Véletlen" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Átirányítva %s meta szerverhez, %s portra\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Pioneers szerver lista fogadása a meta szervertől.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Megjegyzés:\n" "\tA meta szerver nem küld információt a játékokról.\n" "\tKérlek állítds be magad a megfelelő értékeket." #. Label #: ../client/gtk/connect.c:726 #, fuzzy msgid "Number of computer players" msgstr "A játékos típusa" #. Tooltip #: ../client/gtk/connect.c:746 #, fuzzy msgid "The number of computer players" msgstr "A játékosok száma" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Új játékszerver kérés\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Inditási hiba %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Új játék" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Játékba jelentkezés" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "Ú_j távoli játék" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Játéklista frissitése" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Új publikus játék létrehozása meta szerverre" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Nem tud kapcsolódni nyilvános játékhoz" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Jelentkezés a kiválasztott játékba" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Válassz egy játékot" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Térkép név" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Játék neve" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Belépett" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Belépett játékosok száma" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Maximum" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Játékosok száma maximum" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terep" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Véletlen vagy alapértelmezett táj" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Gy. pontok" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Győzelemhez szükséges pontok" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Hetes szabály" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Hetes szabály" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Host" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "A játokot futtató számítógép" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "A játék portja" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Verzió" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "A host gép verziója" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Új játék indítása" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Játékos neve" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Add meg a neved" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "" #: ../client/gtk/connect.c:1280 #, fuzzy msgid "Check if you want to be a spectator" msgstr "Szemlélő akarsz lenni?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta szerver" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Csatlakozás nyilvános játékhoz" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Játékba jelentkezés" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Játék létrehozása" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Játék létrehozása" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Csatlakozás privát játékhoz" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Csatlakozás egy privát játékhoz" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Szerver gép" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "A játékot futtató gép neve" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Szerver port" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "A játékot futtató gép portja" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Legutóbbi játékok" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Fejlesztés kátyák" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Kártya kijátszása" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Nyersanyagok eldobása" #: ../client/gtk/discard.c:101 #, fuzzy, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "El kell dobnod %d db nyersanyagot" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Összes eldobása" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Várunk míg dobnak a játékosok" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Játék vége" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s megnyerte a játékot, %d ponttal!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "%s minden elismerésünk. Te vagy a világ ura!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Válassz nyersanyagokat" #: ../client/gtk/gold.c:96 #, fuzzy, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Választhatsz %d db nyersanyagot" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Összes nyersanyag" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Várunk a játékosokra, hogy válasszanak" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Játék" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "Új já_ték" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Új játék indítása" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "Játék _elhagyása" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Játék elhagyása" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Adminsztárció" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Pioneers szerver adminisztrálás" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Játékos _neve" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Játékos neved módostása" #. Menu entry #: ../client/gtk/gui.c:254 #, fuzzy msgid "L_egend" msgstr "Je_lmagyarázat" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Táj magyarázat és építmény árak" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Játék beállítások" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Aktuális játék beállitásai" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Dobás statisztika" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Kocka dobások statisztikája" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Kilépés" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Kilépés a programból" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Tevékenység" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Kocka dobás" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "A kocka dobása" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Kereskedelem" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Visszavonás" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Kész" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Út" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Út építés" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Hajó" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Hajó építés" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Hajó mozgatás" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Hajó mozgatás" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Híd" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Híd építés" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Falu" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Falu építés" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Város" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Város építés" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Fejlesztés" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Fejlesztés kártya vásárlás" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Város fal" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Város építés" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Beállítások" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "_Beállítások" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Program konfigurálás" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 #, fuzzy msgid "_View" msgstr "Szemlélő" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Súgó" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "Pioneers _névjegy" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Információ a Pioneersről" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Kézikönyv" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Eszköztár" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Eszköztár megjelenítése vagy elrejtése" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Nyeréshez szükséges pontok: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Üzenetek" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Térkép" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Kereskedés befejezése" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Kínál" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Elutasított belső üzlet" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Jelmagyarázat" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Üdvözlünk a Pioneersban" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Pioneers beállítások" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Téma:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Válassz egyett a témák közül" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Jelmagyarázat megjelenítése" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Jelmagyarázat megjelenítése a térkép mellett" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Színes üzenetek" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Új üzenetek megjelenítése színesen" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Játékosok üzenetei színesen" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Új üzenetek megjelenítése a játékosok színével" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Összesítés színesben" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Színek használata a játékos összesítésben" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Eszköztár gyorsbillentyűkkel" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Gyorsbillentyűk megjelenítése az eszköztáron" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Csendes mód" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "Csendes módban nincsenek hangok" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Új játékosok jelzése" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 #, fuzzy msgid "Make a sound when a new player or spectator enters the game" msgstr "Hangjelzés, amikor egy új játékos vagy szemlélő belép a játékba" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 #, fuzzy msgid "Show notifications" msgstr "Verzió információ" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "16:9-es elrendezés" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Elrendezés 16:9-es ablakhoz" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Pioneers névjegy" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Üdvözlünk a Pioneersban!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Dobás statisztka" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Hajó mozgás törölve." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Válaszd ki a hajó új helyét." #. Notification #: ../client/gtk/interface.c:892 #, fuzzy msgid "It is your turn to setup." msgstr "Ez a te köröd." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Domb" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Szántóföld" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Hegy" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Legelő" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Erdő" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Sivatag" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Tenger" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Vidék hozama:" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Építmény árak:" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Város fal" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Fejlesztés kártya" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopólium" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Válassz monopól nyersanyagot." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Játékos név módosítása" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Játékos neve:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Arc:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Változat:" #: ../client/gtk/offline.c:62 #, fuzzy msgid "Connect as a spectator" msgstr "Csatlakozás szemlélőként" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Meta-szerver host" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Válassz egy játékot." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Kapcsolódás" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Játsz egy játékot a Pioneersszal" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Játsz egy játékot a Pioneersszal" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Falvak" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Városok" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Város falak" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Legnagyobb hadsereg" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Leghosszab út" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kápolna" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kápolnák" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pioneers egyetem" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pioneer egyetemek" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Kormányzók háza" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Kormányzó házak" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Könyvtár" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Könyvtárak" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Piac" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Piacok" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Katona" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Katonák" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Nyersanyag kártya" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Nyersanyag kártya" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Fejlesztés kártyák" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Játékos összesítés" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Bőség éve" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Válassz két nyersanyagot a bankból" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Válassz két nyersanyagot a bankból" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "A bank üres" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s kínál %s nyersanyagot, és cserébe szeretne %s nyersanyagot" #. Notification #: ../client/gtk/quote.c:217 #, fuzzy, c-format msgid "New offer from %s." msgstr "Lopsz %s %s játékostól.\n" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Szeretnék" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Adok érte" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Törlés" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Elutasított belső üzlet" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Játékos" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Ajánlatok" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s:%s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Elutasított üzlet" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Nyersanyagok" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Összes" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Összeg a kézben" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr ">több" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Kiválasztott mennyiség növelése" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Kiválasztott összeg" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Összes kválasztott összeg" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "A bank nem lehet üres" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Igen" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Nem" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Ismeretlen" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Nincs játék folyamatban..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Általános beállítások" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Játékosok száma:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Nyerő pont:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Véletlen táj:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Engedélyezett játékosok közötti kereskedés:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Kereskedés csak építkezés / vásárlás előtt:" #: ../client/gtk/settingscreen.c:171 #, fuzzy msgid "Check victory only at end of turn:" msgstr "Csak a kör végén ellenőrizd a győzelmet:" #: ../client/gtk/settingscreen.c:176 #, fuzzy msgid "Amount of each resource:" msgstr "Összes nyersanyag száma:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Hetes szabály:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Használj kalózt a hajók megállítására:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Sziget felfedezés bónuszok:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Épület árak" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Utak:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Falvak:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Városok" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Város falak:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Hajók:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Hidak:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Fejlesztés kátyák" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Útépítő kártyák:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopólium kártyák:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Bőség éve kártyák:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Kápolna kártyák:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Pioneer egyetem kártyák:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Kormányzók háza kártyák:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Könyvtár kártyák:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Piac kártyák:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Katona kártyák:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Aktuális játék beállítások" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "%s nyersanyagot kérek ingyen" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "Adok %s ingyen" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "Ad %s kér %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Szeretnék %s nyersanyagot, cserébe adok %s nyersanyagot" #. Notification #: ../client/gtk/trade.c:348 #, fuzzy, c-format msgid "Quote received from %s." msgstr "%s kap %s.\n" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Ajánlatot kér" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Ajánlat elfogadása" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Kereskedés befejezése" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Út építés" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Bőség éve" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "A játékot nem lehet megnyerni." #: ../common/game.c:891 msgid "There is no land." msgstr "Nincs vidék" #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Lehet, hogy a játékot nem lehet megnyerni." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "A játékot csak az összes falu és város megépítésével lehet megnyerni." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Győzelemhez szükséges pontok: %d\n" "Elérhető pontok mindent felépítve: %d\n" "Pontok fejlesztés kártyákban: %d\n" "Leghosszabb út / legnagyobb hadsereg: %d+%d\n" "Maximum sziget felfedezés bónusz: %d\n" "Összesen: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "A Pioneers a kíváló táblajáték a\n" "Catan telepesei alapján készült.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Verzió:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Honlap:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Szerzők:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "Ferenc Bánhidi" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "A Pioneerst magyarra fordította:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Minden hetes dobás mozgatja a rablót vagy a kalózt" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "Az első két körben minden hetes dobás újradobandó" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Minden hetes dobás újradobandó" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Véletlen táj?" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Véletlen táj?" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Kalóz használat" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Használj kalózt a hajók megállítására" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Szigorú kereskedés" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Kereskedés csak építkezés / vásárlás előtt?" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Játékosok közötti kereskedés" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Engedélyezett játékosok közötti kereskedés" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Győzelem a kör végén" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Csak a kör végén ellenőrizd a győzelmet" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "Sziget felfedezés bónuszok:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "Sziget felfedezés bónuszok:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Játékosok száma" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "A játékosok száma" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Győzelemhez szükséges pontok" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "A győzelemhez szükséges pontok" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Meg lehet nyerni ezt a játékot?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "T" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "G" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "É" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Gy" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "R" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Válassz egy meta szervert" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Válassz egy játékot" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*HIBA* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Chat: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Nyersanyag: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Épít: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dob: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Lop: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Kereskedi: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Fejleszt: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Hadsereg: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Út: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BEEP " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "1. játékos: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "2. játékos: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "3. játékos: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "4. játékos: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "5. játékos: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "6. játékos: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "7. játékos: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "8. játékos: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** ISMERETLEN ÜZENET TÍPUS ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Hiba csatlakozás státusz vizsgálat: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Hiba a csatlakozáskor '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Hiba socket írásakor: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Hiba socket írásakor: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Olvasási tároló túlcsordulás - kapcsolat bontás\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Hiba socket olvasáskor: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Hiba a socket létrehozásakor: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Hiba a socket beállításakor 'close-on-exec': %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Hiba a socket beállításakor 'non-blocking': %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Hiba a csatlakozáskor %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Nem lehet feloldani %s port %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Nem lehet feloldni %s port %s: gép nem található\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Hiba az addrinfo létrehozásakor: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Hiba a szerver socket létrehozásakor: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Hiba a figyelő socket végrahajtásakor: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Ez a platform nem támogatja a szerver socketeket." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "ismeretlen" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Hiba a látható név kérésekor: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Hiba a címfeloldáskor: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Ez a platform nem támogatja a net_get_peer_name függvényt." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Hiba csatlakozás elfogadásakor: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Kapcsolódás: %s , port: %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" "Állapot verem túlcsordulás. A verem tartalmát elküldtem a standard hiba " "kimenetre.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Domb" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Szántóföld" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Hegy" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Legelő" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Erdő" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "S_ivatag" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Tenger" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Arany" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "Se_mmi" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "Té_gla (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Gabona (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "É_rc (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "Gy_apjú (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "Rö_nk (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Bármi (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "Kelet|K" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "Észak Kelet|ÉK" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "Észak Nyugat|ÉNY" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "Nyugat|W" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "Dél Nyugat|DNY" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "Dél Kelet|DK" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 #, fuzzy msgid "Delete a row" msgstr "Törlés" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Keverés" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Játék paraméterek" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Szabályok" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Nyersanyagok" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Építmények" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Pioneers szerkesztő" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Hiba a betöltékor '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Hiba a mentéskor '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Játék" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Játék megnyitása" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Mentés másként..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Cím módosítás" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Új cím:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Pioneers szerkesztőről" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Fájl" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "Ú_j" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Új játék létrehozása" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Megnyitás..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Létező játék megnyitása" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Mentés" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Játék mentése" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Men_tés másként..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Mentés másként" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Cím módosítás" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Játék címének módosítása" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "_Ellenőrizd a győzelemhez szükséges pontokat" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Ellenőizd, vajon a játék megnyerhető-e" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Kilépés" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Pioneers szerkesztőről" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Információ a Pioneers szerkesztőről" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Ennek a fájlnak a megnyitása" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "fájlnév" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Szerkesztő a Pioneers játékokhoz" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Hiba a menű felépítésekor: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Beállítások" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Nyersanyagok száma" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Készíts saját játékot a Pioneershoz" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 #, fuzzy msgid "Daemonize the meta-server on start" msgstr "A metaszerver démonként induljon" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 #, fuzzy msgid "Redirect clients to another meta-server" msgstr "Irányítsd a klienseket egy másik metaszeverhez" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Használd ezt a host nevet új játék létrehozásához" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "host név" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Használd ezt a port tartományt új játék létrehozásához" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "tól-ig" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Debug syslog üzenetek" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta szerver a Pioneers játékhoz" #: ../meta-server/main.c:1135 #, fuzzy, c-format msgid "meta-server protocol:" msgstr "metaszerver protokoll:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Pioneers szerverről" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Információ a Pioneers szerverről" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Szerver leállítása" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Szerver indítása" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "A szerver leállítása" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "A szerver indítása" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "%s játékos belépett a következő gépről %s\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "%s játékos kilépett a következő gépről %s\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "%d. játékos most %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Port a játék szerverhez" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Szerver regisztrálás" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Játék regisztrálása a meta szerverre" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "A közölt host név" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "A gép nyilvános neve (szükséges ha tűzfal mögül játszol)" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "Játékosok sorrnedje véletlen" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Játékosok sorrnedje véletlen" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 #, fuzzy msgid "Shows all players and spectators connected to the server" msgstr "Minden szerverhez csatlakozott játékos és szemlélő megjelenítése" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Csatlakozva" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "A játékos jelenleg csatlakozva?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Név" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "A játékos neve" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Hely" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "A játékos host neve" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Szám" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "A játékos száma" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Szabály" #. Tooltip for column Role #: ../server/gtk/main.c:765 #, fuzzy msgid "Player or spectator" msgstr "Játékos a nézőkből" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Pioneers kliens indítása" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "A Pioneers kliens indítása" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Chat engedélyezése" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Chat üzenetek engedélyezése" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Robot játékos hozzáadása" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Robot játékos hozzáadása a játékhoz" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Üzenetek a szervertől" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Játék beállítások" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Szerver paraméterek" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Aktuális játék" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Csatlakozott játékosok" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Számítógép játékosok" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Üzenetek" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "A pioneers játék szerver" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "A játéknak vége.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- a Pioneers játékot futtató" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioneers szerver" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Üzemeltess Pioneers játékot" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Játék cím" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Játék fájl" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Szzerver port" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "A játékosok számánk felülbírálása" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Győzelemhez szükséges pontok felülbírálása" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Hetes szabály felülbírálása" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Terep felülbírálása, 0=alapértelmezett 1=véletlen" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "N db robot játékos hozzáadása" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Szerver regisztrálása a meta szerverre" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Regisztrálj a meta-szerver névre (beleértve -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Használd ezt a host nevet regisztráláshoz" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Kilép miután a játékos nyert" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Kilép N másodperc múlva, ha nincsenek játékosok" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Verseny mód, robot játékos hozzáadása N perc elteltével" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "A szerver admin portja" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "A játék nem azonnal,hanem az admin porton érkező parancsra indul" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Add meg a játékosok számát, ahányan játszanak a játékban" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Meta szerver kapcsolók" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "meta-szerver kapcsolók" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Egyéb kapcsolók" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Egyéb kapcsolók" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "Fájlnév és játéknév nem adható meg egyszerre\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "A játék paramétereit nem lehet betölteni\n" #. Error message #: ../server/main.c:275 #, fuzzy, c-format msgid "Admin port not available.\n" msgstr "Bocs, %s használható.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "Admin port nincs beállítva, így a játék kezdés nem lehet tiltva\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Regisztrálás a meta szerverrel %s, port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Ismeretlen üzenet a metaszervertől\n" #: ../server/player.c:140 msgid "chat too long" msgstr "túl hosszú chat" #: ../server/player.c:157 msgid "name too long" msgstr "túl hosszú név" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ismeretlen bővítések figyelmen kívül hagyása" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "Az utolsó játékos is elment, a parti időzítője újraindítva." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Játék indul, computer játékosok hozzáadása." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "A játék %s percen belül kezdődik." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "A játék %s perc múlva kezdődik." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Számítógép játékos" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Bocs, a játék vége." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Játékos a %s gépről visszautasíta: a játéknak vége\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Név nincs megváltoztatva: az új név már használatban" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Túl sokáig voltam játékosok nélkül...viszlát.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "A játék folytatása." #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s újra csatlakoztatva." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Verzió eltérés: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Ez a játék hamarosan kezdődik." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Játék indítása" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Sziget felfedezés bónusz" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "További sziget bónusz" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "NULL játékosnak próbált erőforrást kiosztani.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "A kockadobást az adminisztrátor határozta meg" #~ msgid "Viewer %d" #~ msgstr "Szemlélő %d" #~ msgid "viewer %d" #~ msgstr "szemlélő %d" #~ msgid "I want" #~ msgstr "Szeretnék" #~ msgid "Give them" #~ msgstr "Adok érte" #~ msgid "Viewer: " #~ msgstr "Szemlélő: " #~ msgid "Number of AI Players" #~ msgstr "Robot játékosok száma" #~ msgid "The number of AI players" #~ msgstr "A robot játékosok száma" #~ msgid "Recent Games" #~ msgstr "Legutóbbi játékok" #~ msgid "You may choose 1 resource" #~ msgstr "Választhatsz egy nyersanyagot" #~ msgid "_Player name" #~ msgstr "Játékos _neve" #~ msgid "The Pioneers Game" #~ msgstr "Pioneers" #~ msgid "Select the ship to steal from" #~ msgstr "" #~ "Válaszd ki a hajót\n" #~ "akitől lopni szeretnél" #~ msgid "Select the building to steal from" #~ msgstr "" #~ "Válaszd ki az épületet\n" #~ "akitől lopni szeretnél" #~ msgid "Development Card" #~ msgstr "Fejlesztés kártya" #~ msgid "Player Name:" #~ msgstr "Játékos neve:" #~ msgid "I Want" #~ msgstr "Szeretnék" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Játékosok közötti üzlet engedélyezett?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Kereskedés csak építkezés / vásárlás előtt?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Győzelem ellenőrzése csak a kör végén?" #~ msgid "Sevens Rule:" #~ msgstr "Hetes szabály:" #~ msgid "Use Pirate:" #~ msgstr "Kalóz használat:" #~ msgid "Number of Players" #~ msgstr "Játékosok száma" #~ msgid "Development Cards" #~ msgstr "Fejlesztés kártyák" #~ msgid "Save as..." #~ msgstr "Mentés másként..." #~ msgid "Pioneers Game Editor" #~ msgstr "Pioneers játék szerkesztő" #~ msgid "_Change title" #~ msgstr "_Cím módosítás" #~ msgid "Random Turn Order" #~ msgstr "Véletlen kör sorrend" #~ msgid "_Legend" #~ msgstr "_Jelmagyarázat" #~ msgid "bad scaling mode '%s'" #~ msgstr "Hibás mérték '%s'" #~ msgid "Missing game directory\n" #~ msgstr "Hiányzó játék könyvtár\n" pioneers-14.1/po/it.po0000644000175000017500000027327611760645356011634 00000000000000# Pioneers - Settlers of Catan for GNOME. # Copyright (C) 1999-2001 Dave Cole # Copyright (C) 2000-2002 Andy Heroff # This file is distributed under the same license as the pioneers package. # Giancarlo Capella , 2005-2012. # msgid "" msgstr "" "Project-Id-Version: Pioneers 14.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2012-05-21 14:12:00+0200\n" "Last-Translator: Giancarlo Capella \n" "Language-Team: it \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Server Host" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Porta Server" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Nome giocatore AI (obbligatorio)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Tempo di attesa tra i turni (in millisecondi)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Blocca il dialogo del giocatore AI" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Tipo di giocatore AI" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Abilita messaggi di debug" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Mostra informazioni di versione" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Giocatore AI di Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioneers, versione:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Deve essere indicato un nome.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Tipo di giocatore AI: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "La partita è completa. Esco." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Nessuna colonia disponibile da posizionare" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Non c'è nessun punto per posizionare una colonia" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Nessuna strada disponibile da posizionare" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Non c'è nessun punto per posizionare una strada" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Ok, andiamo!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Vi batterò tutti! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Riproviamo..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Almeno ho preso qualcosa..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Uno è meglio di niente..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Uau!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Ehi, sto diventando ricco ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Questa è proprio una buona annata!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Non ti meriti tutto questo!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Non sai nemmeno che farci con così tante materie prime ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Vedrai, il mio brigante ti farà di nuovo perdere tutto!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Vai brigante, vai!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Che bastardo!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Non potevi mettere il brigante da qualche altra parte?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Perché sempre me??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Oh, no!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Chi diavolo ha tirato quel 7??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Perché sempre me?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Saluta le tue carte... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*ghigno malefico*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me dice addio alle tue carte ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Quello è il prezzo della ricchezza... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Ehi, dov'è andata quella carta?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Ladri! Ladri!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Aspettati la mia vendetta..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh no :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Deve proprio accadere ORA??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Argh" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hehe, sono i miei cavalieri a comandare!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Prima ci ruba, poi ci frega i punti..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Guarda quella strada!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pfui, non puoi vincere solo con strade..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Nessun commercio.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Ricevuto un errore dal server: %s. In uscita.\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Yuppi!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "I miei complimenti" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Salve, benvenuto nella lobby. Io sono un semplice robot. Scrivi '/help' " "nella chat per vedere la lista dei comandi che conosco." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' mostra questo messaggio" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' spiega lo scopo di questa strana disposizione di gioco" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' indica l'ultima versione rilasciata" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Questa disposizione non è una partita che possa essere giocata. Qui i " "giocatori si possono incontrare e decidere quale disposizione vogliono " "giocare. Dopodiché uno dei giocatori ospiterà la partita proposta avviando " "un server e registrandolo sul metaserver. Gli altri giocatori si possono " "quindi sconnettere dalla lobby ed unirsi alla partita." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "L'ultima versione rilasciata di Pioneers è" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "La partita sta per iniziare. Non sono più necessario. Addio." #: ../client/common/client.c:106 msgid "Waiting" msgstr "In attesa" #: ../client/common/client.c:108 msgid "Idle" msgstr "Inattivo" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Siamo stati buttati fuori dalla partita.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Scollegato" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Errore (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Avviso: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s non riceve nessun %s, poiché la banca è vuota.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s riceve solo %s, poiché la banca non ne ha oltre.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s riceve %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s prende %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s ha speso %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s è rimborsato con %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s ha scartato %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s ha vinto la partita con %d punti vittoria!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "In caricamento" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versione non corrispondente." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versione non corrispondente. Assicurarsi che client e server siano " "aggiornati.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Costruisci due colonie, ognuna con una connessione" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Costruisci una colonia con" #: ../client/common/client.c:1416 msgid "road" msgstr "una strada" #: ../client/common/client.c:1418 msgid "bridge" msgstr "un ponte" #: ../client/common/client.c:1420 msgid "ship" msgstr "una nave" #: ../client/common/client.c:1427 msgid " or" msgstr " o" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "In attesa del tuo turno." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Seleziona la costruzione da cui rubare." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Seleziona la nave da cui rubare." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Posiziona il brigante." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Termina la costruzione della strada." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Costruisci una strada." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Costruisci due strade." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "E' il tuo turno." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Mi dispiace, %s disponibile.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "La partita è finita" #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Hai comprato la carta sviluppo %s.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Hai comprato una carta sviluppo %s.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s ha comprato una carta sviluppo.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s ha giocato la carta sviluppo %s.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s ha giocato una carta sviluppo %s.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Hai terminato i segmenti di strada.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Hai preso %s da %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s ti ha preso %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s ha preso %s da %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Spettatore %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "spettatore %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Giocatore %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "giocatore %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Nuovo spettatore: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s è ora %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Il giocatore %d è ora %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s ha lasciato.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Non c'è cavaliere più potente.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s ha il cavaliere più potente.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Non c'è la strada più lunga.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s ha la strada più lunga.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "In attesa di %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s ha rubato una materia prima da %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Hai rubato %s da %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s ti ha rubato %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s non ha dato nulla a %s!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s ha dato a %s %s gratis.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s ha dato a %s %s in cambio di %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s ha scambiato %s per %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s ha costruito una strada.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s ha costruito una nave.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s ha costruito una colonia.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s ha costruito una città.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s ha costruito una fortificazione.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add chiamata con BUILD_NONE per l'utente %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s ha costruito un ponte.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s ha rimosso una strada.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s ha rimosso una nave.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s ha rimosso una colonia.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s ha rimosso una città.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s ha rimosso una fortificazione.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove chiamata con BUILD_NONE per l'utente %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s ha tolto un ponte.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s ha annullato un movimento di nave.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s ha mosso una nave.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s ha ricevuto %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "il server richiede di perdere un punto invalido.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s ha perso %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "il server richiede di spostare un punto invalido.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s ha perso %s per %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "argilla" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Argilla" #: ../client/common/resource.c:36 msgid "grain" msgstr "grano" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Grano" #: ../client/common/resource.c:37 msgid "ore" msgstr "minerale" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Minerale" #: ../client/common/resource.c:38 msgid "wool" msgstr "lana" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Lana" #: ../client/common/resource.c:39 msgid "lumber" msgstr "legno" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Legno" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "nessuna materia prima (bug)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Nessuna materia prima (bug)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "qualunque materia prima (bug)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Qualunque materia prima (bug)" #: ../client/common/resource.c:42 msgid "gold" msgstr "oro" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Oro" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "una carta argilla" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d carte argilla" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "una carta grano" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d carte grano" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "una carta minerale" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d carte minerale" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "una carta lana" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d carte lana" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "una carta legno" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d carte legno" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "nulla" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s e %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s ha annullato il movimento del brigante.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s ha mosso il brigante.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s ha annullato il movimento dei pirati.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s ha mosso il pirata.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s deve muovere il brigante." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Posizionamento per %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Doppio posizionamento per %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s ha tirato %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Inizia il turno %d per %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Seleziona una partita trovata in automatico" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) su %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Suono di prova.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s ti ha suonato.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Hai suonato a %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Non puoi suonare a %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " dice: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta-server su %s, porta %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Finito.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Il meta-server ci ha buttati fuori\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Ricezione dei nomi partita dal meta server.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Nuovo server di partita richiesto su %s porta %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Messaggio sconosciuto dal metaserver: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Troppe ridirezioni del metaserver\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Riga di ridirezione errata: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Meta server troppo vecchio per creare server (versione %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normale" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Ritira i primi 2 turni" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Ritira tutti i 7" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Default" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Casuale" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Rediretto sul meta-server %s, porta %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Ricezione della lista dei server Pioneers dal meta server.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Nota:\n" "\tIl metaserver non invia informazioni relative alle partite.\n" "\tImposta i valori appropriati." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Numero di giocatori AI" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "Il numero di giocatori AI" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Richiesta nuovo server di partita\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Errore avvio %s: %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Crea una Partita Pubblica" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Unisciti a Partita Pubblica" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nuova Partita Remota" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Aggiorna la lista delle partita" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Registra questa partita sul meta server" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Non unirti a partita pubblica" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Unisciti alla partita selezionata" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Seleziona una partita a cui unirti" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Nome mappa" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Nome della partita" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Corr" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Numero di giocatori in partita" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Massimo numero di giocatori" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terreno" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Terreno default casuale" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Punti Vitt." #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Punti per vincere" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Regola Sette" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Regola sette" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Host" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Host della partita" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Porta" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Porta della partita" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Versione" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Versione dell'host" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Inizia una Nuova Partita" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Nome Giocatore" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Inserisci il tuo nome" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Spettatore" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Imposta se vuoi essere uno spettatore" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Unisciti" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Unisciti ad una partita trovata automaticamente" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Metaserver" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Unisciti a Partita Pubblica" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Unisciti a partita pubblica" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Crea Partita" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Crea una partita" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Unisciti a Partita Privata" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Unisciti ad un partita privata" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Server host" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Nome dell'host della partita" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Porta server" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Porta dell'host della partita" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Partite recenti" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Carte sviluppo" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Gioca Carta" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Scarta Materie prime" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Devi scartare %d materia prima" msgstr[1] "Devi scartare %d materie prime" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Totale scarti" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "In attesa degli scarti dei giocatori" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Fine partita" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s ha vinto la partita con %d punti vittoria!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Onori a %s, Signore del Mondo conosciuto!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Scegli Materie prime" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Puoi scegliere %d materia prima" msgstr[1] "Puoi scegliere %d materie prime" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Materie prime totali" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "In attesa di scelta dei giocatori" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Partita" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nuova Partita" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Inizia una nuova partita" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Lascia Partita" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Lascia questa partita" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Amministra" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Amministra server Pioneers" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Nome _Giocatore" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Cambia il tuo nome di giocatore" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "Legen_da" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Legenda terreno e costi di costruzione" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "Impostazioni _Partita" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Impostazioni per la partita corrente" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "Istogramma _Tiri" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Istogramma dei tiri dei dadi" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Esci" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Esci dal programma" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Azioni" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Tira Dadi" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Tira i dadi" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Commercio" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Indietro" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Finito" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Strada" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Costruisci una strada" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Nave" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Costruisci una nave" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Muovi Nave" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Muovi una nave" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Ponte" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Costruisci un ponte" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Colonia" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Costruisci una colonia" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Città" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Costruisci una città" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Sviluppo" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Compra una carta sviluppo" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Fortificazione" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Costruisci una fortificazione" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Impostazioni" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Prefere_nze" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Configura l'applicazione" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_Vista" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Azzera" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "Visualizza la mappa intera" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Centra" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "Centra la mappa" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "Ai_uto" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Riguardo Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informazioni su Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Visualizza il manuale" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Schermo intero" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Imposta la finestra a schermo intero" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Toolbar" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Mostra o nasconde la toolbar" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Punti per vincere: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Messaggi" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Mappa" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Termina contrattazioni" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Quotazione" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Rifiuta commercio interno" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Legenda" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Benvenuto a Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Preferenze Pioneers" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Scegli uno dei temi" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Visualizza legenda" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Visualizza legenda a lato della mappa" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Messaggi colorati" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Visualizza nuovi messaggi colorati" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Chatta a colori" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Visualizza i nuovi messaggi di chat a colori" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Riassunto giocatore colorato" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Usa i colori nel riassunto giocatore" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Toolbar con acceleratore" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Visualizza acceleratori nella toolbar" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Modalità silenziosa" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "Nessun suono emesso in modalità silenziosa" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Annuncia nuovi giocatori" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "" "Esegue un suono quando un nuovo giocatore o spettatore entra nella partita" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Mostra notifiche" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" "Mostra notifiche quando è il tuo turno o quando è disponibile un nuovo " "commercio" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Usa disposizione 16:9" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Usa la disposizione 16:9 per la finestra" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Riguardo Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Benvenuto a Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Istogramma dei Tiri" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Movimento della nave annullato." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Seleziona una nuova posizione per la nave." #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "E' il tuo turno di posizionamento." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Collina" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Campo" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Montagna" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pascolo" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Foresta" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Deserto" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Mare" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Produzione terreno" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Costi di costruzione" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Fortificazione" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Carta sviluppo" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopolio" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Scegli la materia prima da monopolizzare." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Cambia Nome Giocatore" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Nome giocatore:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Volto:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variante:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Connetti come spettatore" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Metaserver Host" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Seleziona una partita a cui unirti." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Connessione" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Gioca una partita a Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Gioca una partita a Pioneers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Colonie" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Città" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Fortificazioni" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Cavaliere più potente" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Strada più lunga" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Cattedrale" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Cappelle" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Università di Pioneer" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Università di Pioneer" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Parlamento" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Parlamenti" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Biblioteca" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Biblioteche" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Mercato" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Mercati" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Cavaliere" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Cavalieri" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Materia prima" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Materie prime" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Carte sviluppo" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Riassunto giocatore" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Scoperta" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Scegli una materia prima dalla banca" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Prendi due materie prime dalla banca" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "La banca è vuota" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s ha %s, e cerca %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "Nuova offerta da %s." #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Offerta da %s." #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Voglio" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Dai loro" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Cancella" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Rifiuta Commercio Interno" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Giocatore" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Quotazione" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s per %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Scambio rifiutato" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Materie prime" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Totale" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Ammontare in mano" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "più>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Incrementa l'ammontare selezionato" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Ammontare selezionato" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Ammontare selezionato totale" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "La banca non può essere svuotata" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Sì" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "No" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Sconosciuto" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Nessuna partita in corso..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Impostazioni generali" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Numero di giocatori:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Obiettivo punti vittoria:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Terreno casuale:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Permetti commercio tra i giocatori:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Permetti commercio solo prima di costruire/comprare:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Verifica la vittoria solo alla fine del turno:" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Quantità per ogni materia prima:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Regola sette:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Usa i pirati per bloccare le navi:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonus per scoperta isole:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Quotazioni costruzioni" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Strade:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Colonie:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Città:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Fortificazioni:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Navi:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Ponti:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Mazzo carte sviluppo" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Carte costruzione di strade:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Carte monopolio:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Carte scoperta:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Carte cattedrale:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Carte università di Pioneer:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Carte parlamento:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Carte biblioteca:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Carte mercato:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Carte cavaliere:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Impostazioni per la partita corrente" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "chiedi %s gratis" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "cede %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "cede %s per %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Io voglio %s, dai loro %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Quotazione ricevuta da %s." #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Chiedi Quotazioni" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Accetta Quotazione" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Termina Contrattazioni" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Costruzione di strade" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Scoperta" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Costruisci due nuove strade" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" "Seleziona una risorsa e prendi ogni carta di quel tipo posseduta dagli altri " "giocatori" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" "Prendi due carte risorsa a scelta dalla banca (sia dello stesso tipo che " "diverse)" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "Un punto vittoria" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Muovi il brigante in un'area differente e prendi una risorsa da un altro " "giocatore adiacente a quell'area" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "Regola obsoleta: '%s'\n" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" "La partita utilizza la nuova regola '%s' che non è ancora supportata. " "Aggiorna il gioco.\n" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Questa partita non può essere vinta." #: ../common/game.c:891 msgid "There is no land." msgstr "Non c'è più terreno." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "E' possibile che questa partita non possa essere vinta." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Questa partita può essere solo vinta costruendo tutte le colonie e le città" #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Punti vittoria richiesti: %d\n" "Punti ottenuti costruendo tutto: %d\n" "Punti nelle carte sviluppo: %d\n" "Strada più lunga/cavaliere più potente: %d+%d\n" "Massimo bonus per scoperta isole: %d\n" "Totale: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers è basato sull'eccellente gioco\n" "I Coloni di Catan.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Versione:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Homepage:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Autori:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "Giancarlo Capella" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers è stato tradotto in italiano da:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Analisi Punti Vittoria" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Tutti i sette muovono il brigante o i pirati" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "Nei primi due turni tutti i sette vengono ritirati" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Tutti i sette vengono ritirati" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Terreno casuale" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Rende il terreno casuale" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Usa pirata" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Usa il pirata per bloccare le navi" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Commercio rigoroso" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Commercio permesso solo prima di costruire/comprare" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Commercio interno" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Commercio permesso tra i giocatori" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Vittoria alla fine del turno" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Verifica la vittoria solo alla fine del turno" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Bonus per scoperta isole" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "Lista di punti bonus per la scoperta isole, separati da virgola" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "Controlla e corregge i bonus per la scoperta isole" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Numero di giocatori" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Il numero di giocatori" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Obiettivo punti vittoria" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "I punti per vincere la partita" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "E' possibile vincere questa partita?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "A" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "G" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "M" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "La" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Le" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Seleziona un meta server" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Seleziona una partita" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERRORE* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Chat: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Materia prima: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Costruzioni: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dadi: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Furti: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Commercio: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Sviluppo: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Cavaliere: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Strada: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BEEP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Giocatore 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Giocatore 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Giocatore 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Giocatore 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Giocatore 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Giocatore 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Giocatore 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Giocatore 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Spettatore: " #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** TIPO MESSAGGIO SCONOSCIUTO ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Errore verifica stato connessione: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Errore connessione a host '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Errore scrittura socket: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Errore scrittura su socket: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Overflow del buffer di lettura - disconnessione\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Errore lettura socket: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Errore creazione socket: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Errore nell'impostazione close-on-exec per il socket: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Errore nell'impostazione non-blocking per il socket: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Errore di connessione a %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Impossibile risolvere %s porta %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Impossibile risolvere %s porta %s: host non trovato\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Errore nella creazione della struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Errore nella creazione del socket di ascolto: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Errore di ascolto sul socket: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Ascolto non ancora supportato su questa piattaforma." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "sconosciuto" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Errore recupero nome: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Errore in risoluzione dell'indirizzo: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name non ancora supportato su questa piattaforma." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Errore accettando la connessione: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Connessione a %s, porta %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" "Overflow dello stack di stato. Dump dello stack inviato sullo standard " "error.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "Co_llina" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Campo" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Montagna" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pascolo" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Foresta" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Deserto" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "M_are" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Oro" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Nulla" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Argilla (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Grano (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Minerale (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Lana (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "L_egno (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Qualunque (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "E" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NE" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NO" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "O" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SO" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SE" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Inserisce una riga" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Cancella una riga" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Inserisce una colonna" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Cancella una colonna" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Mescola" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Parametri di partita" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Regole" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Materie prime" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Costruzioni" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Editor Pioneers" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Impossibile caricare '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Impossibile salvare '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "Partite" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "Non filtrati" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Carica partita" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Salva come..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Cambia Titolo" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Nuovo titolo:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Riguardo Pioneers Editor" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_File" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Nuovo" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Crea una nuova partita" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Apri..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Apri una partita esistente" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Salva" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Salva partita" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "S_alva come..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Salva come" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Cambia Titolo" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Cambia il titolo della partita" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "_Verifica Obiettivo Punti Vittoria" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Verifica se la partita può essere vinta" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Esci" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Riguardo Pioneers Editor" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informazioni su Pioneers Editor" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Apri questo file" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "nome file" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor per le partite di Pioneers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Costruzione menù fallita: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Impostazioni" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "Commenti" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Conto materie prime" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Crea la tua partita di Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Demonizza il meta-server all'avvio" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Pidfile per la demonizzazione (implica -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Redirigi i client ad un altro meta-server" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Utilizza questo hostname creando nuove partite" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "hostname" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Usa queste porte creando nuove partite" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "da-a" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Messaggi di debug su syslog" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta server per Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "protocollo meta-server:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Registrazione Avahi effettuata.\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "Collisione nome servizio Avahi, rinominato in '%s'.\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Errore Avahi: %s\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Errore Avahi: %s, %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "Impossibile registrare il server Avahi" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Disconnessione Avahi.\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Riguardo Server Pioneers" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Informazioni sul Server Pioneers" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Ferma Server" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Avvia Server" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Ferma il server" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Avvia il server" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Entrato giocatore %s da %s\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Uscito giocatore %s da %s\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Giocatore %d è ora %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "La porta del server di partita" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Registra server" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registra questa partita sul meta server" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Hostname riportato" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Il nome pubblico di questo computer (necessario giocando attraverso un " "firewall)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Rendi casuale l'ordine dei turni" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Rendi casuale l'ordine dei turni" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Visualizza tutti i giocatori e gli spettatori connessi" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Connesso" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Il giocatore è attualmente connesso?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Nome" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Nome del giocatore" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Postazione" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Nome del computer del giocatore" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Numero" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Numero del giocatore" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Ruolo" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Giocatore o spettatore" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Avvia Client Pioneers" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Avvia il client di Pioneers" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Abilita chat" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Abilita i messaggi chat" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Aggiungi Giocatore AI" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Aggiungi alla partita un giocatore controllato dal computer" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Messaggi dal server" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Impostazioni partita" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Parametri server" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Partita in corso" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Giocatori connessi" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Giocatori AI" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Messaggi" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Server della partita di Pioneers" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "La partita è finita.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Ospita una partita di Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Server Pioneers" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Ospita una partita di Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Nome della partita" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "File di partita da usare" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Porta su cui ascoltare" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Forza il numero di giocatori" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Forza il numero di punti vittoria" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Forza la gestione della regola sette" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Forza il tipo di terreno, 0=default 1=casuale" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Aggiungi N giocatori AI" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registra il server sul meta server" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registra sul metaserver con nome (implica -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Usa questo hostname per la registrazione" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Esci quando un giocatore vince" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Esci dopo N secondi senza giocatori" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Modalità torneo, giocatori AI aggiunti dopo N secondi" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Porta di admin su cui ascoltare" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "Non iniziare la partita immediatamente, aspetta un comando dalla porta di " "amministrazione" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "" "Assegna il numero di giocatore secondo l'ordine di entrata nella partita" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Opzioni meta-server" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opzioni per il meta-server" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Opzioni generiche" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Opzioni generiche" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" "Impossibile impostare contemporaneamente il nome della partita e del file\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Impossibile caricare i parametri della partita\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "Porta di amministrazione non disponibile.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "Porta di amministrazione non impostata, impossibile disabilitare l'inizio " "della partita\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registra sul meta-server %s, porta %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Deregistra dal metaserver\n" #: ../server/player.c:140 msgid "chat too long" msgstr "messaggio troppo lungo" #: ../server/player.c:157 msgid "name too long" msgstr "nome troppo lungo" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "estensione sconosciuta ignorata" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "L'ultimo giocatore ha lasciato, il timer del torneo è stato resettato." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "Nessun giocatore umano presente. Addio." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "La partita inizia, aggiungo giocatori AI." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "La partita inizia tra %s minuti." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "La partita inizia tra %s minuto." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Giocatore AI" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Mi dispiace, la partita è terminata." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Giocatore da %s rifiutato: la partita è terminata\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Nome non variato: il nuovo nome è già in uso" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Rimasto in attesa senza giocatori per troppo tempo... addio.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" "L'ultimo giocatore umano ha lasciato. In attesa del ritorno di un giocatore." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Recupero partita." #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s si è riconnesso." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versione non corrispondente: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Questa partita inizierà presto." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Partita in preparazione" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Ricerca partite in '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Directory '%s' non trovata\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonus scoperta isole" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bonus aggiuntivo isole" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Si è cercato di assegnare le materie prime al giocatore NULL\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "Il tiro dei dadi è stato determinato dall'amministratore." #~ msgid "Viewer %d" #~ msgstr "Spettatore %d" #~ msgid "viewer %d" #~ msgstr "spettatore %d" #~ msgid "I want" #~ msgstr "Voglio" #~ msgid "Give them" #~ msgstr "Dai loro" #~ msgid "Viewer: " #~ msgstr "Spettatore: " #~ msgid "Number of AI Players" #~ msgstr "Numero di Giocatori AI" #~ msgid "The number of AI players" #~ msgstr "Numero di Giocatori AI" #~ msgid "Recent Games" #~ msgstr "Partite Recenti" #~ msgid "You may choose 1 resource" #~ msgstr "Puoi scegliere 1 materia prima" #~ msgid "_Player name" #~ msgstr "Nome _Giocatore" #~ msgid "The Pioneers Game" #~ msgstr "Pioneers - Il gioco" #~ msgid "Select the ship to steal from" #~ msgstr "Seleziona la nave da cui rubare" #~ msgid "Select the building to steal from" #~ msgstr "" #~ "Seleziona la costruzione\n" #~ "da cui rubare" #~ msgid "Development Card" #~ msgstr "Carta Sviluppo" #~ msgid "Player Name:" #~ msgstr "Nome Giocatore:" #~ msgid "I Want" #~ msgstr "Voglio" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Commercio tra giocatori?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Commercio permesso solo prima di costruire/comprare?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Verifica la vittoria solo alla fine del turno?" #~ msgid "Sevens Rule:" #~ msgstr "Regola Sette:" #~ msgid "Use Pirate:" #~ msgstr "Usa i pirati:" #~ msgid "Number of Players" #~ msgstr "Numero di Giocatori" #~ msgid "Development Cards" #~ msgstr "Carte Sviluppo" #~ msgid "Save as..." #~ msgstr "Salva come..." #~ msgid "Pioneers Game Editor" #~ msgstr "Editor Pioneers" #~ msgid "_Change title" #~ msgstr "_Cambia titolo" #~ msgid "Random Turn Order" #~ msgstr "Ordine casuale dei turni" #~ msgid "_Legend" #~ msgstr "_Legenda" #~ msgid "bad scaling mode '%s'" #~ msgstr "modo '%s' non riconosciuto" #~ msgid "Missing game directory\n" #~ msgstr "Manca la directory di partita\n" #~ msgid "Leave empty for the default meta server" #~ msgstr "Lascia vuoti per il meta server di default" #~ msgid "Override the language of the system" #~ msgstr "Scavalca la lingua del sistema" #~ msgid "The address of the meta server" #~ msgstr "L'indirizzo del meta server" pioneers-14.1/po/ja.po0000644000175000017500000027516711760645356011613 00000000000000# Pioneers - Settlers of Catan for GNOME. # Copyright (C) 1999-2001 Dave Cole # Copyright (C) 2000-2002 Andy Heroff # This file is distributed under the same license as the pioneers package. # Yasuhiko Takasugi , 2006-2007. # # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.11.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2007-07-20 05:45+0900\n" "Last-Translator: Yasuhiko Takasugi \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "サーバ ホスト" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "サーバ ポート" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 #, fuzzy msgid "Computer name (mandatory)" msgstr "コンピュータ名(自動でつける場合は空白にしてください。)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "ターン間の待ち時間(ミリ秒単位)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "会話からコンピュータプレイヤーを停止" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "コンピュータプレイヤーの種類" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "デバッグメッセージを可能にする" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "バージョン情報を表示" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- パイオニアのコンピュータプレイヤー" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "パイオニアバージョン" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "コンピュータプレイヤーの種類: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "ゲームはすでに一杯です。私は抜けます。" #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "セットアップのためにこれ以上たまっている植民地はありません。" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "植民地を配置する余地がありません。" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "セットアップのためにこれ以上たまっている道はありません。" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "道を設置する余地はありません。" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "OK, レッツゴー!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "やっつけてやる!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "別なトライ開始中..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "少なくとも何かとれた..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "いいものが何もない..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "おぉ!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "いぇい、金持ちになった。" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "良い年だ!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "そんなに受け入れられない!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "こんなに多くの資源で何をすればいいかわからない。" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "あぁ、盗賊を待つか、また、全部なくした!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "へへ!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "いけ、盗賊だ!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "ろくでなし!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "盗賊をどっか他に移せないの?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "何でいつも私??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "オー、ノー!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "がー!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "7 の目をだしたのはだれだ??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "何でいつも私?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "いただきー" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*evilgrin*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me あなたのカードにさよなら;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "金持ちになるための費用か..." #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "ああ!カードはどこにいっていまったの?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "泥棒!泥棒!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "復讐してやる...." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "おー、のー" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "今、これがおこるのか??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "へへ、兵士を支配!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "最初に私たちが奪われ、そうしてポイントが奪われる..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "道をみろ!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "ふぅ、道だけじゃ勝てないよ.." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "交易拒否\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "サーバ: %s からエラーを受け取った. 終了する。\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "イッピー!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "おめでとう" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "こんにちは、ようこそロビーへ。私は単純なロボットです。私が知っているコマンド" "の一覧を見るためには、チャットで'/help'と打ち込んでください。" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' は、このメッセージを再度表示します。" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why'は、この不思議なボード配置の目的を説明する" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news'は、最新のリリースバージョンを表示" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "このボートはゲームをするには向いていない。その代わり、プレイヤーはここで他の" "プレイヤーを見つけて、どのボードで遊びたいかをきめる。そうして、プレイヤーの" "一人がサーバをスタートさせることでホストになり、それをメタサーバに登録する。" "その次に、他のプレイヤーはロビーからはなれ、ゲームを開始する。" #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "パイオニアの最新バージョンは" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "ゲーム開始。私の仕事は終わり。では。" #: ../client/common/client.c:106 msgid "Waiting" msgstr "待機中" #: ../client/common/client.c:108 msgid "Idle" msgstr "待機" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "ゲームからはじき出された。\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "オフライン" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "エラー (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "警告: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s はどんな %s をも受け取らない, なぜなら、山は空だから。\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s は、 %sだけ受け取る, なぜなら、山はもうなにもなくなったから。\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s は、 %s を受けとった。\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s は、%s をとる。\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s は、 %s を使用した。.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s は %s を見つけられた.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s は、 %s を失った.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s は、勝利ポイント %d で勝利した!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "ロード中" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "バージョン不整合." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "バージョン不整合。クライアントをチェックしてください。\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "2つの植民地を建てとそれらをつなぐ" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "接続した植民地を建築" #: ../client/common/client.c:1416 msgid "road" msgstr "道" #: ../client/common/client.c:1418 msgid "bridge" msgstr "橋" #: ../client/common/client.c:1420 msgid "ship" msgstr "船" #: ../client/common/client.c:1427 msgid " or" msgstr " または" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "あなたの順番待ち." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "強奪する建築物を選択" #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "強奪する船を選択" #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "盗賊配置." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "道建設終了" #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "道1つ建築" #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "道2つ建築" #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "あなたの番" #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "すみません、 %s 使用可能\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "ゲーム終了" #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "%s 開発カードを買った\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "%s 開発カードを買った。\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s は、開発カードを買った。\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s は、開発カード %s を使った\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s は、開発カード %s を使った。\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "建設できる道がありません。\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "%s を %s から得た。\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s は、あなたから %s を奪った\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s は、%s を %sからとった。\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "プレイヤー %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "プレイヤー %d" #: ../client/common/player.c:214 #, fuzzy, c-format msgid "New spectator: %s.\n" msgstr "新しい観戦者: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s は、今 %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "プレイヤー %d は、今、 %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s は、止めた.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "最大兵力なし\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s が最大兵力\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "最長道はない\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s は、最長道をもった。\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "%s を待ってる." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s は、資源を %s から盗んだ。\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "%s を %s から盗んだ。\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s は、%s をあなたから盗んだ。\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s は、%s に何も与えない!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s は、無料で %s に %s をあげた。\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s は、 %s に %s を %s と交換で与えた。\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s は、%s を %sに交換した。\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s は、道を建築した。\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s は、船を造船した。\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s は、植民地を建築した。\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s は、都市を建築した。\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s は、都市城壁を建築した。\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add called with BUILD_NONE for user %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s は、橋を建築した。\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s は、道を取り除いた。\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s は、船を取り除いた。\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s は、植民地を取り除いた。\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s は、都市を取り除いた。\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s は、都市城壁を取り除いた。\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove alled with BUILD_NONE for user %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s は、橋を取り除いた。\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s は、船の移動を取り消した。\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s は、船を移動した。\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s は、%s を受け取った。.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "サーバは不正な接続といってる\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s は、%s を失った。\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "サーバは不正な端末を削除してよいかと訪ねている\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s は、%s に %s で負ける。\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "煉瓦" #: ../client/common/resource.c:35 msgid "Brick" msgstr "煉瓦" #: ../client/common/resource.c:36 msgid "grain" msgstr "麦" #: ../client/common/resource.c:36 msgid "Grain" msgstr "麦" #: ../client/common/resource.c:37 msgid "ore" msgstr "鉱石" #: ../client/common/resource.c:37 msgid "Ore" msgstr "鉱石" #: ../client/common/resource.c:38 msgid "wool" msgstr "羊毛" #: ../client/common/resource.c:38 msgid "Wool" msgstr "羊毛" #: ../client/common/resource.c:39 msgid "lumber" msgstr "木材" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "木材" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "no resource (bug)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "no resource (bug)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "any resource (bug)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Any resource (bug)" #: ../client/common/resource.c:42 msgid "gold" msgstr "金" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "金" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "煉瓦カード" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d 枚煉瓦カード" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "麦カード" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d 枚麦カード" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "鉱石カード" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d 枚鉱石カード" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "羊毛カード" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d 枚羊毛カード" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "木材カード" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d 枚木材カード" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "なし" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s そして、%s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s は、盗賊を移動を取り消した。\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s は、盗賊を移動した。\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s は、海賊の移動を取り消した。\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s は、海賊を移動した。\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s は、盗賊を移動しなけばならない。" #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "%s の準備.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "%s の二重設定\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s は、%d をだした。.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "%2$s に対して ターン %1$d が始まる.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "チャット" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Beeper test.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s が貴方を呼び出した.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "%s を呼び出す.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "%s を呼び出すことができない.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " 言った:· " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "メタサーバ %s, ポート %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "終了\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "メタサーバが我々をけり出した。\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "メタサーバからゲーム名を受信中.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "新しいゲームサーが %s ポート %s で要求されている\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "メタサーバからの不明メッセージ: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "メタサーバのリダイレクトが多すぎる\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "不正なリダイレクト: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "メタサーバは古すぎてサーバ(バージョン %d.%d)を作ることができない\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "通常" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "最初の2ターンふり直し" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "すべての7の目でふり直し" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "標準" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "ランダム" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "%s のポート %s のメタサーバにリダイレクト\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "メタサーバからパイオニアサーバの一覧を取得中\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "注意:\n" "\tメタサーバはゲームについての情報を送らない。\n" "\t自分で必要な値を設定してください。" #. Label #: ../client/gtk/connect.c:726 #, fuzzy msgid "Number of computer players" msgstr "コンピュータプレイヤーの種類" #. Tooltip #: ../client/gtk/connect.c:746 #, fuzzy msgid "The number of computer players" msgstr "プレイヤー数" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "新しいゲームサーバを要求中\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Error starting %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "公開ゲーム作成" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "公開ゲームに参加" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_New remote game" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "ゲームリストを更新" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "メタサーバに新しい公開ゲームを作成" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "公開ゲームに参加しない" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "公開ゲームに参加" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "参加するゲームを選択" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "地図名" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "ゲームの名前" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "現在" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "ゲーム内のプレイヤーの数" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "最大" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "ゲームの最大プレイヤー数" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "地形" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "標準陸地のランダム" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "勝利得点" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "勝利に必要なポイント" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "7ルール" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "7ルール" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "ホスト" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "ゲームホスト" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "ポート" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "ゲームサーバのポート" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "バージョン" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "ホストのバージョン" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "新ゲーム開始" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "プレイヤー名" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "あなたの名前を入力" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "" #: ../client/gtk/connect.c:1280 #, fuzzy msgid "Check if you want to be a spectator" msgstr "観戦したいですか?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "メタサーバ" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "公開ゲームに参加" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "公開ゲームに参加" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "公開ゲーム作成" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "公開ゲーム作成" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "非公開ゲームに参加" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "非公開公開ゲームに参加" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "サーバ ホスト" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "ゲームホストの名前" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "サーバ ポート" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "ゲームホストのポート" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "最近行ったゲーム" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "開発カード" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "使用カード" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "リソース廃棄" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "%d 資源を捨てなければならない。" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "総廃棄数" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "プレイヤーの廃棄待ち" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "ゲーム終了" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s は、勝利ポイント %d で勝利した!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "すばらしい %s,世界の支配者!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "資源選択" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "%d 資源を選択してください" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "資源合計" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "プレイヤー選択待ち" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Game" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_New game" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "新ゲーム開始" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Leave·Game" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "このゲームを去る" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "管理パイオニアサーバ" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "プレイヤー名 (_P)" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "プレイヤー名変更" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "領域 (_E)" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "陸地領域と建築コスト" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Game·Settings" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "現在のゲーム設定" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Dice·Histogram" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "ダイス投射ヒストグラム" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Quit" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "プログラム終了" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Actions" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "ダイス投射" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "ダイス投射" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "交易" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "やり直し" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "終了" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "道" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "道路建築" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "船" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "造船" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "船移動" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "船移動" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "橋" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "橋建築" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "植民地" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "植民地建築" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "都市" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "都市建築" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "開発" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "開発カード購入" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "都市城壁" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "都市城壁建築" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Settings" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Prefere_nces" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "アプリケーション設定" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 #, fuzzy msgid "_View" msgstr "観戦者" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "ヘルプ(_H)" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "パイオニアについて(_A)" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "パイオニアに関しての情報" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "マニュアルを見る" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Toolbar" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "ツールバー可視不可視" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "勝利に必要なポイント: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "メッセージ" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "地図" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Finish·Trading" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "見積もり" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "内地交易拒否" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "領域" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "パイオニアへようこそ" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "パイオニア設定" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "テーマ:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "テーマの1つを選択" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "領域を見る" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "地図の傍にページとして領域を見せます" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "色付きメッセージ" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "色付きで新しいメッセージを見せる" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "プレイヤーの色でチャット" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "プレイヤーの色でチャットの新しいメッセージを表示" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "色付きサマリー" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "プレイヤー概要に色をつかう" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "ショートカット付きツールバー" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "ツールバーでキーボードショートカット表示" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 #, fuzzy msgid "Silent mode" msgstr "ファイル名" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "新しプレイヤーをアナウンス" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 #, fuzzy msgid "Make a sound when a new player or spectator enters the game" msgstr "新しプレイヤーや観戦者がゲームにはいったときに音をならす" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 #, fuzzy msgid "Show notifications" msgstr "バージョン情報を表示" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "16:9 レイアウトを使用" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "ウィンドウに16:9の使い易いレイアウトを使用" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "パイオニアについて" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "ようこそパイオニアへ!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "パイオニア" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "ダイスヒストグラム" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "船移動を取り消し" #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "船の新しい配置を選択" #. Notification #: ../client/gtk/interface.c:892 #, fuzzy msgid "It is your turn to setup." msgstr "あなたの番" #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "丘" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "草原" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "山" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "牧草地" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "森林" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "砂漠" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "海" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "陸地収穫" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "建築コスト" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "都市城壁" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "開発カード" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "モノポリー" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "集めたい資源を選択" #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "プレイヤー名を変更" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "プレイヤー名:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "顔:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "変更:" #: ../client/gtk/offline.c:62 #, fuzzy msgid "Connect as a spectator" msgstr "観戦者として接続" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "メタサーバ ホスト" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "参加するゲームを選択" #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "接続" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- パイオニアのゲームを楽しむ" #: ../client/gtk/pioneers.desktop.in.h:2 #, fuzzy msgid "Play a game of Pioneers" msgstr "- パイオニアのゲームを楽しむ" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "植民地" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "都市" #: ../client/gtk/player.c:55 #, fuzzy msgid "City walls" msgstr "都市城壁" #: ../client/gtk/player.c:56 #, fuzzy msgid "Largest army" msgstr "最大兵力" #: ../client/gtk/player.c:57 #, fuzzy msgid "Longest road" msgstr "最長道路" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "教会" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "教会" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "パイオニア大学" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "パイオニア大学" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "官舎" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "官舎" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "図書館" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "図書館" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "市場" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "市場" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "兵士" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "兵士達" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "資源カード" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "資源カード" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "開発カード" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "プレイヤー概要" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "豊年" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "山から1つ資源を選択してください" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "山から2つの資源をを選択してください" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "山が空です" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s は、 %s をもっている。 %s を探している" #. Notification #: ../client/gtk/quote.c:217 #, fuzzy, c-format msgid "New offer from %s." msgstr "%s を %s から盗んだ。\n" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "欲しい" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "与えれる" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "削除" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "内地交易拒否" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "プレイヤー" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "見積り" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 で %s を %s に交換" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "交易拒否" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "資源" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "合計" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "手札の合計" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "増加>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "選択総量を増加" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "選択総量" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "選択量の合計" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "山は空にできない" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "はい" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "いいえ" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "不明" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "進行中のゲームなし" #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "一般設定" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "プレイヤー数:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "目標勝利ポイント:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "ランダム陸地:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "プレイヤー間の交易を許可:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "建築/売買の前だけ交易を許可:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "各々の資源の総量:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "7ルール:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "船を止めるために海賊を使う:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "島発見ボーナス:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "建築見積り" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "道:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "植民地:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "都市:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "都市城壁:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "船:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "橋:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "開発カードデッキ" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "道路建築カード:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "モノポリーカード:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "豊年カード:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "教会カード:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "パイオニア大学カード:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "官舎カード:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "図書館カード:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "市場カード:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "兵士カード:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "現在のゲーム設定" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "無料で %s を 求める。" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "無料で %s をあげる。" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "%s に %s を与える" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "%s 欲しい、%s をあげます" #. Notification #: ../client/gtk/trade.c:348 #, fuzzy, c-format msgid "Quote received from %s." msgstr "%s は、%s を受け取った。.\n" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Call·for·Quotes" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Accept·Quote" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Finish·Trading" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "道路建築" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "豊年" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "このゲームに勝利不可能" #: ../common/game.c:891 msgid "There is no land." msgstr "陸地はない" #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "このゲームが勝てないことができる。" #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "全ての植民地や都市を建築するだけではこのゲームに勝てない." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "要求される勝利ポイント: %d\n" "建設によるポイント: %d\n" "開発カードによるポイント: %d\n" "最長道路/最大兵力: %d+%d\n" "最大島数発見ボーナス: %d\n" "合計: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "パイオニアは、カタンの植民 という\n" "すばらしいボードゲームが元になっています.\n" #: ../common/gtk/aboutbox.c:79 #, fuzzy msgid "Version:" msgstr "バージョン" #: ../common/gtk/aboutbox.c:85 #, fuzzy msgid "Homepage:" msgstr "ホームページ" #: ../common/gtk/aboutbox.c:90 #, fuzzy msgid "Authors:" msgstr "著者" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Launchpad Contributions:\n" " Nazo https://launchpad.net/~lovesyao\n" " Yasuhiko Takasugi https://launchpad.net/~takasugi" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "全ての7の目は、盗賊か海賊を移動する。" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "最初の2ターンでは、全ての7の目は振り直し" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "全ての7の目は振り直し" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "ランダム陸地" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "ランダム陸地" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "海賊使用" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "船を止めるために海賊を使う" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "制限交易" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "建築/売買の前だけ交易を許可" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "内地交易" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "プレイヤー間の交易を許可" #: ../common/gtk/game-rules.c:130 #, fuzzy msgid "Victory at end of turn" msgstr "_C 目標勝利ポイントチェック" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "島発見ボーナス:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "島発見ボーナス:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "プレイヤー数" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "プレイヤー数" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "目標勝利ポイント" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "ゲーム勝利に必要なポイント" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "このゲームに勝利可能か?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "煉瓦港|B" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "小麦港|G" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "鉱石港|O" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "羊毛港|W" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "木材港|L" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 #, fuzzy msgid "Select a meta server" msgstr "サーバ開始" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "ゲーム選択" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERROR*· " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "チャット: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "資源: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "建設: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "ダイス: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "盗賊: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "交易: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "開発: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "兵士: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "道:· " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BEEP*· " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "プレイヤー 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "プレイヤー 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "プレイヤー 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "プレイヤー 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "プレイヤー 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "プレイヤー 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "プレイヤー 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "プレイヤー 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "**·UNKNOWN·MESSAGE·TYPE·**· " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "接続状態検査エラー: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "ホスト %sへの接続エラー: %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "ソケット書き込みエラー: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "ソケット書き込エラー: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Read·buffer·overflow·-·disconnecting\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "ソケット読み込みエラー: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "ソケット作成エラー: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Error·setting·socket·close-on-exec:·%s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Error·setting·socket·non-blocking:·%s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "%s への接続エラー: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "%s ポート %s を解決できない: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "%s ポート %s を解決できない: ホストが見つからない\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Error·creating·struct·addrinfo:·%s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "リスニングソケット作成エラー: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "ソケットを聞いている最中のエラー: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "リスニングはこのプラットフォームではまだサポートされていない" #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "不明" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "peer 名の取得エラー: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "アドレス解決エラー: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "" "Net_get_peer_name は、このプラットフォームではまだサポートされていない。" #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "接続受付エラー: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "%s, ポート %s に接続\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "状態スタックオーバフロー。標準エラー出力にスタックダンプを送ります。\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Hill" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Field" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Mountain" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pasture" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "F_orest" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Desert" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Sea" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Gold" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_None" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Brick·(2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Grain·(2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Ore·(2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Wool·(2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Lumber·(2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Any·(3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "東" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "北東" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "北西" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "西" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "南西" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "南東" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 #, fuzzy msgid "Delete a row" msgstr "削除" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "シャッフル" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "ゲームパラメータ" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "ルール" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "資源" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "建設" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "パイオニアエディタ" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "'%s' をロードできない" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "'%s' を保存できない" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Game" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "ゲームを開く" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Save·As..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "タイトルを変更" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "新しいタイトル:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "About·Pioneers·Editor" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_File" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_New" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "新ゲーム作成" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Open..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "存在するゲームを開く" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Save" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "ゲームを保存" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Save·_As..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "別名" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_C タイトルを変更" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "ゲームタイトルを変更" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "_C 目標勝利ポイントチェック" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "ゲームに勝利したかどうかチェック" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "終了" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_About·Pioneers·Editor" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "パイオニアエディタの付いての情報" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "このファイルを開く" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "ファイル名" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- パイオニアゲームのエディタ" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "メニュー構築に失敗: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "設定" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "資源数" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 #, fuzzy msgid "Create your own game for Pioneers" msgstr "- パイオニアゲームのエディタ" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 #, fuzzy msgid "Daemonize the meta-server on start" msgstr "メタサーバをデーモンとして開始" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 #, fuzzy msgid "Redirect clients to another meta-server" msgstr "クライアントを他のメタサーバに転送" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "新しゲームを作成するときこのホスト名を使用" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "ホスト名" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 #, fuzzy msgid "Use this port range when creating new games" msgstr "新しいゲームを作成するときにこのポートの範囲を使用" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "from-to" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Debug·syslog·messages" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- パイオニアのメタサーバ" #: ../meta-server/main.c:1135 #, fuzzy, c-format msgid "meta-server protocol:" msgstr "メタサーバプロトコル:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, fuzzy, c-format msgid "Avahi error: %s, %s\n" msgstr "エラー (%s): %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 #, fuzzy msgid "Unable to register Avahi server" msgstr "メタサーバから登録不能\n" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_About·Pioneers·Server" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "パイオニアサーバに関する情報" #: ../server/gtk/main.c:229 #, fuzzy msgid "Stop Server" msgstr "サーバ停止" #: ../server/gtk/main.c:230 #, fuzzy msgid "Start Server" msgstr "サーバ開始" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "サーバ停止" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "サーバ開始" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "%s からプレイヤー %s が参加.\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "%s からのプレイヤー %s を残す\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "プレイヤー %d は、今、 %s.\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "ゲームサーバのポート" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "登録サーバ" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "メタサーバにこのゲームを作成" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "報告されたホスト名" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "このコンピュータの公開名(ファイアーウォールを越えて行う時に必要)" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "ランダムなターン順番" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "ランダムなターン順番" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 #, fuzzy msgid "Shows all players and spectators connected to the server" msgstr "サーバに接続している全てのプレイヤーと観戦者を表示" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "接続" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "プレイヤーは現在接続しているか?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "名前" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "ゲームの名前" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "場所" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "プレイヤーのホスト名" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "数" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "プレイヤー数" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "役割" #. Tooltip for column Role #: ../server/gtk/main.c:765 #, fuzzy msgid "Player or spectator" msgstr "観戦者" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "パイオニアゲーム クライアント起動" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "パイオニアゲーム クライアント起動" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "チャット可" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "チャットを可能にする" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "コンピュータ プレイヤー追加" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "ゲームにコンピュータプレイヤーを追加" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "メタサーバからのメッセージ" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "ゲーム設定" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "サーバパラメータ" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "ゲーム進行中" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "プレイヤー接続" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "コンピュータ プレイヤー" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "メッセージ" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "パイオニアゲームサーバ" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "ゲーム終了\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- パイオニアゲームを主催する" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "パイオニアサーバ" #: ../server/gtk/pioneers-server.desktop.in.h:2 #, fuzzy msgid "Host a game of Pioneers" msgstr "- パイオニアゲームを主催する" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "使用するゲームタイトル" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "使用するゲームファイル" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "待ち受けるポート" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "プレイヤーの数無効にする" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "勝利ポイント数を無効" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "7の目ルールのハンドルを上書き" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "陸地領域を上書き,·0=初期·1=ランダム" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "N コンピュータプレイヤーを追加" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "メタサーバにサーバを追加" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "メタサーバ名を登録(-r を付ける)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "登録時にこのホスト名を利用" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "プレイヤーが勝利した後に終了" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "プレイヤーがいなくなった後、N 秒で終了" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "トーナメントモード、N 分後にコンピュータプレイヤーを追加" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "待ち受け管理ポート" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "直ぐにはゲームを開始できません、管理ポートへのコマンドを待っています" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "ゲームに参加する順番のためにプレイヤー数を入力してください" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "メタサーバオプション" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "メタサーバへのオプション" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "様々なオプション" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "様々なオプション" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" #. server-console commandline error #: ../server/main.c:242 #, fuzzy, c-format msgid "Cannot load the parameters for the game\n" msgstr "ゲームホストのポート" #. Error message #: ../server/main.c:275 #, fuzzy, c-format msgid "Admin port not available.\n" msgstr "すみません、 %s 使用可能\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "%s のポート %s でメタサーバに登録\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "メタサーバから登録不能\n" #: ../server/player.c:140 msgid "chat too long" msgstr "長すぎるチャット" #: ../server/player.c:157 msgid "name too long" msgstr "長すぎる名前" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "不明な拡張子を無視" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "" #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 #, fuzzy msgid "Game starts, adding computer players." msgstr "ゲーム開始、コンピュータプレイヤー追加" #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "%s 分以内にゲーム開始" #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "%s 分以内にゲーム開始" #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "コンピュータ プレイヤー" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "すみません、ゲーム終了" #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "%s のプレイヤーは拒否: ゲーム終了\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "変更不可能な名前: 新しい名前は既に使用されてる" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "プレイヤーなしで長くとまりすぎ....ばい.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s は、再接続。" #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "バージョン不整合: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "このゲームは直ぐに始まる" #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "ゲーム準備" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "島発見ボーナス" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "島追加ボーナス" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "NULL プレイヤーに、資源を使わせようとした\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "" #~ msgid "Viewer %d" #~ msgstr "観戦者 %d" #~ msgid "viewer %d" #~ msgstr "観戦者 %d" #~ msgid "I want" #~ msgstr "欲しい" #~ msgid "Give them" #~ msgstr "与える" #~ msgid "Viewer: " #~ msgstr "観戦者: " #~ msgid "Number of AI Players" #~ msgstr "AIプレイヤーの数" #~ msgid "The number of AI players" #~ msgstr "AIプレイヤーの数" #~ msgid "Recent Games" #~ msgstr "最近行ったゲーム" #~ msgid "You may choose 1 resource" #~ msgstr "1つリソースを選択してください" #~ msgid "_Player name" #~ msgstr "_Player·name" #~ msgid "The Pioneers Game" #~ msgstr "パイオニアゲーム" #~ msgid "Select the ship to steal from" #~ msgstr "強奪する船を選択" #~ msgid "Select the building to steal from" #~ msgstr "強奪する建築物を選択" #~ msgid "Development Card" #~ msgstr "開発カード" #~ msgid "Player Name:" #~ msgstr "プレイヤー名:" #~ msgid "I Want" #~ msgstr "欲しい" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "プレイヤー間交易を許可しますか?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "建築物/売買の前だけ交易を許可" #~ msgid "Sevens Rule:" #~ msgstr "7ルール:" #~ msgid "Use Pirate:" #~ msgstr "海賊使用:" #~ msgid "Number of Players" #~ msgstr "プレイヤー数" #~ msgid "Development Cards" #~ msgstr "開発カード" #~ msgid "Save as..." #~ msgstr "別名で保存" #~ msgid "Pioneers Game Editor" #~ msgstr "パイオニアエディタ" #~ msgid "_Change title" #~ msgstr "_Change·title" #~ msgid "Random Turn Order" #~ msgstr "ランダムなターン順番" #~ msgid "_Legend" #~ msgstr "_Legend" #~ msgid "bad scaling mode '%s'" #~ msgstr "不正スケーリングモード '%s'" #~ msgid "Missing game directory\n" #~ msgstr "ゲームディレクトリが不明\n" #~ msgid "Leave empty for the default meta server" #~ msgstr "初期メタサーバを利用する場合、空にしておく" #~ msgid "Override the language of the system" #~ msgstr "システムの言語を上書き" #~ msgid "The address of the meta server" #~ msgstr "メタサーバのアドレス" pioneers-14.1/po/nl.po0000644000175000017500000027264011760645356011623 00000000000000# Translation to dutch # Copyright (C) 2003 Bas Wijnen # This file is distributed under the same license as the pioneers package. # Bas Wijnen , 2003-2004 # Roland Clobus , 2005-2012 # msgid "" msgstr "" "Project-Id-Version: Pioneers 14.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2011-10-22 15:36+0100\n" "Last-Translator: Roland Clobus \n" "Language-Team: Bas Wijnen Roland Clobus \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Server Host" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Server Poort" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Computerspelernaam (verplicht)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Tijd tussen twee beurten (in milliseconde)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Laat computerspeler zwijgen" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Soort computerspeler" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Toon debug boodschappen" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Versie-informatie weergeven" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Computerspeler voor Pioniers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioniers versie:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Een naam moet gegeven worden.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Soort computerspeler: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Het spel is al vol. Ik blijf niet kijken." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Er zijn geen dorpen beschikbaar om te bouwen" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Er is geen plek om een dorp te bouwen" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Er zijn geen wegen beschikbaar om te bouwen" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Er is geen plek om een weg te bouwen" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "We gaan ervoor!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Deze keer gaat het me lukken! ;-)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Nog een keer proberen..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Ik krijg ten minste iets..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Iets is beter dan niets..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wauw!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Ha, ik word rijk ;-)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Dit is echt een goed jaar!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Jij zou minder moeten krijgen!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Je weet niet wat je aan moet met al die grondstoffen ;-)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Wacht maar op mijn struikrover, dan raak je het wel weer kwijt!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Toe maar, struikrover!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Schurk!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Kan je die struikrover niet ergens anders neerzetten?" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Waarom moet je mij altijd hebben?" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Oh nee!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Welke idioot rolt er nou weer een 7?" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Waarom gebeurt mij dat altijd?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Zeg maar dag tegen je kaarten... :-)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "Haha!" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me zegt je kaarten vaarwel ;-)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Dat is de prijs van het rijk zijn... :-)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Hé! Waar is die kaart heen?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Houd de dief!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Wacht maar, ik krijg je nog wel..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh nee!" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Moet dat _nu_?" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Arg" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Haha, mijn ridders zijn stoer!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Eerst worden we beroofd, en dan wil je er nog punten voor ook..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Moet je die weg zien!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pff, met alleen wegen win je het spel niet..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Handelsvoorstel wordt afgewezen.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "" "Foutmelding van de server ontvangen: %s. Het programma wordt afgesloten\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Hoera!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Gefeliciteerd" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hallo, welkom in de ontvangstruimte. Ik ben een eenvoudige robot. Typ '/" "help' in de chat om de lijst van commando's te zien." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' toont deze boodschap opnieuw" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' verklaart het doel van dit bord" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' geeft de laatst vrijgegeven versie" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Dit bord is niet bedoeld om op te spelen. In plaats daarvan is het een " "ontmoetingspunt voor spelers die kunnen afspreken welk spel ze willen " "spelen. Vervolgens kan een van de spelers het afgesproken spel hosten door " "een server te starten en die te registreren op de metaserver. Vervolgens " "kunnen de andere spelers de ontvangstruimte verlaten en het spel binnengaan." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "De laatst vrijgegeven versie van Pioniers is" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "Het spel begint. Ik ben niet meer nodig. Tot ziens." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Wachten op reactie van de server." #: ../client/common/client.c:108 msgid "Idle" msgstr "Klaar" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "De verbinding met de server is verbroken.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Er is geen verbinding met een server." #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Fout (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Bericht: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s heeft geen %s ontvangen, omdat de bank leeg is.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s ontvangt slechts %s, omdat de bank niet meer bevat.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s krijgt %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s neemt %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s betaalt %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s krijgt %s terug.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s gooit %s weg.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s heeft gewonnen met %d punten!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Het spel wordt gestart" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versie verschillend." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "De versies van de de server en de client komen niet overeen.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Bouw twee dorpen, elk met een aangesloten" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Bouw een dorp met een aangesloten" #: ../client/common/client.c:1416 msgid "road" msgstr "straat" #: ../client/common/client.c:1418 msgid "bridge" msgstr "brug" #: ../client/common/client.c:1420 msgid "ship" msgstr "schip" #: ../client/common/client.c:1427 msgid " or" msgstr " of" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Wacht op je beurt." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Kies een gebouw om te bestelen." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Kies een schip om te bestelen." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Plaats de struikrover." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Beëindig de bouwkaart" #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Bouw een straat." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Bouw twee straten." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Je bent aan de beurt." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Sorry, %s beschikbaar.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Het spel is afgelopen." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Je hebt de %s ontwikkelingskaart gekocht.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Je hebt een %s ontwikkelingskaart gekocht.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s koopt een ontwikkelingskaart.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s speelt de %s ontwikkelingskaart.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s speelt een %s ontwikkelingskaart.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Je hebt geen straten meer.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Je krijgt %s van %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "Je geeft %s %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%3$s geeft %2$s aan %1$s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Toeschouwer %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "toeschouwer %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Speler %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "speler %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Er is een nieuwe toeschouwer: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s is nu %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Speler %d is nu %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s heeft de verbinding verbroken.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Er is geen grootste riddermacht.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s heeft de grootste riddermacht.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Er is geen langste handelsroute.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s heeft de langste handelsroute.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Wacht op %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s steelt een kaart van %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Je hebt %s van %s gestolen.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s heeft %s van jou gestolen.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s gaf %s niks!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s gaf %s gratis %s.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s gaf %s %s in ruil voor %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s ruilt %s tegen %s met de bank.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s bouwt een weg.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s bouwt een schip.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s bouwt een dorp.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s bouwt een stad.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s bouwt een stadsmuur.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add aangeroepen met BUILD_NONE voor %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s heeft een brug gebouwd.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s haalt een straat weg.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s haalt een schip weg.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s haalt een dorp weg.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s haalt een stad weg.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s haalt een stadsmuur weg.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove aangeroepen met BUILD_NONE voor %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s heeft een brug weggehaald.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s laat het schip toch maar niet varen.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s vaart met een schip.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s krijgt %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "De server probeert een ongeldig punt te verwijderen.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s heeft %s verloren.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "" "De server probeert een ongeldig punt van eigenaar te laten veranderen.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s verliest %s aan %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "baksteen" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Baksteen" #: ../client/common/resource.c:36 msgid "grain" msgstr "graan" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Graan" #: ../client/common/resource.c:37 msgid "ore" msgstr "ijzererts" #: ../client/common/resource.c:37 msgid "Ore" msgstr "IJzererts" #: ../client/common/resource.c:38 msgid "wool" msgstr "wol" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Wol" #: ../client/common/resource.c:39 msgid "lumber" msgstr "hout" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Hout" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "geen grondstof (fout)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Geen grondstof (fout)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "enige grondstof (fout)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Enige grondstof (fout)" #: ../client/common/resource.c:42 msgid "gold" msgstr "goud" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Goud" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "een baksteenkaart" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d baksteenkaarten" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "een graankaart" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d graankaarten" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "een ijzerertskaart" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d ijzerertskaarten" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "een wolkaart" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d wolkaarten" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "een houtkaart" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d houtkaarten" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "niks" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s en %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s heeft de struikrover teruggezet.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s verplaatst de struikrover.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s heeft de piraat teruggezet.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s heeft de piraat bewogen.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s moet de struikrover verplaatsen." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "%s mag opzetten.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "%s mag dubbel opzetten.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s heeft %d gerold.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "%2$s is aan de beurt voor beurt %1$d.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Kies een automatisch ontdekt spel" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) op %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chat" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Pieper test.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s piept je.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Je piept %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Je kon %s niet piepen.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " zegt: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Metaserver op %s, poort %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Klaar.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "De metaserver heeft de verbinding verbroken.\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "De metaserver stuurt de spelnamen door.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Er is een nieuwe server gestart op %s, poort %s.\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Onbekende gegevens ontvangen van de metaserver: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Teveel metaserver omleidingen.\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Foute omleiding: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "De metaserver is te oud om servers te starten (versie %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normaal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Rol de eerste 2 beurten opnieuw" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Rol alle zevens opnieuw" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Standaard" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Willekeurig" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "We worden doorgestuurd naar de metaserver op %s, poort %s.\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "De metaserver stuurt een lijst Pioniers servers.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Opmerkingen:\n" "\tDe metaserver verstrekt geen informatie over de spellen.\n" "\tKies zelf geschikte instellingen." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Aantal computerspelers" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "Het aantal computerspelers" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Een nieuwe server wordt aangevraagd.\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Fout bij het starten van %s: %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Nieuw openbaar spel aanmaken" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Meespelen in een openbaar spel" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nieuw spel via metaserver" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "De lijst met spellen verversen" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Een nieuw spel via de metaserver starten" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Niet meespelen" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "In het gekozen spel meespelen" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Kies een spel om in mee te spelen" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Naam" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Naam van het spel" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Huidig" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Aantal spelers" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Maximum aantal spelers voor dit spel" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terrein" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Willekeurig of standaard terrein" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Punten" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Het aantal benodigde punten om te winnen" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Regel voor zevens" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Regel voor zevens" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Computer" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Spel server" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Poort" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Poort van het spel" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Versie" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Versie van de server" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Nieuw spel starten" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Spelersnaam" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Geef je naam" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Toeschouwer" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Meespelen als toeschouwer" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Meespelen" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Meespelen in een automatisch ontdekt spel" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Metaserver" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Meespelen in openbaar spel" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Meespelen in een openbaar spel" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Nieuw spel aanmaken" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Een nieuw spel aanmaken" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Privé spel" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Meespelen in een privé spel" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Server host" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Naam van de server van het spel" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Server poort" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Poort van de spel server" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Recente spellen" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Ontwikkelingskaarten" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Kaart spelen" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Grondstoffen weggooien" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Je moet %d grondstofkaart weggooien" msgstr[1] "Je moet %d grondstofkaarten weggooien" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Totaal" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Wacht op spelers die kaarten weggooien" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Het spel is afgelopen" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s heeft gewonnen met %d punten!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Buig voor %s, heerser van de bekende wereld!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Grondstoffen kiezen" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Je mag %d grondstofkaart kiezen" msgstr[1] "Je mag %d grondstofkaarten kiezen" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Totaal" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Wacht op anderen om grondstoffen te kiezen" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Spel" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nieuw spel" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Een nieuw spel starten" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "Spel ver_laten" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Het spel verlaten" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Beheren" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Een Pioniers server beheren" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "S_pelersnaam" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Verander de naam van je speler" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "L_egenda" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Terreinlegenda en bouwkosten" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Spelinstellingen" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Instellingen van het lopende spel" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Dobbelsteen histogram" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogram van de dobbelsteen tot nu toe" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Afsluiten" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Het programma afsluiten" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "H_andelingen" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Rollen" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Met de dobbelstenen rollen" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Handelen" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Ongedaan maken" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Klaar" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Weg" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Een weg bouwen" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Schip" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Een schip bouwen" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Schip verplaatsen" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Met een schip varen" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Brug" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Een brug bouwen" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Dorp" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Een dorp bouwen" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Stad" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Een stad bouwen" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Ontwikkelingskaart" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Een ontwikkelingskaart kopen" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Stadsmuur" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Een stadsmuur bouwen" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Instellingen" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "_Voorkeuren" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "De instellingen van het programma veranderen" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_Weergave" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Herstellen" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "De hele kaart bekijken" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Centreren" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "De kaart centreren" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Help" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Over Pioniers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informatie over Pioniers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "De handleiding tonen" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Volledig scherm" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Het hele scherm gebruiken" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Knoppenbalk" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "De knoppenbalk tonen of verbergen" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "De speler met %i punten wint" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Berichten" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Kaart" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Handelsfase _beëindigen" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Handelsaanbod" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Handel afwijzen" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Legenda" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Welkom bij Pioniers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Pioniers Voorkeuren" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Thema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Kies een van de thema's" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Toon legenda" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "De legenda tonen naast de kaart" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Berichten in kleur" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Nieuwe berichten in kleur tonen" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Chat in de kleur van de speler" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "De nieuwe chat in de kleur van de speler tonen" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Spelersoverzicht in kleur" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Kleur in het spelersoverzicht gebruiken" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Knoppenbalk met sneltoetsen" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "De sneltoetsen in de knoppenbalk tonen" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Stilte" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "Alle geluiden uitschakelen" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Nieuwe spelers aankondigen" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "" "Geluid maken wanneer een nieuwe speler of toeschouwer het spel betreedt" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Berichten weergeven" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "Berichten tonen wanneer je aan de beurt bent of er nieuwe handel is" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "16:9 layout gebruiken" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Een 16:9 vriendelijke layout gebruiken" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Over Pioniers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Welkom bij Pioniers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioniers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Dobbelsteenhistogram" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Verplaatsing van het schip is geannuleerd." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Kies een nieuwe plek voor het schip." #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "Je bent aan de beurt om op te zetten." #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Heuvels" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Akker" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Berg" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Weide" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Bos" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Woestijn" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Zee" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Terreinopbrengsten" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Bouwkosten" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Stadsmuur" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Ontwikkelingskaart" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopolie" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Kies de grondstof waar je een monopolie op wilt." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Spelersnaam veranderen" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Spelersnaam:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Gezicht:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variant:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Meespelen als toeschouwer" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Computernaam van de metaserver" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Kies een spel om in mee te spelen." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Bezig verbinding te maken" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Speel een spel Pioniers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Speel een spel Pioniers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Dorpen" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Steden" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Stadsmuren" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Grootste riddermacht" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Langste handelsroute" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kapel" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kapellen" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pioniersuniversiteit" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pioniersuniversiteiten" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Gouverneurshuis" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Gouverneurshuizen" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Bibliotheek" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Bibliotheken" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Markt" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Markten" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Ridder" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Ridders" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Grondstoffenkaart" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Grondstoffenkaarten" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Ontwikkelingskaarten" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Spelersoverzicht" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Goed Jaar" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Kies een grondstof uit de bank" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Kies twee grondstoffen uit de bank" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "De bank is leeg" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s heeft %s en zoekt %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "Nieuw aanbod van %s." #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Aanbod van %s." #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Ik wil" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Ik geef" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Intrekken" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Handel afwijzen" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Speler" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Handelsaanbod" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s in ruil voor %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Handel afgewezen" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Grondstoffen" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Totaal" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Aantal in de hand" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "meer>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Verhoog het aantal van deze grondstof" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Aantal gekozen grondstoffen" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Totaal aantal gekozen grondstoffen" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "De bank kan niet leeg gemaakt worden" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Ja" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Nee" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Onbekend" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Er is geen spel bezig." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Algemene instellingen" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Aantal spelers:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Punten benodigd om te winnen:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Willekeurig terrein:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Sta handel tussen spelers toe:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Handelen alleen toegestaan voor het bouwen:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Controleer op winst alleen aan het einde van de beurt:" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Aantal grondstofkaarten van elke soort:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Regel voor zevens:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Gebruik de piraat om schepen te blokkeren:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Eiland ontdekkingspunten:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Bouwbeperkingen" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Straten:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Dorpen:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Steden:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Stadsmuren:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Schepen:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Bruggen:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Ontwikkelingskaarten" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Stratenbouw:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopolie:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Goed jaar:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Kapel:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Universiteit:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Gouverneurshuis:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Bibliotheek:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Markt:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Ridder:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Huidige spelinstellingen" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "Vraag om gratis %s" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "Geef gratis %s" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "Geef %s in ruil voor %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Ik vraag %s en bied %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Nieuw aanbod van %s." #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "Om _voorstellen vragen" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "Voorstel _accepteren" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Handelsfase beëindigen" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Stratenbouw" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Goed jaar" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Bouw twee nieuwe straten" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" "Kies een grondstof en krijg alle kaarten van die grondstof van alle andere " "spelers" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "Neem twee grondstofkaarten uit de bank (ze mogen verschillend zijn)" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "Eén overwinningspunt" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Verplaatst de rover en steel een grondstof van een speler die aan de nieuwe " "plaats grenst." #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "Verouderde spelregel: '%s'\n" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" "Het spel gebruikt de nieuwe regel '%s', die nog niet ondersteund is. Probeer " "een upgrade.\n" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Dit spel kan niet gewonnen worden." #: ../common/game.c:891 msgid "There is no land." msgstr "Er is geen land." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Het is mogelijk dat dit spel niet gewonnen kan worden." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Dit spel kan gewonnen worden door uitsluitend alle dorpen en steden te " "bouwen." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Benodigd aantal overwinningspunten: %d\n" "Punten door alles te bouwen: %d\n" "Punten in ontwikkelingskaarten: %d\n" "Langste weg/grootste leger: %d+%d\n" "Hoogste aantal ontdekkingspunten: %d\n" "Totaal: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioniers is gebaseerd op\n" "het bordspel \"De kolonisten van Catan\".\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Versie:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Homepage:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Geschreven door:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Roland Clobus\n" "Bas Wijnen" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers is vertaald naar het Nederlands door:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Winstpuntanalyse" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Bij een zeven wordt de rover of piraat verplaatst" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "In de eerste twee beurten worden zevens opnieuw gerold" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Alle zevens worden opnieuw gerold" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Terrein willekeurig maken" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Het terrein willekeurig verdelen" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Piraat gebruiken" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Gebruik de piraat om schepen te blokkeren" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Handel voor bouwen" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Handelen alleen toegestaan voor het bouwen" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Handel tussen spelers" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Handel tussen spelers toestaan" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Aan het einde van de beurt winnen" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Controleer op winst alleen aan het einde van de beurt" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Eiland ontdekkingspunten" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" "Een komma-gescheiden lijst van bonuspunten voor het ontdekken van eilanden" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "Controleer en corrigeer de eiland ontdekkingspunten" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Aantal spelers" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Het aantal spelers" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Aantal winstpunten" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Het aantal benodigde punten om te winnen" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Is het mogelijk dit spel te winnen?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "B" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "G" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "IJ" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "W" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "H" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Kies een metaserver" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Kies een spel" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*FOUT* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Praten: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Grondstof: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Bouwen: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dobbelsteen: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Steel: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Handel: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Ontwikkelingskaart: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Soldaat: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Straat: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*BEEP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Speler 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Speler 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Speler 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Speler 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Speler 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Speler 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Speler 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Speler 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Toeschouwer: " #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** ONBEKEND BERICHTTYPE ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Fout bij het controleren van verbinding: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Kan geen verbinding maken met computer \"%s\": %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Fout bij het schrijven naar netwerk: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Fout bij het schrijven naar netwerk: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Leesbuffer is vol - de verbinding wordt verbroken\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Fout bij het lezen van netwerk: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Fout bij het maken van een netwerkverbinding: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Fout bij het instellen van netwerkverbinding op close-on-exec: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Fout bij het instellen van netwerkverbinding op non-blocking: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Fout bij het verbinden naar %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Onbekende computer %s (poort %s): %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Computer %s (poort %s) kan niet gevonden worden\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Fout bij het maken van struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Fout bij het opzetten van de netwerkverbinding: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Fout bij het wachten op verbindingen: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Luisterende verbindingen nog niet ondersteund op dit platform." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "onbekend" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Fout bij het opzoeken van de computernaam: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Fout bij het opzoeken van de computernaam: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "De functie Net_get_peer_name is nog niet ondersteund op dit platform." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Fout bij het accepteren van een verbinding: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Bezig te verbinden met %s, poort %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "" "Toestandsstapel is vol. Toestanden op de stapel gaan naar standard error.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Heuvels" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Akker" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Berg" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Weide" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "B_os" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "Woes_tijn" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Zee" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Goud" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "Gee_n" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "_Baksteen (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Graan (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Erts (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Wol (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Hout (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "Ha_ven (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "O" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NO" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NW" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "W" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "ZW" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "ZO" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Een rij toevoegen" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Een rij verwijderen" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Een kolom toevoegen" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Een kolom verwijderen" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Schudden" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Spelinstellingen" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Spelregels" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Grondstoffen" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Gebouwen" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Pioniers Editor" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Kan '%s' niet openen" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Kan '%s' niet opslaan" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "Spelen" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "Geen filter" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Spel openen" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Opslaan als..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Titel veranderen" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Nieuwe titel:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Over Pioniers Editor" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Bestand" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Nieuw" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Een nieuw spel aanmaken" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Openen..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Een bestaand spel openen" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "Op_slaan" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Het spel opslaan" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Opslaan _als..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Het spel onder een andere naam opslaan" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Titel veranderen" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "De titel van het spel veranderen" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Winstpunten _controleren" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Controleer of het mogelijk is dit spel te winnen" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Het programma afsluiten" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Over Pioniers Editor" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informatie over Pioniers Editor" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Open dit bestand" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "bestandsnaam" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor voor spellen Pioniers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Opbouw menu niet gelukt: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Instellingen" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "Opmerkingen" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Aantal grondstoffen" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Ontwerp je eigen spel voor Pioniers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Start de metaserver als achtergrond taak" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Aanmaken pid-bestand bij starten in de achtergrond (betekent -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Omleiding naar een andere metaserver" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Gebruik deze hostname bij nieuwe spellen" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "hostname" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Gebruik dit bereik voor de poorten van nieuwe spellen" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "van-tot" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Toon debug boodschappen in de syslog" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Metaserver voor Pioniers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "Metaserver protocol:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Avahi-aanmelding succesvol.\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "Avahi service naam bestaat al, hernoemd tot '%s'.\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Avahi fout: %s\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Avahi fout: %s, %s\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "Kan geen verbinding met Avahi server maken" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Avahi afmelden.\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Over Pioniers server" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Informatie over de Pioniers server" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Server stoppen" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Server starten" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "De server stoppen" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "De server starten" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Nieuwe speler: %s vanaf %s\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Speler %s vanaf %s heeft de verbinding verbroken\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Speler %d is nu %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "De poort van de server" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Server registreren" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Dit spel bij de metaserver aanmelden" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Gerapporteerde hostnaam" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "De naam van deze computer (is nodig om een spel te registreren vanachter een " "firewall)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Is de spelervolgorde willekeurig" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Is de spelervolgorde willekeurig" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Toont alle verbonden spelers en toeschouwers" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Verbonden" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Is de speler op het moment verbonden?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Naam" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Naam van de speler" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Computer" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Computernaam van de speler" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Nummer" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Speler nummer" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Rol" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Speler of toeschouwer" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Pioniers starten" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Pioniers starten" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Chat inschakelen" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "De computerspeler mag chat-boodschappen versturen" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Computerspeler toevoegen" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Een computerspeler aan het spel toevoegen" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Berichten van de server" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Spelinstellingen" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Serverinstellingen" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Lopend spel" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Huidige spelers" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Computerspelers" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Berichten" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "De Pioniers server" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "Het spel is afgelopen.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Creëer een spel Pioniers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioniers Server" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Creëer een spel Pioniers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Titel van het spel" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Bestandsnaam van het spel" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Poort" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Het aantal spelers" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Het aantal benodigde punten om te winnen" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Zeven regel" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Terrein type, 0=standaard 1=willekeurig" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Voeg N computerspelers toe" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registreer dit spel bij de metaserver" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registreer bij metaserver naam (betekent -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Gebruik deze hostname bij registratie" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Stop wanneer het spel gewonnen is" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Stop wanneer na N seconden geen spelers gekomen zijn" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Toernooi modus, computerspelers worden toegevoegd na N minuten" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Administratie poort" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "Start het spel na een commando via de administratie poort" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Geef de spelers nummers in de volgorde waarin ze het spel betreden" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Metaserver opties" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opties voor de metaserver" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Diverse opties" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Diverse opties" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "Kan niet én de titel én de bestandsnaam tegelijkertijd instellen\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Kan de parameters van het spel niet laden\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "Poort voor beheers is niet beschikbaar.\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "De administratie poort is niet ingesteld, het is mogelijk om de start van " "het spel uit te stellen\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Bezig te verbinden met metaserver op %s, poort %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Verbreek de verbinding met de metaserver\n" #: ../server/player.c:140 msgid "chat too long" msgstr "bericht te lang" #: ../server/player.c:157 msgid "name too long" msgstr "naam te lang" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "onbekende extensie genegeerd" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "De laatste speler is vertrokken, de teller wordt opnieuw ingesteld." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "Geen mensen gevonden. Doei." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Het spel gaat beginnen, computerspelers worden toegevoegd." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "Het spel start over %s minuten" #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "Het spel start over %s minuut" #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Computerspeler" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Helaas, het spel is al afgelopen." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Speler vanaf %s geweigerd: het spel is afgelopen\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Naam niet veranderd: de nieuwe naam is al in gebruik" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Na lang wachten zijn er nog steeds geen spelers... Doei.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" "The laatste menselijke speler heeft het spel verlaten. Wacht op de terugkeer " "van een speler." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Het spel wordt hervat." #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s is weer terug." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "De versies van de server en de client komen niet overeen: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Dit spel start binnenkort." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Voorbereiden spel" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Zoekt spellen in '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Spellenmap '%s' niet gevonden\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Eiland ontdekkingsbonus" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Extra eiland bonus" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Poging om grondstoffen aan de NULL speler te geven.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "De administrator heeft de dobbelsteenworp vastgesteld." #~ msgid "Viewer %d" #~ msgstr "Toeschouwer %d" #~ msgid "viewer %d" #~ msgstr "toeschouwer %d" #~ msgid "I want" #~ msgstr "Ik wil" #~ msgid "Give them" #~ msgstr "Ik geef" #~ msgid "Viewer: " #~ msgstr "Toeschouwer: " #~ msgid "Number of AI Players" #~ msgstr "Aantal computerspelers" #~ msgid "The number of AI players" #~ msgstr "Aantal computerspelers" #~ msgid "Recent Games" #~ msgstr "Recente spellen" #~ msgid "You may choose 1 resource" #~ msgstr "Je mag 1 grondstofkaart kiezen" #~ msgid "_Player name" #~ msgstr "_Verander naam" #~ msgid "The Pioneers Game" #~ msgstr "Pioniers" #~ msgid "Select the ship to steal from" #~ msgstr "Kies een schip om te bestelen" #~ msgid "Select the building to steal from" #~ msgstr "Kies een gebouw om te bestelen" #~ msgid "Development Card" #~ msgstr "Ontwikkelingskaart" #~ msgid "Player Name:" #~ msgstr "Naam:" #~ msgid "I Want" #~ msgstr "Ik wil" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Handel tussen spelers toegestaan?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Handelen alleen toegestaan voor het bouwen?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Controleer winstpunten aan eind van de beurt?" #~ msgid "Sevens Rule:" #~ msgstr "Zevensregel:" #~ msgid "Use Pirate:" #~ msgstr "Gebruik piraat:" #~ msgid "Number of Players" #~ msgstr "Aantal spelers" #~ msgid "Development Cards" #~ msgstr "Ontwikkelingskaarten" #~ msgid "Save as..." #~ msgstr "Opslaan als..." #~ msgid "Pioneers Game Editor" #~ msgstr "Pioniers Spel Editor" #~ msgid "_Change title" #~ msgstr "_Verander titel" #~ msgid "Random Turn Order" #~ msgstr "Volgorde willekeurig" #~ msgid "_Legend" #~ msgstr "_Legenda" #~ msgid "bad scaling mode '%s'" #~ msgstr "Ongeldig schaaltype \"%s\"" #~ msgid "Missing game directory\n" #~ msgstr "Spellenmap niet gevonden\n" pioneers-14.1/po/pt.po0000644000175000017500000027010111760645356011623 00000000000000# Pioneers - Settlers of Catan for GNOME. # This file is distributed under the same license as the pioneers package. # Filipe Roque, 2007-2012 # msgid "" msgstr "" "Project-Id-Version: Pioneers 14.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2012-05-22 10:11+0000\n" "Last-Translator: Filipe Roque \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2012-05-23 05:36+0000\n" "X-Generator: Launchpad (build 15282)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Servidor" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Porto do Servidor" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Nome do computador (obrigatório)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Tempo de espera entre turnos (em milisegundos)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Parar o adversário electrónico de falar" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Tipo de adversário electrónico" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Activar mensagens para depuração" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Mostrar a versão" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Adversário electrónico de Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Versão de Pioneers:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Um nome deve ser fornecido\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Tipo de adversário electrónico: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "O jogo já está cheio. Estou a sair" #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Sem mais estabelecimentos para usar na construção" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Não existe um lugar para construir um estabelecimento" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Sem mais estradas para usar na construção" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Não existe um lugar para construir uma estrada" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Ok, vamos!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Vou-vos ganhar a todos agora! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Tentemos outra vez..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Pelo menos obtive alguma coisa..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Um é melhor que nada..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Hey, estou a enriquecer ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Este é realmente um bom ano!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Realmente não mereces tanto!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Não sabes que fazer com tantos recursos ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Hey, espera pelo meu ladrão e perdes isso tudo de novo!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Vai, ladrão, vai!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Maldito!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Podes mover esse ladrão para outro lado?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Porque sou sempre eu??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Oh, no!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Quem tirou esse 7??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Porque sou sempre eu?!?" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Diz adeus às tuas cartas... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "Diabinho!!" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me digo adeus às tuas cartas ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Esse é o preço de ser rico... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Hey!, para onde foi essa carta?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Ladrões! Ladrões!!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Espera pela minha vingança..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Oh não :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Isto tinha de acontecer AGORA?" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hehe, os meus soldados são os maiores!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Primeiro roubas-nos, depois agarras os pontos..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Vê esse caminho!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pff, não ganhas com estradas apenas..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Negócio rejeitado.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Erro recebido do servidor: %s. Saindo\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Yippie!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Os meus parabéns" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Olá, bem-vindo ao átrio. Sou um simples robô. Escreva '/help' na sala de " "conversa para ver uma lista de comandos que eu conheço." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "'/help' mostra esta mensagem de novo" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "'/why' explica o propósito desta estranha apresentação do tabuleiro" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "'/news' diz qual a última versão lançada" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Este tabuleiro não pretende ser um jogo que possa ser jogado. Pelo " "contrário, os jogadores podem-se encontrar aqui e decidir que tabuleiro " "querem usar. Então, um dos jogadores será o anfitrião do jogo proposto " "iniciando um servidor e registando-o no Meta-servidor. Os outros jogadores " "podem seguidamemte sair do átrio e emtrar no jogo." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "A última versão de Pioneers é" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "O jogo está a começar. Não sou preciso mais. Adeus." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Esperando" #: ../client/common/client.c:108 msgid "Idle" msgstr "Livre" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Nós fomos expulsos do jogo.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Desconnectado" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Erro (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Nota: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s não recebe nenhum %s, porque o banco está vazio.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s só recebe %s, porque o banco não tem mais.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s recebe %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s tira %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s gasta %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s é reembolsado %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s descartou %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s ganhou o jogo com %d pontos!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "A carregar" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Versão não coincide." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versão não coincide, Por favor assegure-se de que o cliente e o servidor " "estão actualizados.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Construa dois estabelecimentos, cada um com uma conexão" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Construa um estabelecimento com uma conexão" #: ../client/common/client.c:1416 msgid "road" msgstr "caminho" #: ../client/common/client.c:1418 msgid "bridge" msgstr "ponte" #: ../client/common/client.c:1420 msgid "ship" msgstr "barco" #: ../client/common/client.c:1427 msgid " or" msgstr " ou" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Esperando o teu turno." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Escolhe o edifício que queres roubar." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Seleccione o barco a roubar" #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Coloca o ladrão." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Termina a acção de construcção do caminho" #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Construir um segmento de caminho." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Construir dois segmentos de caminho." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "É o teu turno." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Desculpa, %s disponível.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Fim do jogo." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Compraste a carta de desenvolvimento «%s».\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Compraste uma carta de desenvolvimento «%s».\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s comprou uma carta de desenvolvimento.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s usou a carta de desenvolvimento «%s».\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s usou uma carta de desenvolvimento «%s».\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Ficaste sem segmentos de estrada.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Recebes %s de %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s tirou-te %s.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s tirou %s de %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Espectador %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "espectador %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Jogador %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "jogador %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Novo espectador: %s\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s é agora %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Jogador %d se chama agora %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s desistiu.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Não existe um exército maior.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s tem o maior exército.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Não existe uma estrada maior.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s tem a estrada mais longa.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Esperando por %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s roubou um recurso de %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Roubaste %s de %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s roubou-te %s.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s não dá nada a %s!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s dá %s a %s grátis.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s dá a %s %s em troca de %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s trocou %s por %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s construiu uma estrada.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s construiu um barco.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s construiu um estabelecimento.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s construiu uma cidade.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s construiu uma muralha.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add chamado com BUILD_NONE para o utilizador %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s construiu uma ponte.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s removeu uma estrada.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s removeu um barco.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s removeu um estabelecimento.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s removeu uma cidade.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s removeu uma muralha.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove chamado com BUILD_NONE para o utilizador %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s removeu uma ponte.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s cancela um movimento de barco.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s moveu um barco.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s recebeu %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "o servidor pede para perder ponto inválido.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s perdeu %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "o servidor pede para mover ponto inválido.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s perdeu %s para %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "tijolo" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Tijolo" #: ../client/common/resource.c:36 msgid "grain" msgstr "cereais" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Cereais" #: ../client/common/resource.c:37 msgid "ore" msgstr "minerais" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Minerais" #: ../client/common/resource.c:38 msgid "wool" msgstr "lã" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Lã" #: ../client/common/resource.c:39 msgid "lumber" msgstr "madeira" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Madeira" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "nenhum recurso (bug)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Nenhum recurso (bug)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "qualquer recurso (bug)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Qualquer recurso (bug)" #: ../client/common/resource.c:42 msgid "gold" msgstr "ouro" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Ouro" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "uma carta de tijolo" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d cartas de tijolo" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "uma carta de cereais" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d cartas de cereais" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "uma carta de minerais" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d cartas de minerais" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "uma carta de lã" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d cartas de lã" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "uma carta de madeira" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d cartas de madeira" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "nada" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s e %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s desfez o movimento do ladrão.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s moveu o ladrão.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s desfez o movimento do pirata.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s moveu o pirata.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s tem de mover o ladrão." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Instalação para %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Dupla instalação para %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s tirou %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Começa o turno %d para %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "Seleccione um jogo descoberto automaticamente" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "%s (%s) em %s:%s" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Conversar" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Teste de som.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s chamou-te.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Tu chamaste %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Não conseguiste chamar %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " disse: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Meta-servidor em %s, porta %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Terminado.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Meta-servidor expulsou-nos\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Recebendo nomes do jogo do Meta-servidor.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Novo servidor de jogo solicitado em %s porta %s.\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Mensagem desconhecida do Meta-servidor: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "Demasiados redireccionamentos do Meta-servidor\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Erro na linha de redireccionamento: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Meta-servidor muito velho para criar servidores (versão %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Relançar nos primeiros dois turnos" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Relançar todos os 7's" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Por defeito" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Aleatório" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Redireccionado para o Meta-servidor em %s, porta %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Recebendo uma lista de servidores Pioneers do Meta-servidor.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Nota:\n" "\tO Meta-servidor não envia informações acerca dos jogos.\n" "\tPor favor ajuste os valores apropiados você mesmo." #. Label #: ../client/gtk/connect.c:726 msgid "Number of computer players" msgstr "Número de computadores a jogar" #. Tooltip #: ../client/gtk/connect.c:746 msgid "The number of computer players" msgstr "O número de computadores a jogar" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Pedindo novo servidor de jogo\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, c-format msgid "Error starting %s: %s\n" msgstr "Erro ao começar %s: %s\n" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Criar um jogo público" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Aderir a um jogo público" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Novo jogo remoto" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Actualizar a lista de jogos" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Criar um novo jogo público no Meta-servidor" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Não aderir a um jogo público" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Aderir ao jogo seleccionado" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Seleccionar um jogo para aderir" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Nome de mapa" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Nome do jogo" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Corr." #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Número de jogadores em jogo" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Máx." #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Máximo de jogadores para o jogo" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terreno" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Terreno por defeito aleatório" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Pontos de Vic." #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Pontos precisos para ganhar" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Regra dos setes" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Regra dos setes" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Servidor" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Servidor do jogo" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Porta" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 msgid "Port of the game" msgstr "Porta do jogo" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Versão" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Versão do anfitrião" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Começar um novo jogo" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Nome de jogador" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Entra o teu nome de jogador" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Espectador" #: ../client/gtk/connect.c:1280 msgid "Check if you want to be a spectator" msgstr "Seleccionar se deseja ser um espectador" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "Avahi" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "Aderir" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "Aderir a um jogo descoberto automaticamente" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Meta-servidor" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Aderir a um jogo público" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Aderir a um jogo público" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Criar jogo" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Criar um jogo" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Aderir ao jogo privado" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Aderir a um jogo privado" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Servidor" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Nome do anfitrião do jogo" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Porto do Servidor" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Porta do anfitrião do jogo" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Jogos recentes" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Cartas de desenvolvimento" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Jogar carta" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Descartar recursos" #: ../client/gtk/discard.c:101 #, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Tem de descartar %d recurso" msgstr[1] "Tem de descartar %d recursos" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Descartamentos totais" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Esperando que os jogadores descartem" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Fim do jogo" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s ganhou o jogo com %d pontos!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Graças ao %s, Senhor do mundo conhecido!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Escolhe recursos" #: ../client/gtk/gold.c:96 #, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Tem de escolher %d recurso" msgstr[1] "Tem de escolher %d recursos" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Recursos totais" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Esperando que os jogadores escolham" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Jogo" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Novo jogo" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Começar um novo jogo" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Deixar o jogo" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Deixar este jogo" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Admin" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrar servidor de Pioneers" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "Nome do _jogador" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Escolhe o teu nome de jogador" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "L_egenda" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Legenda do terreno e custos de construcção" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "_Preferências de jogo" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Preferências do jogo actual" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Histograma dos dados" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histograma dos lançamentos" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Sair" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Sair do programa" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Acções" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Lançar dados" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Lançar os dados" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Trocas" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Desfazer" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Terminar" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Estrada" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Construir uma estrada" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Barco" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Construir um barco" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Mover barco" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Mover um barco" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Ponte" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Construir uma ponte" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Estabelecimento" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Construir um estabelecimento" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Cidade" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Construir uma cidade" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Desenvolvimento" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Comprar uma carta de desenvolvimento" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Muralha" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Construir uma muralha" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "Preferência_s" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Preferê_ncias" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Configurar a aplicação" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "_Ver" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "_Restaurar" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "Ver o mapa todo" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "_Centrar" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "Centrar o mapa" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "A_juda" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Acerca de Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Informação acerca de Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Mostrar o manual" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "_Ecrã Inteiro" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "Coloca a janela em modo de ecrã inteiro" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Barra de ferramentas" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Mostra ou esconde a barra de ferramentas" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Pontos necessários para ganhar: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Mensagens" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Mapa" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Terminar Negócio" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Quote" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Rejeitar Negócio Doméstico" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Legenda" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Bem-vindo ao Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Preferências de Pioneers" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Escolhe um dos temas" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Mostrar legenda" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Mostrar a legenda como uma página junto ao mapa" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Mensagens com cor" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Mostrar novas mensagens com cor" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Conversar na cor do jogador" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Mostrar novas mensagens de conversa na cor do jogador" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Sumário com cor" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Usar cor no sumário do jogador" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Barra de ferramentas com atalhos" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Mostrar atalhos directos do teclado na barra de ferramentas" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Modo Silencioso" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "Em modo silencioso nenhum som é feito" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Anunciar novos jogadores" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "Tocar um som quando um novo jogador ou espectador se juntar ao jogo" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "Mostrar notificações" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" "Mostrar notificações quando for o seu turno ou quando novos negócios " "estiverem disponíveis" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Usar a disposição 16:9" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Usar a disposição amigável 16:9 para a janela" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Acerca de Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Bem-vindo ao Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Histograma dos dados" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Movimento do barco cancelado" #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Seleccione uma nova localização para o barco" #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "É o seu turno para construir" #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Colina" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Campo" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Montanha" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Pasto" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Floresta" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Deserto" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Mar" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Produção do terreno" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Custos de construção" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Muralha" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Carta de desenvolvimento" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopólio" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Escolhe um recurso que queres monopolizar." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Altera o nome de jogador" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Nome de jogador:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Cara:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variante:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Ligar-se como espectador" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Anfitrião do Meta-servidor" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Seleccionar um jogo para aderir." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Conectando" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Jogar um jogo de Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Jogar um jogo de Pioneers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Estabelecimentos" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Cidades" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Muralhas" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Maior Exército" #: ../client/gtk/player.c:57 msgid "Longest road" msgstr "Maior Estrada" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Capela" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Capelas" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Universidade Pioneer" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Universidades Pioneers" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Palácio do Governador" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Palácio do Governador" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Biblioteca" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Bibliotecas" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Mercado" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Mercados" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldado" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldados" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Carta de recurso" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Cartas de recurso" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Cartas de desenvolvimento" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Sumário dos Jogadores" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Ano de Abundância" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Por favor escolha um recurso do banco" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Por favor escolha dois recursos do banco" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "O banco está vazio" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s tem %s e está à procura de %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "Nova oferta de %s" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "Oferta de %s" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Quero" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Dá-lhes" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Apagar" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Rejeitar Negócio Doméstico" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Jogador" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Quotes" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s por %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Negócio rejeitado" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Recursos" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Total" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Cartas de recurso na mão" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "mais>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Incrementar a quantidade seleccionada" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Quantidade seleccionada" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Quantidade seleccionada total" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "O banco não pode ser esvaziado" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Sim" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Não" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Desconhecido" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Não há jogo a decorrer" #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Preferências gerais" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Número de jogadores:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Ponto de Vitória:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Terreno Aleatório:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Permitir trocas entre jogadores:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Trocas permitidas apenas antes de construir/comprar:" #: ../client/gtk/settingscreen.c:171 msgid "Check victory only at end of turn:" msgstr "Verificar a vitória apenas no fim do turno:" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Quantidade de cada recurso:" #: ../client/gtk/settingscreen.c:190 msgid "Sevens rule:" msgstr "Regra dos setes:" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Usar o pirata para bloquear barcos:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bónus de Descoberta de Ilha:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Custos de construção" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Estradas:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Estabelecimentos:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Cidades:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Muralhas:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Barcos:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Pontes:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Baralho das Cartas de Desenvolvimento" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Cartas de Construção de Estradas:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Cartas de Monopólio:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Cartas de Ano de Abundância:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Cartas de Capela:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Cartas Universidade de Pioneers:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Cartas Palácio do Governador:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Cartas de Biblioteca:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Cartas de Mercado:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Cartas de Soldado:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Preferências do jogo actual" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "pede %s grátis" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "oferece %s grátis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "oferece %s por %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Quero %s, e dou %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "Oferta de preço recebido de %s" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Verificar Quotes" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Aceitar Quote" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "_Terminar Negócio" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Construcção de caminhos" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Ano de Abundância" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "Contruir duas novas estradas" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" "Escolha um tipo de recurso e retire todas as cartas desse recurso possuídas " "pelos outros jogadores" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "Retire duas cartas de qualquer tipo de recurso do baralho" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "Um ponto de vitória" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" "Mova o ladrão para um espaço diferente e retire uma carta de recurso de um " "jogador adjacente a esse espaço" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "Regra obsoleta: '%s'\n" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" "O jogo usa a nova regra '%s', que não é suportada ainda. Considere " "actualizar.\n" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Este jogo não pode ser ganho" #: ../common/game.c:891 msgid "There is no land." msgstr "Não há terra" #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "É possível que este jogo não possa ser ganho" #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "Este jogo pode ser ganho apenas construindo estabelecimentos e cidades" #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Pontos requeridos para a vistória: %d\n" "Pontos obtidos construindo tudo: %d\n" "Pontos nas cartas de desenvolvimento: %d\n" "Maior Estrada/Exército: %d+%d\n" "Maior bónus de descoberta de ilha: %d\n" "Total: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers é baseado no excelente\n" "jogo de tabuleiro 'Os Descobridores de Catan'.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Versão:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Página Principal:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Autores:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "" "Filipe Roque\n" "\n" "Launchpad Contributions:\n" " Almufadado https://launchpad.net/~almufadado\n" " André Oliveira https://launchpad.net/~oribunokiyuusou\n" " Filipe Roque https://launchpad.net/~flip-roque\n" " Tiago Silva https://launchpad.net/~tiagosilva" #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers foi traduzido para Português por:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "Análise dos pontos de vitória" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Todos os 7 movem o ladrão ou o pirata" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "Nos primeiros dois turnos os setes são relançados" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Todos os 7 são relançados" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Terreno Aleatório?" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Terreno Aleatório?" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Usar Pirata" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Usar o pirata para bloquear barcos" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Negócio rigoroso" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Trocas permitidas apenas antes de construir/comprar?" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Negócio local" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Permitir trocas entre jogadores" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Vitória no fim do turno" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Verificar a vitória apenas no fim do turno" #. Label #: ../common/gtk/game-rules.c:135 msgid "Island discovery bonuses" msgstr "Bónus de descoberta de ilhas" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "Uma lista separada por vírgulas de pontos bónus por descobrir ilhas" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 msgid "Check and correct island discovery bonuses" msgstr "Verificar e corrigir bónus de descoberta de ilhas" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Número de jogadores" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "O número de jogadores" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Ponto de Vitória" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Os pontos necessários para ganhar o jogo" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "É possível ganhar este jogo?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "Ld" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "C" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "Mi" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Ln" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Ma" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Escolha um meta-servidor" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Seleccione um jogo" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*ERRO* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Conversar: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Recursos: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Construir: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Dados: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Roubar: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Trocas: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Desenvolvimento: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Exército: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Estrada: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*SOM* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Jogador 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Jogador 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Jogador 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Jogador 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Jogador 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Jogador 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Jogador 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Jogador 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "Espectador: " #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** TIPO DE MENSAGEM DESCONHECIDO ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Erro na verificação do estado de conexão: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Erro ao ligar-se ao anfitrião '%s': %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Erro a escrever no socket: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Erro a escrever no socket: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Ler buffer overflow - desconectando\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Erro lendo socket: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Erro a criar o socket: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Erro ajustando o socket para close-on-exec: %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Erro ajustando o socket para non-blocking: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Erro conectando a %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Não se pode resolver %s porta %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Não se pode resolver %s porta %s: anfitrião não encontrado\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Erro criando struct addrinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Erro criando socket de escuta: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Erro durante a escuta do socket: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Escuta ainda não suportada nesta plataforma." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "Desconhecido" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Erro obtendo o nome de camarada: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Erro a resolver o endereço: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name não suportada nesta plataforma ainda." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Erro aceitando a conexão: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Conectando a %s, porta %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "State stack overflow. Stack dump semt to standard error.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Colina" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Campo" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Montanha" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "_Pasto" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Floresta" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "_Deserto" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "M_ar" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Ouro" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Nada" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "Tijolo (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Cereais (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "Mine_rais (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Lã (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Madeira (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Qualquer (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "Este|E" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "Nordeste|NE" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "Noroeste|NO" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "Oeste|O" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "Sudoeste|SO" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "Sudeste|SE" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "Inserir uma linha" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "Apagar uma linha" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "Inserir uma coluna" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "Apagar uma coluna" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Baralhar" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Parâmetros de jogo" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Regras" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Recursos" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Construções" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Editor de Pioneers" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Falha ao carregar '%s'" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Falha ao gravar para '%s'" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 msgid "Games" msgstr "Jogos" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "Sem filtro" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Jogo aberto" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Guardar Como..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Mudar o Título" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Novo título:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Acerca do Editor de Pioneers" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Ficheiro" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Novo" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Criar um novo jogo" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Abrir" #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Abrir um jogo existente" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Gravar" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Gravar jogo" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Gravar _como..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Gravar como" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "_Mudar título" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Mudar título do jogo" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "Verificar objectivo dos Pontos de vitória" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Verificar se o jogo pode ser ganho" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Sair" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Acerca do Editor de Pioneers" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Informação acerca do Editor de Pioneers" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Abrir este ficheiro" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "Nome de ficheiro" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Editor para jogos de Pioneers" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Construção de menus falhada: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Preferências" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "Comentários" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Contagem de Recursos" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Crie o seu jogo de Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Processificar o meta-servidor ao arrancar" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Pidfile a criar quando processificando (implica -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Redirecionar clientes para outro meta-servidor" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Usar este endereço quando criar novos jogos" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "endereço" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Usar esta gama de portas quando criar novos jogos" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "de-até" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Debug syslog messages" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Meta server para Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "protocolo meta-servidor:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "Registro de Avahi sucedido\n" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "Colisão no nome do serviço Avahi. Renomear serviço para '%s'.\\n\n" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "Erro Avahi: %s\\n\n" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "Erro Avahi: %s, %s\\n\n" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "Incapaz de registrar servidor Avahi" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "Desregistrar o serviço Avahi.\\n\n" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Acerca do Servidor Pioneers" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Informação do Servidor Pioneers" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Parar servidor" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Iniciar o servidor" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Parar o servidor" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Iniciar o servidor" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Jogador %s de %s entrou\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Jogador %s de %s saiu\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Jogador %d está agora %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "A porta para o servidor de jogo" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Registrar o servidor" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registrar este jogo no Meta-servidor" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Nome de Anfitrião Reportado" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "O nome público deste computador (necessário quando se joga através de uma " "firewall)" #. random toggle #: ../server/gtk/main.c:629 msgid "Random turn order" msgstr "Ordem de turnos aleatória" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Desordenar a ordem de turnos" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Mostrar todos os jogadores e espectadores ligados ao jogo" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Conectado" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Está o jogador actualmemte conectado?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Nome" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Nome do jogador" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Local" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Nome do jogador anfitrião" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Número" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Número do jogador" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Função" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "Jogador ou espectador" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Iniciar o Cliente de Pioneers" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Iniciar o Cliente de Pioneers" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Activar Conversa" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Activar mensagens de conversa" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Adicionar adversário electrónico" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Adicionar um adversário electrónico ao jogo" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Mensagens do servidor" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Preferências de jogo" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Parâmetros do servidor" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Jogo actual" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Jogadores conectados" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Adversário electrónico" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Mensagens" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "O servidor de Jogo Pionners" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "O jogo acabou.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Organizar um jogo de Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Servidor de Pioneers" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Organizar um jogo de Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Título de jogo para usar" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Ficheiro de jogo para usar" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Porta para escutar" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Sobrepôr número de adversários" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Sobrepôr número de pontos necessários para ganhar" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Sobrepôr regra dos 7's" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Sobrepôr tipo de terreno, 0=omissão 1=aleatório" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Adicionar N adversários electrónicos" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registrar o servidor com o Meta-servidor" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registro em nome de Meta-servidor (supõe -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Usar este nome de anfitrião quando se registrar" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Sair quando um jogador ganhar" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Sair depois de N segundos sem jogadores" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "" "Modo de campionato, adversários electrónicos adicionado depois de N minutos" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Porta Admin para escuta" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "Não iniciar o jogo imediatamemte, esperar um comando na porta de " "administrador" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Dar números de jogadores de acordo com a ordem em que entram em jogo" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Opções de Meta-servidor" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Opçoes para o Meta-servidor" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Opções variadas" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Opções variadas" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "" "Não é possível escolher o título do jogo e o nome do ficheiro em simultâneo\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Os parâmetros do jogo não estão a ser carregados\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "Porta de administração não disponível\n" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "A porta do administrador não foi escolhida, Não é possível desactivar o " "início de jogo também\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registrar no Meta-servidor em %s, porta %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Desregistrar do Meta-servidor\n" #: ../server/player.c:140 msgid "chat too long" msgstr "Conversa demasiado larga" #: ../server/player.c:157 msgid "name too long" msgstr "Nome demasiado largo" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignorar extensão desconhecida" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "O último jogador saiu, o relógio foi reiniciado" #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "Sem jogadores humanos presentes. Adeus." #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "O jogo começa, adicionar adversários electrónicos." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "O jogo começa em %s minutos." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "O jogo começa em %s minuto." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Adversário electrónico" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "O jogo acabou." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Jogador de %s recusado: jogo acabou\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Nome não mudado: novo nome está já em uso" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Estava à espera à muito tempo sem jogadores...Adeus.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "O último jogador humano saiu. À espera do regresso de um jogador." #: ../server/player.c:737 msgid "Resuming the game." msgstr "Prosseguindo o jogo" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s reconectou-se." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versão não coincide: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Este jogo começará em breve" #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Preparando jogo" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Procurando jogos em '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Directório de jogos '%s' não encontrado\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bónus de Descoberta de Ilha" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bónus de ilha adicional" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Tentativa de atribuir recursos ao jogador NULL.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "O lançamento dos dados foi determinado pelo administrador" pioneers-14.1/po/sv.po0000644000175000017500000026703311760645356011642 00000000000000# Swedish translation of pioneers. # Copyright (C) 2005-2008 Daniel Nylander # This file is distributed under the same license as the pioneers package. # # vim::set fileencoding=utf8 # msgid "" msgstr "" "Project-Id-Version: Pioneers 0.12.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-28 11:51+0200\n" "PO-Revision-Date: 2011-10-30 15:06+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-04-06 06:08+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Plural-Forms: nplurals=2; plural=(n!=1)\n" #. Commandline pioneersai: server #: ../client/ai/ai.c:70 msgid "Server Host" msgstr "Servervärd" #. Commandline pioneersai: port #: ../client/ai/ai.c:73 msgid "Server Port" msgstr "Serverport" #. Commandline pioneersai: name #: ../client/ai/ai.c:76 msgid "Computer name (mandatory)" msgstr "Datornamn (obligatoriskt)" #. Commandline pioneersai: time #: ../client/ai/ai.c:79 msgid "Time to wait between turns (in milliseconds)" msgstr "Väntetid mellan turer (i millisekunder)" #. Commandline pioneersai: chat-free #: ../client/ai/ai.c:82 msgid "Stop computer player from talking" msgstr "Stoppa datorspelare från att prata" #. Commandline pioneersai: algorithm #: ../client/ai/ai.c:85 msgid "Type of computer player" msgstr "Typ av datorspelare" #. Commandline option of ai: enable debug logging #. Commandline option of client: enable debug logging #. Commandline option of meta server: enable debug logging #. Commandline option of server-gtk: enable debug logging #. Commandline option of server: enable debug logging #: ../client/ai/ai.c:88 ../client/gtk/offline.c:68 ../meta-server/main.c:1090 #: ../server/gtk/main.c:1130 ../server/main.c:145 msgid "Enable debug messages" msgstr "Aktivera felsökningsmeddelanden" #. Commandline option of ai: version #. Commandline option of client: version #. Commandline option of editor: version #. Commandline option of meta server: version #. Commandline option of server-gtk: version #. Commandline option of server-console: version #: ../client/ai/ai.c:91 ../client/gtk/offline.c:71 ../editor/gtk/editor.c:1419 #: ../meta-server/main.c:1096 ../server/gtk/main.c:1133 ../server/main.c:100 msgid "Show version information" msgstr "Visa versionsinformation" #. Long description in the commandline for pioneersai: help #: ../client/ai/ai.c:102 msgid "- Computer player for Pioneers" msgstr "- Datorspelare för Pioneers" #: ../client/ai/ai.c:114 ../client/gtk/offline.c:183 #: ../editor/gtk/editor.c:1462 ../meta-server/main.c:1131 #: ../server/gtk/main.c:1183 ../server/main.c:208 #, c-format msgid "Pioneers version:" msgstr "Pioneers version:" #. ai commandline error #: ../client/ai/ai.c:139 #, c-format msgid "A name must be provided.\n" msgstr "Ett namn måste anges.\n" #: ../client/ai/ai.c:150 #, c-format msgid "Type of computer player: %s\n" msgstr "Typ av datorspelare: %s\n" #: ../client/ai/ai.c:181 msgid "The game is already full. I'm leaving." msgstr "Spelet är redan fullt. Jag lämnar det." #: ../client/ai/greedy.c:962 msgid "No settlements in stock to use for setup" msgstr "Inga bosättningar i lager att använda för detta" #: ../client/ai/greedy.c:969 msgid "There is no place to setup a settlement" msgstr "Det finns ingen plats för att bygga en bosättning" #: ../client/ai/greedy.c:993 msgid "No roads in stock to use for setup" msgstr "Inga vägar på lager att använda för detta" #: ../client/ai/greedy.c:1010 msgid "There is no place to setup a road" msgstr "Det finns ingen plats för att anlägga en väg" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1311 msgid "Ok, let's go!" msgstr "Ok, nu kör vi!" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1313 msgid "I'll beat you all now! ;)" msgstr "Jag slår er alla nu! ;)" #. AI chat at the start of the turn #: ../client/ai/greedy.c:1315 msgid "Now for another try..." msgstr "Ett nytt försök..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1320 msgid "At least I get something..." msgstr "Jag får något åtminstone..." #. AI chat when one resource is received #: ../client/ai/greedy.c:1322 msgid "One is better than none..." msgstr "Ett är bättre än inget..." #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1327 msgid "Wow!" msgstr "Wow!" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1329 msgid "Ey, I'm becoming rich ;)" msgstr "Tjo, Jag blir rikare ;)" #. AI chat when more than one resource is received #: ../client/ai/greedy.c:1331 msgid "This is really a good year!" msgstr "Detta är verkligen ett bra år!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1336 msgid "You really don't deserve that much!" msgstr "Du är inte värd så mycket!" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1338 msgid "You don't know what to do with that many resources ;)" msgstr "Du vet inte vad du ska göra med så många resurser ;)" #. AI chat when other players receive more than one resource #: ../client/ai/greedy.c:1340 msgid "Ey, wait for my robber and lose all this again!" msgstr "Hey, vänta på min rånare och förlora allt detta igen!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1345 msgid "Hehe!" msgstr "Hehe!" #. AI chat when it moves the robber #: ../client/ai/greedy.c:1347 msgid "Go, robber, go!" msgstr "Kör på, rånare!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1352 msgid "You bastard!" msgstr "Din jäkel!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1354 msgid "Can't you move that robber somewhere else?!" msgstr "Kan du inte flytta den där rånaren någon annanstans?!" #. AI chat when the robber is moved to it #: ../client/ai/greedy.c:1356 msgid "Why always me??" msgstr "Varför är det alltid jag??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1361 msgid "Oh no!" msgstr "Åh nej!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1363 msgid "Grrr!" msgstr "Grrr!" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1365 msgid "Who the hell rolled that 7??" msgstr "Vem i &/#\"(\" slog den 7:an??" #. AI chat when it must discard resources #: ../client/ai/greedy.c:1367 msgid "Why always me?!?" msgstr "Varför är det alltid jag??" #. AI chat when other players must discard #: ../client/ai/greedy.c:1372 msgid "Say good bye to your cards... :)" msgstr "Säg adjö till dina kort... :)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1374 msgid "*evilgrin*" msgstr "*evilgrin*" #. AI chat when other players must discard #: ../client/ai/greedy.c:1376 msgid "/me says farewell to your cards ;)" msgstr "/me säger adjö till dina kort ;)" #. AI chat when other players must discard #: ../client/ai/greedy.c:1378 msgid "That's the price for being rich... :)" msgstr "Det är priset för att vara rik... :)" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1383 msgid "Ey! Where's that card gone?" msgstr "Hey! Var tog det kortet vägen?" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1385 msgid "Thieves! Thieves!!" msgstr "Tjuvar! Tjuvar!!" #. AI chat when someone steals from it #: ../client/ai/greedy.c:1387 msgid "Wait for my revenge..." msgstr "Vänta på min hämnd..." #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1392 msgid "Oh no :(" msgstr "Åh nej :(" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1394 msgid "Must this happen NOW??" msgstr "Måste detta hända NU??" #. AI chat when someone plays the monopoly card #: ../client/ai/greedy.c:1396 msgid "Args" msgstr "Args" #. AI chat when it has the largest army #: ../client/ai/greedy.c:1401 msgid "Hehe, my soldiers rule!" msgstr "Hehe, mina soldater äger!" #. AI chat when another player that the largest army #: ../client/ai/greedy.c:1406 msgid "First robbing us, then grabbing the points..." msgstr "Först råna oss sen sno åt sig poängen..." #. AI chat when it has the longest road #: ../client/ai/greedy.c:1411 msgid "See that road!" msgstr "Se på den vägen!" #. AI chat when another player has the longest road #: ../client/ai/greedy.c:1416 msgid "Pf, you won't win with roads alone..." msgstr "Pfff, du vinner aldrig med bara vägar..." #: ../client/ai/greedy.c:1903 msgid "Rejecting trade.\n" msgstr "Nekade handel.\n" #: ../client/ai/greedy.c:2002 #, c-format msgid "Received error from server: %s. Quitting\n" msgstr "Mottog fel från server: %s. Avslutar\n" #. AI chat when it wins #: ../client/ai/greedy.c:2014 msgid "Yippie!" msgstr "Jippi!" #. AI chat when another player wins #: ../client/ai/greedy.c:2017 msgid "My congratulations" msgstr "Mina gratulationer" #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:80 msgid "" "Hello, welcome to the lobby. I am a simple robot. Type '/help' in the chat " "to see the list of commands I know." msgstr "" "Hej, välkommen till lobbyn. Jag är en enkel robot. Skriv \"/help\" i chatten " "för att se en lista på kommandon jag känner till." #. Translators: don't translate '/help' #: ../client/ai/lobbybot.c:107 msgid "'/help' shows this message again" msgstr "\"/help\" visar detta meddelande igen" #. Translators: don't translate '/why' #: ../client/ai/lobbybot.c:110 msgid "'/why' explains the purpose of this strange board layout" msgstr "\"/why\" förklarar meningen med denna konstiga brädlayout" #. Translators: don't translate '/news' #: ../client/ai/lobbybot.c:113 msgid "'/news' tells the last released version" msgstr "\"/news\" talar om den senaste utgivna versionen" #. AI chat that explains '/why' #: ../client/ai/lobbybot.c:119 msgid "" "This board is not intended to be a game that can be played. Instead, players " "can find eachother here, and decide which board they want to play. Then, one " "of the players will host the proposed game by starting a server, and " "registers it at the metaserver. The other players can subsequently " "disconnect from the lobby, and enter that game." msgstr "" "Denna bräda är inte tänkt att vara ett spel som kan spelas. Istället kan " "spelare hitta varandra här, och bestämma vilken bräda de vill spela på. " "Sedan kan en av spelarna stå värd för det tänkta spelet genom att starta en " "server, och registrera den på metaservern. De andra spelarna kan därefter " "koppla ner från lobbyn, och ansluta till det spelet." #: ../client/ai/lobbybot.c:130 msgid "The last released version of Pioneers is" msgstr "\"Den senaste utgivna versionen av Pioneers är" #. The lobbybot leaves when a game is starting #: ../client/ai/lobbybot.c:146 msgid "The game is starting. I'm not needed anymore. Goodbye." msgstr "Spelet startar. Jag behövs inte längre. Adjö." #: ../client/common/client.c:106 msgid "Waiting" msgstr "Väntar" #: ../client/common/client.c:108 msgid "Idle" msgstr "Overksam" #: ../client/common/client.c:533 msgid "We have been kicked out of the game.\n" msgstr "Vi har blivit utsparkade från spelet.\n" #. Network status: offline #: ../client/common/client.c:536 ../client/common/client.c:982 #: ../client/gtk/gui.c:1553 msgid "Offline" msgstr "Offline" #: ../client/common/client.c:557 #, c-format msgid "Error (%s): %s\n" msgstr "Fel (%s): %s\n" #: ../client/common/client.c:566 ../client/common/client.c:577 #, c-format msgid "Notice: %s\n" msgstr "Notera: %s\n" #: ../client/common/client.c:692 #, c-format msgid "%s does not receive any %s, because the bank is empty.\n" msgstr "%s tar inte emot några %s, därför att banken är tom.\n" #: ../client/common/client.c:705 #, c-format msgid "%s only receives %s, because the bank didn't have any more.\n" msgstr "%s tar endast emot %s, därför att banken inte hade mer.\n" #: ../client/common/client.c:715 #, c-format msgid "%s receives %s.\n" msgstr "%s tar emot %s.\n" #. Year of Plenty #: ../client/common/client.c:723 ../client/common/client.c:2659 #, c-format msgid "%s takes %s.\n" msgstr "%s tar %s.\n" #: ../client/common/client.c:728 #, c-format msgid "%s spent %s.\n" msgstr "%s spenderade %s.\n" #: ../client/common/client.c:734 #, c-format msgid "%s is refunded %s.\n" msgstr "%s blir återbetalad %s.\n" #: ../client/common/client.c:765 #, c-format msgid "%s discarded %s.\n" msgstr "%s kastade %s.\n" #: ../client/common/client.c:839 #, c-format msgid "%s has won the game with %d victory points!\n" msgstr "%s har vunnit spelet med %d segerpoäng!\n" #: ../client/common/client.c:938 msgid "Loading" msgstr "Läser in" #: ../client/common/client.c:983 msgid "Version mismatch." msgstr "Version stämmer inte." #: ../client/common/client.c:985 msgid "Version mismatch. Please make sure client and server are up to date.\n" msgstr "" "Versionen stämmer inte. Se till att klient och server är uppdaterade.\n" #: ../client/common/client.c:1410 msgid "Build two settlements, each with a connecting" msgstr "Bygg två bosättningar, båda med en anslutande" #: ../client/common/client.c:1413 msgid "Build a settlement with a connecting" msgstr "Bygg en bosättning med en anslutande" #: ../client/common/client.c:1416 msgid "road" msgstr "väg" #: ../client/common/client.c:1418 msgid "bridge" msgstr "bro" #: ../client/common/client.c:1420 msgid "ship" msgstr "skepp" #: ../client/common/client.c:1427 msgid " or" msgstr " eller" #: ../client/common/client.c:1491 msgid "Waiting for your turn." msgstr "Väntar på din tur." #: ../client/common/client.c:1543 ../client/gtk/interface.c:758 msgid "Select the building to steal from." msgstr "Välj den byggnad du vill stjäla från." #: ../client/common/client.c:1565 ../client/gtk/interface.c:748 msgid "Select the ship to steal from." msgstr "Välj det skepp du vill stjäla från." #: ../client/common/client.c:1649 ../client/gtk/interface.c:790 msgid "Place the robber." msgstr "Placera ut rånaren." #: ../client/common/client.c:1699 msgid "Finish the road building action." msgstr "Gör klar vägbyggnationen." #: ../client/common/client.c:1701 msgid "Build one road segment." msgstr "Bygg ett vägsegment." #: ../client/common/client.c:1703 msgid "Build two road segments." msgstr "Bygg två vägsegment." #. Notification #: ../client/common/client.c:1976 ../client/common/client.c:2070 #: ../client/gtk/interface.c:416 msgid "It is your turn." msgstr "Det är din tur." #: ../client/common/client.c:2164 #, c-format msgid "Sorry, %s available.\n" msgstr "Tyvärr, %s tillgänglig.\n" #: ../client/common/client.c:2478 msgid "The game is over." msgstr "Spelet är slut." #. This development card is unique #: ../client/common/develop.c:66 #, c-format msgid "You bought the %s development card.\n" msgstr "Du köpte utvecklingskortet för %s.\n" #. This development card is not unique #: ../client/common/develop.c:72 #, c-format msgid "You bought a %s development card.\n" msgstr "Du köpte ett utvecklingskort för %s.\n" #: ../client/common/develop.c:95 #, c-format msgid "%s bought a development card.\n" msgstr "%s köpte ett utvecklingskort.\n" #: ../client/common/develop.c:114 #, c-format msgid "%s played the %s development card.\n" msgstr "%s spelade utvecklingskortet för %s.\n" #: ../client/common/develop.c:119 #, c-format msgid "%s played a %s development card.\n" msgstr "%s spelade ett utvecklingskort för %s.\n" #: ../client/common/develop.c:131 msgid "You have run out of road segments.\n" msgstr "Du har slut på vägsegment.\n" #. I get the cards #. $1=resources, $2=player that loses resources #: ../client/common/develop.c:172 #, c-format msgid "You get %s from %s.\n" msgstr "Du får %s från %s.\n" #. I lose the cards #. $1=player that steals, $2=resources #: ../client/common/develop.c:178 #, c-format msgid "%s took %s from you.\n" msgstr "%s tog %s från dig.\n" #: ../client/common/develop.c:185 #, c-format msgid "%s took %s from %s.\n" msgstr "%s tog %s från %s.\n" #: ../client/common/player.c:124 ../server/player.c:561 #, c-format msgid "Spectator %d" msgstr "Åskådare %d" #: ../client/common/player.c:127 #, c-format msgid "spectator %d" msgstr "åskådare %d" #: ../client/common/player.c:136 ../server/player.c:564 #, c-format msgid "Player %d" msgstr "Spelare %d" #: ../client/common/player.c:138 #, c-format msgid "player %d" msgstr "spelare %d" #: ../client/common/player.c:214 #, c-format msgid "New spectator: %s.\n" msgstr "Ny åskådare: %s.\n" #: ../client/common/player.c:217 ../client/common/player.c:233 #, c-format msgid "%s is now %s.\n" msgstr "%s är nu %s.\n" #: ../client/common/player.c:230 #, c-format msgid "Player %d is now %s.\n" msgstr "Spelare %d är nu %s.\n" #: ../client/common/player.c:267 #, c-format msgid "%s has quit.\n" msgstr "%s har avslutat.\n" #: ../client/common/player.c:276 msgid "There is no largest army.\n" msgstr "Det finns ingen största armé.\n" #: ../client/common/player.c:279 #, c-format msgid "%s has the largest army.\n" msgstr "%s har den största armén.\n" #: ../client/common/player.c:300 msgid "There is no longest road.\n" msgstr "Det finns ingen längsta väg.\n" #: ../client/common/player.c:303 #, c-format msgid "%s has the longest road.\n" msgstr "%s har den längsta vägen.\n" #: ../client/common/player.c:324 #, c-format msgid "Waiting for %s." msgstr "Väntar på %s." #. We are not in on the action #. someone stole a resource from someone else #: ../client/common/player.c:352 #, c-format msgid "%s stole a resource from %s.\n" msgstr "%s stal en resurs från %s.\n" #. $1=resource, $2=player name #: ../client/common/player.c:363 #, c-format msgid "You stole %s from %s.\n" msgstr "Du stal %s från %s.\n" #. $1=player name, $2=resource #: ../client/common/player.c:370 #, c-format msgid "%s stole %s from you.\n" msgstr "%s stal %s från dig.\n" #: ../client/common/player.c:404 #, c-format msgid "%s gave %s nothing!?\n" msgstr "%s gav %s ingenting!?\n" #. $1=giving player, $2=receiving player, $3=resources #: ../client/common/player.c:411 ../client/common/player.c:421 #, c-format msgid "%s gave %s %s for free.\n" msgstr "%s gav %s %s gratis.\n" #: ../client/common/player.c:429 #, c-format msgid "%s gave %s %s in exchange for %s.\n" msgstr "%s gav %s %s i utbyte mot %s.\n" #: ../client/common/player.c:460 #, c-format msgid "%s exchanged %s for %s.\n" msgstr "%s utbytte %s mot %s.\n" #: ../client/common/player.c:480 #, c-format msgid "%s built a road.\n" msgstr "%s byggde en väg.\n" #: ../client/common/player.c:492 #, c-format msgid "%s built a ship.\n" msgstr "%s byggde ett skepp.\n" #: ../client/common/player.c:505 #, c-format msgid "%s built a settlement.\n" msgstr "%s byggde en bosättning.\n" #: ../client/common/player.c:524 #, c-format msgid "%s built a city.\n" msgstr "%s byggde en stad.\n" #: ../client/common/player.c:538 #, c-format msgid "%s built a city wall.\n" msgstr "%s byggde en stadsmur.\n" #. Error message #: ../client/common/player.c:549 #, c-format msgid "player_build_add called with BUILD_NONE for user %s\n" msgstr "player_build_add anropades med BUILD_NONE för användare %s\n" #: ../client/common/player.c:559 #, c-format msgid "%s built a bridge.\n" msgstr "%s byggde en bro.\n" #: ../client/common/player.c:585 #, c-format msgid "%s removed a road.\n" msgstr "%s tog bort en väg.\n" #: ../client/common/player.c:595 #, c-format msgid "%s removed a ship.\n" msgstr "%s tog bort ett skepp.\n" #: ../client/common/player.c:605 #, c-format msgid "%s removed a settlement.\n" msgstr "%s tog bort en bosättning.\n" #: ../client/common/player.c:616 #, c-format msgid "%s removed a city.\n" msgstr "%s tog bort en stad.\n" #: ../client/common/player.c:630 #, c-format msgid "%s removed a city wall.\n" msgstr "%s tog bort en stadsmur.\n" #. Error message #: ../client/common/player.c:640 #, c-format msgid "player_build_remove called with BUILD_NONE for user %s\n" msgstr "player_build_remove anropades med BUILD_NONE för användare %s\n" #: ../client/common/player.c:649 #, c-format msgid "%s removed a bridge.\n" msgstr "%s tog bort en bro.\n" #: ../client/common/player.c:680 #, c-format msgid "%s has canceled a ship's movement.\n" msgstr "%s har avbrutit flyttning av ett skepp.\n" #: ../client/common/player.c:683 #, c-format msgid "%s moved a ship.\n" msgstr "%s flyttade ett skepp.\n" #. tell the user that someone got something #: ../client/common/player.c:703 #, c-format msgid "%s received %s.\n" msgstr "%s mottog %s.\n" #: ../client/common/player.c:722 msgid "server asks to lose invalid point.\n" msgstr "server frågar om att förlora ogiltig poäng.\n" #. tell the user the point is lost #: ../client/common/player.c:728 #, c-format msgid "%s lost %s.\n" msgstr "%s förlorade %s.\n" #: ../client/common/player.c:751 msgid "server asks to move invalid point.\n" msgstr "server frågar om att flytta ogiltig poäng.\n" #. tell the user someone (1) lost something (2) to someone else (3) #: ../client/common/player.c:758 #, c-format msgid "%s lost %s to %s.\n" msgstr "%s förlorade %s till %s.\n" #: ../client/common/resource.c:35 msgid "brick" msgstr "tegel" #: ../client/common/resource.c:35 msgid "Brick" msgstr "Tegel" #: ../client/common/resource.c:36 msgid "grain" msgstr "spannmål" #: ../client/common/resource.c:36 msgid "Grain" msgstr "Spannmål" #: ../client/common/resource.c:37 msgid "ore" msgstr "malm" #: ../client/common/resource.c:37 msgid "Ore" msgstr "Malm" #: ../client/common/resource.c:38 msgid "wool" msgstr "ull" #: ../client/common/resource.c:38 msgid "Wool" msgstr "Ull" #: ../client/common/resource.c:39 msgid "lumber" msgstr "timmer" #: ../client/common/resource.c:39 msgid "Lumber" msgstr "Timmer" #: ../client/common/resource.c:40 msgid "no resource (bug)" msgstr "ingen resurs (fel)" #: ../client/common/resource.c:40 msgid "No resource (bug)" msgstr "Ingen resurs (fel)" #: ../client/common/resource.c:41 msgid "any resource (bug)" msgstr "någon resurs (fel)" #: ../client/common/resource.c:41 msgid "Any resource (bug)" msgstr "Någon resurs (fel)" #: ../client/common/resource.c:42 msgid "gold" msgstr "guld" #: ../client/common/resource.c:42 ../client/gtk/legend.c:40 msgid "Gold" msgstr "Guld" #: ../client/common/resource.c:47 msgid "a brick card" msgstr "ett tegelkort" #: ../client/common/resource.c:47 #, c-format msgid "%d brick cards" msgstr "%d tegelkort" #: ../client/common/resource.c:48 msgid "a grain card" msgstr "ett spannmålskort" #: ../client/common/resource.c:48 #, c-format msgid "%d grain cards" msgstr "%d spannmålskort" #: ../client/common/resource.c:49 msgid "an ore card" msgstr "ett malmkort" #: ../client/common/resource.c:49 #, c-format msgid "%d ore cards" msgstr "%d malmkort" #: ../client/common/resource.c:50 msgid "a wool card" msgstr "ett ullkort" #: ../client/common/resource.c:50 #, c-format msgid "%d wool cards" msgstr "%d ullkort" #: ../client/common/resource.c:51 msgid "a lumber card" msgstr "ett timmerkort" #: ../client/common/resource.c:51 #, c-format msgid "%d lumber cards" msgstr "%d timmerkort" #: ../client/common/resource.c:139 ../client/common/resource.c:225 msgid "nothing" msgstr "ingenting" #. Construct "A, B and C" for resources #: ../client/common/resource.c:166 #, c-format msgid "%s and %s" msgstr "%s och %s" #. Construct "A, B and C" for resources #: ../client/common/resource.c:170 #, c-format msgid "%s, %s" msgstr "%s, %s" #: ../client/common/robber.c:62 #, c-format msgid "%s has undone the robber movement.\n" msgstr "%s har ångrat förflyttningen av rånaren.\n" #: ../client/common/robber.c:65 #, c-format msgid "%s moved the robber.\n" msgstr "%s flyttade rånaren.\n" #: ../client/common/robber.c:75 #, c-format msgid "%s has undone the pirate movement.\n" msgstr "%s har ångrat förflyttning av piraten.\n" #: ../client/common/robber.c:78 #, c-format msgid "%s moved the pirate.\n" msgstr "%s flyttade piraten.\n" #: ../client/common/robber.c:85 #, c-format msgid "%s must move the robber." msgstr "%s måste flytta rånaren." #: ../client/common/setup.c:146 #, c-format msgid "Setup for %s.\n" msgstr "Uppställning för %s.\n" #: ../client/common/setup.c:158 #, c-format msgid "Double setup for %s.\n" msgstr "Dubbel uppställning för %s.\n" #: ../client/common/turn.c:37 #, c-format msgid "%s rolled %d.\n" msgstr "%s slog %d.\n" #: ../client/common/turn.c:50 #, c-format msgid "Begin turn %d for %s.\n" msgstr "Börja tur %d för %s.\n" #: ../client/gtk/avahi-browser.c:83 msgid "Select an automatically discovered game" msgstr "" #. $1=Game title, $2=version, $3=host_name, $4=port #: ../client/gtk/avahi-browser.c:132 #, c-format msgid "%s (%s) on %s:%s" msgstr "" #. Label text #: ../client/gtk/chat.c:73 msgid "Chat" msgstr "Chatt" #: ../client/gtk/chat.c:233 msgid "Beeper test.\n" msgstr "Testa pip.\n" #: ../client/gtk/chat.c:236 #, c-format msgid "%s beeped you.\n" msgstr "%s pingade dig.\n" #: ../client/gtk/chat.c:240 #, c-format msgid "You beeped %s.\n" msgstr "Du pingade %s.\n" #: ../client/gtk/chat.c:246 #, c-format msgid "You could not beep %s.\n" msgstr "Du kunde inte skicka ett pip till %s.\n" #: ../client/gtk/chat.c:290 msgid " said: " msgstr " säger: " #: ../client/gtk/connect.c:277 #, c-format msgid "Meta-server at %s, port %s" msgstr "Metaserver på %s, port %s" #: ../client/gtk/connect.c:287 msgid "Finished.\n" msgstr "Klar.\n" #: ../client/gtk/connect.c:304 ../client/gtk/connect.c:354 #: ../client/gtk/connect.c:454 ../server/meta.c:169 msgid "Meta-server kicked us off\n" msgstr "Metaserver sparkade ut oss\n" #: ../client/gtk/connect.c:329 msgid "Receiving game names from the meta server.\n" msgstr "Tar emot spelnamn från metaservern.\n" #: ../client/gtk/connect.c:376 #, c-format msgid "New game server requested on %s port %s\n" msgstr "Ny spelserver begärd på %s port %s\n" #: ../client/gtk/connect.c:385 ../server/meta.c:162 #, c-format msgid "Unknown message from the metaserver: %s\n" msgstr "Okänt meddelande från metaservern: %s\n" #: ../client/gtk/connect.c:469 ../server/meta.c:119 msgid "Too many meta-server redirects\n" msgstr "För många omdirigeringar för metaserver\n" #: ../client/gtk/connect.c:496 ../server/meta.c:134 #, c-format msgid "Bad redirect line: %s\n" msgstr "Felaktig rad för omdirigering: %s\n" #: ../client/gtk/connect.c:522 #, c-format msgid "Meta server too old to create servers (version %d.%d)\n" msgstr "Metaserver för gammal för att skapa servrar (version %d.%d)\n" #. Sevens rule: normal #: ../client/gtk/connect.c:594 ../client/gtk/settingscreen.c:181 #: ../common/gtk/game-rules.c:79 msgid "Normal" msgstr "Normal" #. Sevens rule: reroll on 1st 2 turns #: ../client/gtk/connect.c:599 ../client/gtk/settingscreen.c:183 #: ../common/gtk/game-rules.c:85 msgid "Reroll on 1st 2 turns" msgstr "Slå om på de första 2 turerna" #. Sevens rule: reroll all 7s #: ../client/gtk/connect.c:603 ../client/gtk/settingscreen.c:185 #: ../common/gtk/game-rules.c:92 msgid "Reroll all 7s" msgstr "Slå om alla 7:or" #: ../client/gtk/connect.c:617 msgid "Default" msgstr "Förvald" #: ../client/gtk/connect.c:620 msgid "Random" msgstr "Slumpad" #: ../client/gtk/connect.c:650 ../server/meta.c:182 #, c-format msgid "Redirected to meta-server at %s, port %s\n" msgstr "Omdirigerad till metaserver på %s, port %s\n" #: ../client/gtk/connect.c:653 msgid "Receiving a list of Pioneers servers from the meta server.\n" msgstr "Tar emot en lista av Pioneers-servrar från metaservern.\n" #: ../client/gtk/connect.c:708 msgid "" "Note:\n" "\tThe metaserver does not send information about the games.\n" "\tPlease set appropriate values yourself." msgstr "" "Notera:\n" "\tMetaservern skickar inte information om spelen.\n" "\tStäll in lämpliga värden själv." #. Label #: ../client/gtk/connect.c:726 #, fuzzy msgid "Number of computer players" msgstr "Typ av datorspelare" #. Tooltip #: ../client/gtk/connect.c:746 #, fuzzy msgid "The number of computer players" msgstr "Antalet spelare" #: ../client/gtk/connect.c:767 msgid "Requesting new game server\n" msgstr "Begär en ny spelserver\n" #: ../client/gtk/connect.c:810 ../server/gtk/main.c:350 ../server/server.c:153 #, fuzzy, c-format msgid "Error starting %s: %s\n" msgstr "Fel vid start av %s: %s" #. Dialog caption #: ../client/gtk/connect.c:832 msgid "Create a Public Game" msgstr "Skapa ett publikt spel" #. Dialog caption #: ../client/gtk/connect.c:955 msgid "Join a Public Game" msgstr "Gå in i ett publikt spel" #. Button text #: ../client/gtk/connect.c:961 msgid "_New Remote Game" msgstr "_Nytt fjärrspel" #. Tooltip #: ../client/gtk/connect.c:975 msgid "Refresh the list of games" msgstr "Uppdatera listan av spel" #. Tooltip #: ../client/gtk/connect.c:979 msgid "Create a new public game at the meta server" msgstr "Skapa ett nytt publikt spel på metaservern" #. Tooltip #: ../client/gtk/connect.c:984 msgid "Don't join a public game" msgstr "Gå inte in i ett publikt spel" #. Tooltip #: ../client/gtk/connect.c:988 msgid "Join the selected game" msgstr "Gå in i valt spel" #. Tooltip #: ../client/gtk/connect.c:1025 msgid "Select a game to join" msgstr "Välj ett spel att gå in i" #. Column name #: ../client/gtk/connect.c:1029 msgid "Map Name" msgstr "Kartnamn" #. Tooltip for column 'Map Name' #: ../client/gtk/connect.c:1037 msgid "Name of the game" msgstr "Spelets namn" #. Column name #: ../client/gtk/connect.c:1043 msgid "Curr" msgstr "Nuvar" #. Tooltip for column 'Curr' #: ../client/gtk/connect.c:1050 msgid "Number of players in the game" msgstr "Antal spelare i spelet" #. Column name #: ../client/gtk/connect.c:1056 msgid "Max" msgstr "Max" #. Tooltip for column 'Max' #: ../client/gtk/connect.c:1063 msgid "Maximum players for the game" msgstr "Max antal spelare för spelet" #. Column name #: ../client/gtk/connect.c:1067 msgid "Terrain" msgstr "Terräng" #. Tooltip for column 'Terrain' #: ../client/gtk/connect.c:1075 msgid "Random of default terrain" msgstr "Slumpmässig standardterräng" #. Column name #: ../client/gtk/connect.c:1081 msgid "Vic. Points" msgstr "Segerpoäng" #. Tooltip for column 'Vic. Points' #: ../client/gtk/connect.c:1088 msgid "Points needed to win" msgstr "Poäng för vinst" #. Column name #: ../client/gtk/connect.c:1092 msgid "Sevens Rule" msgstr "Regel för 7:an" #. Tooltip for column 'Sevens Rule' #. Label #: ../client/gtk/connect.c:1100 ../common/gtk/game-rules.c:71 msgid "Sevens rule" msgstr "Regel för 7:an" #. Column name #: ../client/gtk/connect.c:1104 msgid "Host" msgstr "Värd" #. Tooltip for column 'Host' #: ../client/gtk/connect.c:1113 msgid "Host of the game" msgstr "Värd för spelet" #. Column name #: ../client/gtk/connect.c:1119 msgid "Port" msgstr "Port" #. Tooltip for column 'Port' #: ../client/gtk/connect.c:1127 #, fuzzy msgid "Port of the game" msgstr "Port för spelet" #. Column name #: ../client/gtk/connect.c:1131 msgid "Version" msgstr "Version" #. Tooltip for column 'Version' #: ../client/gtk/connect.c:1139 msgid "Version of the host" msgstr "Version hos värden" #. Dialog caption #: ../client/gtk/connect.c:1224 msgid "Start a New Game" msgstr "Starta ett nytt spel" #. Label #. Commandline option of client: name of the player #: ../client/gtk/connect.c:1251 ../client/gtk/offline.c:58 msgid "Player name" msgstr "Spelarnamn" #. Tooltip #: ../client/gtk/connect.c:1267 msgid "Enter your name" msgstr "Ange ditt namn" #. Check button #. Role of the player: spectator #: ../client/gtk/connect.c:1270 ../server/gtk/main.c:659 msgid "Spectator" msgstr "Åskådare" #: ../client/gtk/connect.c:1280 #, fuzzy msgid "Check if you want to be a spectator" msgstr "Vill du vara en åskådare?" #. Label #: ../client/gtk/connect.c:1291 msgid "Avahi" msgstr "" #. Button #: ../client/gtk/connect.c:1298 msgid "Join" msgstr "" #. Tooltip for button Join #: ../client/gtk/connect.c:1302 msgid "Join an automatically discovered game" msgstr "" #. Label #. meta server label #: ../client/gtk/connect.c:1329 ../server/gtk/main.c:569 msgid "Meta server" msgstr "Metaserver" #. Button #: ../client/gtk/connect.c:1351 msgid "Join Public Game" msgstr "Gå in i ett publikt spel" #. Tooltip #: ../client/gtk/connect.c:1357 msgid "Join a public game" msgstr "Gå in i ett publikt spel" #. Button #: ../client/gtk/connect.c:1362 msgid "Create Game" msgstr "Skapa spel" #. Tooltip #: ../client/gtk/connect.c:1366 msgid "Create a game" msgstr "Skapa ett spel" #. Button #: ../client/gtk/connect.c:1377 msgid "Join Private Game" msgstr "Gå in i privat spel" #. Tooltip #. Dialog caption #: ../client/gtk/connect.c:1381 ../client/gtk/connect.c:1526 msgid "Join a private game" msgstr "Gå in i ett privat spel" #. Label #. Commandline option of client: hostname of the server #: ../client/gtk/connect.c:1562 ../client/gtk/offline.c:52 msgid "Server host" msgstr "Servervärd" #. Tooltip #: ../client/gtk/connect.c:1576 msgid "Name of the host of the game" msgstr "Namn på värden som kör spelet" #. Label #. Commandline option of client: port of the server #. server port label #: ../client/gtk/connect.c:1580 ../client/gtk/offline.c:55 #: ../server/gtk/main.c:531 msgid "Server port" msgstr "Serverport" #. Tooltip #: ../client/gtk/connect.c:1597 msgid "Port of the host of the game" msgstr "Port på värden som kör spelet" #. Tooltip #. Label #: ../client/gtk/connect.c:1639 ../client/gtk/connect.c:1642 msgid "Recent games" msgstr "Tidigare spel" #. Caption for list of bought development cards #: ../client/gtk/develop.c:130 msgid "Development cards" msgstr "Utvecklingskort" #. Button text: play development card #: ../client/gtk/develop.c:163 msgid "Play Card" msgstr "Spela kort" #. Dialog caption #: ../client/gtk/discard.c:78 msgid "Discard Resources" msgstr "Kasta resurser" #: ../client/gtk/discard.c:101 #, fuzzy, c-format msgid "You must discard %d resource" msgid_plural "You must discard %d resources" msgstr[0] "Du måste kasta %d resurser" msgstr[1] "Du måste kasta %d resurser" #. Label #: ../client/gtk/discard.c:110 msgid "Total discards" msgstr "Totala kastningar" #. Caption for list of player that must discard cards #: ../client/gtk/discard.c:235 msgid "Waiting for players to discard" msgstr "Väntar på att spelare ska kasta" #. Dialog caption #: ../client/gtk/gameover.c:34 msgid "Game Over" msgstr "Spelet är över" #: ../client/gtk/gameover.c:51 #, c-format msgid "%s has won the game with %d victory points!" msgstr "%s har vunnit spelet med %d segerpoäng!" #: ../client/gtk/gameover.c:57 #, c-format msgid "All praise %s, Lord of the known world!" msgstr "Länge leve %s, Härskare över världen!" #. Dialog caption #: ../client/gtk/gold.c:73 msgid "Choose Resources" msgstr "Välj resurser" #: ../client/gtk/gold.c:96 #, fuzzy, c-format msgid "You may choose %d resource" msgid_plural "You may choose %d resources" msgstr[0] "Du får välja %d resurser" msgstr[1] "Du får välja %d resurser" #. Text for total in choose gold dialog #. Text for total in year of plenty dialog #: ../client/gtk/gold.c:105 ../client/gtk/plenty.c:102 msgid "Total resources" msgstr "Totala resurser" #. Caption for list of player that must choose gold #: ../client/gtk/gold.c:217 msgid "Waiting for players to choose" msgstr "Väntar på att spelare ska välja" #. Menu entry #: ../client/gtk/gui.c:229 ../server/gtk/main.c:92 msgid "_Game" msgstr "_Spel" #. Menu entry #: ../client/gtk/gui.c:232 msgid "_New Game" msgstr "_Nytt spel" #. Tooltip for New Game menu entry #: ../client/gtk/gui.c:234 msgid "Start a new game" msgstr "Starta ett nytt spel" #. Menu entry #: ../client/gtk/gui.c:237 msgid "_Leave Game" msgstr "_Lämna spel" #. Tooltip for Leave Game menu entry #: ../client/gtk/gui.c:239 msgid "Leave this game" msgstr "Lämna detta spel" #. Menu entry #: ../client/gtk/gui.c:243 msgid "_Admin" msgstr "_Administrera" #. Tooltip for Admin menu entry #: ../client/gtk/gui.c:245 msgid "Administer Pioneers server" msgstr "Administrera Pioneers-servern" #. Menu entry #: ../client/gtk/gui.c:249 msgid "_Player Name" msgstr "_Spelarens namn" #. Tooltip for Player Name menu entry #: ../client/gtk/gui.c:251 msgid "Change your player name" msgstr "Ändra ditt spelarnamn" #. Menu entry #: ../client/gtk/gui.c:254 msgid "L_egend" msgstr "_Förklaring" #. Tooltip for Legend menu entry #: ../client/gtk/gui.c:256 msgid "Terrain legend and building costs" msgstr "Terrängförklaring och byggnadskostnader" #. Menu entry #: ../client/gtk/gui.c:259 msgid "_Game Settings" msgstr "S_pelinställningar" #. Tooltip for Game Settings menu entry #: ../client/gtk/gui.c:261 msgid "Settings for the current game" msgstr "Inställningar för nuvarande spel" #. Menu entry #: ../client/gtk/gui.c:264 msgid "_Dice Histogram" msgstr "_Tärningshistogram" #. Tooltip for Dice Histogram menu entry #: ../client/gtk/gui.c:266 msgid "Histogram of dice rolls" msgstr "Histogram för tärningskast" #. Menu entry #: ../client/gtk/gui.c:269 ../editor/gtk/editor.c:1335 #: ../server/gtk/main.c:104 msgid "_Quit" msgstr "_Avsluta" #. Tooltip for Quit menu entry #. Tooltop for Quit menu entry #: ../client/gtk/gui.c:271 ../server/gtk/main.c:106 msgid "Quit the program" msgstr "Avsluta programmet" #. Menu entry #: ../client/gtk/gui.c:274 msgid "_Actions" msgstr "_Åtgärder" #. Menu entry #: ../client/gtk/gui.c:277 msgid "Roll Dice" msgstr "Kasta tärning" #. Tooltip for Roll Dice menu entry #: ../client/gtk/gui.c:279 msgid "Roll the dice" msgstr "Kasta tärningen" #. Menu entry #. Tooltip for Trade menu entry #. Tab page name #: ../client/gtk/gui.c:282 ../client/gtk/gui.c:284 ../client/gtk/gui.c:716 msgid "Trade" msgstr "Handla" #. Menu entry #. Tooltip for Undo menu entry #: ../client/gtk/gui.c:288 ../client/gtk/gui.c:290 msgid "Undo" msgstr "Ångra" #. Menu entry #. Tooltip for Finish menu entry #: ../client/gtk/gui.c:293 ../client/gtk/gui.c:295 msgid "Finish" msgstr "Klar" #. Menu entry #: ../client/gtk/gui.c:298 ../client/gtk/legend.c:192 #: ../editor/gtk/game-buildings.c:10 msgid "Road" msgstr "Väg" #. Tooltip for Road menu entry #: ../client/gtk/gui.c:300 msgid "Build a road" msgstr "Bygg en väg" #. Menu entry #: ../client/gtk/gui.c:303 ../client/gtk/legend.c:196 #: ../editor/gtk/game-buildings.c:10 msgid "Ship" msgstr "Skepp" #. Tooltip for Ship menu entry #: ../client/gtk/gui.c:305 msgid "Build a ship" msgstr "Bygg ett skepp" #. Menu entry #: ../client/gtk/gui.c:308 msgid "Move Ship" msgstr "Flytta skepp" #. Tooltip for Move Ship menu entry #: ../client/gtk/gui.c:310 msgid "Move a ship" msgstr "Flytta ett skepp" #. Menu entry #: ../client/gtk/gui.c:313 ../client/gtk/legend.c:199 #: ../editor/gtk/game-buildings.c:10 msgid "Bridge" msgstr "Bro" #. Tooltip for Bridge menu entry #: ../client/gtk/gui.c:315 msgid "Build a bridge" msgstr "Bygg en bro" #. Menu entry #: ../client/gtk/gui.c:318 ../client/gtk/legend.c:201 #: ../client/gtk/player.c:53 ../editor/gtk/game-buildings.c:10 msgid "Settlement" msgstr "Bosättning" #. Tooltip for Settlement menu entry #: ../client/gtk/gui.c:321 msgid "Build a settlement" msgstr "Bygg en bosättning" #. Menu entry #: ../client/gtk/gui.c:324 ../client/gtk/legend.c:202 #: ../client/gtk/player.c:54 ../editor/gtk/game-buildings.c:11 msgid "City" msgstr "Stad" #. Tooltip for City menu entry #: ../client/gtk/gui.c:326 msgid "Build a city" msgstr "Bygg en stad" #. Menu entry #: ../client/gtk/gui.c:329 msgid "Develop" msgstr "Utveckla" #. Tooltip for Develop menu entry #: ../client/gtk/gui.c:331 msgid "Buy a development card" msgstr "Köp ett utvecklingskort" #. Menu entry #: ../client/gtk/gui.c:334 msgid "City Wall" msgstr "Stadsmur" #. Tooltip for City Wall menu entry #: ../client/gtk/gui.c:336 msgid "Build a city wall" msgstr "Bygg en stadsmur" #. Menu entry #: ../client/gtk/gui.c:340 msgid "_Settings" msgstr "_Inställningar" #. Menu entry #: ../client/gtk/gui.c:343 msgid "Prefere_nces" msgstr "Inställ_ningar" #. Tooltip for Preferences menu entry #: ../client/gtk/gui.c:345 msgid "Configure the application" msgstr "Konfigurera programmet" #. Menu entry #: ../client/gtk/gui.c:349 ../editor/gtk/editor.c:1297 msgid "_View" msgstr "" #. Menu entry #: ../client/gtk/gui.c:352 ../editor/gtk/editor.c:1341 msgid "_Reset" msgstr "" #. Tooltip for Reset menu entry #: ../client/gtk/gui.c:355 ../editor/gtk/editor.c:1344 msgid "View the full map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:358 ../editor/gtk/editor.c:1347 msgid "_Center" msgstr "" #. Tooltip for Center menu entry #: ../client/gtk/gui.c:360 ../editor/gtk/editor.c:1349 msgid "Center the map" msgstr "" #. Menu entry #: ../client/gtk/gui.c:364 ../client/gtk/gui.c:373 ../editor/gtk/editor.c:1300 #: ../server/gtk/main.c:95 msgid "_Help" msgstr "_Hjälp" #. Menu entry #: ../client/gtk/gui.c:367 msgid "_About Pioneers" msgstr "_Om Pioneers" #. Tooltip for About Pioneers menu entry #: ../client/gtk/gui.c:369 msgid "Information about Pioneers" msgstr "Information om Pioneers" #. Tooltip for Help menu entry #: ../client/gtk/gui.c:375 ../client/gtk/gui.c:1278 msgid "Show the manual" msgstr "Visa manualen" #. Menu entry #: ../client/gtk/gui.c:383 ../editor/gtk/editor.c:1367 msgid "_Fullscreen" msgstr "" #. Tooltip for Fullscreen menu entry #: ../client/gtk/gui.c:386 ../editor/gtk/editor.c:1370 msgid "Set window to full screen mode" msgstr "" #. Menu entry #: ../client/gtk/gui.c:391 msgid "_Toolbar" msgstr "_Verktygsrad" #. Tooltip for Toolbar menu entry #: ../client/gtk/gui.c:393 msgid "Show or hide the toolbar" msgstr "Visa eller göm verktygsraden" #. Victory points target in statusbar #: ../client/gtk/gui.c:496 #, c-format msgid "Points needed to win: %i" msgstr "Poäng krävs för vinst: %i" #: ../client/gtk/gui.c:582 msgid "Messages" msgstr "Meddelanden" #. Tab page name #: ../client/gtk/gui.c:709 ../editor/gtk/editor.c:1520 msgid "Map" msgstr "Karta" #. Tooltip #: ../client/gtk/gui.c:718 msgid "Finish trading" msgstr "Avsluta handel" #. Tab page name #. Button text #: ../client/gtk/gui.c:728 ../client/gtk/quote.c:339 msgid "Quote" msgstr "Pris" #. Tooltip #: ../client/gtk/gui.c:730 msgid "Reject domestic trade" msgstr "Vägra inrikeshandel" #. Tab page name #. Dialog caption #: ../client/gtk/gui.c:740 ../client/gtk/legend.c:228 msgid "Legend" msgstr "Förklaring" #. Tab page name, shown for the splash screen #: ../client/gtk/gui.c:763 msgid "Welcome to Pioneers" msgstr "Välkommen till Pioneers" #. Caption of preferences dialog #: ../client/gtk/gui.c:1047 msgid "Pioneers Preferences" msgstr "Inställningar för Pioneers" #. Label for changing the theme, in the preferences dialog #: ../client/gtk/gui.c:1077 msgid "Theme:" msgstr "Tema:" #. Tooltip for changing the theme in the preferences dialog #: ../client/gtk/gui.c:1100 msgid "Choose one of the themes" msgstr "Välj ett av dessa teman" #. Label for the option to show the legend #: ../client/gtk/gui.c:1104 msgid "Show legend" msgstr "Visa förklaring" #. Tooltip for the option to show the legend #: ../client/gtk/gui.c:1114 msgid "Show the legend as a page beside the map" msgstr "Visa förklaringen som en sida bredvid kartan" #. Label for the option to display log messages in color #: ../client/gtk/gui.c:1119 msgid "Messages with color" msgstr "Meddelanden med färg" #. Tooltip for the option to display log messages in color #: ../client/gtk/gui.c:1129 msgid "Show new messages with color" msgstr "Visa nya meddelanden med färg" #. Label for the option to display chat in color of player #: ../client/gtk/gui.c:1134 msgid "Chat in color of player" msgstr "Chatt i spelarens färg" #. Tooltip for the option to display chat in color of player #: ../client/gtk/gui.c:1145 msgid "Show new chat messages in the color of the player" msgstr "Visa nya chattmeddelanden i samma färg som spelaren" #. Label for the option to display the summary with colors #: ../client/gtk/gui.c:1150 msgid "Summary with color" msgstr "Sammanfattning i färg" #. Tooltip for the option to display the summary with colors #: ../client/gtk/gui.c:1161 msgid "Use colors in the player summary" msgstr "Använd färger i spelarnas sammanfattning" #. Label for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1166 msgid "Toolbar with shortcuts" msgstr "Verktygsrad med genvägar" #. Tooltip for the option to display keyboard accelerators in the toolbar #: ../client/gtk/gui.c:1176 msgid "Show keyboard shortcuts in the toolbar" msgstr "Visa tangentbordsgenvägar i verktygsraden" #. Label for the option to disable all sounds #: ../client/gtk/gui.c:1182 msgid "Silent mode" msgstr "Tyst läge" #. Tooltip for the option to disable all sounds #: ../client/gtk/gui.c:1188 msgid "In silent mode no sounds are made" msgstr "I tyst läge kommer inga ljud att spelas upp" #. Label for the option to announce when players/spectators enter #: ../client/gtk/gui.c:1194 msgid "Announce new players" msgstr "Annonsera nya spelare" #. Tooltip for the option to use sound when players/spectators enter #: ../client/gtk/gui.c:1204 msgid "Make a sound when a new player or spectator enters the game" msgstr "Spela ett ljud när en ny spelare eller åskådare kommer in i spelet" #. Label for the option to use the notifications. #: ../client/gtk/gui.c:1216 msgid "Show notifications" msgstr "" #. Tooltip for notifications option. #: ../client/gtk/gui.c:1226 msgid "Show notifications when it's your turn or when new trade is available" msgstr "" #. Label for the option to use the 16:9 layout. #: ../client/gtk/gui.c:1232 msgid "Use 16:9 layout" msgstr "Använd bredbildslayout" #. Tooltip for 16:9 option. #: ../client/gtk/gui.c:1242 msgid "Use a 16:9 friendly layout for the window" msgstr "Använd en bredbildsvänlig layout för fönstret" #. Caption of about box #: ../client/gtk/gui.c:1254 msgid "About Pioneers" msgstr "Om Pioneers" #. Initial text in status bar #: ../client/gtk/gui.c:1565 ../client/gtk/offline.c:108 msgid "Welcome to Pioneers!" msgstr "Välkommen till Pioneers!" #. The name of the application #. Name of the application #: ../client/gtk/gui.c:1627 ../client/gtk/offline.c:202 #: ../client/gtk/pioneers.desktop.in.h:1 msgid "Pioneers" msgstr "Pioneers" #. Dialog caption #: ../client/gtk/histogram.c:259 msgid "Dice Histogram" msgstr "Tärningshistogram" #: ../client/gtk/interface.c:95 msgid "Ship movement canceled." msgstr "Flyttning av skepp avbröts." #: ../client/gtk/interface.c:103 ../client/gtk/interface.c:104 msgid "Select a new location for the ship." msgstr "Välj en ny plats för skeppet." #. Notification #: ../client/gtk/interface.c:892 msgid "It is your turn to setup." msgstr "" #: ../client/gtk/legend.c:33 msgid "Hill" msgstr "Kulle" #: ../client/gtk/legend.c:34 msgid "Field" msgstr "Fält" #: ../client/gtk/legend.c:35 msgid "Mountain" msgstr "Berg" #: ../client/gtk/legend.c:36 msgid "Pasture" msgstr "Betesmark" #: ../client/gtk/legend.c:37 msgid "Forest" msgstr "Skog" #: ../client/gtk/legend.c:38 msgid "Desert" msgstr "Öken" #: ../client/gtk/legend.c:39 msgid "Sea" msgstr "Hav" #. Label #: ../client/gtk/legend.c:135 msgid "Terrain yield" msgstr "Terrängavkastning" #. Label #: ../client/gtk/legend.c:168 msgid "Building costs" msgstr "Byggnadskostnader" #: ../client/gtk/legend.c:206 ../client/gtk/player.c:55 #: ../editor/gtk/game-buildings.c:11 msgid "City wall" msgstr "Stadsmur" #: ../client/gtk/legend.c:209 ../client/gtk/player.c:66 msgid "Development card" msgstr "Utvecklingskort" #. Dialog caption #. Name of the development card #: ../client/gtk/monopoly.c:84 ../common/cards.c:125 msgid "Monopoly" msgstr "Monopol" #. Label #: ../client/gtk/monopoly.c:105 msgid "Select the resource you wish to monopolize." msgstr "Välj den resurs du önskar monopolisera." #. Dialog caption #: ../client/gtk/name.c:134 msgid "Change Player Name" msgstr "Ändra spelarens namn" #. Label #: ../client/gtk/name.c:163 msgid "Player name:" msgstr "Spelarnamn:" #. Label: set player icon preferences #: ../client/gtk/name.c:222 msgid "Face:" msgstr "Yta:" #. Label: set player icon preferences #: ../client/gtk/name.c:238 msgid "Variant:" msgstr "Variant:" #: ../client/gtk/offline.c:62 msgid "Connect as a spectator" msgstr "Anslut som en åskådare" #: ../client/gtk/offline.c:65 msgid "Meta-server Host" msgstr "Metaservervärd" #: ../client/gtk/offline.c:79 msgid "Select a game to join." msgstr "Välj ett spel att gå in i." #: ../client/gtk/offline.c:95 msgid "Connecting" msgstr "Ansluter" #. Long description in the commandline for pioneers: help #: ../client/gtk/offline.c:170 msgid "- Play a game of Pioneers" msgstr "- Spela en omgång av Pioneers" #: ../client/gtk/pioneers.desktop.in.h:2 msgid "Play a game of Pioneers" msgstr "Spela en omgång av Pioneers" #: ../client/gtk/player.c:53 msgid "Settlements" msgstr "Bosättningar" #: ../client/gtk/player.c:54 msgid "Cities" msgstr "Städer" #: ../client/gtk/player.c:55 msgid "City walls" msgstr "Stadsmurar" #: ../client/gtk/player.c:56 msgid "Largest army" msgstr "Största armé" #: ../client/gtk/player.c:57 #, fuzzy msgid "Longest road" msgstr "Längsta väg" #. Name of the development card #: ../client/gtk/player.c:58 ../common/cards.c:131 msgid "Chapel" msgstr "Kapell" #: ../client/gtk/player.c:58 msgid "Chapels" msgstr "Kapell" #. Name of the development card #: ../client/gtk/player.c:59 ../common/cards.c:134 msgid "Pioneer university" msgstr "Pioneer Universitet" #: ../client/gtk/player.c:59 msgid "Pioneer universities" msgstr "Pioneer Universitet" #. Name of the development card #: ../client/gtk/player.c:61 ../common/cards.c:137 msgid "Governor's house" msgstr "Guvernörens hus" #: ../client/gtk/player.c:61 msgid "Governor's houses" msgstr "Guvenörshus" #. Name of the development card #: ../client/gtk/player.c:62 ../common/cards.c:140 msgid "Library" msgstr "Bibliotek" #: ../client/gtk/player.c:62 msgid "Libraries" msgstr "Bibliotek" #. Name of the development card #: ../client/gtk/player.c:63 ../common/cards.c:143 msgid "Market" msgstr "Marknad" #: ../client/gtk/player.c:63 msgid "Markets" msgstr "Marknader" #. Name of the development card #: ../client/gtk/player.c:64 ../common/cards.c:146 msgid "Soldier" msgstr "Soldat" #: ../client/gtk/player.c:64 msgid "Soldiers" msgstr "Soldater" #: ../client/gtk/player.c:65 msgid "Resource card" msgstr "Resurskort" #: ../client/gtk/player.c:65 msgid "Resource cards" msgstr "Resurskort" #. Caption #: ../client/gtk/player.c:66 ../editor/gtk/editor.c:895 msgid "Development cards" msgstr "Utvecklingskort" #. Caption for the overview of the points and card of other players #: ../client/gtk/player.c:555 msgid "Player summary" msgstr "Sammandrag för spelare" #. Dialog caption #: ../client/gtk/plenty.c:61 msgid "Year of Plenty" msgstr "Guldår" #: ../client/gtk/plenty.c:91 msgid "Please choose one resource from the bank" msgstr "Välj en resurs från banken" #: ../client/gtk/plenty.c:94 msgid "Please choose two resources from the bank" msgstr "Välj två resurser från banken" #: ../client/gtk/plenty.c:96 msgid "The bank is empty" msgstr "Banken är tom" #: ../client/gtk/quote.c:187 #, c-format msgid "%s has %s, and is looking for %s" msgstr "%s har %s och letar efter %s" #. Notification #: ../client/gtk/quote.c:217 #, c-format msgid "New offer from %s." msgstr "" #. Notification #: ../client/gtk/quote.c:242 #, c-format msgid "Offer from %s." msgstr "" #. Label #. Frame title, trade: I want to trade these resources #: ../client/gtk/quote.c:316 ../client/gtk/trade.c:524 msgid "I want" msgstr "Jag vill ha" #. Label #. Frame title, trade: I want these resources in return #: ../client/gtk/quote.c:326 ../client/gtk/trade.c:530 msgid "Give them" msgstr "Ge dem" #. Button text #: ../client/gtk/quote.c:345 msgid "Delete" msgstr "Ta bort" #. Button text #: ../client/gtk/quote.c:370 msgid "Reject Domestic Trade" msgstr "Vägra inrikeshandel" #. Now create columns #. Table header: Player who trades #. Role of the player: player #: ../client/gtk/quote-view.c:171 ../server/gtk/main.c:661 msgid "Player" msgstr "Spelare" #. Table header: Quote #: ../client/gtk/quote-view.c:186 msgid "Quotes" msgstr "Pris" #. trade: maritime quote: %1 resources of type %2 for #. * one resource of type %3 #: ../client/gtk/quote-view.c:302 #, c-format msgid "%d:1 %s for %s" msgstr "%d:1 %s för %s" #. Trade: a player has rejected trade #: ../client/gtk/quote-view.c:441 msgid "Rejected trade" msgstr "Vägrade handel" #. Caption for overview of the resources of the player #: ../client/gtk/resource.c:72 msgid "Resources" msgstr "Resurser" #. Label #: ../client/gtk/resource.c:87 msgid "Total" msgstr "Totalt" #. Tooltip for the amount of resources in the hand #: ../client/gtk/resource-table.c:180 msgid "Amount in hand" msgstr "Mängd i handen" #. Button for decreasing the selected amount #: ../client/gtk/resource-table.c:185 msgid "" msgstr "mer>" #. Tooltip for increasing the selected amount #: ../client/gtk/resource-table.c:226 msgid "Increase the selected amount" msgstr "Öka den valda mängden" #. Tooltip for the selected amount #: ../client/gtk/resource-table.c:243 msgid "Selected amount" msgstr "Vald mängd" #. Tooltip for the total selected amount #: ../client/gtk/resource-table.c:288 msgid "Total selected amount" msgstr "Totalt vald mängd" #. Tooltip when the bank cannot be emptied #: ../client/gtk/resource-table.c:307 msgid "The bank cannot be emptied" msgstr "Banken kan inte tömmas" #: ../client/gtk/settingscreen.c:74 msgid "Yes" msgstr "Ja" #: ../client/gtk/settingscreen.c:76 ../client/gtk/settingscreen.c:222 msgid "No" msgstr "Nej" #: ../client/gtk/settingscreen.c:87 ../client/gtk/settingscreen.c:187 msgid "Unknown" msgstr "Okänd" #: ../client/gtk/settingscreen.c:121 msgid "No game in progress..." msgstr "Inget spel pågår..." #. Label #: ../client/gtk/settingscreen.c:132 msgid "General settings" msgstr "Allmänna inställningar" #: ../client/gtk/settingscreen.c:149 msgid "Number of players:" msgstr "Antal spelare:" #: ../client/gtk/settingscreen.c:153 msgid "Victory point target:" msgstr "Poängmål för seger:" #: ../client/gtk/settingscreen.c:157 msgid "Random terrain:" msgstr "Slumpad terräng:" #: ../client/gtk/settingscreen.c:161 msgid "Allow trade between players:" msgstr "Tillåt handel mellan spelare:" #: ../client/gtk/settingscreen.c:166 msgid "Allow trade only before building or buying:" msgstr "Tillåt handel endast före byggnation eller köp:" #: ../client/gtk/settingscreen.c:171 #, fuzzy msgid "Check victory only at end of turn:" msgstr "Kontrollera seger endast vid turens slut" #: ../client/gtk/settingscreen.c:176 msgid "Amount of each resource:" msgstr "Mängd av varje resurs:" #: ../client/gtk/settingscreen.c:190 #, fuzzy msgid "Sevens rule:" msgstr "Regel för 7:an" #: ../client/gtk/settingscreen.c:196 msgid "Use the pirate to block ships:" msgstr "Använd piraten för att blockera skepp:" #: ../client/gtk/settingscreen.c:225 msgid "Island discovery bonuses:" msgstr "Bonusar för upptäckter av öar:" #. Label #: ../client/gtk/settingscreen.c:242 msgid "Building quotas" msgstr "Byggkostnad" #: ../client/gtk/settingscreen.c:259 msgid "Roads:" msgstr "Vägar:" #: ../client/gtk/settingscreen.c:265 msgid "Settlements:" msgstr "Bosättningar:" #: ../client/gtk/settingscreen.c:271 msgid "Cities:" msgstr "Städer:" #: ../client/gtk/settingscreen.c:277 msgid "City walls:" msgstr "Stadsmurar:" #: ../client/gtk/settingscreen.c:283 msgid "Ships:" msgstr "Skepp:" #: ../client/gtk/settingscreen.c:289 msgid "Bridges:" msgstr "Broar:" #. Label #: ../client/gtk/settingscreen.c:302 msgid "Development card deck" msgstr "Kortlek för utvecklingskort" #: ../client/gtk/settingscreen.c:318 msgid "Road building cards:" msgstr "Vägbyggnadskort:" #: ../client/gtk/settingscreen.c:322 msgid "Monopoly cards:" msgstr "Monopolkort:" #: ../client/gtk/settingscreen.c:326 msgid "Year of plenty cards:" msgstr "Kort för Guldår:" #: ../client/gtk/settingscreen.c:330 msgid "Chapel cards:" msgstr "Kapellkort:" #: ../client/gtk/settingscreen.c:334 msgid "Pioneer university cards:" msgstr "Kort för Pioneer Universitet:" #: ../client/gtk/settingscreen.c:338 msgid "Governor's house cards:" msgstr "Kort för Guvenörshus:" #: ../client/gtk/settingscreen.c:342 msgid "Library cards:" msgstr "Bibliotekskort:" #: ../client/gtk/settingscreen.c:346 msgid "Market cards:" msgstr "Marknadskort:" #: ../client/gtk/settingscreen.c:350 msgid "Soldier cards:" msgstr "Soldatkort:" #. Dialog caption #: ../client/gtk/settingscreen.c:389 msgid "Current Game Settings" msgstr "Inställningar för nuvarande spel" #. trade: you ask for something for free #: ../client/gtk/trade.c:205 #, c-format msgid "ask for %s for free" msgstr "fråga efter %s gratis" #. trade: you give something away for free #: ../client/gtk/trade.c:210 #, c-format msgid "give %s for free" msgstr "ge %s gratis" #. trade: you trade something for something else #: ../client/gtk/trade.c:215 #, c-format msgid "give %s for %s" msgstr "ge %s för %s" #. I want some resources, and give them some resources #: ../client/gtk/trade.c:242 #, c-format msgid "I want %s, and give them %s" msgstr "Jag vill ha %s och ge dem %s" #. Notification #: ../client/gtk/trade.c:348 #, c-format msgid "Quote received from %s." msgstr "" #. Button text, trade: call for quotes from other players #: ../client/gtk/trade.c:539 msgid "_Call for Quotes" msgstr "_Fråga efter pris" #. Button text: Trade page, accept selected quote #: ../client/gtk/trade.c:567 msgid "_Accept Quote" msgstr "_Acceptera pris" #. Button text: Trade page, finish trading #: ../client/gtk/trade.c:573 msgid "_Finish Trading" msgstr "Avsluta _handel" #. Name of the development card #: ../common/cards.c:122 msgid "Road building" msgstr "Vägbygge" #. Name of the development card #: ../common/cards.c:128 msgid "Year of plenty" msgstr "Guldår" #. Description of the 'Road Building' development card #: ../common/cards.c:157 msgid "Build two new roads" msgstr "" #. Description of the 'Monopoly' development card #: ../common/cards.c:160 msgid "" "Select a resource type and take every card of that type held by all other " "players" msgstr "" #. Description of the 'Year of Plenty' development card #: ../common/cards.c:164 msgid "" "Take two resource cards of any type from the bank (cards may be of the same " "or different types)" msgstr "" #. Description of a development card of 1 victory point #: ../common/cards.c:173 msgid "One victory point" msgstr "" #. Description of the 'Soldier' development card #: ../common/cards.c:176 msgid "" "Move the robber to a different space and take one resource card from another " "player adjacent to that space" msgstr "" #: ../common/game.c:499 #, c-format msgid "Obsolete rule: '%s'\n" msgstr "" #: ../common/game.c:506 #, c-format msgid "" "The game uses the new rule '%s', which is not yet supported. Consider " "upgrading.\n" msgstr "" #: ../common/game.c:890 ../common/game.c:921 msgid "This game cannot be won." msgstr "Detta spel kan inte vinnas." #: ../common/game.c:891 msgid "There is no land." msgstr "Det finns inget land." #: ../common/game.c:925 msgid "It is possible that this game cannot be won." msgstr "Det är möjligt att det här spelet inte kan vinnas." #: ../common/game.c:931 msgid "This game can be won by only building all settlements and cities." msgstr "" "Det här spelet kan vinnas endast genom att bygga alla bosättningar och " "städer." #: ../common/game.c:937 #, c-format msgid "" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d" msgstr "" "Nödvändiga vinstpoäng: %d\n" "Poäng för att bygga allt: %d\n" "Poäng i utvecklingskort: %d\n" "Längsta väg/största arme: %d+%d\n" "Maximal upptäcktsbonus för öar: %d\n" "Totalt: %d" #: ../common/gtk/aboutbox.c:76 msgid "" "Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n" msgstr "" "Pioneers är baserad på det utmärkta\n" "brädspelet Settlers of Catan.\n" #: ../common/gtk/aboutbox.c:79 msgid "Version:" msgstr "Version:" #: ../common/gtk/aboutbox.c:85 msgid "Homepage:" msgstr "Webbplats:" #: ../common/gtk/aboutbox.c:90 msgid "Authors:" msgstr "Upphovsmän:" #. Translators: add your name here. Keep the list alphabetically, #. * do not remove any names, and add \n after your name (except the last name). #. #: ../common/gtk/aboutbox.c:104 ../common/gtk/aboutbox.c:115 msgid "translator_credits" msgstr "Daniel Nylander " #. Header for the translator_credits. Use your own language name #: ../common/gtk/aboutbox.c:110 msgid "Pioneers is translated to by:\n" msgstr "Pioneers har översatts till svenska av:\n" #. Caption for result of checking victory points #: ../common/gtk/common_gtk.c:321 msgid "Victory Point Analysis" msgstr "" #. Tooltip for sevens rule normal #: ../common/gtk/game-rules.c:99 msgid "All sevens move the robber or pirate" msgstr "Alla 7:or flyttar rånaren eller piraten" #. Tooltip for sevens rule reroll on 1st 2 turns #: ../common/gtk/game-rules.c:103 msgid "In the first two turns all sevens are rerolled" msgstr "De två första turerna slås alla 7:or om" #. Tooltip for sevens rule reroll all #: ../common/gtk/game-rules.c:107 msgid "All sevens are rerolled" msgstr "Alla sjuor slås om" #: ../common/gtk/game-rules.c:118 msgid "Randomize terrain" msgstr "Slumpa terräng" #: ../common/gtk/game-rules.c:118 msgid "Randomize the terrain" msgstr "Slumpa terrängen" #: ../common/gtk/game-rules.c:121 msgid "Use pirate" msgstr "Använd pirat" #: ../common/gtk/game-rules.c:122 msgid "Use the pirate to block ships" msgstr "Använd piraten för att blockera skepp" #: ../common/gtk/game-rules.c:124 msgid "Strict trade" msgstr "Strikt handel" #: ../common/gtk/game-rules.c:125 msgid "Allow trade only before building or buying" msgstr "Tillåt handel endast före byggnation eller köp" #: ../common/gtk/game-rules.c:127 msgid "Domestic trade" msgstr "Inrikeshandel" #: ../common/gtk/game-rules.c:128 msgid "Allow trade between players" msgstr "Tillåt handel mellan spelare" #: ../common/gtk/game-rules.c:130 msgid "Victory at end of turn" msgstr "Seger vid turens slut" #: ../common/gtk/game-rules.c:131 msgid "Check for victory only at end of turn" msgstr "Kontrollera seger endast vid turens slut" #. Label #: ../common/gtk/game-rules.c:135 #, fuzzy msgid "Island discovery bonuses" msgstr "Bonusar för upptäckter av öar:" #. Tooltip for island bonus #: ../common/gtk/game-rules.c:147 msgid "A comma seperated list of bonus points for discovering islands" msgstr "" #. Tooltip for the check button #: ../common/gtk/game-rules.c:163 #, fuzzy msgid "Check and correct island discovery bonuses" msgstr "Bonusar för upptäckter av öar:" #. Label text for customising a game #: ../common/gtk/game-settings.c:106 msgid "Number of players" msgstr "Antal spelare" #. Tooltip for 'Number of Players' #: ../common/gtk/game-settings.c:125 msgid "The number of players" msgstr "Antalet spelare" #. Label for customising a game #: ../common/gtk/game-settings.c:128 msgid "Victory point target" msgstr "Poäng för vinst" #. Tooltip for Victory Point Target #: ../common/gtk/game-settings.c:148 msgid "The points needed to win the game" msgstr "Poäng som krävs för att vinna spelet" #. Tooltip for the check button #: ../common/gtk/game-settings.c:162 msgid "Is it possible to win this game?" msgstr "Är det möjligt att vinna det här spelet?" #. Port indicator for a resource: trade 2 for 1 #: ../common/gtk/guimap.c:845 msgid "2:1" msgstr "2:1" #. Port indicator: trade 3 for 1 #. General port indicator #: ../common/gtk/guimap.c:848 ../common/gtk/guimap.c:873 msgid "3:1" msgstr "3:1" #. Port indicator for brick #: ../common/gtk/guimap.c:853 msgid "Brick port|B" msgstr "Te" #. Port indicator for grain #: ../common/gtk/guimap.c:857 msgid "Grain port|G" msgstr "Sä" #. Port indicator for ore #: ../common/gtk/guimap.c:861 msgid "Ore port|O" msgstr "Ma" #. Port indicator for wool #: ../common/gtk/guimap.c:865 msgid "Wool port|W" msgstr "Ul" #. Port indicator for lumber #: ../common/gtk/guimap.c:869 msgid "Lumber port|L" msgstr "Ti" #. Tooltip for the list of meta servers #: ../common/gtk/metaserver.c:86 msgid "Select a meta server" msgstr "Välj en metaserver" #. Tooltip for the list of games #: ../common/gtk/select-game.c:104 msgid "Select a game" msgstr "Välj ett spel" #. Log prefix #: ../common/log.c:55 msgid "*ERROR* " msgstr "*FEL* " #. Log prefix #: ../common/log.c:63 msgid "Chat: " msgstr "Chatt: " #. Log prefix #: ../common/log.c:67 msgid "Resource: " msgstr "Resurs: " #. Log prefix #: ../common/log.c:71 msgid "Build: " msgstr "Bygg: " #. Log prefix #: ../common/log.c:75 msgid "Dice: " msgstr "Tärning: " #. Log prefix #: ../common/log.c:79 msgid "Steal: " msgstr "Stjäl: " #. Log prefix #: ../common/log.c:83 msgid "Trade: " msgstr "Handel: " #. Log prefix #: ../common/log.c:87 msgid "Development: " msgstr "Utveckling: " #. Log prefix #: ../common/log.c:91 msgid "Army: " msgstr "Armé: " #. Log prefix #: ../common/log.c:95 msgid "Road: " msgstr "Väg: " #. Log prefix #: ../common/log.c:99 msgid "*BEEP* " msgstr "*PIP* " #. Log prefix #: ../common/log.c:105 msgid "Player 1: " msgstr "Spelare 1: " #. Log prefix #: ../common/log.c:109 msgid "Player 2: " msgstr "Spelare 2: " #. Log prefix #: ../common/log.c:113 msgid "Player 3: " msgstr "Spelare 3: " #. Log prefix #: ../common/log.c:117 msgid "Player 4: " msgstr "Spelare 4: " #. Log prefix #: ../common/log.c:121 msgid "Player 5: " msgstr "Spelare 5: " #. Log prefix #: ../common/log.c:125 msgid "Player 6: " msgstr "Spelare 6: " #. Log prefix #: ../common/log.c:129 msgid "Player 7: " msgstr "Spelare 7: " #. Log prefix #: ../common/log.c:133 msgid "Player 8: " msgstr "Spelare 8: " #. Log prefix #: ../common/log.c:137 msgid "Spectator: " msgstr "" #. Log prefix #: ../common/log.c:141 msgid "** UNKNOWN MESSAGE TYPE ** " msgstr "** OKÄND MEDDELANDETYP ** " #: ../common/network.c:315 #, c-format msgid "Error checking connect status: %s\n" msgstr "Fel vid kontroll av anslutningsstatus: %s\n" #: ../common/network.c:333 #, c-format msgid "Error connecting to host '%s': %s\n" msgstr "Fel vid anslutning till värd \"%s\": %s\n" #: ../common/network.c:360 #, c-format msgid "Error writing socket: %s\n" msgstr "Fel vid skrivning till uttag: %s\n" #: ../common/network.c:411 #, c-format msgid "Error writing to socket: %s\n" msgstr "Fel vid skrivning till uttag: %s\n" #: ../common/network.c:465 msgid "Read buffer overflow - disconnecting\n" msgstr "Överflöde i läsbuffert - kopplar ned\n" #: ../common/network.c:475 #, c-format msgid "Error reading socket: %s\n" msgstr "Fel vid läsning av uttag: %s\n" #: ../common/network.c:618 #, c-format msgid "Error creating socket: %s\n" msgstr "Fel vid skapandet av uttag: %s\n" #: ../common/network.c:625 #, c-format msgid "Error setting socket close-on-exec: %s\n" msgstr "Fel vid inställande av uttag \"close-on-exec\": %s\n" #: ../common/network.c:634 ../common/network.c:830 #, c-format msgid "Error setting socket non-blocking: %s\n" msgstr "Fel vid inställande av icke-blockerande uttag: %s\n" #: ../common/network.c:657 #, c-format msgid "Error connecting to %s: %s\n" msgstr "Fel vid anslutning till %s: %s\n" #: ../common/network.c:695 #, c-format msgid "Cannot resolve %s port %s: %s\n" msgstr "Kan inte slå upp %s port %s: %s\n" #: ../common/network.c:701 #, c-format msgid "Cannot resolve %s port %s: host not found\n" msgstr "Kan inte slå upp %s port %s: värd hittades inte\n" #: ../common/network.c:789 #, c-format msgid "Error creating struct addrinfo: %s" msgstr "Fel vid skapande av adressinfo: %s" #: ../common/network.c:819 #, c-format msgid "Error creating listening socket: %s\n" msgstr "Fel vid skapandet av lyssningsuttag: %s\n" #: ../common/network.c:839 #, c-format msgid "Error during listen on socket: %s\n" msgstr "Fel vid lyssning på uttag: %s\n" #: ../common/network.c:849 msgid "Listening not yet supported on this platform." msgstr "Lyssning stöds ännu inte på denna plattform." #: ../common/network.c:871 ../common/network.c:872 msgid "unknown" msgstr "okänd" #: ../common/network.c:878 #, c-format msgid "Error getting peer name: %s" msgstr "Fel vid läsning av motpartens namn: %s" #: ../common/network.c:890 #, c-format msgid "Error resolving address: %s" msgstr "Fel vid uppslag av adress: %s" #: ../common/network.c:904 msgid "Net_get_peer_name not yet supported on this platform." msgstr "Net_get_peer_name stöds ännu inte på denna plattform." #: ../common/network.c:920 #, c-format msgid "Error accepting connection: %s" msgstr "Fel vid mottagning av anslutning: %s" #: ../common/state.c:168 #, c-format msgid "Connecting to %s, port %s\n" msgstr "Ansluter till %s, port %s\n" #. Error message #: ../common/state.c:291 msgid "State stack overflow. Stack dump sent to standard error.\n" msgstr "Överflöde i statusstack. Stackdump skickar till standard fel.\n" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:90 msgid "_Hill" msgstr "_Kulle" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:92 msgid "_Field" msgstr "_Fält" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:94 msgid "_Mountain" msgstr "_Berg" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:96 msgid "_Pasture" msgstr "Be_tesmark" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:98 msgid "F_orest" msgstr "_Skog" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:100 msgid "_Desert" msgstr "Ök_en" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:102 msgid "_Sea" msgstr "_Hav" #. Use an unique shortcut key for each resource #: ../editor/gtk/editor.c:104 msgid "_Gold" msgstr "_Guld" #. Use an unique shortcut key for each resource #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:106 ../editor/gtk/editor.c:121 msgid "_None" msgstr "_Ingen" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:111 msgid "_Brick (2:1)" msgstr "Te_gel (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:113 msgid "_Grain (2:1)" msgstr "_Spannmål (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:115 msgid "_Ore (2:1)" msgstr "_Malm (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:117 msgid "_Wool (2:1)" msgstr "_Ull (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:119 msgid "_Lumber (2:1)" msgstr "_Timmer (2:1)" #. Use an unique shortcut key for each port type #: ../editor/gtk/editor.c:123 msgid "_Any (3:1)" msgstr "_Någon (3:1)" #. East #: ../editor/gtk/editor.c:128 msgid "East|E" msgstr "Ö" #. North east #: ../editor/gtk/editor.c:130 msgid "North East|NE" msgstr "NÖ" #. North west #: ../editor/gtk/editor.c:132 msgid "North West|NW" msgstr "NV" #. West #: ../editor/gtk/editor.c:134 msgid "West|W" msgstr "V" #. South west #: ../editor/gtk/editor.c:136 msgid "South West|SW" msgstr "SV" #. South east #: ../editor/gtk/editor.c:138 msgid "South East|SE" msgstr "SÖ" #: ../editor/gtk/editor.c:230 msgid "Insert a row" msgstr "" #: ../editor/gtk/editor.c:231 msgid "Delete a row" msgstr "" #: ../editor/gtk/editor.c:232 msgid "Insert a column" msgstr "" #: ../editor/gtk/editor.c:233 msgid "Delete a column" msgstr "" #. Menu item #: ../editor/gtk/editor.c:732 msgid "Shuffle" msgstr "Blanda" #. Caption #. Game settings frame #: ../editor/gtk/editor.c:884 ../server/gtk/main.c:943 msgid "Game parameters" msgstr "Spelparametrar" #. Caption #. Rules frame #: ../editor/gtk/editor.c:887 ../server/gtk/main.c:958 msgid "Rules" msgstr "Regler" #. Caption #: ../editor/gtk/editor.c:889 msgid "Resources" msgstr "Resurser" #. Caption #: ../editor/gtk/editor.c:892 msgid "Buildings" msgstr "Byggnader" #. Application caption #: ../editor/gtk/editor.c:913 ../editor/gtk/pioneers-editor.desktop.in.h:1 msgid "Pioneers Editor" msgstr "Redigerare för Pioneers" #: ../editor/gtk/editor.c:1015 #, c-format msgid "Failed to load '%s'" msgstr "Misslyckades att läsa in \"%s\"" #: ../editor/gtk/editor.c:1063 #, c-format msgid "Failed to save to '%s'" msgstr "Misslyckades att spara till \"%s" #. Name of the file filter: show only games #: ../editor/gtk/editor.c:1080 #, fuzzy msgid "Games" msgstr "_Spel" #. Name of the file filter: show all files #: ../editor/gtk/editor.c:1086 msgid "Unfiltered" msgstr "" #. Dialog caption #: ../editor/gtk/editor.c:1098 msgid "Open Game" msgstr "Öppna spel" #. Dialog caption #: ../editor/gtk/editor.c:1137 msgid "Save As..." msgstr "Spara som..." #. Dialog caption #: ../editor/gtk/editor.c:1183 msgid "Change Title" msgstr "Ändra titel" #. Label #: ../editor/gtk/editor.c:1206 msgid "New title:" msgstr "Ny titel:" #. About dialog caption #: ../editor/gtk/editor.c:1264 msgid "About Pioneers Game Editor" msgstr "Om redigeraren för Pioneers" #. Menu entry #: ../editor/gtk/editor.c:1294 msgid "_File" msgstr "_Fil" #. Menu entry #: ../editor/gtk/editor.c:1304 msgid "_New" msgstr "_Ny" #: ../editor/gtk/editor.c:1305 msgid "Create a new game" msgstr "Skapa ett nytt spel" #. Menu entry #: ../editor/gtk/editor.c:1308 msgid "_Open..." msgstr "_Öppna..." #. Tooltip for Open menu entry #: ../editor/gtk/editor.c:1310 msgid "Open an existing game" msgstr "Öppna ett existerande spel" #. Menu entry #: ../editor/gtk/editor.c:1313 msgid "_Save" msgstr "_Spara" #. Tooltip for Save menu entry #: ../editor/gtk/editor.c:1315 msgid "Save game" msgstr "Spara spel" #. Menu entry #: ../editor/gtk/editor.c:1318 msgid "Save _As..." msgstr "Spar_a som..." #. Tooltip for Save As menu entry #: ../editor/gtk/editor.c:1321 msgid "Save as" msgstr "Spara som" #. Menu entry #: ../editor/gtk/editor.c:1324 msgid "_Change Title" msgstr "Ändra _titel" #. Tooltip for Change Title menu entry #: ../editor/gtk/editor.c:1326 msgid "Change game title" msgstr "Ändra spelets titel" #. Menu entry #: ../editor/gtk/editor.c:1329 ../server/gtk/main.c:98 msgid "_Check Victory Point Target" msgstr "_Kontrollera poängmål för vinst" #. Tooltip for Check Victory Point Target menu entry #. Tooltop for Check Victory Point Target menu entry #: ../editor/gtk/editor.c:1332 ../server/gtk/main.c:101 msgid "Check whether the game can be won" msgstr "Kontrollera huruvida spelet kan vinnas" #. Tooltip for Quit menu entry #: ../editor/gtk/editor.c:1337 msgid "Quit" msgstr "Avsluta" #. Menu entry #: ../editor/gtk/editor.c:1359 msgid "_About Pioneers Editor" msgstr "_Om redigeraren för Pioneers" #. Tooltip for About Pioneers Editor menu entry #: ../editor/gtk/editor.c:1361 msgid "Information about Pioneers Editor" msgstr "Information om redigeraren för Pioneers" #. Long help for commandline option (editor): filename #: ../editor/gtk/editor.c:1414 msgid "Open this file" msgstr "Öppna denna fil" #. Commandline option for editor: filename #. Commandline meta-server: pidfile argument #: ../editor/gtk/editor.c:1416 ../meta-server/main.c:1074 msgid "filename" msgstr "filnamn" #. Long description in the command line: --help #: ../editor/gtk/editor.c:1451 msgid "- Editor for games of Pioneers" msgstr "- Redigerare för Pioneers-spel" #. Error message #: ../editor/gtk/editor.c:1495 ../server/gtk/main.c:1216 #, c-format msgid "Building menus failed: %s" msgstr "Misslyckade att bygga menyer: %s" #. Tab page name #: ../editor/gtk/editor.c:1525 msgid "Settings" msgstr "Inställningar" #. Tab page name #: ../editor/gtk/editor.c:1528 msgid "Comments" msgstr "" #: ../editor/gtk/game-resources.c:48 msgid "Resource count" msgstr "Resurser" #: ../editor/gtk/pioneers-editor.desktop.in.h:2 msgid "Create your own game for Pioneers" msgstr "Skapa ett egna spel för Pioneers" #. Commandline meta-server: daemon #: ../meta-server/main.c:1069 msgid "Daemonize the meta-server on start" msgstr "Kör metaserver som bakgrundsprocess vid start" #. Commandline meta-server: pidfile #: ../meta-server/main.c:1072 msgid "Pidfile to create when daemonizing (implies -d)" msgstr "Pid-fil att skapa vid bakgrundsprocess (betyder -d)" #. Commandline meta-server: redirect #: ../meta-server/main.c:1077 msgid "Redirect clients to another meta-server" msgstr "Omdirigerar klienter till en annan metaserver" #. Commandline meta-server: server #: ../meta-server/main.c:1080 msgid "Use this hostname when creating new games" msgstr "Använd det här värdnamnet när nya spel skapas" #. Commandline meta-server: server argument #: ../meta-server/main.c:1082 msgid "hostname" msgstr "värdnamn" #. Commandline meta-server: port-range #: ../meta-server/main.c:1085 msgid "Use this port range when creating new games" msgstr "Använd det här portintervallet när nya spel skapas" #. Commandline meta-server: port-range argument #: ../meta-server/main.c:1087 msgid "from-to" msgstr "från-till" #. Commandline option of meta server: syslog-debug #: ../meta-server/main.c:1093 msgid "Debug syslog messages" msgstr "Felsökningsmeddelanden till syslog" #. Long description in the commandline for server-console: help #: ../meta-server/main.c:1119 msgid "- Meta server for Pioneers" msgstr "- Metaserver för Pioneers" #: ../meta-server/main.c:1135 #, c-format msgid "meta-server protocol:" msgstr "protokoll för metaserver:" #: ../server/avahi.c:68 msgid "Avahi registration successful.\n" msgstr "" #: ../server/avahi.c:78 #, c-format msgid "Avahi service name collision, renaming service to '%s'.\n" msgstr "" #. Some kind of failure happened while we were registering #: ../server/avahi.c:89 #, c-format msgid "Avahi error: %s\n" msgstr "" #: ../server/avahi.c:113 ../server/avahi.c:147 ../server/avahi.c:157 #: ../server/avahi.c:193 ../server/avahi.c:214 ../server/avahi.c:228 #, c-format msgid "Avahi error: %s, %s\n" msgstr "" #: ../server/avahi.c:215 ../server/avahi.c:229 msgid "Unable to register Avahi server" msgstr "" #: ../server/avahi.c:262 msgid "Unregistering Avahi.\n" msgstr "" #. Menu entry #: ../server/gtk/main.c:109 msgid "_About Pioneers Server" msgstr "_Om Pioneers Server" #. Tooltop for About Pioneers Server menu entry #: ../server/gtk/main.c:111 msgid "Information about Pioneers Server" msgstr "Information om Pioneers Server" #: ../server/gtk/main.c:229 msgid "Stop Server" msgstr "Stoppa server" #: ../server/gtk/main.c:230 msgid "Start Server" msgstr "Starta server" #: ../server/gtk/main.c:232 ../server/gtk/main.c:971 msgid "Stop the server" msgstr "Stoppa servern" #: ../server/gtk/main.c:233 msgid "Start the server" msgstr "Starta servern" #: ../server/gtk/main.c:373 #, c-format msgid "Player %s from %s entered\n" msgstr "Spelaren %s från %s kom in\n" #: ../server/gtk/main.c:380 #, c-format msgid "Player %s from %s left\n" msgstr "Spelaren %s från %s lämnade\n" #: ../server/gtk/main.c:387 #, c-format msgid "Player %d is now %s\n" msgstr "Spelare %d är nu %s\n" #: ../server/gtk/main.c:546 msgid "The port for the game server" msgstr "Porten för spelservern" #. register_toggle #: ../server/gtk/main.c:555 msgid "Register server" msgstr "Registrera server" #: ../server/gtk/main.c:563 msgid "Register this game at the meta server" msgstr "Registrera detta spel på metaservern" #. hostname label #: ../server/gtk/main.c:595 msgid "Reported hostname" msgstr "Rapporterat värdnamn" #: ../server/gtk/main.c:610 msgid "" "The public name of this computer (needed when playing behind a firewall)" msgstr "" "Det publika namnet för denna dator (behövs vid spel bakom en brandvägg)" #. random toggle #: ../server/gtk/main.c:629 #, fuzzy msgid "Random turn order" msgstr "Slumpa fram turordning" #: ../server/gtk/main.c:636 msgid "Randomize turn order" msgstr "Slumpa fram turordning" #. Tooltip for server connection overview #: ../server/gtk/main.c:707 msgid "Shows all players and spectators connected to the server" msgstr "Visar alla spelare och åskådare anslutna till servern" #. Label for column Connected #: ../server/gtk/main.c:712 msgid "Connected" msgstr "Ansluten" #. Tooltip for column Connected #: ../server/gtk/main.c:719 msgid "Is the player currently connected?" msgstr "Är spelaren ansluten för närvarande?" #. Label for column Name #: ../server/gtk/main.c:724 msgid "Name" msgstr "Namn" #. Tooltip for column Name #: ../server/gtk/main.c:731 msgid "Name of the player" msgstr "Spelarens namn" #. Label for column Location #: ../server/gtk/main.c:735 msgid "Location" msgstr "Plats" #. Tooltip for column Location #: ../server/gtk/main.c:742 msgid "Host name of the player" msgstr "Värdnamn för spelaren" #. Label for column Number #: ../server/gtk/main.c:748 msgid "Number" msgstr "Nummer" #. Tooltip for column Number #: ../server/gtk/main.c:755 msgid "Player number" msgstr "Spelarens nummer" #. Label for column Role #: ../server/gtk/main.c:761 msgid "Role" msgstr "Roll" #. Tooltip for column Role #: ../server/gtk/main.c:765 msgid "Player or spectator" msgstr "" #. Button text #: ../server/gtk/main.c:801 msgid "Launch Pioneers Client" msgstr "Starta Pioneers-klient" #. Tooltip #: ../server/gtk/main.c:809 msgid "Launch the Pioneers client" msgstr "Starta Pioneers-klienten" #. ai chat toggle #: ../server/gtk/main.c:843 msgid "Enable chat" msgstr "Aktivera chatt" #. Tooltip #: ../server/gtk/main.c:850 msgid "Enable chat messages" msgstr "Aktivera chattmeddelanden" #. Button text #: ../server/gtk/main.c:859 msgid "Add Computer Player" msgstr "Lägg till datorspelare" #. Tooltip #: ../server/gtk/main.c:867 msgid "Add a computer player to the game" msgstr "Lägg till en datorspelare till spelet" #. Tooltip #: ../server/gtk/main.c:900 msgid "Messages from the server" msgstr "Meddelanden från servern" #: ../server/gtk/main.c:936 msgid "Game settings" msgstr "Spelinställningar" #. server frame #: ../server/gtk/main.c:947 msgid "Server parameters" msgstr "Serverparametrar" #: ../server/gtk/main.c:967 msgid "Running game" msgstr "Pågående spel" #. player connected frame #: ../server/gtk/main.c:983 msgid "Players connected" msgstr "Anslutna spelare" #. ai frame #: ../server/gtk/main.c:987 msgid "Computer players" msgstr "Datorspelare" #. message frame #: ../server/gtk/main.c:999 msgid "Messages" msgstr "Meddelanden" #. Dialog caption of about box #: ../server/gtk/main.c:1110 msgid "The Pioneers Game Server" msgstr "Pioneers spelserver" #. Wait for all players to disconnect, #. * then enable the UI #. #: ../server/gtk/main.c:1118 msgid "The game is over.\n" msgstr "Spelet är över.\n" #. Long description in the commandline for server-gtk: help #. Long description in the commandline for server-console: help #: ../server/gtk/main.c:1172 ../server/main.c:176 msgid "- Host a game of Pioneers" msgstr "- Stå värd för en omgång av Pioneers" #. Name in the titlebar of the server #: ../server/gtk/main.c:1196 ../server/gtk/pioneers-server.desktop.in.h:1 msgid "Pioneers Server" msgstr "Pioneers-server" #: ../server/gtk/pioneers-server.desktop.in.h:2 msgid "Host a game of Pioneers" msgstr "Stå värd för en omgång av Pioneers" #. Commandline server-console: game-title #: ../server/main.c:76 msgid "Game title to use" msgstr "Speltitel att använda" #. Commandline server-console: file #: ../server/main.c:79 msgid "Game file to use" msgstr "Spelfil att använda" #. Commandline server-console: port #: ../server/main.c:82 msgid "Port to listen on" msgstr "Port att lyssna på" #. Commandline server-console: players #: ../server/main.c:85 msgid "Override number of players" msgstr "Åsidosätt antalet spelare" #. Commandline server-console: points #: ../server/main.c:88 msgid "Override number of points needed to win" msgstr "Åsidosätt antalet poäng som behövs för att vinna" #. Commandline server-console: seven-rule #: ../server/main.c:91 msgid "Override seven-rule handling" msgstr "Åsidosätt hantering av 7-regeln" #. Commandline server-console: terrain #: ../server/main.c:94 msgid "Override terrain type, 0=default 1=random" msgstr "Åsidosätt terrängtyp, 0=standard 1=slumpad" #. Commandline server-console: computer-players #: ../server/main.c:97 msgid "Add N computer players" msgstr "Lägg till N datorspelare" #. Commandline server-console: register #: ../server/main.c:107 msgid "Register server with meta-server" msgstr "Registrera server med metaserver" #. Commandline server-console: meta-server #: ../server/main.c:110 msgid "Register at meta-server name (implies -r)" msgstr "Registrera mot metaserver (förutsätter -r)" #. Commandline server-console: hostname #: ../server/main.c:114 msgid "Use this hostname when registering" msgstr "Använd detta värdnamn vid registrering" #. Commandline server-console: auto-quit #: ../server/main.c:121 msgid "Quit after a player has won" msgstr "Avsluta efter att en spelare har vunnit" #. Commandline server-console: empty-timeout #: ../server/main.c:124 msgid "Quit after N seconds with no players" msgstr "Avsluta efter N sekunder utan spelare" #. Commandline server-console: tournament #: ../server/main.c:127 msgid "Tournament mode, computer players added after N minutes" msgstr "Turneringsläge, datorspelare läggs till efter N minuter" #. Commandline server-console: admin-port #: ../server/main.c:131 msgid "Admin port to listen on" msgstr "Administrationsport att lyssna på" #. Commandline server-console: admin-wait #: ../server/main.c:134 msgid "Don't start game immediately, wait for a command on admin port" msgstr "" "Starta inte spelet direkt, vänta på ett kommando på administrationsporten" #. Commandline server-console: fixed-seating-order #: ../server/main.c:140 msgid "Give players numbers according to the order they enter the game" msgstr "Ge spelare nummer enligt den ordning de kom in i spelet" #. Commandline server-console: Short description of meta group #: ../server/main.c:182 msgid "Meta-server Options" msgstr "Metaserveralternativ" #. Commandline server-console: Long description of meta group #: ../server/main.c:184 msgid "Options for the meta-server" msgstr "Alternativ för metaservern" #. Commandline server-console: Short description of misc group #: ../server/main.c:193 msgid "Miscellaneous Options" msgstr "Diverse alternativ" #. Commandline server-console: Long description of misc group #: ../server/main.c:195 msgid "Miscellaneous options" msgstr "Diverse alternativ" #. server-console commandline error #: ../server/main.c:225 #, c-format msgid "Cannot set game title and filename at the same time\n" msgstr "Kan inte ställa in speltitel och filnamn på samma gång\n" #. server-console commandline error #: ../server/main.c:242 #, c-format msgid "Cannot load the parameters for the game\n" msgstr "Kan inte läsa in parametrarna för spelet\n" #. Error message #: ../server/main.c:275 #, c-format msgid "Admin port not available.\n" msgstr "" #. server-console commandline error #: ../server/main.c:282 #, c-format msgid "Admin port is not set, cannot disable game start too\n" msgstr "" "Administrationsporten är inte inställd, kan inte inaktivera spelstart " "heller\n" #: ../server/meta.c:187 #, c-format msgid "Register with meta-server at %s, port %s\n" msgstr "Registrera mot metaservern på %s, port %s\n" #: ../server/meta.c:205 msgid "Unregister from meta-server\n" msgstr "Avregistrera från metaserver\n" #: ../server/player.c:140 msgid "chat too long" msgstr "chatt för lång" #: ../server/player.c:157 msgid "name too long" msgstr "namn för långt" #: ../server/player.c:189 msgid "ignoring unknown extension" msgstr "ignorerar okänd utökning" #: ../server/player.c:226 ../server/player.c:296 msgid "The last player left, the tournament timer is reset." msgstr "Sista spelaren kvar, turneringens tidtagare nollställs." #: ../server/player.c:260 ../server/player.c:637 msgid "No human players present. Bye." msgstr "" #: ../server/player.c:267 msgid "Game starts, adding computer players." msgstr "Spelet startar, lägger till datorspelare." #: ../server/player.c:309 #, c-format msgid "The game starts in %s minutes." msgstr "Spelet startar om %s minuter." #: ../server/player.c:310 #, c-format msgid "The game starts in %s minute." msgstr "Spelet startar om %s minut." #. Default name for the AI when the computer_names file #. * is not found or empty. #. #: ../server/player.c:368 ../server/player.c:374 msgid "Computer Player" msgstr "Datorspelare" #: ../server/player.c:469 msgid "Sorry, game is over." msgstr "Tyvärr, spelet är över." #: ../server/player.c:472 #, c-format msgid "Player from %s is refused: game is over\n" msgstr "Spelare från %s nekas: spelet är över\n" #: ../server/player.c:514 msgid "Name not changed: new name is already in use" msgstr "Namn inte ändrat: nytt namn används redan" #: ../server/player.c:632 ../server/server.c:43 msgid "Was hanging around for too long without players... bye.\n" msgstr "Väntade för länge utan några spelare... adjö.\n" #: ../server/player.c:716 msgid "The last human player left. Waiting for the return of a player." msgstr "" #: ../server/player.c:737 msgid "Resuming the game." msgstr "" #. %s is the name of the reconnecting player #: ../server/player.c:868 #, c-format msgid "%s has reconnected." msgstr "%s har återanslutit." #: ../server/player.c:973 #, c-format msgid "Version mismatch: %s" msgstr "Versionen stämmer inte: %s" #: ../server/player.c:1010 msgid "This game will start soon." msgstr "Detta spel kommer strax att startas." #. Server: preparing game #..... #: ../server/server.c:236 msgid "Preparing game" msgstr "Förbereder spel" #: ../server/server.c:388 ../server/server.c:477 #, c-format msgid "Looking for games in '%s'\n" msgstr "Letar efter spel i '%s'\n" #: ../server/server.c:390 ../server/server.c:479 #, c-format msgid "Game directory '%s' not found\n" msgstr "Spelkatalogen \"%s\" hittades inte\n" #: ../server/turn.c:253 msgid "Island Discovery Bonus" msgstr "Bonus för upptäckt av ö" #: ../server/turn.c:254 msgid "Additional Island Bonus" msgstr "Bonus för ytterligare ö" #: ../server/turn.c:385 msgid "Tried to assign resources to NULL player.\n" msgstr "Försökte tilldela resurser till NOLL spelare.\n" #. Cheat mode has been activated #: ../server/turn.c:493 msgid "The dice roll has been determined by the administrator." msgstr "Tärningskastet har bestämts av administratören." #~ msgid "Viewer %d" #~ msgstr "Åskådare %d" #~ msgid "viewer %d" #~ msgstr "åskådare %d" #~ msgid "I want" #~ msgstr "Jag vill ha" #~ msgid "Give them" #~ msgstr "Ge dem" #~ msgid "Viewer: " #~ msgstr "Åskådare: " #~ msgid "Number of AI Players" #~ msgstr "Antal AI-spelare" #~ msgid "The number of AI players" #~ msgstr "Antalet AI-spelare" #~ msgid "Recent Games" #~ msgstr "Tidigare spel" #~ msgid "You may choose 1 resource" #~ msgstr "Du får välja 1 resurs" #~ msgid "_Player name" #~ msgstr "_Spelarnamn" #~ msgid "The Pioneers Game" #~ msgstr "Spelet Pioneers" #~ msgid "Select the ship to steal from" #~ msgstr "Välj det skepp du vill stjäla från" #~ msgid "Select the building to steal from" #~ msgstr "Välj den byggnad du vill stjäla från" #~ msgid "Development Card" #~ msgstr "Utvecklingskort" #~ msgid "Player Name:" #~ msgstr "Spelarnamn:" #~ msgid "I Want" #~ msgstr "Jag vill ha" #~ msgid "Interplayer Trading Allowed?" #~ msgstr "Tillåta handel mellan spelare?" #~ msgid "Trading allowed only before build/buy?" #~ msgstr "Handel tillåtet endast före byggnation/köp?" #~ msgid "Check Victory Only At End Of Turn?" #~ msgstr "Kontrollera seger endast vid turens slut?" #~ msgid "Sevens Rule:" #~ msgstr "Regel för 7:an:" #~ msgid "Use Pirate:" #~ msgstr "Använd pirat:" #~ msgid "Number of Players" #~ msgstr "Antal spelare" #~ msgid "Development Cards" #~ msgstr "Utvecklingskort" #~ msgid "Save as..." #~ msgstr "Spara som..." #~ msgid "Pioneers Game Editor" #~ msgstr "Spelredigerare för Pioneers" #~ msgid "_Change title" #~ msgstr "Ändra tit_el" #~ msgid "Random Turn Order" #~ msgstr "Slumpad turordning" #~ msgid "_Legend" #~ msgstr "_Förklaring" #~ msgid "bad scaling mode '%s'" #~ msgstr "fel skalläge \"%s\"" #~ msgid "Missing game directory\n" #~ msgstr "Saknar spelkatalog\n" #~ msgid "Leave empty for the default meta server" #~ msgstr "Lämna blank för den förvalda metaservern" #~ msgid "Override the language of the system" #~ msgstr "Ställ in språk" #~ msgid "The address of the meta server" #~ msgstr "Adressen för metaservern" pioneers-14.1/po/ChangeLog0000644000175000017500000003704711760645356012424 000000000000002012-05-28 Roland Clobus * all: Line number update for 14.1 2012-05-27 Roland Clobus * gl.po, hu.po, pt.po: /me says ... -> use /me in all translations * gl.po, hu.po: Added reviewed items of Launchpad 2012-05-26 DeigoJ * es.po: Updated to 0.12.5 (Import from Launchpad) 2012-05-26 Pit Garbe * de.po: Updated to 0.12.5 (Import from Launchpad) 2012-05-24 Filipe Roque * pt.po: Updated to 14.1 2012-05-23 Jean-Charles GRANGER * fr.po: Updated to 14.1 2012-05-22 Giancarlo Capella * it.po: Updated to 14.1 2012-05-19 Roland Clobus * all: Updated for 14.1 * nl.po: Updated to 14.1 * en_GB.po: Updated to 14.1 2012-04-27 Roland Clobus * en_GB.po: Fixed the strings with | 2012-01-17 Roland Clobus * nl.po: Removed an extra space. 2011-10-30 Roland Clobus * af.po, de.po, sv.po: Fixed 'Spectator' translations. * nl.po: Fixed a typo. * all: Updated line numbers for the 0.12.5 release. 2011-10-24 Giancarlo Capella * it.po: Modifications for the View menu. 2011-10-24 Giancarlo Capella * it.po: Updated for 0.12.5 2011-10-23 Jean-Charles GRANGER * fr.po: Updated for 0.12.5 2011-10-22 Roland Clobus * all: Updated for 0.12.5 string freeze. * en_GB.po, nl.po: Updated for 0.12.5 2011-02-13 Roland Clobus * nl.po: Undo -> Ongedaan maken 2011-01-28 Roland Clobus * nl.po: Typo. 2011-01-26 Roland Clobus * all: Adjustment of line numbers for 0.12.4 release. 2011-01-22 Michael Wiktowy * es.po: Also the fuzzy translations. 2011-01-16 Roland Clobus * af.po, cs.po, da.po, es.po, pt.po: Synchronized with Launchpad. 2011-01-16 Michael Wiktowy * es.po: Added missing translations. 2010-11-27 Roland Clobus * ja.po, pt.po, sv.po: Updated the trivial changes. 2010-11-25 Roland Clobus * es.po, gl.po, hu.po: Updated the trivial changes. 2010-11-23 Roland Clobus * af.po, cs.po, da.po: Updated the trivial changes. 2010-11-16 Roland Clobus * de.po: Updated the trivial changes. 2010-11-10 Jean-Charles GRANGER * fr.po: Updated for 0.12.4 2010-10-26 Giancarlo Capella * it.po: Updated for 0.12.4 2010-10-26 Roland Clobus * all: Updated for 0.12.4 string freeze * nl.po, en_GB.po: Updated for 0.12.4 * all: Added rule for plurals 2010-10-26 Roland Clobus * all: Updated for 0.12.4 string freeze 2010-10-08 Roland Clobus * POTFILES.in: Added common/gtk/common_gtk.c * all: Synchronised from 0.12.3 branch 2010-04-06 Roland Clobus * LINGUAS, gl.po: Added translation to Galician by Indalecio Freira Santos. * nl.po: Added missing keyboard shortcuts. * sv.po: Updated from Launchpad.net * cs.po, pt.po: Updated from Launchpad.net 2010-04-04 Roland Clobus * de.po: Updated from Launchpad.net 2010-03-27 Roland Clobus * all: Based on svn 1488 (branch 0.12.3) and 1524: Use en_US spelling (canceled and monopolize) * en_GB.po: Imported from Launchpad, thanks to Philipp Kleinhenz. This translation inspired the spelling correction to en_US in the source code. * check-spelling.sh: Script to check the spelling of a language. 2010-03-25 Roland Clobus * nl.po: Another round of spell checking 2010-03-18 Roland Clobus * es.po: Merged with Launchpad 2010-03-11 19:48+0000 * nl.po: Use a spell checker 2010-03-11 Roland Clobus * de.po: Improvement suggested by Jochen Kemnade on Launchpad 2010-01-24 Roland Clobus * nl.po: Fixed a translation and removed a few wrong word separations 2009-11-04 Roland Clobus * all: Final line number update for 0.12.3 2009-10-25 Roland Clobus * fr.po: Fixed a typo found by agendacobra 2009-10-20 Roland Clobus * it.po: Fixed some double keyboard shortcuts 2009-10-20 Giancarlo Capella * it.po: Updated to 0.12.3 2009-10-18 Jean-Charles GRANGER * fr.po: Updated to 0.12.3 2009-10-18 Roland Clobus * fr.po: Fixed some double keyboard shortcuts 2009-10-16 Roland Clobus * fr.po: Synchronisation with Launchpad.net 2009-10-15 Roland Clobus * all: Line number update for 0.12.3 * nl.po: Updated to 0.12.3, fixed a typo * ja.po: Synchronisation with Launchpad.net * pt:po: Synchronisation with Launchpad.net 2008-05-01 Roland Clobus * fr.po, hu.po, it.po, nl.po, sv.po: Update 0.12.1 to 0.12.2 * da.po, de.po, es.po, fr.po, hu.po, pt.po: Synchronisation with Launchpad.net * all: Line number update to 0.12.2 2008-04-27 Roland Clobus * all: Line number update for 0.12.1 2008-04-27 Filipe Roque * pt.po: Synchronisation with Launchpad.net 2008-04-27 Roland Clobus * fr.nl, nl.po, hu.po, it.po, sv.po: Version 0.11.4 is actually 0.12.1 * nl.po: Synchronisation with Launchpad.net 2008-04-09 Ferenc Bnhidi * hu.po: Updated to 0.11.4 2008-04-01 Jean-Charles GRANGER * fr.po: Updated to 0.11.4 2008-04-01 Daniel Nylander * sv.po: Updated to 0.11.4 2008-04-01 Giancarlo Capella * it.po: Updated to 0.11.4 2008-04-01 Jean-Charles GRANGER * fr.po: Added the missing strings 2008-03-27 Roland Clobus * nl.po: Updated to 0.11.4 2008-03-26 Roland Clobus * all: Updated for the string freeze of 0.11.4 (added translator_credits), this is the 'real' string freeze. 2008-03-25 Roland Clobus * all: String freeze for 0.11.4 2008-03-23 Ladislav Dobias * cs.po: New Czech translation 2008-03-23 Roland Clobus Synchronisation with Launchpad.net (2008-03-13) * af.po, da.po, de.po, es.po, fr.po, hu.po, it.po, ja.po, nl.po, pt.po, sv.po: Synchronisation with Launchpad.net (2008-03-13), most changes are whitespaces at the end of strings. * es.po: Some modifications by Kiba-Kun 2008-03-23 Roland Clobus * af.po, de.po, hu.po, nl.po, pt.po: Converted to utf-8 2007-12-09 Filipe Roque * pt.po: New Portuguese translation 2007-12-09 Carson (http://launchpad.net/~nanker) * da.po: New Danish translation 2007-12-09 Roland Clobus * all: Reverted changes made 2007-11-22, because it is not time for a release yet. 2007-11-22 Roland Clobus * all: Updated linenumbers for 0.11.4 release * nl.po: Update for 0.11.4 2007-10-07 Roland Clobus * all: Updated linenumbers for 0.11.3 release * de.po, fr.po, hu.po, it.po, ja.po, nl.po, sv.po: Updated version number to 0.11.3 2007-08-05 Roland Clobus * all: Updated linenumbers for 0.11.2 release 2007-07-22 Roland Clobus * all: Updated to 0.11.1 release 2007-07-22 Pit Garbe * de.po: Small update 2007-07-21 Ferenc Bnhidi * hu.po: Updated for 0.11.1 2007-07-20 Yasuhiko Takasugi * ja.po: Small update 2007-07-19 Yasuhiko Takasugi * ja.po: Updated to 0.11.1 2007-07-18 Giancarlo Capella * it.po: Updated to 0.11.1 2007-07-17 Daniel Nylander * sv.po: Updated to 0.11.1 2007-07-17 Jean-Charles GRANGER * fr.po: Updated 2007-07-16 Jean-Charles GRANGER * fr.po: Updated to 0.11.1 2007-07-14 Pit Garbe * de.po: Updated to 0.11.1 2007-07-12 Roland Clobus * nl.po: Updated to 0.11.1 * All: updated the *.po files for the pending release The strings for player shape and the robber fix have also been added. 2007-05-13 Roland Clobus * POTFILES.in: editor/gtk/game-settings.c was renamed to common/gtk/game-rules.c * POTFILES.in: common/game.c also contains translatable strings 2007-04-08 Yasuhiko Takasugi * ja.po: Updated (File date 2007-01-28) 2007-04-08 Daniel Nylander * sv.po: Updated to 0.10.2 (File date 2007-01-10) 2006-11-17 Roland Clobus * All Project-Id-Version fields use the same style 2006-11-16 Jean-Charles GRANGER * fr.po: Updated 2006-11-16 Petri Jooste * af.po: Updated 2006-11-14 Roland Clobus * ja.po: Fixed the last fuzzy translation 2006-11-13 Yasuhiko Takasugi * ja.po: Updated 2006-11-10 Jean-Charles GRANGER * fr.po: Updated 2006-11-10 Petri Jooste * af.po: Updated 2006-11-10 Yasuhiko Takasugi * ja.po: Added initial version 2006-10-19 Petri Jooste * af.po: Added initial version 2006-10-17 Roland Clobus * de.po: Added shortcuts for the resources in the editor 2006-10-17 Giancarlo Capella * it.po: Updated to 0.10.2 2006-09-16 Roland Cloubs * Release 0.10.2 2006-09-13 Roland Clobus * Updated templates for release 0.10.2 * nl.po: Updated 2006-08-30 Roland Clobus * nl.po: Fixed a typo 2006-08-26 Roland Clobus * Last update before the release of 0.10.1 2006-08-23 Marco Antonio Giraldo * es.po: Some corrections 2006-08-21 Marco Antonio Giraldo * es.po: Updated 2006-08-20 Giancarlo Capella * it.po: Updated and converted to utf8 2006-08-18 Daniel Nylander * sv.po: Updated 2006-08-17 Roland Clobus * Updated templates for release 0.10.1 * nl.po: Updated 2006-08-11 Pit Garbe * de.po: Small correction 2006-08-10 Roland Clobus * Updated templates for 0.10.1 * nl.po: Updated for 0.10.1 2006-08-06 Roland Clobus * de.po: Use Lehm instead of Stein for brick 2006-08-05 Roland Clobus * POTFILES.in: added client/ai/lobbybot.c, removed client/common/chat.c 2006-07-24 Roland Clobus * it.po: Restored old translations for quote-view.c 2006-07-05 Roland Clobus * Translation markup removed for g_error and g_warning messages * Updated all templates 2006-07-05 Ronny Standtke * POTFILES.in: added missing quote-view.c * de.po: Added missing translations 2006-06-23 Daniel Nylander * sv.po: Updated for 0.9.64 2006-06-23 Pit Garbe * de.po: Updated for 0.9.64 2006-05-28 Roland Clobus * Regenerated all, update case changes 2006-05-24 LT-P * fr.po: Some updates 2006-05-24 Giancarlo Capella * it.po: Updated for 0.9.62 (621t) 2006-05-23 Roland Clobus * Updated templates for 0.9.62 * nl.po: Updated for 0.9.62 (621t) 2006-03-08 Ferenc Bnhidi * hu.po: Updated for 0.9.61 2006-03-08 Roland Clobus * fr.po: Updated translations for ports 2006-03-08 Giancarlo Capella * it.po: Minor updates 2006-03-07 LT-P * fr.po: Updated for 0.9.61, changed encoding to UTF-8 2006-03-07 Daniel Nylander * sv.po : Updated for 0.9.61 2006-03-04 Roland Clobus * nl.po: Updated for 0.9.61 2006-03-04 Giancarlo Capella * it.po: Updated for 0.9.61 2006-02-02 Daniel Nylander * sv.po: Added the missing translations 2006-01-25 Roland Clobus * nl.po: Added the new strings * de.po, fr.po, it.po: Removed some obviously wrong translated fuzzy entries * Updated line numbers to match 0.9.49 2006-01-12 Daniel Nylander * sv.po: Added Swedish translation 2005-12-30 Roland Clobus * nl.po: Fixed a typo 2005-12-21 Roland Clobus * Updated the translations to match the 0.9.40 release * nl.po: Added one translation 2005-11-16 Roland Clobus * nl.po: Fixed 2 typos 2005-10-02 Roland Clobus * Updated line numbers to match 0.9.32 2005-09-09 Ferenc Bnhidi * hu.po: Added Hungarian translation 2005-08-14 Roland Clobus * Added formatting tags to modified strings in 0.9.22 * nl.po: Added a new string 2005-07-14 Roland Clobus * Updated the translations for the shortcut keys in the toolbar, removed again in 0.9.19 2005-07-06 Giancarlo Capella * it.po: Updated to 0.9.17 2005-07-03 Roland Clobus * Updated for Q_() patch 2005-07-03 Jens Seidel * de.po: Minor translation update (Debian bug #314082) 2005-06-30 Roland Clobus * nl.po, pioneers.pot: Complete Gnocatan free 2005-06-25 Steve Langasek * pioneers.pot: new gettext package name * de.po, es.po, fr.po, it.po, nl.po: sync translations to match the Gnocatan->Pioneers rebranding, where possible * de.po, nl.po: fix up a C string translation in each of these files which gets rejected by current gettext as being invalid 2005-06-05 Roland Clobus * fr.po, nl.po: Updated for Q_() patch 2005-05-01 Roland Clobus * Updated to build 0.9.11 2005-04-26 Roland Clobus * nl.po: Updated Dutch translations to CVS 0.9.10 * it.po: Removed clearly wrong Italian translations 2005-03-20 Roland Clobus * Updated to build 0.8.1.57 2005-03-02 Roland Clobus * Updated to build 0.8.1.54 2005-02-03 Roland Clobus * Updated translations to build 0.8.1.52 * es.po: Removed some clearly wrong translations 2005-01-09 Roland Clobus * Marked several clearly wrong translations as not translated instead of fuzzy. 2004-11-21 Roland Clobus * Applied bold tags to translations, where applicable 2004-11-05 LT-P * fr.po: Spelling corrections 2004-10-27 Roland Clobus * Updated all files to fit 0.8.1.41 * nl.po: Added the missing translations. Changed translation of 'chat' 2004-10-13 Roland Clobus * nl.po: fixing a typo 2004-10-01 Roland Clobus * POTFILES.in: Regenerated from scratch, removed admin-gtk.c (old) * Updated all files to fit 0.8.1.37 2004-09-26 Roland Clobus * .cvsignore: Added Makefile.in.in, it is a generated file * POTFILES.in: Added client/ai/greedy.c, server/turn.c 2004-09-15 Arjen Schrijver * nl.po: fixing a typo 2004-09-15 Roland Clobus * ChangeLog: Added the ChangeLog again, it is required for 'make distcheck' and automake-1.7 pioneers-14.1/po/POTFILES.skip0000644000175000017500000000002710754650106012742 00000000000000client/gtk/admin-gtk.c pioneers-14.1/po/LINGUAS0000644000175000017500000000014511356662015011654 00000000000000# Add your language here. # Keep this list alphabetical af cs da de en_GB es fr gl hu it ja nl pt sv

8[5Լn2DlYi=2X8!iXJc鶻`w-ULH8xP}w^ˀ^S) uIPu?u/eo:dqCb4ۡ|S9_/ă(M7-~nBƹNSP!W_{O,!Iٱ7< ]zKet;op6>H:;`_-tU:Ekw,=ɜ"_}5ds,EZϬ7"!28S4'TēGDڒU]{J>y3sַNZH4J O;UrIeU./|`Z@ EcD"#.*sLe\!p2o|wնAa$EJBe@A9H8?os'bPZ`تĔmJk*5 7DQ䇵Bxsb 1hZedzO+.wo/"ZژkTdVDC {*Q-<0B1rXaЉ%+ƛ3wEo}EDjLvwޤB)tx(rYu5qYx)T F)|!N: Sn4 !˃o;^X1cty=vԝ3Gl#oeч?x 5oчp7Y߼x٦'%B9f6x `gٜuld !+s`UVBB yiXB(1aNP*%"t>wD,$R.O9T8WwN {pB1sQ̄\xHz!:BZKq}ٿ1}4t\h,eyEsBo8uā%4Cb9œ͘noQ&RFFGm D$bt!UB!\Ńoi@r't#s7Gkz@S6֜[b_Tv }@Hl4h% [[#rkHt\s,0x;"_ˊNy ^yӋbtD>L3/όc4t22ب"]@Ɋt9g~0 T&hَH{dAɊBы47ȲbBkh:/{}}/7竐(DbrHVoJDl$Qd2@iv",vH[caFzX(0ԎyJ&Bbr%Jq:uHkq"op%j((J q|a(~F>Xw-Z\U> mZE%oUXb AWB)DjKX٫9?dqX^o#KO㌻9g3V;- "lhd8uH*f t .MH[_U\q=̃F AФ~B$ ˫Qx8,rTe|6c6yaM;`N"n0P`3|osbEdgɅ-l^@8"gwM mFLݢt !@@5Cq wȷwA0IYG쑝h!:\U?Ԓq$" CFӌ"o5Q*@#aimV DW|zˀ?/"'ddU[LK1ӋVuneD1GG#"_78 =k1./,SǠ1Mf`uA7#nK*˱N)vvW?ӊ>t3N6KkA|6k(4M{lop~cݽ~kq ,,,$*pe3s4dm9leJgβ&U^kI#F`q\IVqKE > Ù38~ {{d6y0dHC,jL7wk5O|+$x`]%3{M)AW'+bKW1s~T)F34!$یIt$1Ʉk,f g{ +w^x&do8갺F P"e:2􉣐,)˒gp饰*@bv@Yd7詷׳}: ڃ`2ڥϰֻ0 (JbepR#)T@s#i 0}]Bצּ-8]BETwCUy^*zh"nH|6'8MI#I@& #vv( Cc1͘3; ̙϶YǷ] __r|{^c@6Є"x1dGy`/*~9=4Փ'Ov=B!ޘl2fm3ޮ W ,C'/{B@E4$ }E-iIcLnWqg/܂iQdhu$ǏGD(iLsF [9̀VÇv! n~nj@*08;rPU[$j TIU8eX'lu@gQ!zwBۗ?✣$g7ON*`/rUJ_dw0[htO" >Z~@TMat/6{7%n-: =md?f>A/HDҌ˲[/V\ gw=Hݵ,UeiuG)Ǐ"Cf^_Bt2Z˙p.2z}v ,K ěI9}^dxsa{ʠM:[DވO#H*C`qJTl6Q:A1'C $ :Xd<V+/!#}@@(W|W39M@i%c00i4 ڜ=E:Q!RI;S5/|5=?EW9&s;O]$tӒ%%v[[mO!cğW;i4tC."ʑhAo t[o@A͖`0P,/+E%#v%8+(Joe  g8} ,bv,b`6)1I,ckǑX4TRc+qb2B E#BHCI7_ ǃ"`̜ f}(Y;C)m_D>wds-'ADem7x</i^W=zK#1bädg{׾eI1󫙍vn;6Br7嘎`e!٧Z\}Zd!谞3ˊ*k']meaOvV#5w):_P CLFffI(f1JQxAx Bs,P+k3`X9ӝ{F"A-)f>XA#DN1ai'4J,܅?<<,EFr*T6GWbZR aWRYAn#t1MK3E !1+K=6l…-( VW#}e4}Ax 綪|>ҽ--6&Fwj[gn47.ib5a6F8[]zZ[ZEZ>~[SyϚ84NW2(]EƂe4qc 80 6W1#F[Ŋ?/@GX[QkSID\{I GLț*p6#' /ĕa ,p|Ó?r<{r6?ϧ9vv._MGq8 ?2_`ِr2읶\H$ǐͮ^vwI(+CvI";s}F#Ll>̧1JSVWX^^F7Ν=RˋK,,hZXkM^ +%AaZ&K_P='j_M g-)j.H2|-~LIYhVkMդl .jwvJsͣ?SsAegy,w̬՛-P #x4emKU.vi4"b6:|ڳ|҃Hqz[}#wAw@:bwFd6wѕ1) &`t}}$5DZ$a,$o T?0,2Z&c|Ysw Ơ5+$,y!K_I#*/keK];`;fr-){͐UҠ(%M up{Y %B~1U@1a&'_65'.~vIڿ|ďuټb =c N0>O ef9lK]tV'~aI 8S(Wr1iRog1b5:XL$(x|:ȗeA\P%B X)u(dYFxLJ ?bGQL1Z1Aɟ'/j=g_׃q;_7eNKpE:bQ;(A&o$QH'$qJeDA޽Awqu\LHYPc)b RMbdPRb(!nJMe`2];KdݛDˠ7TUxt6cZv5jo_?Ͽs $XWF~ۿ7tW<8*2Ŝ?yr^xڹx/qLiI .k~爴 Xr(#$MI,H#psrj-bsKAwޡB`!Z2tE͢jiXkE2, EP[ XB Ҡ9h F!W5`A딲pIŹQ9RI%BRĴ-M1?<7v8_C0j_?d7#9N5a6AXT`Hߍʟ|Y٣Wv=ɅGN>;|DyOg*ϙf,KZcqld};1LgX瘎'NkZRX,Ʉr4ɲ4MV;V d8pIN>E;_zά}6 IS, !W,.hm]ж'AG 2iLM7%ߙMqҁKb,%ơ"!qf|)#|yQw`Un*Y`#%K:sp(+PkjeTcE*G}?/!D#&9Aʆ(Ҍs4%65<;]Q={]*_wK;P/;CʺzFP.ⷾAG7&9E=tz(a $$I QQ"וta?`/i-\ղ|V0 Nml *XXal$t"Iq3| bFA&|7+=6dYtbI6Lo7-먭gtk` :ALjkl{,۠mMU̩%mtд5u E EGF(!t)Y3( UGr%R x[^|7{9Wؖ8 bf![(*%ea̭ OrLaa(HbEȨ5,$,Fu (Oܸy c i'e؏dhq_b׷_[ 1ub7۸)2H4bN(%RZ#!Q6̖?:tz!Mm-ׯ xֻmʑ!#CUeH[yK=8PnaauTdY SRSM=W^F8ϾVNCÄ +pN/UH:s-5lomfg1X.fI:I{|]Y&MJdr9zdR&ue@Y6AgZ94j9,; tD"1~嶞?ij겤. b>X.}q20mKőpW\g*(d6\,h.Zi*@_j ۶ƑvEŧ̩S'hZR \chZcP%a( G]!PKMF될)ZgPeMj* -aW "-.6, F9>kБn>–,"gJJʺe|}qz]"@5Y& /gz XW;NۭQ8Uslr[g mPW%eYd/2yAUԭeYVX'%N@yꚺpBzMå-omTUM6ܼŕ˗z}>4"a*Kst=0 YR4mMԴmAvQ ɫOzYRׁK:0zOJX> Ԃ$RtI'3_zKʥa2:Z#~2XgjZjN(A*:EIY i2 "X{T(Ek+>:$[|^0^!|$9wrW>3 ÐsC>:vق=p^XѪ9ӊ"SVq؀:GHzpGI]Ji$,YCUU ŒO“/f-m0(ˊ|1mjg8E &ׯ^AHEuȲuU1OQLafUʲv|m뚲 Rrm~+Ŋ6a6RΦ2IVdagE) 02`)AZG':E !S@BUT7ьwitFd ukؙtI%m8D kžIX95T?'uFLsXawymJe\P5j8E( הOO f(,-ӢĘnFաu\|~꫟{"wO퓟xڐA'^Hd0$Q'(눲"v :1{I{ $%Ys䅣A GJuA7 $a4!NpJV O`G۶SX6$`X!ݮYG8;!2nqVLg%;+dhJxmqή:+ _KD'{`Llػ9nnEUU_y\zqF%IYq9(iTB VTa}?@8Ȍ Hr[=Ƶ m`V!rIg91Q2g:k arWO$wu'~Qٳl{0q"_e;xztRwT?,b2QLdwR%ז%Lꖵc}P`pRӖ~)eE' zZ:X!R ~R P%E3ewoIt)j|{`0$;A? \a<ɫ EvCNn "nm1Mr-c]$HDa8mhdEB8* ҄)@(8%'N1El<#$˶Z,8y̟:]wֳ/X>{`omsK&`S0ٽd[\l F=biu#6}Dl -JA9PXgE#NY YGb㘤ia(HR>3rU/tʰ - 3ʣd)6`0'4Ǐk:Z]].}*B> _^pI)-yVОY( ԧ`5|Fl!alU[Uc5ժn3M_g6д 89xs=ւm}9+k1!2wvqRf\0NL<~$ 6e(fwnGq.?,?p> sQ':࠮+!|CK4tuUig0MZa pn5ݔȦ4\-0MC<bZrB? 8F=ř*U`@)#ͫ-J"r¶2g<90fsOZ.L*)l%Uk"& 4{exv&{ %K;D&L'%$L(ˆi[Q5fTXk.L%i B( t;#FkI/* sL|]q7 '3,W >;y/oH?/Bq1Ν9 \,:ǔKn>wϱzāl,5k,UX $a$qQ~8A8d<|8@k?He78m*x 5EC8sGY %~n^ 4v\KR;P[ =Z`uBC-,5HM<ǖ-]v᧞ೋ;uY g̢?zjhmV,,f^If _qg -nq IDATJx˪:첽˝/`MK\4 >N9;۷孛}N9kyՃy-Gy$I}}Y)JȆ}m %dYw 5U+QI-;"85 Cfn.1e^蕵i ,Bж-RqZZI1reC'@c D!$F)y6hS2OTXp?,GM Ӣ&h|1 DiM`:"u4Lg9rKQBԍ:ao N I`w,|Mqz@naJmC1)2RW;UԺ©;S /H~wҟҷy_\{w ?Bɇb+!};~z{ﻇ8d_a;fW>e<#fS[ &L电$# p@kI(X0t(si]18*c [$ kN-7+Ҭ0ֆ x!4'xLgpVtb)!MAH~Gk (u&dԡuFsː(Qdsz,>zC<|Yc^2LhTqI#?U8gq噔Ѧ-Y@<㰇g$Y'\񓄁b?gt^LXR)Sgr lmQz_ٳgyUO=ƭ[;('UUf ($c> }mҚ0Pޚ+Z5m!wBkDaYJ(`8H=Z*KH 6 (Izbj-ɤdɰBb֢EA 0^M.GQЋF4ˆł@,yQjM^UhpjIQ5QQ5-bE-ؘ4غA[ןSguֺy&iqe,+i 拊T0^Ac/_}7\oKS?}_@( {,\Mӈw3P *oxE[J?C}8{57;ұS'NP9N؃ՉhIIwԊmZGQoPxGC|)((7$Pjm+0=k}(ŭJ^ w| kQ:ZfHh)( qG/i5/(^߼AU7lXΦYuq+i[.\g˩;`9QkW.sWpxAk^jXu6m65rl6AbNp4D+V8NAQ{uiq-CG!9$!-ZsRY`>C:cKk}q?Mk=B LkAJ$QhʣAU_!J+4&'Ud3+uCL=ɠߧsu43-pȮU5DI8h\Ҟq{uc{ Ȳ z&!JTE,Q RE`o.cZϾ #?&o`:kջ/ XJpjx-5fT֒gȏx?mk7'rJRǔ5e, OY..zkzvnQ@%խj5)^"ҿ҂X@;tLfi0olHAI뎇28Ŗcm.ל9}-Pr[PґDA_`?|d}hh+L+(KqX kh[he5r~YGĆ!,xe0E~veY]>r&1׮qCSԻ#YW\֭mN63~Ƨ#?6{{VG+8טy8dKm@Iu6B_hd1eIT k#< PR0A];T"@Z]6*߅P{Fhe:m0_Ԍ-k f0E ,uIY/ٟ3AB7 p.Z%)b qs^hՔ0xc @t "kY8 i]/ڣCƥp]MY"Q䨢2[o6(!uӰt:.5ԕwXcX̗(Ы\tҚn0b T/k_j>n'"/kƓ%eAU,sHbE(^ADq'hT''|Jh*\ׄ "Hph*P!ds`p\EY,dQ U"D vgMüjY5[C#HR:')sQ Aw ;*QZq}{'~bmUҶ>60IB0D+hlI vHO7ǝ8Ҍ"e67 } e29q2$; 0ڑ>wc,ntRY5H7K3Ev~wp:Ae%}r=U31OpT=qB`}M킲(p:L/S7?~q`P@҇bJ<5K$wp)_JFIچ#?$ߌHp'rs-[;-á5'N 7bNaCUAY5sxO]5-Nzۇv+Ra] TXQdXƕ#*WHy[ ~CG;^XWFQfA:8)8v.j=߿d`ҭG 77n FI1))Y,4MM$AVov۾ތ1$%К|>|Z&9 QJ\|Y`\|Y3V# C8"4Zf5G%R-&BjHQغB45δ:f6mg DtF$u4#}&~z?hk__Wpz)#ЁZE̹~:M)%}dߧe J+~G)ANn̘Mg zk(mkWOxuzYdΝ߉ҚiYۤI6ot hk97+k[\S9B]hrw7ۊn : Trd=MZcǞʗOp>߶()Œ WUFiT%agF^E٪~zHj{)IaGԵnږ8J1|MM;L`%:2{=ogJ+y_w7y A}b3l'g#@#):}L:cx@[R:,3g{L^}ۿKx+_+&=O̷||=~*/~Hpi7ՖuĿyǛSN?<7S=(/{-h%ބ8Kep RT>;$ >y uW'1E8m-E u<a*IU[\uS-UXKڱ\JO9Auơ$$O-7[ ll?6;BG^Cf9{n'@ Kc >uTw^ԯ<+:[WܶC6hw{P'>xϏ(?Z+I%_pBiJpRiN 'SJ]6^uW]/Wi#VMm& z.񌝺[#t:]겠m[2_7J;UI'$i䉐di7wnqU| ghULF^-N˅Y!\/zv+_^|{Z)eNA hmDE-c ^mX%\F>O~Q]b9/Q^r0m8RCf=XW@G!Ngmt2n8}ZZRW VaM:wS?NkLBũwi܊_|keo.oF]3#DSĭG#R_QL:w0I@|ɭlpKưc1WU PU-ZJ$CjR; RDAHS׌|{Eoٛ\ œ;5Kخ ٳ4 s>O|yeq@ ֤.o|x>c^s[5f^󹣟|CI:7#JO_}V* ~"jlݤ tVl7)o)]l]YT4)Q$4Y: cGԥ(X`v NX1臜<Љd>5-FИnhjopc+uCd YKN>Å'̐Z 4c%,.(t˱$;fhj'9ƅۜc%AK) jU7xýsXC?ڵ4G9t̪uCr k'9xT9 k|7٣KrIHnlք7WWls}L# Z-D۞$[;qyq{GYzexbQ%Kj+8p8c3̘tIZ.g0f.hl-ld'a#˒mʭ:H]+:{c 0ȀZZKU]_}~}sϳ\z?IP51(F[iBR(#eY\E=(HҚL4W^WVq'뿣\}~4?qXY?ds}$I%vIMtcm8@kEB"H=RSr⑿<)f"R<0a! st$hD)4aUI(% +hW2H@iND?mqsKU;$̶L\ECdbf#1XDv˻HtM]{e'oI//x7џUt_y.BiYWqSEN/xWsj{]mM < q Ω\ud '-"n6 wX*R0ZV$kkg= f%Vӏ#Ma hw{{$ a4Q }RjSX)JbI"U0*!mxq@N+f8V:Ѻ+Tpήt1±r`a܇/1#٦ZmVBM۠FV{xǶ_lnU-ճoO\'sjZgp0ߚ1UKhI+p8Rfwe@=4hJtRKu 0EM5Q 4\"X8s]HS,rq"9 IDATHҔ'1RJhQvuxsQgP* ɰgZHbF ހ!CF㶻O[>C.ϻOkn}^?㶟}= uF<뽘4(8Z1Q?$vVIYqLqҜWqhƬVj`kG)* 4((n˻=U͟৞&eG羅cˎ\TeH 9g Em9y{㢠,*0]pKp~O?*z ]oЍpEoa5v,,Vg]N0`YZxpuQ^bUO ^pAoiʈ-9{'EܷZ>PwE ]b-b<8}Lfkƕc'qAKZQaxS w'4ZHZ Yv7ٿwhE1.Pc Gq`-Yx) &Mx-MbMϔynbS#7j=/5C~Cxڮ'ISoOZ(‡+ͨRU:B .0Dֱg8iy~MxM/:@?7/?yeDЛEsSϧa ġ:o? [o+cҸ|3'{yӟ3 v74asTyN(8#X3NxvI Zݔ`41Qޛ%:&!!Ae,-_$+ Zi浻Y,U~Оny"QOˬB!3&z@YW| 5/Nf_B 9;x?0=GX8&q62ӆW[Җ`oױ,`͛i(N; oKW o٘K/ *2Z~c{vuc|{y}g?Ύǁ%O$hyȇ}.9q-w1c.AH$qڐ`ըj8Q$# -q&&Qc<đY-Ax^Y8h(qBz=s("JZmG] ?a؈g,:EGԞ/ Bj-ـhz l #HhAzR:h'TEeD-+*Bmy})mX2`{ N̳prIqb D_9vrڷȹbgo +Sq*!ʜTU^tL*x6qCVB]#=ejMhj?-kEENJTj "MŎrz$ RtZި,UZ=GUצ65,+䥏|j>Fk=~׷P=GhSvqvE K1;f\qTX~CQˮQqӟ`4v"溤Y·>XEN[T&‰gqKK_)lg|:c?Ist^7›I[9z?HBݶ$-gā$"Bt`yEF=8r(oj,e͐ckGIA q[as={D55gþ(# x?b9q&ghBZ叛ơD3 j0d^Ig2RHQ>J(x@aB859/s0.#ZqVuprM'͙oD-hÌj6srcշ[tK3RdK[R / k-iRd!% &e9#rf滬YDiM^e`*s94`!KzDk!6Z,W%C(H<r<7z:JԖՖ'ήo,8筄"b ̵CD]U@eE $(1q֢*G% s]HeI!~>0{&aDj)$P&l"Ҵ:ރM M>"|DUj,6dYeNbXFkI^!+H>%IBςO-7p8|m,꽈"6Rsx=YH~Or?EPeVʣ?N|!?"A@[|yirO2q2;[_&?>SmYE ;BC:=@E0p(%q <!i8b#J4Զy 4hi5SM&c0(퍝Di vt4v%hN.@R!D8G]k2$Q(LH+CRڇs|f7MXlst[46 =vu.[Oߺl=R:65_r_[E_υ06r7Ɉm;(%1%MRA4CN3H7l[arf0V`LIhgUAnz͈W|7 0qZmN*сF)oQ:%xs?rQ>8,<} DjZ!U6uı&P3LRjcH{sY<{H zܙ72\ȹz9 0֜S3ڻ7\{/ߍ\叡Oxw J*n恷0{2F3>{QFv[JC~1],>FH; /?wqw*|A~y]GnG .ݯM3x'e!)+?.9o|5͎&c}xPap,@X IQMRi($+۫ߡ贡3J0'O|Sw%X8a2 ?P4J-䙠(y!)+_Ub9_criHBɉE5BI ,O76n tv/7}8m(e6RnmzxM-[(͂?z/nT,<SWwemjoH |>k=;`\"/rfmUMQ a VSiuU0|ޙY?O=ؽ{o" ﯂Co8*hW%吮.yǿ~^J$'R7y Wk1!tRL!jG5a4bT(c e+$; P؉7$&j5A*@H%饼K++Hw T8SJ:8$pή7AhFDILڐ6"ʒ jWV)0$ءK|uCn}bcEqّ4)B Wcz_w7bJN5OIV/=t9rKmF(vvï1s G1Βp5So 'A;7zc(@ .8IlBbi!x.cfR|ʔNMR+ Ú@`(큾Zl ]A-HACKmA#Z JyߍkٔLMkJ4Bv[>Eo3UjȿnY ا䅥(e1SPD[X#@Ax6vwwī0Hap y_lrRl}}ģNvOQ588 y1&Tk&p@UʠT%d~^Cbb@&6ɤJk|\ dUj{ZL<9ߤ@q!<OazWB>":&Q˜0 p& R M>CU* U@HP P.+%MTz2f^Ĺ傪2dEHs5 mFD:`:+va-V $gh)]9eOGDoo5pӘ;{aV|b֞#tYY3 ( NCJF+&v#a\Eh+Z<)|{u= O ]0h/?\Jo51;cIܞt:5y6"IҜvȱYm:‘-FXj"hw%a,jGUY0>z< $IBoÚ  |xȣGFvWq7ȕ 3!+dY@+\S5Yf #,mfe+v_3pb50{^qB5õxʆ;؜ (E6|Q%̶*M>iN~97|e_J` ?FдZMتDL*@+Z]y%iR,.bj㯪3O=ʰ8IVWu[Z3(NSww &sӳH.Y) [UhhQ"@h7nҐ%RŖts왱2$_771P`0Qk9VԅE`&+ t(]0Jϭ G?X5מ4-yT*T%%A)`D$- np]ln|лJ>9$I3{yӿGoz?GķP5%#f{/1T,Cc"gy?P TڤB1KFc;Iz' 6v>h7k1Xw,wʡ% -b#ύr*YsQ!+1 Z.5W2ERv'oBc᨜>I?!nL43wϭg>^xq;_62Ao\b-߈k]QyT'w eiq D#4]a&vTqFU՘1?&=Mf2 cpYRLN"xSVieqӟ0Bh|{s+>񉛿|m_|py(55y[*&\{6c)^#Ͻk15zV$; A^@HTf8S(qRa(sd>ZCi 6hg X5U0;-8.QҐ!qـ"#aDY<.%V,ieVw>؎߶"_d9\dt{DO.o#-* B%ЊJ˜ Άbgz=\wRuQPU59N윟Jumσfyiet:v J)J"J$z=puuӥ557mw?ĩs^w|EMjg16JGh4Th4&jS]ST\Y8SR*|X|&89juHUL[7@I2NC4ɏ|zqK S]/r m"a*mSjFf;MYV=Kjc~I…" R(ʺ60܉THp~>qs_z@[㒢%ġFO<|W.n<|n2[?M<=wޠĢI,-z q4B|>eKܑAUqLw>&"@QNX`pD%DR*EYXY04JeM])9 \YRYmuAYM`KBH=Dah1XO#:27/BDH43}O1}ϒ_|O 9R۫CE%vTZR$H@*lhأk7mt=Im?s=O7oW>J]EIm gΜ! Bݎ7x;kq8tF.KO[XKcvaipX6,@]`J~m wҬ@5>ʩ{&縵G}/0- gl *74ʒ|09A6eh6ct*bx¢〴F6 Qc3" F5#Zq\V雮d9{=}~}tqPiZ4%hʪ>w<*XZyUa#P PU]JcKsNQT5\Gi+FYF9,ygj8ox𖷬~}wkxL#3b&Ub-y5{.#Aܚ03uīF(r 243,ruDl^k=O5%"Y: ݲde>U'3{} ތ^z*} -⣘Yj(r*#b JQȘi;ڡiJZIB,#L͸`9QA)I;T*!Zyywп!!y_2дa=|ϑWY#\s b(Q8,&")+ SQ0c-iH5BLSЖV1w |/{GqްBÿy-_ iP*A g=zޅO?ǿy,xJlY]z[W1V8g p֒6$IoCѣL*տ^}u]ѿlqEunƼC =a'`pGB=_z38<*_1*eɤpBGIYi,g p&>MZmfFčBg롰"Q%Zh9><}z>|'o u<6.Wy1I#!nEx2JTȑ9B4W',:syp}w_EVpyhg=V?s @ǘ ҁ'T ɚ]+oMXXlv28"iIҊ߾wϣoqd`bo{Hg]`jQdzLrvRu Q)ȔkD ~|U7(Ʉ&dDEQaeB{,9r[%):NH%] _y(~/Wn栃1,o(_ԓڡX۟77/eEDpϫ|P !%Y@ϰjc?9Ї]`PڟU |&bV(rREN>+܏;GaE_I5*ٝLO0UJb4U+K$I4HiR<|ueٜ݋8%sN<Êw}br"l Q$2 ƓBTUa2Lhu23)Gy ͱ.*B-1T埅@ NY{Ƿ B$"KeҔ '?WB >[%=QU~B@KG}LJ5 }='<2آdi i#|B5%$ T(ד' z>P;Epf.(JAIn rqf|cK\Y@(Tml"{36eWos|QXV=l(z`Vn DӗB;6Ϳ^[DB<:*P:*[ZYN(R.+TPnC,~ExB0o~gi[SC i+vEX HGcRŊɤ@D䓂K*VOYrJ{vĠ!HtgxKG/8 itNr`u{ \CGc&څ>k ki[F+n&MR`|O_YyD {^oùQOXPkU2U!R$I&^ٜu(嬋Yp8/VYC  ^J2dZ؉]G3-Ŋ$q4RҒ`X#boT3e{{.<ȇy~a/0.>YcGXc=|wG$R Dn៼m9|2BTYRaϮS%4"hDFL% dǏ2qCD(9c8)P'+W뾕f>d K/wO⿈*󵻥zv!%BEuVE\n!2osaS?{7{oe?仡*CFUYLfуY|;L8Mʗ}zWy$"x~J$s+wBқ? 6{ƘxWa$=˅>ñ'2LRm~V1gЩzqb [3cIyk,t鵂-(=f yu?cm+X yUAҨckZ[Nm5:eRIڅ;Cp:wa[1za%?iS8H?K *bO_8_cT$I3NqV'NeK/@JHr奈CK1d:?_S.UT"R1:f]b7&V9cNZ)@7 ungK=v?1^V|=@.WŠnpN߾_zF*+s k:^`r:9OQ *JReR#)TDsGl'qcPH!I%O|gu=i/QSyВҙcf2a{dyBe 9jI<#(-Hk?NdP>SLA_,O`Q;YyN{/}ʌwu b045#n >Y>TN5omMnaץ|K{9oxH_)1,LtĨWg#n^tt]6+xSߪxK^ǃs4?o;0E: ) LӠ@ m!32W6qU_5? MVw6# aYizL>N`17~H*x7PUWDPT5*FH7je'|=yA_*x !B8K ^̑{OYI.?n㪈~7 5s8B0Sϫ~]M@;V+ l 8?Af~yei88I+Q? S$_[53 <;ADWz}zi|ؿvkQDx_?ʇl!RS2Eh:gEV|Պ#0vswM>g?C%(2Zn^Zgñ&!j4?MNhT謍xۏ\rIL/s@ߍ1 yH.Ǹ 2|'}QhMoǎ#ˤ$j6*8_+h )8A&7Ql :fUS ;,-)VVKKfK&2JNPʴyç->f9w 7V[rhҢL ɨZTL.J瞟5y?`v~׶1%mh5nXXN~e~~p-x* 2oo3"8 wcc+KIrAt RMn?_{UOz>݃1kTU,GGu "B,Y4{OI^?fw V.G'>?,G޺/׽4k^q='#L)@U tHTۿQŋ *D^3YOo}>>F`'$  54i K&oqjðҍc9#8“-nͳ7?X̵+_q{_xP  /گUD)*&< ,H揝~챴cO1QVKs3IQX{_/Z<'o?rӋsu SVbLCjդm̮xV{z(N c0%?Egz:|~H6omՀB8fdd()g4 MsiQN05`a!"%!E$MI Z MI>'pȲ7p9s[dPZڈH20gR0LECc1K"!^~ӻ :=9\| `- C-bvߚ hj2oQijv!J0 n:}-R{y ,YuFIHT 9kJ sxoP":^%EN>!M&$Y#8_9cNmECSw=qDWJA)anz)~˕U3[؍?}pJwt< ,^nҺh]A)\=dnyrninD)R:?]%iVS9bD06qᯝ^N{8~lQiIKa}G>AhsU+\Z], Usll6!B Œ:$QPVp$ES"JclҌզȐR`yJQ2{LJxHQ=2Ot'_xrIܻ'4Yu*a\ĴJ.}+~?E8O,d@{a %ʚJ_w!BN=i=5)΅}P´쮠q"* eЧd+MU0w+ꠅ!J9 XHuNUa-4$DZ$," xbg:6x{XtӧUo<'TxR1n,8[ʓO%ccZC>ûFai7UB3`)xlnq݉Cښ,QOqUI$E]%[PǬol-/Z\$DQ$c4N8_q E+&Zxg B'{vRIQ?s%3]B7()1EN+m⣍:c i]ȸ $($m91\Jxe5 8/CE-eT5_4hgA~h=, Hrkxds7bR*сMX3S\5T^b GUO3J*[a$W/g(SPNx&4NZxu`$D: 0Ra z:lAY1Wlkjz``SzKK=h i $ba |rsG'v1Vh&CHE$?eevyu<o-=`Ŧ$rdsX vwGdM\SkSL*$7G}bۂU"r3%|rw2nXXi53ʲߥfbOJA<838"nZs`t#{$Gϑ]' '橷h]$aoc!* ^ "e^%E= DMȠ%uu?/ O79 0TgU{Q@n؊cfp.Qp&Zi,AAb "Qm&l7~٭cZM0ChsPVXpj>-JsAD!8?nIC)bʙ'?5jS]zU(%Ď~)`2@c>ȌLЂ-Vu9 VfrmH7 qc ؛S X2膠izFgÓ+Jv͜@RcX\# M=(e&4Ll@%ͶЊ,[~V`7#:sA; _x$g-AZ??P!יVPdY |Y`-Krwt!x:g'[mmJ@ֿN&D:r !*}pL Ve,.4|ft@$/I BJ3 #Q{{A;`> }~Q΢HAyz N,>ڥӬ}CP :8 8Dt6wD2a&bέ'|Jj_??[u_ ma>\mlp ]rI5" R6@=u xŃ$d Ij2dݯTʲHZ oUbᨖB9r$bu5Քg<{!@kt5i7TiJo?`N$V򐠣fv7 hIt"!ii|masc"XԘ ^F{ց,pM4zI0>5G词Xۚ`Y=Z7fH A1f/nEul8ȧᅔBŒ$x1ږ8͆?^u+9L.K`>ʨfjcTPvS'|mR8Jr͘f#k*:#>D+i*Zq#UK%e''8ZH`i JJ^!Bo(l՜:A +qym'Jq ܔvVF>|;B6=s1qσԭ8nJW/YO\bm0Q 4\23 Y*r }?DS0?UQS>pi# )g7ȥ|ŵCE4\lpvkH+ FZ7*>1ٳ1b_I6miCAt|hޭ͗huub}><([+f( eeR96v,.w}^ Pn+7ߜpݓbZ|_9( F<L €@F.&WOТMsf+|;$mL1{H|޴AoC[ <.csjJ4w=A'zfTvi)LБ `菦z2hRcOH͒( s0 cKϛ~zխq%FSzT!R:7Ѽ2E!'iXNcz`yQuBФH'@UڪQ B(s%HH[MXsL'1I$~zy; <+u{A?o vATO0 iV..)[,,c[>) !QT#̡EsSxoY# ;c4wJxqLx$Re7$8U7sKBAkW<Й zr :H9MI +.Ξ4QK nV4P`MƎc0\^/ǃg.VDB y#0+0ݑO2PJL\*T6އf Go1LR]tcHOBYL1"ZnMRI"`ޑŲ1cziLcˬ^?͐u(- #$fMTqF IDAT9! 38TǡCT-sUϗ;`:Hga7wbD=*oU\P1xsn9jD`^Uaf2/,;;G^Ǎ'^б߀ԡ&\i:I-v1dudI&oC6Zvn G:DĄ^+tB7Dfho>FЭ6fAǠ)Xt LaXAcG!֬ri0SV?l3p恏Zy!qV""Ͳ4GE- ՞/麈c$ˇY<%ekͳVcĜCF"_PɹfK;z^o~NIZpjC1Zh,zN,a"Hy~ p!x@NBƩ6B$\3ވ" m&{xn?ί,6 PF΢)i4k?աlU)ԗ]KO(ʊvzn;:L V M²&\q汊gi{RUW+z]Eu f%=Y*u qDzZ܆~'O/׸% %£|Q+^D-?t#j#K'Zs:|U ^4Sz A;u 2rd)} La"|)(</y_|eksy' NM*t/zvN6Ʋ%](̧/1)(1-- -iv*\[,JKD8R1+tQP 6,]ǏJXh=n IZ1q ?=Dy֏n:bX azYhhi4+LF!qSaE\ - %;X7@a}5OkQyM<" GX^A1)Qԡ"JMoYrR8Z-d4T8H~$f^uge;mڹՂh(}ku_o(\?\^;&(}]Vme{yN+Wy8R`3O+!乣єJ *(^w=韠K8 NRV%~Ʌ0g%)Y[-vbbxxqfCq9Э7Cbf$ LV{0G/gqEǸxézbu$]B!"ϱy(r\Ubsa`|8D*G!DH')v>8"Z!auK? tu Ry(ȆCtQjivt.A̧qUhcɰ7Gb}&jQ=~!`n;ɏo*\=xw+/NvNX'pO>U✢^UTCHDA8TTM+\0kEOO}n8?;^ks=kVXjw}ck#BYaC]j]c17}K7:%~E= .,<_<H# S^.*#"zq-?^e+-ijSv:6fy]sd sǃ>Z@l0zk `KLd}w >!}*!.!S`}$%,80)Đ44IcW9%~1#{ЭtwXL7 F~(+CҢB6ax})8{|b1}7a;PӹyrOPIEoˑt}>eYug{UH|5_NnH!]{??C S_gu|i>AYy">(dlN;)`\iWnכ1p0M2KvPB,w;To|-[/Gtۜ/KQ0ԵjT CFH>dw1nBD+nՍ^67;G畤?Y+)١$|3 ߁GSw3Rܾr-B8D:Ω]͉Oyg[V5諩ڼ; !# <?p; [x:*^yFo}NnY"{3G'hoawyat@&m=_kG+7|dܛ{y%AZA;RP֛dx ˰_$C͡NI/Be&+P>F l)8coqJN6s|Nxpr8k0'h2bm! 4(hbgdL!+tc `8sK_kqF8&кxYeꘇ'ΠG'0NxG0:cf!.a2C9yvxO< dRgh0 S[t!JXj-7*p)DWd!V*[A 'U&5q'U%pmK[%˾+<:}J_Z]c lh.=wAVF*̈́(Sb4f-߳GulNUebX-C> b5r҃;ћP6oG~ NQ߇JpJؼP!y'Gi) U0WSԪ)ggxN)qKlJL︄}gG;~.n[n]Vʭ7$gknOpy Oa\=d)y;ϑ%_ܑ͡^h+wERJ*DrHeƂ,&$]G-h=_SeዏFçf  JCAƀ*r {A6I,S?)3/>˳Tf[V y\#ZR9Q*YzI'XkgF!տ(bMX7Sv ,W8q@x{%?trpPYm5ɒdcMu,цĒg" %W\,H(cw$cWn5RtH`ͧcј6:\"[KTnt{{ٷ|씋mJHoky&[H\}ӋjC cLGFtpHdu6Ph0h"w.#w|v}:Y=HVboM 3Tflj}8[C$$VeAyJϴ[+)"b8v$_ŵ'YYqa1 |QR(14y^\A9h4K%kM^qqo?#g֓kU_ëښO=Zhl5xI)9,KP!ͥ6A`8 IDl8 GT1K- rTǎsy@ڨ(r.qUPadmUWG^,TQ= a[3N{ 蠘7L s"~㇤>YՖ MM7,ނg; 6G_C_ F/8qKp tzWx6\Q?>L:23=%D]-?0W|1d.w?^7{TsǃV[`- ֎NVV 7qn0t$Kz!+&Ò2%䕠J}?]I!C@j߰t a`a1VA4奖S[c,zn}MbbG"OHˆ v.ds^St0&.crA:اwC[;'eo tعǟ}1+IRz[2ZCKt"('{J6-heH:$Ea?R0Z.IAQՕ/_O܍Fgϯ}=X0/k NJ}Ǥ3[ k]R1NH ! Z MԊ)0dȨt|s|>K3rMsǍڐ_|p54Nl] ԭv"D9pT]]06XBG8lP#3ྲ_q(CKs ֯9ln4(EOM8vٙknt(z7YfhQ8VNW4:"];Ie 3gy9 ,=c@տpu:ղ/v׮0*uU!#C69u0{\Җ`x5X[|͇uҬ)=Wb}lƆVYh6Q(vǎy{FC/a4d?1:,yVAQ\IVJX#"88UrhA7NumӁq$>&XK4!&&Zp˱U5VV:4yB\lZÌhrh#jҒW/11~?ce9$Y*0]kd,rɤ IGr%Ԓѡn Q@@AMx#TR'W$t81xo]u ^.U` kPW,:qP3GLScVg*[-(\<b<.Yk5[n=Ή+qgdeI+n0i4G9 űMZ"/߾@4iA!$XBfRP$eRT9e%"hc@-8sҡq?$4k*&"hGU'-[)vmۧQ{)w%s87+WBU&6ѧ׶Jy'XrE~ ?Gs?-9|-9rv`xV/+>rn2vkle8Y}]+>C18vA`ϯqEzknEͦ@kޮd0()*kxw% D`\(X[Sz~Nxv Z6|?3`7_7^Kv{U޹؍}1 u ]mۍF 𖆸l?:Zf{o7 fTH>'-I-3"cct+KNJH,{:^gg<|I{^QarNPͿ۞&|}ع|fcj9 o8|UDڷA寄gn͇E_[n^x[ޔMtWW43W3UM7 ==,5:K{oJμj:: |,g3:Mڝ0Ѝ pWL{68'Bܛ)'pN(AqֱMYLa0C{I!e`p/CSð9{Cً$]鮜;n{Kzk 틤h&c_AصAccrC7w3K?`gXx^yO@z4fhdYzQ=;@SYK$J"q@Ug _Jn@Yzr#^vcqO7!ްSd#X+!\X`D('1o$F&9t'*j>d;ՉA5.EЃ3OF&$P*Uf8UtJx8W֒>_\ؽz7B '*!I$eQcH A5'@ يpGDQ+Zj)$T1k t7 g}_9jFjuBE!J("\q8J*<+`<6 :]BXmJ3MӿksY^~2Q SP? \ o tjaZo;)w}fGeQDJ]5;]M0ʳ| ~}/x%dñTfTƜJ c^Asn70d#_Xm4Arz 缟N$f{>i)Io\"M Satd#BhD$2D:DG]h째2DHPCPOJ+V]?ι\}_qecD@I/aRj4.P:" w-txEɤ\F9 -һ[f&GN8J֖R!-ڄ2*2 g18\M1Oh.:BP*< |쓫-g c*Z )}MdI8'%":qVwj/Ye(XoVD"xY #X`ܑcF"f@B}[#r ,@HAB=>P*6VS>ՖFuneAa65}fpH:^2G"zfrAL^Bl%TqHNLN]9H@Ɖpl{Nu!L^pp4i;7ڄ9N`(Q$+\7&߾%l?IJz!KJ7Of^ͲmЌKd k1 M]ji,J IRFDP=?[h )B",z G^%mB܄!| K%d,YK`48\"@G%D3|ׄtA|C`$%-$ɠOz0f;6>!FN0z5dth0U|(0#M}(>u>w 2-5lg,$/,ESe X^ ;tױS?8vg_Js|"6,yEz9yt:9S炸nM̒e·L-h|m[rn2뼭kb}ŋXj`cVWU*K!nYk)Di Dk@HPPEEn $TYInȃ}#CM?ϯQ(Q!Dԯ\wʻ!^HQSq>|kpC.s2{P,N2\SH(Ya ^9n*N- MHiX,Vq*5L#()δI+OP=.4ra޺L)A8o^.x{EO2:i`Tj^(^4ۂfrt:du:+d}dRqRΓO_xAxpMhi_gi8.ѭWgD2Rnb$ +7j ӟ` ]+Bt1DS An$h H:hi1qCdE?C13QK98-JpCɮo0, NiqȱYe9_X dla DiAQ:|pקN-nM76XZc$1Y^2T|{O~2mEM(&P+SA;eD-3.kt7:!pNFjNU()" 2 *VB! f m`N쩩zm.jQۧ'lVZڏ# U%vA=~NwN}ˬ@yfOp~~honV_Y*ys8-E% 6#늙CXx˾?+Y_np<[oe8ӹ*ohGyIV\<ЈMOѤ=zZtB: %%EDO$koÔ$9Z$טŻub[KPٳ,#u!b<Ԉq(~o8C:~g/_S8T|S9Ϗy\`c=VD$PFˇ.Ҵ'Og{[ |Dlunw~xO ;1>>A$NDIaSH%<NFe*V-R8#*pa:KdDmc}=cy~B٣}J9P8Yaorz8!j"` b!No\ʷTvv0(ڑaz\NG|'-ap_z]|cnUOiESQۉC 0OxdMT7E](պ>W R`&`+;} P9T`"KB`bΥϏ IyQ+v-{s"K-s+~6@&" i] 0!YM9Fbh$I:3@'!$$V 0ODK2`2-f퓎 hg^V$B^9^S?%Cv_@;[7 +1I/Op&@!~.7"DwPBA\HP%U~%|qM*CATb4j7 ^&W p3QWlgNz+,YUÉbxp颜ycT3twln',F Ajcڜ3 5feV?ČWQ9?ĸdm#{AG^GaQB+$k zh`MJ$}c0T3L*tCyi@ӆItM?1^NJT%TeT8֡ˮBСD(AaKO*J)ZK4#m(+WAT EIe+*[R@THUrh6#tِČ10&/4=!G3\K1eڔb1-PA BT@QL&%28#sPun*fáh48`qQzݲJ Z$Nrꪷ|YJg?~ȳaz)%)8Pi W0UQщs G'gzjNݬCqn-$>~4#}F U D֛kαe=+}VOQ1A$TOv'g=\/^Fgkgw_ȑt3|bDvp̫qh BG0>pVf6|5Y_WGfZuWHv~2nXI,<Ҭ,M_ĉO^'Hqß7)~ɬOph~#vVvNѫ3qㆨ׬%u9^^vǽ?Fg ]R IDATgQD9GWA!qtqU5լ;~d-{u]ξfttBBL)Pe:uG:uIeذ=nwPT =~Ϸ~@iSQHTN B "K 0&J-eXbhEa~I ,I`SLg ar@E 9uyV|g#[eCjd9yI L1Kz̊ }QZfd4c4H 5i)kv }r|N!^]& 1wvݼ(KCXZxh|/_{ b NYAJRc H~n8J chGݴ#ȁy>''s3Eee`omEFߡaq('a7*o{9{p( b>ad-xvA7I1<E&K٭Ln|ݛ0rM?huk%.DJq ѵÅ݈p}|C\f^3xʧ}O]si14Yx7ǰZjubNxPn]jwхE5=6q7PRG (Z(2h q:G*0{Bv Il5zlIwgD3DE5T+F,[YA;~-^]tN7(o;& 1@Q P%G(>2) blI #d)0FSڜ"FZ"2u`8B!dI#Fs|:RkKsUW}7Q<4n="sҼ KKLQ eAH<20+Rƻ4-a( .dCmsv=*:Uzh=fZ9htE0qz:nXd_ =$l jzS,Ypը$ E-($*7-2z8E;Z =$ Ujw2tVKQjmYM]9{! ƌs5:)|Uoy}}Ϩ~kr*ٍWMӖ2SWA܁]问 `|35VN~rٖȨ: T>kګ\ +szusW_Vw2b#GyGM<^˛&_/_θAǃg#TiJ2.赪b6E[˨j6yNrL/ ӰgHY{~zdvkG|(҂ o5<)ʘ|M|SK0YTn2R"<H/XabܠK;,ݷVN=!c|e\cunk- ll.}f>Z :s`68 *t/uJnbٚFx EYR2U*ϟ}oy9OEpg'y}/X{=2o$'|Ksꃂo?${$)sy:.z0H ^USR.S#ޢaJn;O2pk]:`h@{[.lD!*w?`8zgH{ E|U"DfU֢ӂ=;3;C4G݀ޝĩypCWCSu5-p5Ɏ&`h&^YrdQB(l"cf6J0=a<x# +s( +a2JReX,<>{~yQ}PP+}-< +<:rS'3|~3e~[cpy"%:GѮ}?/w]{ g8{O㋆?ill7T5Z,0U{;9XKClxe}8ӿpZhsd;%VdsQQn ΙS|◟jDNlUU~"Dgl\,:z͘₏WQ 6M\Dv=890%a|:K:ՅТw54 -:Vh@d4䙿|!=kBb2Oyu ARLW]n\X Vv[,Y[Y^h$ͦGb2.ٺ 0,i%G dx2kLai4|uǿZ??&|syA)@V:/oF72[eOSY\+8b\A7T^A#"i+G}d8On>M]bմ_X \+wԀKrrⱱ?Tz!$I+|":67W/Mjy>} B_N'i|֟p{|G?4Ꜩ=U$~u'Ar {_ϧ_0<ݟ4k!$;CYaK n|6JEEV>q3B Jh-Da(B!\1 }Tt%$ۗ\yn*BqX b((x-rI!Tl$CEl5JL׫u#I7d8rI\F+p wѶ(loѻ:$ӧqXldϝZ,ď]Do4(7ևmD!PhCA>ꟸKr׏"E}gG>5|~upEշ{ρ]NK֘f#亥5nz[*$@`zI՛Ee)rϯ>Tja%QZ6N OXmU}wy~5{#k:]TZ=0No;O?ǯovgwΧ5ͼ/=/x5v7`M/?/#Q\-StX0LF Yj22 ZJWwo'Ez~!WC],?OTSڮ=8gŁ;1;?pZîuIVGS}{?NHW}ސ=,_iyp XJSURw7ΰv*D M>* 57t'o=AGK,>L(!`+IxXZ~U%>Xn9pW}N>#n}o/~:/x/Ipk3)㏋=E-Qb?bT`P-Hv/$ q#dζĭIku$3Nus10ĭ`6Zr ՌGjϟ[w\[XjEu]ƨKFj`JE=g?8`.7̢ :$a(ؿ: :I%NĐ'O6J cq5 ^s{mJ(K<#iI^@gE|@S~R((%h4$ͦ; ^?KSKC``H,4>7\p쪐0.!/}*c%45LgL;_rIh1d%KfS'xV ~~;9DBk y}Y_e;PH )R,ܹ!xۇ׹paoрayf˃swq;Wb$򻟱a *wa[xgapO5i?2O>`-|g\E/> .sq{" (Ci =L"uPܛ9յ4-`DUXx/Vͺ$;z;Ag3t_B vӦ5^?@1,ymΈh3*!Gj MI.)A=`:}s92B/8~D"L 3i'Rc<+ 2{94'3%&a<< ɝokI>_6nL #FudHZnes]"bImߚW"PCO35{_}3ˍ~d.o2uԷV9{JäOr&߅rK ndƁ.x5Ӿ8 |7MAʐ@=Fk; p?0$v2'nqomJEd#[;n{UBaHƩ;iTv?·N굨"1Nق̠ӱ;aBK^Bi=)=Dw]=D P ĭO\h!kiT.HFZE *j /uR@JHRS6[VK v$5wK0ȡյֲ:xO2݃$gZQ@Ҍ$'JlhYYJjSNBJ7ԍw™wUU㟁79}?l Iji1q)dZؼ WZTsqCD \* TyS{r.Z>M!_9.i\PR!,|xpw\ؤ̹hV=1B23ΕCz1MOVSx7TT\s ȡxuYMVdc^56s  )=x-O3A %*$G5KPuj;WT\m($ٻ I2٠׬/: EH9i+]s:+ `:zIb%W{ Wz Ok IDAT=P@` C.(I^T}[v+  Flلi}Fzk,ѓ̍*Z.G+${{h׿|yPY T EV2dQ |%hCVb.\(( wUbvz$%$&ӂEQx%’$]2+5l5u0 QN꼼} ǯ f;q bXT p҇LB2>/'%ђ#D5vWĺ_vBC|ڄ(o*Z[ sڪ_|vFNo;`aC9CHҖ6yw?Zɩ%ӊswpw#{Ʒ9NmD`VZ 3/>IIw tCkPٖު|U8l(}Tnz6s`9AMh+vZM#,lsфxi_(XC5`N[ЌvauDwP"ܢrR !^.4&@2M ;ĭI&jTԄ̒d.AvIZ%Ktn7KљE=Tˉ Nò!q+f)zJa%4*12Y0PR_>K]^dRFl\8[pyY Jp ֔` Z]ppHawթ >B`",%3'P9n2ό+K0+=U ā2@F^e[VX3V|?c\6f#oAc| ~-( 8 7)޻8 j&Z; / Be0a{WRK"d$oϳEol#b$ڃ 3?YV܉LU}^įfK?}> /A7Vh/u6cO!1i'CUD!"!f.ǔ%eRy6)t N-pG`_ߜ p*3.SeCn`y`0NY=vt깁$||7։ddQXKVJ>~;p~ '!{FRZ9S uY x1 lOv0YD傫H+y U; e=7b˱ӗ| Oͫ[,@z؄Z5/FwZHh po e.}7 @O-e (KKZuh$ NHiɂ).;߇1!zՏӉa04 G%ryB nB2Bp2ADzkgD99UJQ)`Ub鲆Y8G\WrzsZl^M~y_ÄFf?C+kOʈZ|U(/ٜNb+C޼=a\R]_8?n9RfX|ݡqyFOrg7 mUۛ m܅W;; Gm8Jisnt_~@w? |sOS_0奘g g(89եل-a#>I7#Ѭv|t@!e(}(;Ey}y'P宏ޝÆ׊ug5JIF|㒬fs ej ⵯ$tAOJqSU'Că"2Qutue=h*zj^݋H9qߍ $9*$nqKB讬G+ Hll= ʗJqʱlL8yk(6vhDS,n) |$A:>^Y^U*Hke[ceU,^MrYp|tj"ˡC ƐOތEFӬdwdoא%G qxv={l>D)FucXa4Au׈[ k"%̺\Q?qG?8EVz!AE2r% QNHs&+  }''OfACű#mi_h,ZOH&~qFRHx zOѿt eg(m@豅JԻjEL~IL)#TC,BZ<_Db%Ui9>ߔC)di\ѭq`wh5J!,xRqGPn4*k%<@k*-fnd`<BDKa9urJ(}DX '@qf]gI~"Gf|Ku*!=˖[oɩ7*boC*7-0TGָ֫QԥG N= 425QUo}P hL‰^T^9VRyyV<Ks7N5B87J>++嵯¯Ò0|/h :ܰ^+wYhz Y(̠㪥:_ m WJEO&}&U!y9Ƀ?zF5h3!@kͱCw.ȩ /wS4G>*A[NH䘔Gxgz5gyGރ+8vE8\AϚBXCcWSa*ܐXkPaJ|JM7R*zk+C!zM+.gϣGܨx(׸D-PZc@N۠.PN˭*Fq±Cο"X:qQɏ_ &0} +& O:ւZM ϫ[@,SCԕWB)-% 5A|,`'ɊvgyG5XҒ%yfu8zX%B{ f:e:3%$E:+̓,9w;oڲZBB{-Gbb v c`1mA`0M<fVKKugro?w;g8-ٞqWDuvVfnw~w9r- *I: Fn]=9%b!_b}P-SMfU-~scCà \s1s)اA8r ߐ&L"9jAZu|ΝV8:a-u I0ieX_.u뮠auʅZini[ob y^G?~ɧ3>w? Cܦ i*A. )JqL̉kFN9`B) x-D31~W'^[ZBN \Cc|:Bx c+k\qISTZ 1Lak@նH&HOUwj"wɝ;$Ct&]נ=9vuٽԁ0ECc=zןBc+twPa]z)={n?Bwmxܢ&:5t f@[]B}=`tWVP$uPɱx8ַ~=Sd ei VM' eZ]"K4isB`diACD, nrո`}-W" Ca2F 2FBcmdbO1 gbفRi-, i p!!ȅц|FFG\yP1/|KmWGhe7lq=:RNHT,0oO29Ў6ۚKLxpòwm66~GHl "*sʘ̓HmHKC[tgsWVnB,{'x`2ҹx]XYR6 rh,OŒbx-.5YLot?,1Z_}uʙdd|^Y;߀k)] ίl%}l6wj\V.a `:Rn3n=1PbHhvUA.D;˿>E_>Go;}|+>/ux%*O{O!_?S6 :O}Nʭ~m|gOxp~|2:Ugw?jrWO|$ANr|Brx@nSCE܎ ^uTuNB\a%hE): ZqF$8Uk`UοQMػ4Jm]8 q P$jrym+_c} %t_FM4ݮz{Wz-8C6s?-$ L&sӡ@1Btck;$H(j:xq\{G]=;Bs򄭕O|IPJ%n͢t|cTZC%3KQ?X_3%+Ax L`=I2(s]Nc է-GG_[pnטfIR'o<{#g$58 s5U%1o˪x3̧xst(5(-X#\RӲ1K\W/ҳ1,|fO__ x{Epe>/~?C~{[~{y~ ݋r>ï||_5F'乞Gn".6r IDATn_шa;K?OwͭG?E û[n٢{{QIE;dCG! q\#w B5a@ Af Q -Zhk !! cfn{5(u웃g׹߇vNZTػr@oW)0\b'V*c7mdt`ح=hh'ZP-{KL/5._:5teaj2(@ Q$o Os(' ;M C^Ny7y}Yg~`r)iVDRpd 0 s1 T;OA+G|ڍji'Z/f-U/?7ϖƈRRVGǗ9B`J6{)|||7gWd}~ gɍgٸg_ ݿ(O!NP>?o66k?~;xB1(NbcϞ#y~E\G)d5VNQEhZG>}vf+`鮝6=u^AryMizqP tmQAF|AHqjd JUaGpBYqd0|TH q{?m?r!)4Q~c=jw=BՀ ݻyu%m Cg) Gg.#nmU)h5T;M- `g+jcA \Ǔ0X YZB^قz)+->9OdA!8w!moȥ -:-hqrl3}Cg!K yv^X(R_%_ ϯ +ޝMg? |7g~μã++cOU pY"d@򌥽eӾ`|ɩm5H _.<ܯ^Q~J3a*^9. @U39/,)fyJW[Y`>n U,Y]2#*/Uo~ t _1}ܧ>Am_j6x!oZ'OXx9G04<ּvH  _Wn1@5|ĵz#VDvHdһO2$}qrkZNM+H8鰏>JP:J%^ uXZ5"j Բ=OOIи>:+M< EEqgG5CNZ$ۻާq+qyAz(ToD$NЅaư kl{ , ys-z1 tf:w=.0F v1VSha(iY' ,GGOqI^S'.JBXi0V"eTSCmiD*>N+J`ӥѳ1Pj`+ꦰ/^K:o\թןaZCpL.EEkK YEퟷ߻GmlCNSrKԃ>0iF2ҨPJibvDrX{7c-gcbB*r) Ԏ@O^Y'' ;3׾X@6ڎI%9ψPT ~jI\ҕ}TPN2Ҡ(!M̷nw ]dpbT_Og]aN!GIn' ג(ɨ`2䣒.SE%am+R; Q%aA_uOIli oUx<b)g9J8[ʶB34U-{w͐ߴd]3;g9u“%` Ydl9B^p7M$.avFɜN*g?wD gyl!lSX Yx#J}jr/s!o K?̱Q e{sp:{߿붚 JS_y[P\n;GE RB˩x?gnjk`5:5ⵘnPGE'dN4ɵjiL!X~sէwtM1Z:o @P&qӢ6*8v *; 7PV5[@=:"eYCub43”'+]gWAd81MQUyQ d'˒o/oj]K]ƙ~u2idɫpy꣙U6U72rmo3qT4DY K,wjjͼZVQ 3җ^y)gcQ'k^o|k}eQ )S߷##y%LZ8=4p\~m@2~ct9T{Y!^U%_HՂ]rU|UkAЩlꖄ4ܱYJ B22̈́$ ^n'rrE.R\CСewuPPd 񡔮o󽹰ƫγƄG;(CU,*PTdIX 9F-A&2Z#A[P j[\5W\nu( SK6@IS2 f6+lE 9yaQb%,|7%Jf7Kݠ:}جJ`*L,g#,mx[.R*Hx S(Wr3Tt23̖ނ3o ӟ`ڊi$}7x{<^yi`>q<欄縼{_B%~!!O4<]zN`o+wtш[ī $ie!aBrTWxlR'nz>WL!IzmńdBl=W*-:JHCΞ%9L@k;kdmǟ7@_]GN :G5CE#Iq3"%Lǀ ){!eա˲ g[1C93Teǖ{<`cλW=33`5o&z׮zJ'@iJPL B6v=!Cx9Ʉ3+En;{XP/z>t^Zm-psϐ< ݶ{K\S$=>4FNtiZdr 2hUh{yaC]+_z1lC'HU5bBt:.&sQ)h*$ *ݶLI qM@+FYGeBk@5,h n"b] 4"uvDd'|cńI+ 9Gl !$N!#y&(dx\Ni[$Q P!tZNckSᱵ#B6Ԑ&!DaZCx!0Ŏ=jNoI-dUmT?6\Ig(+\KX~ b6̼: <ڊ.Ve7L;\(%|f};[FV_nT' R,UH6s̲hܖXTWnq Ql%o5cf|O]z Z,j^1y>Ձ&;p3->[%w2ϟv27ns.t|5QN5׬ՈeuUcN=&??_ ;1u;udNXJo ?#WK?kjI)zW6zhEOHLeOtwyNR$[ T$ *Ǐf{nS ghr^^.Q%r1] IDATRd[-z N/TJA(77)La6$`o~Kt1@-PmE1k:Ha2߸&;B#"f X?C|!֞0!$Yns2%J'`s'jy$^ITejwZl Xn 5RPSv[g Jc88,0Mʪ˂Z#d{?H2:+)VI2ANԐl.P9+qYNy{}Gf€-V-+Zd1o+C X8 Xʥor"*\]X1!#禋 i*r1n&#DW8TqWK$Y+3Vԑrf\gmO<΍[_j`L3A\ָQ' 騏\C۫<jzE~Gyn&?|=<=7zل3Tj^FuР]Hc9*DF6{W^vޠMU1Əc# #H=Psۇʑɸvާ]HhP:3  = !w/!ۨtq7<^"Q gO!nA5ψW}"h։7Π+6[fg4/ʊ ,6vr|H#Cf9fV)7ހVKwAUe$-BXCѱa:-ٿqf/yj{sqGrvrd8+xCQ6Έ-59Kn3tA΄?)W< /?X {cu>LT5)nPW6˘79H19 a| Ȝ,(,dQ}ZUZi DQΪ1 ςY[>#W±@5mڲ82}ϟu\<ǹKi,^i[kdȇQFQul ϙJ w~/ϻx]?Gr kM!I<]PM\Sz7@լ;xl6zŷs]VOQu;]M,'7;, 5N լp8=+<)n B5k$57uDJw4^~x-C =6]V$&cWQMEr_vC%q C t6HͦEN1(!3C) Ei "hǒP ’$ 3#_khNt\DNӒ~w'/x1㱡{]kƯl56B.]8#N' Ӓɸd2L.2mE(qAw.NųagUAł~>l[%W1ze"M%Z2ray쯼 QHђ2N&#&Bc#kUnӊaSY&]4B*<: ["s3/saLVA[>f$W-o#7a \C4F2J=wn85W~^g?Z(HBj $GSt,M3tk!v:)6#Tt%Θl>L@!^@k8jBE5AEk$sT72·K]W$:OQѪ贪z{׮D-. ʕg!drSmA4 QG1ZhQQ3#Уjԁ CJeE^c2'LyU(P Q 04Na[=SZ2[o[0440 9ޝ1&\4dܺ5j\Xcs# j npYptX~ k`?qZtVP `2#e_L"Y<9iĈi{ւi`u/ bRc(>TGSuJ+xU] )a|HfߨöyxR&ϨeJq,]^MrퟯUŵ_c/j@}7;Kbj#㨔 =h\J+ن{0}/V7UPH.DYntKew~oJ$D)Z4aF2w8TGUk@8F wѵEEⷴe=p%CEoxDjQy@k`F$!CTC^a/:/V ,a#wWO{!(Sf2;Ɔj6%RxI(YiHLOF xiIB$%+ ן Xh}TMPSA 1FPęٗ G\]y-'P;`)BbYm9s+}\&B ,amUeNtu%B6)o䈯c(^ _`ul:palSb!B)W:ᒵٙɌ0Np4[)PB<"BNe݀zb Z`tD+n OW B8yħ?K/p o"CgiP;`q\2sIY ktTC7,|u%Q˽oe$E|{.Z$UTLfl HD V% @,ĭ)5wQ %J5QiJ ˁ+"dS.+MTu.H{$zBdowP8m-J P.ZkZrsiBPsxI2,Er1+AE L" 3H'Md )yԔ@rJrRSSQ0GҔ /,(Y_kgx^QQkR1D QD+1o~ʭ陵=FquqlADYf(#,[%\ v2㒫)*%VX. (YP-1 7} *9~ɩ|v"AK }Dc=~]VEg d13Y$S tWDS\W&g_`erd0UDCܓGjZ? M 2Ba.BD0tQBcY.dtߢ#w-QTtT{:zG|{֭|(t:%nUsU qey!_O2:ΰ2"thwG^Q%0"^@OP5\Q rjv6eAid0!9죔o~\ 4rKVГI^4RCZX#$4a |mY)6 bl-R"_Y )зԂ3Dax1M"._)jiXVPn|7R=v9c;:GkmCUQ(f]. :挱|FoLyCA}wޟimeFNR~ywn6sgc3 f*z[,nT֊`}ht ~ۈFsWu=>On7ԟa` .&z$SPK@:i] c8\Gu a7ґ~*ϸ oLx7h2FG7{omYv}>>w<7WU]]-Mw dX& IX @Xfa@lƐlP(D!BKZRK=Tu՛ν{^aMUZͻkժկ^ٿT6DÕuοj H*Uӛ 4,Љcg B ~QesTKg=vo\"eN-IM?wgN !<͓WF=wiuH6IG|('>ıG(=>,L*cK;Y [amEe\rr>6 vp0d$ I=`{TF`mMm C*/?}JÚVl)4KH8e׻y{L\4 **bDyEïvT7Z2aD*$6Zj9޽p=\=vlj@ g7Q`ig гT"R@ T'ft-Ħ.ZY\B:>@,HHFx, $tCE 6(vËfqM O0QB3_PBFA%M(@Fyf+j T%1&*L&(و~^{|ҥoYSFpWۘk/-McuՌg1Oo}'nw(&MaQ=fҕ<+a"| *aZ!j!Oo?xυ+W`Q4D IH lmϝ0$'W(5GEw]/,mfyCOsm O6I'H\!INAdP =S/Ikn׌LT -vGbu4h'% {Xӥ:@O/b.h@Ț @$]:[sL掌1J~XjD,ljKm놠YSy5FVC+ Iq7xPC4+r Զ5  K)RE!D5vv/VZ_zbS}`Ebk~w)\=n1k5#8I:˯dr,yj| ϽšshW̼hgIh0ο֖;Am}]S<EI[ˣ >k혤.`:MQF@u>HmljuJ8ղЋQt>E s"F)2|bLٔBgPت !# C<i%u]aj=/0Y{ + Ryɠ&V=^WPh;0i΢ts}~Vd }NmqVqcތ bq6Z%fr3864٣7~ -j2c ۳SM|1X!Z cGu>R/rA"^X Lx`L-FWP*,V =FJ7bۗ |IOXX._.y *T j? sf=B¬=D! ? CTreԎՑ.K[= `+9(^NiZzA{S|7OMa@Ȥ)W%*rٿd7,RZKO_?|!j KA1jTotU7g0ta79 BImIoUt7nРSPm&ySMC_q-դ D {.DԹͲVfIw;oXAfɩ#AB.1:;qicH# 6z1%jtQ@aH o7/=>̆k7;y{k!! Z<%d+) !nA'XYllxtN#b]Zƻ|\Kw`~tzӧC6C Ƣg;ކPWދ&߶|w?9:oѣ}`:G6D+ۤ{sHz I/rj!&¡)i:w`@tA(]ˣ_vU(QQl7u h~N ,=+g u0"نrGco轱c]%(#T9FFqJZjt(_}TyQ$m*PS-G6٢B V"C!kBO]A/\ݩ܃X `౱1x;(`E5tَoN,o|.pjA `-bT`բ`5Kz:w_eg67e=-<=xR8(ebG|- 5O>]ߖxn\ib1wAw!Ӈ%s/uS3md}>sQab6+M-ZP[Ԗ\Ut I/$JЮ!cݤ|Q 7-ڃѵsGAXֱ}}wgok<'y}|CIiyQ$I1ݬQMLƶlt~aD|ua>ty\! P+P,P*꺝2l|mP̤)u(ЅFBh(,i܁@{[*#~r{[ j]cpwWRS vc2^stԍW)W;lvH愲3++>Q Ї4q r3aPqkf<1dž2Bſ8;3(k|%BRh/J)s 泊ebn J|!H&|fI `RBݟGo{hT%7e]ZgE= tѴ ݓB:˅w"FC"ڨ^ Et7rYc+EmWn.7$¢;C>:jlEp>]` t$W!%> =%UF=D:I%9+v'KkF5YfϡЂЯL^((!8L,DCRRJL^#DMDD^k?}G^y`.K7 x$Y^xL4=߲辅ZvX|/X<'Gr^Y|9IysK: Й{m\C(*TIJ+~qg0 #f9n2$ܢ͜!0>T94'OwSPXDŽT ̢w.l ۵ VX:UZCT- zUu*(܅ juSpPɂEʉC٥z X~(T7vui=FWm4M,&Ը' D$Vłnz]I+Y z Ga+=͐VyEv xV2 lǁIOPԖ2=LHRj9]{Q= .\{}^7RZ$<3MG>A.PBUX4%Z5/6CcNslT?q*HKj]͘P!R\%5*n*%Zؙz?sMP-7TVTt"DVK1\Zҹܽ ׇNuN\ṱ*% i>GQA0yo) gu#R*TEdVS,*D- YK| czb6 j) a+xWIYH57 &jʒ/$3]5b5-0 Ac #{:ϑaH/\<\<'sIVOEC. t .>:ihAw+ \2>&)p5Nz&g9jձ>Ca\-m&J AOw:' D>J.b$ Š47 N 4|ZC( 3#( p!@CAKIyY%[@/\w !uH=[ΧS8vjҥEk9>t" sOe%0TCH=,Z(PeMUVRdi>|d;vʛ:DMΪ(G(kB6.\ \3ۻ/xi6F =5$nIb%Cg>8N0ėЋ}zϙDߥ. >@<:(U>m#GIx5OQV5^|^ݖxE/ѳ=dlj P0yQHle+<GJK7-2s|xO}Ag祲>')0ByDtvHÒN$e%7BgS%n:CnIf$6@SBeq‡' &DShw.PJc gOm-;zݸ*8Lgk=G "ߗtymܟ7 t$ɖssbyz|aTM/_' X ҔuL9p̾:\բ qaۍqY,%pj xB;{5#3l\\qjww|;>/D<_(_m' z$-xnoKmfWỤF Yt|ҬbxfH`wtR:_Ebl w i`% : }-iv^o. iڰ7!/I U$T=:T5`!m'ŲR%N1Jv7Bg~3в|N Y{7nB ##\YXʢ}{a%ct IӡZyy #@[Hzx@[xs^ Qdܔx(dk\*j.^*'+.]]:>Oν$B!0ku`δ: ׷Hw(Φ 1zS8s: btijhWZax2o~;5N#.^*5::"fևǤj)(s yh*E$shn N:!3{S#Y[s3/$HI !k+˝|}NC+6k=J `xXiI' ^lj.V[fy w b.>]? |#{@c-đ ҡ^x{.?u[6' %%Sg q"ƒ!(kڬplp 5P̶޳E:ѻ Ow{Zq_ =I)*i6%C{J$P*Y^|Տ1&5H!TmJ줹R};y'h;_CTC ;h2BPT!  񤫥]ctOC?Nߑç_Gx[>0X3ABE@UCxHɪD uYRv +S[j A)IbAr6`c()^guG۽R5eY"DEgNI@Z#y9Y;>$Z1*¦HZ {uyUE<=t IlгCvFf$e -ԵE):'D񤫫j-|< (4ٟ2ALB`m|.W< %nId-b#Xϓ\\.>OH+d&k^'Y=,$JAQ)\'  ܿ"] `t}5С9DV5*Ō$B.|CBuB\m眵~E#*2Ņ3#H) (@QZpA>Zϩ֢Cb^n2g8-: p3i6&-٧dDJ4Octk{Օ115<'}ᅨg~0y}ߡx$o{tO#5w@9d`'ӟ-+N9?2^ @ /΀ڳRPI1%O$?p>. ij>xbhbe{ NYYW d} 'V |$g$V#2NmJ|=դ;OD%_Ooktѵk VЅfo&$QJ1sڈz zgtQA1A0i;'8p]A!Yq*ݑ'p :呣%rt:m\cW"|6jrJHÌ.7+rJ 88 ˆa;>*}v;@g{SQSӛOj1ܲ$=ZM#Xo{>c=|k}RH~ǻ~|&$r<<[} 6O_cq(YWMA')/z9c-\S`1\d5+}AxB`=Iٳ+'цv""S z²gyكwUS6W zEQxNί]'!80[6gtw(,䠄BYI%q;qY،tt*=T?&6nj^uuAM4-ԡ b^̗Ǭe#Gvm9F?>TP:ؓޜ4o}ʱ *:*Pプ.qi+BCQ@mR곽~fk_ݟ?דg{=6u|{%Q殻vkrn!FH\Fn6%&m!=KH:>k# # Ca@gIҀWEsntFׯ#ȝhti:+n1Y*d+7_BE!P7U}HA7q hpjX-^t-\v(r @]Ď|7$*>=M'tlfϡ1 sb~}Ɔ,, Vn?VGf삝8yZQ k0I$"B*غ' ENL{b8HH 5TXȠSx"wCХEHgE ڌfAD T䡂]$#03 CU)2Ξe0X`s?A>g_?7=ALwSW˹{lqoY fcCs<nIj @ Nr8 cyH& k(+<[Q[#%“c k,YͬVs>w~}.f'VU_eg`)tX7\h7֔Z̳ըN6Yr; ,Gg5`DBfyVi_ pN: Hs4ˋ ,C/f&P*;(` [$;i] kJfDP"uyqZU.%^Tɰ$gvG,8'cQG9kKzN7|뾍y{>g<=^ yꩊ~43\WԲTt1qC (KlX^ΜV =SA6)+ba5t* J)#HINs>w~}^ICXm9T.IG9Di9`g]G%dJz*IwU TSP~3 ]͍ԅ0D ho)EbГήs%;MCv;rgH.㋠A#Z+^]: IDATI=FӘ ܱ~ A c]tYmWK8§G̳gO(?ok;YM6?==mm >p2^C f!<w:):$BAԡ(|vnv 5 jLS֖ Rav?{e_{~2yV^ϷǿL _~׾.$.<^ӂy H9b.X5WrOԨFŖwB逵!$~`!/,uib#0<}D 0ď NllxNίht$B! ݫ'Q T+BN N;Zqnu=ж"=Hn P'ۇ"P#U-h#xp9%!g9p֍;u6$9(6S>Hѻ)"ERF&W!e׸P(U ;ےth} xk%$ɚ oN{+zh~A (jc PK${X<@acϘ} <>g$|RK=>ˆyAUcJ@>xƙ`v*@q8ݡ2Ⱥ]XU$s]A+XEnɦY&%\b  D=s>wx}$BQCNd&YC`/^5ՉPO c(e2Y N@H' 1Tn.^=(I .挦)Tf`DvƠDERnԩhPEѰVHזu8Uto%Qqٳw:D7s}%ϟ:3Q3.,I nc< D c-Һ +j>(Xς|23O߳CJ[LmO+^Em(9B6w5_߃3{AHijqG'*^dA]X0ϓP`ϝ]skGu{ V-3\C7OQUx=G t`霮utw=="9wA^gym_/}gT(U?@Q!^ƦMT*Ac`l0lAy0HA!CTʅRbٖFfL/o;'ȀKh&OtwݾsNw>ϳL&01 L#n2&mV;BR֐0Bnn֚a 1y<$~$jgjiFV ނ,^bt -Ht7?45F%~ǯWɮZ4EpPZh() pDP(MUX尪dxÌNyw̖ v $c5NQe^ntH f;&+Z񒥹$]FlDL/F gs+5Fy a;adMI7YSd:ڛc074x(̱5Ǽp=Dd|q[\~7wu60kBFO%'vCa0 F;_$fSZ&ҡ7{pXi{UKK1R2RZĄRU7.D53zFkޑ>ٴ!<ւCfeSvuSq Gmdǿ 0li2/~`E&jϦCn7GFu 1ߩ?y:DIslY*r7݆-DI-us\U(P[*t ւo|';*a*.jB:ֶD# @4A)i(v T3I❔@yk sH3jPAXPa- XhRMk*[cRp9\>`0\B!,0f A"Wd>Dc6,iLJ"17rA60Q5;SF##57C\HMb EHFgcfK,`})pMcpdt?02]"L$Pf^t\6ASm,9kz}؛IΪRMN>4N!+)rMQu΁&jD,&!ia*n<8se]weC\֬mͷ:!J(,"BrGQzF(g H)B6NWj+ġC֞޿j- Ɛn V$e(zݐV҆$糟UW-:cac: |9ICH|ٙS^O'~>?1#4 MvfHy6cS{H>Q 12[ LI[ZD=9iwR~MR_Zށ{"]L7@ftkQ+!@H7)>&jЗNIאK>ɦH4G Xd1,ƸJAx6`.d˥׵sDƾYv0nW}&{rW,D50UCbX,+RQk5nBS+jGY,tY9!_G&.CrQ,^\&/*˚żfp,kg\x>ێvG8} ׅV2$e׌s9_|x|n5\y?w.!x6S;m(Oƴ % "9?tڤ)2IKܭQVbRNvtgJg/kCT]lpFVFd=C-0ƥ=D Kڵ@ W WT8GT5u~+t3[@d 1qq̈́c|h,o皲 V UC ?y(֘XE}9ŒMGRݎ ĉ[Gb݀8҄W;OԒe;5gZvwYpYcCGF8tێ8rL%9ssΞ^05\;?` z2 [bzgͥ%+5idI7qr"Kj1n! FNST9t A+;D 59gKe ѣ1ѣdӌF?Xu1@3F;NL1oN 9 .yIV170t7>h Eo'LGcȖ „MDH]c!C0@)uXcШPGދ! aYQA zS&( VPfs3c[~i)Z& 4*JXxѬsg5;!YsGjڒ؜(,庋p}.=ѷK?0CVr||\'rO+6t{t H^@ d'O"%Ǐƨ>wW{RcԤ* n`:nn}IÐ/{R-._x'f ]gz$dG:fUō1fQFnL\p3o3z1&q뼌H_Q9ԯ"猱PvheёmL)D(J[Xb u-0e5QUMjKmMm+uMPaAktq6""a2NWox~gNlO]|U\/^y.S{WUa3>I[!/$YZ3A#]'dOmP$p'0g5 : cR!Y],$_Bcq)80jm&5Ǽi „2w}A `n7M1h*;ͧ,8BfJAwia*^Q8TAENJGXCǁFG$he@[YM5q;ӮyQQs*A9vڂqEAiF \fHġ@' q"?O]<ƻfdY3Bm=ouorޏ_w|/??W(]\oYr^ nt=[Lr#|J6#eN! ҏ.:J$ 1&U csvav96i-ɦP[1&ot0Ê0o@JAƫW]֬gsmm{Jωs^3[)Q.@ Jy%️ taDb -U)rE>*Jܱ5P0q*?B%5eQjEKUXlYc4*N8WlIiDoׅ0 YJ‡.Kzu~#i1:D?r5ϟ˟(e0 |_|뻮x}}Y{~+gBEm H[}d4`( ū%mNT40HU@>GtniWdb56ΐƘ ol d;{Ha}U='+7cLL ?iƮטgH1g`1*W%^IҼQWY)r?5++HԼBI;Hzu'ӱo~tSk=m ɧv43J fg'RF7wz"GTa3j ‚?nX(B9*FEvԮn k ]"RJScq΂S: PP;PgZqN_xU]tՏob﷟gaG}Cw&n!ŒL2z*Vh ㎛c6w;hqWѠ饘5_̖H^ق|Ƥ')_Er̖PxH&Hx ib3Df}?Fj k_(!Ibq;GL< 3 ˢV" 2PnyW~-Q?iA*W8qL:ڡ+lm a XeN뀰xUoJW^._Q~NfS-R0qv72b`D7L";K {lDztyF{tM~1gKdw A}2E8af4<гSNȲ-+͕یQ }%d1F#1YIv{VtR6 9&6nU#Iȗ:oB7)8p8O*a:t s%/{GaAEDbU%UXvNq@("P0TXEA]Bep8ouoGw滮?v+_|??gtC`)K$ϑBV>e 6~` QA#xT#4؃Ρr*)2`vqL1i7 LLIZ^GCJ;gϡ`@Komorw??l~8^s"VXBbfZtm02F;gt{~VȢ nlި̵4H2Lؘ[cH>eX0,8Xu'+s 9jVΑR&!.٩=̠Esѩi!tzSB6*}ž25h=yݍ0z1Ó t6mS֊*_R'YM6[i+ڽ8 Mo=5Oy_?vBIUYn /:G{l''5Ċ٦*1IncB d$ ۄ1iE6:qW)]NkX`X[ I"͏|] g.=b__7 k0|mN悠lhTC̖wWY  )ə}IZjژmORP3ɘs06 vȞ@3 LOZ/)v1t`O6 Gbv'c0k)1C!EH6t#aδwO0qzk֜~7C Ό0 H&ù&ڀL]i;`@*;bJ)P&D"[i?mמ2'9/~x~S]w_s柋>8b,@lbWFfp8\ q"EtE0=ϠfɪJ!gMdUGg@&ߊYF_1zQXl[w(gJ;٫1k)&C{v3Loۖ5Oio@6:˲%GHyO tSD| Ȝx͌$$lev!W\_wX`h_/N1[c>`A$Ef&?GyR8L`"EV.ILFwws2at$M'LM yvS-H7fWt=$d1ӧ1K͹'q0@ moF̰1xy3IF]!Yp T hobx'v,ʊ=}?Ca.&0WB:ӝ'u1N0a }<-I; -E9VPj f604 6ՆӋMw I (!ŲQ~ 4fcwiF}GZ~\9߸X1zĂ"jٌ8|Uq͠|] Tf 4d)6.٩=DR#d C4!!ӱܫEmC?'IENDB`pioneers-14.1/client/help/C/images/messages.png0000644000175000017500000002207011760646037016371 00000000000000PNG  IHDR/f~ pHYsxa+StIME9;Ӿ IDATxg\SIOP]BQP@ (}uUlbob ]bõEEzKOBM p3w3}hiɀ  _=A `6BA]@O{7!/e;r/nN^?y$6cޮ믳7仮YӷSnF`"YUM RQ aÜ"b*b;M?$v/^躇1fWdW^L|уտH{u9Nm٫O?x῝?kJ]s$.H  H5VG #=-TPיgngӾ/ ڴ[C/C$vr34k|O5Gd߮ O]yEDLԤ0F{}j1Wtsh@AjV̢ > ;&Wlv~[ѺK3m=b@/F6uycAC~nļג]wJތ!yjh#5  5lmGG͍˶\Үm/b~WA[7CA:PA `6BA0! f#Az|wSg_OHgISC!*å뵦A6ӻdϾsb=hIѶ9ӂwnme95hz"*Hdۤ]?gtP Ӣ#",Y&+AӪT2*d<{"8q_[M iɊR OODԕ̴fO-l7E*Sbaae=%4}#vQ=<-ztcWQx:҈m-M ]}^Jd>{}^ٖioir斫ԽȅKFYMYrRQp$ȺIEH A2B1\LVZL"J Iylpz>Ӓq2LDZm_r!fb徜k'׏VE.-r-֜!)/ !$?ٶ^C&Pu=?~69ݒ;%- s%W*,$"G䴷)B-&lag6PW ?49Sp().$rwYRYB #&c#ahqȺ* ꆏ w6RJ1ب9qlLc6O +M_JVstc*d,QC7vl{F+yV3E4=AڲKyn{U;3y6'4B4y9;v |Ѥn<(w0*oFļ`dqC4EN| S4a?(zweaTҍ7{Zx>\p5G_pnZ|0f1ԣߨ;קzO@YbsӶ#R$<=gl[qÜ-t 7W%KNjTE)ۊgZl4g@ }]fijDY֒jmXܾVL]̪}[]{9,ƥnOK&p /Su .aEX7M9`P.?0~ ݀a,l0  r+ OM: FLb(S!`(Owdϟ1k+,--+UqcN71n&H-mܧ9O e815m?*ӷ|8;cO@s)%#L<-MYL K% >yҠw%w{t~BFIzz EΪQGzQ<_9r>"`vQ*h QN-W9 P7|uz[?OpZe#}qdMɡSȨe~}XX6 Uꆏ H$#xFbb$&&lЅpMAt<DTpهGDЅCf#Q1lGg> ڃtv8|A5A r|ޱΏj*~Bqk!o/bB뗵w{e`Y\*PqO0iD@vgdHDTʮ5Zo;#묭4K:KGrA[CĀ9mi4pi ; q$! 8',Oҭ#9b1=-7C0nPǯ"/AF_R>'=` ^[H|}C$?gtq;&)P^BmT]blu֣s"L܇kk;)ٕ*2%.S4q$zxFS$5/Opi0YnYYN-&T7K] ByAZ*/ݠD+iERK@@\&>gnHt)IwDv"),![/Б"S$Kf1Uy"/8&+%bx!D("q$|\O λua!J͛V#g7qomTIj廴1Г^neو/Mm{VI.ڰs,je ͤPD!bLquHK2w:4٬J4$H"%SŮ[HL$Y E|zzm!eqtKyg2>n O6&C]sl#HuFߘ۞E=.mhW'o= 6tNz]W\98bh*=&-7{̌ݕDEb @ߢt0lE%`RpR\8]Ll#=̎;XX|oH|`CU$̩CH Tyͻ A/oo ? T۔2T6XA:Yظ9~IO$MEth'A=۝<\彥G,=zc=/MZL /MuܖD -;yr7yC-=ntX+xT:&zj0gA@8)=̀[bNz$PĤAsL|ӺèN͹xm@DZ>(_H`否Gz^g,2ar+(4/OE00jr[bxe9D Ft0CYlSOaIVm:Rd#̽oxPWg#?3k?Lt|M/[s '\_s[nޕbcVy}dn`~}v #Y0m"-.cxA)paW`NOYԢ I@Np u:1Ui OH4]t\.C' A趇|p&Sվڵ{x##b-vlpR]{x#X0d/d uc8 kځgAF C~x1!`62NY QvӬPj`'AOOؼwߠk(@Fz?42H|U} 4ElTTջF 0Yo{ @fAOj^eax|k֐&uXt#s1)@%)vM_yO0zLoe%*~4|'YCa=42O8K ̞mM &OGe"g֦% l]^ӡ ߍM4f$n*d{ ޏȌЬ^zJ,1F+I݇tG.sof.Lqnص[aF2J6MbcqٻN^!FSYAd#Eo0w8;de7ocjl+_1FxqH,-^Pѻ/x3\u Mht:)6\1UؤB{2 ؼ^/|;;{S!W6Q|hJIJ|/֡ډ 5J!_M)/ {Qw 쓲,ΥƘm!kVEu^fD[k}+rAB;RwbYŮiwP_YLyEXȴ35i4~^e4yηg?DWMp4[Z]uGƷ綧tRQwUn7'`M\}ɼ8lӢF:Pn.{ɫnԮoZ0?fdKn{1BzFxɧV ݸrG9wĐF39Ϩkia'W)zlE~\Q_wlkٸ/9q:ɖP,.KIhtKnM}6e% +# ͈l;{3:L41uLdӘV6d#Ne.^-?b(PS*0MEwR 4EL#S3qtQ*E AיGqchl*QǤh+]1H|iʸU+/W;`׌D{C:NєfuL^A{I@yMUN_{Sv@ѽp%g<iUp{HH$4ؔT̓71#`Ɍ. =Ĥ D9eNFA)P:@qb(cdJ/MTTA'>TlT> Ŀoֶr-j+dR)SbjG?7N̼zfޭcޫs_*&\" ǾQ$뙲M ED )K&b!MaDtHá\qQ5RO!M_\+3dYbd脺Cŋm#ȗF5mcoT6 YӱpTfF V l\GK/>9ZZɕ:FE{IkF*'_9Br琒`7KGKqHu—]%0XCh F`H@ Ӵ FMG6]4>+&b(kT[Dl %VMN>|-mA@w<~{%>|$趇 :>c'M=1h>A"o|Ե}a;!3A>-\F |F #pSSxA`6BA0!UC^k Ҏ> fr>,'D@1j|٨I:۩v&y3>Qf5.jARWJԊbNܙ,T1]yV6FFmOũ?מEE@"(7m˿W_N_)78KLN-|٨ÉaǬNjq8,FÛ(z49ŢG{ߞ%$?䎯Ed_r7bҧ48fbђ" #ɚLRI<:%鴅Q=m"붳03 G/ZO;!ww<^ǃEo J]+EPEHYd, qpF'MQ])r*^[}蘁Y U6Rm7")MeVu]B bM8C}B^_nzAGs+k2\x>0K$:t0gM=Vv={ĺFvJkun&y//*yۃZ&E)6(uwOb,Xo=:?/P…Cﶗp fdʮ(> =T&;nx'УeQd8PBuvPe<#pOW,|8h)MTpQ*Vja OQR9H ߃۞Su?wl'|5?HV d Xʬ'$gQ̈́B鿂?Jey43BxЫ9;,P1IDATo}odjx tuN;ݨ 񻕗uemkE/ypZx]Ҫ&n%2:ƭy\%̀×Y h5F Jhb'BQG0O,l17ǹ~|8v׆8/V!K Sae1x_k/ino!B^哄JxA&LU!e"S;Բl{/\.6wM/r}~52~)WJژv*JۦzrK&9حԵΓn$sKw{u>;+\w&:Mݐ;%B"AKDzCQ918Z?зEX[mO]LmJ]߼Uþ2:5OuYפ.~0w?k'H.%Xs`\Ek(k_}?/Gz1/ֿ_ok\cg% (+\~)?͜j AcQtۛ>k6_TywxNmlVc _hc߳V .B1AF_?tCl |ȭ]1! _.wvl |0! ml+ l `6BAA, ;xŒÆ,]k#Apݖ}CSAoX\7[A1wniFFw#AK`iiA`6BA>xA\=AN𦥧%+>o3 T mR;nC]IENDB`pioneers-14.1/client/help/C/images/monopoly-dialog.png0000644000175000017500000002131511760646037017674 00000000000000PNG  IHDR2 pHYs+tIME ́D IDATxyXWƟ$l ; ""+ Q\kV놵Z[j]V[njܰjպ.(*I@ ! 󻼼fΜ̝sΐÀ{ KޣtSFA"2?(NIJYEGʸٙS⤔ɠ5 _ o 7=Jס*\R[;C\5md݇ - *=.QYR_QN B#Q9&2,;ivD9w 7ꨟ*Y)lNk*mc6޾'<`b'"HK+UC6Iz+Z7IA P*ct: K`w+Z\ʍ% #M*>A`iϙ=@&'?-MT#?fua1 [mڅGWڎ]ײ$I6t5&kHJD({ӹSX[VE%TSmMșomg_LRvfU|Qs%RrTqXLơ=L tfI+1&-HY3s-6[H2g&eͪ(E"ZCGl#}{Y1{.qv ;鄙\sp%lÏ| '$$_ǰ$b-w!AϨZ6a^AѥY]Trȸ $yFէ*)x b9O9`cַ #֣N]uʥO>-Njڇo`ei PɁ{"Tdua 7깳BT~s#Y+orK+/EF]z(^x&뚛ֳVP&:y͋L2,!)6Z247TJԋee=mGU(c3a L#ͽ]kw[7V=+-nSվi^b]|o?kgp/}O'a@\Y&[K_O?&O4bV']d;9r̫}X 1߸@Ogg/r]lCGVAWOezz_W/'ή/Zs]F^A!ȥ,# +.Y >LX#%=Zz0Xl56տWn^:ƪY}'y1l͋Q*9j_%d3-b TR˒$I< :L(x*crjRCV @D1-XoOtf= LC ū27DX_GJ%L=U] A"\cCq=5vp`Iྲe Qxhӹ+i0u\g9NVJo&qNZiO65d*F hzQWWE/uK)t = -%K`'0^jhwR!o V'>9Cq媫{ Iʃ׉h9Y"]=M`֥r^i5De(f9e2Gn\>nv oRwuW+,ka16ݓbKr|݆M],iVUTrZ.=\֎jB޾|(3^TR_aUw&_ɲwo%K%ܬk;w/; >GͺFؼk%@TV:A+W>u,az%KiX7o_8wZX&ɂ\ؔ翜-ee)/'_\XTqbYZ:xm?uɸ 2xk7dيUs!C)FSz^`iXϋ.ǟ~>~줩9<.:1t)jRZ+5]qb❔pm_F\]OVĜ<<:(%&{+gݦ>TQQOѮ. >T\rzpb[ײ55*=5ڊ:UE 5֖EŸ8١'IVZ=AYJ[I 7wv9'%]p[3gcˮ?ڵ_.{),4b8_iy5 <ʼknfFekxJJk&~N@uId(иLL:}W.S(?O]*)-DX:w E ҪPVV;j8L&Ӱ>N$ٷ ^8do3'R6(_[OŲZ:/]hr-.pV&ظc?#rk@@hJ{@UϫAzR"mpJ&+Rс>(/4v|v_,b_L 7\v LLXDeRMU,}hǻǟi:zQqyy\s[WXLWTV,KY5sl Sn~4-+chh;??bPLvNN|hJ{ g+d&>^PPqitY pD@ Ekӫ;9cڒϖd,hVU×Ӫ/ZCOYYUت.iR\|47GR$IyTX_}- BǍ|%jbtU՚ԙ`|dя;Z'l:dk' "RUhR,UlJM E"HWkǍmlJ;GPjG#MeGokP}zl>gQ Ҫ٧ٻ-p!#6@%MkBQFNǚu\q}ry$- :u奠"J[aYL/n,-*3d@@6ƅ)/ klJ; _ m8.,t|X(vyq`tNNnXφ`L&~e r hީfnhG>S`ߩOzcƬDdY/fgel]p… kkkazp.R?1 .Od>'RE[ z^UAzϿ鸲${ ڐ@sH0 m&yL(}G0xVFsuӆ{K=D=z4**ƾ Wl455Qt\=M92lXv}pw["zd0{ݻwk<~6o/V/)jШr/'M5%qebx֥%0n8KiiI3I"&>^DU"cO<Οԗ A.^S]-[DDDx<eHvA_޹gw7W%*[[Sc޾# gKC˒dvzG$(zo({uˤj?]]KTA/zqD~D\[{!3n_'x"|L]]vY$9$ IHKAzyY)XZtN B@4Aw' I@?^}L0@!I% l M!!ohG%4|A:, ^>8[" oF6D+y ,e HsӔ[$Y/r9IL&adXmIY6Nr';_RZjhhY3yPʲڕv 8x]<^;!>.| TM<ık䔛{d &:߽zU7[MjgKls3ÇDWwyKg[׉S t4`޾΃KKDZD:,?&O&Ef̛;;w\]WZj+W>u,az%KX"toI;)E݋mҧGo^>O2o߀W3ܺe),\0(@7[6kl4ss3@Be (%%ia`!x5CJpd2%e|w4C>aY~4)ܬ R]ЋXMiw4_D~Wk8ԙ .l]=co߀8Ce99cO4"=5%=5eTЈ)998tYj|yw̘>hil=u\._agWo;9 jjjpt C&eTQwR^8wAm}uqrqTt[QQI*:3zu6FFFW4qh#-5"^Z?pPcF7[j|7`L1ŐcS2N2eZ)*+V|UϝTEP|ْ~kks箟?_Xi3-lYNnL&9{*e,vwnnGc%>߮t\AWW?8Oo[< 8!A(| @wҒXDe (KAPDe (K IRR_/kkkRA_u +?]wϖRiHpH$ jk䪭#CKKKcւ=|$3fijP$@FR;^=Ϝy:X'g&**S g|iAZn䉇QI)A$'ߤNE:y"5m.4ɭ[%KI$z:U (Kz]PII) %%3 RZVrr˅EE7mҪ G%wl1=7}鍤8|$6,t qNl\56;vJ*AP:M.| /!Hk-qpsHZX9~}m] ~#Pt_k{ACgdI~c⥴\._agWo;9 jjjlwkw\kG{=R&pُǏ4uz?E<:&xetko\x'@ ܴy;w/; >Gͺt7o_8wZXcYwMo7r8ysfl۲>zFq܍뾦ћ7122ZrE_׮Fh-tk,ffip*hAy:.)-JV8H-tS#&46+((ԱeڝdQYH;w%jbt˛Ѐ E"HWkǍgΘe9y2~F9 p)K,o$>uTHX~Mh_a޾ff˗}F~qD~a';ϙ08x4w҆@;iY:!HK["A%,AY"A%,y(:;5Ҹvn,`!HKFFDe A|7CUUuGkrN(KMs;oȤeo iNNOMw7h. ޾14ㇲD(/uYP/i.P&:9/,L*u໖ {ACW(KMlL}aI D.L`$IDj5iSuB.)o#FY"mRLZ4XLIu6ym(KMϖ- ]JH$T`Yq[jҦwYM&/[j%F l$"niegie7v\xzZ:}Ȕ>NOKwqܱG-%vȒl|'oSL=*$4$xt֣G!G;6+;΄:<& -Z,O`wX:ˎ \,SjM,LcccccYdQo6+9”~[(K^V\SUUӠ 4abȤ .\^v?~r~Gc4YwK-[j9O:9פ2N7|9.tM8[3_,HW)I3aߡ^b6[y|2I%&Agg|9JI{ׯ9Dk,A:y_}ginytlmY-L3v'<|^Ck!h4m= NpBw./^s%[Ww 6NYI3AJAݦQ9 I3! 5Q ͇?~ɏ_-ӓ4tvnwǗ,'41%Ɉ|Nۡ,K =.R hcl 6TF5?npB>{wzd2sZWvQ)_0>?JR;m G_㬣l$ ^˃\j}@mktCY\|b"2ix*]% 1XkrvvF5 Vl7qIF*F͋gr~v :s1K+hԵe6׎x@o3Lfٚ^ ^z᪚(0& c*g4$B|:Mi6aF;4uQP9Պ(R3/0A&:.oހha1ǛSv\ۚ <'i4p[UMUVX5:0 ysqpkdB/{Y)7n"z(JqQ׎xm(#ʲ2J]C ,łl!l5V CCgl^b1[E+M_~-ɘ|NgcOxi^!UY&b~ynsr|R,M鵛zy@' c>y)yuusoʒGGg3sEAU; xuo{hQKll`{ jPWvE꺦.?l G燬/[\RN~k-9bL}RS?ozzLy  =_MwYtꭱK}IENDB`pioneers-14.1/client/help/C/images/ore.png0000644000175000017500000000035511760646037015351 00000000000000PNG  IHDRabKGDAT pHYs  tIME /1NKzIDAT8˭K DvALIAEYRkL! C zwX2| ^bsz ŶX&&ⶇw#L< [z1'PF_6dun7IENDB`pioneers-14.1/client/help/C/images/pasture.png0000644000175000017500000000407511760646037016252 00000000000000PNG  IHDR"Hit pHYs+tIME3 78a5tEXtCommentCreated with The GIMPd%nIDATXõK\W:=c{vNB,"V6 MX5ac"<0v'񸧧bq͹W_)Qr ̷ NPxG+şMD<ѭ̌aⶇ^;}{ P1 t1M~[>+hc, [$3-gԪ=BBJ Gj{}w?|Z " *(h4@TaLqxLѳ?c]X?GSɼ("F AQ)@(PȽ4ݤJŝ+b,<ޤxoȳij$ El A@Հ ,ֹ%K<pM>F;87+ey&U&ؾ/v6\_Lu9%76hVlx'-bRyRϼٹ։9tu4=ה,##PSJǸJsu<ɯx/ϰL_&la XSБpCGbYy%Ap88XzSI:-KTbzČ[ϑ2>ɓ!HlR@!"nh]JHM[}VUsy$=gqC(&ZF#lV#*PEN$`-G.to9+@AJ1ʈ4fmc33D,C@8շ!(K6 DrYxjE1Pe ̿5E=5'kPQʾǞrlKmj|$b/!`U<1S^j<)ˀU2lC2 +٢-ʖ{dy`☖#y-^myه;=[TҭF]*ǔv7E{aۙ:w}.\vz H~=nZc5PN ~c:/?M#:\t;jDTY@"C32|V?Oyy6ƕ{opG\X8oԻ0-WN$93^^8bf1| k'?~+wֱ2z|1E}m5=̞'rO^IENDB`pioneers-14.1/client/help/C/images/place-robber.png0000644000175000017500000000300511760646037017114 00000000000000PNG  IHDR|u pHYsxa+StIME ̚ԣIDATxLu)dXf@8E$ ٜfaH, GiY+4uR-ۜ,pBJꁠ'v96J\wǽ_yyggYpu- >@|@| >@| >@| >@|@| >@| >@| >_/Zn杭†S; lUirEUڬYe)ئG*<ߝ4=3[s\ם;R9(\A0=CGm㎖ڴ-b;4G7Oц]{dո_OҖs&m//Kfڢe*MTwUYkJm|Kg΋ʱMVIji$/)IaVj~ if=_Q=$IWN4$M˾v_Iߖ?w:F2 v9\sWx|*Jsud[Z5 v a~T](ۡE+6`/|eh]q.-+5*`xIsw9Z~[s\W44ix_~#Ԑtx7=1<ݧ)34fFF9+4šF0{_A:sbя5oݹj阢XFcyG.T }9wNTիJ_6dyig.Ůlxӹ뤢 9\y9NW7Ji}Lt\nTcgI/=~;H|^h{c BЅN 6+SJ:O(V )J ̛εbfxOp%:k.hEMSy'-aS*lYz%h[`oy >@| >@| >@| >@| >@| >@| >[IENDB`pioneers-14.1/client/help/C/images/player-summary.png0000644000175000017500000003520311760646037017553 00000000000000PNG  IHDRG$ pHYs+tIMEztEXtCommentCreated with The GIMPd%n IDATxyXSgO ٗ"XZQ:uTt03Z踴c[[l֥3U+KAge  I &nRsssso9yVI E.p_Wϟe=əY򨰲e&xu7,-,m"QS;;7 O]Ʀ VQmIqɓw0yGNquw+=OTi-;|O|\<<;nU.|߀TR2voEmBHGO?zBLg;ao߱ΟacF[ZX?-Eۤyq05ų;Rw w|+hOTC%`0A89sR6m瑯6l><`˿d'2{ř3F >a%Kb3Ot7XZV~|NKcM߱`jċ}#GjleXF~8?7?>.)-^ż⛷f}UTkPx|r{uO,޺/:líT*WO?g''AkgQϜ,ůGN<6|RMm.ImA!|_^,()[*){]Kb(_ss;}wZ./6YP{@"ajŃbI{{aPd@} !a];wsW?a~`lؘ)s'N9lhV74@ĩn>A!P['ԛ:go]ٿwBή~0ggJTe=WOC;w/ 䁧 l'g&72"QWGψP^[__xMxA.O^wkj4`q{yzlL09]7j33ơ>vFv/2$WJ{;]5=φ? 77 Q?ŭ;RҶ_ZnnnQ(J`U~|_lVggiC}x_  d*8E_9|x7h-8pWL۷Ȑа|vS?ݾ#us|68jVԈLJ?7P UŒ$a}s<|P .Vֶ,Wq2qa q@ ˽haП6&ͦUTTF2n_;/++nBxkjj7o'\\\t2x 3nQQyy9c=YmY9{Mmm7'O*jG&2L( %bq\P[;ꙑ'x ww"lvww9(J.K]лdbJeGTv2k[t?C777]/nܸ>>..RT?}VVVVVVպsq[oݻ7%%B[}(5]UذaCVVVxxs/l &Jkjkn()-537, mzĈgΜ>|իwwqss |{SL svv޾};eO{7y3fН)SDFFZ[[,X>,11f'W|Ĉ/_fԨQuk ? 縍ee "annbTP!nni..9m7V~TPxy[x@6tjNE׮ɥR'{ Z)/MV?۷o,<0&nkdXNNN3f@SSS͛V3B ;v otLH9cF^Ʊ@ԩ y" (\ SSy @"(\A""ܬ_f\D39\nͥK{*;(RABl'Safh{7-4yRi)ǻt'uqTZ3kRy{LL=G6Z.2X(e>!vFRYވRB2W&e1NuMO?maq1$D/<|ˆY尰vmcT"0ZNu|B xzaqef*;&O.^VIMm+(PX8M$2r+6nPݦIwM0YYMcbfn=uj\vvDpa9G#.D. Pqsٲ۶Moo?wNz2CʸmEEe}*;BbqErŐl+|_k{ݣV2mՌq:(ZCΝ;w!- Bő#{Lj;ٙZ0kmcڪSQcG֭l/w]9шg;&HLsg)e،{y-=<_d`C?Zwrtʕ. APqk*6led="Qjko''&NVyǗ++RQ\\vpԩפ1OFqtDP!2ڌ+X.ڟnnk˖>(WYxx8Ϛ*任wDFvPv~RҕpUGu&פ1Oy_}U^Yizqpe6TAC /_p (\ (\A"(\A" AP APOp; A--k0X̜ %%v p7u :%K@ᖖO?u{x曽WMabhoOP??S Vx<.#dg HLptM cU̝ vv`e/ t!Aarwwػw;ۙ?^,ZVPWlZe?s:7/Xg]ܧENO{T/+X?A+~UMk<'h40Jl;"T奊{ة?5\nյRl]v=WtI%3(g];Sѥl^VId LOU!.*.)>8{nَ`ivOO.n6ʸ_w9e'kPsGM/;YK5h5k%rGݳ^E۝l-hަoJM}ߎ.g+/VCϽC~7|qWQA=6~ߐ+<|l,~4$axG)\J&actQ 'w q!W|Xgn+ 3M9,VTF˩SCB8|>OxQ6CMΛ<4.NzZԶ D"s.bFI^mt\^4=&hSegGH$ j܈87w b˂Ta\lmϝ^'Y6)]+/d[Y]s*ϗQݍynnz9xӈ{OK kf٦[[ #ǧZ̚.:㲇C#ͽ; 렠k;w k/^h\f&t G:#ggjZIJNN}1:#zǎ[<^л̙se /:vL8Ip]Y,#{/ё2Xzxt~Ǐ 钕+]P.֤Ul0.+{D"RuNNMH/WVxb:Iwl&!~2Pw0e%%j1f\pi(2V-u|Plkp5ǩU~ww.쮯 OI+᪎LHIcȽ ]/ y:88F%[dъxǙO"O$(\ (\A"(\A" A" APEP}Q !Y`c660k̙z̙PRo  „ `BXQ 6mppނ2cy}۶mR1;g˗/ϩ>77Cߌ{uZ<-\v c*\D2mZ?{ڧ뱱/I$l͛g϶={vqqc{XX̙3\.yҥMGOٺ0??[_OHxdoߎ7oP( ͛9s۷A\ZZ񢣣 v5?NH.**:,HL>bdɒݻwZv޽tR,{nWWWkk˗wi4dWZ%',,+d.F=igcd2el𰤣cZv]eee-Ғ%Ks犋E"і-[SRR+**AMMf.\ ,>ZPPPXX(\F}Sڥ<&dffN43D"oĉw1q177W(Bfi}Th힞mُr/mhmm?|~F7mIC1>n@g\crrr`sګW.\ЈH$-"hذat_[߿Ѹ]$h+gt~899Q J3Bpȑ^NJ'N l߾}!!!}W v2ψ/R_FFFjjΝ;nnnnnn{xxPS%'cǎ-Y$##7֏q]^^h!|GRT*~...t9s455555+oqu~߉D"HK/%&&2~wygٷoV(7n܈2pٿoIIɃThƎ[DWବoSL svv޾}q;o,99yʔ)111 ,0?)))<<>r֯__SS3j(K} |Լ?f?)!;P+bee q\<Ǎ7qDporȈ~7#(\A" A" AP APE_pD.|aĈ,rXXmEEa:u1$$>$D r/3Tف7yri\%\Njj[Ai"9[q#$K/6Mkz./oXS4{vS㲳#$ׅ KDss_!,X@eˆo6=9˘GW6)@QCB}}׮wZ˴v76i+zd1殭'_/|jk1klU#ͽ; kl;wBd5/Z4.3‹:=`g?F9Ԃ^hs茌;nexA2gAF4.N^YIʎŋ$Y^u4@( `f\pi(2V-u|Plkp5ǩU~ww.쮯 OI+᪎LHIcȽ ]/ y:88F%ݷ <+ ?(\ (\A"(\A" A" APEP}Q gݗ>vv0s&ہ<ޗ>uuKہ>`fP@b"#o"]`\++xe  ˗ ޽dAa ,, 8vXO쁰0M35 D"r.DZllpu6RR**@ ؼt`W@a![­[PTPWg"]́hj!1y͛uø3CZD$ׯIBZޗ|-A!:D ,/ލE/vooҷVtatE&#..̃zyޘwa,0j54fBjr66|fߧiKcz̙CI@ܜ(8 -.cLB?0CtpLBll3qGV;Lip/٤Ѿ?@s3<2_սSLWW2 oV{x@U1 Z RRwޘC;<9nt4ܼ J%TVk&{{Ô)WTBq18 :QQieS]yط:;A(xš5PW [1 \VV`eƔ MMp"u{8=ˋ[G:; Nh~G!*IM%|>pHh(9zTIp0aIH9sFc$+V;;bgGVKltSv-qr"$-Mc4I#ܜ78\N-#\.qu%{eAqA' ,APEPE.E.p< Ww!  43C#p._!hjmp,ZK+K zAHgե; ׼ƼPp|OpY,11+T*R@֝g8u6f=RRV(\pihhk`w546JHs?AN# Dq39s&22:;;/]~@-@. Te92.]/۷o_]? 2iiiIIIͥ</::A[u玟]f֦VL^U|W9CO?6mjmmxvm uj,СCϟσ,,,Ǝ[\\M} 㪏>ϏԵk׌֟4yWWתUx<NjV(山666{|Nu/lkkw .O-aB5Bnnnll'|WR[[YXό|FRޓtttG'W_[bŰaϟϝ;2zxx\tq;X[uuu`` TUUj+ݽ{;wP8vXbbɓ'|9nn \TTWV:CcC=!cnnnnngQ6c{/3Tف7yri\%\Njj[Ai"9[q#$K/6Mkz./oXS4{vS㲳#$ׅ KAss_!,X@eˆo6=9˘GW6)@QCB}}׮wZ˴992ﯣaiĽG[XD)5Ak #ǧZ̚.Aqn'NX3Uv`;8s'"+/ٿxѢq-^)<11kmqcb"QcG֭l/w]9шg;&HLs򤽩gŲ92ϻ[zxtAs(=8/nBPT_oD!k~ `oy˙aMʧ&ntT-GcF$n-t |lȤN3fX E-ȤGܽ1A}$W?iCGFW۠5Cy8hb̥ q$(aػ킠!c.n:WS,,&Q~SM}x͛ت-{,c( FO֓P_.T`nkoE^jDDIL54뜞i[]?fP^B w aTŧY ~51H"ڡKwN5ߺp-O ڙ, r$*hJEAad`I EE־#A^plp`nĂg0~% `Zv=h[\@duG ӁCuyig.)T!nN%~x ) GY[á#ߦkHL 86;}yB,]7n`Da|O} >X9@4٬0;,8>d[GmK?#G^i0D;mSmF0\ Ҽ6@m}Up1vP,]5 t?qŰEܙ=!+G<[%*F/Po\eHxA?L#Tuj&@ 3 PQz"ͧS$ x&^(oSc*ft0%MuhtkO}{¬z ETbQ6%NJS$ CߎVQɶ`7T#\T*T95M†Ae{AV} 9;x}DNǼLA@qGa+;ؚٰ QXՀoYq1ԥqwGs n uia*/dO0$pvಽD CP_YDtڨo&jtA럖dft=}N QhԺ5=h"CVL_e0Ш@ +~5bRȷU74^z)D$QmQ4jxrJS4;^qv)aNTp^Q԰kBR9[:Ǐ߈Gn-MoqIe*Qo͞ƨ*J8pLJSZEK7poǺpwoRcU&zy;l!d౺yab ,suY _) u.o>vj.})B"/T45BY:vpW SPE#D~-57j1ZQT'Dwm:0L׺n㫊8HQ`һQs.^dN/DI-w : (x[q@G؂L:%5!΢*0:jhn.5%`ZEDcr "Qh-8ޘJ0`$%C- 2 C&?h"hvޢ6``ȊY3O7.kɏ`yL)|DŲ9wTf Y1DX 7fj@d ;e6c!G?u:apFw$8Hqb@6ST(h4gA bɀ+u[ /A4i%fz1w)'Uak+G hj@mٚvj2"%$4b C1Vd@ڹUe; x^^`D\:@j @ @j @ fGWGW͙6ęcqݺD:BPsMc{s4qKjh'j]Uz!n_WZ 5Kkd4h{\N]*3PԚL榯:s~.A}޳O3/wpte;.]J"SFqvڼ~u_ORVtK^>1v’w̘>or;}rs5߷[6F;ɣ3??OJ=c?&Oʋ>#5Z<~R9?f.`˦5KǍ7vL-t^Y%ϞHpy}h} $G7_;fw===԰V*ƾǙyO}=o6]M{a&ءIC# ekWuu_orٳw}Mh%ei)I{ZD;0OgʦO0jоKJRoy_Q=''RxH@phY8vespWw j?Zꕫ̘517ҲQ&{xpܻ#&I>t`2[M߿c`8GWE;ᄡ9 @nN Gl6 EQZNZ5JŃ{n⒰A|[vlۺ˯\:ǻEs-qӥK/MVTqpt;!]qx|\| yg7Zʅ7WG 4T>`l6 PQYm HHMLӞ]/^zzJ=*:dIsS;NKHj-,`@Z_{IV*\ye-?;FDZ~f Ů6F/+ Y%,JOv*ݙk_}"xY1%O˞gyÂb r^:??-^M%I5N\nO,-- W]Sk7<=?UWWЏFHR0@pN{EE1C~_@Rr憋sN8z,--?]4޴A,Jsc򴙯 m |Ӗmg͞Q'KFx5-|#W_DukoliS&_PDx鶸Ũn̩SSDeff[$=7E߿c`8k2lێ ᄡ6=LӇo_8TS[[[W~f\K초=$ƞֶ0ׂB'?ðm[5:v8nT*FE xo~Tەe?ɉ ð3zM5)Iu<ģ YH2fM߿c`"|w7<$4澴$#Ð 5 >)Y?B!;x6S5]s#L$@@k @ @j @f ,P( ڎC=cݚj)aNC/’FCږ&Rfα{)IU+V`v`sx3MTZ0W* yb7ԕ< HUe 1̖ce%?i IdH^Nƥs(T>f>zv a'Ԣd84˧Y[">biL1t zQ_HG EDյ a(aKMN P9f޾A "591r:;'se|Ol禕3n@r3.TP+qP0bBer|Bs 6;pQ E Eg`ˤ ̱ڪJgw"(Nay0ɕ_[wir1F0,}G RBQ6y=N c-7u E?ItlД|gΣn]yg,D4H o_;xrl+} IyND۞o>^Rgf &sHڰ5v55pT*2RWWs]-5oCbhGXů( O Rb#H`yf6|N$.>Gh C`|8?߃4OjQ\|La9ꟙ "Aa5Pi3IIԹ|#aK?)ٳ32(@F;[5j1vPLj5f"A$g'a 5m8NEUzzzdԴU+Z<2jZzz:~C4wj JEtF&zԔfK6sUnm(߬[zsT[zoW0g?O/.]ͫS[<Υ&\Jkj6 ֦_{5ŭkgT15mL_؝Vb0L&s:M?:8s4ӎ:Za5ɡ+K&'ʋykeKuuk᧐+޼ny%ՀQuo={UUU6C ߼y3;;ѣG 3KO&Z͖5H$b'j_  R;J*vF`O~ޯu̬Zya8Nd &RIk' ~(RUQx^* kY Jϙ|'gy䪐˴zH82rͲ0?9^~!bI nkSkY;7n$\xpڔɓ"\|seE',|1mMYiJKK7nڬ>=---9)AP0lǎ3 hصno ?fO?_x.]Ž{iZαlaH1w(ZU3hoo?ջ7K}hx'xNF}{ϱ#q}B3ł>J}fe6h$"*R!!mmc'! |޼gE# Jŵdhr{6Aמ#jDZ?-v0¡ ؔ3kSoiiR*Ƿ|*:qŠfO9{ȱG##'Ό56F*tD"ե Z2WIFh˄-{{|ٮ{ wstZN9t/gށr^]%,}$/'9:,m K҆Jjg YUW 3SopGU&ϡ0aǏhGMpEŞ"6,Vׯ]Yͣ 7=vx2#C^fС06|ph"%| K~pS'ZV(hhvs:#~hI rdR CMǶ!I!1# =>0$]z]TY,{^QpNR/I#nnebEh6Y;mʴԘ5"QHTbQ:|BJ3g|}A?2qx}ZԴ#`XٳcccBP(;w0Jh[Zk߯ _Ų6}{$/-<:+~BTh2C8sޓ5J ;0uZ)G ߛbAk7i\=z K 2Rr ;fE(vpeȤ+kA0 l45Ga؉c1cv׭jC&NXFM%ÏTQYr2hNِ&B`gϞ‚ bbbk" ={cO9G5ȤuHKnzupwn,Ggs[6]H\ [#W j A0rݛJ`ET/_#dvv0lO숺]R_M߮%o}{wk]V?A˗-YlIw5mPH۷o߾ݰJUoǮ^15zL&9c'v^iXNJ^l+4v#izܠ؄aH#1|! SY>H\~눉j4+/[P2-ڬ{I`P IDATr(dyիOÃ~5V^`V1b_5 \ď3i ER!t:U?߄kaXp!pb\̈́')1̘5WsQY CQ?L&҉Nz%8Ȱwu(҆ER_gM7pPEL~*Te@́c0 ("gA ;"J?fLNMueg:5)[t$R 1ojnȆ9{ЙY\[$/T_~Ǚw<-m̄'Uk(peVQV\Z7A!wrCpGb77հc[__ڧ0kjoxnH;' G!6>^+[O>)8yӡ.-L&*Ḵ^YB"ذ@kDYaaqM$$xĊ =30l@z͏5XZӝ|NETt;goaIF ڥUnէ11Y$ uLlLfzxxW]}Axt(\Nn3ᘻ]eL/{"8FCaP(fEHfA;QDh0Mah3,3{ppIO?'>^vaf$ȽLdu`P0mq|k!a)uu'E3>8(Pq:;Ԇ'ú $S$BUzzzdԴU+Z<2jZzz:~C3Mj 35MX⺞_H7NGpk w7nf3gLp%mo=I%ZW}p]<^(IIx8?fC~9ט+Z-^7 ?;WZ`0Lիu~=t 8fΘJdUƌgXg/-̻^eE uա^_W]),nbhzB(~zF]h\&L3p: ޳w_UUqAT޿͛7=zp=ýd2>l1};gn. `zwnϿ'uC7n 44;)'+.Zqyn>_"+ԧٻϧ @d ,Ӝ1RA!S8}lSSSۨ5m2..n˖-<mٲFUõnL:@o\X]Y51Os2dgx 6;icF/]ʜU(eLGi9S^1|\t!ﱝ\_CS#i4by4dz22J&R,eAsFK M<)rW>wZXV9q¢6lTQQ0=tҒ 5v.==#9))F]ְs^nc7e_ܻ!;;;^is Q#||՚ns.1)/jv(r4 tPYܬ0ׇt66wlPh>޷yio q{L&J`vU**Rm>߽J׉VTE4 ph xG=z9qf Lhz HR:H$41vZKj=/J:v"~ύGnڰ߲J^#՟>XYӥ:;(t{˱W@xuٓt6}J:z*Z֞6؂fU]%LW)t6v?B_po p8bOO@QajU G.xNZ'$E9 qGcǫ*x˛p{=rmEC]ZRL,Uu7 ͺa5QAnV`@}}X~w.k;!9(Dr>!n p{j;[ӝ>0t;goaIF ڥUnէ11Y$ ufH78{xxW] Lj; \݂-f1w˘0= >^ Ep@# T P(̊{I&D%./<76sUKIz^aCӷi*@jE%RWAVt7^L↺g~@-+DQეށ_Jn%^{t7O&9.DP$/'ҹS*M3?s;yHjQ`fqUCC]M,w-As$uO`2E<.2YyQ=8l98.*ݳ^l7HP&'FN@g|?ҕ uqwnZ~>$7;x {V E9^:nE S,sG&mw*cr3̙cUE̿<+ ILاFCQPoqwnL9GFq}Gbkho~AR O 20),80DiFaT,J'gN#׀4_Rͳsx.ʞP\TںdI0L9pD" _ >0Mah3,3{ppIO?'>^vYZkcu,O4 Ƿf2fMRWW?~R?ッ׼$ߵsp?swdX7djP$CT(JOOjU+GFMKOOaB$3u=&uQxk w7nf3gLp%mohkƶjx$wZl7nEylQ~NJ⅔ 95kϹ\*oنmo1ݹj*d2W^衃^1sƴ0cUCaaĨ葓&(,, z:+ŭS -U/VrSo^Ҩ ˄B߀{2;JyfvvG8gڟL-5lO?;{ٳ~?[` Ȧ- qvgR[*a)ׂJ^UGQ$3-1%T\aeCײ0 -xtċ'ӓPSUx!gYa;=;k[opp |'#!L΀AC_rrb\%rB}|zЙ|[Ûq37F-nݜ>eg655Zӆ!lx<ޖ-[<1j$\5$L5IeJԤIo\X]Yص{oF.f,i6m֪A(eLGi9S^1|\t!ﱝ\_CS#i4by4dz22J&R,eAsFK M<)rW>wZXV9q¢6lTQQ0=tҒ 5v.==#9))F]ְs^nc7e_ܻ!;;;<< a:6YL6U[ol,_>v!5C~wǶnPQgaQwo4+A#\WQ) N),}whk; )_{%>/aFT*%-@0FA+|kC{{{d2 ~ͻw}ݼ[OS.c;;~捯,-,KO9;67p[zY3o'ߙ4k0 )Jml^fH$4 ' _*b(׼d0"Qӿ cDj&߅:\l+*+ zuQdɭ{6pDAUk=@`Hz XeҀAeEOsd_ܱiCxߺvF8$a0x֮J·D|>ݫDKqmaEEHXD@Ϝ=|أGّgFxיT*DbkkKAcd֓L^nؐAϢO-6dΎ g4H5]*c:+kz;/Hw`{WW K=Igsx/PҬma-hVUQ|Igcs(K 0..*٬fA]pt~2njMHy_4p?|o9VZZKfDXK0A&B?I$RD?urݵ͝UE**֭Uɥ(IBޤ?Z;7^G8Q)2#8bذS^ACL CE $";FI\&FQfi!7S;*r/׈D"QU'GE3K U*UvvΜykf> [uJaٳg BP;w\aHѺFgk5xy w) Îm}}m} ,*ȑe;;^U'P_t3߻(Go+:Ғ (db9pW@hd{6l)׈ r8tI\_ AI$ҕAt{f`U5ٚ鄱w1<{ K ^4J.oWr쭯>pr %iC5C$DlLΗ5;C"*_U fRU*l1 |]̄Gh(cZm, @ @8fBaVИ؛LB50y'̀,,)hv Ts^JR -؜LSq*V+,)̕/ھ yb~(7ԕ< nY!Ue 8V^Vr+y0q!&"y9ΝP.n,ۉ9`o IDAT+@RC00O/j f l'-x)wptP\ 6/ʋf˱qQ2mf+]޾A "591r:;'se|Ns|7 N[XP]{j(q+`'bQw>2iṲؤ]atv(b9\N@LN>f4>0B4^>~#Ftc̹=Z54m;z[{F~0LxAIf1 J02 fW:9v1x4JEnsUUtҦ-E&KaJ́c$ _nf8Gh C`|8?߃4O2~9Z0{dy2IM685א0kb䔺N8stCkjYF݁ӓaA]Q*===2jڪˋVX5-==?!Úh{:뜌[[øq7֮9c`s,-i7Q3կFWo+^~!55o*Mhu4lhӯ=sE>Q]mo1ݹj*d2W^衃^1sƴ0TCKu._}Y K} ()xmP -U/VrSo^Ҩ ˄B߀{2;JyfvvG8gڟL-&5DOzˢw率(z*؉Sqaɲ|/_3w/dW"U%i):ߠ+Հah&^smԚ6 elrAqV#ɴd<|X]] {7޽yw[^yZJҽ;Ie[݁{#WAoSoq}M)/wr>.Nס)ϑ4 1qd< ea~~ks2SBFG %J)T}2֠ڹq#奅ӦL9+;-,+8an6nH{VZZqfiiiI ҆a;v|PTFŮ]w{k9/7{w/KguՐoeggC`h0$B8~?OԻ֯]~''MO:sxv Q65ލP_+R65q.`4+A#\WQ) N),}whk; )_{%>/aFT*%-@0FA+|kC{{{d2 ~ͻw}ݼ[OS.c;;~捯,-{S< ;X[Ϛ=kf;b>ہFqm!RöD&~KE e3O|ͩoVWWhj:zw_.5qww w#>}$ k|5W\;aB"f7b!IB=ͺ )~}X@gcsǦ]}ڙן;Pd햖Z* ߮||w/u⪷!a566>sceGFN=%^gv666RN$.MF֒ZO2ya<iT*`Y%%|@qq `Q*~Nށr^]%,}$/'9:__@҆Jjg YUW 3SopGU&ϡ/5\PTXfuj< 7=vx2#z:jOKK>|8xl]kq 0)OӧM޼e۠Aض u&MfիcGNoa hK h DlRvaFOepxa2E+ sd^UW&ԋr%rEnlLI+\#UD+V[L̼/-,,TT9szڠ8a|ZN)l7{XP( cccΝk8 R"Z`0$Q$RhjRL>f% 7$.+ S6)U#mqTKk VFJdaq]iVt *x:nyukbف!a!a\.wm-π7uc[ ?rhlH~X`_a`ѳ9vB;={^>^b6$vsuQoh?㮝Zgky^ -uB&1D^%(Re`'Wgwo*aQhk|NC|.}4I}14ھmt/[|?PH۷o߾ݰJ%z92l挩عGt4j ЙUr5Mreܘn7f6 ÐF:b|~=g GCXk&J= be r(dyիOc¥+EQj0+̀hqs"N CtWM75 )O%[LbVnsVV(jdA:Qu "iqQ.ƪk2Y 0E;SD C H9p aĖcR3ҞIxHt{Bg:tP~dqmM oP}}lDbKk3\*3g1,aqe&a0^̇6D`bر-xOa=]51>E9 qGcǫ*x˛p{=rmEC]ZRL,Uu7 ͺa͵"QAnV`@}}X~w.k;!9(Dr>!n p{j;[ӝ>0t;goaIF ڥUnէ11Y$ ufH78{xxW] Lj; \݂-f1w˘0= >^ Ep@# T `n0[\hLpMb&tJEfs4JƿPT*9VQVr/%yي lNCos`8STJUJ_mY76a:E0MDTI\87{A- JY;֥{o0 #p af>tCc/0'&45?~i pwr575 EӥK{t/ k-`0}@QFuJJ_+1qQ3,^^/OEQ'3Jڏnc-k5\>}춶3fa oA .b/ Gɨ3԰qG$͜5wUuշ֮Y5sܢ"' CWY3*(mEw7o;~.Bh/7oC}FK 'iĕegN9Y]YfЫ/Zr%e/28öfyεk|//uuḱh]o|ՋwIGg$ho6Hk5% E kjj,;O>ٳ7n/LשNN.;5t1% ޾_~c,xCG9r.dh QԛWiu زmؤůP( zmԊ"b\Xl[$6Np$kJ 9 KuX EV?gN}WZttgN|J3Y`;ww2.>;"u ~4K8&m|ii)hX/ / d5ay;7E_ZpؾdX҈s?zN׻0mm۶eV#c!Ϝ=wؑ۷J5}=;ʦM}zŪl .vuFڽgoqɵSElW- \)>%mRʸ|ECY{KōrUWe<3oTW;&NrB2-+4i֢qOR).,SXCwN^^S'j̝쌙OG%w3O[2:ۦ[^+*ݼea-v|qM6a#-[ӦN租GƬXBS6}#F)))C"d8Ð?xϋGwsas ٶoyLJ^6k B::Ƭ&O' Ӕ۷ngl4;B[6m5>#"ya^/T(\nawww\nJrO1qOakM 6455wFw~~`L&IL''e:Yh±2vbKspx~B c(j~?ER'߬~;G6M:Ʒ{`ALt{^^e8,u(p(??ú>)%Jc?Ѝ3gN?yD/L~ lr CrwwCM2'savNNNjZz󦭦6,L+tPx1?qx y_R8>?B$]~H =8b4 M$)M|:K$v) C!w}>Mƿ97Nx*mWVC\\\aaaFFBʕ+qqq&q (>o(bTV7ZGzgEMΜN'.\Škq/|*WV#,X *?1' *1 C\mn5V^?.ooF*+ *$ +TC6 ٷ/g͜on67K׬]쬙f[hVܹsҲ.׭0,!~=}=`v l/feeI$D`ÐbfYa5tyX;X{?5jdJr)֮7cs V.?(LV]-EBSs#iB!AHgR3~EKj ++L`Jo@iQJ!wpQ6̃z8vIv oZ6!)!4c Y ٌ\}33"#"ZTO\8{Cdɒ۷o’%K-ZdZ(мN:es韾>t'z?Zyc7,!>/a6MzKu-_t>"Dqբg5E:Jw Ed >dh3Ø$k5*(p`h$LJ*?8Ћ34yԒMW6{=1;aV._ry?tlߡ`0;wܹsyI_fμT*w|OaHښ ZzFX| ُÐv b=y/߰b(k>i10C?4סUf^Ew%o $IP@4Xl]i IG)d7VW}R鿔5jGj IW& Uo I VoOM=ʲ:1B?Pk>slhWZIoz |}Cp\om 9 :E}M<:!K,IH(PHq+<@V|[QD̊UkZ 6~9dHt@p,J͛'|yTA[ qsg%oAǰ٥,zgsTL␨|Ǫ ؔ&I("ƅvaE1MMY4cv646|ݺ;v싖Zq1-Yt8"<<{JQ^)iC Bh%OU]ٛtJ}ykU?),j>ޮ+*s~*|A"hUlJ)w:U&&SQB-Сl=v;m6kYf;.^a^2an |{X1k Ozo;}ƦiKP`ݻ=|CtY۶lEl IL&MƼsC E in롡!.].ܴe* %IDATYϊF6 `{>ܷm}wғOX^Se566v]l dtr9J?7o46D 𩩩 !k||+ٲ \B)­Px1'%EeuIן0S'''Zjmk3Y&<|H+`S8<̓/@)mnTs(lʌiSoxW*JuYgNJ{x*+ 4j bY5+VeU b;j~/_t+KިyKE8a>qq1{}VVYg6_>yiQD)3=fV?ԱAAM Z{ ׃mP~R MWWqcG.\_}lLNv+n36F*-.EM w+GOEu z&N3:񒥫a{Y,v\7ugg S)BOr*2t(ѐ0%6q$cgH\Ӫs(`Y wKBrS}%mHd[{ce&B$q̀4@y*:<ó-5@#lLc:iԚFXӜnxãUeb}ʅ\7wސ =̓4Mp9@QUh 0wc 4HIÐU40NBz$) NV`c 4H ̡/蘃=V$5UJ?SpX0vEl(0a{5$I6ݭv :!iԉo& H G|pN| &Q):V2䆅rrrA)έkCb"cB:R[S;aJ]96tVsUA^䥌HhzNN^ :~*m k5z(~AM.lW:C}mUyɥљ(J7Utl6K(%ua.ήNKT)Xl6F!9 Ġ(JPI:;23&hI0h5gg%wrqqtCrRFUwQ^:::h]rO/; ۰N%3|;|lɥ3F;H^4jGNuT*UGG7 */n;ɸѤ/ 1K kCTňz7*_(W%o7O݉56@ ̈MQr;n]>$ѧyۢ&vcm_~ȘQ188C&e=!<`-W&Z%o//Kn %%R\RfBFKC()-meFn @'iu& Isfp~y'g3&ǎ'%0j,fRYYeRV`@>x NSKr'Oȗ_},˯f ﶶԫM%+'=3; 6+~>yʲBUQZc1b#A/ {{[nY'.^maUO_}|OE2}_4qIkz___bF%fX~B6c1~ؘ,h)KU*OO޾Ywr׃kPj 609n:Zs{b z_|o_X@ D/<^l4>nx&7iu&m!w޶R߸V vv7X|L0_ޡYxX qlnzWix"%Xtb@ =t&-ulO`56@ cñZ|%voJ@ zȱm##ƗGZx @ =+emXc#A86mdD~&]Q@ tcs6%WUJp@UWmN ;"L tl^Y9kwnz^@ .l~'B8f@ 1E @ c#@86@ ±@ @ Av$'^0nCcFXvy?1AXFc歍2 *<|-;vF줩%z8>6eO1L:ߘ-EH@(--нݒNz=^Fdvqӱ2>'(IS9pϿQ&uytjN֖cs n5Z--[IPXob-K~.pxCG[lödW< om|թ `{SF@ʙT/|er&c&t:67aSsZ\]֑#mOW^#vc_b2EE>Cr./^1I@o'Z\Z"; o+m3!#59gbjcͷ}MDR׏yCDKuI<~vęc(LLVМoє,Fhv~ oywO?n>7gk:E_b@[bG*~Y| Wfo煏w j~$]hh%%&iBBM>X\?o09n#FLNg~a]@px+ OYyyeܗ괠1SCPZZ֦j-3\[KaMui]-N3%&uľ;jډ%vο6xэ&NM{mࠋ ۷#ޔs(֯o>Ç2iBlK ,vlV1rF;4^a|c+s|NuuM*Tm~ׇlvv>>&ib]mmQT&yc'z8֯k6~}'SZCVi$Iн,N8x1tr0Vv~~&unCsvb}V{k#\I{7{)΄P(Lf*:~P:M_Ach*x ~r-TUU[L7\\gYp\4O?eeauƸAl|=T*zlI{}3gi$ Na%Uj8(eŪ;|/K侔;︕&3+Nǩ),Y@9wڵ5fqy\Zʓk8oGМXbG}ۭg_ƛ;V g_fk.WK7}7,7S%ıӡ;5U>R]]IH&]=r0bDF֘v8cƌ"v4G˓55ƽ_̬k3f͚_'Ը)( 6jv{&Pw/_ 7i .{V7r0ws?eezN9âJH@ŷ|t^ M\.@A33{1n׳dL0psuCQwnnz#־ڿ{{V>ğZY\wbf͜NÜ:q9gHO#Ã!C2iƸӦbog` j <=q}[I/Cl 1:V<ֿ<n.B܏7Fii)λ~?|k{iGɒP[kghh|CzT5)wV\]]puuᎿʃ˯nRKihXq"1VhL]SԜvISKq|pWccN߶HYQ.Ey]]](8AYQ.~13yD,=]w~-Ұd+J Ȑwwp߽wz*D"g^`Gx1 s7nnF?q& Gϯ[oR#mO={o~>{a2EE>Cr./^1F[iNO<'_EvV>*Vs33y҄ػbQ(ѝ'ldx. ~}pqq٧~2)ۻP^^Op__+,.o~sÆ^oǜ EEŔț" W @ hʅ鐑c&PWW믶̙V֟rc?@׳ȃ@Aa!cb5pH B^^6 /))rJJJ 8bM1?o09n#Fۅ c#M0v6h]ϒ$aJ sJ;mCrkcK8t~1NC{SkL8YW_&+lmmQTCNi||2a|>ΆXj0`pl#Uj8(eŪMe2+W ~=>QSSKMM-)omV\fL5'JU1)g<9JKK)--eϲູxww7M=>șԳ4tH^)@ txy̛1G5Kc#ޗ o0 _=/&(,=Ĝ9z߭Ͽ5l$aX:nAӽ_̬k盜È11f"JZs|>dW9=͚5yay~z[0VlW,U]І@ ,v|i.{׻X0ϟe$2jҵ \=u&Zy$twƠw+]Džs)+RΔ]~ dff]qo:7vc#\ zFQpG0FUWM~N:uwTM.J@H?|-c ru=ms]m]oPBW,ztUNg±Br2P[] 'W7Bl r20xnZT[@H$yYgzmy@86fݣIIB.5X>r9 k3e)kH-$HY H.ԝA}N\5b Z%fAh3KfqZ/ Z]P#f00 dbpt,~}[IHA&1ގE#6:(vvy GVM6/N;ܚJ;Ea^}|9]벻.{@^*X #UŇ _%tWo@ #so~YVq&SG=Ħ,*J>6'␟@h LFCa~2=qf O1 rL(°5 =)Klc)VS,B` @ bK>>7E۱Fb´y&kg d r@`hfԉF*ZKX ?13vlT EyeRU^2AWōڪfeHDƙf`bQ6BYq>ivh+㝟i]?|!#HAVF%3U.n ki@j rPH6rcc8q9!rP4Ey$Aax \{z_#IDA IDAT444_PWkA;6Ƨ 9{`kck2b0vl\=|j7'g7ROF䊺TZD IXkPZRqqՓN~{zue2).ՃFN NF]bSTU;:\9yti4 I8u>n+q:6M4h5d 5(Q1 Gg*K Z3'NnT @]MNnz7o<} 2|r3R8{~(Z}I3prn1Ë!#&`p8 ?# ]͸Φ~k%k.:PQZDa^Ey{>li5T^6'QReyVPPs^~v6VWSPXHUU>>>W̏:ĬYD+dtJ[;{sP<t d\(I0/۪'5Z/g٥5ɰѓBp߁yx`7{~/ IoeoH?}!cAٸմ@88:1(z ZMadt-UV/Oj-x5I>L.1-#+ eEc ~TWW71]Q*ogggy嗑zƩr|}}0uQ*TTTYf ~~~899xbjjjZgDDsrr2F{www.]Z6qNڊo d2gsed2^u[m㎔ .w0ACmU1MK\FH^5@u~Ft6vČFeLcmEFIYީH=Zu=&̺XL0;Gr zE~} A|~݆|gZ׎մD f舉79jPjPW]ށvN9H`<|).\vcI3k*+qy!J+*Ws&sQ֠Rk0# ˪~#֮]KUUYYqw}w4^^^p lڴիW7m7ߌ'֭ȑ#=zwwwyV^;Ӭ3fg8w?0 ,Օxfl<駟&??g"I~;k׮W^(տIjvȒ8z(-ۑ2֯_oWcR0JE-3TD+Mkn oЪ[}Cs[q]UW$ U}5[^9=\4} acHNL U΁WE7kМw ^AAddfR,${{{mB_|={kw},ݲe˘1cVN{G||<7o_~!(sÆ 6U>O?EPe,YB||pcp.>loeGoɵfܹ[\Wc#5sVl:<Vld68)2 NrZZHˋ#`]R*dgg; SR-|r{9-Zěoi2ЧOO``{Η_~#s^`۶mgggc233kn222!ķW[VGhş rLA ,S'kk;bp%]Zs,/z4tj9~J% `AؠjdgQX$I`cccU=/fժURZZʕ+[M;}tٸq#...>.]Jzz::$/^jY3gdʕi[nzȸ`ѢE,_bYlICgՑ2ګ7plg7jL <,e  zU\:xޕ$WgS6w)er*E6N͇>>>TVUÉ:}ܜ\66Kph;xzzZoϺupqq!$$(Ǝ6˗l2{1'x &0uT曙?~̘1"c'xb 1c1K/R$""x-oQVGhփlW,jw].Ue:Jhܼ ./#-%qlC$0$GggiqeE 63enk};1b\e#;H֒lfw|wr:%" RIEUgS @PRZBRI&#=dٳ=@_~]>Vkl=(Y駨O)Luj":{qrsCN\f@"\1rumsqd.$Icrs U ?oΊ+xgh4Z뮻NZewltv#0H'!IGUW.ptv%$| nEm+dxyy15qt',+C.I|[턅ѿj5s^@p(kqo5T,\@ *@ @ ^4Uኔ3epliPfӨII3( BW@ MPy? ™ !}o6}uU9gΉ8tm"WW6י6` plz2S9WOn9y$llxucV! ^K߀0דu73Z\-{w\K#skQZɠ 'C{3tSD Oe냍=Yi6jbkǠ!Y!vdI4LٻZwX ,['Q-Y@ MRW]GÓ: ! \.Gk }rN6:Sfd@׷.kaÛ5?qV6 ѳ±9 G2yd0Cՙ5s`  LVU#&bz2|{?>)S|rݻމ'Np0zHZWnZ0;;Gd29yys>_bE"Fd%@{iMruŮ #6Օ8 ư1Spji;޽oݻwwss1__}|t]d̬y2n(Ff󨷹q7Ls||g .n8;5|âP^YNIY)eexzxSDvZ\$%%1k,(yǦA!'#"Z5r[\<e0m^~Av¼,1r~_Sek\cwD3y*Q\w/swF||mԡA/77/ H]uuTT=hU2Dj;;;AaTVx=y3_´5s_iWSSEUE)1|lg_[#4j gHI':[LN4jM;lNxIZMi Z5AߣNaÈB wqGxL4+i8H^a6%#-~{SWUρ#|.l*ogggyMd2RQa:Z^^R^Ϛ5kɉŋSSS=#""HNN6~㏍0:stRjsV|k\O&?+K&\.d2}]qpp`Ȑ!۷>cooOLL III&e(J뮻L^ c + gI8(.CFƢpj޷cy9+vlk4ZU=;A{ .\&m]#1a75UV\"aAAX s;a4e0).xOmu}~G˥Q㚖Dn/?}I?onL[VGBi iř^k}?~?}IBTUSx.gO[8'jk*.@'AJ/[IIJכ;-ChkI{()`е==!:p|ŭ扉dgvˮ{m_ͱc<+NN(}} d~'4;]jܵkRUUEVVIII۷Y///n6mdi&nf<==Y~=Gѣի[3سgΝ6v̜9~|Ξ=Kjj*999]XVM/I%e%$$pNݱcTTTp73{l~GvIee%7x#K={HJJ"33"yc%m2ZǢ"ōECUw  5 M}h;e66"G3b v&"7,26pө(JŨ 3pu" 2&=zUwR_Wc]=!UWQp.\\\= `Dth-;i vu8:r>2N9h$qxڟ3IwAi3Se*g̤Y8xu63·lQF^A'#8ZɳakkK]dgocoe8x"9yxOzQDT8sO?EPe,YB||I7xX7x8[-2mnT8toX2UEH]]}C9W9f:j TOj]=(z66ml:ߎəƠРE0gwԪZ FU@mu9DF 4mu諑hupNr .j(a8::aK^XlmB fio_%ʀ`+IL4{kz DGm.35{ vv@ll0#F0x]^i暩\5l(I'NpQDF #&NYXX8p QQQ|,Z[2~xBBBc&yZQ? ~ʇ~Yd >pcpŷK ''tsaa%m n] 9ﳷMF\T*Tں{{H2I2`kgoUJ`뱱mTd#OlPض9 Qػu}-Cr.+3I#rp >~mu詾V!I? G0I2`cc$Ihj\=|QUc0qP(Ш9>(.7ڥ9=\@QRKa^5U(B ;5bDrlnԤk-GVnW_eܹmN7̆ tjJa $85b28j粳puwC|R$;;ةgeev߿@tqq!<Adըjd|]}Kk@ݓa'3yB<H?sZ<ڏ ()̦4vGMe q~J)G]8pt1Y[o;/ kh@Qs6(L!-%W&Z 돮AKmUjU z}iuml(Ԣ8&DUUㆁpر.`8>Nupqq!$$(Ǝ6˗l2{1'x &0uT曙?g̘AQQyXx1̘1Ø楗^BTADDǷ, oݝX:'L!C ۛ^xm #6 'GO"\IG~GQckkѣ'72*c^HpX$%EW9}Qs@0:¶R\X !(,;{uK~x!@sI<Gg"prCUW2cم!cA֘ Z o-,P2$wH_EAin02v:n4hV#YqΏD)s1Q-8]Ν;kjڃ;G1LuZFEQAܔqvrGٜOO %߭P.Y%K4:Yf k֬44\܌gQ&G6olsm4rj)MLL G5=43m NY }#38z,v r$]ָ֠|;r[ z=aC.zMZO%",2JY2Ѫ65e֍rd2 G98"`/L`h$ 6t]QvTu4F.'bp4CGLVJUH-7[$XBr$i0^r.;S悤CgvYRl|5ZA2mD:x(AH2(eϾI=eq+VgAѰj*:+ @ sFQըL~T-i)v_Op2- Z5 Zu㺪IjLsziRQƐ@Vco@נ94wڷ'N~N<% ?={|˗|JK|||geƭ;aaZܹsM7A786끮ȷ{#fe0Yogoa8rSQ]=LȔI;e˖l2'dݴR:wktlfΊ=CǢӪIT@ ޏ\& $re ɺ7ӞzZ\){Oٜe;ZOg plzg7j*[=ÂNPָToΠ;>bMɦBJ lT流\\+6+^ ^)J$ޓMd@@u^3sw|gΌqQdW[Ymjʊs[Ƭ6+Bt"AM:A"Gv#dbΟ#,|Nd`cg-VީՖwtkʼedZsj@ M'q%w)ITU ;@PbHQ8iLoFS%.Y2ecj;5ۥ 6#vט؁IC@j*/zP*9Ы/N黋]a{gl@ xP?oWͮ]@ F/a@ BA[PQQIɓ}zRYk$黯T vj5rtu넛'GLЎDoa؆#(ȋ?<: N٣72pPX\DQq1ggj5g kkToFBBz}BشŤM $,K<\YZBT&<;|`/wΜG`> {+].Gq^fcW[~!3=d3Jw]Ѽ6+HNc7۱RءeuvvfڴQ,]z1ݫ2TW肵5(Ó0}=UUWVoё-zRT H?DhxxciFeaٮoz$|$$ YDIA^-m?7MMCѸRD$u5&C}Ù0NFܔ/￿ݯ?p@ ;w|Z.őAaQ.98~o=RU^͡,Zd555w}+ WBwwwJKKIii)UVၭ-s̡khyf 5z'''XhIK{ _ ׯR٬Xjm76݊2:~c?g Uf }IȨ*$ɀ,K]P{]mi{a~޾J,a09t:]>~!&o9fFFC|x6>!q:|'N IMo?r=y݋?P$K R4kYE}ʒ譳Ֆ˲)OW׿,];\>$:UmV)Zu?VGGG 0}Ɔ \4|z  P  NEȤ[cV۶mc߾}ow]nɒ%L4˗caa^c޽lڴ???^~eٸqcf֭<#lٲkkk>s.\޽{{سg[7W_}լ`N^o񆱞*ԛ@A g76f fW[ڮP*@jF E͘EiiS䛯?Kd@ ޻w7l9rdú0 jő#G5kVe„qrx~޹Q$ ??^zիߦ[9ytzhM Y)kP*.v?ΩC\*s{slWv祡(ɠG2艍e٬\s\3gkL# fVklƌ/Lyyyʚ^!pۗH5889bmm𞞞ddd7vҥ qxϏ$'eSvC`N=TؘcW{y=.}i2|̟;Qӏ;Wrډ 66]&I,CeY^x  ""ÇҥKYd +VhO3j(Ə-c3i$9scҤI4//-! 3n G2w_(Cc]yHi؈Qa#mn{{+ye;B-?5gδVmuu ebcc͸!4 I_֖O>j1cq"y% .`00qRdժUSWWGBBgn111'zxxP__Ott6ٰi&***`ӦMؘR;:F{{xEzc:WOy ͫab`^Ox a,\7ZmԨA#q!h+oT:[5C?y6b0dz7ݿعsŃ~x̊kM[Jc?""2'C|e+1qv`1$&^^Vǣ-'/{|)Fya#F`bV=E3YwoKo&+tɣ#Z3O=ذ }a-̌tjuDG z}w'm gϜacW_}8CzYYYcEUd8rYqWgro';+ٳbYN~r.3cT{|\q2YYY<‹%̮Kqy38 6QUQ.w2 =CDO?}cF3v6oɒ%@ Mh4 nicaa..Fa^^~1l.`FMA''+sc4ХϢ NnYѿf)6ϥsrs4q)~˧aݺWyi:Yn-:dܕQs3vh\\ᗆRPP(o/oFM%e6NJdƌi̟7rN\i)(+3'Zȭ'V[,O(&Z%D@ |3'ߟzS*+TVjw{Xs|j%izNaᢿJMNm_4R5[}{?콢"g8?R%tcJuӷެoʲFc,_ִӹkVǵͥX[qÛly_v\Ǧ5JVZsfg_bn+lXyڮ:[*\]=*"?Y57;pK@ ¦P6Lٛ`v# {GF-'yѷQ$Ic#`P^ue$`'ͮLnj7~*5q$@RD%T ʒ_4t@C4 W(z]mi`v|+4.XT_ϲV\,-- 5k; @ Mmy7neY)vΦ;A I2tzGh.z}=*3:fW[AqQ.VVRAYqnڬG555CRP\ťe$P*aD'@ &(4I'S#%Yg h2ōs8iܺE}Vqqqv1C8'x/RD4+,˔r$eݹk/lEQN^O;UC!'"l Ynwy'7ܸ.y|A;\\W MIJH(S@w2R^pҘ~c9;*݀DYq!) D yx0ktTgYGgͣcW7 i{oJj{Oq6mڄ==ׯٙd9͝;e˖i&dYfҥ-5|٩kkkxgśnkL M Eq鐕+KKH9"}$a0l]R]Mv9nsMqpnجd 730ܬ%oT{fB(+/G[ں:t:*dƍh4v+K/ /kkkwPZW^&C=Vb<Ӭ[ǓC>}XzuJϲb e5kz)V5U1 /ŋ z;v4kWShM6l2fΜ/O=mM z.Gܻ*/-&|CFpmsQ@XબC0h-=ʮܕ[nz;㌔3doͶἼ,Iiy9gϝ]¢BNqdAT AWǤ2zb9IGVY8'o bUh<]=PŃ6ȧݻNHNz$ "04sccee '{o@1qtvAW3.V(+cE8:B)ռ$fjHMdՑ}?5 1G[}?V.5锗1p8GYiy9f ˆ!S_W,zZ?8:] e%ȲY /:$3'),ӗ>GHDQ~6iKCwZ[~M,|T$7/?F Ae r8:J6b2a}"zll05UZ'ޑ~1ñwhdZ2HM~ +&& =b)%`[ RS[gcaaAܡd&8,Tii5(JNb=h9ouzRww* |3u54prD[V$IjjkZ[n2^ԫ|7kM(.ā_st'/?-t,a/_],9p$ϒp%aph1꛰ JmYQ^ۥi&*,SWW;5UH5Z,,^ kmcĸ֌z0,VHPX$6NTuRB2Ci+Ca5Ϟg{'dY0/'W %vNdOBT凶K+5UM kk2M0/0GgW4nLQAYg8ACV[3fX5BQXYRTCŸrYaVVTk TWaef֕ 虪Ң|)՝^ RNGueڕme)Nw*K5)M7(@ 0{Ʈ GqF__lp%> u:R7v:w+W}=uj4D'ߍÇ䓨,,vvO`wSAEi>Y9;* ؃TQUYBmud\Fj*0Nۇ:]-OxQ4}z8&g7z77oPouhˋ`ot~?C:]-ov˒ܤ9xlܽH?_(:]ܑ$>Qj/}ڏ3gdYӗ7Qwq2•\~}R\_PVTU]dwhjl ֑ \=}H=D[;{"Eù-]y‚zG=!2A}ٲ#'b稡myY+$wwo`t5՜8/ߠjtL<}pq0^8~4! KK5#'LށQXmP*UHůd< Cmmwqކ qWwkוe57LTCԠXX5,QSS Mo*J>uAaE\׹a$BѸSŅ ;d=zN<-A6 Dg$o2UTQ̛m%ĝic*J V7Ix}]-uk&TW@yΕDD#10gjT3/S uƿ@ QFi=Pw'7+6K++£pII_h"W@ Ffoeruk:dW65bҊ#\@ M7@P"$K6m͛uW5Nv {F5e6+Btvh˚],+ٌNP$IH!޸^O-m6w5eŹJ_[ScV!l:p& LkJDEI1>dz[{' s2YbkjK;50ddZsj@ M'q%w)ITU ;@PbHQ8iLoFS%.Y2ecj;5ۥ 6#vט؁IC@j*J;zIc2}w=l6מU jx괻V q B%$M@ B@ t5PT7@uiW[.!lI4vjkij*LJu\2' ݬsr/dr~ suR)U{0dhBº|k*Bt򃺤0̴de  d&= *]oI(5g2}.n>^Q,Ptӵl sIqWXlsrtJ[ӄTJn y3B{#BtaKI9@HX$Yy ,,M.x~z!K֥O!d1zhi˝3ثOÞQ].sN{q_[L{!3=d3Jw]Lj 91lJ_@xr !l*ӿQ.ި,H?D-֖ꅤ#wE4'ǙLWRo`dv%m76m6Q:JYכ7)w8&1k)TUa98k2cKeJ%}}ORi*2* 1TH0?o_N-B@% MlB뱰GaAxj !l2,u&JU{I=r* @F&v,I2N:ekOr߃ чDG*:m_+@ ¦!G[NB`W(e3EBG) dYF.{lO&0m,JK˘2}&|QWVJBA .M\_ܙ=&,]Oo͗Q(E[:.eJTt6$ɠ'663grr3αrrf̜Mll1l0e@ ݱsPUQeʣol14tkV1l>x66<ؾӋ66g2. 7{Gbiuvt]icW{x=dY駟GPxb֮]۬ }5ϝY3۽@ЦaQmOvyC~ i* $! ˦]dQίcs=]yHi؈Qa#8 o^3Cٶ 1/`ƎL3xk;_Po_]]1`0K/'<0.Z5y ++5rMhxK5 7{Gcdz7ݿQzy?f07+`kjh͛7K/ハ/q²&F  ݷs5s/曯v.Sn+sa qPXX^3ƭsq'm׏$'bmcs/mtG2;J qpvi<+ʊI>u?~x3y }+jݲ/?o] r ,n^|Y\];夞M b6`mkǠqG2詯Q]YI9Y 5;{'jkȾ0]ME$%XXX1еw¦ 6!裏_7 {qۿv|{曯=lϧeM7^kT{;;?{y`C&*JZmWkҴi;88PYYiR\:zBF`ccd^xF.((4cȱ-v^^^EMo_Fp\ɠ&P\lj`茗O ^~([XMet5kZ"BY$,|n Kqk=us&4..K0^o]PPHPPwPP j;'7ACiCWo/[nԩDf̘ys,|]ޖۣjqttUv[%,3'=VXXXPSScJJ,ʺmO~-^]b I;{a; ήh<9Rp.)w<}Jf仱k2مA ÿ5)}}]qinq+<ȭ'V[,Ogyl"""8vƍDDDWr6UE A[rï_ذ=jjjcUmRxbkӌqO> z=IϰpߺLfg~.A#P\;ӠNW7sx|%MM !n 2('7<|GeY! {"*K@ X؛k6|9c: (,,bU5sF,X/y4z=IBcg?*GVMrYܠ]1szjrrra&[749YQ8b@ A~*^%O7ˋ'.ذaC9fUUULrV>e[FϜC^~!!,_TjS8k1L}]<O°gp_r2S;]m56vEamHMU>$Z[=GEJKq-9VX/M^mֆccS+iSYF\}O;GXh(_̘{Zvw̕㫨ŋj,^ !lwLr2ٺm;{غ٘V̱=Bش8_H~ck '{釲R%tc.oG0j6|O,:˘B!Rd_J0v(U q5U& aLYYV0kk6nx4;OReKYliީR(++f +YjwϻjϽ-i IDAT}kߺB4}@ t[{SQZ跮Ojmu\k3<7!BTD813kٙ[7nL#-66P*]&ɼ {GF-'yѷQ$Ic#E)7`zQ(X;d0s.--WDx? 8Ya@ MWGP"eI[Nc9¦atǯ@2:7_JEQ2P!l0vh˚],+ΌO $uzGh.zIo^R!IncYQzP\K筌P*(+m]VqOM@ MW&(4I'S#%Yg h29wjw2NFN94n=-Uq1mOd߉5޾A(; T(Q,J+2ee%9ɀa7@ ¦+q%w)ITU ;UPbHQ8iL~}utDIל !S]QAa^&Aa&H keŅ$'5&ϰaCI;yyg׏lz#gϱƸ\;>>{~G3̽~JKJ9r`/> O%AW6 WFᗼyYЃ bfW_ߛx'E mbિ?&@zF15^tC>a+&N@ZZhQ@ t"fͱp ;'||/ '˨78p dg=j$ '7G7:7BveW3npwwkPJ5y @ xqqϷ/zf>+}U0ߋB̩XGanFߙ@IfeDMnnL_"Mt ~|7|73igZ+j7=ݍk @ h{rrr߲x}[`OdD8G6J.xxoơ-ښMmoD jk5ÆGk @ h{ozMsCTU7Į?΄;f7' b(@ =!l@ a#@ @ 6@ B@ `!Uyju-m6$j;#6]w!B>!fj;͵w{!l:A]RGfZ2ڊ:8w/+KLM&![L_- IG._NwғLnv,z9{;bYmV D*ʰwr:8k2cBeJ%}}ORdPnv6`h2\фٕSSS aӕdS %,_NIrvҖjsIBjP[^JbAޱQb@ YDɮ+IVq~uacB@ ~-&Lwޔ~+aeGB*eS(~dg%Eq#]v[Ӻxю9jD%b$!I)Inj۟jm9WOBDzReL']<6W  KK;kf5a*.~\Ul$ "04F we]v]]F*t63++t5U_6= @߃&x !lLߺR8tcx%FQNyi#s2 ~YcFYӑNޅ4zGxޮ '+3IL[]!,eU_7@ hSasH't\s mE9I'HԂ,Bauq~d$_iS$lr(/)ӗ~bkH ]MvC'ӒAlqs3w`*1ޛGu/hh  (]d;d%/L޼-OqƉyqO^d&$9vGXEM$H }{MXn>:}XU֭UaFyxWCEu#S\| ҳ-$rf[>3k~6>RRШ5F ZN=KJZV)jɉ`2[긂'f&#+y04 Jin}D8{`OyZOєͫAEuq"5-T ~NO04oGm[#`1ϱZNI4>uˣϼFYnSZQ鍽n>bC%Iܼ`!3'f6W+"kZFܒ](B$l?]}V˱& DjZT*&,}SSRq;)(*[N4{ry~oR6#٦V vvˀ+?~Lsd!C~/ZGy\522ŝK5Z*ji޶ױ @7ZEQ14EQ5(B #%- ہ, >4Z=eb0q9"fbtsu-8ffDc>wc@MG96yt% 7 xo?Gwn^&'7~V\yRmY5-[f035p_''>DzG~ ɼn~JZ:u'LLq{>e' lӬ'x6 x=y=nt:=*iu4;Z;L21:(Y&VO(\>0=>=A2 .lP(@FV1ٹEܸ>`P0H}oF01:ԍW@O'@O'EկCA~T ѧ_–O5ZU/)ųLO ☟d|X >Ʊ89ϳ4b0Z=]o_+  }tߺJNAɲYhFJZ&<="JBY|^'pp{T>ڊkΪt@ O#6+Hj i4DY꽒U tswjLU4Z-MܼWhOF+,pYr "*h%27'B{Z#p߈V16Kۅs}f z &+^|n]dP c7[ykiso( yT7 oXhpIV\L{>TKI̎L07;ID@ Hbas7ꇸB(ǵ8)q1$(>pCL򪍕-['%-)l+jWbeV0UQ|<*q`=ZIR#C˓l((@o0/-߃(kʺƚ$ko~n)L(uʺGkcn)9}[mPlYLM 32C˩3k&@{Yq-Y,YwgqOpIx0/0[lyUט;+7! 6VE>Z=-A  ˢYl ĵڗ{#v[ɫ&ku:jyO |b6{hY2wd6oj%#6@$@RIȊz++2*EiY'2[g2ٵbd_(f!lٚkqaø/sa5-NP,!9 Is0;>7&!l∽Tg8fl)jy%AfKRdIwv{sVkc*qg@8jˠ@ aGf+f+ʸ\?ZkKn'A$ 9UXSmQ']a{}n7U WT4)ۅ8!lv @vS 6@ ^ߗv@ fD/ QxƆzqwNݕAeY1 vW@ & r,A' YQ;CMqlم% TEeFzqUMQ=']a^N>!l,]UԑbKߓ9zQkQtSBFN!,-y<tcm8oiso˿SYE3>KnA6@Oپ=j =;V@O G޴ǵHZF.r(ARmY iZ.I6,2`l򊨬mg@8v,`IRlc !+ $=%I)pٵE&&"ZgɒB$2"SG,ў[gصYFkq[mS|ź*O\w@ Fo J3iůdވ˱ \ OaZʲ@ Az xS~_SϿg^ٕB!{oX浏8xyvq95ĸ,n6 x@܅=lFb,#24Wǵ-# uԑr@ {Y5>x'{ݨ%5ᰌ1F0Z 7I=$I}n}-BVG:o\Bou-29:D˩g1/:X㢮._BRQs|MV]:, -o7W)ZAQ)iYxd9`-ь1hpp80`hIŹ00#<5n'@ ƖP_ٹF~WlLyU#J F P7?QI4Om&sT[n<&uGaM#L1Iw5)o^o_`2N]It3Sc\O 4 Ft:^+w^NVUvdbtQR3(>PM~I9Pǹ|Naz| {">E "lJƕHAo0 2Ð9%`ݷ}f2I7ݞNr _ XSm4{YV >K8Xs2_<ˁC.'CilJ*1-Ur JڡrjZ1[R e$ϭ\(G AR DG%hHIKأ[Qȭku;+׍WXꅳhETeJdoN~1 :nGN J9>F{E=AFN>]rb2[kjұ孼Nص^Fiz7PbO 7[v8$f`kq.\}[tg%rgfGrGuD@ $VP؂Vg@(L(̐s IDAT5X9.YydIERkauǬwziɀ{E-u&X*3G2G7"IjphyBv^% y!nGԼZke]cMSK57?f9@(uʺGkcn)9}[mPlYLM 32C˩3K c~2ͻ Ui>kc;~*<. |\,oS89~g&zچjHWV3( Y4->6@rwoqv+yDNGMQ;ot oU"W@ Fco+;ҹ']S(kĊFPfdN!lI%!+2=H6W:J=ɮ=^>\oϨ%B1@ a'4\ }- i1t*dYF'ɡHPdN/-y1@ aG5tu\BՈ5=cHeE17KOg5MQ˛,L b4[=}.&K꾳k'mkZS9@L>+BđT[e vis +;@RIR'}#{7).d"d<C+]a^F|]Y@ &V V q7TyNd%1I*Fs ڢOvxn@ a#Q+*#lߵiٵS q B% *b@ !l@  )* IU_^/I@ ._\ v%+b:& s@ Ms X؃Np)&HqAҳrw,3wز QK/,Lrꛢ.{NvY} >+BđYz)#Ŗ'svh<覦BY&%l[f)xplصӶϭ乗)f|;" !lڳ}{@zvj>iyk\P% إڲ\ٵm,XdB9eQY 6qXpBV$I" &E{JSdk'mϭ6LxMHEF(%-+)IddE˧I%mi Y=Xdk'mϭ0|'@<>$&uUj@ ߬$[g2ٵӶ'_c v=´be@@(?Ƨu:˽+Brވ˱kq1 Ksj>qY(a!lA#"`D#1Yej[+ZĖC:QIH9@ Htb1? Ֆ}0?;@Y4[f6uhuۍJ,+ۋ2v%Tz: NIyM4{ݑr @|7W#O4?N'ȯdt’2c0C}tB}Cۗ51&F9뼡(.Rrb&!8?CSܾq % K~Ϛ/a@ 옰^x݋gIKK@}WPZYP/~_@Qzo31:D8"#+FԚ;鞀Q5Vqܛ2 2387CfNՇaXלCQ`l9"31;5Fx=Ntz#ʢm[]# uy1,T:׍bKҒi9,u&LJ/Z0#}w<<+QۡQ.iG 9b356j{l.l:`&t@ /f~ní0lBv^yX+ro9ņ>be# 8gVk:?jZT*&QdA[1GAާ8n¾o`svj^Lf[$+9"qo*dž8zi̖T|^j.}OQKjacFGEa$o4{ Ids[>Zu޸hZdrtSb4yܔU5pTڦV4-""Gm <0#+" s]|83 #+F ՄC5)hu5q,vhfaf<#ѻ?XsN\,uU`4Y"EY#V:W?z5s ԚMNy9׽>VF~ FKEa26[:v\(1`\(2jEQ|eu;0zׇFǷ,R F3.\/]Lr._%LŒhHj5r8^f}1uS<16iL;_%n&ed<+y1?Q ;=9JMjc||kZafjN;ON}}z<҆#%- &fƸ~=r 6i<DtW7::za~ff&GIȢ@5%hzB?&sT[n<&s )J aS|O~͖q0:ˑG"";mRR^Nv1#QGz꣮Ӄ׭O8$ bMpQdYa|;78,P`9Kʸ~,p ަk(,\M6V8}"n^ʺ#r[W)(Y2ʺGk6ʩijlI%  Gs-ڲd2IѕNr 7rO4G AR ¡#'COPԴ N"`0))bML8o/_U'{z/V"xs)Wp;uRPTZP/my0-+1x2ruB]S+,o5v®7JWϽ(dSx`aݢÑ'1[m>\s1EH\R^W/ ej1~|;ّf'>tt(I,l &3Ս1YRh& ~ ӑI'O8JEnA u$D8qF]|&NE|+VEzTPPRƁhF$I-OU+Z;,+jWnҊ:n]@Qjg151`-΀"$R /aK>0y?sS#{=}-fG>φKƒ}bۭƔ(x=~hY ^o8.iy J8H(_bK@τ n=оwJ^5_Qp4x9[H%؛+CLvOa+VB91b#I$Ȩ"#b\7Df+L&vx\r= @ M0[p-.lep.c!R!2r89@HE'vx,̎og@8b/*FF*+2Yz:ۨiZdIezlْs0YR];i^Fژ)(x\.&bY@ &2(gOYyJ”b@e=)+Iqi& &q8^Qo 6Ⓩ 6qhR`R`Qv`(>Lv"'JќB*Ůݰ=>*B؈uT+*wmlvB6B| @ X)@@ DC|J~RWKvv@ aKeG|wG~>}~Oe~_h4;|;6Z[oueD姿2ܓ  GxE=[6ss~-m&3#C(0>: M-8 3L n)O\᧨G$@Qw껃q+wlu'4Bt1F $y׿We˗?y"7{y5X'P0jtz:{y5ScۻAQ&~O}0oPRZAfv_rEw8riT/cJ79o3:Gy#}||9/99Fq{ߣ"r8C|8oKs{z;8έk-/=_:ߠLO !ˡJ)Q $yhq%as z./NOp6OI\832:F-?q; oNqoo?HGrW_ 5? >:o?8#k?\G1ۅ`kH/kU&dž[?ҥ1=hX#gLqY5/~>e KuI:GyO} C ݆[Ox.:}Oﰤf0Ӂsq/g`#Rw[f5 yW)dlOܹyƒ}rMKoKOQ щ:yXOG//]|^y Zҩ?.7>2bpPՄC2`#p'(*,-Ǐ|_u?tF fff)*,?9vX+ C$>7ܾ~ƖOV#i7.7ZԳF|7eU \.UG<6hQ>|%ׅKEѭY9X{ę61yxg^{))J $+?/}Eif~~ _g);==CIɽ KJ9_ 0o\w{ߗ~k/ʡCy3Musqh5V+3OG[yiK˽~ gQ{s:㪴AE!𑒖@ ^߲H1͸sX3~oZ>ϽOspa&Fp9/^Qђsa>ە-Ӹ,n:˱-,D6u\榥m_b#YY SZj`pp̌&sT[n<&uoL=vcG7-kU{i^+K99}_[7p#oQOto |~Uϼpfff׾g_<s~ ;N~Nx0Z^g^|m]H}]W7?% Bܺto}`EQ1mkǒ֛|{Zv~7|@($}*9%BfKʸ~,8'7p.L =me3//R`$ Zu.ݵ 1á`x]sV#& }$l~srr%aC'>~ʤ4zRRҹz,W/%ՖAn~:) ^<DVNYHyG5%o}4_Q_[)-6E%-MN]E&?{'&+v ~ L]mժ|Yň@ FJZ%2yI&}sb62yx&w;?DVSdYLB$:JBVd{-؆H`sEH*bA,oOد$@ &1[p-.`:1[Ӣwj5{G+Pu R!rr(&QiߤT,̎og]Nl)Id5tu\BՈ5=c'Gʊcn6*jg26M-3)ӹ0-=z]MT1-Ɨ|.&KjruG|G  쫶+$Z(,,yOM@ M"jˠ: M-p%c&,=kJn@f#Y;?n>F|7C]|nLf+MWJwUY9U7DV(Pm&FCddR^݈Z\^>650jҊ:.{sWFdYffr~f)1L+s(Bߝ !BdRU4vScܾD7b!,j;;;`_'Bա#x.{:{ݘ-V[,-2]>ar|"*k 9k3wϽ*oMn|$I#6Sc˫-oy`/fffBah4IsSXSI 2ri~4) ܤ G5cFop{PPR@7N'k2:KIYUdgԳe03F^&%-}GXe|a,)i$zp(Y~)W?EEj[(($s2Z`iގڶ8GdIc? #+c?v[Win}9:GyFCۅ ݦ.{.:}ņJyMCfn!O056pm:ۯWD^a)ִĊq;ܛGeNq;mA(B$`O&7{Tn<لAzt܇ɼ431:H0vQPdgbt%5r|mS+FŹɸ6˹H_W; ;z+?~q[䓟sǵa໱>jb{U39ҏ`ZaԄ2.PHjmԼsJbB -œb#_ zj!jh4(j`| VF~ FKEa2&yz_ǮZEQ14EQ5(B #%- ہ, >4Z=ɰc.!"n!LJ\$'{EFK*΅ѐjp8)-81_cxb /lT*i՛a0X[G`l&:<.GdcD׋Vo<LbPlzr4bִ l9;}tw\#+;y .%- &fƸ~=r 6i<ʼn x=zt^ߢ$LEjKh~<ڕdrΓj휏pnL~Oħ(@ l))t^#33` @_ Yߺ!INnq+v,%UtzZ;tWTNMp(H0[QhW@O'ՇRFWz:)(=ѨZ_L.I/l?]v W7w]W V239KC0$+Ƈ,O-(`rlO>"`0))bM嘋{/_U'{n[s3/V"xs)Wp;uRPTZP/my0-+1x2ruB]S+,o5v®7JWϽ(dSx`aݢÑ'1[m>\s1EHrR^W/ ej1~|;ّf'>tt(I,lN~aH[NahakW6K{2 T*siJ"Ҋ:F zs{_?u&DD g>9J%e8XVoD**" J*6BxݎyXkʺƚ$ko~rPu-vZ:[mPlYLM 32C˩3kf|Pp#׵[+8#bf+I1?<. |f-oS89~g&zچjHWV3( Y4->6@rwoqv+y{NGMQ;ot oU"W@ Fco\[{2ٵ?Fh:Z kFĈ@ & T"ʊ"bo։VLvXz{F-g@8aZ\0n\C|IBeprOvYV#>7&!l∽Tg8fl)jy%AfKRZ~k'mkua((x\.&bY@ &2(gOYyJ”b@e=)+Iqi& &q8^Qo 6Ⓩ 6qhR`R`Qv`(>Lv"+$MR0S(>P5|صv_@J^QyEeMͮ}⿊'@ F_ X)@@ D#OQ~_E#‡o BD vy[2, qDb|d359.C먥3TUR+ )[X$ "-݂ڊ;=6Ҷ=ڠ3GeucpDtmӶ:,δh (!$!$! K*I"EBT>sw{{{߻OGRJ*b86S=r/#!5 V X/Ea a. u`!EáQ>ۺi7IC" BGP׮!R_V1JWb')- UQxb.i!fqbp4>apع}+72C|L%.psV~t^H-%Pz@ &DâPq8rrQhKU2-\J FQUZ-K,MZhX42mxD[B/7: R'x+ź{I9h4@E(-بTܞ PsE!@ўі*zrtvlFU{!I op!@h5bD5ql՟Ц!&cW/XǦMbl[w!хglԖ-4Y).*S4<Sl|]Np5uDGHL 'w(Qh$: w; aibbұ<2 (~O{])hMF!d2”k&39$''i'ܼun`CoO5 !575΍ ؉עEp_laS0b+Ndxi[rqlqTUpQ~>[}hΨMʳMV"#"6C8zZ&@M}CB3f>HQA1Oi~o0bd> Ii7;wW0:,Lx%8oo` '7"|myk|vR96߽*CdNn,ӹiz8٤e2 w(>,֟86!d]5ٹq9츜vo'%=cDްv[nNG37Mّ]8c7N١4ԟb57qYD/ޗqMrZFl3aE}w} c_Q#ǖ/ݻ J``':Yإ<V|[@EE%*M3#}M֓g~ֶ=3f-^BUU{ vQ{Ǿ]pތFǫSWw,^},qφ7swfٲ,}fqf3˖=~7݁%P[g۹K=${ iڥ;uL6TK#l[>_D|RSk2H[֏˟@U!{}X0'$S{;HNmI^> gj8<ltFmb1$$|YcF@Q<86 ѱXOմ c4t# 1Dh4gzC4z#Zarڃ+ƥW\+ Ұ9!c(<.'̜&åcpǬY3n (BBr:'k:i7e}bֺV<wE!#.o>gUh;}񸽯t4tymV8aoao GoJEgٹVtܷ荕_%-5U-E]{+kcM{Ua2r_(h8hkkOKc:[(NOTI &лhRmUWyF+<<FJC H9[Qb! chP"zB0̍hX4 t:m _'.t:;M)21&X776mC Ѱh8T$$&SYVL\BCUN !Qt-Ǧe00fH-PTlV+Ǐb=@?=A@>BA?CB@DCAEDBFECGEDHFEKJHMLJNMKQOMUSQUUUXWU[ZW][Y^\Z`^\b`]edagecigejhekifljgmkhomjqomsqntrovtqxvsywt{yv|zv}zw~|y~{}~]$%ۘQĿz pHYs+tIME );tEXtCommentCreated with The GIMPd%nIDAThڇW@/R(QA (u+ 2QT ~s)mH᥽!\׻ܥ_`Mc\$WHKNHHb{kj]#x4^hՙknY#z m. lC:ۻ&< DS9Q 7J=`@F\R%ae%?MJqvv(z}D1zby "9O*52b V#ƙɊeF +DCc@4qh!\6[s6iqh#5@ރK$l.koEi;p\;92FwsWV|W]."\C@qR>z50@6Qlg99r Ʊ\ w\i\PQ5ZVZK? k=mq#*UT%GY;fJx1ڍ6?B`8oONd!wiREl\m<r9FOujj9O 7)A՚_,4hP#,IENDB`pioneers-14.1/client/help/C/images/sea.png0000644000175000017500000000527511760646037015342 00000000000000PNG  IHDR"Hit pHYs+tIME41u.@tEXtCommentCreated with The GIMPd%n 3IDATX-Is]u}ιͻI eTYf؉][I2ISIEQQ\(Q$@^wsZeGuGD)^2 DYdcgsӓ0yGHc4P2Y"+(>]R89vB/hhsVSJ2J4ʤ \,U# F)e 5#G(ZHȽ,ho'l6J hۿ*yw5|mÝ۞Gªn8y21fx䐿q9 4+8)]JJQHN q!Hqͷ_DmPk= ׮ W?|B&*7̃痉+as18zqTNy"q?뱷2Wyd&ހ a]!@=g$9Dkc Rs%rxs#} 91 |~{{gc4 AU5Fw'gk'0,t ׍XWS|"m X;˖5r/ܸ ;;[3g eӧK7$v?RNW8אRl̮BPxqv3@]2bkL/QfSc4PB9xU j+ZN fḚ /JX8Przr*#+=YPk4 O/Þ|`e.!%Sa0&1 ^>Eͽp''.gd,IENDB`pioneers-14.1/client/help/C/images/server-create.png0000644000175000017500000006010611760646037017333 00000000000000PNG  IHDRW>1 pHYs+tIME ܪ IDATxw\Hg M:,#`<+**v*D =O~^{wg(].]#^\dZ~y2a1EmRz:~M(#S\[zWe@+#-B[ ae*J v>圏JKeN" R$py_$ J՝,Q,yY( էoe{џq%hf }$ɂ#̡:,!$$| P⦺'8qh\Ujx<&I# ʦE/ 5] '_8;V`Р ) I0%]_,8Bm{+wi#/Dg00(N<5`s>aDllȃ?n6TG$Pwm"O'<[8u<H7*֝;vӔ3~2`<8qu3qH5p6%xrAQ7tyawP1S/MPG}L_g5k@7rKSfT| VlQnޏX9tٺmiha- i {S6Yq[ .e_٢->n6Zcvaj!ևyq&^mU|$?E5dZh*!x%errl5]KPе"l޵,r: lڲLųOBm*_F8B&#Sκ׵6B{O'R`NY:R#Aъ~7z/#FxT*f0YeH X~C?=PʨBC׸^ ޥ >BhULt9_$4prĥsǁ7S8U+y!ݲ} R=V)ogiCHJU"]fw6ZZB,Mmղ'.@5|Jju䵵4j 6ZRM Uۮ,E59Mc]MЅûȳz5L:9tӸ<@!u5%ٵ%9u%+vAqTeRh6M/R B@OhdCzoU?GGU!_ƺ'KYKNDNP-B($(iO3عM~0ղ!TVed8 D!cC})H!ERBgMQGjm{"?ǔWEePnr ݍʺm'#LP@JA?J- BT䐺J?}fRg$rbXÈ8HMhge~_[W\۽K{3.Uuڕ8J0KZWRtTٿz]=˩8r5&˘3ٴ,s\<BU㑸"ERqFz%?F \of{rQ"κ4*IYOG;vZyp/.+w+aѫ}\]Y͑;֚!I~a_Vy}Su]~G/H'q,&qg3B/ kf>tB!B H~Js²<чjc 9%V el-3_Q&9Ï/EiL6KPVNMm&Lθ 3UȰ_\>!L?P#@hŽ];B`%A[{&[Q^R^یnT$W>T1TMnٔPqAUi"AS%S@ys[P  ,۟ٽ63;wj (r'Q hiO2']!mU'8]A!BHXi1 k.Qcǒg3 O9]33h]D!&OѴr(YndKpaDc"u1xMx2(Zv׵ƅ5!Wb1AGU5$qbԜ"< ׾{@D(9Mcyv0 1YLeCIDrzTUQ{4ٔP>+9%%K7=k!YuS55մ9*Bc*(#.4§8_U녁>UG[փǒ6muyFXLO_Vqߔogr,+%<\auҵvֳh' ks#{Wv)8X̡~B(uͭZ VhڔBIwBq4¼J @s - W@@DAAU]nv⽄BXuiֺU5/7^M-mX,61a);!`dlڜz΍!ǚYq  h%Xw$߹;rtGxEFfm1Laذa8_ ok㸁9 nnn߫w&.\^$~ x|5?!|צUgQ{&f`0q ;uN{Bo)x81th*8c~O8 xTP<fWU!GpU(x8ӷUV1oĨ&f)6mۨh4"lBPPZZZZZ*VOͮN<~X UWA]-Hאa^CIVRZ_@8po(2mT5S**};gá*55_>8N\ӐO:ԧ !5d؟NkjjJت'A8j&G'z"6Ҫ۷kn<3IR[Nڏ ف 6`/ QRZ5ԧ㔤)I!d6:=\Zr6;w]z+ GHtY5G`)UUU!eUM/9bh=}c-0#Tq!(((%n#f[6(TvwoDE.;{|]ٳK^OHk~Uqa\vf~a.?UYMKYMª]q1n{Ǔ3~U`Uⶊ08aئ| 1-a8#GS_^=}}=/U󈭲[7AӧJ,fjbǓzi` GϞ+Ϟ{1/T8~Pݳ|'O~Y@į)Sf  'LϯQPPTPP BnW{?g^h݀iiz@<ԓ'O:tq}$"%~[˪ciumU EvA3f+(NijjJ2ݽ}〩Ӈ 5n/#t LyywFڼ .o`Ϟu_ 'umx 6#y) u sgOihjJ!ɠmҜ ]go|x|ץr;* +Uʊ 'F?1`{Fu KRIk~#h%6rc@YҠY q8a#1LwJP< Z&=nbXZנ Xۯf0LDw;/{0~7& l& J˪7jg렮 ;Z9iP{k>EC[E!WS{'fWuiey) f.ZfVUYfm;@) `h~U)@5o@U@U@UPUPUVz&z&FZ9 e $ ޳Pjͣ?<*) ~gdѹK 7cFu-VǷn]آ[%L`Zn}bd7oY3{p֛C Zv!^aWCmݱd 77׌cXj]P:Uٰ~ͽuEp_A̠銊f"xG-4}*Bh}YR|; 5h11c#^PXpB::P~AH z.9yP:[`H}$X#ˊ!Y2-+)ς<}&?b8Bh`˶ ?&=NZS^^QUUucɳ0Z@+ pqv K&:v/7gqjahȺ~wr@N{O|{[E7W+{U5ĺUUTTTTh Bto߹G-/VV@j,r+`:TêRөW.x_X9(5)o9qd3/@ cC9`o~'w}c^}<}J8D::YO>J#tϾ]\[zs~#]{Q="*+n2gfe?ԲIۑs\=[88?x:yz&vwt3йLmiYY;[DzzrM%uÇm9n޲]\/3`n!$4\ P'Oj^$TjuHP2&22.ՒD"eDlZRLb!w(.5jMq:̞*k-=zlMM!DnVה{NaU.~:kЀpqƸO_*5YQI12*Fj؛Ο=6-u01._v䑌C"enj8󔗩)VmF,]A KXhWΝHJzTo>L~0g楍44 -Ȗձ<^IJҝMGZ[PXt/!nBn^^XI ze(NCMuee~[H[t6CQ,W}qdO{o߼tzͺz%URjj=:"o^?N}l|Hh뙤zV 2BN'j*.zYrݨ^>$ۈE_wpr<!mNA(L}JKK?lP(ty c##:a%sp99B͛z)|qKK YJ"EEHV QaCMuee\jx")2"^46SSחBZI"z6iU&^zY; gO"222zֽDr) ^{A))) Bb?ͣק'!5,QDXÆF 1)2*jqo{w[qMojj+ח:Nδj|pȈfX MM?+}(.撇ff\,K u! ZnR++ jKPdD4-YmFW7"ԤU٢bc#bĘNri?fTtu$3a})n&O1uJ@$nAvf rMCGy(fAӧع!cY35]]쏏tr!!(.!5/tu! Rnf4"#j3-qukqwP\f|b ߳::rF$K70i\Ȃ,P˩g6{Tjo>ksBBHi^N q E J^^=*++ؽOYY]tr,'}.^rE| ԼAօ$P[o428dYҔ˺Bcx.;Z ՛fS g} ]lWR"yJ5cx96`FƮ=p55M\ъ[#@}EF-NgF'-NC'TsЙH]|d`9-1Yo =N;;71=xq51k?<<K[oXX| IDATF,1,᧽#q8AbP_vz&6FޝoS'WL8(! SOL10tGIBoӌ֋8!sb.V]?g bFL,^\񮧫ų͈\ڧw/UUVwbJZǯ\>'d})"i& !C SC7LxۘNp:ɣSM&7!;v]M3~bdB'HuE"΀}cVFENLzyuqɺz 5UEdM=I7( Ŕ H]7y9SbR߮waY$7zRm1?d-Cϕ..YWoJcx U5l'ݠS6t"a Ytכ<ќI4,k1b2---F^oqɺzSڀYc}M }}|-*ðdddx ]ۘLUmezOo{+pPUPUPUTTAjPPPUmuU67 AiMz<,^WV6WkbnbA-E-[^\L0aMǟ p}I#d8&}63P(d?F]CJ c@U1  -ѣ.ήɏ;2 @U[#qDĖ2ی>~));l}S}^'G7V_H|R}e/ ONN&N"Ik-"W]r@? !ps8a+W-]hhW\uaL]?m=8t_So"6 뎓Ն?HUrMMMe7I%;}{OwZ@NNa+$޽ /?/#T.[6c '66Eui~51KKKjI=3ٳonƖ=ܻxq x%dSܶv6 >| E"QTv̬NYUUEFm.{GWi]7?ܪUp@@IeDG^qK=3+{ɦ Mڎ="{:sױSEE%_zݣG}c '7 U ɋ/7-jŮ [[+歄gOMK7̄W9y$#Pp{o߼tz:qƸO_*5YQI12*a+^0^B݄ܼձe6JR3nRPS^XmtBh96}1uNJ33Յs' -Ă VX(aw@wjr+Yl#|6V 2oI,,Bofx?M~rpr?qU[Pq1׳wߗϒ Ӷ---Bo޼h EF-?wpr<!sAS#M%%% 6'xƠ ݾa%jp#˗#""ݻ`0 İoQA!K/:*WB+W/^6˻oOh(BHIIIP(d󚚚;EE~~AGl*}033-.֛B[@UUW֭8 1)2*j4Y=dsf rG3{w[qMojj+ _&0a >'44t֭o !`*hm8i e))-mDs[5''WGC8}񬁁>xtt8dTYYvA&OO^*UUͭ:Y:1a JC8~9! |Oݶ 5"Έ+<uIpacq! 32B/NYo<>C/Yr\eÆ6bj5 Y9!a54?d-CϕkPz:V(q\$5K~UB1CQZ'2UԀ"k/^ܪ>=G54/ Ξo`/0ޯšX1~_4gg,&b B4sȨ[75Ko >fB#HM=tؘ hP&xx 9w˄pe+KBO>9fₐ9cGCG.V@clU&8!m;=oĘDjhh?ooۑ87AxmoF171 qxζ{gزζ=a̮ҲP6s]cWdX87\@UXl6&A9@Cb~ &Y,Pօ.[ E (뭲R ںspILGQQȜI VeXrp/++y[OPGנۃ*JU.]&SMCɝKG?JjvvPWB5z@UQA BCAATUwo,4S,&գ j"7;y[XP@uQalaW)W065UmEI6hG{G( 1LX+ceC&\1vj+d8&| PfEt1x*c&[G]]=wd2N'?#q*bKNImPD̖^ 4ࣕ04/+-|arr2q z&,c""w4aVXjEcG#NbG B_.Yyygeej"C(z&faq\*+ķ>KNj2ǎljФ\n\ jjjf16io)nH$^ݮ3:\"ψ644444޷oT#s!1WU;u773="rԙ.mZ{[Wn\+9w{}jmAaaҽĻ yy1c&_r[=ޜuH]{)jj2}-E$o߽tש^KM'5cM ym# P؊wyDφq)\rUjbdTL#*PL;99J^F{%En߹,2C^}7n]Ϝ8"!Dϟ>niiz歷D[$}}=N; o?wn*))I-.//?:~¿I!>onձ0/Β;8zR7v.Ξ473Eedd:w$bppr?qU[Pq1׳wߗϒQӆn0m5u V `*ybjkk1  A~ Yz1z?udjoy ~͝b{Nwn׮$$ L).~L)RB!sGxYvY3$$U^UUW֭7~BRBJJJuK"bC/Yr\eÆ҈!s6o:DҌ.餦_&˛ﰡKJJ^& Y% x9uFA"AUs&LݻwEDDL4I9xV$1B5hy9gΞ xVTa X[ݯk7ccC1xfOqa::'7O'7O}}_ɔ$iii1j#%H'5~_4g,oYѭgggG9-sg7zzPFAvC~*j```mmmmmm{1e>fB#HM=tؘ h՗gɾ>~>?F(N h A0Z bE3W"<}6r!sƎyu6;!TUUyѓfQFV}a;p(##{^g.,++/**^ίjg=Bvl`g۞t0ήHӠN8my䂪@crvێn\b;FpyXl6|1GU?wD.Hf@U[Zں{ƍwqf.-ү&fמ}iiR-8z&{ңG{9CآW_$lfPH$^ݮ3he7懙[u0.6f_z]]CcMMͫn, y- ̬'Z74i;rx.w9On^^NN43xu}-<,V*hCCCCC}IqυTh UUWW-vUPZ!P7o%?{mZpac&\z#iϽz޻唤;k6ƥ<~rʥWɊJQ1_-Ȗ\I&Ŭ%KƬ=7m$Д6g )N;;7hfۜ744UA{o6wK@bjkkL&'///JZE,p\=:wR`¼ `^}ͅBCBJJJ9455!w7^!UR m23-`ffZ\̥N}xV.˗JAcú5g$&EFNdg +/':1ĉAGy(n!\mmR{hkk+E"!#l_8>|Rwۺ.\Ԉ8#x\%}ƅ, _:}fx]d9r"JsN]MMI3SNFJ FQAAAQ!+;'$4L\ټe{rr Y^ 8" 3a„w޽{.""bҤI͑ƣ"O.eF>ϧ_{Vш\~ͭ{y _p<<~]F&Lp 4&|@uK#Mm}F~Ib2---FN'L31پut[ ޽m=L"L8t3!_V }}|["C{L *h[. !鳑c&.3vȃ۰ءNvʋg4:FVðdddxiKh4a0q1 !do}#L\$RCCx{ێ)!XU޵b0ZqUv8+dǖ vIw `vo 6#TcvpʟlK0 D"(h9B̯#pDB6ںq 4(A=ezUVUjrtAU[v. (**3i?T۪LKee%o^>qt ںtrr{WEY @1.]&SMCɝںPRVTѫE @q|>VK@IM~ 4'_㺶XFF_k5]rplfi#' '`fi3&`'ijhnš h:z=UWWIDATWWWwO&Sڱkbvٗ^@ 7?ܪUp@@vwt{ңG{9CآW_$Befe?ԲIۑs\>TDϝ{"ª\\\e˖0{'*(xnmPTI&Ŭ%O=||%nA6qxV'ަ?fΜ<{WHh8g̸IAS^?OybնmP}*--.70F:uJܝ870ɤUB==]/~٘GG:zgS+W,hZk5FJJJAӧVUU[C<~Bpͳ_ï߸u4#0Z4ݻ,^6˻o\33Sb̴;xp-MMbGIIIP(h?HLy4NlU+but sB⧈Â\cS \7$rr6UUU::dees8MZJvS>Ndg7I |UevO{ !vYf̚5kڵ\$YJ;뀉/%]|.^rE| mJRk5 Y9!aPw*M$&m'^qi&..(..M6wnS+w k6mj@QQy8LG橯&IE,41u4/ nnn+)ʅܩ}P^V2|tMU¼0Z4'J#M}' B;ta"T5 4+8@sW& & `PUFa":RCU*** k48 >|555B þzuC_ *М ߿~,33[TշngfAcVrqrGgw=#Mr+o$6S>GzP[[]<{+0xDذ/((8q8_]de=#榼!]vc(CS+vA3H] SUL!֞9u]v;7[o$^aγ3fC~~ͭk\<Y++Yڌ ~I##&Fui/߻}]MMuj`0֢{gْf&,={ȹljS"(*zuFfSϬ*-+й ^ZVֱgi7~;tg=z7ppr0E TgzZ^VJFo_xWl9z?^cn=R4m;v;rMB`0sVBB4 %5ҡn%ڞ,C?魬p"EN"|qKK Л7o$Jwq(BImZxR[ԫKYĀiǏh֒m[L}OXa_nߺvf 'd}elM}{]EEf|%%%PIii M @ /55 ?ԂzHtt89lGNYZ8ϞXy0~C'Z7m}mSHPgΞ/.Dw"WrvB 4.dAxFfP(|3 ޽zTVV{r'{;jϲ8ZqE; 8u!dk!n>_pQ] M P2;'ݽ%C[.tV^G=t\..X;l(47.T#ZZznߵ<2#*޶݌Ђ0tީ3ve`vװ=Ξo`/"͞DPx'L31پuS0nLCׯxosxv볡)iILf{N;7{έJxE4Y%f5E,8y:y(UbgK7Ksޛ~$۶BOs >w갺&ǣg_Cc3лܬ7/  //W?0hhNGO t wD @kThVpPgGGL& 11L$PS*DtFWUUU@U@U@UPUPUPU>_]]]SSS[+0k%FZO- @sR[+~ųtnQ!BHGWʺ U𡶶Wrs: xoJH+Uqův6f6% XUUP*/5[.9x/^mficfis?ϟ>z˜uXҮr3f߸׷SUPP@o_K*I9z?a2YZMM5xVЫWCH]G#3gVUU]9!@0o~Us!N3ǎljФ\nC돽AӧW^G}$@UI`"Q=eypv$ɪGU+**7m䆍q)\rUjbdT W.q Bѫ&KH:Nnj8󔗩)VmF,]Ѡ,=vÝ\pf_B޾pDR#hM[\o`,묾qnN&JWYb#' V_سw5ue폫<}!:z䲈z|'p'R{?h{{xoȈ3?[ `.vvUmN+YUY}!tꋄv>#-EZ]lKJ^D*..[47,4VD0XHe۝}+>nh%*ԫZ!syihCG !Z]$*V(Y9s&!c>X/H$u&sy&)7.c~133 8oAܼ 0J&AN>5UW~W.,}_qٳfw4"|vz_80p\Ƭ 0ajNmK τݶK/h7١B woK]P 0\Sccґ{Zَj&O֭+&Xuh(|ɬGfܺqaqu!ѩOCѴ Rax ?eBx<04T錿]xuҲΆmMLG~/ w)DRܦ{NF".?Qy8Ze$^XΝ\vQT\29n8 $.eFT\tyTzzSR7lب1!LP7ZFZtwwb3ݏƢjEE9rʪc ѲF/j)6 _yݿ"!*:g3oܰ[Q~ٍJJ BlU%6D":oGi)ՙvJ߂܏Uu44`ȡ#yܔKJG[!b~(J%IU!c>X/H$u&"3g-_1;|{GE EVvsUҷ R&F\m{ $lv@3!dF*fտzZ_1|=6f_HkV3RodwFۮB 㲫moACjߴǖMu^Zq>* M;Vm^h~X] 8tgHU*RHU* UHU* UHU@ UT@ U:g,ICi3HTh!鑪m a\ T@~:577w.|{A(+I,|{jB鍂p/R@e%]<8i[/.<{;yYigu]\P.A+ߜ<ӽWoiwͿ_8ilKA\=iZ0L'鲓@(= ± HU 1L]LLhZ*~(e)X*~x<0 әBymȓ.B% HU=SB:"YO -O]y8t^!I$p()ެ/\>cgOmT6T~=\=96`X"7F^_'kk<)Շ&Oy{ Ey;>^ѫ֨N|(8(pqR}S\|VV˿fgW~ʹ+E0W5]Ub6^[fLr7ZZ]]3^pqڔ)-ӦLpᢪkI#1R}U u2-+dwmmmZ}?;Pж϶XYYB.d xN?Lml -Xpz8v~p1ڭ@vV*=v~`o'>a~ DLJ0=g%5ɴokmmU#:::|߯Ǯ]M0p {Z(txA~CAB[/׆-B'v4,pr8B(ѓROPDEcE8;;Z566֪ufĈᆿ#O E#R93zVzЅfJ+ˋu~A$*n٘P'coR{m*2jj֥\fJ:-6ǟ1Gg3/wN>OmT!E"UfߓKbGW 7\:zgvL,ޘ9]&9w&G,#>$oGF,//w/zU 6'4bɲBŃfqU(H(%֍LQA͔eE-wj_S_WW_W{7vzǽ9TuyOQlF^nBƾ:u2)ܹ9 #VN<};V; N64@VZٻ|$pue#/6lh!vsh` @YQጠyIN7lu[٥ei7ˊ []Dґ'Ny闔t^^ >ԉ ?ڶ}Sx0 ԏ0XFj}!Vj=5iۧwUoa.(h|PxUv)TT]v9>N}'<\,r2kDٹ|_J !cǍ6byiRu;:;#P˳9Sˢit77'\0n>>3qUJia'ǎ0Tr黲JqUMvFniaA;ꦵ HUpPka~,j;`t?lvڅf LP=4 X]:lhk#*6XL(I >N0_3U+HI~wI~^G U>Ha451 "^*~(aN:BAgBui%D!P<0  TЏmEq~O+{2Kk[cA4Юw7ɤb0<{o4adRqAnzQ*~m IoK?WS<ʼUֶ(ǂ Uͳor:{AOUHU* UHU@ U[U].B- 9<U07s)IENDB`pioneers-14.1/client/help/C/images/servers-dialog.png0000644000175000017500000005036111760646037017514 00000000000000PNG  IHDR pHYs+tIMEL¯ IDATxw\g'7a#޳*jܫժmZZk[hmŽPQw #$w{!A{rwIU-[vZ$C/Qxk#ui?ݤA D_1ZV"{"i 2+Btf)O4<|\(D69KaԪ509B;:ɋ7dF Yug2S VFtnOY<] & 4}i=C*共2k#H2ʦ>#=ĤGU[K(6 Z-FwI # [qO8hQ5 @]_mU0gl0vBZ ئ#ELiX!_D6`Ndފ.BVuvrnj#:;A/WWzՎ(wturs˔9bs B &tuٚ[^>"xO@ <;n@$)a|N4m!]4JQV>ccg<-ûFEygܬGWg]X-GnہJip\6͇#:85JcdYhlj}pa8Twabx?O\QQW).`f(kjL'R3LY4#r^)jG,&R&U}woW#q|b7y=<w?:1Q> w KW|!_X,Dz{r}]A`KP.}HhvDKeVm{lLjզ߈I2!OnYفe$s8G~XbVk!!jZz| [ .B v1tB4M>p#*V;YqmmkX3¿Wgݞ}y4v{͐*4g=vfe,?[kBLW)ఘ!pР Ai.\rwȂyFEQ/ӅkwA40.Ƕvp bX>߸!daѿIEI]TU,6K`ua[91 !gh.=x~QA.9Wp [;f;MٯٮB`8zyp ϧyDhCj^}{C`,;UVyW1! ] t.@Hz.tP/PA@aC@ܺ`098; 5-]RK"oc(Zf&R9($s0+99 .G2pZ2cDb,hPp14-^r,]jo2m;`܅UUU&OSVv{Gzv<}Xlp_1W37K_?oߩg`RNTI*\K ZFzo7w'pɲ*jي5>j|ZJE.pЯ!]zz ,4c0T55 lݮ?Dݚ k_cԋ P7Fh 2ZԨsp0H[lbq[9|w?yz5BJc Ϸo$ŹigΟ7+5)>91M֭Y"?Q$ŹcFgRTfu QWngNA8#EL&u)fzѫSh޻`mC{j)m]p-b| zPT`@+p@dJO:wbu*,*'8mۺ]'Xbp č37'PRVFʺ|w5zCts&wAZu)fz -LX,Vp6}̹@#t48;wv͙rurqv~8m+)έ}n9gYOE9Yq'+B:@'_n<)Msy_B}QΫӺtJ-'ersurr$qttޚbӬ0rvv"C>>u yA`&_&ð~׏.Y t4>\TtB3/_63+[$=O=66bJ҂Ysr\cl/s-JIMSk48k5Z]Neekii١}:XQjgæX"x=;~옏6~*b L7 ƊM:ÈtL|wؗ? e.BŦ f[P4y'h4̬KW=ҼW|~`.fnE=w]0d$9ndžM=}ǎL18>tFO͟oi.]80o ,Y4d(+^ѭ;B[vGkۥG_WWׯ1/4c0>Z֦c} ӻpQWf6ġuc{4XfmAܣF`;`yBb8 -2vBKCFVG&@c耋t NzC ]@sGVp7< zۅH´//{M8hd$w{gT}vc‹ u8&-}7:]\sg! ] $c? xx? hf/Gx Ճg\<{8B;xN2]wM3g?*#O9נG[õގj]4OiYR͔* Je푬o@9 I=UHVTT~N]{|M`7hHy?qjJjڛ 2zM%N)HҤ&wv/_MN^RJfgku[zvŋ1&{׳^$N7hI-tkOq׳GGuxAN&NcM X=ڧ׼K1;`$ozݻ~KN~ÞY9b1ڽ7(Oe+U55w7--S[>_;w睁w=8rnq 8,y2V|˗AmCD.zgs钅3߷q]:woZrswU{$3b՚~9~l՚xR׈ҥ| n.> 95juCKݣZٰ6ܻn|5:1RXӪO6W%ߋP׋xVlMt> t G۟l˓b9:8;?QTئ[r4(T*hP-BVOII &3LRi@BmJ1 v];0zԈR8ЭwGf&''Ʒ߰3;wݺv9>vi; z/^Vkj薯]q?_%N|w\chfZ1#\K,<}!%b[_مk7n;[{ h[69vgB'>s۶|fF(IQ#F$ݺuٓ/RGF6:thuyrΉ:w KSRbc.>~pA>޲⸻7ܹ˯K ֭Y"?)Fݖ\ R4FvcF( ƻwΝpysf\ݧ",=+"I('+}99/mnnٻ+^2.#ͳtA7g >f 񸬼5m,1cܿY׼xֳͰ|]"vy钅*✝]oVFLNN᝝`^i;t\TY{U*<ς|ݧ6lL,%7n8a">xGlӗZh'Ϟ]Xzw?xR^mvYP\6gB./X=?1lW[#,}ͻYF4! D"8 ~P&xf ?vG?bxO&{ uzz99gޢ4FV1'LiXlb[׮ۨ;ek:ݭg8E/ƮJ Ei@SF֧M $4Ubv]6m ;~rtѣ[wtego~*3;ΖXdQƿ;'`#un |]=ױ+]kfbEs IDAT.j;|} Flڏ̎ݫBhؐ'MXc36n^<وf`0.Yd٪ŋ\`ͪҹ{ow5NN]zңfB0d$ >tFO͟oi.:[XrىS{y9N.6?o ,щI]E1}ڡ_^cWL4)ӦG*ug1{ho)}CM"eqV)D@KQ߳ .pv@K}y{:|( W;dGc‹ u8&pt]P߁}?N>SR¿S`2666:uZn]iiɽ$$$ >{'Olii駟O4 jРAIIIM[Mt+[M*wzСCBH$:py- b>]fڷo={Հ޻w=zL2ΰaXAA EHHHVV*J@`@ŋRϧn{ヲv9w\8 @}"SSSnj3o޼;wܼyӼKE=-зw%ŹǢvkB={9s ۝ADDR߷o#GvssJx ӫWqLLL>}n_d( >O|߸qӉfݺuNNN|>?<}J]2XkcQ]Im( zԩS?i8:Hzto†  RSSsrr6nH>uM6Q?3 È>쳥K6Ή&%11k׮.]$&&6ܾF}vL&Jˑ#Gu gώ&oݺÇ=*..k׮%_~2ze˖X87}ٳgMd_}UHHEݻ#Qta &_~ D36o\YYywRcc*66֭[Ǐ'y ƍe2YVVVBB:׮]+//6mڈ#Ο?#J'Mdص(ծuߤn ڶmVʕ"wwwKKɓ'76l.SRRD"pZZ855Ãz~n>Lά[&jZb5ܾ򼽽;??I}MM !{{{'''\\\j''':gZJM8122,""fSϧh[ffFmn.L3[b-VDrssO1dM% Y2H3&+%222iii#[XLכ4Y2XkcQ2XVn6Fɓ/[z>Ś5kD"H$|AxxymoNg^gb4 XVBNO:hNk.EdcTjkkp4hƍ7l0hР 5#1ֻZn XE Ǐ...7ovuuO4ĉ SdkRѣGG;Gvpp;}uELToXidC^מBص\X ViFX(,,48Hηֽ' l< F.}JJ{L?--Yo~>>>*e yӽwqO C$=zT*b&tG7dX,n9邮iӦџo,ȹj:B݅)o5ZHH͛7k0ܹs&#:g5՛4@5Y)wwwoMּbSd Vh CCCu+++[w`O\f+))Yt +V(-----]|iӨ3?믿ްamwΘ1WPPaÆ3g6ܾڶmm6T*Jnڮ];+Ǐ/[,**>#fΟ?ܹ&!!, Eff-;vܱc\.ϟ?~mmmSRR_sϞ=;//OP:ujvc i6 u`5M:@ ӧ̩S&%%j|!56WScXc"?M7eʔ+WbX{ٱS:NI֎fS>{LdddDDDL8z~DDĪUӨ+V5jy-+>P^-\ieeeee)Ʌɻ?Н@-aW]v-a |>?`b'r! ;vfmb֭[۵kwɓ'X,׮]ȧ=zԩS'6gϞ量 P1DEE ?z|oe.]ԹsgB݅)kMgBCCO:7ȑ#AAAl6;88ŋf]06Ьޤ JUWWO>;;;oٲdl+6ͳ Ƣd:f]m,?~Cl6[$-_ܬ8oڴQ L8zG/^8p wpp>}zII ͂YYY 4()) ɓ'C "ͦii/5TL297iq|ڵvvvׯ7vPf M%]WW\Q*)))ӦMϡüqF;wZ666SNY{;55u̘1+))s͛7M:v9w\8@}")zS}]~=11ٳgQQQum`㸤8XU\.7!g___.|ƍp8Oedd=Z(xaÆ=h9<~J%5٦{&ǏΜ9S |Wf ٳ̙P(th5:ujTTy6FYn ߹s}BǢvPIn̳ };w;w Eg]V^^>mڴ#F?>&&F*N4|1ze˖X2˽zL&ꫯBBBLill[ǏO7n,--|ɕ+Wȅ7lPPPq:Zɕ+W---'O\^^n^lݺÇ=*..k׮%wޣG0 <<ܼNNN&瓫SDX׾j9?Cnnn=HZz%cXidD"QFF8--`bK/+^p(E+SD[7JtPFyI-[F=doG&jb f $ Þ?>{A[nZZZw@fWzyyݻwf0 KOOׯ߉'h$h4cZml>9xzѣuܿ~~~O6;1f,4kRB]b׾NQ2XVmcA֖zDs2x,J URDZH$:zT*0L&>p!]h8=zu-Rnn+qMd>t=bӅPʼ$o؝ r}rHH͛7 9wk.>MRcXid kYlҚP]mcAښz.4Ƚ aaaǏ/..j֭ٳgP(,,,,,,2337kΝk֬&/ᅴѦSN]bEiiiIIɲet?wC\-))Yt)SZlDDDZ|ŊF2iϟ?w܌ F`,E|y@ЧO"))IVqh._|ڴi J2eʕ+bX,ֽA$c,JckkK\R];6ٳg&###""bĉӛt͘1`Æ 3gά]ew_111ǏcXEEEuJ{Obi.]Թsg:m7P(f̘󝝝u?!###"##ryK8`7m(&NH7khڭ[kѣ7yA6/:uJo#Glvppŋ&Ɉ>GkOVZې.8iɚ'wyE%&|p Z@s⥞zFFiXt̕f1@.4?]÷s0 Ǵ6f8lb 9l&3vB K[f˗WIж[h}k 9T_k6 |~YY9y_RNa_[WK4 ɒa&igvJm+?J*::#f0U>7;FGl7)e^o.Y8^X =7hL{rôʏ^~ba: 7IJ5V-8:;nΉG7CyY$gT*<$Jqe+Ĉو@hK9Fy2N j1G֞oWiN/3vʞ:[tc6fZG`+N9'OjҾiWB8kju, ^# ~WU!}2'# 2:Yh|V;ӖbYY;_?#`i⟤p=n?+`V`PueyueyZjR߾PTT95||jgQaQALKk7eK[TZb^f𯺲|diA+;!]̴Hevqc;-#c؈Q=+*WyJޒ^{d2WMUUU8y3}c ^߻жK됞oQ/tS0fc5m+)qt |ޡ)ݔ!ZY[[/[$99j>YUUU!K+;_Z[!?]wnῇ~!m;;ӧ M]J{VR:8k'>ը\=S]%%,{A<޹zFoWLsGmX,?;3߻v^V^RN ܸPUYN,iO_K&'ôZb]$vA?-y7Od$*UO\v Ǟ܏%cBtvMo2j  ϥe[+ .e+/3;ޞuo2&Ma:nRbnV׭˧Ϯ])ls'&ޱbUL{&mgPۿmNs&InVVxIDATL\vuP)M.w xwk􎮶ϦeK|}g ;kˮA.Y2ٷ~ߡ};b믿y8جT ?A8^]Q((#֍}#J&1 soh}qA?ݿ7b9fK6B]Ӥ./]gnZ?eT)+3hܐ \ ~fzwrWW1Y,R1X!]`eEuUAcFOY q05b YYwɃҢ}:-BH}RR>p{&sFNAh̴EBce+UfSV#VUJBĺO{4!"m3 &ue+ʈ 97hD\k6qxOM4eY/Ҳ2R[]1u7ٲˤwn^{,>?6bDL.](*qLUgTEӿZT(qqգ0k'(H~rsρ"@J~҅K年-1og*-\c{~Qkgԁ_ f川;܅B?erGGGU|"Xg.rvpww.]Q.Գ]lls2/=RhS)Z,$?dK FճwcWɪd[#ؽmKVhieW;{I<!Tܩתk[w,BU$U22땪 ]Ho_] @p7LQV{u(!]7^F_h"6S>O7\JM~?r_D666ۿR>suI%\k5z;[VU_fpkJyB˳Ip'> ˳8XlkjVN ,,T %S*(ѢR mMq-,-Ȥ++@btJHgo22cbrd骊2ە%.wM>}Z.nIQQh&@pj]G< qT8WUUˤV(UOOJ`0:vKz|ZYۡG5Mo8]hs6ժ9a\}Uw v@q9,FR񄌒s?3 Q~'laBJ?ncl.;?;\^hɈ䷷]LVPnIou F,6B`$- r," ]&t[IkWRȫ\i{!7TTRG{Y?d 2:Ma5B"nC`/.4F7W g(7əeo+R*++*eUe $I,6’QUd7=,Ҧ $ԽT5o*w.F0xV!&ĵںV*4D\&ʤriDҒbT[*+[GY'8ǩb/X+l[JU J!{VTXOIWTW"Tir+c<}aZ"DxRQ5BQzYAJXw%J9 c5fv/{s*NNG5555jRTը\X Vlb e҅x!ow8 ._Ex;?6ReZk`'::Z W4rZY].^7jiA=yᓬ)V(/iܿ~A:Zw쥩Q5goF59DK Y\e0GbX a,!h|2 Z1ן~8x%V`)V+*ZIUC9VVVx<. R'8!ԑ ШUJyeKK!`{P(d0B0jfņP*: =|Ssd>y&|[8v /Udl. F%Qɡ5Ao"cS@1 n6oG{Jc<B,&?'Vj6 qOrɅf5i Y+ʆBE}m`Q:$w)(לz>hOMs̮TڈfIK(d$VreY8V2-e/?;^/uJ6FKwyRkyQyE^PJ)!002Bqgc8Ւ=2դ @]]V d($<>88wq$e eLu:կwG"Xt4}5#skd(f2NuVgcr|Y w~iu=ifqQp|43RFPUʨ =8xr7nfjӧ>^{$MK+=s1M?vFQl_Ͽ}Ն++A3kw%Y=Yu>ًqF" \6Z y2m8M d(0_4X1t ɀoc0{vxBwP1dDDDt`8u2ٻ?ēØݾW?M@G9.Yu EًQ OfǏ9g? DzyAf-\~Hq.4ʹъL]g=W xoo9lve.,_(p . ??x 7diw0b?<{oSCbAC WgxD!jblqHj*W4:/@YL|[TJ-G?Ö ]2!}A0#rP-Žq}7_/@$!ke;cD09kAIY zvt;Pv>Diq -+6*“1"]d -+̮7#9;B^9Ix% uض s`Gf^d|'Oʾ5#!qxcNOQID&ݼQI4W5+Irsj=]nNIDe_Ҧ#.Xc7r3Ov%/bk2߇[NPEQSq7O/~r/\s3kJ&uo ,)ԇH<- hs6R+b5tp@hFxcbvt/oK??uڥ;-™O Pg~Wr`Ũ L"6j6'Eqhrsj}ZiH~ S̶8Sfõ1)& Pt f%ʼnoa{9DPTgU!"'D}]@T4kZGn7oR9>Z}P"47D(4MKxf%R]wqxb֛X| _OotrQ VQs2t㨩z->쪹~{:|PAG'QPwZ .#&DsHNopd>}r$6݉i::B!=\oqƱ6@[*b[?DiinD ? Kf!0Ox>&؇6ģb{t\7V8RjiNͩ yNNųI&Y5u,t8/ nh#&jb`\PĽE/GxAUv1R/i5Z=MC?17,ŏFqbG$Hh )&errp,vlթ o[fmC8DDtۓ ٍ{EPHXCv+.{-E"[ֿ p\)qVěE9ƐCII 󑙙i}B(6=}qDƍP!- yEڷkm )66{.FgM$L""""A!av1#r.6 5z@ph8CyVQ]Q!""Ü ]v3S_FnjprrJ2DDdb Ȟ?}uQXXWWVsKKKRbȖF1*ZGZWLh3T*\""?ċ3IENDB`pioneers-14.1/client/help/C/images/steal-from.png0000644000175000017500000000460511760646037016637 00000000000000PNG  IHDRb pHYsxa+StIME; $IDATxyTe۠`j9sl'\E.K (iѦbX`jiNhdYdc8(" 39.,AD .wPqD}}#@ F#b1b@1 F#@ Fb@1 F#@ F#b1b@1 F#b1b@1 F#@ &oߔ9j]sfooN^AԹ+1#LżUth9Wg%}"d0tSh= =,o?5e7gںL]CkPWj}p_4['jvmŘQrRRM.߶7םqza,zg^SnzxZ9hM}megV?ͳ1+i`dOu6Ͻcɗ6OUTXԈWul)plb>))$>@eٝ1՛+RrY̕zeZM&"5zk畎n^/!PQC5w}z<&N!݃#OKߨMKf(ptt|~Fd2Z|D)~Gc+TgA,%7*c]랶[F͟;\ݠuYڽe.D;PZlrޘi;[ko6={&ǿԨ_0ڸU[֨{;z(-G%w'L0{6fofU=ݳG[x?#VNs,ݱa|MEL}3o*k=[_ 6鉬KBưq61g ӛ+a-2Y[PS7o)oJ Xc)Hᓞװ>wuS@p/\pc~F}P|<>>?>-ܣ-/iu2}Ɲ=]}f(>Iu?EZFVG]k56,ݬ_;[tVQ[4͓$7Vڻkzz^c+ o1SzJ._OUO9~Yf椯Ш'=e%y4%mvT7]ZwFɳow-PcY]I:cdpGcz)Fz# 3c\]5[+k.QOP 7U-jpwKQKm,r+k0vyzӧ9v dѿAc)Ώmhnjy\jBlnwD$GGbVeLUOw2Xi'YɱBV]uޛحzzꚬ1!C+jTSqD'(eeΘUUNy©uLAtKg5EN|OzCG*͵4e6q-JM^5:[qXV{l1lb ,wwI؝ѾWW׵NPƴ1Mwc\GE/Q(u1=$AuQrM 9Gh SljSIF*wvX?ݿY935Y1+=ҿ#W~XXқ3U 94Q:io);L1~{xSCZha ]ҾT 4,*\QkO:vsҬ1C` Կ+%=GGhR *ܤ!z|?~kٓ)j\f4#;/DsuCZ&)͌'[ːpcKGx)8:VlJ3e*e*b1b@1 F#@ F#b1#@ F#b1b@1 F#@ Fb@1 F#@ F#bO(LHIENDB`pioneers-14.1/client/help/C/images/trade.png0000644000175000017500000007636711760646037015703 00000000000000PNG  IHDR}Ak pHYs+tIME,1>(@tEXtCommentCreated with The GIMPd%n IDATxwxT$$!BBҤWiJS / EEJ{(!JBzg5 )Jgfd3gFuWEpyQqTett8Z[0W4tBAEUlhx bhfB%-)?MmW #رQNrR|FԜ-ȵkMȴtc~r/U Bo +fU\b *ZTdf% `߸Kwt b+@:JkQKǑS:J:IAGgR!KW|QT=ĤdztD|!k/܋[WV~/wW%,XUh{xEXYYϝ9uΝ:b Cw˗`mm5+W,հͷ8:8`ddRy- ]T*=ʛ[~T|{ƼO5m[@_Ƶy{>a4Ҝ93(0_BY6vΜ9G~ppNnūã>vsa7""Vm:`fi^M-VU: B G/ڍ[*\rƽCN}iҪ:!11IÖсظ}x3*ߣ}xƏ$Fp7vG?[[[CC!vlyqOBlD[A4TԪ+/aUK17wƻ 1l~ճ9u| >E*2>2uL!/yGLl,sߛ>vL6`q&cǽY`^p PvωǾ>Kdk ȠzzzGhjpUk7@||>~}z [IQ*q>YG8%ڶi173IЕk3ڶa!88 oBG[A(G7V5hҢfm{pB?to֬Ƚ(lyaX^ެm|&Ow -^=0iתG2Te -U BSW:wҞ]k6H#W1aXy~-U5C& ,tVmZ^A*.YNtV6Ėg؂ B9{ѥSjRG [&Aîb~[6AîkVC P~.JA(=JvUGA)(r! $䡫  `  - "؂  `  - "؂  ` Be`eR4ב " Tgs)EvXٹp\dd:]pH7sEve%?ZYTJH?DS?qR}ShAC[}Ͽbia 翂}F6} 6uhY͘CJJcvҺ]gҾSw>y;_ˎVm;w_}mNw[jP^yu, ptǰ&_o-a\={Fnږ###qhGC͘CFF:nq%I #3SVMZɧ_zz:LSx}Bb"6#11I#mBb"^[DNNKQsx2n$RSS( j<\j˷<ۺ=t܃gΩڼqӯ(-\4mk{WUmWxF٭>S|fY6x~"؝ߓΐMfVGw݋g'اhHKKC3o[X>Μȁؼio3u,@s80.n 4wFD݋`{ o!:/ôs4ڮvӶȨ(Ο>ιS gv / OrY!qq\>Ҹ-+>$99NqΜ9X ss~q~73Avz._q% Xdyy6E]6y=vvx:C^!F GѦ-/\u*ǩg_\>XV\]6x~bժi`QBخc7o_KCG=56|V-M.xzzp`膕%7h9޹. Bٴ)PxTovMX6lļ+#xc$L^?.---qe;|07Wy4"*_~MV8;奍mw폔[6mx(Dt>M[>*F%D)M}?.DGǔZEkx!NCjѳG7>ʑ#w8 oqY6} w -b\E022NWۏAvv6'nnu]6cǿŸ7pyb#C sLOrXjHH(VK“^FY/k +4 |f>ߴ'sae>$Zy-+\zE rFJC{7 JVvP*>s@^G֯oo!w6cv033Ν'.xoBbccexi ,'dނ{Ab㉋yy~uLJJ _nނ4m3zf!(8lnc܄IO6RyU咒O/:zYXI# ^`c*rkT]]ֹA(+OO/geAA(V(ldUO2R/΅ʂ B lV~UEs&ӈ?]H TaVB|KceqlffJX긺ʼn;(W̨xڤK\]b#C9{(^37e cρ"Vv.O]Fqq5o{k7Ce^ O$Jeg=$BښY3rϿi6Xۻ>ͼ߰Mڿrŗ&[յԹSЯU3̠߭ӷO/_9ύx_^2@0 <v~b迟Ъճ/\X~߭[9;Ν޽xW,oHkkk/[#  WGz *8e~Fp=ӒrrrXl^TǓq&ZZeÏx ~m&&Ƙ3Q=MV^[\FF>g7L1 xG7R\=8x{`\-?J-إIիQsj V,ӈtX[X| l᛿퇭KZ((kL| o\e7kI||66֏&>>Ak;cX[[ccc͊eٽg_i'ɉuk?+ass3ޙ2kΖ½{w_ϤKQVm;r}֮^Y`€p녕 nWϘ/999Xw~ CCC""#iۡ:MZZEbiiALLccbb173NLL f:OqM>r.{ӲM~/P=lNɍ0Mrr nOzZ>lsޛϽ{$%%Eᎎw[/-%G=d .ƎqoF|&*Jާcɲ;_͖-.eҩ#;wy{ԱXWW=<CBB.zzjѼ7b͘#Xj]!qmݸY+N>Mcs^<ۦ=Ύűcl߹u>W&ioOH]͘HP0};|g̘>Zzz1G1mCM?MT%~i|s|))Yɧ̘>Uqㆬ9iiiDDD2c\ ; %66>AffܹzMVv6*e-M y+4MQ^6^QtYt!˗.,2 N֍UK`wNޞɓdϾqtJ2|Sǟl`Éģ^= JԫO~d`R߿~N^x]fu8ΔIyfyl/or&OH^/p}u-kcG=w> SbժI\dDC#RePݧѮk?tt*%_Er-+yypp]uP{YYtч3|<P&]Wx2rssm?uVKOO?^ˈWGөC;A(Wt ơ.lbcVʫ4o 7}gAD-J\U.:o*T˗ vԜԤD,+LK.9VqY_P' ` T4Ҫܽ\U.qggK>##ֵ'=A*7%8.'- %MLq3/㙙!& ]042'IggeK `<+pFA:4JAL'-T B@BY%os-A"]NIh-R=]zaic_ ؂ "58} y;%!_ttJjW{*&+5]=-Ke Pf߹3ҙ`i뀎^-ܠYN%V31J4j夠N} kPJN `W"163|M-_!2.26L&6L;ğcH#9OԭUOo7Oш;amWhAD% MG*SU8:+득CJ9rڏ@S]0 jʑ i2 ƂVX?x_lPq Bu|600Ze'IѸ}ꐚLVjelQ7S9dҏ}2ST:V\N Bd'Jd|”Rس* 9IwThxD$%%~bY9 ދw;ó'sz: sB+?*9i*+;ُge DDDJpH([OEǎZizVv.^uo 2*^^|n M4hX:-1=(N#7'=] '1!iJþY nT͈ K|@Z:DŸ'(%v #]2i3?JtBiWϔg͈DH ?6QPYMaBGT*]YWZ8k񁻨T*kym]qqa؊K,.Kc$&5Z>p0V.\amQY%lbYXy ن Lߧ=ML1"=EGGCZ( 6hHvN6^dffʹgSf/^>:%m}g@\5-u*qމ1#2)OHlL]ed[;'25g3sR %2)ddr.8mminJDRiYٚW6;Z$[ŅTÓ*ԛ z&(35TJ䍎`jødjR3Ve@o,;`ܬǵ|/0Gn潂v/]U+䈙f:ȱ[Z {"[O`&TO b!BIഴ &&7?{{e>Ϟ;Ϣ%˹{[򘡡!"eada}W󞒒?33DCu?/nm yʡy/De2-Uߞdrgې|9gL ]arw 8|4CZٲzXQBH s?p?7:9r g[OFVW'x!7SZ~R[Qz ͫUǓv?he׫ JZ״wUߙGϰ{YMfɢcRSѰ4/׾NG+7M>+*lO\̔8tSiI#qu$!) 89:ALl ɭ}a_C_&-Y4ȝ7)$ Oa+uJa 6'G2228s|1G@л,]BZ(z&`b {)(b1FI{Ɲ@.\ ޠQe65wB'~87:9rNR\ 5L:+3bҸ8;ǯXz-&66SZj?fނE;{{&Oz=?Ս=52Ђp 89`t KW-2btCt H⻓ UL@hDJ(x"4tݯooqn1)(}u\X.OQ >ߣ+o^fh*{ f/X%5" o,wnT7k֌[ѣ+7ndןh= _~Nuzޏ^E___k{iiiaooϪU4 ؐ6>>;;;aܹRvmNJJJyzxxpu֭[߯_ZTǏfffL0t -*0^BP/ΖB`ڵb݂%|SSS֭[N:Riiihۜ9W_ű퉋L[̜9 hqvvرcp<==BP(PTѻwo%;;OOOlk777YfDFF>??mXr%k֬a7oooFEqrrȑ#xzzO (6a ic+<<GG"G뭨X|x5j 'OV?LJh:uKBYڂIW3q2iӧCLL ӦMcȑnAV,j-G{\=5n)?U[nѢ.]* : ;sUl-iذa,Yccc\]]iܸ1=\|||:u*f8ұcGzAڵ9r$.N޽R Éw8˖-<</f 0@cUjv)S'ט*Ղ BMl VI BUl~SA*T  `JU(UVxR// `HLIMJ|S0252uVuFnXhzW/AAJш;S!v*ĸn߸G*Qcƌa9r#GpBvZeD{̜9k?mJѣGquuѕ*({,W)7xp9E[PRM1r [l>̌IJJlٲ>tkxnDOR=uy֬Y_ `?]dd[Jɿg'&&ҥKsvٳeGXeMbR1'&&l?b K߾}[D>j+p !s ;=Z{ڵ GGGڷo@PPزvAa!=====AdP4k֌[ѣ+7ndןh= _~Nuzޏ^E___4^ugժUu ؐ=l||[_~?333̘0a[Txa<>B^-BڵkqqqAYjQzlA {^}|r!!&UXv3ݚ4Q0n8\Ž۰t2"]X"q$%%/'Nx,%C aӦM7mȑ#`\p/!s)0޽{s1˜2eZ=J>}7ov /*J]Μŋ<46JRo4ؾyxYɬ H { ;LOJJpaLMM[.nݚ:uTH=ѢmsFC\9~Ƕ'.2n2s,tt߅ٙcǎ1͝;wT Ig~~~ݛtuuS=͍?///h֬??m6V\ɚ5kX|9ƍۛQFѿ8rӽ{w /jܣa ѱк,ԛ TWv|/z&ϰI0c" EjrOz8Kܵ6zClR#ݻ={C{Y Ю#!ty3YЫCN.M>S"Ըpss+0^ hܸ1wۛ]vѾ}{\]]AbAtޝ)S_|Wjzx#NTT𒠍ĺ6JRo4"]$%K=&XXc\R EGW^Zz5 (rVX[oUCWfDߍ}g++-;;;BBBB\h\.\7֭cÆ 0N:SyΎ;044^`۷zadd.[PPv`` e/*Jc$&O# sgu@OO]rci@F|Fyʼnu~ƌ^岰u6cnL_ +Ç3c bcceիɬ_cccZh8q"&L l|}}>|x5j 'OV?LJh:uKBY*֛ ` r?9c_"܂J-hтK.{Jdžp*4lذTv,Y14nܘ{Ik>>>L:Yfiwر#=zvڌ9jwDEEiDFFһwoue˖agg8::tRKBY*֛ >{<;m#S{>g7L1Giq՝&϶]jS׳ )2  ]gѴiS*OǏ/W^=,~g._Jlll`=O9s\q{`V9w8a,_^qO1[JA~Dy!!!tڕ |||000`ƍEy==] Ϯp9̚Ιy;mwEbb[$!!L~ܱ "&&:u\uuBRB,7ūi+ kKA.[~(6mZi i@޳歵ܲe ܼ}}u85wyX[[i4έkhLkLL- `Qĉٸq#;wVS\=VҡC;:o?{7^;^4@NxhoФeMͥ `a0=qDo^42б}`oߎ ƼfcccM˶hٶv?w՝ kd?Ƀ8OɮeWTϵ׹Onn -M hDJ( R8k?׮㵫 S\xu_$zT6>sDŢWD F LF/P[`URcByφmRDVv6:dBʩNw*DcbbXr%K.a7ndرvR(T 7mAt6WN<è>99=|w)r?`7h 4kL-A_ēoDA( $""{!59Hʽ}ؾyxTVDt).J&ƾDiacgI9T*;v$0(x\BzzQV-~ڹW cĉǎᳩ3\efrņ-~[b~'O-F͍?///h֬...W/(BAxx8уpssS{[\5|ѻ0]'#SWJuƽht qFnN.z:NbBiiDܽO?#033+:t/bk="#N@C3KIРARݔT*y7tZYFDD>ag/22u몏Kb;?ɓ'3g.]%η$u&5H0+JjP*hؠ!9'zIjj*NҒ gϒUneٿ?6n۹.gCkɟp~R CAW}[gϞSprr*Fqq ,.={{{ԞnPPPaXf }Ԕ-I BMGa eBff&W^ގ^^4j]s$( _Ld=T*z::[y=s}nDFpŞd׮]Dk;͕+W(ggg:v?-;aחÇ:SL!,,D v͹uV1ӧCtt4>>>E^[Ayxs1a-I  Xu+FX[[;r'IG&ݓNR. {E+C@%r⺀ ޫCā^B]@g:ҕ? mNy^ys3 >'yNQ3q92!#=B:?Vd&H$Mıwyq>tR *(UPT_|[n,Y СCakk)S`ܸq3+.] 00~~pBұ^Wm͎ۨ;ꫯ>( n}ꌨc&R)[tbmNgYYYv:2 swGAQRܼ\^#}ٳ[n`/QmZh4Q^%Az7xxx@ӡ.^DyQ\`gcr$'@7d/ٷ{xxxAD Ƅ HNEPH'8H\|1N|$'Bda 'Ŏ] C  tmwDtt4֮]/1a&Iq ̽Y' RХVSnnn:d_|ݞJ_ "z tJwj!B%(U2DDLdzGK=tٗzIO,+a Blh}V>c΢VuRw_ȳ3u""zVb+pL`""N$_Se5_~^6n%" VɁ v}xn%7Ne}ŞiUpQ1+PX^ )Sml~_t>4'O]{ѫ xtࡏ#uu|fEvO@([UE~Fw",+C0}Lls'խ7d~ѐy" xp1aop#*& L~|R0vh_ؠ̟'O~ų'6mc\tGF ۈr]#bAjԸ~WDDL%¦y{̘lX`K ʬYd2d2֬~ F?/waݚ򄽽=V,_{ Ȥ-7#p!NOF`h`"vpI\ M7K3:MV5x>у^%poр 63n D-ka[XX\9Q8=^􌌛pu?3gg_-y." xg0} E_y7}rdffakK倗 yr9rJLx).FJjj5]3[E⯞GYY t:-*+THKgDDLpIܜ2Rw/x'aF9>}z!z0t .^7w, OO@f#[E2w_>GQDǨ<ډz M T`V2u16hJN8zİ ?giw߿2:1ol̛;dސ{%"b6Z`ћYcDDD9a*X[DDD-&""bn*B6v:m'""&v%E?wqa""&l2G@p/P,-mNBy.# 8 "zY D(&ǡ좢ɓP #C$2DDLd;Gx9; EDDLĄIDD-a1a661a661a661a1a7/-~`e?(,,>w7 ]_4{26FQKyr959yx`ápYlٺٓemMLDD03u!%5 +X:dpKWs󳲲oBaӖmg<|:s>Mtr;wE~'3gw?_|'?׬CdCǙxFQ%?xrHW,qvhg{} FIooX>}z#%1 VlڲQSرu1wkyK8O u(""j-˫ZRZ[u<w} ̘grK-F  Wm/]R>zoiÇ ""&aonnu6sy/gg'p9 x aۙY}͸yQ`iYu/wg2`=*G(n""foa?qR{뽁wُ]{L;\r +73%MDD {k"2"7l?Yh4HK73~1|ؽ>ckPT@II |K|Kn>̺$;M[QYY {t@Ν@(iS[̙\ڞX~]a-F޽0嗚>aඉC{ݓϼRk:nLza+{37Y=DDD661a1a61a1a6`4>J٢۷3DDLdNBzJ®>G]q""z[ Ĝ2wÖgg 9 bfLǒeo,Q9s-[1LDD>vC[W3g.:f߷_[m""j-l+g B.3y,^nDQ`'fjcFڤz Ҁemkk}zaMfocWbpWXcFS2mAm^DDL؆핋cP2u1gږ>k~ k~rnn6,&g""&l3Z,zs=k5'RkyDDDLRBhuf߮VmDDĄ.9:ٷ[\X;Gg (6KK[ӢPĸ`B$"(4 q(h-a(8I 6vmG?61aQ oDDDLDDDxI TݾA "b&sf~nSQhW QT GrB,B:A䣏iuZ#9!" KEDĄMHMCpXgHdͲ=7O,.2DDv:kB;5* ""&l2GK=:BDDMKJez>LDDl [ bGs5a 붘12-A yv#LDD+a |) |?YYC⴩xlؐØ9?`XDD=Z6U&33 #FL&ÁEFJ"Μ%^-B`<2i[~{ Ȥp#0ji/NZkʷŁUx6e5FDDԚvyEDDBq81i]#Ǹx29 c5(]#%%̓X,͛M~~\]e5ʐ_`0U+ r/waݚ򄽽=V,_3DDPG9s&ku!HOOVEb0p̬,\=Qja`ӦM7Y6 1}ᑁuwsÕg п^.'""j [(|͛1h U~ǿ6}KP\\%`ѲS+/\4j]3f2DD[صݻw׫LuAzN|wDt=ؿ+-;w, OO@f#`?r@/vDDФrq [ƘȈp_ȳ3ji 1ol̛;`1a`ћYcDDD9a*X[DDD-&""bn*B6v:~y""b&QRT-.,3@DĄM@ResiQ(EbyG0DD! VAsH8]T4y upD`h$R aco;Gx٣ 07l"""&l"""j $T*enZ 1a9 3?7 )(Q4w{u@DĄM(*#9!A! qiǴ:-  %o""b&s&!83$2fٞ'DVHMC^" ;5RE!읚Pg J 6R!"g%qa=bX&""j- Z9ŹJ}!`ĉ!O`ź-f-rq =h6 + i=?JBXDW>PĞ;?~9SF•sP &"b®]㽄TX |ozLo%?}@dax1a߷2yvٯ|YhZ9s/ ܵS&Oҷ罺R ZuDV Ņ@DĄ-dž ˗WOţ3,\dž ٓpcy֬}W>S6ppvLDĄ}_m@ XKK <5IgWqY=0nXZVX-d2ʰU0)).XwLDĄ}߂ Tg'OĮPQY"PUT`}xvDyCnnEyv4¢z֞g0vӶ S$ߪ{t/IIDATѣ bkk|pu!=}iiɤffBs DDLص,(f:DG Aƍeo V@N _%;Gg6v `[<HByn:- H;!d*h|N)B&OB "%"b&9-}'"b&&L""j /7J٢۷3DDLdNBzJc΢VuRw_ȳ3u""z@XnKcΝ5kV.ї!""fJB755#F@BB"##*q+-Ņ,,uENODD= FD[6YVZ|{91:8ZV } -ZRRb0o…~:֬YEZFI}gE^ACqܵ O 8]7XLJoFXd7bμPUTi4~g-"?g48V/6 QzC׬ ',,-!_Jy v--[ ** cǎa>|8,Ybv11<7b̔᧟7w!%1cnj y'\<{yXn~>Kqa_+W1(=ryY-4F[7 qqLDĄ}_®ZNKKyA,cF4ףּlll3c:JJJai/]6(f[ddX-/܅ukVX|:lPU+ ПǏp;=Q<ډzt:J1113g"00htyH$666NSe| ?gfeO`W <<[4`FHvQ=,&"b rLL 6mڤ<|e Jȸ WW\<yvՒ" x1a߷Pd9&&7oƠAlV Ǜ>Ayy923൥r\<yr9^c%&<~ #%5 jq׮c"PWϣ:*%] `""&Z˵ݻw׫5^{Oэr}Baڣ$.,]P?oYۻƍ ̈ѣG@Ie|'~9'R]Q=yV.A}ؠ):_/<Ѳ}" ļ1ozoS{C3 T [Eog]^`m> V@N剈 LstFIQ]\X;Gg (6KK[ӢPĸ`B$"(4 q(h-a(8I 6vmG?61aQ oDDDLDDDĄMDDĄMDDDLDDDĄMDDĄMDDDLDDDdST*k f%]^dpN(^~Ave(*@xDtDB! Z)Vɸ|$:FuBDDDt tZ-45ks @PYn&±KoVQ{He%Epz@VCӱ'+R/"Kt Ш+YcmP(`OZ-k aat1)St:t&9EeO_]/^'"jw-d(AG}eayWV@K(BQ px_^P)ˠQW4Z*x" 9gWGtsmowb6Cx&"jw [bgvFޏB9oԕ'۪mZP4Zeر+zFPdipWlvx%EMc t-%1r(KDTReY)C<:;»U1narh2z2-Cvf:=! e#x(e2zr- e9*ps*817Z ~9Fӌ˽}~߫7/v hj<|1DU!FҵK(/+ B"6Q;ѨOˆOPByӓʲb?(>O'7$B 0W&1Sfa̔YwF%Tg0ɿ@]Fڍk-/IZERNr2oJl_wۗҒP\TaOaSa%AJRwt ]i8|*,,'s ;{'T)WՋH(FE"u%B"A(LDNINkK++T*j\Ps'XQm1E}ݪWQ+Kj5*WR%:OFRpUJ%,,-!MN3k_/ROk ʲt = %B"AeeU-wɘQ;kas[] Azr⯜V#!uDyaQ=q(/-}7u]ryQHşN»Ceu:kGx gV!Y׀pqBiq!t: SO$\س?(977/B{VWbIq;=O 6vכ W/DYI1lѩ{4 0nL{&r;6|E*\1x3PUh]dDVZ Uұ5Ķ Ej5PAlEA`%Z߯<66{Z]Byy>s[Wu"m! {D" !Yz Zl+->YmaimSU75T2TV(VbX US$^\׀<ӉK ۔_5W %EV'0c <e ѨQVR+@!.SȯLJY eP)k/TY'o""b®u=2b<&WS$jSdc` AqQ^zEDN3zz(+I[A<76QLZ ZQJBZƀ"ԺjNDDw¶wB4ٳeI lXT*+JUۉUw@RCG::BZ3-t(S(Njr7q1dg2ZPzƪƪA I=K僖[5@;vBMtF PDjwKkkx1Vm,V NO_؀8Dԉ) Z>rB;CRԉ6Jjo hO{6JDDBwy핬VB$C+&l"jtB:N|+&l"jtB:NxjEI@P d`[BphK:}|Zsl\jsj㘧4=Phzm&>+[{&Yjc0&l"z vIS7wo{aSqV X;xUgSRk۷15gK[ȄMDM*]K`۶Xv oM`rd=OkHN1Oƨ'"!1YWPZ\`jOgAbńMD*ȏ?/̀?J,Y:?جyoX !yOCII~puB˳cj9H}_w֬Wfa SL{a*͝5XgUT0k\xx̃Ri|_LOR}$ؾ g7˗ck]g~pvqCxdg| kl=ٷ>ބЎwtbgzzrsseT*^Ww/t |-/Wŗ^֯k=]b&nai|mݺ13:fLlf05kw  ׮\ĭ[͚…8qW&'@,c+'pq^DNNVPȯj)ױGg&N1olFjVZL^<"##Vmt_LWa*gl;v ?=ne`1{Z>#˗-Et!>}Ξ=~EI0ad̞HMGhp/y]_fw؋8u~h~Z6E \r gNlj'nZkwl=̋Ɍ /_JURRS1xpB,RBXD~;pؼ.o#$$> %)e"(0\u)ɲ.WfZ s\Wia:Ĥdzb _KB_l+;SstʹdH$UȲrxzZaQ?<9z4jlzgstAR|<==,SV^.H;?7ѵ{oHH!t$߸]{c/a[̍( ^8K$666Pյ.?EAԹ;?{xzL;y479r^s ΍h~fgWϬ-VLD4M\S+Wp5Jוŗ;,W:<ݑZ:LKv`Ņy2Rj%;<ݻԘ{<2hrKjJ*\]eF璸9gqI=uŞ]_"F6s^gzqIeT̘(.CԪew^nHKM3zI>"==cL2oz?=,Cnnrs⥘0ibsbTE\Jt:՚fnybX[[#5- _o0s#77,k&^rrK-o6=X [(g䖕۶cΛ>m*nN%_CXh(_ؼW罂~}`ჩf'FܦӯoN]"KΙ c qaE'Koދ>}|!x`UjQ]{ kxxxˌ33S2u[Sy-WѣFٿ nx͕ؾu1w?k+dpŨcѷOo/[ g''GvA~8 c0__ ;;;t茞}W4.S#=_m_^ eYGgY%FTQQ`Vy Oya'NƕKp,q"z 挞,3V#'Ԧfee-?ƤS0hߡ[y|4Vm-F-aXx!T ,[=ѾKLD@ªL٨0q{&cS[HskXk|dNi RQ#KUoNJ ?a j5v 2[5VALm!VmK3jġb&F'3>5@jk\gFщD"hh5LZ] HXX1aQp;-N+).C"c`хus'ѵ7qx\$"Gƪ Ɗ ]z#Z, ձ'qK pp Ko6+&l"jA gEBXX1aQGC5BkU@DDĄMDDDLDDDLDDDĄMDDDDPuDDD7ܥJZ:IENDB`pioneers-14.1/client/Makefile.am0000644000175000017500000000200610462166770013525 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA include client/common/Makefile.am include client/ai/Makefile.am if HAVE_SCROLLKEEPER include client/help/Makefile.am endif if HAVE_GNOME include client/gtk/Makefile.am endif pioneers-14.1/client/callback.h0000644000175000017500000004050511575444700013402 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003,2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _callback_h #define _callback_h /* this function should be defined by the frontend. */ void frontend_set_callbacks(void); /* this file should only include what the frontend needs, to prevent the * frontend's namespace to be too full. Especially client.h should not * be included. Any function a frontend may need should be declared here, * not in client.h */ #include /* for gboolean, and probably many other things */ #include "map.h" /* for Edge, Node and Hex */ #include "game.h" /* for DevelType */ #include "authors.h" /* defines AUTHORLIST, as a char **, NULL-ended */ #include "cards.h" /* types */ typedef enum { STAT_SETTLEMENTS, STAT_CITIES, STAT_CITY_WALLS, STAT_LARGEST_ARMY, STAT_LONGEST_ROAD, STAT_CHAPEL, STAT_UNIVERSITY, STAT_GOVERNORS_HOUSE, STAT_LIBRARY, STAT_MARKET, STAT_SOLDIERS, STAT_RESOURCES, STAT_DEVELOPMENT } StatisticType; typedef struct { gchar *name; gchar *style; gint statistics[STAT_DEVELOPMENT + 1]; GList *points; /* bonus points from special actions */ } Player; typedef struct { gchar *name; gchar *style; gint num; } Spectator; enum callback_mode { MODE_INIT, /* not connected */ MODE_WAIT_TURN, /* wait for your turn */ MODE_SETUP, /* do a setup */ MODE_TURN, /* your turn */ MODE_ROBBER, /* place robber */ MODE_ROB, /* select a building/ship to rob */ MODE_MONOPOLY, /* choose monopoly resource */ MODE_MONOPOLY_RESPONSE, /* chosen monopoly resource, waiting */ MODE_PLENTY, /* choose year of plenty resources */ MODE_PLENTY_RESPONSE, /* chosen year of plenty resources, waiting */ MODE_ROAD_BUILD, /* build two roads/ships/bridges */ MODE_DOMESTIC, /* called for quotes */ MODE_QUOTE, /* got a call for quotes */ MODE_DISCARD, /* discard resources */ MODE_DISCARD_WAIT, /* wait for others discarding resources */ MODE_GOLD, /* choose gold */ MODE_GOLD_WAIT, /* wait for others choosing gold */ MODE_GAME_OVER /* the game is over, nothing can be done */ }; /* functions to be implemented by front ends */ struct callbacks { /* This function is called when the client is initializing. The * frontend should initialize its libraries and use the command * line for the default commands. */ void (*init_glib_et_al) (int argc, char **argv); /* This function is called when the client is initialized. The * frontend should initialize itself now and process its own * command line options. */ void (*init) (void); /* Allows the frontend to show a message considering the network * status, probably in the status bar */ void (*network_status) (const gchar * description); /* playing instructions. conventionally shown in the "development * panel", but they can of course be put anywhere */ void (*instructions) (const gchar * message); /* Message if client is waiting for network. If it is, it may be * a good idea to disable all user controls and put a message in the * status bar. */ void (*network_wait) (gboolean is_waiting); /* we are in mode_offline, do something (probably call cb_connect). * This function is called every time the mode is entered, which is * at the start of the game and after every network event (after a * failed connect, that is) */ void (*offline) (void); /* some people must discard resources. this hook allows the frontend * to prepare for it. */ void (*discard) (void); /* add a player to the list of players who must discard. Note that * if player_num == my_player_num (), the frontend is supposed to * call cb_discard. */ void (*discard_add) (gint player_num, gint discard_num); /* a player discarded resources */ void (*discard_remove) (gint player_num); /* discard mode is finished. */ void (*discard_done) (void); /* starting gold distribution */ void (*gold) (void); /* someone is added to the list of receiving players. No special * reaction is required if player_num == my_player_num () */ void (*gold_add) (gint player_num, gint gold_num); /* someone chose gold resources */ void (*gold_remove) (gint player_num, gint * resources); /* You must choose the resources for your gold. */ void (*gold_choose) (gint gold_num, const gint * bank); /* all players chose their gold, the game continues. */ void (*gold_done) (void); /* the game is over, someone won. */ void (*game_over) (gint player_num, gint points); /* The game is about to (re)start, nothing is known about the new game */ void (*init_game) (void); /* The game is about to start, all rules are known. */ void (*start_game) (void); /* You must setup. Num_* is the number of settlements/roads that * should still be built. */ void (*setup) (unsigned num_settlements, unsigned num_roads); /* Someone did a call for quotes */ void (*quote) (gint player_num, gint * they_supply, gint * they_receive); /* you played a roadbuilding development card, so start building. */ void (*roadbuilding) (gint num_roads); /* choose your monopoly. */ void (*monopoly) (void); /* choose the resources for your year of plenty. */ void (*plenty) (const gint * bank); /* it's your turn, do something */ void (*turn) (void); /* it's someone else's turn */ void (*player_turn) (gint player_num); /* you're trading */ void (*trade) (void); /* while you're trading, someone else rejects the trade */ void (*trade_player_end) (gint player_num); /* while you're trading, someone else offers you a quote */ void (*trade_add_quote) (gint player_num, gint quote_num, const gint * they_supply, const gint * they_receive); /* while you're trading, someone revokes a quote */ void (*trade_remove_quote) (gint player_num, gint quote_num); /* you're trading, and a trade has just been performed. */ void (*trade_domestic) (gint partner_num, gint quote_num, const gint * we_supply, const gint * we_receive); /* you're trading, and a trade has just been performed. */ void (*trade_maritime) (gint ratio, Resource we_supply, Resource we_receive); /* while someone else is trading, a player rejects the trade */ void (*quote_player_end) (gint player_num); /* while someone else is trading, a player makes a quote */ void (*quote_add) (gint player_num, gint quote_num, const gint * they_supply, const gint * they_receive); /* while someone else is trading, a player revokes a quote */ void (*quote_remove) (gint player_num, gint quote_num); /* someone else makes a call for quotes. This is an initialization * callback, it is only called once. After that, quote is called * for every call for quotes (at least once, immediately after this * function returns. quote can be called more times, until quote_end * is called, which marks the end of the trading session. */ void (*quote_start) (void); /* someone else finishes trading */ void (*quote_end) (void); /* you rejected the trade, now you're monitoring it */ void (*quote_monitor) (void); /* while someone else is trading, a quote is accepted. */ void (*quote_trade) (gint player_num, gint partner_num, gint quote_num, const gint * they_supply, const gint * they_receive); /* the dice have been rolled */ void (*rolled_dice) (gint die1, gint die2, gint player_num); /* An edge changed, it should be drawn */ void (*draw_edge) (Edge * edge); /* A node changed, it should be drawn */ void (*draw_node) (Node * node); /* You bought a development card */ void (*bought_develop) (DevelType type); /* someone played a development card */ void (*played_develop) (gint player_num, gint card_idx, DevelType type); /* Something happened to your resources. The frontend should not * apply the change. When this function is called, the value is * already changed. */ void (*resource_change) (Resource type, gint num); /* a hex has changed, it should be drawn. */ void (*draw_hex) (Hex * hex); /* something happened to your pieces stock (ships, roads, etc.) */ void (*update_stock) (void); /* You should move the robber or pirate */ void (*robber) (void); /* Someone moved the robber */ void (*robber_moved) (Hex * old, Hex * new); /* You should steal something from a building */ void (*steal_building) (void); /* The robber placement has finished, continue normally */ void (*robber_done) (void); /* You should steal something from a ship */ void (*steal_ship) (void); /* Someone has been robbed. The frontend should allow player_num to * be negative, meaning noone was robbed. This is not implemented * yet. */ void (*player_robbed) (gint robber_num, gint victim_num, Resource resource); /* The dice have been rolled, and resources are being distributed. * This is called once for every player receiving resources. The * frontend should also be able to handle players not getting any * resources, because it may be called for all players in the future * The value of the resources has already been updated, and there has * been a call to resource_change when this is called. * If resources is different from wanted, the player should have * received resources, but the bank was empty. */ void (*get_rolled_resources) (gint player_num, const gint * resources, const gint * wanted); /* Something happened to someones stats. As with resource_change, * the value must not be updated by the frontend, it has already been * done by the client. */ void (*new_statistics) (gint player_num, StatisticType type, gint num); /* Something happened to someones special points. As with * resource_change, the value must not be updated by the frontend, * it has already been done by the client. */ void (*new_points) (gint player_num, Points * points, gboolean added); /* a spectator changed his/her name */ void (*spectator_name) (gint spectator_num, const gchar * name); /* a player changed his/her name */ void (*player_name) (gint player_num, const gchar * name); /* a player changed his/her style */ void (*player_style) (gint player_num, const gchar * style); /* a player left the game */ void (*player_quit) (gint player_num); /* a spectator left the game */ void (*spectator_quit) (gint player_num); /* respond to incoming chat messages */ void (*incoming_chat) (gint player_num, const gchar * chat); /* something changed in the bank. */ void (*new_bank) (const gint * new_bank); /* some communication error occurred, and it has already been logged */ void (*error) (const gchar * message); /* get the map */ Map *(*get_map) (void); /* set the map */ void (*set_map) (Map * map); /* mainloop. This is initialized to run the glib main loop. It can * be overridden */ void (*mainloop) (void); /* exit the main loop. The program will then quit. This is * initialized to quit the main loop. It should be overridden if * mainloop is. */ void (*quit) (void); }; extern struct callbacks callbacks; extern enum callback_mode callback_mode; /* It seems this should be part of the gui, but it is in fact part of the log, * which is in common, and included by the client, not the gui. */ extern gboolean color_chat_enabled; /* functions for use by front ends */ /* these functions do things for the frontends, they should be used to make * changes to the board, etc. The frontend should NEVER touch any game * structures directly (except for reading). */ void cb_connect(const gchar * server, const gchar * port, gboolean spectator); void cb_disconnect(void); void cb_roll(void); void cb_build_road(const Edge * edge); void cb_build_ship(const Edge * edge); void cb_build_bridge(const Edge * edge); void cb_move_ship(const Edge * from, const Edge * to); void cb_build_settlement(const Node * node); void cb_build_city(const Node * node); void cb_build_city_wall(const Node * node); void cb_buy_develop(void); void cb_play_develop(int card); void cb_undo(void); void cb_maritime(gint ratio, Resource supply, Resource receive); void cb_domestic(const gint * supply, const gint * receive); void cb_end_turn(void); void cb_place_robber(const Hex * hex); void cb_rob(gint victim_num); void cb_choose_monopoly(gint resource); void cb_choose_plenty(gint * resources); void cb_trade(gint player, gint quote, const gint * supply, const gint * receive); void cb_end_trade(void); void cb_quote(gint num, const gint * supply, const gint * receive); void cb_delete_quote(gint num); void cb_end_quote(void); void cb_chat(const gchar * text); void cb_name_change(const gchar * name); void cb_style_change(const gchar * name); void cb_discard(const gint * resources); void cb_choose_gold(const gint * resources); /* check functions used by front ends and internally */ /* these functions don't change anything in the program, they are used to get * information about the current state of the game. */ gboolean have_rolled_dice(void); gboolean can_buy_develop(void); gboolean can_play_develop(int card); gboolean can_play_any_develop(void); Player *player_get(gint num); gboolean player_is_spectator(gint num); Spectator *spectator_get(gint num); const gchar *player_name(gint player_num, gboolean word_caps); gint player_get_score(gint player_num); gint my_player_num(void); const gchar *my_player_name(void); gboolean my_player_spectator(void); const gchar *my_player_style(void); const gchar *player_get_style(gint player_num); void player_set_style(gint player_num, const gchar * style); gint num_players(void); gint current_player(void); /** Find the player or spectator with name * @param name The name to search for * @return the player/spectator number or -1 if the name was not found */ gint find_player_by_name(const gchar * name); gint build_count_edges(void); gint build_count_settlements(void); gint build_count(BuildType type); gint stock_num_roads(void); gint stock_num_ships(void); gint stock_num_bridges(void); gint stock_num_settlements(void); gint stock_num_cities(void); gint stock_num_city_walls(void); gint stock_num_develop(void); gint resource_asset(Resource which); gint resource_count(const gint * resources); gint resource_total(void); void resource_format_type(gchar * buffer, const gint * resources); const gchar *resource_name(Resource which, gboolean capital); gint game_resources(void); gint game_victory_points(void); gint stat_get_vp_value(StatisticType type); gboolean is_setup_double(void); gint turn_num(void); gboolean can_trade_domestic(void); gboolean can_trade_maritime(void); gboolean can_undo(void); gboolean can_move_ship(const Edge * from, const Edge * to); gboolean road_building_can_build_road(void); gboolean road_building_can_build_ship(void); gboolean road_building_can_build_bridge(void); gboolean road_building_can_finish(void); gboolean turn_can_build_road(void); gboolean turn_can_build_ship(void); gboolean turn_can_move_ship(void); gboolean turn_can_build_bridge(void); gboolean turn_can_build_settlement(void); gboolean turn_can_build_city(void); gboolean turn_can_build_city_wall(void); gboolean turn_can_trade(void); gboolean turn_can_finish(void); gboolean can_afford(const gint * cost); gboolean setup_can_build_road(void); gboolean setup_can_build_ship(void); gboolean setup_can_build_bridge(void); gboolean setup_can_build_settlement(void); gboolean setup_can_finish(void); gboolean setup_check_road(const Edge * edge); gboolean setup_check_ship(const Edge * edge); gboolean setup_check_bridge(const Edge * edge); gboolean setup_check_settlement(const Node * node); gboolean have_ships(void); gboolean have_bridges(void); gboolean have_city_walls(void); const GameParams *get_game_params(void); int pirate_count_victims(const Hex * hex, gint * victim_list); int robber_count_victims(const Hex * hex, gint * victim_list); const gint *get_bank(void); const DevelDeck *get_devel_deck(void); /** Returns instructions for the user */ const gchar *road_building_message(gint build_amount); #endif pioneers-14.1/common/0000755000175000017500000000000011760646033011562 500000000000000pioneers-14.1/common/gtk/0000755000175000017500000000000011760646033012347 500000000000000pioneers-14.1/common/gtk/Makefile.am0000644000175000017500000000413011712461037014315 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA noinst_LIBRARIES += libpioneers_gtk.a libpioneers_gtk_a_CPPFLAGS = $(gtk_cflags) libpioneers_gtk_a_SOURCES = \ common/gtk/aboutbox.c \ common/gtk/aboutbox.h \ common/gtk/colors.c \ common/gtk/colors.h \ common/gtk/common_gtk.c \ common/gtk/common_gtk.h \ common/gtk/config-gnome.c \ common/gtk/config-gnome.h \ common/gtk/game-rules.c \ common/gtk/game-rules.h \ common/gtk/game-settings.c \ common/gtk/game-settings.h \ common/gtk/gtkbugs.c \ common/gtk/gtkbugs.h \ common/gtk/gtkcompat.h \ common/gtk/guimap.c \ common/gtk/guimap.h \ common/gtk/metaserver.c \ common/gtk/metaserver.h \ common/gtk/player-icon.c \ common/gtk/player-icon.h \ common/gtk/polygon.c \ common/gtk/polygon.h \ common/gtk/scrollable-text-view.gob \ common/gtk/scrollable-text-view.gob.stamp \ common/gtk/scrollable-text-view.c \ common/gtk/scrollable-text-view.h \ common/gtk/select-game.c \ common/gtk/select-game.h \ common/gtk/theme.c \ common/gtk/theme.h BUILT_SOURCES += \ common/gtk/scrollable-text-view.gob.stamp \ common/gtk/scrollable-text-view.c \ common/gtk/scrollable-text-view.h MAINTAINERCLEANFILES += \ common/gtk/scrollable-text-view.gob.stamp \ common/gtk/scrollable-text-view.c \ common/gtk/scrollable-text-view.h pioneers-14.1/common/gtk/aboutbox.c0000644000175000017500000001121511656052403014252 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2005 Brian Wellington * Copyright (C) 2005 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* * Common code for displaying an about box. * */ #include "config.h" #include #include #include "aboutbox.h" #include "game.h" #include "version.h" static GtkWidget *about = NULL; /* The about window */ void aboutbox_display(const gchar * title, const gchar ** authors) { GtkWidget *splash = NULL, *view = NULL; GtkTextBuffer *buffer = NULL; GtkTextIter iter; gchar *imagefile = NULL; gint i; if (about != NULL) { gtk_window_present(GTK_WINDOW(about)); return; } about = gtk_dialog_new_with_buttons(title, NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); g_signal_connect_swapped(about, "response", G_CALLBACK(gtk_widget_destroy), about); g_signal_connect(G_OBJECT(about), "destroy", G_CALLBACK(gtk_widget_destroyed), &about); imagefile = g_build_filename(DATADIR, "pixmaps", "pioneers", "splash.png", NULL); splash = gtk_image_new_from_file(imagefile); g_free(imagefile); gtk_box_pack_start(GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(about))), splash, FALSE, FALSE, 0); buffer = gtk_text_buffer_new(NULL); gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_create_tag(buffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_insert(buffer, &iter, _("Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n"), -1); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, _("Version:"), -1, "bold", NULL); gtk_text_buffer_insert(buffer, &iter, " ", -1); gtk_text_buffer_insert(buffer, &iter, FULL_VERSION, -1); gtk_text_buffer_insert(buffer, &iter, "\n", -1); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, _("Homepage:"), -1, "bold", NULL); gtk_text_buffer_insert(buffer, &iter, " http://pio.sourceforge.net\n", -1); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, _("Authors:"), -1, "bold", NULL); gtk_text_buffer_insert(buffer, &iter, "\n", -1); for (i = 0; authors[i] != NULL; i++) { if (i != 0) gtk_text_buffer_insert(buffer, &iter, "\n", -1); gtk_text_buffer_insert(buffer, &iter, " ", -1); gtk_text_buffer_insert(buffer, &iter, authors[i], -1); } /* Translators: add your name here. Keep the list alphabetically, * do not remove any names, and add \n after your name (except the last name). */ if (strcmp(_("translator_credits"), "translator_credits")) { gchar **translators; gtk_text_buffer_insert(buffer, &iter, "\n", -1); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, /* Header for the translator_credits. Use your own language name */ _("" "Pioneers is translated to" " by:\n"), -1, "bold", NULL); translators = g_strsplit(_("translator_credits"), "\n", 0); for (i = 0; translators[i] != NULL; i++) { if (i != 0) gtk_text_buffer_insert(buffer, &iter, "\n", -1); gtk_text_buffer_insert(buffer, &iter, " ", -1); gtk_text_buffer_insert(buffer, &iter, translators[i], -1); } } gtk_text_buffer_get_start_iter(buffer, &iter); gtk_text_buffer_place_cursor(buffer, &iter); view = gtk_text_view_new_with_buffer(buffer); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); gtk_box_pack_start(GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(about))), view, FALSE, FALSE, 0); /* XXX GTK+ 2.6 gtk_show_about_dialog(NULL, "version", FULL_VERSION, "copyright", _("(C) 2002 the Free Software Foundation"), "comments", _("Pioneers is based upon the excellent\n" "Settlers of Catan board game.\n"), "authors", authors, "website", "http://pio.sourceforge.net", NULL); */ gtk_widget_show_all(about); } pioneers-14.1/common/gtk/aboutbox.h0000644000175000017500000000224710363024766014271 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2005 Brian Wellington * Copyright (C) 2005 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* * Common code for displaying an about box. */ #ifndef __ABOUTBOX_H__ #define __ABOUTBOX_H__ #include G_BEGIN_DECLS void aboutbox_display(const gchar * title, const gchar ** authors); G_END_DECLS #endif /* __ABOUTBOX_H__ */ pioneers-14.1/common/gtk/colors.c0000644000175000017500000000502511523321540013724 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2005 Brian Wellington * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "colors.h" #include "game.h" GdkColor black = { 0, 0, 0, 0 }; GdkColor white = { 0, 0xff00, 0xff00, 0xff00 }; GdkColor red = { 0, 0xff00, 0, 0 }; GdkColor green = { 0, 0, 0xff00, 0 }; GdkColor blue = { 0, 0, 0, 0xff00 }; GdkColor lightblue = { 0, 0xbe00, 0xbe00, 0xff00 }; GdkColor ck_die_red = { 0, 0x8800, 0x0200, 0x0200 }; GdkColor ck_die_yellow = { 0, 0xab00, 0xbd00, 0x1300 }; static GdkColor token_colors[MAX_PLAYERS] = { {0, 0xCD00, 0x0000, 0x0000}, /* red */ {0, 0x1E00, 0x9000, 0xFF00}, /* blue */ {0, 0xE800, 0xE800, 0xE800}, /* white */ {0, 0xFF00, 0x7F00, 0x0000}, /* orange */ {0, 0xEE00, 0xEE00, 0x0000}, /* yellow */ {0, 0x8E00, 0xE500, 0xEE00}, /* cyan */ {0, 0xD100, 0x5F00, 0xEE00}, /* magenta */ {0, 0x0000, 0xEE00, 0x7600} /* green */ }; void colors_init(void) { GdkColormap *cmap; gint idx; cmap = gdk_colormap_get_system(); for (idx = 0; idx < G_N_ELEMENTS(token_colors); idx++) { /* allocate colours for the players */ gdk_colormap_alloc_color(cmap, &token_colors[idx], FALSE, TRUE); } gdk_colormap_alloc_color(cmap, &black, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &white, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &red, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &green, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &blue, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &lightblue, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &ck_die_red, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &ck_die_yellow, FALSE, TRUE); } GdkColor *colors_get_player(gint player_num) { g_assert(player_num >= 0); g_assert(player_num < MAX_PLAYERS); return &token_colors[player_num]; } pioneers-14.1/common/gtk/colors.h0000644000175000017500000000225111523321540013727 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __colors_h #define __colors_h #include extern GdkColor black; extern GdkColor white; extern GdkColor red; extern GdkColor green; extern GdkColor blue; extern GdkColor lightblue; extern GdkColor ck_die_red; extern GdkColor ck_die_yellow; void colors_init(void); GdkColor *colors_get_player(gint player_num); #endif pioneers-14.1/common/gtk/common_gtk.c0000644000175000017500000002630611657430613014577 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "state.h" #include "common_gtk.h" #include "cards.h" static GtkWidget *message_txt; static gboolean msg_colors = TRUE; /* Local function prototypes */ static void gtk_event_cleanup(void); static void message_window_log_message_string(gint msg_type, const gchar * text); /* Set the default logging function to write to the message window. */ void log_set_func_message_window(void) { driver->log_write = message_window_log_message_string; } void log_set_func_message_color_enable(gboolean enable) { msg_colors = enable; } /* Write a message string to the console, setting its color based on its * type. */ void message_window_log_message_string(gint msg_type, const gchar * text) { GtkTextBuffer *buffer; GtkTextIter iter; GtkTextMark *end_mark; const gchar *tagname; if (message_txt == NULL) return; /* No widget set */ /* First determine if the requested color is for chat. * Chat colors are separately turned on/off */ switch (msg_type) { case MSG_PLAYER1: tagname = "player1"; break; case MSG_PLAYER2: tagname = "player2"; break; case MSG_PLAYER3: tagname = "player3"; break; case MSG_PLAYER4: tagname = "player4"; break; case MSG_PLAYER5: tagname = "player5"; break; case MSG_PLAYER6: tagname = "player6"; break; case MSG_PLAYER7: tagname = "player7"; break; case MSG_PLAYER8: tagname = "player8"; break; default: /* Not chat related, check whether other messages * use color */ if (!msg_colors) tagname = "black"; else switch (msg_type) { case MSG_ERROR: tagname = "red"; break; case MSG_TIMESTAMP: case MSG_INFO: tagname = "info"; break; case MSG_CHAT: tagname = "chat"; break; case MSG_SPECTATOR_CHAT: tagname = "chat"; break; case MSG_RESOURCE: tagname = "resource"; break; case MSG_BUILD: tagname = "build"; break; case MSG_DICE: tagname = "dice"; break; case MSG_STEAL: tagname = "steal"; break; case MSG_TRADE: tagname = "trade"; break; case MSG_DEVCARD: tagname = "devcard"; break; case MSG_LARGESTARMY: tagname = "largest"; break; case MSG_LONGESTROAD: tagname = "longest"; break; case MSG_BEEP: tagname = "beep"; break; default: tagname = "green"; }; break; } buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(message_txt)); /* insert text at the end */ gtk_text_buffer_get_end_iter(buffer, &iter); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, text, -1, tagname, NULL); /* move cursor to the end */ gtk_text_buffer_get_end_iter(buffer, &iter); gtk_text_buffer_place_cursor(buffer, &iter); end_mark = gtk_text_buffer_get_mark(buffer, "end-mark"); g_assert(end_mark != NULL); gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(message_txt), end_mark, 0.0, FALSE, 0.0, 0.0); } /* set the text widget. */ void message_window_set_text(GtkWidget * textWidget) { GtkTextBuffer *buffer; GtkTextIter iter; message_txt = textWidget; /* Prepare all tags */ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(message_txt)); gtk_text_buffer_create_tag(buffer, "black", "foreground", "black", NULL); gtk_text_buffer_create_tag(buffer, "red", "foreground", "red", NULL); gtk_text_buffer_create_tag(buffer, "green", "foreground", "green", NULL); gtk_text_buffer_create_tag(buffer, "build", "foreground", "#BB0000", NULL); gtk_text_buffer_create_tag(buffer, "chat", "foreground", "#0000FF", NULL); gtk_text_buffer_create_tag(buffer, "devcard", "foreground", "#C6C613", NULL); gtk_text_buffer_create_tag(buffer, "dice", "foreground", "#00AA00", NULL); gtk_text_buffer_create_tag(buffer, "info", "foreground", "#000000", NULL); gtk_text_buffer_create_tag(buffer, "largest", "foreground", "#1CB5ED", NULL); gtk_text_buffer_create_tag(buffer, "longest", "foreground", "#1CB5ED", NULL); gtk_text_buffer_create_tag(buffer, "resource", "foreground", "#0000FF", NULL); gtk_text_buffer_create_tag(buffer, "steal", "foreground", "#A613C6", NULL); gtk_text_buffer_create_tag(buffer, "trade", "foreground", "#006600", NULL); gtk_text_buffer_create_tag(buffer, "beep", "foreground", "#B7AE07", NULL); gtk_text_buffer_create_tag(buffer, "player1", "foreground", "#CD0000", NULL); gtk_text_buffer_create_tag(buffer, "player2", "foreground", "#1E90FF", NULL); gtk_text_buffer_create_tag(buffer, "player3", "foreground", "#808080", NULL); gtk_text_buffer_create_tag(buffer, "player4", "foreground", "#FF7F00", NULL); gtk_text_buffer_create_tag(buffer, "player5", "foreground", "#AEAE00", NULL); gtk_text_buffer_create_tag(buffer, "player6", "foreground", "#8EB5BE", NULL); gtk_text_buffer_create_tag(buffer, "player7", "foreground", "#D15FBE", NULL); gtk_text_buffer_create_tag(buffer, "player8", "foreground", "#00BE76", NULL); /* Set the mark that will mark the end of the text */ gtk_text_buffer_get_end_iter(buffer, &iter); gtk_text_buffer_create_mark(buffer, "end-mark", &iter, FALSE); } static void gtk_event_cleanup(void) { while (gtk_events_pending()) gtk_main_iteration(); } UIDriver GTK_Driver = { gtk_event_cleanup, /* initially log to the console; change it to the message window after * the message window is created. */ log_message_string_console, NULL, /* add read input */ NULL, /* add write input */ NULL, /* remove input */ /* callbacks for the server; NULL for now -- let the server set them */ NULL, /* player added */ NULL, /* player renamed */ NULL, /* player removed */ NULL /* player renamed */ }; struct TFindData { GtkTreeIter iter; enum TFindResult result; gint column; gint number; }; static gboolean find_integer_cb(GtkTreeModel * model, G_GNUC_UNUSED GtkTreePath * path, GtkTreeIter * iter, gpointer user_data) { struct TFindData *data = (struct TFindData *) user_data; int wanted = data->number; int current; gtk_tree_model_get(model, iter, data->column, ¤t, -1); if (current > wanted) { data->result = FIND_MATCH_INSERT_BEFORE; data->iter = *iter; return TRUE; } else if (current == wanted) { data->result = FIND_MATCH_EXACT; data->iter = *iter; return TRUE; } return FALSE; } enum TFindResult find_integer_in_tree(GtkTreeModel * model, GtkTreeIter * iter, gint column, gint number) { struct TFindData data; data.column = column; data.number = number; data.result = FIND_NO_MATCH; gtk_tree_model_foreach(model, find_integer_cb, &data); if (data.result != FIND_NO_MATCH) *iter = data.iter; return data.result; } void check_victory_points(GameParams * params, GtkWindow * main_window) { gchar *win_message; gchar *point_specification; WinnableState state; GtkMessageType message_type; GtkWidget *dialog; state = params_check_winnable_state(params, &win_message, &point_specification); switch (state) { case PARAMS_WINNABLE: message_type = GTK_MESSAGE_INFO; break; case PARAMS_WIN_BUILD_ALL: message_type = GTK_MESSAGE_INFO; break; case PARAMS_WIN_PERHAPS: message_type = GTK_MESSAGE_WARNING; break; case PARAMS_NO_WIN: message_type = GTK_MESSAGE_ERROR; break; default: message_type = GTK_MESSAGE_ERROR; break; /* Avoid a GCC warning about message_type being possibly uninitialized */ } dialog = gtk_message_dialog_new(main_window, GTK_DIALOG_DESTROY_WITH_PARENT, message_type, GTK_BUTTONS_OK, "%s", win_message); gtk_window_set_title(GTK_WINDOW(dialog), /* Caption for result of checking victory points */ _("Victory Point Analysis")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(dialog), "%s", point_specification); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); g_free(win_message); g_free(point_specification); } void prepare_gtk_for_close_button_on_tab(void) { gtk_rc_parse_string("style \"tab-with-close-button-style\"\n" "{\n" " GtkWidget::focus-padding = 0\n" " GtkWidget::focus-line-width = 0\n" " xthickness = 0\n" " ythickness = 0\n" "}\n" "widget \"*.tab-with-close-button\" style \"tab-with-close-button-style\""); } GtkWidget *create_label_with_close_button(const gchar * label_text, const gchar * tooltip_text, GtkWidget ** button) { GtkWidget *hbox; GtkWidget *lbl; GtkWidget *close_image; hbox = gtk_hbox_new(FALSE, 4); lbl = gtk_label_new(label_text); gtk_box_pack_start(GTK_BOX(hbox), lbl, FALSE, FALSE, 0); close_image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); *button = gtk_button_new(); gtk_button_set_relief(GTK_BUTTON(*button), GTK_RELIEF_NONE); gtk_button_set_focus_on_click(GTK_BUTTON(*button), FALSE); gtk_container_add(GTK_CONTAINER(*button), close_image); gtk_widget_set_tooltip_text(*button, tooltip_text); gtk_box_pack_start(GTK_BOX(hbox), *button, FALSE, FALSE, 0); /* Set buttons name so the style will affect it */ gtk_widget_set_name(*button, "tab-with-close-button"); gtk_widget_show_all(hbox); return hbox; } void build_frame(GtkWidget * parent, const gchar * title, GtkWidget * element, gboolean extend) { /* vbox */ /* label */ /* hbox */ /* fix */ /* element */ GtkWidget *vbox; GtkWidget *label; GtkWidget *hbox; GtkWidget *fix; gchar *title_with_markup; vbox = gtk_vbox_new(FALSE, 3); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_box_pack_start(GTK_BOX(parent), vbox, extend, TRUE, 0); label = gtk_label_new(NULL); title_with_markup = g_strdup_printf("%s", title); gtk_label_set_markup(GTK_LABEL(label), title_with_markup); g_free(title_with_markup); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); fix = gtk_fixed_new(); gtk_box_pack_start(GTK_BOX(hbox), fix, FALSE, TRUE, 6); gtk_box_pack_start(GTK_BOX(hbox), element, TRUE, TRUE, 0); } void set_tooltip_on_column(GtkTreeViewColumn * column, const gchar * tooltip) { GtkWidget *label; label = gtk_label_new(gtk_tree_view_column_get_title(column)); gtk_widget_set_tooltip_text(label, tooltip); gtk_widget_show(label); gtk_tree_view_column_set_widget(column, label); } pioneers-14.1/common/gtk/common_gtk.h0000644000175000017500000000554211657430613014603 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __common_gtk_h #define __common_gtk_h #include "driver.h" #include "log.h" #include /* Set the default logging function to write to the message window. */ void log_set_func_message_window(void); /* Set if colors in message window are enabled */ void log_set_func_message_color_enable(gboolean enable); /* set the text widget. */ void message_window_set_text(GtkWidget * textWidget); enum TFindResult { FIND_MATCH_EXACT, FIND_MATCH_INSERT_BEFORE, FIND_NO_MATCH }; enum TFindResult find_integer_in_tree(GtkTreeModel * model, GtkTreeIter * iter, gint column, gint number); /** Check whether the game can be won, and display a messagebox * about the distribution of the points. * @param param The game * @param main_window The main window for the dialog */ void check_victory_points(GameParams * param, GtkWindow * main_window); extern UIDriver GTK_Driver; /** Prepare Gtk for close buttons on tabs. * Needs to be called once */ void prepare_gtk_for_close_button_on_tab(void); /** Create a label with a close button. * @param label_text Text for the label * @param tooltip_text Tooltip for the close button * @retval button The close button * @return Composite widget with label and close button */ GtkWidget *create_label_with_close_button(const gchar * label_text, const gchar * tooltip_text, GtkWidget ** button); /** Places a title above the element and adds the title and element to parent. * @param parent The parent to add the tital and element to. * @param title The title for the element. * @param element The element to add to parent. * @param extend True if element will take remaining space in parent. */ void build_frame(GtkWidget * parent, const gchar * title, GtkWidget * element, gboolean extend); /** Add a tooltip to a column in a TreeView * @param column The column * @param tooltip The text in the tooltip (the result of _()) */ void set_tooltip_on_column(GtkTreeViewColumn * column, const gchar * tooltip); #endif /* __common_gtk_h */ pioneers-14.1/common/gtk/config-gnome.c0000644000175000017500000001522411760641465015013 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2000 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2005 Roland Clobus * Copyright (C) 2005 Ferenc Bnhidi * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* config-gnome.c -- configuration via. gnome-config * initial draft * * 19 July 2000 * Bibek Sahu */ /* Functions that need mapping (so far): // get gnome_config_get_string_with_default( path, default_used_bool ) gnome_config_get_int_with_default( path, default_used_bool ) // set gnome_config_set_string( path, string ) gnome_config_set_int( path, int ) // sync gnome_config_sync() [?] ---- To simplify a cross-platform API, we'll just demand that all configuration sets be synchronous. This is what most people expect, anyway. Also, all the paths used for getting/setting items will be made relative, and a config prefix will be pushed on the stack by config_init(). The API is essentially mimics a subset of the gnome_config API, but I believe it's similar (at least in spirit) to the Windows Registry, at least on the surface. */ /* The config API will contain the following items (for now): void config_init( string absolute_path_prefix ) string config_get_string( string relative_path, pointer_to_bool default_used ) int config_get_int( string relative_path, pointer_to_bool default_used ) // all config_set_* functions must be synchronous void config_set_string( string relative_path, string value ) void config_set_int( string relative_path, int value ) */ #include "config.h" #include #include #include #include #include #include #include #include "config-gnome.h" /* initialize configuration setup */ static GKeyFile *keyfile = NULL; static gchar *filename = NULL; static void config_sync(void) { gsize length; GError *error = NULL; gchar *data; g_return_if_fail(filename != NULL); data = g_key_file_to_data(keyfile, &length, &error); if (!error) { int f = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); if (f == -1) { /* Create the config dir, if it is missing */ /* Access mode: 0700 (drwx------) */ g_mkdir(g_get_user_config_dir(), S_IRWXU); f = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); }; if (f != -1) { if (write(f, data, length) < length) { g_warning ("Incomplete settings file written"); } close(f); } else { g_warning("Could not write settings file"); } } else { g_warning("Could not write settings file: %s", error->message); g_error_free(error); } } /* set the prefix in some static manner so that we don't need to hard-code * it in the main code. Thus, different architectures can have different * prefixes depending on what's relevant for said arch. */ void config_init(const gchar * path_prefix) { GError *error = NULL; /* Don't initialize more than once */ g_return_if_fail(keyfile == NULL); keyfile = g_key_file_new(); filename = g_build_filename(g_get_user_config_dir(), path_prefix, NULL); g_key_file_load_from_file(keyfile, filename, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error); if (error != NULL) { g_warning("Error while loading settings: %s", error->message); g_error_free(error); } } void config_finish(void) { g_free(filename); g_key_file_free(keyfile); } /* get configuration settings */ /* get a string. If a default is sent as part of the path, and the default * is returned, set *default_used to TRUE. */ gchar *config_get_string(const gchar * path, gboolean * default_used) { gchar **tokens; gchar *value; GError *error = NULL; g_return_val_if_fail(keyfile != NULL, g_strdup("")); tokens = g_strsplit_set(path, "/=", 3); value = g_key_file_get_string(keyfile, tokens[0], tokens[1], &error); if (error != NULL) { if (tokens[2] == NULL) { value = g_strdup(""); } else { value = g_strdup(tokens[2]); } *default_used = TRUE; g_error_free(error); } else { *default_used = FALSE; } g_strfreev(tokens); return value; } /* get an integer. If a default is sent as part of the path, and the * default is returned, set *default_used to TRUE. */ gint config_get_int(const gchar * path, gboolean * default_used) { gchar **tokens; gint value; GError *error = NULL; g_return_val_if_fail(keyfile != NULL, 0); tokens = g_strsplit_set(path, "/=", 3); value = g_key_file_get_integer(keyfile, tokens[0], tokens[1], &error); if (error != NULL) { if (tokens[2] == NULL) { value = 0; } else { value = atoi(tokens[2]); } *default_used = TRUE; g_error_free(error); } else { *default_used = FALSE; } g_strfreev(tokens); return value; } /* get an integer. If the setting is not found, return the default value */ gint config_get_int_with_default(const gchar * path, gint default_value) { gboolean default_used; gchar *temp; gint value; temp = g_strdup_printf("%s=%d", path, default_value); value = config_get_int(temp, &default_used); g_free(temp); return value; } /* set configuration settings */ /* these MUST be synchronous */ /* set a string; make sure the configuration set is sync'd afterwards. */ void config_set_string(const gchar * path, const gchar * value) { gchar **tokens; g_return_if_fail(keyfile != NULL); tokens = g_strsplit_set(path, "/", 2); if (tokens[1] == NULL) { g_warning("Key is missing"); } else { g_key_file_set_string(keyfile, tokens[0], tokens[1], value); } g_strfreev(tokens); config_sync(); } /* set an int; make sure the configuration set is sync'd afterwards. */ void config_set_int(const gchar * path, gint value) { gchar **tokens; g_return_if_fail(keyfile != NULL); tokens = g_strsplit_set(path, "/", 2); if (tokens[1] == NULL) { g_warning("Key is missing"); } else { g_key_file_set_integer(keyfile, tokens[0], tokens[1], value); } g_strfreev(tokens); config_sync(); } pioneers-14.1/common/gtk/config-gnome.h0000644000175000017500000000654610363024766015024 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2000 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* config-gnome.h -- configuration via. gnome-config (header) * initial draft * * 19 July 2000 * Bibek Sahu */ /*************************** description ******************************* To simplify a cross-platform API, we'll just demand that all configuration sets be synchronous. This is what most people expect, anyway. Also, all the paths used for getting/setting items will be made relative, and a config prefix will be pushed on the stack by config_init(). The API is essentially mimics a subset of the gnome_config API, but I believe it's similar (at least in spirit) to the Windows Registry, at least on the surface. The config API will contain the following items (for now): void config_init( string absolute_path_prefix ) string config_get_string( string relative_path, pointer_to_bool default_used ) int config_get_int( string relative_path, pointer_to_bool default_used ) // all config_set_* functions must be synchronous void config_set_string( string relative_path, string value ) void config_set_int( string relative_path, int value ) ************************* end description *****************************/ /* necessary headers */ #include /******************************* functions **************************/ /**** initialize configuration setup ****/ /* set the prefix in some static manner so that we don't need to hard-code * it in the main code. Thus, different architectures can have different * prefixes depending on what's relevant for said arch. */ void config_init(const gchar * path_prefix); /** Free resources */ void config_finish(void); /**** get configuration settings ****/ /* get a string. If a default is sent as part of the path, and the default * is returned, set *default_used to 1. */ gchar *config_get_string(const gchar * path, gboolean * default_used); /* get an integer. If a default is sent as part of the path, and the * default is returned, set *default_used to 1. */ gint config_get_int(const gchar * path, gboolean * default_used); /* get an integer. If the setting is not found, return the default value */ gint config_get_int_with_default(const gchar * path, gint default_value); /**** set configuration settings ****/ /* these MUST be synchronous */ /* set a string; make sure the configuration set is sync'd afterwards. */ void config_set_string(const gchar * path, const gchar * value); /* set an int; make sure the configuration set is sync'd afterwards. */ void config_set_int(const gchar * path, gint value); pioneers-14.1/common/gtk/game-rules.c0000644000175000017500000002155011755663642014510 00000000000000#include "config.h" #include "game.h" #include #include #include #include "game-rules.h" #include "game.h" static void game_rules_init(GameRules * sg, gboolean show_all_rules); static void verify_island_discovery_bonus(GtkButton * button, gpointer user_data); /* Register the class */ GType game_rules_get_type(void) { static GType gp_type = 0; if (!gp_type) { static const GTypeInfo gp_info = { sizeof(GameRulesClass), NULL, /* base_init */ NULL, /* base_finalize */ NULL, /* class init */ NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GameRules), 0, NULL, NULL }; gp_type = g_type_register_static(GTK_TYPE_TABLE, "GameRules", &gp_info, 0); } return gp_type; } static void add_row(GameRules * gr, const gchar * name, const gchar * tooltip, gint row, GtkCheckButton ** check) { GtkWidget *check_btn; check_btn = gtk_check_button_new_with_label(name); gtk_widget_show(check_btn); gtk_table_attach_defaults(GTK_TABLE(gr), check_btn, 0, 2, row, row + 1); *check = GTK_CHECK_BUTTON(check_btn); gtk_widget_set_tooltip_text(check_btn, tooltip); } /* Build the composite widget */ static void game_rules_init(GameRules * gr, gboolean show_all_rules) { GtkWidget *label; GtkWidget *vbox_sevens; GtkWidget *hbox; GtkWidget *widget; gint idx; gint row; gtk_table_resize(GTK_TABLE(gr), show_all_rules ? 7 : 2, 2); gtk_table_set_row_spacings(GTK_TABLE(gr), 3); gtk_table_set_col_spacings(GTK_TABLE(gr), 5); row = 0; /* Label */ label = gtk_label_new(_("Sevens rule")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(gr), label, 0, 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); gr->radio_sevens[0] = gtk_radio_button_new_with_label(NULL, /* Sevens rule: normal */ _("Normal")); gr->radio_sevens[1] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON (gr->radio_sevens [0]), /* Sevens rule: reroll on 1st 2 turns */ _("" "Reroll on 1st 2 turns")); gr->radio_sevens[2] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON (gr->radio_sevens [0]), /* Sevens rule: reroll all 7s */ _("" "Reroll all 7s")); vbox_sevens = gtk_vbox_new(TRUE, 2); gtk_widget_show(vbox_sevens); gtk_widget_set_tooltip_text(gr->radio_sevens[0], /* Tooltip for sevens rule normal */ _("" "All sevens move the robber or pirate")); gtk_widget_set_tooltip_text(gr->radio_sevens[1], /* Tooltip for sevens rule reroll on 1st 2 turns */ _("" "In the first two turns all sevens are rerolled")); gtk_widget_set_tooltip_text(gr->radio_sevens[2], /* Tooltip for sevens rule reroll all */ _("All sevens are rerolled")); for (idx = 0; idx < 3; ++idx) { gtk_widget_show(gr->radio_sevens[idx]); gtk_box_pack_start(GTK_BOX(vbox_sevens), gr->radio_sevens[idx], TRUE, TRUE, 0); } gtk_table_attach(GTK_TABLE(gr), vbox_sevens, 1, 2, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); row++; add_row(gr, _("Randomize terrain"), _("Randomize the terrain"), row++, &gr->random_terrain); if (show_all_rules) { add_row(gr, _("Use pirate"), _("Use the pirate to block ships"), row++, &gr->use_pirate); add_row(gr, _("Strict trade"), _("Allow trade only before building or buying"), row++, &gr->strict_trade); add_row(gr, _("Domestic trade"), _("Allow trade between players"), row++, &gr->domestic_trade); add_row(gr, _("Victory at end of turn"), _("Check for victory only at end of turn"), row++, &gr->check_victory_at_end_of_turn); /* Label */ label = gtk_label_new(_("Island discovery bonuses")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(gr), label, 0, 1, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); hbox = gtk_hbox_new(FALSE, 3); gr->island_bonus = GTK_ENTRY(gtk_entry_new()); gtk_widget_show(GTK_WIDGET(gr->island_bonus)); gtk_widget_set_tooltip_text(GTK_WIDGET(gr->island_bonus), /* Tooltip for island bonus */ _("" "A comma seperated list of bonus points for discovering islands")); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(gr->island_bonus), TRUE, TRUE, 0); widget = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_stock (GTK_STOCK_APPLY, GTK_ICON_SIZE_BUTTON)); g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(verify_island_discovery_bonus), (gpointer) gr); gtk_widget_set_tooltip_text(widget, /* Tooltip for the check button */ _("Check and correct island " "discovery bonuses")); gtk_box_pack_end(GTK_BOX(hbox), widget, FALSE, FALSE, 0); gtk_table_attach(GTK_TABLE(gr), GTK_WIDGET(hbox), 1, 2, row, row + 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); row++; } else { gr->use_pirate = NULL; gr->strict_trade = NULL; gr->domestic_trade = NULL; gr->check_victory_at_end_of_turn = NULL; gr->island_bonus = NULL; } } /* Create a new instance of the widget */ GtkWidget *game_rules_new(void) { GameRules *widget = GAMERULES(g_object_new(game_rules_get_type(), NULL)); game_rules_init(widget, TRUE); return GTK_WIDGET(widget); } /* Create a new instance with only the changes that can be applied by the metaserver */ GtkWidget *game_rules_new_metaserver(void) { GameRules *widget = GAMERULES(g_object_new(game_rules_get_type(), NULL)); game_rules_init(widget, FALSE); return GTK_WIDGET(widget); } void game_rules_set_random_terrain(GameRules * gr, gboolean val) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gr->random_terrain), val); } gboolean game_rules_get_random_terrain(GameRules * gr) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (gr->random_terrain)); } /* Set the sevens rule * 0 = Normal * 1 = Reroll first two turns * 2 = Reroll all */ void game_rules_set_sevens_rule(GameRules * gr, guint sevens_rule) { g_return_if_fail(sevens_rule < G_N_ELEMENTS(gr->radio_sevens)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (gr->radio_sevens[sevens_rule]), TRUE); } /* Get the sevens rule */ guint game_rules_get_sevens_rule(GameRules * gr) { gint idx; for (idx = 0; idx < G_N_ELEMENTS(gr->radio_sevens); idx++) if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(gr->radio_sevens[idx]))) return idx; return 0; } void game_rules_set_use_pirate(GameRules * gr, gboolean val, gint num_ships) { if (num_ships == 0) { gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON (gr->use_pirate), TRUE); gtk_widget_set_sensitive(GTK_WIDGET(gr->use_pirate), FALSE); } else { gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON (gr->use_pirate), FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (gr->use_pirate), val); gtk_widget_set_sensitive(GTK_WIDGET(gr->use_pirate), TRUE); } } gboolean game_rules_get_use_pirate(GameRules * gr) { return gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON (gr->use_pirate)) ? FALSE : gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (gr->use_pirate)); } void game_rules_set_strict_trade(GameRules * gr, gboolean val) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gr->strict_trade), val); } gboolean game_rules_get_strict_trade(GameRules * gr) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (gr->strict_trade)); } void game_rules_set_domestic_trade(GameRules * gr, gboolean val) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gr->domestic_trade), val); } gboolean game_rules_get_domestic_trade(GameRules * gr) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (gr->domestic_trade)); } void game_rules_set_victory_at_end_of_turn(GameRules * gr, gboolean val) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (gr->check_victory_at_end_of_turn), val); } gboolean game_rules_get_victory_at_end_of_turn(GameRules * gr) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (gr-> check_victory_at_end_of_turn)); } void game_rules_set_island_discovery_bonus(GameRules * gr, GArray * val) { gchar *text; text = format_int_list(NULL, val); if (text != NULL) { gtk_entry_set_text(gr->island_bonus, text); } else { gtk_entry_set_text(gr->island_bonus, ""); } g_free(text); } GArray *game_rules_get_island_discovery_bonus(GameRules * gr) { return build_int_list(gtk_entry_get_text(gr->island_bonus)); } static void verify_island_discovery_bonus(G_GNUC_UNUSED GtkButton * button, gpointer user_data) { GameRules *gr = GAMERULES(user_data); GArray *bonuses; bonuses = game_rules_get_island_discovery_bonus(gr); game_rules_set_island_discovery_bonus(gr, bonuses); g_array_free(bonuses, TRUE); } pioneers-14.1/common/gtk/game-rules.h0000644000175000017500000000404211732300744014474 00000000000000#ifndef __GAMERULES_H__ #define __GAMERULES_H__ #include #include #include #include "gtkbugs.h" G_BEGIN_DECLS #define GAMERULES_TYPE (game_rules_get_type ()) #define GAMERULES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMERULES_TYPE, GameRules)) #define GAMERULES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAMERULES_TYPE, GameRulesClass)) #define IS_GAMERULES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAMERULES_TYPE)) #define IS_GAMERULES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAMERULES_TYPE)) typedef struct _GameRules GameRules; typedef struct _GameRulesClass GameRulesClass; struct _GameRules { GtkTable table; GtkCheckButton *random_terrain; GtkWidget *radio_sevens[3]; /* radio buttons for sevens rules */ GtkCheckButton *use_pirate; GtkCheckButton *strict_trade; GtkCheckButton *domestic_trade; GtkCheckButton *check_victory_at_end_of_turn; GtkEntry *island_bonus; }; struct _GameRulesClass { GtkTableClass parent_class; }; GType game_rules_get_type(void); GtkWidget *game_rules_new(void); GtkWidget *game_rules_new_metaserver(void); void game_rules_set_random_terrain(GameRules * gr, gboolean val); gboolean game_rules_get_random_terrain(GameRules * gr); void game_rules_set_sevens_rule(GameRules * gr, guint sevens_rule); guint game_rules_get_sevens_rule(GameRules * gr); void game_rules_set_use_pirate(GameRules * gr, gboolean val, gint num_ships); gboolean game_rules_get_use_pirate(GameRules * gr); void game_rules_set_strict_trade(GameRules * gr, gboolean val); gboolean game_rules_get_strict_trade(GameRules * gr); void game_rules_set_domestic_trade(GameRules * gr, gboolean val); gboolean game_rules_get_domestic_trade(GameRules * gr); void game_rules_set_victory_at_end_of_turn(GameRules * gr, gboolean val); gboolean game_rules_get_victory_at_end_of_turn(GameRules * gr); void game_rules_set_island_discovery_bonus(GameRules * gr, GArray * val); GArray *game_rules_get_island_discovery_bonus(GameRules * gr); G_END_DECLS #endif /* __GAMERULES_H__ */ pioneers-14.1/common/gtk/game-settings.c0000644000175000017500000001754711656052403015214 00000000000000/* A custom widget for adjusting the game settings. * * The code is based on the TICTACTOE example * www.gtk.org/tutorial/app-codeexamples.html#SEC-TICTACTOE * * Adaptation for Pioneers: 2004 Roland Clobus * */ #include "config.h" #include #include #include "game-settings.h" #include "game.h" #include "gtkbugs.h" /* The signals */ enum { CHANGE, CHANGE_PLAYERS, CHECK, LAST_SIGNAL }; static void game_settings_class_init(GameSettingsClass * klass); static void game_settings_init(GameSettings * sg); static void game_settings_change_players(GtkSpinButton * widget, GameSettings * gs); static void game_settings_change_victory_points(GtkSpinButton * widget, GameSettings * gs); static void game_settings_check(GtkButton * widget, GameSettings * gs); static void game_settings_update(GameSettings * gs); /* All signals */ static guint game_settings_signals[LAST_SIGNAL] = { 0, 0 }; /* Register the class */ GType game_settings_get_type(void) { static GType gs_type = 0; if (!gs_type) { static const GTypeInfo gs_info = { sizeof(GameSettingsClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) game_settings_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GameSettings), 0, (GInstanceInitFunc) game_settings_init, NULL }; gs_type = g_type_register_static(GTK_TYPE_TABLE, "GameSettings", &gs_info, 0); } return gs_type; } /* Register the signals. * GameSettings will emit two signals: * 'change' when any change to one of the controls occurs. * 'change-players' when the amount of player has changed. */ static void game_settings_class_init(GameSettingsClass * klass) { game_settings_signals[CHANGE] = g_signal_new("change", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GameSettingsClass, change), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); game_settings_signals[CHANGE_PLAYERS] = g_signal_new("change-players", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(GameSettingsClass, change_players), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); game_settings_signals[CHECK] = g_signal_new("check", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(GameSettingsClass, check), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /* Build the composite widget */ static void game_settings_init(GameSettings * gs) { GtkWidget *label; GtkWidget *hbox; GtkAdjustment *adj; gtk_table_resize(GTK_TABLE(gs), 4, 2); gtk_table_set_row_spacings(GTK_TABLE(gs), 3); gtk_table_set_col_spacings(GTK_TABLE(gs), 5); /* Label text for customising a game */ label = gtk_label_new(_("Number of players")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(gs), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, 2, MAX_PLAYERS, 1, 4, 0)); gs->players_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); gtk_entry_set_alignment(GTK_ENTRY(gs->players_spin), 1.0); gtk_widget_show(gs->players_spin); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(gs->players_spin), TRUE); gtk_table_attach(GTK_TABLE(gs), gs->players_spin, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); g_signal_connect(G_OBJECT(gs->players_spin), "value-changed", G_CALLBACK(game_settings_change_players), gs); gtk_widget_set_tooltip_text(gs->players_spin, /* Tooltip for 'Number of Players' */ _("The number of players")); /* Label for customising a game */ label = gtk_label_new(_("Victory point target")); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(gs), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); hbox = gtk_hbox_new(FALSE, 3); adj = GTK_ADJUSTMENT(gtk_adjustment_new(10, 3, 99, 1, 5, 0)); gs->victory_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0); gtk_entry_set_alignment(GTK_ENTRY(gs->victory_spin), 1.0); gtk_widget_show(gs->victory_spin); gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(gs->victory_spin), TRUE); gtk_box_pack_start(GTK_BOX(hbox), gs->victory_spin, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(gs->victory_spin), "value-changed", G_CALLBACK(game_settings_change_victory_points), gs); gtk_widget_set_tooltip_text(gs->victory_spin, /* Tooltip for Victory Point Target */ _("" "The points needed to win the game")); gs->check_button = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(gs->check_button), gtk_image_new_from_stock(GTK_STOCK_APPLY, GTK_ICON_SIZE_BUTTON)); gtk_widget_show(gs->check_button); gtk_box_pack_start(GTK_BOX(hbox), gs->check_button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(gs->check_button), "clicked", G_CALLBACK(game_settings_check), gs); gtk_widget_set_tooltip_text(gs->check_button, /* Tooltip for the check button */ _("Is it possible to win this game?")); gtk_table_attach(GTK_TABLE(gs), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(hbox); gs->players = 4; gs->victory_points = 10; game_settings_update(gs); } /* Create a new instance of the widget */ GtkWidget *game_settings_new(gboolean with_check_button) { GtkWidget *widget = GTK_WIDGET(g_object_new(game_settings_get_type(), NULL)); if (with_check_button) gtk_widget_show(GAMESETTINGS(widget)->check_button); else gtk_widget_hide(GAMESETTINGS(widget)->check_button); return widget; } /* Emits 'change-players' when the number of players has changed */ static void game_settings_change_players(GtkSpinButton * widget, GameSettings * gs) { gs->players = gtk_spin_button_get_value_as_int(widget); game_settings_update(gs); g_signal_emit(G_OBJECT(gs), game_settings_signals[CHANGE_PLAYERS], 0); g_signal_emit(G_OBJECT(gs), game_settings_signals[CHANGE], 0); } /* Callback when the points needed to win have changed */ static void game_settings_change_victory_points(GtkSpinButton * widget, GameSettings * gs) { gs->victory_points = gtk_spin_button_get_value_as_int(widget); game_settings_update(gs); g_signal_emit(G_OBJECT(gs), game_settings_signals[CHANGE], 0); } /* Set the number of players */ void game_settings_set_players(GameSettings * gs, guint players) { gs->players = players; game_settings_update(gs); } /* Get the number of players */ guint game_settings_get_players(GameSettings * gs) { return gs->players; } /* Set the points needed to win */ void game_settings_set_victory_points(GameSettings * gs, guint victory_points) { gs->victory_points = victory_points; game_settings_update(gs); } /* Get the points needed to win */ guint game_settings_get_victory_points(GameSettings * gs) { return gs->victory_points; } static void game_settings_check(G_GNUC_UNUSED GtkButton * widget, GameSettings * gs) { g_signal_emit(G_OBJECT(gs), game_settings_signals[CHECK], 0); } /* Update the display to the current state */ static void game_settings_update(GameSettings * gs) { /* Disable signals, to avoid recursive updates */ g_signal_handlers_block_matched(G_OBJECT(gs->players_spin), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, gs); g_signal_handlers_block_matched(G_OBJECT(gs->victory_spin), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, gs); gtk_spin_button_set_value(GTK_SPIN_BUTTON(gs->players_spin), gs->players); gtk_spin_button_set_value(GTK_SPIN_BUTTON(gs->victory_spin), gs->victory_points); /* Reenable the signals */ g_signal_handlers_unblock_matched(G_OBJECT(gs->players_spin), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, gs); g_signal_handlers_unblock_matched(G_OBJECT(gs->victory_spin), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, gs); } pioneers-14.1/common/gtk/game-settings.h0000644000175000017500000000343711246205071015206 00000000000000/* A custom widget for adjusting the game settings. * * The code is based on the TICTACTOE example * www.gtk.oorg/tutorial/app-codeexamples.html#SEC-TICTACTOE * * Adaptation for Pioneers: 2004 Roland Clobus * */ #ifndef __GAMESETTINGS_H__ #define __GAMESETTINGS_H__ #include #include #include G_BEGIN_DECLS #define GAMESETTINGS_TYPE (game_settings_get_type ()) #define GAMESETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAMESETTINGS_TYPE, GameSettings)) #define GAMESETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAMESETTINGS_TYPE, GameSettingsClass)) #define IS_GAMESETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAMESETTINGS_TYPE)) #define IS_GAMESETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAMESETTINGS_TYPE)) typedef struct _GameSettings GameSettings; typedef struct _GameSettingsClass GameSettingsClass; struct _GameSettings { GtkTable table; GtkWidget *victory_spin; /* victory point target */ GtkWidget *players_spin; /* number of players */ GtkWidget *check_button; /* check whether the game can be won */ guint players; /* The number of players */ guint victory_points; /* The points needed to win */ }; struct _GameSettingsClass { GtkTableClass parent_class; void (*change) (GameSettings * gs); void (*change_players) (GameSettings * gs); void (*check) (GameSettings * gs); }; GType game_settings_get_type(void); GtkWidget *game_settings_new(gboolean with_check_button); void game_settings_set_players(GameSettings * gs, guint players); guint game_settings_get_players(GameSettings * gs); void game_settings_set_victory_points(GameSettings * gs, guint victory_points); guint game_settings_get_victory_points(GameSettings * gs); G_END_DECLS #endif /* __GAMESETTINGS_H__ */ pioneers-14.1/common/gtk/gtkbugs.c0000644000175000017500000000550111506652335014102 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2005-2010 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "gtkbugs.h" /** Since Gtk+ 2.6 you cannot press a button twice, without moving the * mouse. */ void action_set_sensitive(GtkAction * action, gboolean sensitive) { GSList *widgets; widgets = gtk_action_get_proxies(action); while (widgets) { widget_set_sensitive(GTK_WIDGET(widgets->data), sensitive); widgets = g_slist_next(widgets); } gtk_action_set_sensitive(action, sensitive); } /* Since 2.20 GTK_WIDGET_STATE and gtk_button_enter are deprecated. * The bug below is fixed in 2.18.2 * * When the code is built on >=2.20 and run <2.20 you might be hit by the * bug, but in that case you'll be running a newer version of Pioneers with * older libraries, which should not happen with many package managers. * It doesn't hurt to apply this workaround for >=2.18.2 */ void widget_set_sensitive(GtkWidget * widget, gboolean sensitive) { #if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 20) GtkWidget *button; #endif gtk_widget_set_sensitive(widget, sensitive); #if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 20) /** @bug Gtk bug 56070. If the mouse is over a toolbar button that * becomes sensitive, one can't click it without moving the mouse out * and in again. This bug is registered in Bugzilla as a Gtk bug. The * workaround tests if the mouse is inside the currently sensitivized * button, and if yes call button_enter() * * Fixed in Gtk 2.18.2 */ if (!GTK_IS_BIN(widget)) return; button = gtk_bin_get_child(GTK_BIN(widget)); if (sensitive && GTK_IS_BUTTON(button)) { gint x, y, state; gtk_widget_get_pointer(button, &x, &y); state = GTK_WIDGET_STATE(button); if ((state == GTK_STATE_NORMAL || state == GTK_STATE_PRELIGHT) && x >= 0 && y >= 0 && x < button->allocation.width && y < button->allocation.height) { gtk_button_enter(GTK_BUTTON(button)); GTK_BUTTON(button)->in_button = TRUE; gtk_widget_set_state(widget, GTK_STATE_PRELIGHT); } } #endif } pioneers-14.1/common/gtk/gtkbugs.h0000644000175000017500000000264511477710005014111 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2005 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __gtkbugs_h #define __gtkbugs_h #include /** @bug 2006-01-15 In Gtk+ 2.4 it is not possible to disable actions. * This will be close to its functionality, but will show -/- in the * menus for the shortcut keys. */ void action_set_sensitive(GtkAction * action, gboolean sensitive); /** @bug Gtk bug 56070. If the mouse is over a button that becomes * sensitive, one can't click it without moving the mouse out and in again. */ void widget_set_sensitive(GtkWidget * widget, gboolean sensitive); #endif pioneers-14.1/common/gtk/gtkcompat.h0000644000175000017500000000104011657430613014424 00000000000000#ifdef HAVE_OLD_GTK #define gtk_combo_box_text_new(A) gtk_combo_box_new_text(A) #define gtk_combo_box_text_append_text(A, B) gtk_combo_box_append_text(A, B) #define GTK_COMBO_BOX_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_COMBO_BOX, GtkComboBox)) #define gdk_pixmap_get_size(A, B, C) gdk_drawable_get_size(A, B, C) #ifdef GSEAL_ENABLE #error "Don't use --enable-deprecation-checks when using old versions of Gtk" #endif #define gdk_visual_get_depth(A) A->depth #define gtk_table_get_size(A, B, C) row = A->nrows #endif pioneers-14.1/common/gtk/guimap.c0000644000175000017500000014670511746550046013734 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004-2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include "game.h" #include "map.h" #include "colors.h" #include "guimap.h" #include "log.h" #include "theme.h" #define ZOOM_AMOUNT 3 static gboolean single_click_build_active = FALSE; typedef struct { GuiMap *gmap; gint old_highlight; } HighlightInfo; /* Local function prototypes */ static void calc_edge_poly(const GuiMap * gmap, const Edge * edge, const Polygon * shape, Polygon * poly); static void calc_node_poly(const GuiMap * gmap, const Node * node, const Polygon * shape, Polygon * poly); static void calc_hex_poly(const GuiMap * gmap, const Hex * hex, const Polygon * shape, Polygon * poly, double scale_factor, gint x_shift); static void guimap_cursor_move(GuiMap * gmap, gint x, gint y, MapElement * element); /* Square */ static gint sqr(gint a) { return a * a; } GuiMap *guimap_new(void) { GuiMap *gmap; gmap = g_malloc0(sizeof(*gmap)); gmap->highlight_chit = -1; gmap->initial_font_size = -1; gmap->show_nosetup_nodes = FALSE; return gmap; } void guimap_delete(GuiMap * gmap) { if (gmap->area != NULL) { g_object_unref(gmap->area); gmap->area = NULL; } if (gmap->pixmap != NULL) { g_object_unref(gmap->pixmap); gmap->pixmap = NULL; } if (gmap->cr != NULL) { cairo_destroy(gmap->cr); gmap->cr = NULL; } if (gmap->layout) { /* Restore the font size */ PangoContext *pc; PangoFontDescription *pfd; pc = pango_layout_get_context(gmap->layout); pfd = pango_context_get_font_description(pc); if (gmap->initial_font_size != -1) { pango_font_description_set_size(pfd, gmap-> initial_font_size); } g_object_unref(gmap->layout); gmap->layout = NULL; } if (gmap->map) { map_free(gmap->map); gmap->map = NULL; } g_free(gmap); } void guimap_reset(GuiMap * gmap) { gmap->highlight_chit = -1; gmap->player_num = -1; } static gint expose_map_cb(GtkWidget * area, GdkEventExpose * event, gpointer user_data) { GuiMap *gmap = user_data; cairo_t *cr; if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; if (gmap->pixmap == NULL) { GtkAllocation allocation; gtk_widget_get_allocation(area, &allocation); gmap->pixmap = gdk_pixmap_new(gtk_widget_get_window(area), allocation.width, allocation.height, -1); guimap_display(gmap); } cr = gdk_cairo_create(gtk_widget_get_window(area)); gdk_cairo_set_source_pixmap(cr, gmap->pixmap, 0, 0); gdk_cairo_rectangle(cr, &event->area); cairo_fill(cr); cairo_destroy(cr); return FALSE; } static gint configure_map_cb(GtkWidget * area, G_GNUC_UNUSED GdkEventConfigure * event, gpointer user_data) { GuiMap *gmap = user_data; GtkAllocation allocation; if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; if (gmap->pixmap) { g_object_unref(gmap->pixmap); gmap->pixmap = NULL; } gtk_widget_get_allocation(area, &allocation); guimap_scale_to_size(gmap, allocation.width, allocation.height); gtk_widget_queue_draw(area); return FALSE; } static gboolean motion_notify_map_cb(GtkWidget * area, GdkEventMotion * event, gpointer user_data) { GuiMap *gmap = user_data; gint x; gint y; static gint last_x; static gint last_y; GdkModifierType state; MapElement dummyElement; g_assert(area != NULL); if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; if (event->is_hint) gdk_window_get_pointer(event->window, &x, &y, &state); else { x = event->x; y = event->y; state = event->state; } if (state & GDK_BUTTON2_MASK) { gmap->is_custom_view = TRUE; gmap->x_margin += x - last_x; gmap->y_margin += y - last_y; guimap_display(gmap); gtk_widget_queue_draw(gmap->area); } last_x = x; last_y = y; dummyElement.pointer = NULL; guimap_cursor_move(gmap, x, y, &dummyElement); return FALSE; } static gboolean zoom_map_cb(GtkWidget * area, GdkEventScroll * event, gpointer user_data) { GuiMap *gmap = user_data; GtkAllocation allocation; if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; gint radius = gmap->hex_radius; gmap->is_custom_view = TRUE; if (event->direction == GDK_SCROLL_UP) { radius += ZOOM_AMOUNT; gmap->x_margin -= (event->x - gmap->x_margin) * ZOOM_AMOUNT / radius; gmap->y_margin -= (event->y - gmap->y_margin) * ZOOM_AMOUNT / radius; } else if (event->direction == GDK_SCROLL_DOWN) { gint old_radius = radius; radius -= ZOOM_AMOUNT; if (radius < MIN_HEX_RADIUS) radius = MIN_HEX_RADIUS; gmap->x_margin += (event->x - gmap->x_margin) * (old_radius - radius) / radius; gmap->y_margin += (event->y - gmap->y_margin) * (old_radius - radius) / radius; } gmap->hex_radius = radius; gtk_widget_get_allocation(gmap->area, &allocation); guimap_scale_to_size(gmap, allocation.width, allocation.height); guimap_display(gmap); gtk_widget_queue_draw(gmap->area); return FALSE; } GtkWidget *guimap_build_drawingarea(GuiMap * gmap, gint width, gint height) { gmap->area = gtk_drawing_area_new(); g_object_ref(gmap->area); gtk_widget_set_events(gmap->area, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_widget_set_size_request(gmap->area, width, height); g_signal_connect(G_OBJECT(gmap->area), "expose_event", G_CALLBACK(expose_map_cb), gmap); g_signal_connect(G_OBJECT(gmap->area), "configure_event", G_CALLBACK(configure_map_cb), gmap); g_signal_connect(G_OBJECT(gmap->area), "motion_notify_event", G_CALLBACK(motion_notify_map_cb), gmap); g_signal_connect(G_OBJECT(gmap->area), "scroll_event", G_CALLBACK(zoom_map_cb), gmap); gtk_widget_show(gmap->area); return gmap->area; } static GdkPoint settlement_points[] = { {20, 20}, {20, -8}, {0, -28}, {-20, -8}, {-20, 20}, {20, 20} }; static Polygon settlement_poly = { settlement_points, G_N_ELEMENTS(settlement_points) }; static GdkPoint city_points[] = { {40, 20}, {40, -16}, {2, -16}, {2, -28}, {-19, -48}, {-40, -28}, {-40, 20}, {40, 20} }; static Polygon city_poly = { city_points, G_N_ELEMENTS(city_points) }; static GdkPoint city_wall_points[] = { {50, 36}, {50, -64}, {-50, -64}, {-50, 36} }; static Polygon city_wall_poly = { city_wall_points, G_N_ELEMENTS(city_wall_points) }; static GdkPoint nosetup_points[] = { {0, 30}, {26, 15}, {26, -15}, {0, -30}, {-26, -15}, {-26, 15}, {0, 30} }; static Polygon nosetup_poly = { nosetup_points, G_N_ELEMENTS(nosetup_points) }; /* Update this when a node polygon is changed */ #define NODE_MIN_X -50 #define NODE_MAX_X 50 #define NODE_MIN_Y -64 #define NODE_MAX_Y 36 static GdkPoint largest_node_points[] = { {NODE_MIN_X, NODE_MIN_Y}, {NODE_MIN_X, NODE_MAX_Y}, {NODE_MAX_X, NODE_MAX_Y}, {NODE_MAX_X, NODE_MIN_Y} }; static Polygon largest_node_poly = { largest_node_points, G_N_ELEMENTS(largest_node_points) }; static GdkPoint road_points[] = { {10, 40}, {10, -40}, {-10, -40}, {-10, 40}, {10, 40} }; static Polygon road_poly = { road_points, G_N_ELEMENTS(road_points) }; static GdkPoint ship_points[] = { {10, 32}, {10, 8}, {24, 18}, {42, 8}, {48, 0}, {50, -12}, {10, -12}, {10, -32}, {2, -32}, {-6, -26}, {-10, -16}, {-10, 16}, {-6, 26}, {2, 32}, {10, 32} }; static Polygon ship_poly = { ship_points, G_N_ELEMENTS(ship_points) }; static GdkPoint bridge_points[] = { {13, 40}, {-14, 40}, {-14, 30}, {-1, 15}, {-1, -15}, {-14, -30}, {-14, -40}, {13, -40}, {13, 40} }; static Polygon bridge_poly = { bridge_points, G_N_ELEMENTS(bridge_points) }; /* Update this when an edge polygon is changed */ #define EDGE_MIN_X -14 #define EDGE_MAX_X 50 #define EDGE_MIN_Y -40 #define EDGE_MAX_Y 40 static GdkPoint largest_edge_points[] = { {EDGE_MIN_X, EDGE_MIN_Y}, {EDGE_MIN_X, EDGE_MAX_Y}, {EDGE_MAX_X, EDGE_MAX_Y}, {EDGE_MAX_X, EDGE_MIN_Y} }; static Polygon largest_edge_poly = { largest_edge_points, G_N_ELEMENTS(largest_edge_points) }; static GdkPoint robber_points[] = { {30, 60}, {30, 4}, {28, -6}, {22, -15}, {12, -20}, {22, -32}, {22, -48}, {10, -60}, {-10, -60}, {-22, -48}, {-22, -32}, {-12, -20}, {-22, -15}, {-28, -6}, {-30, 4}, {-30, 60}, {30, 60} }; static Polygon robber_poly = { robber_points, G_N_ELEMENTS(robber_points) }; static GdkPoint pirate_points[] = { {42, 15}, {18, 15}, {28, 1}, {18, -17}, {10, -23}, {-2, -25}, {-2, 15}, {-22, 15}, {-22, 23}, {-16, 31}, {-6, 35}, {26, 35}, {36, 31}, {42, 23}, {42, 15} }; static Polygon pirate_poly = { pirate_points, G_N_ELEMENTS(pirate_points) }; static gint chances[13] = { 0, 0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }; static void reverse_calc_hex_pos(const GuiMap * gmap, gint x_coor, gint y_coor, gint * hex_x, gint * hex_y) { y_coor -= gmap->y_margin + gmap->hex_radius; y_coor += gmap->hex_radius; *hex_y = y_coor / (gmap->hex_radius + gmap->y_point); x_coor -= gmap->x_margin + gmap->x_point + ((*hex_y % 2) ? gmap->x_point : 0); if (gmap->map->shrink_left) x_coor += gmap->x_point; x_coor += gmap->x_point; *hex_x = x_coor / (gmap->x_point * 2); /* The (0,0) will be on the upper left corner of the hex, * outside the hex */ gint relx; gint rely; relx = x_coor - *hex_x * (gmap->x_point * 2); rely = y_coor - *hex_y * (gmap->hex_radius + gmap->y_point); /* Choice between various hexes possible */ if (rely < gmap->y_point) { if (relx < gmap->x_point) { /* At the left side of the hex */ /* If point (relx, rely)) above the line from * (0, y_point) to (x_point, 0) then it is the * hex to NW, else it is the current hex */ if (-relx * (gdouble) gmap->y_point / gmap->x_point + gmap->y_point > rely) { map_move_in_direction(HEX_DIR_NW, hex_x, hex_y); } } else { /* At the right side of the hex */ /* If point (relx, rely)) above the line from * (x_point, 0) to (2*x_point, y_point) then * it is the hex to NE, else it is the current hex */ if (relx * (gdouble) gmap->y_point / gmap->x_point - gmap->y_point > rely) { map_move_in_direction(HEX_DIR_NE, hex_x, hex_y); } } } } static void calc_hex_pos(const GuiMap * gmap, gint x, gint y, gint * x_offset, gint * y_offset) { *x_offset = gmap->x_margin + gmap->x_point + ((y % 2) ? gmap->x_point : 0) + x * gmap->x_point * 2; if (gmap->map->shrink_left) *x_offset -= gmap->x_point; *y_offset = gmap->y_margin + gmap->hex_radius + y * (gmap->hex_radius + gmap->y_point); } static void get_hex_polygon(const GuiMap * gmap, Polygon * poly) { GdkPoint *points; g_assert(poly->num_points >= 6); poly->num_points = 6; points = poly->points; points[0].x = gmap->x_point; points[0].y = -gmap->y_point; points[1].x = 0; points[1].y = -gmap->hex_radius; points[2].x = -gmap->x_point; points[2].y = -gmap->y_point; points[3].x = -gmap->x_point; points[3].y = gmap->y_point; points[4].x = 0; points[4].y = gmap->hex_radius; points[5].x = gmap->x_point; points[5].y = gmap->y_point; } static void calc_edge_poly(const GuiMap * gmap, const Edge * edge, const Polygon * shape, Polygon * poly) { gint idx; GdkPoint *poly_point, *shape_point; double theta, cos_theta, sin_theta, scale; g_assert(poly->num_points >= shape->num_points); poly->num_points = shape->num_points; /* Determine the angle for the polygon: * Polygons on edges are rotated 0, 60 or 120 degrees CCW * Polygons without edges are rotated 90 degrees CCW */ theta = 2 * M_PI * (edge != NULL ? 1 - (edge->pos % 3) / 6.0 : -0.25); cos_theta = cos(theta); sin_theta = sin(theta); scale = (2 * gmap->y_point) / 120.0; /* Rotate / scale all points */ poly_point = poly->points; shape_point = shape->points; for (idx = 0; idx < shape->num_points; idx++, shape_point++, poly_point++) { poly_point->x = rint(scale * shape_point->x); poly_point->y = rint(scale * shape_point->y); if (edge == NULL || edge->pos % 3 > 0) { gint x = poly_point->x; gint y = poly_point->y; poly_point->x = rint(x * cos_theta - y * sin_theta); poly_point->y = rint(x * sin_theta + y * cos_theta); } } /* Offset shape to hex & edge */ if (edge != NULL) { gint x_offset, y_offset; /* Recalculate the angle for the position of the edge */ theta = 2 * M_PI * (1 - edge->pos / 6.0); cos_theta = cos(theta); sin_theta = sin(theta); calc_hex_pos(gmap, edge->x, edge->y, &x_offset, &y_offset); x_offset += gmap->x_point * cos_theta; y_offset += gmap->x_point * sin_theta; poly_offset(poly, x_offset, y_offset); } } static void calc_node_poly(const GuiMap * gmap, const Node * node, const Polygon * shape, Polygon * poly) { gint idx; GdkPoint *poly_point, *shape_point; double scale; g_assert(poly->num_points >= shape->num_points); poly->num_points = shape->num_points; scale = (2 * gmap->y_point) / 120.0; /* Scale all points */ poly_point = poly->points; shape_point = shape->points; for (idx = 0; idx < shape->num_points; idx++, shape_point++, poly_point++) { poly_point->x = rint(scale * shape_point->x); poly_point->y = rint(scale * shape_point->y); } /* Offset shape to hex & node */ if (node != NULL) { gint x_offset, y_offset; double theta; calc_hex_pos(gmap, node->x, node->y, &x_offset, &y_offset); theta = 2 * M_PI / 6.0 * node->pos + M_PI / 6.0; theta = 2 * M_PI - theta; x_offset += gmap->hex_radius * cos(theta); y_offset += gmap->hex_radius * sin(theta); poly_offset(poly, x_offset, y_offset); } } static void calc_hex_poly(const GuiMap * gmap, const Hex * hex, const Polygon * shape, Polygon * poly, double scale_factor, gint x_shift) { GdkPoint *poly_point, *shape_point; double scale; gint x_offset, y_offset; gint idx; g_assert(poly->num_points >= shape->num_points); poly->num_points = shape->num_points; scale = (2 * gmap->y_point) / scale_factor; if (hex != NULL) { calc_hex_pos(gmap, hex->x, hex->y, &x_offset, &y_offset); x_offset += rint(scale * x_shift); } else x_offset = y_offset = 0; /* Scale all points, offset to right */ poly_point = poly->points; shape_point = shape->points; for (idx = 0; idx < shape->num_points; idx++, shape_point++, poly_point++) { poly_point->x = x_offset + rint(scale * shape_point->x); poly_point->y = y_offset + rint(scale * shape_point->y); } } void guimap_road_polygon(const GuiMap * gmap, const Edge * edge, Polygon * poly) { calc_edge_poly(gmap, edge, &road_poly, poly); } void guimap_ship_polygon(const GuiMap * gmap, const Edge * edge, Polygon * poly) { calc_edge_poly(gmap, edge, &ship_poly, poly); } void guimap_bridge_polygon(const GuiMap * gmap, const Edge * edge, Polygon * poly) { calc_edge_poly(gmap, edge, &bridge_poly, poly); } void guimap_city_polygon(const GuiMap * gmap, const Node * node, Polygon * poly) { calc_node_poly(gmap, node, &city_poly, poly); } void guimap_settlement_polygon(const GuiMap * gmap, const Node * node, Polygon * poly) { calc_node_poly(gmap, node, &settlement_poly, poly); } void guimap_city_wall_polygon(const GuiMap * gmap, const Node * node, Polygon * poly) { calc_node_poly(gmap, node, &city_wall_poly, poly); } static void guimap_nosetup_polygon(const GuiMap * gmap, const Node * node, Polygon * poly) { calc_node_poly(gmap, node, &nosetup_poly, poly); } static void guimap_robber_polygon(const GuiMap * gmap, const Hex * hex, Polygon * poly) { calc_hex_poly(gmap, hex, &robber_poly, poly, 140.0, 50); } static void guimap_pirate_polygon(const GuiMap * gmap, const Hex * hex, Polygon * poly) { calc_hex_poly(gmap, hex, &pirate_poly, poly, 80.0, 0); } void draw_dice_roll(PangoLayout * layout, cairo_t * cr, gdouble x_offset, gdouble y_offset, gdouble radius, gint n, gint terrain, gboolean highlight) { gchar num[10]; gint height; gint width; gdouble x; gdouble y; gint idx; MapTheme *theme = theme_get_current(); THEME_COLOR col; TColor *tcol; gint width_sqr; #define col_or_ovr(ter,cno) \ ((terrain < TC_MAX_OVRTILE && theme->ovr_colors[ter][cno].set) ? \ &(theme->ovr_colors[ter][cno]) : \ &(theme->colors[cno])) cairo_set_line_width(cr, 1.0); col = highlight ? TC_CHIP_H_BG : TC_CHIP_BG; tcol = col_or_ovr(terrain, col); if (!tcol->transparent) { gdk_cairo_set_source_color(cr, &(tcol->color)); cairo_move_to(cr, x_offset + radius, y_offset); cairo_arc(cr, x_offset, y_offset, radius, 0.0, 2 * M_PI); cairo_fill(cr); } tcol = col_or_ovr(terrain, TC_CHIP_BD); if (!tcol->transparent) { gdk_cairo_set_source_color(cr, &(tcol->color)); cairo_move_to(cr, x_offset + radius, y_offset); cairo_arc(cr, x_offset, y_offset, radius, 0.0, 2 * M_PI); cairo_stroke(cr); } col = (n == 6 || n == 8) ? TC_CHIP_H_FG : TC_CHIP_FG; tcol = col_or_ovr(terrain, col); if (!tcol->transparent) { sprintf(num, "%d", n); pango_layout_set_markup(layout, num, -1); pango_layout_get_pixel_size(layout, &width, &height); gdk_cairo_set_source_color(cr, &(tcol->color)); cairo_move_to(cr, x_offset - width / 2, y_offset - height / 2); pango_cairo_show_layout(cr, layout); width_sqr = sqr(radius) - sqr(height / 2); if (width_sqr >= sqr(6 * 2)) { /* Enough space available for the dots */ x = x_offset - chances[n] * 4 / 2.0; y = y_offset - 1 + height / 2.0; for (idx = 0; idx < chances[n]; idx++) { cairo_arc(cr, x + 2, y + 2, 1.0, 0.0, 2 * M_PI); cairo_fill(cr); x += 4; } } } } static gboolean display_hex(const Hex * hex, gpointer closure) { gint x_offset, y_offset; GdkPoint points[MAX_POINTS]; Polygon poly; int idx; const MapTheme *theme = theme_get_current(); const GuiMap *gmap = closure; calc_hex_pos(gmap, hex->x, hex->y, &x_offset, &y_offset); cairo_set_line_width(gmap->cr, 1.0); /* Fill the hex with the nice pattern */ poly.points = points; poly.num_points = G_N_ELEMENTS(points); get_hex_polygon(gmap, &poly); poly_offset(&poly, x_offset, y_offset); /* Draw the hex */ gdk_cairo_set_source_pixmap(gmap->cr, theme->terrain_tiles[hex->terrain], x_offset - gmap->x_point, y_offset - gmap->hex_radius); cairo_pattern_set_extend(cairo_get_source(gmap->cr), CAIRO_EXTEND_REPEAT); poly_draw(gmap->cr, TRUE, &poly); /* Draw border around hex */ if (!theme->colors[TC_HEX_BD].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme-> colors[TC_HEX_BD].color); poly_draw(gmap->cr, FALSE, &poly); } /* Draw the dice roll */ if (hex->roll > 0 && gmap->chit_radius > 0) { g_assert(gmap->layout); draw_dice_roll(gmap->layout, gmap->cr, x_offset, y_offset, gmap->chit_radius, hex->roll, hex->terrain, !hex->robber && hex->roll == gmap->highlight_chit); } /* Draw ports */ if (hex->resource != NO_RESOURCE && gmap->chit_radius > 0) { const gchar *str = ""; gint width, height; int tileno = hex->resource == ANY_RESOURCE ? ANY_PORT_TILE : hex->resource; gboolean drawit; gboolean typeind; /* Draw lines from port to shore */ gdk_cairo_set_source_color(gmap->cr, &white); const double dashes[] = { 4.0 }; cairo_set_dash(gmap->cr, dashes, G_N_ELEMENTS(dashes), 0.0); cairo_move_to(gmap->cr, x_offset, y_offset); cairo_line_to(gmap->cr, points[(hex->facing + 5) % 6].x, points[(hex->facing + 5) % 6].y); cairo_move_to(gmap->cr, x_offset, y_offset); cairo_line_to(gmap->cr, points[hex->facing].x, points[hex->facing].y); cairo_stroke(gmap->cr); cairo_set_dash(gmap->cr, NULL, 0, 0.0); /* Fill/tile port indicator */ if (theme->port_tiles[tileno]) { gdk_cairo_set_source_pixmap(gmap->cr, theme->port_tiles [tileno], x_offset - theme->port_tiles_width [tileno] / 2, y_offset - theme->port_tiles_height [tileno] / 2); cairo_pattern_set_extend(cairo_get_source (gmap->cr), CAIRO_EXTEND_REPEAT); typeind = TRUE; drawit = TRUE; } else if (!theme->colors[TC_PORT_BG].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_PORT_BG].color); typeind = FALSE; drawit = TRUE; } else { typeind = FALSE; drawit = FALSE; } if (drawit) { cairo_arc(gmap->cr, x_offset, y_offset, gmap->chit_radius, 0.0, 2 * M_PI); cairo_fill(gmap->cr); } /* Outline port indicator */ if (!theme->colors[TC_PORT_BD].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_PORT_BD].color); cairo_arc(gmap->cr, x_offset, y_offset, gmap->chit_radius, 0.0, 2 * M_PI); cairo_stroke(gmap->cr); } /* Print trading ratio */ if (!theme->colors[TC_PORT_FG].transparent) { if (typeind) { if (hex->resource < NO_RESOURCE) /* Port indicator for a resource: trade 2 for 1 */ str = _("2:1"); else /* Port indicator: trade 3 for 1 */ str = _("3:1"); } else { switch (hex->resource) { case BRICK_RESOURCE: /* Port indicator for brick */ str = Q_("Brick port|B"); break; case GRAIN_RESOURCE: /* Port indicator for grain */ str = Q_("Grain port|G"); break; case ORE_RESOURCE: /* Port indicator for ore */ str = Q_("Ore port|O"); break; case WOOL_RESOURCE: /* Port indicator for wool */ str = Q_("Wool port|W"); break; case LUMBER_RESOURCE: /* Port indicator for lumber */ str = Q_("Lumber port|L"); break; default: /* General port indicator */ str = _("3:1"); break; } } pango_layout_set_markup(gmap->layout, str, -1); pango_layout_get_pixel_size(gmap->layout, &width, &height); gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_PORT_FG].color); cairo_move_to(gmap->cr, x_offset - width / 2, y_offset - height / 2); pango_cairo_show_layout(gmap->cr, gmap->layout); } } cairo_set_line_width(gmap->cr, 1.0); /* Draw all roads and ships */ for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) { const Edge *edge = hex->edges[idx]; if (edge->owner < 0) continue; poly.num_points = G_N_ELEMENTS(points); switch (edge->type) { case BUILD_ROAD: guimap_road_polygon(gmap, edge, &poly); break; case BUILD_SHIP: guimap_ship_polygon(gmap, edge, &poly); break; case BUILD_BRIDGE: guimap_bridge_polygon(gmap, edge, &poly); break; default: g_assert_not_reached(); break; } gdk_cairo_set_source_color(gmap->cr, colors_get_player(edge->owner)); poly_draw_with_border(gmap->cr, &black, &poly); } /* Draw all buildings */ for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) { const Node *node = hex->nodes[idx]; const GdkColor *color; if (node->owner < 0 && !gmap->show_nosetup_nodes) continue; if (node->owner < 0) { if (!node->no_setup) continue; color = &white; poly.num_points = G_N_ELEMENTS(points); guimap_nosetup_polygon(gmap, node, &poly); } else { color = colors_get_player(node->owner); /* If there are city walls, draw them. */ if (node->city_wall) { poly.num_points = G_N_ELEMENTS(points); guimap_city_wall_polygon(gmap, node, &poly); gdk_cairo_set_source_color(gmap->cr, color); poly_draw_with_border(gmap->cr, &black, &poly); } /* Draw the building */ color = colors_get_player(node->owner); poly.num_points = G_N_ELEMENTS(points); if (node->type == BUILD_CITY) guimap_city_polygon(gmap, node, &poly); else guimap_settlement_polygon(gmap, node, &poly); } gdk_cairo_set_source_color(gmap->cr, color); poly_draw_with_border(gmap->cr, &black, &poly); } /* Draw the robber */ if (hex->robber) { poly.num_points = G_N_ELEMENTS(points); guimap_robber_polygon(gmap, hex, &poly); cairo_set_line_width(gmap->cr, 1.0); if (!theme->colors[TC_ROBBER_FG].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_ROBBER_FG].color); poly_draw(gmap->cr, TRUE, &poly); } if (!theme->colors[TC_ROBBER_BD].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_ROBBER_BD].color); poly_draw(gmap->cr, FALSE, &poly); } } /* Draw the pirate */ if (hex == hex->map->pirate_hex) { poly.num_points = G_N_ELEMENTS(points); guimap_pirate_polygon(gmap, hex, &poly); cairo_set_line_width(gmap->cr, 1.0); if (!theme->colors[TC_ROBBER_FG].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_ROBBER_FG].color); poly_draw(gmap->cr, TRUE, &poly); } if (!theme->colors[TC_ROBBER_BD].transparent) { gdk_cairo_set_source_color(gmap->cr, &theme->colors [TC_ROBBER_BD].color); poly_draw(gmap->cr, FALSE, &poly); } } return FALSE; } void guimap_scale_with_radius(GuiMap * gmap, gint radius) { if (radius < MIN_HEX_RADIUS) radius = MIN_HEX_RADIUS; gmap->hex_radius = radius; gmap->x_point = radius * cos(M_PI / 6.0); gmap->y_point = radius * sin(M_PI / 6.0); gmap->x_margin = gmap->y_margin = 0; if (gmap->map == NULL) return; gmap->width = gmap->map->x_size * 2 * gmap->x_point + gmap->x_point; gmap->height = (gmap->map->y_size - 1) * (gmap->hex_radius + gmap->y_point) + 2 * gmap->hex_radius; if (gmap->map->shrink_left) gmap->width -= gmap->x_point; if (gmap->map->shrink_right) gmap->width -= gmap->x_point; if (gmap->cr != NULL) { cairo_destroy(gmap->cr); gmap->cr = NULL; } gmap->chit_radius = 15; theme_rescale(2 * gmap->x_point); } void guimap_scale_to_size(GuiMap * gmap, gint width, gint height) { if (gmap->is_custom_view) { gint x_margin = gmap->x_margin; gint y_margin = gmap->y_margin; guimap_scale_with_radius(gmap, gmap->hex_radius); gmap->x_margin = x_margin; gmap->y_margin = y_margin; gmap->width = width; gmap->height = height; return; } const gint reserved_width = 0; const gint reserved_height = 0; gint width_radius; gint height_radius; width_radius = (width - reserved_width) / ((gmap->map->x_size * 2 + 1 - gmap->map->shrink_left - gmap->map->shrink_right) * cos(M_PI / 6.0)); height_radius = (height - reserved_height) / ((gmap->map->y_size - 1) * (sin(M_PI / 6.0) + 1) + 2); if (width_radius < height_radius) guimap_scale_with_radius(gmap, width_radius); else guimap_scale_with_radius(gmap, height_radius); gmap->x_margin += (width - gmap->width) / 2; gmap->y_margin += (height - gmap->height) / 2; gmap->width = width; gmap->height = height; } /** @return The radius of the chit for the current font size */ gint guimap_get_chit_radius(PangoLayout * layout, gboolean show_dots) { gint width, height; gint size_for_99_sqr; gint size_for_port_sqr; gint size_for_text_sqr; /* Calculate the maximum size of the text in the chits */ pango_layout_set_markup(layout, "99", -1); pango_layout_get_pixel_size(layout, &width, &height); size_for_99_sqr = sqr(width) + sqr(height); pango_layout_set_markup(layout, "3:1", -1); pango_layout_get_pixel_size(layout, &width, &height); size_for_port_sqr = sqr(width) + sqr(height); size_for_text_sqr = MAX(size_for_99_sqr, size_for_port_sqr); if (show_dots) { gint size_with_dots = sqr(height / 2 + 2) + sqr(6 * 2); if (size_with_dots * 4 > size_for_text_sqr) return sqrt(size_with_dots); } /* Divide: calculations should have been sqr(width/2)+sqr(height/2) */ return sqrt(size_for_text_sqr) / 2; } void guimap_display(GuiMap * gmap) { gint maximum_size; gint size_for_text; PangoContext *pc; PangoFontDescription *pfd; gint font_size; if (gmap->pixmap == NULL) return; if (gmap->cr != NULL) { cairo_destroy(gmap->cr); } gmap->cr = gdk_cairo_create(gmap->pixmap); gdk_cairo_set_source_pixmap(gmap->cr, theme_get_current()->terrain_tiles [BOARD_TILE], 0, 0); cairo_pattern_set_extend(cairo_get_source(gmap->cr), CAIRO_EXTEND_REPEAT); cairo_rectangle(gmap->cr, 0, 0, gmap->width, gmap->height); cairo_fill(gmap->cr); if (gmap->layout != NULL) g_object_unref(gmap->layout); gmap->layout = gtk_widget_create_pango_layout(gmap->area, ""); /* Manipulate the font size */ pc = pango_layout_get_context(gmap->layout); pfd = pango_context_get_font_description(pc); /* Store the initial font size, since it is remembered for the area */ if (gmap->initial_font_size == -1) { font_size = pango_font_description_get_size(pfd); gmap->initial_font_size = font_size; } else { font_size = gmap->initial_font_size; } /* The radius of the chit is at most 67% of the tile, * so the terrain can be seen. */ maximum_size = gmap->hex_radius * 2 / 3; /* First attempt to fit the text and the dots in the chit */ pango_font_description_set_size(pfd, font_size); pango_layout_set_font_description(gmap->layout, pfd); size_for_text = guimap_get_chit_radius(gmap->layout, TRUE); /* Shrink the font size until the letters fit in the chit */ while (maximum_size < size_for_text && font_size > 0) { pango_font_description_set_size(pfd, font_size); pango_layout_set_font_description(gmap->layout, pfd); font_size -= PANGO_SCALE; size_for_text = guimap_get_chit_radius(gmap->layout, FALSE); }; if (font_size <= 0) { gmap->chit_radius = 0; } else { gmap->chit_radius = size_for_text; } map_traverse_const(gmap->map, display_hex, gmap); } void guimap_zoom_normal(GuiMap * gmap) { GtkAllocation allocation; gmap->is_custom_view = FALSE; gtk_widget_get_allocation(gmap->area, &allocation); guimap_scale_to_size(gmap, allocation.width, allocation.height); guimap_display(gmap); gtk_widget_queue_draw(gmap->area); } void guimap_zoom_center_map(GuiMap * gmap) { GtkAllocation allocation; if (!gmap->is_custom_view) return; gint width = gmap->map->x_size * 2 * gmap->x_point + gmap->x_point; if (gmap->map->shrink_left) width -= gmap->x_point; if (gmap->map->shrink_right) width -= gmap->x_point; gtk_widget_get_allocation(gmap->area, &allocation); gmap->x_margin = allocation.width / 2 - width / 2; gint height = (gmap->map->y_size - 1) * (gmap->hex_radius + gmap->y_point) + 2 * gmap->hex_radius; gmap->y_margin = allocation.height / 2 - height / 2; guimap_display(gmap); gtk_widget_queue_draw(gmap->area); } static void find_edge(GuiMap * gmap, gint x, gint y, MapElement * element) { Hex *hex = guimap_find_hex(gmap, x, y); if (hex) { gint center_x; gint center_y; calc_hex_pos(gmap, hex->x, hex->y, ¢er_x, ¢er_y); gdouble angle = atan2(y - center_y, x - center_x); gint idx = (gint) (floor(-angle / 2.0 / M_PI * 6 + 0.5) + 6) % 6; element->edge = hex->edges[idx]; } else { element->edge = NULL; } } Node *guimap_find_node(GuiMap * gmap, gint x, gint y) { Hex *hex = guimap_find_hex(gmap, x, y); if (hex) { gint center_x; gint center_y; calc_hex_pos(gmap, hex->x, hex->y, ¢er_x, ¢er_y); gdouble angle = atan2(y - center_y, x - center_x); gint idx = (gint) (floor(-angle / 2.0 / M_PI * 6) + 6) % 6; return hex->nodes[idx]; } return NULL; } static void find_node(GuiMap * gmap, gint x, gint y, MapElement * element) { element->node = guimap_find_node(gmap, x, y); } Hex *guimap_find_hex(GuiMap * gmap, gint x, gint y) { gint x_hex; gint y_hex; reverse_calc_hex_pos(gmap, x, y, &x_hex, &y_hex); return map_hex(gmap->map, x_hex, y_hex); } static void find_hex(GuiMap * gmap, gint x, gint y, MapElement * element) { element->hex = guimap_find_hex(gmap, x, y); } void guimap_draw_edge(GuiMap * gmap, const Edge * edge) { GdkRectangle rect; gint idx; Polygon poly; GdkPoint points[MAX_POINTS]; g_return_if_fail(edge != NULL); g_return_if_fail(gmap->pixmap != NULL); poly.num_points = G_N_ELEMENTS(points); poly.points = points; calc_edge_poly(gmap, edge, &largest_edge_poly, &poly); poly_bound_rect(&poly, 1, &rect); gdk_cairo_set_source_pixmap(gmap->cr, theme_get_current()->terrain_tiles [BOARD_TILE], 0, 0); cairo_pattern_set_extend(cairo_get_source(gmap->cr), CAIRO_EXTEND_REPEAT); cairo_rectangle(gmap->cr, rect.x, rect.y, rect.width, rect.height); cairo_fill(gmap->cr); for (idx = 0; idx < G_N_ELEMENTS(edge->hexes); idx++) if (edge->hexes[idx] != NULL) display_hex(edge->hexes[idx], gmap); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); } static void draw_cursor(GuiMap * gmap, gint owner, const Polygon * poly) { GdkRectangle rect; g_return_if_fail(gmap->cursor.pointer != NULL); cairo_set_line_width(gmap->cr, 3.0); gdk_cairo_set_source_color(gmap->cr, colors_get_player(owner)); poly_draw_with_border(gmap->cr, &green, poly); poly_bound_rect(poly, 1, &rect); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); } static void erase_edge_cursor(GuiMap * gmap) { g_return_if_fail(gmap->cursor.pointer != NULL); guimap_draw_edge(gmap, gmap->cursor.edge); } static void draw_road_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_road_polygon(gmap, gmap->cursor.edge, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); } static void draw_ship_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_ship_polygon(gmap, gmap->cursor.edge, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); } static void draw_bridge_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_bridge_polygon(gmap, gmap->cursor.edge, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); } void guimap_draw_node(GuiMap * gmap, const Node * node) { GdkRectangle rect; int idx; Polygon poly; GdkPoint points[MAX_POINTS]; g_return_if_fail(node != NULL); g_return_if_fail(gmap->pixmap != NULL); poly.num_points = G_N_ELEMENTS(points); poly.points = points; calc_node_poly(gmap, node, &largest_node_poly, &poly); poly_bound_rect(&poly, 1, &rect); gdk_cairo_set_source_pixmap(gmap->cr, theme_get_current()->terrain_tiles [BOARD_TILE], 0, 0); cairo_pattern_set_extend(cairo_get_source(gmap->cr), CAIRO_EXTEND_REPEAT); cairo_rectangle(gmap->cr, rect.x, rect.y, rect.width, rect.height); cairo_fill(gmap->cr); for (idx = 0; idx < G_N_ELEMENTS(node->hexes); idx++) if (node->hexes[idx] != NULL) display_hex(node->hexes[idx], gmap); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); } static void erase_node_cursor(GuiMap * gmap) { g_return_if_fail(gmap->cursor.pointer != NULL); guimap_draw_node(gmap, gmap->cursor.node); } static void draw_settlement_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_settlement_polygon(gmap, gmap->cursor.node, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); } static void draw_city_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_city_polygon(gmap, gmap->cursor.node, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); } static void draw_city_wall_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_city_wall_polygon(gmap, gmap->cursor.node, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); poly.points = points; poly.num_points = G_N_ELEMENTS(points); guimap_city_polygon(gmap, gmap->cursor.node, &poly); draw_cursor(gmap, gmap->cursor_owner, &poly); } static void draw_steal_building_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; const Node *node; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); node = gmap->cursor.node; switch (node->type) { case BUILD_SETTLEMENT: guimap_settlement_polygon(gmap, node, &poly); draw_cursor(gmap, node->owner, &poly); break; case BUILD_CITY: guimap_city_polygon(gmap, node, &poly); draw_cursor(gmap, node->owner, &poly); break; default: g_assert_not_reached(); break; } } static void draw_steal_ship_cursor(GuiMap * gmap) { GdkPoint points[MAX_POINTS]; Polygon poly; const Edge *edge; g_return_if_fail(gmap->cursor.pointer != NULL); poly.points = points; poly.num_points = G_N_ELEMENTS(points); edge = gmap->cursor.edge; switch (edge->type) { case BUILD_SHIP: guimap_ship_polygon(gmap, edge, &poly); draw_cursor(gmap, edge->owner, &poly); break; default: g_assert_not_reached(); break; } } static void erase_robber_cursor(GuiMap * gmap) { const Hex *hex = gmap->cursor.hex; GdkPoint points[MAX_POINTS]; Polygon poly; GdkRectangle rect; if (hex == NULL) return; poly.points = points; poly.num_points = G_N_ELEMENTS(points); if (hex->terrain == SEA_TERRAIN) guimap_pirate_polygon(gmap, hex, &poly); else guimap_robber_polygon(gmap, hex, &poly); poly_bound_rect(&poly, 1, &rect); display_hex(hex, gmap); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); } static void draw_robber_cursor(GuiMap * gmap) { const Hex *hex = gmap->cursor.hex; GdkPoint points[MAX_POINTS]; Polygon poly; GdkRectangle rect; if (hex == NULL) return; poly.points = points; poly.num_points = G_N_ELEMENTS(points); if (hex->terrain == SEA_TERRAIN) guimap_pirate_polygon(gmap, hex, &poly); else guimap_robber_polygon(gmap, hex, &poly); poly_bound_rect(&poly, 1, &rect); cairo_set_line_width(gmap->cr, 2.0); gdk_cairo_set_source_color(gmap->cr, &green); poly_draw(gmap->cr, FALSE, &poly); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); } static gboolean highlight_chits(const Hex * hex, gpointer closure) { HighlightInfo *highlight_info = closure; GuiMap *gmap = highlight_info->gmap; GdkPoint points[6]; Polygon poly; gint x_offset, y_offset; GdkRectangle rect; if (hex->roll != highlight_info->old_highlight && hex->roll != gmap->highlight_chit) return FALSE; display_hex(hex, gmap); poly.points = points; poly.num_points = G_N_ELEMENTS(points); get_hex_polygon(gmap, &poly); calc_hex_pos(gmap, hex->x, hex->y, &x_offset, &y_offset); poly_offset(&poly, x_offset, y_offset); poly_bound_rect(&poly, 1, &rect); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); return FALSE; } void guimap_highlight_chits(GuiMap * gmap, gint roll) { HighlightInfo closure; if (roll == gmap->highlight_chit) return; closure.gmap = gmap; closure.old_highlight = gmap->highlight_chit; gmap->highlight_chit = roll; if (gmap->pixmap != NULL) map_traverse_const(gmap->map, highlight_chits, &closure); } void guimap_draw_hex(GuiMap * gmap, const Hex * hex) { GdkPoint points[MAX_POINTS]; Polygon poly; GdkRectangle rect; gint x_offset, y_offset; if (hex == NULL) return; display_hex(hex, gmap); poly.points = points; poly.num_points = G_N_ELEMENTS(points); get_hex_polygon(gmap, &poly); calc_hex_pos(gmap, hex->x, hex->y, &x_offset, &y_offset); poly_offset(&poly, x_offset, y_offset); poly_bound_rect(&poly, 1, &rect); gdk_window_invalidate_rect(gtk_widget_get_window(gmap->area), &rect, FALSE); } typedef struct { void (*find) (GuiMap * gmap, gint x, gint y, MapElement * element); void (*erase_cursor) (GuiMap * gmap); void (*draw_cursor) (GuiMap * gmap); } ModeCursor; /* This array must follow the enum CursorType */ static ModeCursor cursors[] = { {NULL, NULL, NULL}, /* NO_CURSOR */ {find_edge, erase_edge_cursor, draw_road_cursor}, /* ROAD_CURSOR */ {find_edge, erase_edge_cursor, draw_ship_cursor}, /* SHIP_CURSOR */ {find_edge, erase_edge_cursor, draw_bridge_cursor}, /* BRIDGE_CURSOR */ {find_node, erase_node_cursor, draw_settlement_cursor}, /* SETTLEMENT_CURSOR */ {find_node, erase_node_cursor, draw_city_cursor}, /* CITY_CURSOR */ {find_node, erase_node_cursor, draw_city_wall_cursor}, /* CITY_WALL_CURSOR */ {find_node, erase_node_cursor, draw_steal_building_cursor}, /* STEAL_BUILDING_CURSOR */ {find_edge, erase_edge_cursor, draw_steal_ship_cursor}, /* STEAL_SHIP_CURSOR */ {find_hex, erase_robber_cursor, draw_robber_cursor} /* ROBBER_CURSOR */ }; gboolean roadM, shipM, bridgeM, settlementM, cityM, cityWallM, shipMoveM; CheckFunc roadF, shipF, bridgeF, settlementF, cityF, cityWallF, shipMoveF; SelectFunc roadS, shipS, bridgeS, settlementS, cityS, cityWallS, shipMoveS; CancelFunc shipMoveC; /** Calculate the distance between the element and the cursor. * @param gmap The GuiMap * @param element An Edge or a Node * @param isEdge TRUE if element is an Edge * @param cursor_x X position of the cursor * @param cursor_y Y position of the cursor * @return The square of the distance */ gint guimap_distance_cursor(const GuiMap * gmap, const MapElement * element, MapElementType type, gint cursor_x, gint cursor_y) { static GdkPoint single_point = { 0, 0 }; static const Polygon simple_poly = { &single_point, 1 }; GdkPoint translated_point; Polygon poly; poly.num_points = 1; poly.points = &translated_point; switch (type) { case MAP_EDGE: calc_edge_poly(gmap, element->edge, &simple_poly, &poly); break; case MAP_NODE: calc_node_poly(gmap, element->node, &simple_poly, &poly); break; case MAP_HEX: calc_hex_poly(gmap, element->hex, &simple_poly, &poly, 120.0, 0); break; } return sqr(cursor_x - poly.points[0].x) + sqr(cursor_y - poly.points[0].y); } void guimap_cursor_move(GuiMap * gmap, gint x, gint y, MapElement * element) { ModeCursor *mode; if (single_click_build_active) { MapElement dummyElement; gboolean can_build_road = FALSE; gboolean can_build_ship = FALSE; gboolean can_build_bridge = FALSE; gboolean can_build_settlement = FALSE; gboolean can_build_city = FALSE; gboolean can_build_city_wall = FALSE; gboolean can_move_ship = FALSE; gboolean can_build_edge = FALSE; gboolean can_build_node = FALSE; gint distance_edge = 0; gint distance_node = 0; dummyElement.pointer = NULL; find_edge(gmap, x, y, element); if (element->pointer) { can_build_road = (roadM && roadF(*element, gmap->player_num, dummyElement)); can_build_ship = (shipM && shipF(*element, gmap->player_num, dummyElement)); can_build_bridge = (bridgeM && bridgeF(*element, gmap->player_num, dummyElement)); can_move_ship = (shipMoveM && shipMoveF(*element, gmap->player_num, dummyElement)); /* When both a road and a ship can be built, * build a road when the cursor is over land, * build a ship when the cursor is over sea */ if (can_build_road && can_build_ship) { MapElement hex1, hex2; gint distance1, distance2; hex1.hex = element->edge->hexes[0]; hex2.hex = element->edge->hexes[1]; distance1 = guimap_distance_cursor(gmap, &hex1, MAP_HEX, x, y); distance2 = guimap_distance_cursor(gmap, &hex2, MAP_HEX, x, y); if (distance1 == distance2) can_build_ship = FALSE; else { if (distance2 < distance1) hex1.hex = hex2.hex; if (hex1.hex->terrain == SEA_TERRAIN) can_build_road = FALSE; else can_build_ship = FALSE; } } /* When both a ship and a bridge can be built, * divide the edge in four segments. * The two segments near the nodes are for the * bridge (the pillars). * The two segments in the middle are for the * ship (open sea). */ if (can_build_ship && can_build_bridge) { MapElement node1, node2; gint distanceNode, distanceEdge; node1.node = element->edge->nodes[0]; node2.node = element->edge->nodes[1]; distanceNode = MIN(guimap_distance_cursor (gmap, &node1, MAP_NODE, x, y), guimap_distance_cursor(gmap, &node2, MAP_NODE, x, y)); distanceEdge = guimap_distance_cursor(gmap, element, MAP_EDGE, x, y); if (distanceNode < distanceEdge) can_build_ship = FALSE; else can_build_bridge = FALSE; } can_build_edge = can_build_road || can_build_ship || can_build_bridge || can_move_ship; if (can_build_edge) distance_edge = guimap_distance_cursor(gmap, element, MAP_EDGE, x, y); } find_node(gmap, x, y, element); if (element->pointer) { can_build_settlement = (settlementM && settlementF(*element, gmap-> player_num, dummyElement)); can_build_city = (cityM && cityF(*element, gmap->player_num, dummyElement)); can_build_city_wall = (cityWallM && cityWallF(*element, gmap-> player_num, dummyElement)); can_build_node = can_build_settlement || can_build_city || can_build_city_wall; if (can_build_node) distance_node = guimap_distance_cursor(gmap, element, MAP_NODE, x, y); } /* When both edge and node can be built, * build closest to the cursor. * When equidistant, prefer the node. */ if (can_build_edge && can_build_node) { if (can_build_bridge) { /* Prefer bridge over node */ can_build_node = FALSE; } else if (distance_node <= distance_edge) { can_build_edge = FALSE; } else { can_build_node = FALSE; } } /* Prefer the most special road segment, if possible */ if (can_build_bridge && can_build_edge) guimap_cursor_set(gmap, BRIDGE_CURSOR, gmap->player_num, bridgeF, bridgeS, NULL, NULL, TRUE); else if (can_build_ship && can_build_edge) guimap_cursor_set(gmap, SHIP_CURSOR, gmap->player_num, shipF, shipS, NULL, NULL, TRUE); else if (can_build_road && can_build_edge) guimap_cursor_set(gmap, ROAD_CURSOR, gmap->player_num, roadF, roadS, NULL, NULL, TRUE); else if (can_build_settlement && can_build_node) guimap_cursor_set(gmap, SETTLEMENT_CURSOR, gmap->player_num, settlementF, settlementS, NULL, NULL, TRUE); else if (can_build_city && can_build_node) guimap_cursor_set(gmap, CITY_CURSOR, gmap->player_num, cityF, cityS, NULL, NULL, TRUE); else if (can_build_city_wall && can_build_node) guimap_cursor_set(gmap, CITY_WALL_CURSOR, gmap->player_num, cityWallF, cityWallS, NULL, NULL, TRUE); else if (can_move_ship && can_build_edge) guimap_cursor_set(gmap, SHIP_CURSOR, gmap->player_num, shipMoveF, shipMoveS, NULL, NULL, TRUE); else guimap_cursor_set(gmap, NO_CURSOR, gmap->player_num, NULL, NULL, NULL, NULL, TRUE); } if (gmap->cursor_type == NO_CURSOR) { element->pointer = NULL; return; } mode = cursors + gmap->cursor_type; mode->find(gmap, x, y, element); if (element->pointer != gmap->cursor.pointer) { if (gmap->cursor.pointer != NULL) mode->erase_cursor(gmap); if (gmap->check_func == NULL || (element->pointer != NULL && gmap->check_func(*element, gmap->cursor_owner, gmap->user_data))) { gmap->cursor = *element; mode->draw_cursor(gmap); } else { gmap->cursor.pointer = NULL; } } } void guimap_cursor_select(GuiMap * gmap, gint x, gint y) { MapElement cursor; SelectFunc check_select; MapElement user_data; guimap_cursor_move(gmap, x, y, &cursor); if (cursor.pointer == NULL) return; if (gmap->check_func != NULL && !gmap->check_func(cursor, gmap->cursor_owner, gmap->user_data)) { if (gmap->check_cancel != NULL) gmap->check_cancel(); return; } if (gmap->check_select != NULL) { /* Before processing the select, clear the cursor */ check_select = gmap->check_select; user_data.pointer = gmap->user_data.pointer; if (gmap->cursor.pointer != NULL) cursors[gmap->cursor_type].erase_cursor(gmap); gmap->cursor_owner = -1; gmap->check_func = NULL; gmap->cursor_type = NO_CURSOR; gmap->cursor.pointer = NULL; gmap->user_data.pointer = NULL; gmap->check_select = NULL; check_select(cursor, user_data); } } void guimap_cursor_set(GuiMap * gmap, CursorType cursor_type, gint owner, CheckFunc check_func, SelectFunc check_select, CancelFunc cancel_func, const MapElement * user_data, gboolean set_by_single_click) { single_click_build_active = set_by_single_click; if (cursor_type != NO_CURSOR) g_assert(owner >= 0); if (gmap->check_cancel != NULL) gmap->check_cancel(); gmap->cursor_owner = owner; gmap->check_func = check_func; gmap->check_select = check_select; gmap->check_cancel = cancel_func; if (user_data != NULL) { gmap->user_data.pointer = user_data->pointer; } else { gmap->user_data.pointer = NULL; } if (cursor_type == gmap->cursor_type) return; if (gmap->cursor.pointer != NULL) { g_assert(gmap->cursor_type != NO_CURSOR); cursors[gmap->cursor_type].erase_cursor(gmap); } gmap->cursor_type = cursor_type; gmap->cursor.pointer = NULL; } void guimap_single_click_set_functions(CheckFunc road_check_func, SelectFunc road_select_func, CheckFunc ship_check_func, SelectFunc ship_select_func, CheckFunc bridge_check_func, SelectFunc bridge_select_func, CheckFunc settlement_check_func, SelectFunc settlement_select_func, CheckFunc city_check_func, SelectFunc city_select_func, CheckFunc city_wall_check_func, SelectFunc city_wall_select_func, CheckFunc ship_move_check_func, SelectFunc ship_move_select_func, CancelFunc ship_move_cancel_func) { roadF = road_check_func; roadS = road_select_func; shipF = ship_check_func; shipS = ship_select_func; bridgeF = bridge_check_func; bridgeS = bridge_select_func; settlementF = settlement_check_func; settlementS = settlement_select_func; cityF = city_check_func; cityS = city_select_func; cityWallF = city_wall_check_func; cityWallS = city_wall_select_func; shipMoveF = ship_move_check_func; shipMoveS = ship_move_select_func; shipMoveC = ship_move_cancel_func; single_click_build_active = TRUE; } void guimap_single_click_set_road_mask(gboolean mask) { roadM = mask; } void guimap_single_click_set_ship_mask(gboolean mask) { shipM = mask; } void guimap_single_click_set_bridge_mask(gboolean mask) { bridgeM = mask; } void guimap_single_click_set_settlement_mask(gboolean mask) { settlementM = mask; } void guimap_single_click_set_city_mask(gboolean mask) { cityM = mask; } void guimap_single_click_set_city_wall_mask(gboolean mask) { cityWallM = mask; } void guimap_single_click_set_ship_move_mask(gboolean mask) { shipMoveM = mask; } void guimap_set_show_no_setup_nodes(GuiMap * gmap, gboolean show) { gboolean old_show = gmap->show_nosetup_nodes; gmap->show_nosetup_nodes = show; if (old_show != show) { /* Repaint and redraw the map */ guimap_display(gmap); if (gmap->area) gtk_widget_queue_draw(gmap->area); } } pioneers-14.1/common/gtk/guimap.h0000644000175000017500000001512311572454067013731 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2004-2007 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __guimap_h #define __guimap_h #include "polygon.h" #include #define MAX_POINTS 32 /* maximum points in a polygon */ #define MIN_HEX_RADIUS 3 /* minimum hex_radius */ typedef enum { NO_CURSOR, ROAD_CURSOR, SHIP_CURSOR, BRIDGE_CURSOR, SETTLEMENT_CURSOR, CITY_CURSOR, CITY_WALL_CURSOR, STEAL_BUILDING_CURSOR, STEAL_SHIP_CURSOR, ROBBER_CURSOR } CursorType; typedef enum { MAP_EDGE, MAP_NODE, MAP_HEX } MapElementType; typedef union { const Hex *hex; const Node *node; const Edge *edge; gconstpointer pointer; } MapElement; typedef gboolean(*CheckFunc) (const MapElement element, gint owner, const MapElement user_data); typedef void (*SelectFunc) (const MapElement obj, const MapElement user_data); typedef void (*CancelFunc) (void); typedef struct _Mode Mode; typedef struct { GtkWidget *area; /**< render map in this drawing area */ GdkPixmap *pixmap; /**< off screen pixmap for drawing */ cairo_t *cr; /**< cairo for map drawing */ PangoLayout *layout; /**< layout object for rendering text */ gint initial_font_size; /**< initial font size */ Map *map; /**< map that is displayed */ gboolean show_nosetup_nodes; /**< show the nosetup nodes */ CursorType cursor_type; /**< current cursor type */ gint cursor_owner; /**< owner of the cursor */ CheckFunc check_func; /**< check object under cursor */ SelectFunc check_select; /**< when user selects cursor */ CancelFunc check_cancel; /**< when user clicks in illegal position */ MapElement user_data; /**< passed to callback functions */ MapElement cursor; /**< current GUI mode edge/node/hex cursor */ gint highlight_chit; /**< chit number to highlight */ gint chit_radius; /**< radius of the chit */ gint hex_radius; /**< size of hex on display */ gint x_point; /**< x offset of node 0 from centre */ gint y_point; /**< y offset of node 0 from centre */ gboolean is_custom_view; /**< false if all hexes are shown and centered */ gint x_margin; /**< margin to leave empty */ gint y_margin; /**< margin to leave empty */ gint width; /**< pixel width of map */ gint height; /**< pixel height of map */ gint player_num; /**< player displaying this map */ } GuiMap; GuiMap *guimap_new(void); void guimap_delete(GuiMap * gmap); void guimap_reset(GuiMap * gmap); GtkWidget *guimap_build_drawingarea(GuiMap * gmap, gint width, gint height); void guimap_road_polygon(const GuiMap * gmap, const Edge * edge, Polygon * poly); void guimap_ship_polygon(const GuiMap * gmap, const Edge * edge, Polygon * poly); void guimap_bridge_polygon(const GuiMap * gmap, const Edge * edge, Polygon * poly); void guimap_city_polygon(const GuiMap * gmap, const Node * node, Polygon * poly); void guimap_settlement_polygon(const GuiMap * gmap, const Node * node, Polygon * poly); void guimap_city_wall_polygon(const GuiMap * gmap, const Node * node, Polygon * poly); gint guimap_get_chit_radius(PangoLayout * layout, gboolean show_dots); void draw_dice_roll(PangoLayout * layout, cairo_t * cr, gdouble x_offset, gdouble y_offset, gdouble radius, gint n, gint terrain, gboolean highlight); void guimap_scale_with_radius(GuiMap * gmap, gint radius); void guimap_scale_to_size(GuiMap * gmap, gint width, gint height); void guimap_display(GuiMap * gmap); void guimap_zoom_normal(GuiMap * gmap); void guimap_zoom_center_map(GuiMap * gmap); void guimap_highlight_chits(GuiMap * gmap, gint roll); void guimap_draw_edge(GuiMap * gmap, const Edge * edge); void guimap_draw_node(GuiMap * gmap, const Node * node); void guimap_draw_hex(GuiMap * gmap, const Hex * hex); Node *guimap_find_node(GuiMap * gmap, gint x, gint y); Hex *guimap_find_hex(GuiMap * gmap, gint x, gint y); gint guimap_distance_cursor(const GuiMap * gmap, const MapElement * element, MapElementType type, gint cursor_x, gint cursor_y); void guimap_cursor_set(GuiMap * gmap, CursorType cursor_type, gint owner, CheckFunc check_func, SelectFunc select_func, CancelFunc cancel_func, const MapElement * user_data, gboolean set_by_single_click); /* Single click building. * Single click building is aborted by explicitly setting the cursor * CheckFunc: check function for a certain resource type * SelectFunc: function to call when the resource is selected */ void guimap_single_click_set_functions(CheckFunc road_check_func, SelectFunc road_select_func, CheckFunc ship_check_func, SelectFunc ship_select_func, CheckFunc bridge_check_func, SelectFunc bridge_select_func, CheckFunc settlement_check_func, SelectFunc settlement_select_func, CheckFunc city_check_func, SelectFunc city_select_func, CheckFunc city_wall_check_func, SelectFunc city_wall_select_func, CheckFunc ship_move_check_func, SelectFunc ship_move_select_func, CancelFunc ship_move_cancel_func); /* guimap_single_click_set_*_mask: * mask to determine whether the CheckFunc or SelectFunc can be used */ void guimap_single_click_set_road_mask(gboolean mask); void guimap_single_click_set_ship_mask(gboolean mask); void guimap_single_click_set_bridge_mask(gboolean mask); void guimap_single_click_set_settlement_mask(gboolean mask); void guimap_single_click_set_city_mask(gboolean mask); void guimap_single_click_set_city_wall_mask(gboolean mask); void guimap_single_click_set_ship_move_mask(gboolean mask); void guimap_cursor_select(GuiMap * gmap, gint x, gint y); void guimap_set_show_no_setup_nodes(GuiMap * gmap, gboolean show); #endif pioneers-14.1/common/gtk/metaserver.c0000644000175000017500000001045211246205071014602 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2008 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include "network.h" #include "config-gnome.h" #include "gtkbugs.h" #include "metaserver.h" static void metaserver_class_init(MetaServerClass * klass); static void metaserver_init(MetaServer * ms); /* Register the class */ GType metaserver_get_type(void) { static GType sg_type = 0; if (!sg_type) { static const GTypeInfo sg_info = { sizeof(MetaServerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) metaserver_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(MetaServer), 0, (GInstanceInitFunc) metaserver_init, NULL }; sg_type = g_type_register_static(GTK_TYPE_TABLE, "MetaServer", &sg_info, 0); } return sg_type; } static void metaserver_class_init(G_GNUC_UNUSED MetaServerClass * klass) { } /* Build the composite widget */ static void metaserver_init(MetaServer * ms) { GtkTreeIter iter; GtkCellRenderer *cell; gchar *default_metaserver_name; gchar *custom_meta_server_name; gboolean novar; /* Create model */ ms->data = gtk_list_store_new(1, G_TYPE_STRING); ms->combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ms->data)); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(ms->combo_box), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(ms->combo_box), cell, "text", 0, NULL); gtk_widget_show(ms->combo_box); gtk_widget_set_tooltip_text(ms->combo_box, /* Tooltip for the list of meta servers */ _("Select a meta server")); gtk_table_resize(GTK_TABLE(ms), 1, 1); gtk_table_attach_defaults(GTK_TABLE(ms), ms->combo_box, 0, 1, 0, 1); /* Default meta server */ default_metaserver_name = get_meta_server_name(TRUE); metaserver_add(ms, default_metaserver_name); g_free(default_metaserver_name); /* Custom meta server */ custom_meta_server_name = config_get_string ("server/custom-meta-server=pioneers.game-host.org", &novar); metaserver_add(ms, custom_meta_server_name); g_free(custom_meta_server_name); /* Select the first item. * When later metaserver_add is called, it will set the current meta server */ gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ms->data), &iter); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(ms->combo_box), &iter); } /* Create a new instance of the widget */ GtkWidget *metaserver_new(void) { return GTK_WIDGET(g_object_new(metaserver_get_type(), NULL)); } void metaserver_add(MetaServer * ms, const gchar * text) { GtkTreeIter iter; if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ms->data), &iter)) { gchar *old; gboolean found = FALSE; gboolean atend = FALSE; do { gtk_tree_model_get(GTK_TREE_MODEL(ms->data), &iter, 0, &old, -1); if (!strcmp(text, old)) found = TRUE; else atend = !gtk_tree_model_iter_next (GTK_TREE_MODEL(ms->data), &iter); g_free(old); } while (!found && !atend); if (!found) gtk_list_store_insert_with_values(ms->data, &iter, 999, 0, text, -1); } else { /* Was empty */ gtk_list_store_insert_with_values(ms->data, &iter, 999, 0, text, -1); } gtk_combo_box_set_active_iter(GTK_COMBO_BOX(ms->combo_box), &iter); } gchar *metaserver_get(MetaServer * ms) { GtkTreeIter iter; gchar *text; gtk_combo_box_get_active_iter(GTK_COMBO_BOX(ms->combo_box), &iter); gtk_tree_model_get(GTK_TREE_MODEL(ms->data), &iter, 0, &text, -1); return text; } pioneers-14.1/common/gtk/metaserver.h0000644000175000017500000000355511246205071014615 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2008 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __METASERVER_H__ #define __METASERVER_H__ #include #include #include G_BEGIN_DECLS #define METASERVER_TYPE (metaserver_get_type ()) #define METASERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), METASERVER_TYPE, MetaServer)) #define METASERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), METASERVER_TYPE, MetaServerClass)) #define IS_METASERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), METASERVER_TYPE)) #define IS_METASERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), METASERVER_TYPE)) typedef struct _MetaServer MetaServer; typedef struct _MetaServerClass MetaServerClass; struct _MetaServer { GtkTable table; GtkWidget *combo_box; GtkListStore *data; }; struct _MetaServerClass { GtkComboBoxClass parent_class; }; GType metaserver_get_type(void); GtkWidget *metaserver_new(void); void metaserver_add(MetaServer * ms, const gchar * text); gchar *metaserver_get(MetaServer * ms); G_END_DECLS #endif /* __METASERVER_H__ */ pioneers-14.1/common/gtk/player-icon.c0000644000175000017500000002437611657430613014671 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game * Go buy a copy. * * Copyright (C) 2007 Giancarlo Capella * Copyright (C) 2007 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "colors.h" #include "player-icon.h" #include "game.h" #include #include #include #include #include "gtkcompat.h" static gboolean load_pixbuf(const gchar * name, GdkPixbuf ** pixbuf); static void replace_colors(GdkPixbuf * pixbuf, const GdkColor * replace_this, const GdkColor * replace_with); GdkColor default_face_color = { 0, 0xd500, 0x7f00, 0x2000 }; GdkColor default_variant_color = { 0, 0, 0, 0 }; typedef struct PlayerAvatar { GdkPixbuf *base; GSList *variation; } PlayerAvatar; PlayerAvatar player_avatar; GdkPixbuf *ai_avatar; static gboolean load_pixbuf(const gchar * name, GdkPixbuf ** pixbuf) { gchar *filename; /* determine full path to pixmap file */ filename = g_build_filename(DATADIR, "pixmaps", "pioneers", name, NULL); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { GError *error = NULL; *pixbuf = gdk_pixbuf_new_from_file(filename, &error); if (error != NULL) { g_warning("Error loading pixmap %s\n", filename); g_error_free(error); return FALSE; } return TRUE; } else { return FALSE; } } void playericon_init(void) { GdkColormap *cmap; gint idx; gboolean good; cmap = gdk_colormap_get_system(); gdk_colormap_alloc_color(cmap, &default_face_color, FALSE, TRUE); gdk_colormap_alloc_color(cmap, &default_variant_color, FALSE, TRUE); load_pixbuf("style-human.png", &player_avatar.base); player_avatar.variation = NULL; idx = 1; do { gchar *name; GdkPixbuf *pixbuf; name = g_strdup_printf("style-human-%d.png", idx); good = load_pixbuf(name, &pixbuf); if (good) { player_avatar.variation = g_slist_append(player_avatar.variation, pixbuf); } ++idx; g_free(name); } while (good); load_pixbuf("style-ai.png", &ai_avatar); } static void replace_colors(GdkPixbuf * pixbuf, const GdkColor * replace_this, const GdkColor * replace_with) { gint i; guint new_color; guint old_color; guint *pixel; g_assert(gdk_pixbuf_get_colorspace(pixbuf) == GDK_COLORSPACE_RGB); g_assert(gdk_pixbuf_get_bits_per_sample(pixbuf) == 8); g_assert(gdk_pixbuf_get_has_alpha(pixbuf)); g_assert(gdk_pixbuf_get_n_channels(pixbuf) == 4); pixel = (guint *) gdk_pixbuf_get_pixels(pixbuf); new_color = 0xff000000 | ((replace_with->red >> 8) & 0xff) | ((replace_with->green >> 8) & 0xff) << 8 | ((replace_with->blue >> 8) & 0xff) << 16; old_color = 0xff000000 | ((replace_this->red >> 8) & 0xff) | ((replace_this->green >> 8) & 0xff) << 8 | ((replace_this->blue >> 8) & 0xff) << 16; for (i = 0; i < (gdk_pixbuf_get_rowstride(pixbuf) / 4 * gdk_pixbuf_get_height(pixbuf)); i++) { if (*pixel == old_color) *pixel = new_color; pixel++; } } GdkPixbuf *playericon_create_icon(GtkWidget * widget, const gchar * style, GdkColor * color, gboolean spectator, gboolean connected, gboolean double_size) { gint width, height; GdkPixbuf *basic_image, *overlay_image, *scaled_image; gboolean basic_substitute; PlayerType player_type; gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); if (double_size) { width *= 2; height *= 2; } basic_image = NULL; overlay_image = NULL; player_type = determine_player_type(style); /* Human players are allowed to have the square icon */ if (player_type == PLAYER_HUMAN && !strcmp(style, default_player_style)) { player_type = PLAYER_UNKNOWN; } switch (player_type) { case PLAYER_COMPUTER: /* This is an AI */ basic_image = gdk_pixbuf_copy(ai_avatar); basic_substitute = TRUE; /** @todo RC 2007-07-17 For now, the AI does not have different appearances */ break; case PLAYER_HUMAN:{ /* Draw a bust */ gint variant; GdkColor face_color, variant_color; playericon_parse_human_style(style, &face_color, &variant, &variant_color); basic_image = gdk_pixbuf_copy(player_avatar.base); basic_substitute = TRUE; /* Substitute the pure red face with the face color */ replace_colors(basic_image, &red, &face_color); /* Substitute the pure blue base with the variant color */ overlay_image = gdk_pixbuf_copy(g_slist_nth (player_avatar.variation, variant)->data); replace_colors(overlay_image, &blue, &variant_color); break; } default:{ /* Unknown or square */ cairo_t *cr; GdkPixmap *pixmap; pixmap = gdk_pixmap_new(gtk_widget_get_window(widget), width, height, gdk_visual_get_depth (gdk_visual_get_system())); cr = gdk_cairo_create(pixmap); if (spectator) { GdkPixbuf *tmp; /* Spectators have a transparent icon */ gdk_cairo_set_source_color(cr, &black); cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); tmp = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, 0, 0, 0, 0, -1, -1); basic_image = gdk_pixbuf_add_alpha(tmp, TRUE, 0, 0, 0); } else { gdk_cairo_set_source_color(cr, color); cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); gdk_cairo_set_source_color(cr, &black); cairo_set_line_width(cr, 1.0); cairo_rectangle(cr, 0.5, 0.5, width - 1, height - 1); cairo_stroke(cr); if (!connected) { cairo_rectangle(cr, 3.5, 3.5, width - 7, height - 7); cairo_rectangle(cr, 6.5, 6.5, width - 13, height - 13); cairo_stroke(cr); /* Don't draw the other emblem */ connected = TRUE; } basic_image = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, 0, 0, 0, 0, -1, -1); } basic_substitute = FALSE; cairo_destroy(cr); g_object_unref(pixmap); } } if (basic_image && basic_substitute) { /* Substitute the pure blue base with the player color */ replace_colors(basic_image, &blue, color); } if (overlay_image) { gdk_pixbuf_composite(overlay_image, basic_image, 0, 0, gdk_pixbuf_get_width(basic_image), gdk_pixbuf_get_height(basic_image), 0.0, 0.0, 1.0, 1.0, GDK_INTERP_NEAREST, 255); g_object_unref(overlay_image); } scaled_image = gdk_pixbuf_scale_simple(basic_image, width, height, GDK_INTERP_BILINEAR); g_object_unref(basic_image); if (!connected) { cairo_t *cr; GdkPixmap *pixmap; GdkPixbuf *tmp1, *tmp2; pixmap = gdk_pixmap_new(gtk_widget_get_window(widget), width, height, gdk_visual_get_depth (gdk_visual_get_system())); cr = gdk_cairo_create(pixmap); /* Black will become transparent */ gdk_cairo_set_source_color(cr, &black); cairo_rectangle(cr, 0, 0, width, height); cairo_fill(cr); gdk_cairo_set_source_color(cr, &red); cairo_move_to(cr, width / 2, height / 2); cairo_arc(cr, width * 3 / 4, height / 4, width / 4, 0.0, 2 * M_PI); cairo_fill(cr); gdk_cairo_set_source_color(cr, &white); cairo_rectangle(cr, width / 2 + 2, height / 4 - 1, width / 2 - 4, height / 8); cairo_fill(cr); tmp1 = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, 0, 0, 0, 0, -1, -1); tmp2 = gdk_pixbuf_add_alpha(tmp1, TRUE, 0, 0, 0); gdk_pixbuf_composite(tmp2, scaled_image, 0, 0, width, height, 0.0, 0.0, 1.0, 1.0, GDK_INTERP_NEAREST, 255); g_object_unref(tmp2); g_object_unref(tmp1); cairo_destroy(cr); g_object_unref(pixmap); } return scaled_image; } gchar *playericon_create_human_style(const GdkColor * face_color, gint variant, const GdkColor * variant_color) { gchar *c1; gchar *c2; gchar *style; c1 = color_to_string(*face_color); c2 = color_to_string(*variant_color); style = g_strdup_printf("human %s %d %s", c1, variant, c2); g_free(c1); g_free(c2); return style; } gboolean playericon_parse_human_style(const gchar * style, GdkColor * face_color, gint * variant, GdkColor * variant_color) { gchar **style_parts; gboolean parse_ok; /* Determine the style for the player/spectator */ style_parts = g_strsplit(style, " ", 0); parse_ok = FALSE; if (!strcmp(style_parts[0], "human")) { parse_ok = style_parts[1] != NULL && string_to_color(style_parts[1], face_color); if (parse_ok) { parse_ok = style_parts[2] != NULL; } if (parse_ok) { *variant = atoi(style_parts[2]); parse_ok = *variant <= g_slist_length(player_avatar.variation); } if (parse_ok) { parse_ok = style_parts[3] != NULL && string_to_color(style_parts[3], variant_color); } } if (!parse_ok) { /* Something was wrong, revert to the default */ *face_color = default_face_color; *variant = 0; *variant_color = default_variant_color; } g_strfreev(style_parts); return parse_ok; } gboolean string_to_color(const gchar * spec, GdkColor * color) { PangoColor pango_color; GdkColormap *cmap; if (pango_color_parse(&pango_color, spec)) { color->red = pango_color.red; color->green = pango_color.green; color->blue = pango_color.blue; cmap = gdk_colormap_get_system(); gdk_colormap_alloc_color(cmap, color, FALSE, TRUE); return TRUE; } return FALSE; } gchar *color_to_string(GdkColor color) { return g_strdup_printf("#%04x%04x%04x", color.red, color.green, color.blue); /** @todo RC Enable this code when the minimum Gtk+ version is high enough PangoColor pango_color; pango_color.red = color.red; pango_color.green = color.green; pango_color.blue = color.blue; return pango_color_to_string(&pango_color); */ } pioneers-14.1/common/gtk/player-icon.h0000644000175000017500000000575611575444700014700 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2007 Giancarlo Capella * Copyright (C) 2007 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __playericon_h #define __playericon_h #include /** Initialize the player icons */ void playericon_init(void); /** Create an icon for a player. * The default size is suitable for a list view item. * @param widget The widget that will display the icon * @param style The style of the icon * @param color The base color of the player * @param spectator TRUE if a spectator icon is requested * @param connected Is the player currently connected * @param double_size Generate a double size pixmap * @return THe icon for the player. Call g_object_unref() when not needed anymore. */ GdkPixbuf *playericon_create_icon(GtkWidget * widget, const gchar * style, GdkColor * color, gboolean spectator, gboolean connected, gboolean double_size); /** Create a style string for the player. * @param face_color The color of the face * @param variant The variant * @param variant_color The color of the variant * @return The style string. Call g_free() when not needed anymore. */ gchar *playericon_create_human_style(const GdkColor * face_color, gint variant, const GdkColor * variant_color); /** Parse the style string in its components. * @param style The style * @retval face_color The color of the face * @retval variant The variant * @retval variant_color The color of the variant * @return TRUE if the style could be parsed. When FALSE, the return values contain the default values */ gboolean playericon_parse_human_style(const gchar * style, GdkColor * face_color, gint * variant, GdkColor * variant_color); /** Convert a string to a color. * The color is allocated in the system colormap. * @param spec The name of the color * @retval color The color * @return TRUE if the conversion succeeded. */ gboolean string_to_color(const gchar * spec, GdkColor * color); /** Convert a color to a string. * After use, the string must be freed with g_free() * @param color The color * @return the string */ gchar *color_to_string(GdkColor color); #endif pioneers-14.1/common/gtk/polygon.c0000644000175000017500000000454411605052057014124 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "polygon.h" void poly_offset(Polygon * poly, gint x_offset, gint y_offset) { int idx; GdkPoint *points; for (idx = 0, points = poly->points; idx < poly->num_points; idx++, points++) { points->x += x_offset; points->y += y_offset; } } void poly_bound_rect(const Polygon * poly, int pad, GdkRectangle * rect) { int idx; GdkPoint tl; GdkPoint br; GdkPoint *points; points = poly->points; tl = points[0]; br = points[0]; for (idx = 1, points++; idx < poly->num_points; idx++, points++) { if (points->x < tl.x) tl.x = points->x; else if (points->x > br.x) br.x = points->x; if (points->y < tl.y) tl.y = points->y; else if (points->y > br.y) br.y = points->y; } rect->x = tl.x - pad; rect->y = tl.y - pad; rect->width = br.x - tl.x + pad + 1; rect->height = br.y - tl.y + pad + 1; } void poly_draw(cairo_t * cr, gboolean filled, const Polygon * poly) { gint i; if (poly->num_points > 0) { cairo_move_to(cr, poly->points[poly->num_points - 1].x, poly->points[poly->num_points - 1].y); for (i = 0; i < poly->num_points; i++) { cairo_line_to(cr, poly->points[i].x, poly->points[i].y); } if (filled) { cairo_fill(cr); } else { cairo_stroke(cr); } } } void poly_draw_with_border(cairo_t * cr, const GdkColor * border_color, const Polygon * poly) { poly_draw(cr, TRUE, poly); gdk_cairo_set_source_color(cr, border_color); poly_draw(cr, FALSE, poly); } pioneers-14.1/common/gtk/polygon.h0000644000175000017500000000242311605052057014123 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __polygon_h #define __polygon_h #include typedef struct { GdkPoint *points; gint num_points; } Polygon; void poly_offset(Polygon * poly, gint x_offset, gint y_offset); void poly_bound_rect(const Polygon * poly, int pad, GdkRectangle * rect); void poly_draw(cairo_t * cr, gboolean filled, const Polygon * poly); void poly_draw_with_border(cairo_t * cr, const GdkColor * border_color, const Polygon * poly); #endif pioneers-14.1/common/gtk/scrollable-text-view.gob0000644000175000017500000000500411667762766017055 00000000000000requires 2.0.0 %alltop{ /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2011 Micah Bunting * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ %} %headertop{ #include #include "config.h" %} %privateheader{ %} class Scrollable:Text:View from Gtk:Scrolled:Window { public GtkWidget *new(void) { return (GtkWidget *) GET_NEW; } init(self) { GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(self); GtkWidget *text_view; gtk_scrolled_window_set_hadjustment(sw, NULL); gtk_scrolled_window_set_vadjustment(sw, NULL); gtk_scrolled_window_set_policy(sw, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); text_view = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), TRUE); gtk_container_add(GTK_CONTAINER(self), text_view); } public void set_text(self, const gchar * text) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (gtk_bin_get_child (GTK_BIN(self)))); gtk_text_buffer_get_bounds(buffer, &start, &end); gtk_text_buffer_set_text(buffer, text ? text : "", -1); gtk_text_buffer_get_bounds(buffer, &start, &end); gtk_text_buffer_place_cursor(buffer, &start); } public gchar *get_text(self) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (gtk_bin_get_child (GTK_BIN(self)))); gtk_text_buffer_get_bounds(buffer, &start, &end); return gtk_text_buffer_get_text(buffer, &start, &end, FALSE); } public GtkWidget *get_for_mnemonic(self) { return gtk_bin_get_child(GTK_BIN(self)); } } pioneers-14.1/common/gtk/scrollable-text-view.gob.stamp0000644000175000017500000000000011760646027020150 00000000000000pioneers-14.1/common/gtk/scrollable-text-view.c0000644000175000017500000001715611760646027016524 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ /* End world hunger, donate to the World Food Programme, http://www.wfp.org */ #line 3 "common/gtk/scrollable-text-view.gob" /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2011 Micah Bunting * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #line 30 "scrollable-text-view.c" #define GOB_VERSION_MAJOR 2 #define GOB_VERSION_MINOR 0 #define GOB_VERSION_PATCHLEVEL 18 #define selfp (self->_priv) #include /* memset() */ #include "scrollable-text-view.h" #ifdef G_LIKELY #define ___GOB_LIKELY(expr) G_LIKELY(expr) #define ___GOB_UNLIKELY(expr) G_UNLIKELY(expr) #else /* ! G_LIKELY */ #define ___GOB_LIKELY(expr) (expr) #define ___GOB_UNLIKELY(expr) (expr) #endif /* G_LIKELY */ #line 31 "common/gtk/scrollable-text-view.gob" #line 52 "scrollable-text-view.c" /* self casting macros */ #define SELF(x) SCROLLABLE_TEXT_VIEW(x) #define SELF_CONST(x) SCROLLABLE_TEXT_VIEW_CONST(x) #define IS_SELF(x) SCROLLABLE_IS_TEXT_VIEW(x) #define TYPE_SELF SCROLLABLE_TYPE_TEXT_VIEW #define SELF_CLASS(x) SCROLLABLE_TEXT_VIEW_CLASS(x) #define SELF_GET_CLASS(x) SCROLLABLE_TEXT_VIEW_GET_CLASS(x) /* self typedefs */ typedef ScrollableTextView Self; typedef ScrollableTextViewClass SelfClass; /* here are local prototypes */ #line 0 "common/gtk/scrollable-text-view.gob" static void scrollable_text_view_class_init (ScrollableTextViewClass * c) G_GNUC_UNUSED; #line 69 "scrollable-text-view.c" #line 40 "common/gtk/scrollable-text-view.gob" static void scrollable_text_view_init (ScrollableTextView * self) G_GNUC_UNUSED; #line 72 "scrollable-text-view.c" /* pointer to the class of our parent */ static GtkScrolledWindowClass *parent_class = NULL; /* Short form macros */ #define self_new scrollable_text_view_new #define self_set_text scrollable_text_view_set_text #define self_get_text scrollable_text_view_get_text #define self_get_for_mnemonic scrollable_text_view_get_for_mnemonic GType scrollable_text_view_get_type (void) { static GType type = 0; if ___GOB_UNLIKELY(type == 0) { static const GTypeInfo info = { sizeof (ScrollableTextViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) scrollable_text_view_class_init, (GClassFinalizeFunc) NULL, NULL /* class_data */, sizeof (ScrollableTextView), 0 /* n_preallocs */, (GInstanceInitFunc) scrollable_text_view_init, NULL }; type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW, "ScrollableTextView", &info, (GTypeFlags)0); } return type; } /* a macro for creating a new object of our type */ #define GET_NEW ((ScrollableTextView *)g_object_new(scrollable_text_view_get_type(), NULL)) /* a function for creating a new object of our type */ #include static ScrollableTextView * GET_NEW_VARG (const char *first, ...) G_GNUC_UNUSED; static ScrollableTextView * GET_NEW_VARG (const char *first, ...) { ScrollableTextView *ret; va_list ap; va_start (ap, first); ret = (ScrollableTextView *)g_object_new_valist (scrollable_text_view_get_type (), first, ap); va_end (ap); return ret; } static void scrollable_text_view_class_init (ScrollableTextViewClass * c G_GNUC_UNUSED) { #define __GOB_FUNCTION__ "Scrollable:Text:View::class_init" parent_class = g_type_class_ref (GTK_TYPE_SCROLLED_WINDOW); } #undef __GOB_FUNCTION__ #line 40 "common/gtk/scrollable-text-view.gob" static void scrollable_text_view_init (ScrollableTextView * self G_GNUC_UNUSED) { #line 137 "scrollable-text-view.c" #define __GOB_FUNCTION__ "Scrollable:Text:View::init" { #line 40 "common/gtk/scrollable-text-view.gob" GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(self); GtkWidget *text_view; gtk_scrolled_window_set_hadjustment(sw, NULL); gtk_scrolled_window_set_vadjustment(sw, NULL); gtk_scrolled_window_set_policy(sw, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); text_view = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), TRUE); gtk_container_add(GTK_CONTAINER(self), text_view); #line 158 "scrollable-text-view.c" } } #undef __GOB_FUNCTION__ #line 36 "common/gtk/scrollable-text-view.gob" GtkWidget * scrollable_text_view_new (void) { #line 168 "scrollable-text-view.c" #define __GOB_FUNCTION__ "Scrollable:Text:View::new" { #line 36 "common/gtk/scrollable-text-view.gob" return (GtkWidget *) GET_NEW; }} #line 175 "scrollable-text-view.c" #undef __GOB_FUNCTION__ #line 58 "common/gtk/scrollable-text-view.gob" void scrollable_text_view_set_text (ScrollableTextView * self, const gchar * text) { #line 183 "scrollable-text-view.c" #define __GOB_FUNCTION__ "Scrollable:Text:View::set_text" #line 58 "common/gtk/scrollable-text-view.gob" g_return_if_fail (self != NULL); #line 58 "common/gtk/scrollable-text-view.gob" g_return_if_fail (SCROLLABLE_IS_TEXT_VIEW (self)); #line 189 "scrollable-text-view.c" { #line 58 "common/gtk/scrollable-text-view.gob" GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (gtk_bin_get_child (GTK_BIN(self)))); gtk_text_buffer_get_bounds(buffer, &start, &end); gtk_text_buffer_set_text(buffer, text ? text : "", -1); gtk_text_buffer_get_bounds(buffer, &start, &end); gtk_text_buffer_place_cursor(buffer, &start); }} #line 206 "scrollable-text-view.c" #undef __GOB_FUNCTION__ #line 73 "common/gtk/scrollable-text-view.gob" gchar * scrollable_text_view_get_text (ScrollableTextView * self) { #line 213 "scrollable-text-view.c" #define __GOB_FUNCTION__ "Scrollable:Text:View::get_text" #line 73 "common/gtk/scrollable-text-view.gob" g_return_val_if_fail (self != NULL, (gchar * )0); #line 73 "common/gtk/scrollable-text-view.gob" g_return_val_if_fail (SCROLLABLE_IS_TEXT_VIEW (self), (gchar * )0); #line 219 "scrollable-text-view.c" { #line 73 "common/gtk/scrollable-text-view.gob" GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (gtk_bin_get_child (GTK_BIN(self)))); gtk_text_buffer_get_bounds(buffer, &start, &end); return gtk_text_buffer_get_text(buffer, &start, &end, FALSE); }} #line 235 "scrollable-text-view.c" #undef __GOB_FUNCTION__ #line 87 "common/gtk/scrollable-text-view.gob" GtkWidget * scrollable_text_view_get_for_mnemonic (ScrollableTextView * self) { #line 242 "scrollable-text-view.c" #define __GOB_FUNCTION__ "Scrollable:Text:View::get_for_mnemonic" #line 87 "common/gtk/scrollable-text-view.gob" g_return_val_if_fail (self != NULL, (GtkWidget * )0); #line 87 "common/gtk/scrollable-text-view.gob" g_return_val_if_fail (SCROLLABLE_IS_TEXT_VIEW (self), (GtkWidget * )0); #line 248 "scrollable-text-view.c" { #line 87 "common/gtk/scrollable-text-view.gob" return gtk_bin_get_child(GTK_BIN(self)); }} #line 254 "scrollable-text-view.c" #undef __GOB_FUNCTION__ pioneers-14.1/common/gtk/scrollable-text-view.h0000644000175000017500000000604111760646027016520 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ /* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2011 Micah Bunting * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include "config.h" #ifndef __SCROLLABLE_TEXT_VIEW_H__ #define __SCROLLABLE_TEXT_VIEW_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Type checking and casting macros */ #define SCROLLABLE_TYPE_TEXT_VIEW (scrollable_text_view_get_type()) #define SCROLLABLE_TEXT_VIEW(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), scrollable_text_view_get_type(), ScrollableTextView) #define SCROLLABLE_TEXT_VIEW_CONST(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), scrollable_text_view_get_type(), ScrollableTextView const) #define SCROLLABLE_TEXT_VIEW_CLASS(klass) G_TYPE_CHECK_CLASS_CAST((klass), scrollable_text_view_get_type(), ScrollableTextViewClass) #define SCROLLABLE_IS_TEXT_VIEW(obj) G_TYPE_CHECK_INSTANCE_TYPE((obj), scrollable_text_view_get_type ()) #define SCROLLABLE_TEXT_VIEW_GET_CLASS(obj) G_TYPE_INSTANCE_GET_CLASS((obj), scrollable_text_view_get_type(), ScrollableTextViewClass) /* * Main object structure */ #ifndef __TYPEDEF_SCROLLABLE_TEXT_VIEW__ #define __TYPEDEF_SCROLLABLE_TEXT_VIEW__ typedef struct _ScrollableTextView ScrollableTextView; #endif struct _ScrollableTextView { GtkScrolledWindow __parent__; }; /* * Class definition */ typedef struct _ScrollableTextViewClass ScrollableTextViewClass; struct _ScrollableTextViewClass { GtkScrolledWindowClass __parent__; }; /* * Public methods */ GType scrollable_text_view_get_type (void) G_GNUC_CONST; #line 36 "common/gtk/scrollable-text-view.gob" GtkWidget * scrollable_text_view_new (void); #line 79 "scrollable-text-view.h" #line 58 "common/gtk/scrollable-text-view.gob" void scrollable_text_view_set_text (ScrollableTextView * self, const gchar * text); #line 83 "scrollable-text-view.h" #line 73 "common/gtk/scrollable-text-view.gob" gchar * scrollable_text_view_get_text (ScrollableTextView * self); #line 86 "scrollable-text-view.h" #line 87 "common/gtk/scrollable-text-view.gob" GtkWidget * scrollable_text_view_get_for_mnemonic (ScrollableTextView * self); #line 89 "scrollable-text-view.h" #ifdef __cplusplus } #endif /* __cplusplus */ #endif pioneers-14.1/common/gtk/select-game.c0000644000175000017500000001212711746550046014626 00000000000000/* A custom widget for selecting a game from a list of games. * * The code is based on the TICTACTOE example * www.gtk.oorg/tutorial/app-codeexamples.html#SEC-TICTACTOE * * Adaptation for Pioneers: 2004 Roland Clobus * */ #include "config.h" #include "game.h" #include #include #include "guimap.h" #include "gtkbugs.h" #include "gtkcompat.h" #include "select-game.h" /* The signals */ enum { ACTIVATE, LAST_SIGNAL }; static void select_game_class_init(SelectGameClass * klass); static void select_game_init(SelectGame * sg); static void select_game_item_changed(GtkWidget * widget, SelectGame * sg); /* All signals */ static guint select_game_signals[LAST_SIGNAL] = { 0 }; /* Register the class */ GType select_game_get_type(void) { static GType sg_type = 0; if (!sg_type) { static const GTypeInfo sg_info = { sizeof(SelectGameClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) select_game_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(SelectGame), 0, (GInstanceInitFunc) select_game_init, NULL }; sg_type = g_type_register_static(GTK_TYPE_TABLE, "SelectGame", &sg_info, 0); } return sg_type; } /* Register the signals. * SelectGame will emit one signal: 'activate' with the text of the * active game in user_data */ static void select_game_class_init(SelectGameClass * klass) { select_game_signals[ACTIVATE] = g_signal_new("activate", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (SelectGameClass, activate), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /* Build the composite widget */ static void select_game_init(SelectGame * sg) { GtkCellRenderer *cell; /* Create model */ sg->data = gtk_list_store_new(2, G_TYPE_STRING, GDK_TYPE_PIXBUF); sg->combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(sg->data)); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(sg->combo_box), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(sg->combo_box), cell, "text", 0, NULL); cell = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(sg->combo_box), cell, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(sg->combo_box), cell, "pixbuf", 1, NULL); sg->game_names = g_ptr_array_new(); gtk_widget_show(sg->combo_box); gtk_widget_set_tooltip_text(sg->combo_box, /* Tooltip for the list of games */ _("Select a game")); gtk_table_resize(GTK_TABLE(sg), 1, 1); gtk_table_attach_defaults(GTK_TABLE(sg), sg->combo_box, 0, 1, 0, 1); sg->default_game = g_strdup("Default"); g_signal_connect(G_OBJECT(sg->combo_box), "changed", G_CALLBACK(select_game_item_changed), sg); } /* Create a new instance of the widget */ GtkWidget *select_game_new(void) { return GTK_WIDGET(g_object_new(select_game_get_type(), NULL)); } /* Set the default game */ void select_game_set_default(SelectGame * sg, const gchar * game_title) { if (sg->default_game) g_free(sg->default_game); sg->default_game = g_strdup(game_title); } /* Add a game title to the list. * The default game will be the active item. */ void select_game_add(SelectGame * sg, const gchar * game_title) { GtkTreeIter iter; gchar *title = g_strdup(game_title); g_ptr_array_add(sg->game_names, title); gtk_list_store_insert_with_values(sg->data, &iter, 999, 0, game_title, -1); if (!strcmp(game_title, sg->default_game)) gtk_combo_box_set_active(GTK_COMBO_BOX(sg->combo_box), sg->game_names->len - 1); } /* Add a game title to the list, and add the map. * The default game will be the active item. */ void select_game_add_with_map(SelectGame * sg, const gchar * game_title, const Map * map) { GtkTreeIter iter; gchar *title = g_strdup(game_title); int width, height; GdkPixbuf *pixbuf; GuiMap *gmap; width = 64; height = 48; gmap = guimap_new(); gmap->pixmap = gdk_pixmap_new(gtk_widget_get_window(sg->combo_box), width, height, gdk_visual_get_depth(gdk_visual_get_system())); gmap->width = width; gmap->height = height; gmap->area = sg->combo_box; g_object_ref(gmap->area); gmap->map = map_copy(map); guimap_scale_to_size(gmap, width, height); guimap_display(gmap); pixbuf = gdk_pixbuf_get_from_drawable(NULL, gmap->pixmap, NULL, 0, 0, 0, 0, -1, -1); guimap_delete(gmap); g_ptr_array_add(sg->game_names, title); gtk_list_store_insert_with_values(sg->data, &iter, 999, 0, game_title, 1, pixbuf, -1); g_object_unref(pixbuf); if (!strcmp(game_title, sg->default_game)) gtk_combo_box_set_active(GTK_COMBO_BOX(sg->combo_box), sg->game_names->len - 1); } static void select_game_item_changed(G_GNUC_UNUSED GtkWidget * widget, SelectGame * sg) { g_signal_emit(G_OBJECT(sg), select_game_signals[ACTIVATE], 0); } const gchar *select_game_get_active(SelectGame * sg) { gint idx = gtk_combo_box_get_active(GTK_COMBO_BOX(sg->combo_box)); return g_ptr_array_index(sg->game_names, idx); } pioneers-14.1/common/gtk/select-game.h0000644000175000017500000000277111746550046014637 00000000000000/* A custom widget for selecting a game from a list of games. * * The code is based on the TICTACTOE example * www.gtk.oorg/tutorial/app-codeexamples.html#SEC-TICTACTOE * * Adaptation for Pioneers: 2004 Roland Clobus * */ #ifndef __SELECTGAME_H__ #define __SELECTGAME_H__ #include #include #include G_BEGIN_DECLS #define SELECTGAME_TYPE (select_game_get_type ()) #define SELECTGAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SELECTGAME_TYPE, SelectGame)) #define SELECTGAME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SELECTGAME_TYPE, SelectGameClass)) #define IS_SELECTGAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SELECTGAME_TYPE)) #define IS_SELECTGAME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SELECTGAME_TYPE)) typedef struct _SelectGame SelectGame; typedef struct _SelectGameClass SelectGameClass; struct _SelectGame { GtkTable table; GtkWidget *combo_box; GtkListStore *data; GPtrArray *game_names; gchar *default_game; }; struct _SelectGameClass { GtkTableClass parent_class; void (*activate) (SelectGame * sg); }; GType select_game_get_type(void); GtkWidget *select_game_new(void); void select_game_set_default(SelectGame * sg, const gchar * game_title); void select_game_add(SelectGame * sg, const gchar * game_title); void select_game_add_with_map(SelectGame * sg, const gchar * game_title, const Map * map); const gchar *select_game_get_active(SelectGame * sg); G_END_DECLS #endif /* __SELECTGAME_H__ */ pioneers-14.1/common/gtk/theme.c0000644000175000017500000005011711760637603013544 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2005, 2009 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include "game.h" #include "theme.h" #include "config-gnome.h" #include "gtkcompat.h" /* Description of theme.cfg: ------------------------- A theme.cfg file is a series of definitions, one per line. Lines starting with '#' are comments. A definition looks like VARIABLE = VALUE There are three types of variables: pixmaps, colors, and the scaling mode. The value for a pixmap is a filename, relative to the theme directory. A color can be either 'none' or 'transparent' (both equivalent), or '#rrggbb'. (It's also allowed to use 1, 3, or 4 digits per color component.) Pixmaps can be defined for hex backgrounds (hill-tile, field-tile, mountain-tile, pasture-tile, forest-tile, desert-tile, sea-tile, board-tile) and port backgrounds (brick-port-tile, grain-port-tile, ore-port-tile, wool-port-tile, and lumber-port-tile). If a hex tile is not defined, the pixmap from the default theme will be used. If a port tile is not given, the corresponding 2:1 ports will be painted in solid background color. chip-bg-color, chip-fg-color, and chip-bd-color are the colors for the dice roll chips in the middle of a hex. port-{bg,fg,bd}-color are the same for ports. chip-hi-bg-color is used as background for chips that correspond to the current roll, chip-hi-fg-color is chips showing 6 or 8. You can also define robber-{fg,bg}-color for the robber and hex-bd-color for the border of hexes (around the background image). If any color is not defined, the default color will be used. If a color is 'none' the corresponding element won't be painted at all. The five chip colors can also be different for each terrain type. To override the general colors, add color definitions after the name of the pixmap, e.g.: field-tile = field_grain.png none #d0d0d0 none #303030 #ffffff The order is bg, fg, bd, hi-bg, hi-fg. Sorry, you can't skip definitions at the beginning... Normally, all pixmaps are used in their native size and repeat over their area as needed (tiling). This doesn't look good for photo-like images, so you can add "scaling = always" in that case. Then images will always be scaled to the current size of a hex. (BTW, the height should be 1/cos(pi/6) (~ 1.1547) times the width of the image.) Two other available modes are 'only-downscale' and 'only-upscale' to make images only smaller or larger, resp. (in case it's needed sometimes...) */ #define TCOL_INIT(r,g,b) { TRUE, FALSE, FALSE, { 0, r, g, b } } #define TCOL_TRANSP() { TRUE, TRUE, FALSE, { 0, 0, 0, 0 } } #define TCOL_UNSET() { FALSE, FALSE, FALSE, { 0, 0, 0, 0 } } #define TSCALE { NULL, NULL, 0, 0.0 } static TColor default_colors[] = { TCOL_INIT(0xff00, 0xda00, 0xb900), TCOL_INIT(0, 0, 0), TCOL_INIT(0, 0, 0), TCOL_INIT(0, 0xff00, 0), TCOL_INIT(0xff00, 0, 0), TCOL_INIT(0, 0, 0xff00), TCOL_INIT(0xff00, 0xff00, 0xff00), TCOL_INIT(0, 0, 0), TCOL_INIT(0, 0, 0), TCOL_INIT(0xff00, 0xff00, 0xff00), TCOL_INIT(0xff00, 0xda00, 0xb900) }; #define offs(elem) ((size_t)(&(((MapTheme *)0)->elem))) #define telem(type,theme,tv) (*((type *)((char *)theme + tv->offset))) typedef enum { FNAME, STR, COL, SCMODE } vartype; static struct tvars { const char *name; gboolean optional; vartype type; int override; size_t offset; } theme_vars[] = { { "name", TRUE, STR, -1, offs(name)}, { "hill-tile", FALSE, FNAME, HILL_TILE, offs(terrain_tile_names[HILL_TILE])}, { "field-tile", FALSE, FNAME, FIELD_TILE, offs(terrain_tile_names[FIELD_TILE])}, { "mountain-tile", FALSE, FNAME, MOUNTAIN_TILE, offs(terrain_tile_names[MOUNTAIN_TILE])}, { "pasture-tile", FALSE, FNAME, PASTURE_TILE, offs(terrain_tile_names[PASTURE_TILE])}, { "forest-tile", FALSE, FNAME, FOREST_TILE, offs(terrain_tile_names[FOREST_TILE])}, { "desert-tile", FALSE, FNAME, -1, offs(terrain_tile_names[DESERT_TILE])}, { "sea-tile", FALSE, FNAME, -1, offs(terrain_tile_names[SEA_TILE])}, { "gold-tile", FALSE, FNAME, GOLD_TILE, offs(terrain_tile_names[GOLD_TILE])}, { "board-tile", FALSE, FNAME, -1, offs(terrain_tile_names[BOARD_TILE])}, { "brick-port-tile", TRUE, FNAME, -1, offs(port_tile_names[HILL_PORT_TILE])}, { "grain-port-tile", TRUE, FNAME, -1, offs(port_tile_names[FIELD_PORT_TILE])}, { "ore-port-tile", TRUE, FNAME, -1, offs(port_tile_names[MOUNTAIN_PORT_TILE])}, { "wool-port-tile", TRUE, FNAME, -1, offs(port_tile_names[PASTURE_PORT_TILE])}, { "lumber-port-tile", TRUE, FNAME, -1, offs(port_tile_names[FOREST_PORT_TILE])}, { "nores-port-tile", TRUE, FNAME, -1, offs(port_tile_names[ANY_PORT_TILE])}, { "chip-bg-color", TRUE, COL, -1, offs(colors[TC_CHIP_BG])}, { "chip-fg-color", TRUE, COL, -1, offs(colors[TC_CHIP_FG])}, { "chip-bd-color", TRUE, COL, -1, offs(colors[TC_CHIP_BD])}, { "chip-hi-bg-color", TRUE, COL, -1, offs(colors[TC_CHIP_H_BG])}, { "chip-hi-fg-color", TRUE, COL, -1, offs(colors[TC_CHIP_H_FG])}, { "port-bg-color", TRUE, COL, -1, offs(colors[TC_PORT_BG])}, { "port-fg-color", TRUE, COL, -1, offs(colors[TC_PORT_FG])}, { "port-bd-color", TRUE, COL, -1, offs(colors[TC_PORT_BD])}, { "robber-fg-color", TRUE, COL, -1, offs(colors[TC_ROBBER_FG])}, { "robber-bd-color", TRUE, COL, -1, offs(colors[TC_ROBBER_BD])}, { "hex-bd-color", TRUE, COL, -1, offs(colors[TC_HEX_BD])}, { "scaling", FALSE, SCMODE, -1, offs(scaling)} }; static GList *theme_list = NULL; static MapTheme *current_theme = NULL; static GList *callback_list = NULL; static gboolean theme_initialize(MapTheme * t); static void theme_cleanup(MapTheme * t); static void theme_scan_dir(const gchar * themes_path); static gint getvar(gchar ** p, const gchar * filename, gint lno); static char *getval(char **p, const gchar * filename, int lno); static gboolean parsecolor(char *p, TColor * tc, const gchar * filename, int lno); static MapTheme *theme_config_parse(const gchar * themename, const gchar * subdir); static gboolean theme_load_pixmap(const gchar * file, const gchar * themename, GdkPixbuf ** pixbuf, GdkPixmap ** pixmap_return, GdkBitmap ** mask_return); /** Find a theme with the given name */ static gint theme_list_locate(gconstpointer item, gconstpointer data) { const MapTheme *theme = item; const gchar *name = data; return strcmp(theme->name, name); } /** Insert the theme alphabetically in the list */ static gint theme_insert_sorted(gconstpointer new, gconstpointer first) { const MapTheme *newTheme = new; const MapTheme *firstTheme = first; return strcmp(newTheme->name, firstTheme->name); } void themes_init(void) { gchar *path; MapTheme *t; gint novar; gchar *user_theme; g_assert(theme_list == NULL); /* scan global theme directory */ theme_scan_dir(THEMEDIR); /* scan user theme directory */ path = g_build_filename(g_get_user_data_dir(), "pioneers", "themes", NULL); theme_scan_dir(path); if (theme_list == NULL) { g_error("No theme found: %s or %s", THEMEDIR, path); } g_free(path); t = NULL; user_theme = config_get_string("settings/theme=Tiny", &novar); if (!(!user_theme || !*user_theme)) { GList *result = g_list_find_custom(theme_list, user_theme, theme_list_locate); if (result) t = result->data; } g_free(user_theme); if (!t) { t = g_list_first(theme_list)->data; } current_theme = t; } void themes_cleanup(void) { GList *list = theme_list; while (list) { theme_cleanup(list->data); list = g_list_next(list); } g_list_free(theme_list); g_list_free(callback_list); } void theme_scan_dir(const gchar * themes_path) { GDir *dir; const gchar *dirname; gchar *fname; MapTheme *t; /* scan image dir for theme descriptor files */ if (!(dir = g_dir_open(themes_path, 0, NULL))) return; while ((dirname = g_dir_read_name(dir))) { fname = g_build_filename(themes_path, dirname, NULL); if (g_file_test(fname, G_FILE_TEST_IS_DIR)) { if ((t = theme_config_parse(dirname, fname))) { if (theme_initialize(t)) { theme_list = g_list_insert_sorted (theme_list, t, theme_insert_sorted); } else { g_warning ("Theme %s not loaded due to errors.", t->name); } } else { g_warning ("Theme %s not loaded due to errors.", dirname); } } g_free(fname); } g_dir_close(dir); } void theme_set_current(MapTheme * t) { GList *list = callback_list; current_theme = t; while (list) { G_CALLBACK(list->data) (); list = g_list_next(list); } } MapTheme *theme_get_current(void) { return current_theme; } GList *theme_get_list(void) { return theme_list; } /** Load a pixbuf, its pixmap and its mask. * If loading fails, no objects need to be freed. * @return TRUE if succesful */ gboolean theme_load_pixmap(const gchar * file, const gchar * themename, GdkPixbuf ** pixbuf, GdkPixmap ** pixmap_return, GdkBitmap ** mask_return) { g_return_val_if_fail(themename != NULL, FALSE); g_return_val_if_fail(pixbuf != NULL, FALSE); g_return_val_if_fail(file != NULL, FALSE); g_return_val_if_fail(pixmap_return != NULL, FALSE); *pixbuf = NULL; *pixmap_return = NULL; /* check that file exists */ if (!g_file_test(file, G_FILE_TEST_EXISTS)) { g_warning ("Could not find \'%s\' pixmap file in theme \'%s\'.", file, themename); return FALSE; } /* load pixmap/mask */ *pixbuf = gdk_pixbuf_new_from_file(file, NULL); *pixmap_return = NULL; if (*pixbuf != NULL) { gdk_pixbuf_render_pixmap_and_mask(*pixbuf, pixmap_return, mask_return, 1); } /* check result */ if (*pixmap_return == NULL) { if (*pixbuf) g_object_unref(*pixbuf); g_warning ("Could not load \'%s\' pixmap file in theme \'%s\'.", file, themename); return FALSE; } return TRUE; } /** Initialize the theme. * @return TRUE if succesful */ static gboolean theme_initialize(MapTheme * t) { int i, j; GdkColormap *cmap; /* load terrain tiles */ for (i = 0; i < G_N_ELEMENTS(t->terrain_tiles); ++i) { GdkPixbuf *pixbuf, *pixbuf_copy; if (!theme_load_pixmap (t->terrain_tile_names[i], t->name, &pixbuf, &(t->terrain_tiles[i]), NULL)) { g_error("Could not find pixmap file: %s", t->terrain_tile_names[i]); }; pixbuf_copy = gdk_pixbuf_copy(pixbuf); if (pixbuf_copy == NULL) { return FALSE; } t->scaledata[i].image = pixbuf; t->scaledata[i].native_image = pixbuf_copy; t->scaledata[i].native_width = gdk_pixbuf_get_width(pixbuf); t->scaledata[i].aspect = 1.0 * gdk_pixbuf_get_width(pixbuf) / gdk_pixbuf_get_height(pixbuf); } /* load port tiles */ for (i = 0; i < G_N_ELEMENTS(t->port_tiles); ++i) { /* if a theme doesn't define a port tile, it will be drawn with * its resource letter instead */ if (t->port_tile_names[i]) { GdkPixbuf *pixbuf; if (theme_load_pixmap (t->port_tile_names[i], t->name, &pixbuf, &(t->port_tiles[i]), NULL)) { gdk_pixmap_get_size(t->port_tiles[i], &t->port_tiles_width [i], &t->port_tiles_height [i]); g_object_unref(pixbuf); } } else t->port_tiles[i] = NULL; } /* allocate defined colors */ cmap = gdk_colormap_get_system(); for (i = 0; i < G_N_ELEMENTS(t->colors); ++i) { TColor *tc = &(t->colors[i]); if (!tc->set) *tc = default_colors[i]; else if (!tc->transparent && !tc->allocated) { gdk_colormap_alloc_color(cmap, &(tc->color), FALSE, TRUE); tc->allocated = TRUE; } } for (i = 0; i < TC_MAX_OVRTILE; ++i) { for (j = 0; j < TC_MAX_OVERRIDE; ++j) { TColor *tc = &(t->ovr_colors[i][j]); if (tc->set && !tc->transparent && !tc->allocated) { gdk_colormap_alloc_color(cmap, &(tc->color), FALSE, TRUE); tc->allocated = TRUE; } } } return TRUE; } static void theme_cleanup(MapTheme * t) { int i; /* terrain tiles */ for (i = 0; i < G_N_ELEMENTS(t->terrain_tiles); ++i) { g_object_unref(t->terrain_tiles[i]); g_object_unref(t->scaledata[i].image); g_object_unref(t->scaledata[i].native_image); } /* port tiles */ for (i = 0; i < G_N_ELEMENTS(t->port_tiles); ++i) { if (t->port_tiles[i] != NULL) { g_object_unref(t->port_tiles[i]); } } for (i = 0; i < G_N_ELEMENTS(theme_vars); i++) { switch (theme_vars[i].type) { case STR: case FNAME: g_free(telem(char *, t, (&theme_vars[i]))); break; default: /* No action required */ break; } } g_free(t); } void theme_rescale(int new_width) { int i; switch (current_theme->scaling) { case NEVER: return; case ONLY_DOWNSCALE: if (new_width > current_theme->scaledata[0].native_width) new_width = current_theme->scaledata[0].native_width; break; case ONLY_UPSCALE: if (new_width < current_theme->scaledata[0].native_width) new_width = current_theme->scaledata[0].native_width; break; case ALWAYS: break; } /* if the size is 0, gdk_pixbuf_scale_simple fails */ if (new_width <= 0) new_width = 1; /* no need to scale again */ if (new_width == current_theme->current_width) { return; } current_theme->current_width = new_width; for (i = 0; i < G_N_ELEMENTS(current_theme->terrain_tiles); ++i) { int new_height; if (i == BOARD_TILE) continue; /* Don't scale the board-tile */ new_height = new_width / current_theme->scaledata[i].aspect; /* gdk_pixbuf_scale_simple cannot handle 0 height */ if (new_height <= 0) new_height = 1; /* rescale the pixbuf */ g_object_unref(current_theme->scaledata[i].image); current_theme->scaledata[i].image = gdk_pixbuf_scale_simple(current_theme->scaledata[i]. native_image, new_width, new_height, GDK_INTERP_BILINEAR); /* render a new pixmap */ g_object_unref(current_theme->terrain_tiles[i]); gdk_pixbuf_render_pixmap_and_mask(current_theme->scaledata [i].image, & (current_theme-> terrain_tiles[i]), NULL, 1); } } #define ERR1(formatstring, argument) \ g_warning("While reading %s at line %d:", filename, lno); \ g_warning(formatstring, argument); #define ERR0(string) \ ERR1("%s", string); /** * Find a variable name in the file. * @retval p The line to parse (returns the remainder) * @param filename Filename for the error message * @param lno Line number for the error message * @return -1 on error, otherwise the index in theme_vars */ static gint getvar(gchar ** p, const gchar * filename, int lno) { char *q, qsave; struct tvars *tv; gint idx; gboolean found; *p += strspn(*p, " \t"); if (!**p || **p == '\n') return -1; /* empty line */ q = *p + strcspn(*p, " \t=\n"); if (q == *p) { ERR1("variable name missing: %s", *p); return -1; } qsave = *q; *q++ = '\0'; idx = 0; found = FALSE; for (tv = theme_vars; idx < G_N_ELEMENTS(theme_vars); ++tv, ++idx) { if (strcmp(*p, tv->name) == 0) { found = TRUE; break; } } if (!found) { ERR1("unknown config variable '%s'", *p); return -1; } *p = q; if (qsave != '=') { *p += strspn(*p, " \t"); if (**p != '=') { ERR1("'=' missing: %s", *p); return -1; } ++*p; } *p += strspn(*p, " \t"); return idx; } static char *getval(char **p, const gchar * filename, int lno) { char *q; q = *p; *p += strcspn(*p, " \t\n"); if (q == *p) { ERR0("missing value"); return FALSE; } if (**p) { *(*p)++ = '\0'; *p += strspn(*p, " \t"); } return q; } static gboolean checkend(const char *p) { p += strspn(p, " \t"); return !*p || *p == '\n'; } static gboolean parsecolor(char *p, TColor * tc, const gchar * filename, int lno) { if (strcmp(p, "none") == 0 || strcmp(p, "transparent") == 0) { tc->set = TRUE; tc->transparent = TRUE; return TRUE; } tc->transparent = FALSE; if (!gdk_color_parse(p, &tc->color)) { ERR1("invalid color: %s", p); return FALSE; } tc->set = TRUE; return TRUE; } static MapTheme *theme_config_parse(const gchar * themename, const gchar * subdir) { FILE *f; char *line = NULL; gchar *p, *q; gint lno; MapTheme *t; struct tvars *tv; gboolean ok = TRUE; gboolean *used; gint idx; gchar *filename; filename = g_build_filename(subdir, "theme.cfg", NULL); if (!(f = fopen(filename, "r"))) { g_warning("could not open '%s'", filename); g_free(filename); return NULL; } t = g_malloc0(sizeof(MapTheme)); /* Initially the theme name is equal to the directory name */ t->name = g_strdup(themename); t->current_width = -1; used = g_malloc0(G_N_ELEMENTS(theme_vars) * sizeof(gboolean)); lno = 0; while (read_line_from_file(&line, f)) { ++lno; if (line[0] == '#') { g_free(line); continue; } p = line; idx = getvar(&p, filename, lno); if ((idx == -1) || !(q = getval(&p, filename, lno))) { ok = FALSE; g_free(line); continue; } tv = &theme_vars[idx]; switch (tv->type) { case STR: if (telem(char *, t, tv)) { g_free(telem(char *, t, tv)); } telem(char *, t, tv) = g_strdup(q); break; case FNAME: telem(char *, t, tv) = g_build_filename(subdir, q, NULL); if (tv->override >= 0 && !checkend(p)) { int terrain = tv->override; int i; for (i = 0; i < TC_MAX_OVERRIDE; ++i) { if (checkend(p)) break; if (! (q = getval(&p, filename, lno))) { ok = FALSE; break; } if (!parsecolor (q, &(t->ovr_colors[terrain][i]), filename, lno)) { ok = FALSE; break; } } } break; case COL: if (!parsecolor (q, &telem(TColor, t, tv), filename, lno)) { ok = FALSE; g_free(line); continue; } break; case SCMODE: if (strcmp(q, "never") == 0) t->scaling = NEVER; else if (strcmp(q, "always") == 0) t->scaling = ALWAYS; else if (strcmp(q, "only-downscale") == 0) t->scaling = ONLY_DOWNSCALE; else if (strcmp(q, "only-upscale") == 0) t->scaling = ONLY_UPSCALE; else { ERR1("bad scaling mode '%s'", q); ok = FALSE; } break; } used[idx] = TRUE; if (!checkend(p)) { ERR1("unexpected rest at end of line: '%s'", p); ok = FALSE; } g_free(line); } fclose(f); for (idx = 0; idx < G_N_ELEMENTS(theme_vars); idx++) { if (!used[idx] && !theme_vars[idx].optional) { ERR1("option '%s' missing", theme_vars[idx].name); ok = FALSE; } }; g_free(used); g_free(filename); if (ok) return t; g_free(t->name); g_free(t); return NULL; } void theme_register_callback(GCallback callback) { callback_list = g_list_append(callback_list, callback); } GdkPixmap *theme_get_terrain_pixmap(Terrain terrain) { return theme_get_current()->terrain_tiles[terrain]; } gint expose_terrain_cb(GtkWidget * area, G_GNUC_UNUSED GdkEventExpose * event, gpointer terraindata) { MapTheme *theme = theme_get_current(); cairo_t *cr; GdkPixbuf *p; gint height; GtkAllocation allocation; Terrain terrain = GPOINTER_TO_INT(terraindata); if (gtk_widget_get_window(area) == NULL) return FALSE; cr = gdk_cairo_create(gtk_widget_get_window(area)); gtk_widget_get_allocation(area, &allocation); height = allocation.width / theme->scaledata[terrain].aspect; p = gdk_pixbuf_scale_simple(theme->scaledata[terrain].native_image, allocation.width, height, GDK_INTERP_BILINEAR); gdk_cairo_set_source_pixbuf(cr, p, 0, 0); cairo_rectangle(cr, 0, 0, allocation.width, height); cairo_fill(cr); g_object_unref(p); cairo_destroy(cr); return FALSE; } pioneers-14.1/common/gtk/theme.h0000644000175000017500000000573311746474234013560 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __theme_h #define __theme_h #include typedef struct { gboolean set; gboolean transparent; gboolean allocated; GdkColor color; } TColor; typedef struct { GdkPixbuf *image; GdkPixbuf *native_image; gint native_width; float aspect; } TScaleData; typedef enum { TC_CHIP_BG = 0, TC_CHIP_FG, TC_CHIP_BD, TC_CHIP_H_BG, TC_CHIP_H_FG, TC_PORT_BG, TC_PORT_FG, TC_PORT_BD, TC_ROBBER_FG, TC_ROBBER_BD, TC_HEX_BD, TC_MAX } THEME_COLOR; #define TC_MAX_OVERRIDE (TC_CHIP_H_FG+1) /* The order of the TERRAIN_TILES enum is EXTREMELY important! The order * must match the resources indicated in enum Terrain. */ typedef enum { HILL_TILE = 0, FIELD_TILE, MOUNTAIN_TILE, PASTURE_TILE, FOREST_TILE, DESERT_TILE, SEA_TILE, GOLD_TILE, BOARD_TILE, TERRAIN_TILE_MAX } TERRAIN_TILES; #define TC_MAX_OVRTILE (GOLD_TILE+1) typedef enum { HILL_PORT_TILE = 0, FIELD_PORT_TILE, MOUNTAIN_PORT_TILE, PASTURE_PORT_TILE, FOREST_PORT_TILE, ANY_PORT_TILE, PORT_TILE_MAX } PORT_TILES; typedef enum { NEVER, ALWAYS, ONLY_DOWNSCALE, ONLY_UPSCALE } SCALEMODE; typedef struct _MapTheme { gchar *name; SCALEMODE scaling; gint current_width; const gchar *terrain_tile_names[TERRAIN_TILE_MAX]; const gchar *port_tile_names[PORT_TILE_MAX]; GdkPixmap *terrain_tiles[TERRAIN_TILE_MAX]; GdkPixmap *port_tiles[PORT_TILE_MAX]; gint port_tiles_width[PORT_TILE_MAX]; gint port_tiles_height[PORT_TILE_MAX]; TScaleData scaledata[TERRAIN_TILE_MAX]; TColor colors[TC_MAX]; TColor ovr_colors[TC_MAX_OVRTILE][TC_MAX_OVERRIDE]; } MapTheme; void theme_rescale(int radius); void theme_set_current(MapTheme * t); MapTheme *theme_get_current(void); GList *theme_get_list(void); void themes_init(void); void theme_register_callback(GCallback callback); void themes_cleanup(void); GdkPixmap *theme_get_terrain_pixmap(Terrain terrain); /** Callback to draw a terrain. * @param area Widget to draw on. * @param event Not used. * @param terraindata The Terrain enumeration value. */ gint expose_terrain_cb(GtkWidget * area, G_GNUC_UNUSED GdkEventExpose * event, gpointer terraindata); #endif pioneers-14.1/common/Makefile.am0000644000175000017500000000604711712461037013541 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # Copyright (C) 2004, 2010 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA noinst_LIBRARIES += libpioneers.a if HAVE_GNOME include common/gtk/Makefile.am endif libpioneers_a_CPPFLAGS = $(console_cflags) libpioneers_a_SOURCES = \ common/authors.h \ common/buildrec.c \ common/buildrec.h \ common/cards.c \ common/cards.h \ common/common_glib.c \ common/common_glib.h \ common/cost.c \ common/cost.h \ common/driver.c \ common/driver.h \ common/game.c \ common/game.h \ common/log.c \ common/log.h \ common/map.c \ common/map.h \ common/map_query.c \ common/network.c \ common/network.h \ common/notifying-string.gob \ common/notifying-string.gob.stamp \ common/notifying-string.c \ common/notifying-string.h \ common/notifying-string-private.h \ common/quoteinfo.c \ common/quoteinfo.h \ common/state.c \ common/state.h common/authors.h: AUTHORS @mkdir_p@ common printf '#define AUTHORLIST ' > $@ $(SED) -e's/ <.*//; s/$$/", \\/; s/^/"/; /^"[[:space:]]*", \\$$/d' $< >> $@ printf 'NULL\n' >> $@ # This target is not called common/version.h (although it builds that file), # because it must be PHONY, but should only be rebuilt once. build_version: @mkdir_p@ common printf '#define FULL_VERSION "$(VERSION)' > common/version.new if svn info > /dev/null 2>&1; then \ svn info | \ $(AWK) '$$1 == "Revision:" { printf ".r%s", $$2 }' \ >> common/version.new ;\ if svn status | $(GREP) -vq ^\? ; then \ printf '.M' >> common/version.new ;\ fi ;\ fi printf '"\n' >> common/version.new if diff common/version.h common/version.new > /dev/null 2>&1; then \ rm common/version.new ;\ else \ mv common/version.new common/version.h ;\ fi BUILT_SOURCES += \ build_version \ common/authors.h \ common/notifying-string.gob.stamp \ common/notifying-string.c \ common/notifying-string.h \ common/notifying-string-private.h CLEANFILES += common/authors.h common/version.h MAINTAINERCLEANFILES += \ common/notifying-string.gob.stamp \ common/notifying-string.c \ common/notifying-string.h \ common/notifying-string-private.h # always try to rebuild version.h .PHONY: build_version pioneers-14.1/common/authors.h0000644000175000017500000000043211760646027013342 00000000000000#define AUTHORLIST "Dave Cole", \ "Andy Heroff", \ "Roman Hodek", \ "Dan Egnor", \ "Steve Langasek", \ "Bibek Sahu", \ "Roderick Schertler", \ "Jeff Breidenbach", \ "David Fallon", \ "Matt Waggoner", \ "Geoff Hanson", \ "Bas Wijnen", \ "Roland Clobus", \ "Brian Wellington", \ NULL pioneers-14.1/common/buildrec.c0000644000175000017500000003265010745450110013434 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include "game.h" #include "map.h" #include "buildrec.h" /* Local function prototypes. */ static gboolean buildrec_can_setup_edge(GList * list, const Edge * edge, gboolean is_double); BuildRec *buildrec_new(BuildType type, gint x, gint y, gint pos) { BuildRec *rec = g_malloc0(sizeof(*rec)); rec->type = type; rec->x = x; rec->y = y; rec->pos = pos; rec->special_points_id = -1; return rec; } GList *buildrec_free(GList * list) { while (list != NULL) { BuildRec *rec = list->data; list = g_list_remove(list, rec); g_free(rec); } return NULL; } gint buildrec_count_type(GList * list, BuildType type) { gint num = 0; while (list != NULL) { BuildRec *rec = list->data; list = g_list_next(list); if (rec->type == type) num++; } return num; } gint buildrec_count_edges(GList * list) { gint num = 0; while (list != NULL) { BuildRec *rec = list->data; list = g_list_next(list); if (rec->type == BUILD_ROAD || rec->type == BUILD_SHIP || rec->type == BUILD_BRIDGE) num++; } return num; } BuildRec *buildrec_get(GList * list, BuildType type, gint idx) { while (list != NULL) { BuildRec *rec = list->data; list = g_list_next(list); if (rec->type == type && idx-- == 0) return rec; } return NULL; } BuildRec *buildrec_get_edge(GList * list, gint idx) { while (list != NULL) { BuildRec *rec = list->data; list = g_list_next(list); if ((rec->type == BUILD_ROAD || rec->type == BUILD_SHIP || rec->type == BUILD_BRIDGE) && idx-- == 0) return rec; } return NULL; } gboolean buildrec_is_valid(GList * list, const Map * map, gint owner) { while (list != NULL) { BuildRec *rec = list->data; list = g_list_next(list); switch (rec->type) { case BUILD_NONE: g_warning("BUILD_NONE in buildrec_is_valid"); continue; case BUILD_ROAD: /* Roads have to be adjacent to buildings / road */ if (!map_road_connect_ok(map, owner, rec->x, rec->y, rec->pos)) return FALSE; continue; case BUILD_BRIDGE: /* Bridges have to be adjacent to buildings / * road, and they have to be over water. */ if (!map_bridge_connect_ok(map, owner, rec->x, rec->y, rec->pos)) return FALSE; continue; case BUILD_SHIP: case BUILD_MOVE_SHIP: /* ships have to be adjacent to buildings / * ships, and they have to be over water / * coast. */ if (!map_ship_connect_ok(map, owner, rec->x, rec->y, rec->pos)) return FALSE; continue; case BUILD_SETTLEMENT: case BUILD_CITY: case BUILD_CITY_WALL: /* Buildings must be adjacent to a road */ if (!map_building_connect_ok (map, owner, rec->x, rec->y, rec->pos)) return FALSE; continue; } } return TRUE; } static gboolean edge_has_place_for_settlement(const Edge * edge) { gint idx; for (idx = 0; idx < G_N_ELEMENTS(edge->nodes); idx++) { const Node *node = edge->nodes[idx]; if (node->type == BUILD_NONE && is_node_on_land(node) && is_node_spacing_ok(node)) return TRUE; } return FALSE; } /* Check if we can place this edge with 0 existing settlements during setup */ static gboolean can_setup_edge_0(GList * list, const Edge * edge) { BuildRec *rec = buildrec_get_edge(list, 0); const Edge *other_edge; int idx; if (rec == NULL) /* This is the only edge - it can only placed if one * of its nodes is a legal location for a new * settlement. */ return edge_has_place_for_settlement(edge); /* There is already one edge placed. We can only place this * edge if it creates a second legal place for settlements. * If I place a settlement on one of the edges, make sure * there is still a place where the second settlement can be * placed. */ other_edge = map_edge(edge->map, rec->x, rec->y, rec->pos); for (idx = 0; idx < G_N_ELEMENTS(edge->nodes); idx++) { Node *node = edge->nodes[idx]; if (node->type == BUILD_NONE && is_node_spacing_ok(node)) { gboolean ok; node->type = BUILD_SETTLEMENT; ok = edge_has_place_for_settlement(other_edge); node->type = BUILD_NONE; if (ok) return TRUE; } } return FALSE; } /* Check if we can place this edge with 1 existing settlement during setup */ static gboolean can_setup_edge_1(GList * list, const Edge * edge) { BuildRec *rec = buildrec_get(list, BUILD_SETTLEMENT, 0); const Node *node = map_node_const(edge->map, rec->x, rec->y, rec->pos); const Edge *other_edge; rec = buildrec_get_edge(list, 0); if (rec == NULL) /* No other edges placed yet, we can either place this * edge next to the existing settlement, or somewhere * which has a legal place for an additional * settlement. */ return is_edge_adjacent_to_node(edge, node) || edge_has_place_for_settlement(edge); /* This is the second edge, we must ensure that one of the * edges is adjacent to the settlement, and the other has a * place for the second settlement. */ other_edge = map_edge_const(edge->map, rec->x, rec->y, rec->pos); return (is_edge_adjacent_to_node(edge, node) && edge_has_place_for_settlement(other_edge)) || (is_edge_adjacent_to_node(other_edge, node) && edge_has_place_for_settlement(edge)); } /* Check if we can place this edge with 2 existing settlements during setup */ static gboolean can_setup_edge_2(GList * list, const Edge * edge) { BuildRec *rec = buildrec_get(list, BUILD_SETTLEMENT, 0); const Node *node = map_node_const(edge->map, rec->x, rec->y, rec->pos); const Node *other_node; const Edge *other_edge; rec = buildrec_get(list, BUILD_SETTLEMENT, 1); other_node = map_node_const(edge->map, rec->x, rec->y, rec->pos); rec = buildrec_get_edge(list, 0); if (rec == NULL) /* No other edges placed yet, we must place this edge * next to either settlement. */ return is_edge_adjacent_to_node(edge, node) || is_edge_adjacent_to_node(edge, other_node); /* Two settlements and one edge placed, we must make sure that * we place this edge next to a settlement and both * settlements then have an adjacent edge. If we have * bridges, it is possible to have both settlements adjacent * to a single bridge. */ other_edge = map_edge_const(edge->map, rec->x, rec->y, rec->pos); if (is_edge_adjacent_to_node(other_edge, node) && is_edge_adjacent_to_node(other_edge, other_node)) /* other_edge is a bridge connecting both settlements * -> edge can connect to either settlement. */ return is_edge_adjacent_to_node(edge, node) || is_edge_adjacent_to_node(edge, other_node); if (is_edge_adjacent_to_node(edge, node) && is_edge_adjacent_to_node(edge, other_node) && !is_edge_on_land(edge)) /* This edge is a bridge connecting both settlements */ return TRUE; /* No bridges -> edge must be adjacent to the settlement which * other_edge is not adjacent to. */ if (is_edge_adjacent_to_node(other_edge, other_node)) return is_edge_adjacent_to_node(edge, node); else return is_edge_adjacent_to_node(edge, other_node); } static gboolean buildrec_can_setup_edge(GList * list, const Edge * edge, gboolean is_double) { if (!is_double) { BuildRec *rec = buildrec_get(list, BUILD_SETTLEMENT, 0); if (rec != NULL) { /* We have placed a settlement, the edge must * be placed adjacent to that settlement. */ const Node *node = map_node(edge->map, rec->x, rec->y, rec->pos); return is_edge_adjacent_to_node(edge, node); } /* We have not placed a settlement yet, the edge can * only placed if one of its nodes is a legal location * for a new settlement. */ return edge_has_place_for_settlement(edge); } /* Double setup is more difficult - there are a lot more * situations to be handled. */ switch (buildrec_count_type(list, BUILD_SETTLEMENT)) { case 0: return can_setup_edge_0(list, edge); case 1: return can_setup_edge_1(list, edge); case 2: return can_setup_edge_2(list, edge); } g_warning("more than 2 settlements in setup!!!"); return FALSE; } gboolean buildrec_can_setup_road(GList * list, const Edge * edge, gboolean is_double) { if (!can_road_be_setup(edge)) return FALSE; return buildrec_can_setup_edge(list, edge, is_double); } gboolean buildrec_can_setup_ship(GList * list, const Edge * edge, gboolean is_double) { if (!can_ship_be_setup(edge)) return FALSE; return buildrec_can_setup_edge(list, edge, is_double); } gboolean buildrec_can_setup_bridge(GList * list, const Edge * edge, gboolean is_double) { if (!can_bridge_be_setup(edge)) return FALSE; return buildrec_can_setup_edge(list, edge, is_double); } /* Check if we can place this settlement with 0 existing edges during setup */ static gboolean can_setup_settlement_0(G_GNUC_UNUSED GList * list, G_GNUC_UNUSED const Node * node) { return TRUE; } /* Check if we can place this settlement with 1 existing edge during setup */ static gboolean can_setup_settlement_1(GList * list, const Node * node) { BuildRec *rec = buildrec_get_edge(list, 0); const Edge *edge = map_edge_const(node->map, rec->x, rec->y, rec->pos); const Node *other_node; /* Make sure that we place one settlement next to the existing edge. */ rec = buildrec_get(list, BUILD_SETTLEMENT, 0); if (rec == NULL) /* No other settlements placed yet. */ return TRUE; /* There is one edge and one settlement placed. One of the * settlements must be placed next to the edge. */ other_node = map_node_const(node->map, rec->x, rec->y, rec->pos); return is_edge_adjacent_to_node(edge, node) || is_edge_adjacent_to_node(edge, other_node); } /* Check if we can place this settlement with 2 existing edges during setup */ static gboolean can_setup_settlement_2(GList * list, const Node * node) { BuildRec *rec = buildrec_get_edge(list, 0); const Edge *edge = map_edge_const(node->map, rec->x, rec->y, rec->pos); const Edge *other_edge; const Node *other_node; Node *try_build_here; rec = buildrec_get_edge(list, 1); other_edge = map_edge_const(node->map, rec->x, rec->y, rec->pos); /* Two edges placed, we must make sure that we place this * settlement adjacent to an edge. */ if (!is_edge_adjacent_to_node(edge, node) && !is_edge_adjacent_to_node(other_edge, node)) return FALSE; rec = buildrec_get(list, BUILD_SETTLEMENT, 0); if (rec == NULL) { /* No settlements placed yet, place the settlement and * make sure that there is still a valid place for the * second settlement. */ gboolean is_ok = FALSE; try_build_here = map_node(node->map, node->x, node->y, node->pos); /* Copy to non-const pointer */ try_build_here->type = BUILD_SETTLEMENT; try_build_here->owner = edge->owner; if (is_edge_adjacent_to_node(edge, node)) { if (is_edge_adjacent_to_node(other_edge, node)) /* Node is adjacent to both edges - * make sure there is still a valid * location on either edge. */ is_ok = edge_has_place_for_settlement(edge) || edge_has_place_for_settlement (other_edge); else /* Node is adjacent to edge, make sure * other edge has location for * settlement. */ is_ok = edge_has_place_for_settlement (other_edge); } else /* Node is adjacent to other edge - make sure * edge has location for settlement. */ is_ok = edge_has_place_for_settlement(edge); try_build_here->type = BUILD_NONE; try_build_here->owner = -1; return is_ok; } /* Two edges and one settlement placed, ensure that each edge * is adjacent to at least one settlement. */ other_node = map_node_const(node->map, rec->x, rec->y, rec->pos); if (is_edge_adjacent_to_node(edge, other_node)) { if (is_edge_adjacent_to_node(other_edge, other_node)) return TRUE; else return is_edge_adjacent_to_node(edge, other_node); } else return is_edge_adjacent_to_node(edge, node); } gboolean buildrec_can_setup_settlement(GList * list, const Node * node, gboolean is_double) { if (!can_settlement_be_setup(node)) return FALSE; if (!is_double) { BuildRec *rec = buildrec_get_edge(list, 0); if (rec != NULL) { /* We have placed an edge, the settlement must * be placed adjacent to that edge. */ const Edge *edge = map_edge_const(node->map, rec->x, rec->y, rec->pos); return is_edge_adjacent_to_node(edge, node); } /* We have not placed an edge yet, the settlement is OK. */ return TRUE; } /* Double setup is more difficult - there are a lot more * situations to be handled. */ switch (buildrec_count_edges(list)) { case 0: return can_setup_settlement_0(list, node); case 1: return can_setup_settlement_1(list, node); case 2: return can_setup_settlement_2(list, node); } g_warning("more than 2 settlements in setup!!!"); return FALSE; } pioneers-14.1/common/buildrec.h0000644000175000017500000000506710745450110013443 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __buildrec_h #define __buildrec_h #include "map.h" /** information about building. Used for undo */ typedef struct { BuildType type; /**< type of building performed */ int x; /**< x-pos of hex of build action */ int y; /**< x-pos of hex of build action */ int pos; /**< location on hex of build action */ BuildType prev_status; /**< build city without settlement only: previous status of node */ const gint *cost; /**< resources spent */ int prev_x; /**< moving ships only: previous x hex */ int prev_y; /**< moving ships only: previous y hex */ int prev_pos; /**< moving ships only: previous position */ /* this is an int, because only the server uses it, and the client * doesn't know about Players. */ int longest_road; /**< who had the longest road before this build */ int special_points_id; /**< Id of the special points or -1 */ } BuildRec; int buildrec_count_type(GList * list, BuildType type); BuildRec *buildrec_get(GList * list, BuildType type, gint idx); BuildRec *buildrec_get_edge(GList * list, gint idx); BuildRec *buildrec_new(BuildType type, gint x, gint y, gint pos); GList *buildrec_free(GList * list); gboolean buildrec_is_valid(GList * list, const Map * map, gint owner); gboolean buildrec_can_setup_road(GList * list, const Edge * edge, gboolean is_double); gboolean buildrec_can_setup_ship(GList * list, const Edge * edge, gboolean is_double); gboolean buildrec_can_setup_settlement(GList * list, const Node * node, gboolean is_double); gboolean buildrec_can_setup_bridge(GList * list, const Edge * edge, gboolean is_double); gint buildrec_count_edges(GList * list); #endif pioneers-14.1/common/cards.c0000644000175000017500000001140511461571231012736 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "cards.h" DevelDeck *deck_new(GameParams * params) { DevelDeck *deck; gint num; gint idx; deck = g_malloc0(sizeof(*deck)); for (num = idx = 0; idx < G_N_ELEMENTS(params->num_develop_type); idx++) num += params->num_develop_type[idx]; deck->max_cards = num; deck->cards = g_malloc0(deck->max_cards * sizeof(*deck->cards)); return deck; } void deck_free(DevelDeck * deck) { if (deck->cards != NULL) g_free(deck->cards); g_free(deck); } void deck_card_add(DevelDeck * deck, DevelType type, gint turn_bought) { if (deck->num_cards >= deck->max_cards) return; deck->cards[deck->num_cards].type = type; deck->cards[deck->num_cards].turn_bought = turn_bought; deck->num_cards++; } gboolean is_victory_card(DevelType type) { return type == DEVEL_CHAPEL || type == DEVEL_UNIVERSITY || type == DEVEL_GOVERNORS_HOUSE || type == DEVEL_LIBRARY || type == DEVEL_MARKET; } DevelType deck_card_type(const DevelDeck * deck, gint idx) { return deck->cards[idx].type; } gboolean deck_card_playable(const DevelDeck * deck, gboolean played_develop, gint idx, gint turn) { if (idx >= deck->num_cards) return FALSE; if (is_victory_card(deck->cards[idx].type)) return TRUE; return !played_develop && deck->cards[idx].turn_bought < turn; } gboolean deck_card_play(DevelDeck * deck, gboolean played_develop, gint idx, gint turn) { if (!deck_card_playable(deck, played_develop, idx, turn)) return FALSE; deck->num_cards--; memmove(deck->cards + idx, deck->cards + idx + 1, (deck->num_cards - idx) * sizeof(*deck->cards)); return TRUE; } gint deck_card_amount(const DevelDeck * deck, DevelType type) { gint idx; gint amount = 0; for (idx = 0; idx < deck->num_cards; ++idx) if (deck->cards[idx].type == type) ++amount; return amount; } gint deck_card_oldest_card(const DevelDeck * deck, DevelType type) { gint idx; for (idx = 0; idx < deck->num_cards; ++idx) if (deck->cards[idx].type == type) return idx; return -1; } const gchar *get_devel_name(DevelType type) { switch (type) { case DEVEL_ROAD_BUILDING: /* Name of the development card */ return _("Road building"); case DEVEL_MONOPOLY: /* Name of the development card */ return _("Monopoly"); case DEVEL_YEAR_OF_PLENTY: /* Name of the development card */ return _("Year of plenty"); case DEVEL_CHAPEL: /* Name of the development card */ return _("Chapel"); case DEVEL_UNIVERSITY: /* Name of the development card */ return _("Pioneer university"); case DEVEL_GOVERNORS_HOUSE: /* Name of the development card */ return _("Governor's house"); case DEVEL_LIBRARY: /* Name of the development card */ return _("Library"); case DEVEL_MARKET: /* Name of the development card */ return _("Market"); case DEVEL_SOLDIER: /* Name of the development card */ return _("Soldier"); } g_assert_not_reached(); return ""; } const gchar *get_devel_description(DevelType type) { switch (type) { case DEVEL_ROAD_BUILDING: /* Description of the 'Road Building' development card */ return _("Build two new roads"); case DEVEL_MONOPOLY: /* Description of the 'Monopoly' development card */ return _("Select a resource type and take every card of " "that type held by all other players"); case DEVEL_YEAR_OF_PLENTY: /* Description of the 'Year of Plenty' development card */ return _("Take two resource cards of any type from the " "bank (cards may be of the same or different " "types)"); case DEVEL_CHAPEL: case DEVEL_UNIVERSITY: case DEVEL_GOVERNORS_HOUSE: case DEVEL_LIBRARY: case DEVEL_MARKET: /* Description of a development card of 1 victory point */ return _("One victory point"); case DEVEL_SOLDIER: /* Description of the 'Soldier' development card */ return _("Move the robber to a different space and take " "one resource card from another player adjacent " "to that space"); } g_assert_not_reached(); return ""; } pioneers-14.1/common/cards.h0000644000175000017500000000354511345354413012753 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __cards_h #define __cards_h #include "game.h" /* It is important to know which turn a development card was bought * in. You cannot play a card in the same turn that it was bought. */ typedef struct { DevelType type; gint turn_bought; } DevelCard; typedef struct { DevelCard *cards; gint num_cards; gint max_cards; } DevelDeck; gboolean is_victory_card(DevelType type); const gchar *get_devel_name(DevelType type); const gchar *get_devel_description(DevelType description); DevelDeck *deck_new(GameParams * params); void deck_free(DevelDeck * deck); void deck_card_add(DevelDeck * deck, DevelType type, gint turn_bought); gboolean deck_card_playable(const DevelDeck * deck, gboolean played_develop, gint idx, gint turn); gboolean deck_card_play(DevelDeck * deck, gboolean played_develop, gint idx, gint turn); DevelType deck_card_type(const DevelDeck * deck, gint idx); gint deck_card_amount(const DevelDeck * deck, DevelType type); gint deck_card_oldest_card(const DevelDeck * deck, DevelType type); #endif pioneers-14.1/common/common_glib.c0000644000175000017500000000665010363024766014143 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include "game.h" #include "driver.h" typedef struct { void (*func) (gpointer); gpointer param; GIOChannel *channel; } evl_io_func; GHashTable *_evl_glib_hash = NULL; /* Local function prototypes. */ guint evl_glib_input_add_read(gint fd, void (*func) (gpointer), gpointer param); guint evl_glib_input_add_write(gint fd, void (*func) (gpointer), gpointer param); void evl_glib_input_remove(guint tag); /* event-loop related functions */ static gboolean evl_glib_call_func(G_GNUC_UNUSED GIOChannel * source, G_GNUC_UNUSED GIOCondition condition, gpointer data) { evl_io_func *io_func = (evl_io_func *) data; io_func->func(io_func->param); return TRUE; } static void evl_glib_channel_destroyed(gpointer data) { GIOChannel *io_channel = (GIOChannel *) data; /* free the srv_io_func structure associated with the channel */ evl_io_func *io_func = g_hash_table_lookup(_evl_glib_hash, io_channel); if (io_func) g_free(io_func); g_hash_table_remove(_evl_glib_hash, io_channel); } static guint evl_glib_input_add_watch(gint fd, GIOCondition condition, void (*func) (gpointer), gpointer param) { GIOChannel *io_channel; evl_io_func *io_func = g_malloc0(sizeof(evl_io_func)); guint tag; io_channel = g_io_channel_unix_new(fd); io_func->func = func; io_func->param = param; io_func->channel = io_channel; tag = g_io_add_watch_full(io_channel, G_PRIORITY_DEFAULT, condition, evl_glib_call_func, io_func, evl_glib_channel_destroyed); /* allocate hash table if it hasn't yet been done */ if (!_evl_glib_hash) _evl_glib_hash = g_hash_table_new(NULL, NULL); /* insert the channel and function into a hash table; key on channel */ g_hash_table_insert(_evl_glib_hash, io_channel, io_func); return tag; } guint evl_glib_input_add_read(gint fd, InputFunc func, gpointer param) { return evl_glib_input_add_watch(fd, G_IO_IN | G_IO_HUP, func, param); } guint evl_glib_input_add_write(gint fd, InputFunc func, gpointer param) { return evl_glib_input_add_watch(fd, G_IO_OUT | G_IO_HUP, func, param); } void evl_glib_input_remove(guint tag) { g_source_remove(tag); } UIDriver Glib_Driver = { NULL, /* event_queue */ log_message_string_console, /* log_write */ evl_glib_input_add_read, /* add read input */ evl_glib_input_add_write, /* add write input */ evl_glib_input_remove, /* remove input */ NULL, /* player just added */ NULL, /* player just renamed */ NULL, /* player just removed */ NULL /* player just renamed */ }; pioneers-14.1/common/common_glib.h0000644000175000017500000000215710363024766014146 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __common_glib_h #define __common_glib_h extern guint evl_glib_input_add_read(gint fd, InputFunc func, gpointer param); extern guint evl_glib_input_add_write(gint fd, InputFunc func, gpointer param); extern void evl_glib_input_remove(guint tag); #endif pioneers-14.1/common/cost.c0000644000175000017500000000553110621674212012615 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include "game.h" #include "cost.h" const gint *cost_road(void) { static gint cost[NO_RESOURCE] = { 1, /* brick */ 0, /* grain */ 0, /* ore */ 0, /* wool */ 1 /* lumber */ }; return cost; } const gint *cost_ship(void) { static gint cost[NO_RESOURCE] = { 0, /* brick */ 0, /* grain */ 0, /* ore */ 1, /* wool */ 1 /* lumber */ }; return cost; } const gint *cost_bridge(void) { static gint cost[NO_RESOURCE] = { 1, /* brick */ 0, /* grain */ 0, /* ore */ 1, /* wool */ 1 /* lumber */ }; return cost; } const gint *cost_settlement(void) { static gint cost[NO_RESOURCE] = { 1, /* brick */ 1, /* grain */ 0, /* ore */ 1, /* wool */ 1 /* lumber */ }; return cost; } const gint *cost_upgrade_settlement(void) { static gint cost[NO_RESOURCE] = { 0, /* brick */ 2, /* grain */ 3, /* ore */ 0, /* wool */ 0 /* lumber */ }; return cost; } const gint *cost_city(void) { static gint cost[NO_RESOURCE] = { 1, /* brick */ 3, /* grain */ 3, /* ore */ 1, /* wool */ 1 /* lumber */ }; return cost; } const gint *cost_city_wall(void) { static gint cost[NO_RESOURCE] = { 2, /* brick */ 0, /* grain */ 0, /* ore */ 0, /* wool */ 0 /* lumber */ }; return cost; } const gint *cost_development(void) { static gint cost[NO_RESOURCE] = { 0, /* brick */ 1, /* grain */ 1, /* ore */ 1, /* wool */ 0 /* lumber */ }; return cost; } gboolean cost_buy(const gint * cost, gint * assets) { gint idx; for (idx = 0; idx < NO_RESOURCE; idx++) { assets[idx] -= cost[idx]; if (assets[idx] < 0) return FALSE; } return TRUE; } void cost_refund(const gint * cost, gint * assets) { gint idx; for (idx = 0; idx < NO_RESOURCE; idx++) assets[idx] += cost[idx]; } gboolean cost_can_afford(const gint * cost, const gint * assets) { gint tmp[NO_RESOURCE]; gint idx; for (idx = 0; idx < NO_RESOURCE; idx++) tmp[idx] = assets[idx]; return cost_buy(cost, tmp); } pioneers-14.1/common/cost.h0000644000175000017500000000251210621674212012616 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __cost_h #define __cost_h #include const gint *cost_road(void); const gint *cost_ship(void); const gint *cost_bridge(void); const gint *cost_settlement(void); const gint *cost_upgrade_settlement(void); const gint *cost_city(void); const gint *cost_city_wall(void); const gint *cost_development(void); gboolean cost_buy(const gint * cost, gint * assets); void cost_refund(const gint * cost, gint * assets); gboolean cost_can_afford(const gint * cost, const gint * assets); #endif pioneers-14.1/common/driver.c0000644000175000017500000000266010363024766013146 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2000 Bibek Sahu * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* * Implementation of generic driver-manipulation functions. * Creation of relevant globals. */ #include "config.h" #include "driver.h" #include "common_glib.h" UIDriver *driver; void set_ui_driver(UIDriver * d) { driver = d; /* For now, these are universal functions that can't be hooked in at compile time. We may need to move these out of here if other ports will be using something other than glib. */ if (driver) { driver->input_add_read = evl_glib_input_add_read; driver->input_add_write = evl_glib_input_add_write; driver->input_remove = evl_glib_input_remove; } } pioneers-14.1/common/driver.h0000644000175000017500000000344410363024766013154 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2000 Steve Langasek * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __driver_h #define __driver_h #include "log.h" #include "state.h" typedef void (*InputFunc) (gpointer); typedef struct { /* function for clearing the event queue */ void (*event_queue) (void); /* Function to write logs and data to the system display */ LogFunc log_write; /* ==> void log_write( gint msg_type, gchar *text ); */ /* event-loop related functions */ guint(*input_add_read) (gint fd, InputFunc func, gpointer param); guint(*input_add_write) (gint fd, InputFunc func, gpointer param); void (*input_remove) (guint tag); /* callbacks for the server */ void (*player_added) (void *player); /* these really should be ... */ void (*player_renamed) (void *player); /* ... `Player *player', but */ void (*player_removed) (void *player); /* that requires more headers */ void (*player_change) (void *game); /* Should be Game *game */ } UIDriver; extern UIDriver *driver; void set_ui_driver(UIDriver * d); #endif /* __driver_h */ pioneers-14.1/common/game.c0000644000175000017500000007232411734530725012570 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include #include "game.h" #include "cards.h" #include "log.h" const gchar *default_player_style = "square"; typedef enum { PARAM_SINGLE_LINE, PARAM_MULTIPLE_LINES, PARAM_INT, PARAM_BOOL, PARAM_INTLIST, PARAM_OBSOLETE_DATA } ParamType; typedef struct { const gchar *name; /**< Text version of the parameter */ ClientVersionType first_version; /**< First version with this parameter */ ParamType type; /**< Data type */ int offset; /**< Offset in the struct */ } Param; #define PARAM(name, first, type, var) #name, first, type, G_STRUCT_OFFSET(GameParams, var) #define PARAM_OBSOLETE(var) #var, UNKNOWN_VERSION, PARAM_OBSOLETE_DATA, -1 /* *INDENT-OFF* */ static Param game_params[] = { {PARAM(title, FIRST_VERSION, PARAM_SINGLE_LINE, title)}, {PARAM_OBSOLETE(variant)}, {PARAM(random-terrain, FIRST_VERSION, PARAM_BOOL, random_terrain)}, {PARAM(strict-trade, FIRST_VERSION, PARAM_BOOL, strict_trade)}, {PARAM(domestic-trade, FIRST_VERSION, PARAM_BOOL, domestic_trade)}, {PARAM(num-players, FIRST_VERSION, PARAM_INT, num_players)}, {PARAM(sevens-rule, FIRST_VERSION, PARAM_INT, sevens_rule)}, {PARAM(victory-points, FIRST_VERSION, PARAM_INT, victory_points)}, {PARAM(check-victory-at-end-of-turn, FIRST_VERSION, PARAM_BOOL, check_victory_at_end_of_turn)}, {PARAM(num-roads, FIRST_VERSION, PARAM_INT, num_build_type[BUILD_ROAD])}, {PARAM(num-bridges, FIRST_VERSION, PARAM_INT, num_build_type[BUILD_BRIDGE])}, {PARAM(num-ships, FIRST_VERSION, PARAM_INT, num_build_type[BUILD_SHIP])}, {PARAM(num-settlements, FIRST_VERSION, PARAM_INT, num_build_type[BUILD_SETTLEMENT])}, {PARAM(num-cities, FIRST_VERSION, PARAM_INT, num_build_type[BUILD_CITY])}, {PARAM(num-city-walls, V0_11, PARAM_INT, num_build_type[BUILD_CITY_WALL])}, {PARAM(resource-count, FIRST_VERSION, PARAM_INT, resource_count)}, {PARAM(develop-road, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_ROAD_BUILDING])}, {PARAM(develop-monopoly, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_MONOPOLY])}, {PARAM(develop-plenty, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_YEAR_OF_PLENTY])}, {PARAM(develop-chapel, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_CHAPEL])}, {PARAM(develop-university, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_UNIVERSITY])}, {PARAM(develop-governor, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_GOVERNORS_HOUSE])}, {PARAM(develop-library, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_LIBRARY])}, {PARAM(develop-market, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_MARKET])}, {PARAM(develop-soldier, FIRST_VERSION, PARAM_INT, num_develop_type[DEVEL_SOLDIER])}, {PARAM(use-pirate, FIRST_VERSION, PARAM_BOOL, use_pirate)}, {PARAM(island-discovery-bonus, FIRST_VERSION, PARAM_INTLIST, island_discovery_bonus)}, {PARAM(#, FIRST_VERSION, PARAM_MULTIPLE_LINES, comments)}, {PARAM(desc, V14, PARAM_MULTIPLE_LINES, description)}, }; /* *INDENT-ON* */ GameParams *params_new(void) { GameParams *params; params = g_malloc0(sizeof(*params)); return params; } void params_free(GameParams * params) { if (params == NULL) return; gint idx; gchar *str; GArray *int_list; for (idx = 0; idx < G_N_ELEMENTS(game_params); idx++) { Param *param = game_params + idx; switch (param->type) { case PARAM_SINGLE_LINE: case PARAM_MULTIPLE_LINES: str = G_STRUCT_MEMBER(gchar *, params, param->offset); g_free(str); break; case PARAM_INT: case PARAM_BOOL: break; case PARAM_INTLIST: int_list = G_STRUCT_MEMBER(GArray *, params, param->offset); if (int_list != NULL) g_array_free(int_list, TRUE); break; case PARAM_OBSOLETE_DATA: /* Obsolete rule: do nothing */ break; } } map_free(params->map); g_free(params); } static gchar *skip_space(gchar * str) { while (isspace(*str)) str++; return str; } static gboolean match_word(gchar ** str, const gchar * word) { gint word_len; word_len = strlen(word); if (strncmp(*str, word, word_len) == 0) { *str += word_len; *str = skip_space(*str); return TRUE; } return FALSE; } GArray *build_int_list(const gchar * str) { GArray *array = g_array_new(FALSE, FALSE, sizeof(gint)); while (*str != '\0') { gint num; gint sign = +1; /* Skip leading space */ while (isspace(*str)) str++; if (*str == '\0') break; /* Get the next number and add it to the array */ num = 0; if (*str == '-') { sign = -1; str++; } while (isdigit(*str)) num = num * 10 + *str++ - '0'; num *= sign; g_array_append_val(array, num); /* Skip the non-digits */ while (!isdigit(*str) && *str != '-' && *str != '\0') str++; } if (array->len == 0) { g_array_free(array, FALSE); array = NULL; } return array; } gchar *format_int_list(const gchar * name, GArray * array) { gchar *old; gchar *str; int idx; if (array == NULL) return NULL; if (array->len == 0) { return g_strdup(name); } if (name == NULL || strlen(name) == 0) { str = g_strdup(""); } else { str = g_strdup_printf("%s ", name); }; for (idx = 0; idx < array->len; idx++) { old = str; if (idx == 0) str = g_strdup_printf("%s%d", str, g_array_index(array, gint, idx)); else str = g_strdup_printf("%s,%d", str, g_array_index(array, gint, idx)); g_free(old); } return str; } struct nosetup_t { WriteLineFunc func; gpointer user_data; }; static gboolean find_no_setup(const Hex * hex, gpointer closure) { gint idx; struct nosetup_t *data = closure; for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); ++idx) { const Node *node = hex->nodes[idx]; if (node->no_setup) { gchar buff[50]; if (node->x != hex->x || node->y != hex->y) continue; snprintf(buff, sizeof(buff), "nosetup %d %d %d", node->x, node->y, node->pos); data->func(data->user_data, buff); } } return FALSE; } void params_write_lines(GameParams * params, ClientVersionType version, gboolean write_secrets, WriteLineFunc func, gpointer user_data) { gint idx; gint y; gchar *buff; gchar *str; for (idx = 0; idx < G_N_ELEMENTS(game_params); idx++) { Param *param = game_params + idx; if (param->first_version > version) { /* This rule is too new for the recipient */ /* Only notify the recipient when the rule is not in use */ switch (param->type) { case PARAM_SINGLE_LINE: case PARAM_MULTIPLE_LINES: str = G_STRUCT_MEMBER(gchar *, params, param->offset); if (!str || strlen(str) < 1) { continue; }; break; case PARAM_INT: if (G_STRUCT_MEMBER (gint, params, param->offset) < 1) { continue; }; break; case PARAM_BOOL: if (!G_STRUCT_MEMBER (gboolean, params, param->offset)) { continue; } break; case PARAM_INTLIST: buff = format_int_list(param->name, G_STRUCT_MEMBER(GArray *, params, param->offset)); if (buff == NULL) { continue; }; g_free(buff); break; case PARAM_OBSOLETE_DATA: /* Obsolete rule: go to the next rule */ continue; } buff = g_strdup_printf("new-rule %s", param->name); func(user_data, buff); g_free(buff); continue; } switch (param->type) { case PARAM_SINGLE_LINE: str = G_STRUCT_MEMBER(gchar *, params, param->offset); if (!str) continue; buff = g_strdup_printf("%s %s", param->name, str); func(user_data, buff); g_free(buff); break; case PARAM_MULTIPLE_LINES: str = G_STRUCT_MEMBER(gchar *, params, param->offset); if (str) { gchar **strv; gchar **strv_it; strv = g_strsplit(str, "\n", 0); strv_it = strv; while (*strv_it) { buff = g_strdup_printf("%s %s", param->name, *strv_it); func(user_data, buff); g_free(buff); strv_it++; } g_strfreev(strv); } break; case PARAM_INT: buff = g_strdup_printf("%s %d", param->name, G_STRUCT_MEMBER(gint, params, param-> offset)); func(user_data, buff); g_free(buff); break; case PARAM_BOOL: if (G_STRUCT_MEMBER (gboolean, params, param->offset)) { func(user_data, param->name); } break; case PARAM_INTLIST: buff = format_int_list(param->name, G_STRUCT_MEMBER(GArray *, params, param-> offset)); /* Don't send empty intlists */ if (buff != NULL) { func(user_data, buff); g_free(buff); } break; case PARAM_OBSOLETE_DATA: /* Obsolete rule: do nothing */ break; } } buff = format_int_list("chits", params->map->chits); func(user_data, buff); g_free(buff); func(user_data, "map"); for (y = 0; y < params->map->y_size; y++) { buff = map_format_line(params->map, write_secrets, y); func(user_data, buff); g_free(buff); } func(user_data, "."); if (params->map) { struct nosetup_t tmp; tmp.user_data = user_data; tmp.func = func; map_traverse_const(params->map, find_no_setup, &tmp); } } gboolean params_load_line(GameParams * params, gchar * line) { gint idx; if (params->map == NULL) params->map = map_new(); if (params->parsing_map) { if (strcmp(line, ".") == 0) { params->parsing_map = FALSE; if (!map_parse_finish(params->map)) { map_free(params->map); params->map = NULL; return FALSE; } } else return map_parse_line(params->map, line); return TRUE; } line = skip_space(line); if (*line == 0) return TRUE; if (match_word(&line, "map")) { params->parsing_map = TRUE; return TRUE; } if (match_word(&line, "chits")) { if (params->map->chits != NULL) g_array_free(params->map->chits, TRUE); params->map->chits = build_int_list(line); if (params->map->chits == NULL) { g_warning("Zero length chits array"); return FALSE; } return TRUE; } if (match_word(&line, "nosetup")) { gint x = 0, y = 0, pos = 0; Node *node; /* don't tolerate invalid game descriptions */ g_assert(params->map != NULL); sscanf(line, "%d %d %d", &x, &y, &pos); node = map_node(params->map, x, y, pos); if (node) { node->no_setup = TRUE; } else { g_warning ("Nosetup node %d %d %d is not in the map", x, y, pos); } return TRUE; } for (idx = 0; idx < G_N_ELEMENTS(game_params); idx++) { Param *param = game_params + idx; gchar *str; GArray *array; if (!match_word(&line, param->name)) continue; switch (param->type) { case PARAM_SINGLE_LINE: str = G_STRUCT_MEMBER(gchar *, params, param->offset); if (str) g_free(str); str = g_strchomp(g_strdup(line)); G_STRUCT_MEMBER(gchar *, params, param->offset) = str; return TRUE; case PARAM_MULTIPLE_LINES: str = G_STRUCT_MEMBER(gchar *, params, param->offset); if (str) { gchar *copy; copy = g_strconcat(str, "\n", g_strchomp(line), NULL); g_free(str); str = copy; } else { str = g_strchomp(g_strdup(line)); } G_STRUCT_MEMBER(gchar *, params, param->offset) = str; return TRUE; case PARAM_INT: G_STRUCT_MEMBER(gint, params, param->offset) = atoi(line); return TRUE; case PARAM_BOOL: G_STRUCT_MEMBER(gboolean, params, param->offset) = TRUE; return TRUE; case PARAM_INTLIST: array = G_STRUCT_MEMBER(GArray *, params, param->offset); if (array != NULL) g_array_free(array, TRUE); array = build_int_list(line); if (array == NULL) { g_warning("Zero length array for %s", param->name); } G_STRUCT_MEMBER(GArray *, params, param->offset) = array; return array != NULL; case PARAM_OBSOLETE_DATA: log_message(MSG_ERROR, _("Obsolete rule: '%s'\n"), param->name); return TRUE; } } if (match_word(&line, "new-rule")) { log_message(MSG_INFO, _("The game uses the new rule '%s', which " "is not yet supported. " "Consider upgrading.\n"), line); return TRUE; } g_warning("Unknown keyword: %s", line); return FALSE; } /* read a line from a file. The memory needed is allocated. The returned line * is unbounded. Returns FALSE if no (partial) line could be read */ gboolean read_line_from_file(gchar ** line, FILE * f) { gchar part[512]; gint len; if (fgets(part, sizeof(part), f) == NULL) return FALSE; len = strlen(part); g_assert(len > 0); *line = g_strdup(part); while ((*line)[len - 1] != '\n') { gchar *oldline; if (fgets(part, sizeof(part), f) == NULL) break; oldline = *line; *line = g_strdup_printf("%s%s", *line, part); g_free(oldline); len = strlen(*line); } /* In case of error or EOF, just return the part we have. * Otherwise, strip the newline. */ if ((*line)[len - 1] == '\n') (*line)[len - 1] = '\0'; return TRUE; } GameParams *params_load_file(const gchar * fname) { FILE *fp; gchar *line; GameParams *params; if ((fp = fopen(fname, "r")) == NULL) { g_warning("could not open '%s'", fname); return NULL; } params = params_new(); while (read_line_from_file(&line, fp) && params) { if (!params_load_line(params, line)) { params_free(params); params = NULL; } g_free(line); } fclose(fp); if (params && !params_load_finish(params)) { params_free(params); return NULL; } return params; } GameParams *params_copy(const GameParams * params) { /* Copy the const parameter to a non-const version, because * G_STRUCT_MEMBER doesn't want const values. Note that this * variable does not own its pointers, that is, they don't have to * be freed when it goes out of scope. */ GameParams nonconst; GameParams *copy; gint idx; gchar *buff; if (params == NULL) return NULL; memcpy(&nonconst, params, sizeof(GameParams)); copy = params_new(); copy->map = map_copy(params->map); for (idx = 0; idx < G_N_ELEMENTS(game_params); idx++) { Param *param = game_params + idx; switch (param->type) { case PARAM_SINGLE_LINE: case PARAM_MULTIPLE_LINES: G_STRUCT_MEMBER(gchar *, copy, param->offset) = g_strdup(G_STRUCT_MEMBER (gchar *, &nonconst, param->offset)); break; case PARAM_INT: G_STRUCT_MEMBER(gint, copy, param->offset) = G_STRUCT_MEMBER(gint, &nonconst, param->offset); break; case PARAM_BOOL: G_STRUCT_MEMBER(gboolean, copy, param->offset) = G_STRUCT_MEMBER(gboolean, &nonconst, param->offset); break; case PARAM_INTLIST: buff = format_int_list("", G_STRUCT_MEMBER(GArray *, &nonconst, param-> offset)); if (buff != NULL) { G_STRUCT_MEMBER(GArray *, copy, param->offset) = build_int_list(buff); g_free(buff); } break; case PARAM_OBSOLETE_DATA: /* Obsolete rule: do nothing */ break; } } copy->quit_when_done = params->quit_when_done; copy->tournament_time = params->tournament_time; return copy; } static void append_to_string(gpointer base, const gchar * additional_text) { gchar **b = base; gchar *old = *b; if (*b == NULL) { *b = g_strdup(additional_text); } else { *b = g_strdup_printf("%s\n%s", old, additional_text); } g_free(old); } gboolean params_is_equal(const GameParams * params1, const GameParams * params2) { gint idx; gchar *buff1; gchar *buff2; gboolean is_different; /* Compare the map */ if (params1->map->y_size != params2->map->y_size) { return FALSE; }; for (idx = 0; idx < params1->map->y_size; idx++) { buff1 = map_format_line(params1->map, TRUE, idx); buff2 = map_format_line(params2->map, TRUE, idx); is_different = g_strcmp0(buff1, buff2) != 0; g_free(buff1); g_free(buff2); if (is_different) { return FALSE; } } buff1 = format_int_list("", params1->map->chits); buff2 = format_int_list("", params2->map->chits); is_different = g_strcmp0(buff1, buff2) != 0; g_free(buff1); g_free(buff2); if (is_different) { return FALSE; } struct nosetup_t tmp; buff1 = NULL; tmp.user_data = &buff1; tmp.func = append_to_string; map_traverse_const(params1->map, find_no_setup, &tmp); buff2 = NULL; tmp.user_data = &buff2; map_traverse_const(params2->map, find_no_setup, &tmp); is_different = g_strcmp0(buff1, buff2) != 0; g_free(buff1); g_free(buff2); if (is_different) { return FALSE; } /* Compare the game parameters */ /* Copy the const parameter to a non-const version, because * G_STRUCT_MEMBER doesn't want const values. Note that this * variable does not own its pointers, that is, they don't have to * be freed when it goes out of scope. */ GameParams nonconst1; GameParams nonconst2; memcpy(&nonconst1, params1, sizeof(GameParams)); memcpy(&nonconst2, params2, sizeof(GameParams)); for (idx = 0; idx < G_N_ELEMENTS(game_params); idx++) { const Param *param = game_params + idx; switch (param->type) { case PARAM_SINGLE_LINE: case PARAM_MULTIPLE_LINES: if (g_strcmp0 (G_STRUCT_MEMBER (gchar *, &nonconst1, param->offset), G_STRUCT_MEMBER(gchar *, &nonconst2, param->offset)) != 0) { return FALSE; } break; case PARAM_INT: if (G_STRUCT_MEMBER (gint, &nonconst1, param->offset) != G_STRUCT_MEMBER(gint, &nonconst2, param->offset)) { return FALSE; } break; case PARAM_BOOL: if (G_STRUCT_MEMBER (gboolean, &nonconst1, param->offset) != G_STRUCT_MEMBER(gboolean, &nonconst2, param->offset)) { return FALSE; } break; case PARAM_INTLIST: buff1 = format_int_list("", G_STRUCT_MEMBER(GArray *, &nonconst1, param-> offset)); buff2 = format_int_list("", G_STRUCT_MEMBER(GArray *, &nonconst2, param->offset)); is_different = g_strcmp0(buff1, buff2) != 0; g_free(buff1); g_free(buff2); if (is_different) { return FALSE; } break; case PARAM_OBSOLETE_DATA: /* Obsolete rule: do nothing */ break; } } return TRUE; } /** Returns TRUE if the params are valid */ gboolean params_load_finish(GameParams * params) { if (!params->map) { g_warning("Missing map"); return FALSE; } if (params->parsing_map) { g_warning("Map not complete. Missing . after the map?"); return FALSE; } if (!params->map->chits) { g_warning("No chits defined"); return FALSE; } if (params->map->chits->len < 1) { g_warning("At least one chit must be defined"); return FALSE; } if (!params->title) { g_warning("Game has no title"); return FALSE; } params->map->have_bridges = params->num_build_type[BUILD_BRIDGE] > 0; params->map->has_pirate = params->use_pirate; return TRUE; } static void write_one_line(gpointer user_data, const gchar * line) { FILE *fp = user_data; fprintf(fp, "%s\n", line); } gboolean params_write_file(GameParams * params, const gchar * fname) { FILE *fp; if ((fp = fopen(fname, "w")) == NULL) { g_warning("could not open '%s'", fname); return FALSE; } params_write_lines(params, LATEST_VERSION, TRUE, write_one_line, fp); fclose(fp); return TRUE; } ClientVersionType client_version_type_from_string(const gchar * cvt) { if (!strcmp(cvt, "0.10")) { return V0_10; } else if (!strcmp(cvt, "0.11")) { return V0_11; } else if (!strcmp(cvt, "0.12")) { return V0_12; } else if (!strcmp(cvt, "14")) { return V14; } else { return UNKNOWN_VERSION; } } gboolean can_client_connect_to_server(ClientVersionType client_version, ClientVersionType server_version) { if (client_version == UNKNOWN_VERSION) { return FALSE; } else if (server_version == UNKNOWN_VERSION) { return FALSE; } else if (client_version > server_version) { /* By design the server must be the newest */ return FALSE; } else if (client_version == server_version) { return TRUE; } else { /* In compatibility mode */ /* If somehow the backwards compatibility needs to be broken, this function should return FALSE here */ return TRUE; } } WinnableState params_check_winnable_state(const GameParams * params, gchar ** win_message, gchar ** point_specification) { gint target, building, development; gint road, army; gint idx; WinnableState return_value; gint total_island, max_island; guint number_of_islands; if (params == NULL) { *win_message = g_strdup("Error: no GameParams provided"); *point_specification = g_strdup(""); return PARAMS_NO_WIN; } /* Check whether the game is winnable at all */ target = params->victory_points; building = params->num_build_type[BUILD_SETTLEMENT] + (params->num_build_type[BUILD_SETTLEMENT] > 0 ? params->num_build_type[BUILD_CITY] * 2 : 0); road = (params->num_build_type[BUILD_ROAD] + params->num_build_type[BUILD_SHIP] + params->num_build_type[BUILD_BRIDGE]) >= 5 ? 2 : 0; army = params->num_develop_type[DEVEL_SOLDIER] >= 3 ? 2 : 0; development = 0; for (idx = 0; idx < NUM_DEVEL_TYPES; idx++) { if (is_victory_card(idx)) development += params->num_develop_type[idx]; } number_of_islands = map_count_islands(params->map); if (number_of_islands == 0) { *win_message = g_strdup(_("This game cannot be won.")); *point_specification = g_strdup(_("There is no land.")); return PARAMS_NO_WIN; } /* It is not guaranteed that the islands can be reached */ total_island = 0; max_island = 0; if (params->island_discovery_bonus != NULL && params->island_discovery_bonus->len > 0 && (params->num_build_type[BUILD_SHIP] + params->num_build_type[BUILD_BRIDGE] > 0)) { gint i; for (i = 0; i < number_of_islands - 1; i++) { total_island += g_array_index(params->island_discovery_bonus, gint, MIN (params-> island_discovery_bonus->len - 1, i)); /* The island score can be negative */ if (max_island < total_island) max_island = total_island; } } if (target > building) { if (target > building + development + road + army + max_island) { *win_message = g_strdup(_("This game cannot be won.")); return_value = PARAMS_NO_WIN; } else { *win_message = g_strdup(_("" "It is possible that this " "game cannot be won.")); return_value = PARAMS_WIN_PERHAPS; } } else { *win_message = g_strdup(_("This game can be won by only " "building all settlements and " "cities.")); return_value = PARAMS_WIN_BUILD_ALL; } *point_specification = g_strdup_printf(_("" "Required victory points: %d\n" "Points obtained by building all: %d\n" "Points in development cards: %d\n" "Longest road/largest army: %d+%d\n" "Maximum island discovery bonus: %d\n" "Total: %d"), target, building, development, road, army, max_island, building + development + road + army + max_island); return return_value; } PlayerType determine_player_type(const gchar * style) { gchar **style_parts; PlayerType type; if (style == NULL) return PLAYER_UNKNOWN; style_parts = g_strsplit(style, " ", 0); if (!strcmp(style_parts[0], "ai")) { type = PLAYER_COMPUTER; } else if (!strcmp(style_parts[0], "human") || !strcmp(style, default_player_style)) { type = PLAYER_HUMAN; } else { type = PLAYER_UNKNOWN; } g_strfreev(style_parts); return type; } Points *points_new(gint id, const gchar * name, gint points) { Points *p = g_malloc0(sizeof(Points)); p->id = id; p->name = g_strdup(name); p->points = points; return p; } void points_free(Points * points) { g_free(points->name); } /* Not translated, these strings are parts of the communication protocol */ static const gchar *resource_types[] = { "brick", "grain", "ore", "wool", "lumber" }; static gint get_num(const gchar * str, gint * num) { gint len = 0; gboolean is_negative = FALSE; if (*str == '-') { is_negative = TRUE; str++; len++; } *num = 0; while (isdigit(*str)) { *num = *num * 10 + *str++ - '0'; len++; } if (is_negative) *num = -*num; return len; } gint game_scanf(const gchar * line, const gchar * fmt, ...) { va_list ap; gint offset; va_start(ap, fmt); offset = game_vscanf(line, fmt, ap); va_end(ap); return offset; } gint game_vscanf(const gchar * line, const gchar * fmt, va_list ap) { gint offset = 0; while (*fmt != '\0' && line[offset] != '\0') { gchar **str; gint *num; gint idx; gint len; BuildType *build_type; Resource *resource; if (*fmt != '%') { if (line[offset] != *fmt) return -1; fmt++; offset++; continue; } fmt++; switch (*fmt++) { case 'S': /* string from current position to end of line */ str = va_arg(ap, gchar **); *str = g_strdup(line + offset); offset += strlen(*str); break; case 'd': /* integer */ num = va_arg(ap, gint *); len = get_num(line + offset, num); if (len == 0) return -1; offset += len; break; case 'B': /* build type */ build_type = va_arg(ap, BuildType *); if (strncmp(line + offset, "road", 4) == 0) { *build_type = BUILD_ROAD; offset += 4; } else if (strncmp(line + offset, "bridge", 6) == 0) { *build_type = BUILD_BRIDGE; offset += 6; } else if (strncmp(line + offset, "ship", 4) == 0) { *build_type = BUILD_SHIP; offset += 4; } else if (strncmp(line + offset, "settlement", 10) == 0) { *build_type = BUILD_SETTLEMENT; offset += 10; } else if (strncmp(line + offset, "city_wall", 9) == 0) { *build_type = BUILD_CITY_WALL; offset += 9; } else if (strncmp(line + offset, "city", 4) == 0) { *build_type = BUILD_CITY; offset += 4; } else return -1; break; case 'R': /* list of 5 integer resource counts */ num = va_arg(ap, gint *); for (idx = 0; idx < NO_RESOURCE; idx++) { while (line[offset] == ' ') offset++; len = get_num(line + offset, num); if (len == 0) return -1; offset += len; num++; } break; case 'D': /* development card type */ num = va_arg(ap, gint *); len = get_num(line + offset, num); if (len == 0) return -1; offset += len; break; case 'r': /* resource type */ resource = va_arg(ap, Resource *); for (idx = 0; idx < NO_RESOURCE; idx++) { const gchar *type = resource_types[idx]; len = strlen(type); if (strncmp(line + offset, type, len) == 0) { offset += len; *resource = idx; break; } } if (idx == NO_RESOURCE) return -1; break; } } if (*fmt != '\0') return -1; return offset; } #define buff_append(result, format, value) \ do { \ gchar *old = result; \ result = g_strdup_printf("%s" format, result, value); \ g_free(old); \ } while (0) gchar *game_printf(const gchar * fmt, ...) { va_list ap; gchar *result; va_start(ap, fmt); result = game_vprintf(fmt, ap); va_end(ap); return result; } gchar *game_vprintf(const gchar * fmt, va_list ap) { /* initialize result to an allocated empty string */ gchar *result = g_strdup(""); while (*fmt != '\0') { gchar *pos = strchr(fmt, '%'); if (pos == NULL) { buff_append(result, "%s", fmt); break; } /* add format until next % to result */ result = g_realloc(result, strlen(result) + pos - fmt + 1); result[strlen(result) + pos - fmt] = '\0'; memcpy(&result[strlen(result)], fmt, pos - fmt); fmt = pos + 1; switch (*fmt++) { BuildType build_type; const gint *num; gint idx; case 's': /* string */ buff_append(result, "%s", va_arg(ap, gchar *)); break; case 'd': /* integer */ case 'D': /* development card type */ buff_append(result, "%d", va_arg(ap, gint)); break; case 'B': /* build type */ build_type = va_arg(ap, BuildType); switch (build_type) { case BUILD_ROAD: buff_append(result, "%s", "road"); break; case BUILD_BRIDGE: buff_append(result, "%s", "bridge"); break; case BUILD_SHIP: buff_append(result, "%s", "ship"); break; case BUILD_SETTLEMENT: buff_append(result, "%s", "settlement"); break; case BUILD_CITY: buff_append(result, "%s", "city"); break; case BUILD_CITY_WALL: buff_append(result, "%s", "city_wall"); break; case BUILD_NONE: g_error ("BUILD_NONE passed to game_printf"); break; case BUILD_MOVE_SHIP: g_error ("BUILD_MOVE_SHIP passed to game_printf"); break; } break; case 'R': /* list of 5 integer resource counts */ num = va_arg(ap, gint *); for (idx = 0; idx < NO_RESOURCE; idx++) { if (idx > 0) buff_append(result, " %d", num[idx]); else buff_append(result, "%d", num[idx]); } break; case 'r': /* resource type */ buff_append(result, "%s", resource_types[va_arg(ap, Resource)]); break; } } return result; } pioneers-14.1/common/game.h0000644000175000017500000002075211732300744012565 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __game_h #define __game_h #include #include "map.h" #include "driver.h" typedef enum { DEVEL_ROAD_BUILDING, DEVEL_MONOPOLY, DEVEL_YEAR_OF_PLENTY, DEVEL_CHAPEL, DEVEL_UNIVERSITY, DEVEL_GOVERNORS_HOUSE, DEVEL_LIBRARY, DEVEL_MARKET, DEVEL_SOLDIER } DevelType; #define NUM_DEVEL_TYPES (DEVEL_SOLDIER + 1) #define MAX_PLAYERS 8 /* maximum number of players supported */ #define MAX_CHAT 496 /* maximum chat message size * (512 - strlen("player 0 chat \n") - 1) */ #define MAX_NAME_LENGTH 30 /* maximum length for the name of a player */ /* Supported versions. These are ordered, so that it is possible to see * if versions are greater or smaller than each other. The actual values do * not matter and will change when older versions stop being supported. No * part of the program may depend on their exact value, all comparisons must * always be done with the symbols. */ /* Names for the versions are defined in common/game.c, and must be * changed when the enum changes. */ typedef enum { UNKNOWN_VERSION, /** Unknown version */ V0_10, /**< Lowest supported version */ V0_11, /**< City walls, player style, robber undo */ V0_12, /**< Trade protocol simplified */ V14, /**< More rules */ FIRST_VERSION = V0_10, LATEST_VERSION = V14 } ClientVersionType; /** Convert to a ClientVersionType. * @param cvt The text to analyze * @return The version. */ ClientVersionType client_version_type_from_string(const gchar * cvt); /** Will it be possible for a client to connect to a server? * @param client_version The version of the client * @param server_version The version of the server * @return TRUE when the client can connect to the server */ gboolean can_client_connect_to_server(ClientVersionType client_version, ClientVersionType server_version); typedef struct { gchar *title; /* title of the game */ gboolean random_terrain; /* shuffle terrain location? */ gboolean strict_trade; /* trade only before build/buy? */ gboolean domestic_trade; /* player trading allowed? */ gint num_players; /* number of players in the game */ gint sevens_rule; /* what to do when a seven is rolled */ /* 0 = normal, 1 = no 7s on first 2 turns (official rule variant), * 2 = all 7s rerolled */ gint victory_points; /* target number of victory points */ gboolean check_victory_at_end_of_turn; /* check victory only at end of turn */ gint num_build_type[NUM_BUILD_TYPES]; /* number of each build type */ gint resource_count; /* number of each resource */ gint num_develop_type[NUM_DEVEL_TYPES]; /* number of each development */ Map *map; /* the game map */ gboolean parsing_map; /* currently parsing map? *//* Not in game_params[] */ gint tournament_time; /* time to start tournament time in minutes *//* Not in game_params[] */ gboolean quit_when_done; /* server quits after someone wins *//* Not in game_params[] */ gboolean use_pirate; /* is there a pirate in this game? */ GArray *island_discovery_bonus; /* list of VPs for discovering an island */ gchar *comments; /* information regarding the map */ gchar *description; /* description of the map */ } GameParams; typedef struct { gint id; /* identification for client-server communication */ gchar *name; /* name of the item */ gint points; /* number of points */ } Points; typedef enum { PARAMS_WINNABLE, /* the game can be won */ PARAMS_WIN_BUILD_ALL, /* the game can be won by building all */ PARAMS_WIN_PERHAPS, /* the game could be won */ PARAMS_NO_WIN /* the game cannot be won */ } WinnableState; typedef enum { PLAYER_HUMAN, /* the player is a human */ PLAYER_COMPUTER, /* the player is a computer player */ PLAYER_UNKNOWN /* it is unknown who is controlling the player */ } PlayerType; #define NUM_PLAYER_TYPES (PLAYER_UNKNOWN + 1) typedef void (*WriteLineFunc) (gpointer user_data, const gchar *); /** Default style for a player. */ const gchar *default_player_style; GameParams *params_new(void); GameParams *params_copy(const GameParams * params); GameParams *params_load_file(const gchar * fname); gboolean params_is_equal(const GameParams * params1, const GameParams * params2); void params_free(GameParams * params); void params_write_lines(GameParams * params, ClientVersionType version, gboolean write_secrets, WriteLineFunc func, gpointer user_data); gboolean params_write_file(GameParams * params, const gchar * fname); gboolean params_load_line(GameParams * params, gchar * line); gboolean params_load_finish(GameParams * params); gboolean read_line_from_file(gchar ** line, FILE * f); /** Check whether, in theory, the game could be won by a player. * @param params The game parameters * @retval win_message A message describing how/when the game can be won * @retval point_specification A message describing how the points are distributed * @return Whether the game can be won */ WinnableState params_check_winnable_state(const GameParams * params, gchar ** win_message, gchar ** point_specification); /** Determine the type of the player, by analysing the style. */ PlayerType determine_player_type(const gchar * style); Points *points_new(gint id, const gchar * name, gint points); void points_free(Points * points); /* Communication format * * The commands sent to and from the server use the following * format specifiers: * %S - string from current position to end of line * this takes a gchar ** argument, in which an allocated buffer * is returned. It must be freed by the caller. * %d - integer * %B - build type: * 'road' = BUILD_ROAD * 'ship' = BUILD_SHIP * 'bridge' = BUILD_BRIDGE * 'settlement' = BUILD_SETTLEMENT * 'city' = BUILD_CITY * %R - list of 5 integer resource counts: * brick, grain, ore, wool, lumber * %D - development card type: * 0 = DEVEL_ROAD_BUILDING * 1 = DEVEL_MONOPOLY * 2 = DEVEL_YEAR_OF_PLENTY * 3 = DEVEL_CHAPEL * 4 = DEVEL_UNIVERSITY * 5 = DEVEL_GOVERNORS_HOUSE * 6 = DEVEL_LIBRARY * 7 = DEVEL_MARKET * 8 = DEVEL_SOLDIER * %r - resource type: * 'brick' = BRICK_RESOURCE * 'grain' = GRAIN_RESOURCE * 'ore' = ORE_RESOURCE * 'wool' = WOOL_RESOURCE * 'lumber' = LUMBER_RESOURCE */ /** Parse a line. * @param line Line to parse * @param fmt Format of the line, see communication format * @retval ap Result of the parse * @return -1 if the line could not be parsed, otherwise the offset in the line */ gint game_vscanf(const gchar * line, const gchar * fmt, va_list ap); /** Parse a line. * @param line Line to parse * @param fmt Format of the line, see communication format * @return -1 if the line could not be parsed, otherwise the offset in the line */ gint game_scanf(const gchar * line, const gchar * fmt, ...); /** Print a line. * @param fmt Format of the line, see communication format * @param ap Arguments to the format * @return A string (you must use g_free to free the string) */ gchar *game_vprintf(const gchar * fmt, va_list ap); /** Print a line. * @param fmt Format of the line, see communication format * @return A string (you must use g_free to free the string) */ gchar *game_printf(const gchar * fmt, ...); /** Convert a string to an array of integers. * @param str A comma separated list of integers * @return An array of integers. If the array has length zero, NULL is returned. (you must use g_array_free to free the array) */ GArray *build_int_list(const gchar * str); /** Convert an array of integers to a string. * @param name Prefix before the list of integers * @param array Array of integers * @return A string with a comma separated list of integers and name prefixed. (you must use g_free to free the string) */ gchar *format_int_list(const gchar * name, GArray * array); #endif pioneers-14.1/common/log.c0000644000175000017500000001231411575444700012431 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include "log.h" #include "driver.h" /* The default function to use to write messages, when nothing else has been * specified. */ #define LOG_FUNC_DEFAULT log_message_string_console void log_set_func(LogFunc func) { if (func != NULL) driver->log_write = func; else driver->log_write = LOG_FUNC_DEFAULT; } void log_set_func_default(void) { driver->log_write = LOG_FUNC_DEFAULT; } void log_message_string_console(gint msg_type, const gchar * text) { const gchar *prefix = NULL; switch (msg_type) { case MSG_ERROR: /* Log prefix */ prefix = _("*ERROR* "); break; case MSG_INFO: /* Log prefix for info message */ prefix = "- "; break; case MSG_CHAT: /* Log prefix */ prefix = _("Chat: "); break; case MSG_RESOURCE: /* Log prefix */ prefix = _("Resource: "); break; case MSG_BUILD: /* Log prefix */ prefix = _("Build: "); break; case MSG_DICE: /* Log prefix */ prefix = _("Dice: "); break; case MSG_STEAL: /* Log prefix */ prefix = _("Steal: "); break; case MSG_TRADE: /* Log prefix */ prefix = _("Trade: "); break; case MSG_DEVCARD: /* Log prefix */ prefix = _("Development: "); break; case MSG_LARGESTARMY: /* Log prefix */ prefix = _("Army: "); break; case MSG_LONGESTROAD: /* Log prefix */ prefix = _("Road: "); break; case MSG_BEEP: /* Log prefix */ prefix = _("*BEEP* "); break; case MSG_TIMESTAMP: break; /* No prefix */ case MSG_PLAYER1: /* Log prefix */ prefix = _("Player 1: "); break; case MSG_PLAYER2: /* Log prefix */ prefix = _("Player 2: "); break; case MSG_PLAYER3: /* Log prefix */ prefix = _("Player 3: "); break; case MSG_PLAYER4: /* Log prefix */ prefix = _("Player 4: "); break; case MSG_PLAYER5: /* Log prefix */ prefix = _("Player 5: "); break; case MSG_PLAYER6: /* Log prefix */ prefix = _("Player 6: "); break; case MSG_PLAYER7: /* Log prefix */ prefix = _("Player 7: "); break; case MSG_PLAYER8: /* Log prefix */ prefix = _("Player 8: "); break; case MSG_SPECTATOR_CHAT: /* Log prefix */ prefix = _("Spectator: "); break; default: /* Log prefix */ prefix = _("** UNKNOWN MESSAGE TYPE ** "); } if (prefix) fprintf(stderr, "%s%s", prefix, text); else fprintf(stderr, "%s", text); } static const char *debug_type(int type) { switch (type) { case MSG_ERROR: return "ERROR"; case MSG_INFO: return "INFO"; case MSG_CHAT: return "CHAT"; case MSG_RESOURCE: return "RESOURCE"; case MSG_BUILD: return "BUILD"; case MSG_DICE: return "DICE"; case MSG_STEAL: return "STEAL"; case MSG_TRADE: return "TRADE"; case MSG_DEVCARD: return "DEVCARD"; case MSG_LARGESTARMY: return "LARGESTARMY"; case MSG_LONGESTROAD: return "LONGESTROAD"; case MSG_BEEP: return "BEEP"; case MSG_PLAYER1: return "PLAYER1"; case MSG_PLAYER2: return "PLAYER2"; case MSG_PLAYER3: return "PLAYER3"; case MSG_PLAYER4: return "PLAYER4"; case MSG_PLAYER5: return "PLAYER5"; case MSG_PLAYER6: return "PLAYER6"; case MSG_PLAYER7: return "PLAYER7"; case MSG_PLAYER8: return "PLAYER8"; case MSG_SPECTATOR_CHAT: return "SPECTATOR_CHAT"; default: return "*UNKNOWN MESSAGE TYPE*"; } } void log_message_chat(const gchar * player_name, const gchar * joining_text, gint msg_type, const gchar * chat) { if (driver->log_write && driver->log_write != LOG_FUNC_DEFAULT) { log_message(MSG_INFO, "%s%s", player_name, joining_text); debug("[%s] %s", debug_type(msg_type), chat); /* No timestamp here: */ driver->log_write(msg_type, chat); driver->log_write(msg_type, "\n"); } else { log_message(msg_type, "%s%s%s\n", player_name, joining_text, chat); } } void log_message(gint msg_type, const gchar * fmt, ...) { gchar *text; gchar *timestamp; va_list ap; time_t t; struct tm *alpha; va_start(ap, fmt); text = g_strdup_vprintf(fmt, ap); va_end(ap); debug("[%s] %s", debug_type(msg_type), text); t = time(NULL); alpha = localtime(&t); timestamp = g_strdup_printf("%02d:%02d:%02d ", alpha->tm_hour, alpha->tm_min, alpha->tm_sec); if (driver->log_write) { driver->log_write(MSG_TIMESTAMP, timestamp); driver->log_write(msg_type, text); } else { LOG_FUNC_DEFAULT(MSG_TIMESTAMP, timestamp); LOG_FUNC_DEFAULT(msg_type, text); } g_free(text); g_free(timestamp); } pioneers-14.1/common/log.h0000644000175000017500000000475611575444700012451 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __log_h #define __log_h #include #include /** Type of logging functions */ typedef void (*LogFunc) (gint msg_type, const gchar * text); /* Message Types */ #define MSG_ERROR 1 #define MSG_INFO 2 #define MSG_CHAT 3 #define MSG_RESOURCE 4 #define MSG_BUILD 5 #define MSG_DICE 6 #define MSG_STEAL 7 #define MSG_TRADE 8 #define MSG_DEVCARD 9 #define MSG_LARGESTARMY 10 #define MSG_LONGESTROAD 11 #define MSG_BEEP 12 #define MSG_TIMESTAMP 13 #define MSG_PLAYER1 101 #define MSG_PLAYER2 102 #define MSG_PLAYER3 103 #define MSG_PLAYER4 104 #define MSG_PLAYER5 105 #define MSG_PLAYER6 106 #define MSG_PLAYER7 107 #define MSG_PLAYER8 108 #define MSG_SPECTATOR_CHAT 199 /** Set the logging function to 'func'. */ void log_set_func(LogFunc func); /** Set the logging function to the system default (stderr) */ void log_set_func_default(void); /** Write a message string to the console, adding a prefix depending on * its type. */ void log_message_string_console(gint msg_type, const gchar * text); /** Log a message after turning the params into a single string. */ void log_message(gint msg_type, const gchar * fmt, ...); /** Log a chat message. * When the log function is not the default, only the chat is shown * with msg_type, the other parts are shown with MSG_INFO. * This means that player_name and joining_text are shown black, * and the chat is in the colour of the player. */ void log_message_chat(const gchar * player_name, const gchar * joining_text, gint msg_type, const gchar * chat); #endif /* __log_h */ pioneers-14.1/common/map.c0000644000175000017500000010500311737237453012430 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2011 Micah Bunting * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include "game.h" #include "map.h" /* The numbering of the hexes, nodes and edges: * * /\ /\ * /1\/0 \ / 0\/1\ * / \1 0\ /0 1/ \ * /2 1\ 1/\ /\1 /2 1\ * / \/1 0 0\/ \ * /2 0\1 2 2/2 0\ * | |---| | * | | 0 | | * |3 0|1 0|3 0| * | | 1 | | * | |---| | * \3 5/1 0 0\3 5/ * /\ /\1 2 2/\ / * /1\/0 \4 5/ 0\/1\/0 \4 5/ * / \1 0\ /0 1/ \1 0\ / * /2 1\ 1/\4/\1 /2 1\ 1/\4/ * / \/1 0 0\/ \/ * /2 0\1 2 2/2 0\ * | |---| | * | | 0 | | * |3 0|1 0|3 0| * | | 1 | | * | |---| | * \3 5/1 0 0\3 5/ * \ /\1 2 2/\ / * \4 5/ 0\/ \/0 \4 5/ * \ /1 0/ \1 0\ / * \4/\1 / \ 1/\4/ * \/ \/ */ /* The accessor functions: * /\ * * / \ * * / \ * * / \ * * / \ * * | | * * | | * * | cc_ | * * | hex | * * | | * * \ / * * /\ /\ * * / \ / \ * * /\/ cc_\ /op_ \/\ * /\ /\/\ /\ * / \edge/\4/\edge/ \ * / \ / \ / \ * / 1\ 5/2 1 0\3 / \ * / \ / cc_ \ / \ * / \/ node \/ \ * / \/ node \/ \ * / \3 4 5/ \ * / \ 4 / \ * | 0|-----|2 | * | 0|------| | * | hex | 1 | cw_ | * | hex | 1 | op_ | * | 0| cw_ | hex | * | 0|3edge0|3 hex | * | | edge| | * | | 4 | | * | |-----| | * | 5|------| | * \ / \ / * \ / 1 \ / * \ / \ / * \ /\ cw_ /\ / * \ / \ / * \ / \ node / \ / * \ / \ / * \ / \ / \ / * \/ \/ * \/ \/\/ \/ * */ /* Function of shrink_left and shrink_right: * * / \ / \ / \ / \ / \ / \ * | A | B | | A | B | | B | | B | * \ / \ / \ \ / \ / / \ / \ / \ / * | C | D | | C | | C | D | | C | * \ / \ / \ / \ / \ / \ / * 2 2 F F 2 2 F T 2 2 T F 2 2 T T * * The numbers below the map are: * x_size, y_size, shrink_left, shrink_right */ static Hex *move_hex(Hex * hex, HexDirection direction); static Node *get_node(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex->nodes[dir]; } static void set_node(Hex * hex, int dir, Node * node) { g_assert(hex != NULL && dir < 6 && dir >= 0); hex->nodes[dir] = node; } static Hex *get_cc_hex(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex_in_direction(hex, (dir + 1) % 6); } static Node *get_cc_hex_node(Hex * hex, int dir) { g_assert(get_cc_hex(hex, dir) != NULL); return get_cc_hex(hex, dir)->nodes[(dir + 4) % 6]; } static Hex *get_cw_hex(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex_in_direction(hex, dir); } static Node *get_cw_hex_node(Hex * hex, int dir) { g_assert(get_cw_hex(hex, dir) != NULL); return get_cw_hex(hex, dir)->nodes[(dir + 2) % 6]; } static void set_node_hex(Hex * hex, int dir, Hex * new_hex) { g_assert(get_node(hex, dir) != NULL); get_node(hex, dir)->hexes[(dir + 3) / 2 % 3] = new_hex; } static void set_node_cc_edge(Hex * hex, int dir, Edge * edge) { g_assert(get_node(hex, dir) != NULL); get_node(hex, dir)->edges[(dir + 2) / 2 % 3] = edge; } static void set_node_cw_edge(Hex * hex, int dir, Edge * edge) { g_assert(get_node(hex, dir) != NULL); get_node(hex, dir)->edges[(dir + 4) / 2 % 3] = edge; } static Edge *get_cc_edge(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex->edges[(dir + 1) % 6]; } static Edge *get_cw_edge(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex->edges[dir]; } static Edge *get_edge(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex->edges[dir]; } static void set_edge(Hex * hex, int dir, Edge * edge) { g_assert(hex != NULL && dir < 6 && dir >= 0); hex->edges[dir] = edge; } static Hex *get_op_hex(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex_in_direction(hex, dir); } static Edge *get_op_hex_edge(Hex * hex, int dir) { g_assert(get_op_hex(hex, dir) != NULL); return get_op_hex(hex, dir)->edges[(dir + 3) % 6]; } static Node *get_cc_node(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex->nodes[dir]; } static void set_cc_node_edge(Hex * hex, int dir, Edge * edge) { g_assert(get_cc_node(hex, dir) != NULL); get_cc_node(hex, dir)->edges[(dir + 4) / 2 % 3] = edge; } static Node *get_cw_node(Hex * hex, int dir) { g_assert(hex != NULL && dir < 6 && dir >= 0); return hex->nodes[(dir + 5) % 6]; } static void set_cw_node_edge(Hex * hex, int dir, Edge * edge) { g_assert(get_cw_node(hex, dir) != NULL); get_cw_node(hex, dir)->edges[(dir + 1) / 2 % 3] = edge; } static void set_edge_cc_node(Hex * hex, int dir, Node * node) { g_assert(get_edge(hex, dir) != NULL); get_edge(hex, dir)->nodes[(dir + 1) / 3 % 2] = node; } static void set_edge_cw_node(Hex * hex, int dir, Node * node) { g_assert(get_edge(hex, dir) != NULL); get_edge(hex, dir)->nodes[(dir + 4) / 3 % 2] = node; } static void set_edge_hex(Hex * hex, int dir, Hex * new_hex) { g_assert(get_edge(hex, dir) != NULL); get_edge(hex, dir)->hexes[(dir + 3) / 3 % 2] = new_hex; } GRand *g_rand_ctx = NULL; Hex *map_hex(Map * map, gint x, gint y) { if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size) return NULL; return map->grid[y][x]; } const Hex *map_hex_const(const Map * map, gint x, gint y) { if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size) return NULL; return map->grid[y][x]; } /** Returns the hex in the given direction, or NULL */ Hex *hex_in_direction(const Hex * hex, HexDirection direction) { gint x = hex->x; gint y = hex->y; map_move_in_direction(direction, &x, &y); return map_hex(hex->map, x, y); } /** Move the hex coordinate in the given direction. * @param direction Move in this direction * @retval x x-coordinate of the hex to move * @retval y y-coordinate of the hex to move */ void map_move_in_direction(HexDirection direction, gint * x, gint * y) { switch (direction) { case HEX_DIR_E: (*x)++; break; case HEX_DIR_NE: if (*y % 2 == 1) (*x)++; (*y)--; break; case HEX_DIR_NW: if (*y % 2 == 0) (*x)--; (*y)--; break; case HEX_DIR_W: (*x)--; break; case HEX_DIR_SW: if (*y % 2 == 0) (*x)--; (*y)++; break; case HEX_DIR_SE: if (*y % 2 == 1) (*x)++; (*y)++; break; } } Node *map_node(Map * map, gint x, gint y, gint pos) { Hex *hex; if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size || pos < 0 || pos >= 6) return NULL; hex = map->grid[y][x]; if (hex == NULL) return NULL; return hex->nodes[pos]; } const Node *map_node_const(const Map * map, gint x, gint y, gint pos) { const Hex *hex; if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size || pos < 0 || pos >= 6) return NULL; hex = map->grid[y][x]; if (hex == NULL) return NULL; return hex->nodes[pos]; } Edge *map_edge(Map * map, gint x, gint y, gint pos) { Hex *hex; if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size || pos < 0 || pos >= 6) return NULL; hex = map->grid[y][x]; if (hex == NULL) return NULL; return hex->edges[pos]; } const Edge *map_edge_const(const Map * map, gint x, gint y, gint pos) { const Hex *hex; if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size || pos < 0 || pos >= 6) return NULL; hex = map->grid[y][x]; if (hex == NULL) return NULL; return hex->edges[pos]; } /** Traverse the map and perform processing at a each node. * * If the callback function returns TRUE, stop traversal immediately * and return TRUE to caller, */ gboolean map_traverse(Map * map, HexFunc func, gpointer closure) { gint x; for (x = 0; x < map->x_size; x++) { gint y; for (y = 0; y < map->y_size; y++) { Hex *hex; hex = map->grid[y][x]; if (hex != NULL && func(hex, closure)) return TRUE; } } return FALSE; } /** Traverse the map and perform processing at a each node. * The map is unmodified. * * If the callback function returns TRUE, stop traversal immediately * and return TRUE to caller, */ gboolean map_traverse_const(const Map * map, ConstHexFunc func, gpointer closure) { gint x; for (x = 0; x < map->x_size; x++) { gint y; for (y = 0; y < map->y_size; y++) { const Hex *hex; hex = map->grid[y][x]; if (hex != NULL && func(hex, closure)) return TRUE; } } return FALSE; } /* To expand the grid to a network, we build a chain of nodes and * edges around the current node. Before allocating a new node or * edge, we must check if the node or edge has already been created by * processing an adjacent hex. * * Each node has three adjacent hexes, so we must check two other * hexes to see if the node has already been created. Once we have * found or created the node for a specific position, we must attach * this hex to a specific position on that node. * * Each edge has only two adjacent hexes, so we check the other hex to * see if the edge exists before creating it. */ /* Build ring of nodes and edges around the current hex */ static gboolean build_network(Hex * hex, G_GNUC_UNUSED gpointer closure) { gint idx; for (idx = 0; idx < 6; idx++) { Node *node = NULL; Edge *edge = NULL; if (get_cc_hex(hex, idx) != NULL) node = get_cc_hex_node(hex, idx); if (node == NULL && get_cw_hex(hex, idx) != NULL) node = get_cw_hex_node(hex, idx); if (node == NULL) { node = g_malloc0(sizeof(*node)); node->map = hex->map; node->owner = -1; node->x = hex->x; node->y = hex->y; node->pos = idx; } set_node(hex, idx, node); set_node_hex(hex, idx, hex); if (get_op_hex(hex, idx) != NULL) edge = get_op_hex_edge(hex, idx); if (edge == NULL) { edge = g_malloc0(sizeof(*edge)); edge->map = hex->map; edge->owner = -1; edge->x = hex->x; edge->y = hex->y; edge->pos = idx; } set_edge(hex, idx, edge); set_edge_hex(hex, idx, hex); } return FALSE; } /* Connect all of the adjacent nodes and edges to each other. * * A node connects to three edges, but we only bother connecting the * edges that are adjacent to this hex. Once the entire grid of hexes * has been processed, all nodes (which require them) will have three * edges. */ /* Connect the the ring of nodes and edges to each other */ static gboolean connect_network(Hex * hex, G_GNUC_UNUSED gpointer closure) { gint idx; for (idx = 0; idx < 6; idx++) { /* Connect current edge to adjacent nodes */ set_edge_cc_node(hex, idx, get_cc_node(hex, idx)); set_edge_cw_node(hex, idx, get_cw_node(hex, idx)); /* Connect current node to adjacent edges */ set_node_cc_edge(hex, idx, get_cc_edge(hex, idx)); set_node_cw_edge(hex, idx, get_cw_edge(hex, idx)); } return FALSE; } /* Layout the dice chits on the map according to the order specified. * When laying out the chits, we do not place one on the desert hex. * The maps only specify the layout sequence. When loading the map, * the program when performs the layout, skipping the desert hex. * * By making the program perform the layout, we have the ability to * shuffle the terrain hexes and then lay the chits out accounting for * the new position of the desert. * Returns TRUE if the chits could be distributed without errors */ static gboolean layout_chits(Map * map) { Hex **hexes; gint num_chits; gint x, y; gint idx; gint chit_idx; gint num_deserts; g_return_val_if_fail(map != NULL, FALSE); g_return_val_if_fail(map->chits != NULL, FALSE); g_return_val_if_fail(map->chits->len > 0, FALSE); /* Count the number of hexes that have chits on them */ num_chits = 0; num_deserts = 0; for (x = 0; x < map->x_size; x++) for (y = 0; y < map->y_size; y++) { Hex *hex = map->grid[y][x]; if (hex != NULL && hex->chit_pos >= num_chits) num_chits = hex->chit_pos + 1; if (hex != NULL && hex->terrain == DESERT_TERRAIN) num_deserts++; } /* Traverse the map and build an array of hexes in chit layout * sequence. */ hexes = g_malloc0(num_chits * sizeof(*hexes)); for (x = 0; x < map->x_size; x++) for (y = 0; y < map->y_size; y++) { Hex *hex = map->grid[y][x]; if (hex == NULL || hex->chit_pos < 0) continue; if (hexes[hex->chit_pos] != NULL) { g_warning("Sequence number %d used again", hex->chit_pos); return FALSE; } hexes[hex->chit_pos] = hex; } /* Check the number of chits */ if (num_chits < map->chits->len + num_deserts) { g_warning("More chits (%d + %d) than available tiles (%d)", map->chits->len, num_deserts, num_chits); return FALSE; } /* If less chits are defined than tiles that need chits, * the sequence is used again */ /* Now layout the chits in the sequence specified, skipping * the desert hex. */ chit_idx = 0; for (idx = 0; idx < num_chits; idx++) { Hex *hex = hexes[idx]; if (hex == NULL) continue; if (hex->terrain == DESERT_TERRAIN) { /* Robber always starts in the desert */ hex->roll = 0; if (map->robber_hex == NULL) { hex->robber = TRUE; map->robber_hex = hex; } } else { hex->robber = FALSE; hex->roll = g_array_index(map->chits, gint, chit_idx); chit_idx++; if (chit_idx == map->chits->len) chit_idx = 0; } } g_free(hexes); return TRUE; } /* Randomise a map. We do this by shuffling all of the land hexes, * and randomly reassigning port types. This is the procedure * described in the board game rules. */ void map_shuffle_terrain(Map * map) { gint terrain_count[LAST_TERRAIN]; gint port_count[ANY_RESOURCE + 1]; gint x, y; gint num_terrain; gint num_port; /* Remove robber, because the desert will probably move. * It will be restored by layout_chits. */ if (map->robber_hex) { map->robber_hex->robber = FALSE; map->robber_hex = NULL; } /* Count number of each terrain type */ memset(terrain_count, 0, sizeof(terrain_count)); memset(port_count, 0, sizeof(port_count)); num_terrain = num_port = 0; for (x = 0; x < map->x_size; x++) { for (y = 0; y < map->y_size; y++) { Hex *hex = map->grid[y][x]; if (hex == NULL || hex->shuffle == FALSE) continue; if (hex->terrain == SEA_TERRAIN) { if (hex->resource == NO_RESOURCE) continue; port_count[hex->resource]++; num_port++; } else { terrain_count[hex->terrain]++; num_terrain++; } } } /* Shuffle the terrain / port types */ for (x = 0; x < map->x_size; x++) { for (y = 0; y < map->y_size; y++) { Hex *hex = map->grid[y][x]; gint num; gint idx; if (hex == NULL || hex->shuffle == FALSE) continue; if (hex->terrain == SEA_TERRAIN) { if (hex->resource == NO_RESOURCE) continue; num = g_rand_int_range(g_rand_ctx, 0, num_port); for (idx = 0; idx < G_N_ELEMENTS(port_count); idx++) { num -= port_count[idx]; if (num < 0) break; } port_count[idx]--; num_port--; hex->resource = idx; } else { num = g_rand_int_range(g_rand_ctx, 0, num_terrain); for (idx = 0; idx < G_N_ELEMENTS(terrain_count); idx++) { num -= terrain_count[idx]; if (num < 0) break; } terrain_count[idx]--; num_terrain--; hex->terrain = idx; } } } /* Fix the chits - the desert probably moved */ layout_chits(map); } Hex *map_robber_hex(Map * map) { return map->robber_hex; } Hex *map_pirate_hex(Map * map) { return map->pirate_hex; } void map_move_robber(Map * map, gint x, gint y) { if (map->robber_hex != NULL) map->robber_hex->robber = FALSE; map->robber_hex = map_hex(map, x, y); if (map->robber_hex != NULL) map->robber_hex->robber = TRUE; } void map_move_pirate(Map * map, gint x, gint y) { map->pirate_hex = map_hex(map, x, y); } /* Allocate a new map */ Map *map_new(void) { return g_malloc0(sizeof(Map)); } static Hex *hex_new(Map * map, gint x, gint y) { Hex *hex; g_assert(map != NULL); g_assert(x >= 0); g_assert(x < map->x_size); g_assert(y >= 0); g_assert(y < map->y_size); g_assert(map->grid[y][x] == NULL); hex = g_malloc0(sizeof(*hex)); map->grid[y][x] = hex; hex->map = map; hex->x = x; hex->y = y; build_network(hex, NULL); connect_network(hex, NULL); return hex; } /** Copy a hex. * @param map The new owner * @param hex The original hex * @return A copy of the original hex, with the new owner. * The copy is not connected (nodes and edges are NULL) */ static Hex *copy_hex(Map * map, const Hex * hex) { Hex *copy; if (hex == NULL) return NULL; copy = g_malloc0(sizeof(*copy)); copy->map = map; copy->y = hex->y; copy->x = hex->x; copy->terrain = hex->terrain; copy->resource = hex->resource; copy->facing = hex->facing; copy->chit_pos = hex->chit_pos; copy->roll = hex->roll; copy->robber = hex->robber; copy->shuffle = hex->shuffle; return copy; } static gboolean set_nosetup_nodes(const Hex * hex, gpointer closure) { gint idx; Map *copy = closure; for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); ++idx) { const Node *node = hex->nodes[idx]; /* only handle nodes which are owned by the hex, to * prevent doing every node three times */ if (hex->x != node->x || hex->y != node->y) continue; g_assert(map_node(copy, node->x, node->y, node->pos) != NULL); map_node(copy, node->x, node->y, node->pos)->no_setup = node->no_setup; } return FALSE; } static GArray *copy_int_list(GArray * array) { GArray *copy; int idx; if (array == NULL) { return NULL; } copy = g_array_new(FALSE, FALSE, sizeof(gint)); for (idx = 0; idx < array->len; idx++) g_array_append_val(copy, g_array_index(array, gint, idx)); return copy; } /* Make a copy of an existing map */ Map *map_copy(const Map * map) { Map *copy = map_new(); int x, y; copy->y = map->y; copy->x_size = map->x_size; copy->y_size = map->y_size; for (y = 0; y < MAP_SIZE; y++) for (x = 0; x < MAP_SIZE; x++) copy->grid[y][x] = copy_hex(copy, map->grid[y][x]); map_traverse(copy, build_network, NULL); map_traverse(copy, connect_network, NULL); map_traverse_const(map, set_nosetup_nodes, copy); if (map->robber_hex == NULL) copy->robber_hex = NULL; else copy->robber_hex = copy->grid[map->robber_hex->y][map->robber_hex->x]; if (map->pirate_hex == NULL) copy->pirate_hex = NULL; else copy->pirate_hex = copy->grid[map->pirate_hex->y][map->pirate_hex->x]; copy->shrink_left = map->shrink_left; copy->shrink_right = map->shrink_right; copy->has_moved_ship = map->has_moved_ship; copy->have_bridges = map->have_bridges; copy->has_pirate = map->has_pirate; copy->shrink_left = map->shrink_left; copy->shrink_right = map->shrink_right; copy->chits = copy_int_list(map->chits); return copy; } /* Maps are sent from the server to the client a line at a time. This * routine formats a line of a map for just that purpose. * It returns an allocated buffer, which must be freed by the caller. */ gchar *map_format_line(Map * map, gboolean write_secrets, gint y) { gchar *line = NULL; gchar buffer[20]; /* Buffer for the info about one hex */ gint x; for (x = 0; x < map->x_size; x++) { gchar *bufferpos = buffer; Hex *hex = map->grid[y][x]; if (x > 0) *bufferpos++ = ','; if (hex == NULL) { *bufferpos++ = '-'; } else { switch (hex->terrain) { case HILL_TERRAIN: *bufferpos++ = 'h'; break; case FIELD_TERRAIN: *bufferpos++ = 'f'; break; case MOUNTAIN_TERRAIN: *bufferpos++ = 'm'; break; case PASTURE_TERRAIN: *bufferpos++ = 'p'; break; case FOREST_TERRAIN: *bufferpos++ = 't'; /* tree */ break; case DESERT_TERRAIN: *bufferpos++ = 'd'; break; case GOLD_TERRAIN: *bufferpos++ = 'g'; break; case SEA_TERRAIN: *bufferpos++ = 's'; if (hex == map->pirate_hex) *bufferpos++ = 'R'; if (hex->resource == NO_RESOURCE) break; switch (hex->resource) { case BRICK_RESOURCE: *bufferpos++ = 'b'; break; case GRAIN_RESOURCE: *bufferpos++ = 'g'; break; case ORE_RESOURCE: *bufferpos++ = 'o'; break; case WOOL_RESOURCE: *bufferpos++ = 'w'; break; case LUMBER_RESOURCE: *bufferpos++ = 'l'; break; case ANY_RESOURCE: *bufferpos++ = '?'; break; case NO_RESOURCE: break; case GOLD_RESOURCE: g_assert_not_reached(); } *bufferpos++ = hex->facing + '0'; break; case LAST_TERRAIN: *bufferpos++ = '-'; break; default: g_assert_not_reached(); break; } if (hex->chit_pos >= 0) { sprintf(bufferpos, "%d", hex->chit_pos); bufferpos += strlen(bufferpos); } if (write_secrets && !hex->shuffle) { *bufferpos++ = '+'; } } *bufferpos = '\0'; if (line) { gchar *old = line; line = g_strdup_printf("%s%s", line, buffer); g_free(old); } else { line = g_strdup(buffer); } } return line; } /* Read a map line into the grid */ gboolean map_parse_line(Map * map, const gchar * line) { gint x = 0; for (;;) { Hex *hex; switch (*line++) { case '\0': case '\n': map->y++; return TRUE; case '-': x++; continue; case ',': case ' ': case '\t': continue; } if (x >= MAP_SIZE || map->y >= MAP_SIZE) continue; --line; hex = g_malloc0(sizeof(*hex)); hex->map = map; hex->y = map->y; hex->x = x; hex->terrain = SEA_TERRAIN; hex->resource = NO_RESOURCE; hex->facing = 0; hex->chit_pos = -1; hex->shuffle = TRUE; switch (*line++) { case 's': /* sea */ hex->terrain = SEA_TERRAIN; if (*line == 'R') { ++line; map->pirate_hex = hex; map->has_pirate = TRUE; } switch (*line++) { case 'b': hex->resource = BRICK_RESOURCE; break; case 'g': hex->resource = GRAIN_RESOURCE; break; case 'o': hex->resource = ORE_RESOURCE; break; case 'w': hex->resource = WOOL_RESOURCE; break; case 'l': hex->resource = LUMBER_RESOURCE; break; case 'm': /* mine */ hex->resource = GOLD_RESOURCE; break; case '?': hex->resource = ANY_RESOURCE; break; default: hex->resource = NO_RESOURCE; --line; break; } hex->facing = 0; if (hex->resource != NO_RESOURCE) { if (isdigit(*line)) hex->facing = *line++ - '0'; } break; case 't': /* tree */ hex->terrain = FOREST_TERRAIN; break; case 'p': hex->terrain = PASTURE_TERRAIN; break; case 'f': hex->terrain = FIELD_TERRAIN; break; case 'h': hex->terrain = HILL_TERRAIN; break; case 'm': hex->terrain = MOUNTAIN_TERRAIN; break; case 'd': hex->terrain = DESERT_TERRAIN; break; case 'g': hex->terrain = GOLD_TERRAIN; break; default: g_free(hex); continue; } /* Read the chit sequence number */ if (isdigit(*line)) { hex->chit_pos = 0; while (isdigit(*line)) hex->chit_pos = hex->chit_pos * 10 + *line++ - '0'; } /* Check if hex can be randomly shuffled */ if (*line == '+') { hex->shuffle = FALSE; line++; } if (hex->chit_pos < 0 && hex->terrain != SEA_TERRAIN) { g_warning ("Land tile without chit sequence number"); return FALSE; } map->grid[map->y][x] = hex; if (x >= map->x_size) map->x_size = x + 1; if (map->y >= map->y_size) map->y_size = map->y + 1; x++; } return TRUE; } /* Finalise the map loading by building a network of nodes, edges and * hexes. Since every second row of hexes is offset, we might be able * to shrink the left / right margins depending on the distribution of * hexes. * Returns true if the map could be finalised. */ gboolean map_parse_finish(Map * map) { gint y; gboolean success; success = layout_chits(map); map_traverse(map, build_network, NULL); map_traverse(map, connect_network, NULL); map->shrink_left = TRUE; map->shrink_right = TRUE; for (y = 0; y < map->y_size; y += 2) if (map->grid[y][0] != NULL) { map->shrink_left = FALSE; break; } for (y = 1; y < map->y_size; y += 2) if (map->grid[y][map->x_size - 1] != NULL) { map->shrink_right = FALSE; break; } return success; } /** Free a hex. * Disconnect the hex from the grid. */ static void hex_free(Hex * hex) { g_assert(hex != NULL); gint idx; /* Transfer ownership of edges to adjacent hexes. */ for (idx = 0; idx < 6; idx++) { Edge *edge = get_edge(hex, idx); g_assert(edge != NULL); if (edge->pos == idx) { /* if edge owned by hex */ if (get_op_hex(hex, idx) != NULL) { /* change owner */ edge->x = get_op_hex(hex, idx)->x; edge->y = get_op_hex(hex, idx)->y; edge->pos = (edge->pos + 3) % 6; } else { set_cc_node_edge(hex, idx, NULL); set_cw_node_edge(hex, idx, NULL); g_free(edge); continue; } } set_edge_hex(hex, idx, NULL); } /* Transfer ownership of nodes to adjacent hexes. */ for (idx = 0; idx < 6; idx++) { Node *node = get_node(hex, idx); g_assert(node != NULL); if (node->pos == idx) { if (get_cc_hex(hex, idx) != NULL) { /* change owner */ node->x = get_cc_hex(hex, idx)->x; node->y = get_cc_hex(hex, idx)->y; node->pos = (node->pos + 4) % 6; } else if (get_cw_hex(hex, idx) != NULL) { /* change owner */ node->x = get_cw_hex(hex, idx)->x; node->y = get_cw_hex(hex, idx)->y; node->pos = (node->pos + 2) % 6; } else { g_free(node); continue; } } set_node_hex(hex, idx, NULL); } /* Remove from the grid */ if (hex->map->grid[hex->y][hex->x] == hex) hex->map->grid[hex->y][hex->x] = NULL; g_free(hex); } static gboolean free_hex(Hex * hex, G_GNUC_UNUSED gpointer closure) { hex_free(hex); return FALSE; } /* Free a map */ void map_free(Map * map) { if (map == NULL) { return; } map_traverse(map, free_hex, NULL); if (map->chits != NULL) { g_array_free(map->chits, TRUE); } g_free(map); } void map_reset_hex(Map * map, gint x, gint y) { Hex *hex; Hex *adjacent; int i; if (x < 0 || x >= map->x_size || y < 0 || y >= map->y_size) { g_assert_not_reached(); return; } hex = map_hex(map, x, y); if (!hex) { /* Create a new hex on the previously empty place */ hex = hex_new(map, x, y); } g_return_if_fail(hex != NULL); hex->terrain = LAST_TERRAIN; hex->resource = NO_RESOURCE; hex->chit_pos = -1; hex->roll = 0; hex->shuffle = TRUE; /* Clear any ports that face this hex */ for (i = 0; i < 6; i++) { adjacent = hex_in_direction(hex, i); if (adjacent != NULL && adjacent->terrain == SEA_TERRAIN && adjacent->resource != NO_RESOURCE && adjacent->facing == (i + 3) % 6) { adjacent->resource = NO_RESOURCE; adjacent->facing = 0; }; }; } void map_modify_row_count(Map * map, MapModify type, MapModifyRowLocation location) { gint x; gint y; gint max; gint min; Hex *shift_hex; if (type == MAP_MODIFY_INSERT && location == MAP_MODIFY_ROW_TOP) { /* Shift the map to the right, if needed */ map->shrink_left = !map->shrink_left; if (map->shrink_left) { map->x_size++; for (y = 0; y < map->y_size; y++) { shift_hex = map->grid[y][0]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_E); }; }; }; map->y_size++; /* Move all except the top row */ min = map->shrink_right ? 2 : 1; for (y = min; y < map->y_size - 1; y += 2) { shift_hex = map->grid[y][map->x_size - 1]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_SW); }; }; /* Move the top row */ min = 1; max = map->x_size; for (x = min; x < max; x++) { shift_hex = map->grid[0][x]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_SW); }; }; /* Remove column, if needed */ if (map->shrink_right) { map->x_size--; } map->shrink_right = !map->shrink_right; /* Create the new hexes */ min = map->shrink_left ? 1 : 0; max = map->x_size; for (x = min; x < max; x++) { map_reset_hex(map, x, 0); }; } else if (type == MAP_MODIFY_INSERT && location == MAP_MODIFY_ROW_BOTTOM) { map->y_size++; if (map->y_size % 2 == 0) { min = 0; max = map->shrink_right ? map->x_size - 1 : map->x_size; } else { min = map->shrink_left ? 1 : 0; max = map->x_size; }; for (x = min; x < max; x++) { map_reset_hex(map, x, map->y_size - 1); }; } else if (type == MAP_MODIFY_REMOVE && location == MAP_MODIFY_ROW_TOP) { /* Remove the top row */ min = map->shrink_left ? 1 : 0; max = map->x_size; for (x = min; x < max; x++) { map_reset_hex(map, x, 0); hex_free(map->grid[0][x]); }; /* Shift the map to the right, if needed */ map->shrink_left = !map->shrink_left; if (map->shrink_left) { map->x_size++; for (y = 1; y < map->y_size; y++) { shift_hex = map->grid[y][0]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_E); }; }; }; /* Move all except the bottom row */ min = map->shrink_right ? 2 : 1; for (y = min; y < map->y_size - 1; y += 2) { shift_hex = map->grid[y][map->x_size - 1]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_NW); }; }; /* Move the bottom row */ if (map->y_size % 2 == 0) { min = 0; max = map->shrink_right ? map->x_size - 1 : map->x_size; } else { min = map->shrink_left ? 1 : 0; max = map->x_size; }; for (x = min; x < max; x++) { shift_hex = map->grid[map->y_size - 1][x]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_NW); }; }; /* Remove column, if needed */ if (map->shrink_right) { map->x_size--; }; map->shrink_right = !map->shrink_right; map->y_size--; } else { if (map->y_size % 2 == 0) { min = 0; max = map->shrink_right ? map->x_size - 1 : map->x_size; } else { min = map->shrink_left ? 1 : 0; max = map->x_size; }; for (x = min; x < max; x++) { map_reset_hex(map, x, map->y_size - 1); hex_free(map->grid[map->y_size - 1][x]); }; map->y_size--; } } void map_modify_column_count(Map * map, MapModify type, MapModifyColumnLocation location) { gint x; gint y; Hex *shift_hex; if (type == MAP_MODIFY_INSERT && location == MAP_MODIFY_COLUMN_LEFT) { map->shrink_left = !map->shrink_left; if (map->shrink_left) { map->x_size++; for (y = 0; y < map->y_size; y++) { shift_hex = map->grid[y][0]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_E); }; }; }; for (y = map->shrink_left ? 1 : 0; y < map->y_size; y += 2) { map_reset_hex(map, 0, y); }; } else if (type == MAP_MODIFY_INSERT && location == MAP_MODIFY_COLUMN_RIGHT) { if (map->shrink_right) { y = 1; } else { y = 0; map->x_size++; }; x = map->x_size - 1; while (y < map->y_size) { map_reset_hex(map, x, y); y += 2; }; map->shrink_right = !map->shrink_right; } else if (type == MAP_MODIFY_REMOVE && location == MAP_MODIFY_COLUMN_LEFT) { /* Clear the hexes */ for (y = map->shrink_left ? 1 : 0; y < map->y_size; y += 2) { map_reset_hex(map, 0, y); hex_free(map->grid[y][0]); }; if (map->shrink_left) { /* The map was already shrunk, so move all to the left */ for (y = 0; y < map->y_size; y++) { x = (map->shrink_right && y % 2 == 1) ? map->x_size - 2 : map->x_size - 1; shift_hex = map->grid[y][x]; while (shift_hex != NULL) { shift_hex = move_hex(shift_hex, HEX_DIR_W); }; }; map->x_size--; }; map->shrink_left = !map->shrink_left; } else { x = map->x_size - 1; for (y = map->shrink_right ? 0 : 1; y < map->y_size; y += 2) { map_reset_hex(map, x, y); hex_free(map->grid[y][x]); }; if (map->shrink_right) { map->x_size--; }; map->shrink_right = !map->shrink_right; } } /** Move a hex in the given direction. * This function must be called for all hexes on the grid, * it cannot be use for single hexes. * All related edges and nodes are moved too. * @param hex Hex to move. * @param direction Direction to move the hex to. * @return The hex that was at the pointed position. */ static Hex *move_hex(Hex * hex, HexDirection direction) { if (hex->map->grid[hex->y][hex->x] == hex) { hex->map->grid[hex->y][hex->x] = NULL; }; switch (direction) { case HEX_DIR_E: hex->x++; break; case HEX_DIR_NE: if (hex->y % 2 == 1) { hex->x++; }; hex->y--; break; case HEX_DIR_NW: if (hex->y % 2 == 0) { hex->x--; }; hex->y--; break; case HEX_DIR_W: hex->x--; break; case HEX_DIR_SW: if (hex->y % 2 == 0) { hex->x--; }; hex->y++; break; case HEX_DIR_SE: if (hex->y % 2 == 1) { hex->x++; }; hex->y++; break; } Hex *ret_hex = map_hex(hex->map, hex->x, hex->y); hex->map->grid[hex->y][hex->x] = hex; int idx; for (idx = 0; idx < 6; idx++) { Edge *edge = hex->edges[idx]; if (edge != NULL && edge->pos == idx) { edge->x = hex->x; edge->y = hex->y; }; Node *node = hex->nodes[idx]; if (node != NULL && node->pos == idx) { node->x = hex->x; node->y = hex->y; }; }; return ret_hex; } pioneers-14.1/common/map.h0000644000175000017500000002356511572454067012450 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2011 Micah Bunting * Copyright (C) 2011 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __map_h #define __map_h #include /* The order of the Terrain enums is EXTREMELY important! The order * must match the resources indicated in enum Resource. */ typedef enum { HILL_TERRAIN, FIELD_TERRAIN, MOUNTAIN_TERRAIN, PASTURE_TERRAIN, FOREST_TERRAIN, DESERT_TERRAIN, SEA_TERRAIN, GOLD_TERRAIN, LAST_TERRAIN /* New terrain types go before this */ } Terrain; /* The order of the Resource enums up to NO_RESOURCE is EXTREMELY important! * The numbers are used to index arrays in cost_*(), and to identify * resource accumulators in player statistics. The NO_RESOURCE marks * the end of the actual resources. */ typedef enum { BRICK_RESOURCE, GRAIN_RESOURCE, ORE_RESOURCE, WOOL_RESOURCE, LUMBER_RESOURCE, NO_RESOURCE, /* All normal producing resources go before this */ ANY_RESOURCE, /* Used for 3:1 ports */ GOLD_RESOURCE /* Gold */ } Resource; /* Types of structure that can be built */ typedef enum { BUILD_NONE, /* vacant node/edge */ BUILD_ROAD, /* road was built */ BUILD_BRIDGE, /* bridge was built */ BUILD_SHIP, /* ship was built */ BUILD_SETTLEMENT, /* settlement was built */ BUILD_CITY, /* city was built */ BUILD_CITY_WALL, /* city wall was built */ BUILD_MOVE_SHIP /* a ship was moved (only used for undo list) */ } BuildType; #define NUM_BUILD_TYPES (BUILD_CITY_WALL + 1) /* Maps are built up from a network of hexes, edges, and nodes. * * Each hex has connections to six edges, and six nodes. Each node * connects to three hexes and three edges, and each edge connects to * two hexes and two nodes. */ typedef struct _Node Node; typedef struct _Edge Edge; typedef struct _Hex Hex; typedef struct _Map Map; struct _Hex { Map *map; /* owner map */ gint x; /* x-pos on grid */ gint y; /* y-pos on grid */ Node *nodes[6]; /* adjacent nodes */ Edge *edges[6]; /* adjacent edges */ Terrain terrain; /* type of terrain for this hex */ Resource resource; /* resource at this port */ gint facing; /* direction port is facing */ gint chit_pos; /* position in chit layout sequence */ gint roll; /* 2..12 number allocated to hex */ gboolean robber; /* is the robber here */ gboolean shuffle; /* can the hex be shuffled? */ }; struct _Node { Map *map; /* owner map */ gint x; /* x-pos of owner hex */ gint y; /* y-pos of owner hex */ gint pos; /* location of node on hex */ Hex *hexes[3]; /* adjacent hexes */ Edge *edges[3]; /* adjacent edges */ gint owner; /* building owner, -1 == no building */ BuildType type; /* type of node (if owner defined) */ gboolean visited; /* used for longest road */ gboolean no_setup; /* setup is not allowed on this node */ gboolean city_wall; /* has city wall */ }; struct _Edge { Map *map; /* owner map */ gint x; /* x-pos of owner hex */ gint y; /* y-pos of owner hex */ gint pos; /* location of edge on hex */ Hex *hexes[2]; /* adjacent hexes */ Node *nodes[2]; /* adjacent nodes */ gint owner; /* road owner, -1 == no road */ BuildType type; /* type of edge (if owner defined) */ gboolean visited; /* used for longest road */ }; /* All of the hexes are stored in a 2 dimensional array laid out as * shown in map.c */ #define MAP_SIZE 32 /* maximum map dimension */ struct _Map { gint y; /* current y-pos during parse */ gboolean have_bridges; /* are bridges legal on map? */ gboolean has_pirate; /* is the pirate allowed in this game? */ gint x_size; /* number of hexes across map */ gint y_size; /* number of hexes down map */ Hex *grid[MAP_SIZE][MAP_SIZE]; /* hexes arranged onto a grid */ Hex *robber_hex; /* which hex is the robber on */ Hex *pirate_hex; /* which hex is the pirate on */ gboolean has_moved_ship; /* has the player moved a ship already? */ gboolean shrink_left; /* shrink left x-margin? */ gboolean shrink_right; /* shrink right x-margin? */ GArray *chits; /* chit number sequence */ }; typedef struct { gint owner; gboolean any_resource; gboolean specific_resource[NO_RESOURCE]; } MaritimeInfo; typedef enum { HEX_DIR_E, HEX_DIR_NE, HEX_DIR_NW, HEX_DIR_W, HEX_DIR_SW, HEX_DIR_SE } HexDirection; /* map.c */ Hex *map_hex(Map * map, gint x, gint y); const Hex *map_hex_const(const Map * map, gint x, gint y); Hex *hex_in_direction(const Hex * hex, HexDirection direction); void map_move_in_direction(HexDirection direction, gint * x, gint * y); Edge *map_edge(Map * map, gint x, gint y, gint pos); const Edge *map_edge_const(const Map * map, gint x, gint y, gint pos); Node *map_node(Map * map, gint x, gint y, gint pos); const Node *map_node_const(const Map * map, gint x, gint y, gint pos); typedef gboolean(*HexFunc) (Hex * hex, gpointer closure); gboolean map_traverse(Map * map, HexFunc func, gpointer closure); typedef gboolean(*ConstHexFunc) (const Hex * hex, gpointer closure); gboolean map_traverse_const(const Map * map, ConstHexFunc func, gpointer closure); void map_shuffle_terrain(Map * map); Hex *map_robber_hex(Map * map); Hex *map_pirate_hex(Map * map); void map_move_robber(Map * map, gint x, gint y); void map_move_pirate(Map * map, gint x, gint y); Map *map_new(void); Map *map_copy(const Map * map); gchar *map_format_line(Map * map, gboolean write_secrets, gint y); gboolean map_parse_line(Map * map, const gchar * line); gboolean map_parse_finish(Map * map); void map_free(Map * map); typedef enum { MAP_MODIFY_INSERT, MAP_MODIFY_REMOVE } MapModify; typedef enum { MAP_MODIFY_ROW_TOP, MAP_MODIFY_ROW_BOTTOM } MapModifyRowLocation; typedef enum { MAP_MODIFY_COLUMN_LEFT, MAP_MODIFY_COLUMN_RIGHT } MapModifyColumnLocation; /** Modify the amount of rows. * @param map The map to modify. * @param type Insert or delete. * @param location At the top or the bottom. */ void map_modify_row_count(Map * map, MapModify type, MapModifyRowLocation location); /** Modify the amount of columns. * @param map The map to modify. * @param type Insert or delete. * @param location At left or right. */ void map_modify_column_count(Map * map, MapModify type, MapModifyColumnLocation location); /** Reset the hex to the default values. * @param map The map to modify. * @param x X coordinate. * @param y Y coordinate. */ void map_reset_hex(Map * map, gint x, gint y); /* map_query.c */ /* simple checks */ gboolean is_edge_adjacent_to_node(const Edge * edge, const Node * node); gboolean is_edge_on_land(const Edge * edge); gboolean is_edge_on_sea(const Edge * edge); gboolean is_node_on_land(const Node * node); gboolean node_has_road_owned_by(const Node * node, gint owner); gboolean node_has_ship_owned_by(const Node * node, gint owner); gboolean node_has_bridge_owned_by(const Node * node, gint owner); gboolean is_node_spacing_ok(const Node * node); gboolean is_node_proximity_ok(const Node * node); gboolean is_node_next_to_robber(const Node * node); /* cursor checks */ gboolean can_road_be_setup(const Edge * edge); gboolean can_road_be_built(const Edge * edge, gint owner); gboolean can_ship_be_setup(const Edge * edge); gboolean can_ship_be_built(const Edge * edge, gint owner); gboolean can_ship_be_moved(const Edge * edge, gint owner); gboolean can_bridge_be_setup(const Edge * edge); gboolean can_bridge_be_built(const Edge * edge, gint owner); gboolean can_settlement_be_setup(const Node * node); gboolean can_settlement_be_built(const Node * node, gint owner); gboolean can_settlement_be_upgraded(const Node * node, gint owner); gboolean can_city_be_built(const Node * node, int owner); gboolean can_city_wall_be_built(const Node * node, int owner); gboolean can_robber_or_pirate_be_moved(const Hex * hex); /* map global queries */ gboolean map_can_place_road(const Map * map, gint owner); gboolean map_can_place_ship(const Map * map, gint owner); gboolean map_can_place_bridge(const Map * map, gint owner); gboolean map_can_place_settlement(const Map * map, gint owner); gboolean map_can_place_city_wall(const Map * map, gint owner); gboolean map_can_upgrade_settlement(const Map * map, gint owner); gboolean map_building_spacing_ok(Map * map, gint owner, BuildType type, gint x, gint y, gint pos); gboolean map_building_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos); gboolean map_building_vacant(Map * map, BuildType type, gint x, gint y, gint pos); gboolean map_road_vacant(Map * map, gint x, gint y, gint pos); gboolean map_road_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos); gboolean map_ship_vacant(Map * map, gint x, gint y, gint pos); gboolean map_ship_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos); gboolean map_bridge_vacant(Map * map, gint x, gint y, gint pos); gboolean map_bridge_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos); /* information gathering */ void map_longest_road(Map * map, gint * lengths, gint num_players); gboolean map_is_island_discovered(Map * map, Node * node, gint owner); void map_maritime_info(const Map * map, MaritimeInfo * info, gint owner); guint map_count_islands(const Map * map); extern GRand *g_rand_ctx; #endif pioneers-14.1/common/map_query.c0000644000175000017500000007706010745450110013651 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003 Bas Wijnen * Copyright (C) 2006 Roland Clobus * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include "game.h" #include "map.h" /* Local function prototypes */ gboolean node_has_edge_owned_by(const Node * node, gint owner, BuildType type); gboolean is_road_valid(const Edge * edge, gint owner); gboolean is_ship_valid(const Edge * edge, gint owner); gboolean is_bridge_valid(const Edge * edge, gint owner); /* This file is broken into a number of sections: * * Simple Checks: * * Most map queries require a number of checks to be performed. The * results of the checks are combined to provide a more complex * answer. * * Cursor Checks: * * When interacting with the user, the GUI needs to establish whether * or not to draw a cursor over a specific edge, node or hex. Cursor * check functions are designed to be passed as the check_func * parameter to the gui_map_set_cursor() function. * * Queries: * * Provides an answer to a specific question about the entire map. */ /* Return whether or not an edge is adjacent to a node */ gboolean is_edge_adjacent_to_node(const Edge * edge, const Node * node) { g_return_val_if_fail(edge != NULL, FALSE); g_return_val_if_fail(node != NULL, FALSE); return edge->nodes[0] == node || edge->nodes[1] == node; } /* Return whether or not an edge is on land or coast */ gboolean is_edge_on_land(const Edge * edge) { gint idx; g_return_val_if_fail(edge != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(edge->hexes); idx++) { Hex *hex = edge->hexes[idx]; if (hex != NULL && hex->terrain != SEA_TERRAIN) return TRUE; } return FALSE; } /* Return whether or not an edge is on sea or coast (used only for ships) */ gboolean is_edge_on_sea(const Edge * edge) { gint idx; g_return_val_if_fail(edge != NULL, FALSE); /* If the pirate is currently next to the edge, then specific sea * actions should not be possible (building ships is the only * specific sea action). */ for (idx = 0; idx < G_N_ELEMENTS(edge->hexes); idx++) { Hex *hex = edge->hexes[idx]; if (hex && edge->map->pirate_hex == hex) return FALSE; } /* The pirate is not next to the edge, return true if there is sea */ for (idx = 0; idx < G_N_ELEMENTS(edge->hexes); idx++) { Hex *hex = edge->hexes[idx]; if (hex != NULL && hex->terrain == SEA_TERRAIN) return TRUE; } /* There is no sea */ return FALSE; } /* Return whether or not a node is on land */ gboolean is_node_on_land(const Node * node) { gint idx; g_return_val_if_fail(node != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(node->hexes); idx++) { Hex *hex = node->hexes[idx]; if (hex != NULL && hex->terrain != SEA_TERRAIN) return TRUE; } return FALSE; } /* Check if a node has a adjacent road/ship/bridge owned by the * specified player */ gboolean node_has_edge_owned_by(const Node * node, gint owner, BuildType type) { gint idx; g_return_val_if_fail(node != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(node->edges); idx++) if (node->edges[idx] != NULL && node->edges[idx]->owner == owner && node->edges[idx]->type == type) return TRUE; return FALSE; } /* Check if a node has a adjacent road owned by the specified player */ gboolean node_has_road_owned_by(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); return node_has_edge_owned_by(node, owner, BUILD_ROAD); } /* Check if a node has a adjacent ship owned by the specified player */ gboolean node_has_ship_owned_by(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); return node_has_edge_owned_by(node, owner, BUILD_SHIP); } /* Check if a node has a adjacent bridge owned by the specified player */ gboolean node_has_bridge_owned_by(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); return node_has_edge_owned_by(node, owner, BUILD_BRIDGE); } /* Check node proximity to other buildings. A building can be * constructed on a node if none of the adjacent nodes have buildings * on them. There is an exception when bridges are being used - two * buildings may be on adjacent nodes if separated by water. */ gboolean is_node_spacing_ok(const Node * node) { gint idx; g_return_val_if_fail(node != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(node->edges); idx++) { Edge *edge = node->edges[idx]; gint idx2; if (edge == NULL) continue; if (node->map->have_bridges && !is_edge_on_land(edge)) continue; else for (idx2 = 0; idx2 < G_N_ELEMENTS(edge->nodes); ++idx2) { Node *scan = edge->nodes[idx2]; if (scan == node) continue; if (scan->type != BUILD_NONE) return FALSE; } } return TRUE; } /* Check if the specified node is next to the hex with the robber */ gboolean is_node_next_to_robber(const Node * node) { gint idx; g_return_val_if_fail(node != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(node->hexes); idx++) if (node->hexes[idx]->robber) return TRUE; return FALSE; } /* Check if a road has been positioned properly */ gboolean is_road_valid(const Edge * edge, gint owner) { gint idx; g_return_val_if_fail(edge != NULL, FALSE); /* Can only build road if edge is adjacent to a land hex */ if (!is_edge_on_land(edge)) return FALSE; /* Road can be build adjacent to building we own, or a road we * own that is not separated by a building owned by someone else */ for (idx = 0; idx < G_N_ELEMENTS(edge->nodes); idx++) { Node *node = edge->nodes[idx]; if (node->owner == owner) return TRUE; if (node->owner >= 0) continue; if (node_has_road_owned_by(node, owner) || node_has_bridge_owned_by(node, owner)) return TRUE; } return FALSE; } /* Check if a ship has been positioned properly */ gboolean is_ship_valid(const Edge * edge, gint owner) { gint idx; g_return_val_if_fail(edge != NULL, FALSE); /* Can only build ship if edge is adjacent to a sea hex */ if (!is_edge_on_sea(edge)) return FALSE; /* Ship can be build adjacent to building we own, or a ship we * own that is not separated by a building owned by someone else */ for (idx = 0; idx < G_N_ELEMENTS(edge->nodes); idx++) { Node *node = edge->nodes[idx]; if (node->owner == owner) return TRUE; if (node->owner >= 0) continue; if (node_has_ship_owned_by(node, owner)) return TRUE; } return FALSE; } /* Check if a bridge has been positioned properly */ gboolean is_bridge_valid(const Edge * edge, gint owner) { gint idx; g_return_val_if_fail(edge != NULL, FALSE); /* Can only build bridge if edge is not on land */ if (is_edge_on_land(edge)) return FALSE; /* Bridge can be build adjacent to building we own, or a road we * own that is not separated by a building owned by someone else */ for (idx = 0; idx < G_N_ELEMENTS(edge->nodes); idx++) { Node *node = edge->nodes[idx]; if (node->owner == owner) return TRUE; if (node->owner >= 0) continue; if (node_has_road_owned_by(node, owner) || node_has_bridge_owned_by(node, owner)) return TRUE; } return FALSE; } /* Returns TRUE if one of the nodes can be used for setup, * or if it already has been used. * A full check (to see if the owner of the road matches the owner * of the settlement) is performed in another function */ static gboolean can_adjacent_settlement_be_built(const Edge * edge) { g_return_val_if_fail(edge != NULL, FALSE); return can_settlement_be_setup(edge->nodes[0]) || can_settlement_be_setup(edge->nodes[1]) || edge->nodes[0]->owner >= 0 || edge->nodes[1]->owner >= 0; } /* Edge cursor check function. * * Determine whether or not a road can be built in this edge by the * specified player during the setup phase. Perform the following checks: * * 1 - Edge must not currently have a road on it. * 2 - Edge must be adjacent to a land hex. * 3 - At least one node must available for a settlement * * The checks are not as strict as for normal play. This allows the * player to try a few different configurations without layout * restrictions. The server will enfore correct placement at the end * of the setup phase. */ gboolean can_road_be_setup(const Edge * edge) { g_return_val_if_fail(edge != NULL, FALSE); return edge->owner < 0 && is_edge_on_land(edge) && can_adjacent_settlement_be_built(edge); } /* Edge cursor check function. * * Determine whether or not a ship can be built in this edge by the * specified player during the setup phase. Perform the following checks: * * 1 - Edge must not currently have a ship on it. * 2 - Edge must be adjacent to a sea hex. * 3 - At least one node must available for a settlement * * The checks are not as strict as for normal play. This allows the * player to try a few different configurations without layout * restrictions. The server will enfore correct placement at the end * of the setup phase. */ gboolean can_ship_be_setup(const Edge * edge) { g_return_val_if_fail(edge != NULL, FALSE); return edge->owner < 0 && is_edge_on_sea(edge) && can_adjacent_settlement_be_built(edge); } /* Edge cursor check function. * * Determine whether or not a bridge can be built in this edge by the * specified player during the setup phase. Perform the following checks: * * 1 - Edge must not currently have a road on it. * 2 - Edge must not be adjacent to a land hex. * 3 - At least one node must available for a settlement * * The checks are not as strict as for normal play. This allows the * player to try a few different configurations without layout * restrictions. The server will enfore correct placement at the end * of the setup phase. */ gboolean can_bridge_be_setup(const Edge * edge) { g_return_val_if_fail(edge != NULL, FALSE); return edge->owner < 0 && !is_edge_on_land(edge) && can_adjacent_settlement_be_built(edge); } /* Edge cursor check function. * * Determine whether or not a road can be built on this edge by the * specified player. Perform the following checks: * * 1 - Edge must not currently have a road on it. * 2 - Edge must be adjacent to a land hex. * 3 - Edge must be adjacent to a building that is owned by the * specified player, or must be adjacent to another road segment * owned by the specifed player, but not separated by a building * owned by a different player. */ gboolean can_road_be_built(const Edge * edge, gint owner) { g_return_val_if_fail(edge != NULL, FALSE); return edge->owner < 0 && is_road_valid(edge, owner); } /* Edge cursor check function. * * Determine whether or not a ship can be built on this edge by the * specified player. Perform the following checks: * * 1 - Edge must not currently have a road or ship on it. * 2 - Edge must be adjacent to a sea hex. * 3 - Edge must be adjacent to a building that is owned by the * specified player, or must be adjacent to another ship segment * owned by the specifed player, but not separated by a building * owned by a different player. */ gboolean can_ship_be_built(const Edge * edge, gint owner) { g_return_val_if_fail(edge != NULL, FALSE); return edge->owner < 0 && is_ship_valid(edge, owner); } /* Helper function for can_ship_be_moved */ static gboolean can_ship_be_moved_node(const Node * node, gint owner, const Edge * not) { gint idx; g_return_val_if_fail(node != NULL, FALSE); g_return_val_if_fail(not != NULL, FALSE); /* if a building of a different player is on it, it is * unconnected */ if (node->type != BUILD_NONE && node->owner != owner) return TRUE; /* if there is a building of the player, it is connected */ if (node->type != BUILD_NONE) return FALSE; /* no buildings: check all edges for ships */ for (idx = 0; idx < G_N_ELEMENTS(node->edges); idx++) { Edge *edge = node->edges[idx]; /* If this is a ship of the player, it is connected */ if (edge && edge->owner == owner && edge != not && edge->type == BUILD_SHIP) return FALSE; } return TRUE; } /* Edge cursor check function. * * Determine whether or not a ship can be moved from this edge by the * specified player. Perform the following checks: * * 1 - Edge must currently have a ship on it. * 2 - On one side, there must be neither a building, nor a ship of the * specified player. A ship is allowed, if there is building of a * different player in between. */ gboolean can_ship_be_moved(const Edge * edge, gint owner) { gint idx; g_return_val_if_fail(edge != NULL, FALSE); /* edge must be a ship of the correct user */ if (edge->owner != owner || edge->type != BUILD_SHIP) return FALSE; /* if the pirate is next to the edge, it is not allowed to move */ if (!is_edge_on_sea(edge)) return FALSE; /* check all nodes, until one is found that is not connected */ for (idx = 0; idx < G_N_ELEMENTS(edge->nodes); idx++) if (can_ship_be_moved_node(edge->nodes[idx], owner, edge)) return TRUE; return FALSE; } /* Edge cursor check function. * * Determine whether or not a bridge can be built on this edge by the * specified player. Perform the following checks: * * 1 - Edge must not currently have a road on it. * 2 - Edge must not be adjacent to a land hex. * 3 - Edge must be adjacent to a building that is owned by the * specified player, or must be adjacent to another road/bridge * segment owned by the specifed player, but not separated by a * building owned by a different player. */ gboolean can_bridge_be_built(const Edge * edge, gint owner) { g_return_val_if_fail(edge != NULL, FALSE); return edge->owner < 0 && is_bridge_valid(edge, owner); } /* Node cursor check function. * * Determine whether or not a settlement can be built on this node by * the specified player during the setup phase. Perform the following * checks: * * 1 - Node must not be in the no-setup list. * 2 - Node must be vacant. * 3 - Node must be adjacent to a land hex. * 4 - Node must not be within one node of another building. * * The checks are not as strict as for normal play. This allows the * player to try a few different configurations without layout * restrictions. The server will enfore correct placement at the end * of the setup phase. */ gboolean can_settlement_be_setup(const Node * node) { g_return_val_if_fail(node != NULL, FALSE); return !node->no_setup && node->owner < 0 && is_node_on_land(node) && is_node_spacing_ok(node); } /* Node cursor check function. * * Determine whether or not a settlement can be built on this node by the * specified player. Perform the following checks: * * 1 - Node must be vacant. * 2 - Node must be adjacent to a road owned by the specified player * 3 - Node must be adjacent to a land hex. * 4 - Node must not be within one node of another building. */ gboolean can_settlement_be_built(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); return node->owner < 0 && (node_has_road_owned_by(node, owner) || node_has_ship_owned_by(node, owner) || node_has_bridge_owned_by(node, owner)) && is_node_on_land(node) && is_node_spacing_ok(node); } /* Node cursor check function. * * Determine whether or not a settlement can be upgraded to a city by * the specified player. */ gboolean can_settlement_be_upgraded(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); return node->owner == owner && node->type == BUILD_SETTLEMENT; } /* Node cursor check function. * * Determine whether or not a city can be built on this node by the * specified player. Perform the following checks: * * 1 - Node must either be vacant, or have settlement owned by the * specified player on it. * 2 - If vacant, node must be adjacent to a road owned by the * specified player * 3 - If vacant, node must be adjacent to a land hex. * 4 - If vacent, node must not be within one node of another * building. */ gboolean can_city_be_built(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); if (can_settlement_be_upgraded(node, owner)) return TRUE; return node->owner < 0 && (node_has_road_owned_by(node, owner) || node_has_ship_owned_by(node, owner) || node_has_bridge_owned_by(node, owner)) && is_node_on_land(node) && is_node_spacing_ok(node); } /* Node cursor check function. * * Determine whether or not a city wall can be built by * the specified player. */ gboolean can_city_wall_be_built(const Node * node, gint owner) { g_return_val_if_fail(node != NULL, FALSE); return node->owner == owner && node->type == BUILD_CITY && !node->city_wall; } /* Hex cursor check function. * * Determine whether or not the robber be moved to the specified hex. * * Can only move the robber to hex which produces resources (roll > * 0). We cannot move the robber to the same hex it is already on. * Also check if pirate can be moved. */ gboolean can_robber_or_pirate_be_moved(const Hex * hex) { g_return_val_if_fail(hex != NULL, FALSE); if (hex->terrain == SEA_TERRAIN) return (hex->map->has_pirate) && (hex != hex->map->pirate_hex); else return (hex->roll > 0) && (!hex->robber); } /* Iterator function for map_can_place_road() query */ static gboolean can_place_road_check(const Hex * hex, void *closure) { gint idx; gint *owner = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(owner != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) if (can_road_be_built(hex->edges[idx], *owner)) return TRUE; return FALSE; } /* Iterator function for map_can_place_ship() query */ static gboolean can_place_ship_check(const Hex * hex, void *closure) { gint idx; gint *owner = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(owner != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) if (can_ship_be_built(hex->edges[idx], *owner)) return TRUE; return FALSE; } /* Iterator function for map_can_place_bridge() query */ static gboolean can_place_bridge_check(const Hex * hex, void *closure) { gint idx; gint *owner = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(owner != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) if (can_bridge_be_built(hex->edges[idx], *owner)) return TRUE; return FALSE; } /* Query. * * Determine if there are any edges on the map where a player can * place a road. */ gboolean map_can_place_road(const Map * map, gint owner) { g_return_val_if_fail(map != NULL, FALSE); return map_traverse_const(map, can_place_road_check, &owner); } /* Query. * * Determine if there are any edges on the map where a player can * place a ship. */ gboolean map_can_place_ship(const Map * map, gint owner) { g_return_val_if_fail(map != NULL, FALSE); return map_traverse_const(map, can_place_ship_check, &owner); } /* Query. * * Determine if there are any edges on the map where a player can * place a bridge. */ gboolean map_can_place_bridge(const Map * map, gint owner) { g_return_val_if_fail(map != NULL, FALSE); return map_traverse_const(map, can_place_bridge_check, &owner); } /* Iterator function for map_can_place_settlement() query */ static gboolean can_place_settlement_check(const Hex * hex, void *closure) { gint idx; gint *owner = (gint *) closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(owner != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) if (can_settlement_be_built(hex->nodes[idx], *owner)) return TRUE; return FALSE; } /* Query. * * Determine if there are any nodes on the map where a player can * place a settlement */ gboolean map_can_place_settlement(const Map * map, gint owner) { g_return_val_if_fail(map != NULL, FALSE); return map_traverse_const(map, can_place_settlement_check, &owner); } /* Iterator function for map_can_upgrade_settlement() query */ static gboolean can_upgrade_settlement_check(const Hex * hex, void *closure) { gint idx; gint *owner = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(owner != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) if (can_settlement_be_upgraded(hex->nodes[idx], *owner)) return TRUE; return FALSE; } /* Query. * * Determine if there are any nodes on the map where a player can * upgrade a settlement */ gboolean map_can_upgrade_settlement(const Map * map, gint owner) { g_return_val_if_fail(map != NULL, FALSE); return map_traverse_const(map, can_upgrade_settlement_check, &owner); } /* Iterator function for map_can_place_city_wall() query */ static gboolean can_place_city_wall_check(const Hex * hex, void *closure) { gint idx; gint *owner = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(owner != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) if (can_city_wall_be_built(hex->nodes[idx], *owner)) return TRUE; return FALSE; } /* Query. * * Determine if there are any nodes on the map where a player can * place a settlement */ gboolean map_can_place_city_wall(const Map * map, gint owner) { g_return_val_if_fail(map != NULL, FALSE); return map_traverse_const(map, can_place_city_wall_check, &owner); } /* Ignoring road connectivity, decide whether or not a settlement/city * can be placed at the specified location. */ gboolean map_building_spacing_ok(Map * map, gint owner, BuildType type, gint x, gint y, gint pos) { Node *node; g_return_val_if_fail(map != NULL, FALSE); node = map_node(map, x, y, pos); if (node == NULL) return FALSE; if (node->type == BUILD_NONE) /* Node is vacant. Make sure that all adjacent nodes * are also vacant */ return is_node_spacing_ok(node); /* Node is not vacant, make sure I am the current owner, and I * am trying to upgrade a settlement to a city. */ return node->owner == owner && node->type == BUILD_SETTLEMENT && type == BUILD_CITY; } /* Ignoring building spacing, check if the building connects to a road. */ gboolean map_building_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos) { const Node *node; g_return_val_if_fail(map != NULL, FALSE); node = map_node_const(map, x, y, pos); if (node == NULL) return FALSE; return node_has_road_owned_by(node, owner) || node_has_ship_owned_by(node, owner) || node_has_bridge_owned_by(node, owner); } gboolean map_building_vacant(Map * map, BuildType type, gint x, gint y, gint pos) { Node *node; g_return_val_if_fail(map != NULL, FALSE); node = map_node(map, x, y, pos); if (node == NULL) return FALSE; switch (type) { case BUILD_NONE: case BUILD_SETTLEMENT: return node->type == BUILD_NONE; case BUILD_CITY: return node->type == BUILD_NONE || node->type == BUILD_SETTLEMENT; case BUILD_ROAD: case BUILD_SHIP: case BUILD_MOVE_SHIP: case BUILD_BRIDGE: g_error("map_building_vacant() called with edge"); return FALSE; case BUILD_CITY_WALL: g_error("map_building_vacant() called with city wall"); return FALSE; } return FALSE; } gboolean map_road_vacant(Map * map, gint x, gint y, gint pos) { Edge *edge; g_return_val_if_fail(map != NULL, FALSE); edge = map_edge(map, x, y, pos); return edge != NULL && edge->owner < 0; } gboolean map_ship_vacant(Map * map, gint x, gint y, gint pos) { Edge *edge; g_return_val_if_fail(map != NULL, FALSE); edge = map_edge(map, x, y, pos); return edge != NULL && edge->owner < 0; } gboolean map_bridge_vacant(Map * map, gint x, gint y, gint pos) { Edge *edge; g_return_val_if_fail(map != NULL, FALSE); edge = map_edge(map, x, y, pos); return edge != NULL && edge->owner < 0; } /* Ignoring whether or not a road already exists at this point, check * that it has the right connectivity. */ gboolean map_road_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos) { const Edge *edge; g_return_val_if_fail(map != NULL, FALSE); edge = map_edge_const(map, x, y, pos); if (edge == NULL) return FALSE; return is_road_valid(edge, owner); } /* Ignoring whether or not a ship already exists at this point, check * that it has the right connectivity. */ gboolean map_ship_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos) { const Edge *edge; g_return_val_if_fail(map != NULL, FALSE); edge = map_edge_const(map, x, y, pos); if (edge == NULL) return FALSE; return is_ship_valid(edge, owner); } /* Ignoring whether or not a bridge already exists at this point, check * that it has the right connectivity. */ gboolean map_bridge_connect_ok(const Map * map, gint owner, gint x, gint y, gint pos) { const Edge *edge; g_return_val_if_fail(map != NULL, FALSE); edge = map_edge_const(map, x, y, pos); if (edge == NULL) return FALSE; return is_bridge_valid(edge, owner); } static BuildType bridge_as_road(BuildType type) { if (type == BUILD_BRIDGE) return BUILD_ROAD; else return type; } /* calculate the longest road */ static gint find_longest_road_recursive(Edge * edge) { gint len = 0; gint nodeidx, edgeidx; g_return_val_if_fail(edge != NULL, 0); edge->visited = TRUE; /* check all nodes to see which one make the longer road. */ for (nodeidx = 0; nodeidx < G_N_ELEMENTS(edge->nodes); nodeidx++) { Node *node = edge->nodes[nodeidx]; /* don't go back to where we came from */ if (node->visited) continue; /* don't continue counting if someone else's building is on * the node. */ if (node->type != BUILD_NONE && node->owner != edge->owner) continue; /* don't let other go back here */ node->visited = TRUE; /* try all edges */ for (edgeidx = 0; edgeidx < G_N_ELEMENTS(node->edges); edgeidx++) { Edge *here = node->edges[edgeidx]; if (here && !here->visited && here->owner == edge->owner) { /* don't allow ships to extend roads, except * if there is a construction in between */ /* bridges are treated as roads */ if (node->type != BUILD_NONE || bridge_as_road(here->type) == bridge_as_road(edge->type)) { gint thislen = find_longest_road_recursive (here); /* take the maximum of all paths */ if (thislen > len) len = thislen; } } } /* Allow other roads to use this node again. */ node->visited = FALSE; } edge->visited = FALSE; return len + 1; } static gboolean find_longest_road(Hex * hex, gpointer closure) { gint idx; gint *lengths = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(lengths != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) { Edge *edge = hex->edges[idx]; gint len; /* skip unowned edges, and edges that will be handled by * other hexes */ if (edge->owner < 0 || edge->x != hex->x || edge->y != hex->y) continue; len = find_longest_road_recursive(edge); if (len > lengths[edge->owner]) lengths[edge->owner] = len; } return FALSE; } /* Zero the visited attribute for all edges and nodes. */ static gboolean zero_visited(Hex * hex, G_GNUC_UNUSED gpointer closure) { gint idx; g_return_val_if_fail(hex != NULL, FALSE); for (idx = 0; idx < G_N_ELEMENTS(hex->edges); idx++) { Edge *edge = hex->edges[idx]; edge->visited = FALSE; } for (idx = 0; idx < G_N_ELEMENTS(hex->nodes); idx++) { Node *node = hex->nodes[idx]; node->visited = FALSE; } return FALSE; } /* Finding the longest road: * 1 - set the visited attribute of all edges and nodes to FALSE * 2 - for every edge, find the longest road using this one as a tail */ void map_longest_road(Map * map, gint * lengths, gint num_players) { g_return_if_fail(map != NULL); g_return_if_fail(lengths != NULL); map_traverse(map, zero_visited, NULL); memset(lengths, 0, num_players * sizeof(*lengths)); map_traverse(map, find_longest_road, lengths); } static gboolean map_island_recursive(Map * map, Node * node, gint owner) { gint idx; gboolean discovered; g_return_val_if_fail(map != NULL, FALSE); if (node == NULL) return FALSE; if (node->owner == owner) return TRUE; /* Already discovered */ if (node->visited) return FALSE; /* Not discovered */ node->visited = TRUE; discovered = FALSE; for (idx = 0; idx < G_N_ELEMENTS(node->edges) && !discovered; idx++) { gint num_sea; gint idx2; Edge *edge = node->edges[idx]; if (edge == NULL) continue; if (edge->visited) continue; edge->visited = TRUE; /* If the edge points into the sea, or along the border, * don't follow it */ num_sea = 0; for (idx2 = 0; idx2 < G_N_ELEMENTS(edge->hexes); idx2++) { const Hex *hex = edge->hexes[idx2]; if (hex == NULL) { num_sea++; continue; } if (hex->terrain == SEA_TERRAIN) num_sea++; } if (num_sea == G_N_ELEMENTS(edge->hexes)) continue; /* Follow the other node */ for (idx2 = 0; idx2 < G_N_ELEMENTS(edge->nodes) && !discovered; ++idx2) { Node *node2 = edge->nodes[idx2]; if (node == node2) continue; discovered |= map_island_recursive(map, node2, owner); } } return discovered; } /* Has anything be built by this player on this island */ gboolean map_is_island_discovered(Map * map, Node * node, gint owner) { g_return_val_if_fail(map != NULL, FALSE); g_return_val_if_fail(node != NULL, FALSE); map_traverse(map, zero_visited, NULL); return map_island_recursive(map, node, owner); } /* Determine the maritime trading capabilities for the specified player */ static gboolean find_maritime(const Hex * hex, gpointer closure) { MaritimeInfo *info = closure; g_return_val_if_fail(hex != NULL, FALSE); g_return_val_if_fail(info != NULL, FALSE); if (hex->terrain != SEA_TERRAIN || hex->resource == NO_RESOURCE) return FALSE; if (hex->nodes[hex->facing]->owner != info->owner && hex->nodes[(hex->facing + 5) % 6]->owner != info->owner) return FALSE; if (hex->resource == ANY_RESOURCE) info->any_resource = TRUE; else info->specific_resource[hex->resource] = TRUE; return FALSE; } /* Determine the maritime trading capacity of the specified player */ void map_maritime_info(const Map * map, MaritimeInfo * info, gint owner) { g_return_if_fail(map != NULL); g_return_if_fail(info != NULL); memset(info, 0, sizeof(*info)); info->owner = owner; map_traverse_const(map, find_maritime, info); } typedef struct { gboolean visited[MAP_SIZE][MAP_SIZE]; guint count; guint recursion_level; } IslandCount; static gboolean count_islands(const Hex * hex, gpointer info) { IslandCount *count = info; HexDirection direction; if (hex == NULL) return FALSE; g_return_val_if_fail(hex->map != NULL, FALSE); if (count->visited[hex->y][hex->x]) return FALSE; if (hex->terrain == SEA_TERRAIN) return FALSE; count->visited[hex->y][hex->x] = TRUE; count->recursion_level++; for (direction = 0; direction < 6; direction++) { count_islands(hex_in_direction(hex, direction), count); } count->recursion_level--; if (count->recursion_level == 0) count->count++; return FALSE; } guint map_count_islands(const Map * map) { IslandCount island_count; g_return_val_if_fail(map != NULL, 0u); memset(island_count.visited, 0, sizeof(island_count.visited)); island_count.count = 0; island_count.recursion_level = 0; map_traverse_const(map, count_islands, &island_count); return island_count.count; } pioneers-14.1/common/network.c0000644000175000017500000005213611760640517013347 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * Copyright (C) 2005-2009 Roland Clobus * Copyright (C) 2005 Keishi Suenaga * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #ifdef HAVE_WS2TCPIP_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETDB_H #include #endif #include #include #ifdef HAVE_NETINET_IN_H #include #endif #ifndef HAVE_GETADDRINFO_ET_AL #include /* For atoi */ #endif /* ndef HAVE_GETADDRINFO_ET_AL */ #include #include "driver.h" #include "game.h" #include "map.h" #include "network.h" #include "log.h" typedef union { struct sockaddr sa; struct sockaddr_in in; #ifdef HAVE_GETADDRINFO_ET_AL struct sockaddr_in6 in6; #endif /* HAVE_GETADDRINFO_ET_AL */ } sockaddr_t; static gboolean debug_enabled = FALSE; struct _Session { int fd; time_t last_response; /* used for activity detection. */ guint timer_id; void *user_data; gboolean connect_in_progress; gboolean waiting_for_close; #ifdef HAVE_GETADDRINFO_ET_AL struct addrinfo *base_ai; /* Base addrinfo, to free later. */ struct addrinfo *current_ai; /* Current connection method. */ #endif char *host; char *port; gint read_tag; char read_buff[16 * 1024]; int read_len; gboolean entered; gint write_tag; GList *write_queue; NetNotifyFunc notify_func; }; static void net_attempt_to_connect(Session * ses); /* Number of seconds between pings * (in the absence of other network activity). */ static const int PING_PERIOD = 30; void set_enable_debug(gboolean enabled) { debug_enabled = enabled; } void debug(const gchar * fmt, ...) { va_list ap; gchar *buff; gint idx; time_t t; struct tm *alpha; if (!debug_enabled) return; va_start(ap, fmt); buff = g_strdup_vprintf(fmt, ap); va_end(ap); t = time(NULL); alpha = localtime(&t); g_print("%02d:%02d:%02d ", alpha->tm_hour, alpha->tm_min, alpha->tm_sec); for (idx = 0; buff[idx] != '\0'; idx++) { if (isprint(buff[idx])) g_print("%c", buff[idx]); else switch (buff[idx]) { case '\n': g_print("\\n"); break; case '\r': g_print("\\r"); break; case '\t': g_print("\\t"); break; default: g_print("\\x%02x", (buff[idx] & 0xff)); break; } } g_print("\n"); g_free(buff); } static void read_ready(Session * ses); static void write_ready(Session * ses); static void listen_read(Session * ses, gboolean monitor) { if (monitor && ses->read_tag == 0) ses->read_tag = driver->input_add_read(ses->fd, (InputFunc) read_ready, ses); if (!monitor && ses->read_tag != 0) { driver->input_remove(ses->read_tag); ses->read_tag = 0; } } static void listen_write(Session * ses, gboolean monitor) { if (monitor && ses->write_tag == 0) ses->write_tag = driver->input_add_write(ses->fd, (InputFunc) write_ready, ses); if (!monitor && ses->write_tag != 0) { driver->input_remove(ses->write_tag); ses->write_tag = 0; } } static void notify(Session * ses, NetEvent event, gchar * line) { if (ses->notify_func != NULL) ses->notify_func(event, ses->user_data, line); } static gboolean net_would_block(void) { #ifdef G_OS_WIN32 return WSAGetLastError() == WSAEWOULDBLOCK; #else /* G_OS_WIN32 */ return errno == EAGAIN; #endif /* G_OS_WIN32 */ } static gboolean net_write_error(void) { #ifdef G_OS_WIN32 int lerror = WSAGetLastError(); return (lerror != WSAECONNRESET && lerror != WSAECONNABORTED && lerror != WSAESHUTDOWN); #else /* G_OS_WIN32 */ return errno != EPIPE; #endif /* G_OS_WIN32 */ } /* Returns the message for error# number */ static const gchar *net_errormsg_nr(gint number) { return g_strerror(number); } /* Returns the message for the current error */ static const gchar *net_errormsg(void) { return net_errormsg_nr(errno); } gboolean net_close(Session * ses) { if (ses->timer_id != 0) { g_source_remove(ses->timer_id); ses->timer_id = 0; } if (ses->fd >= 0) { listen_read(ses, FALSE); listen_write(ses, FALSE); net_closesocket(ses->fd); ses->fd = -1; while (ses->write_queue != NULL) { char *data = ses->write_queue->data; ses->write_queue = g_list_remove(ses->write_queue, data); g_free(data); } } #ifdef HAVE_GETADDRINFO_ET_AL if (ses->base_ai) { freeaddrinfo(ses->base_ai); ses->base_ai = NULL; ses->current_ai = NULL; } #endif /* HAVE_GETADDRINFO_ET_AL */ return !ses->entered; } void net_close_when_flushed(Session * ses) { ses->waiting_for_close = TRUE; if (ses->write_queue != NULL) return; if (net_close(ses)) notify(ses, NET_CLOSE, NULL); } void net_wait_for_close(Session * ses) { ses->waiting_for_close = TRUE; } static void close_and_callback(Session * ses) { if (net_close(ses)) notify(ses, NET_CLOSE, NULL); } static gboolean ping_function(gpointer s) { Session *ses = (Session *) s; double interval = difftime(time(NULL), ses->last_response); /* Ask for activity every PING_PERIOD seconds, but don't ask if there * was activity anyway. */ if (interval >= 2 * PING_PERIOD) { /* There was no response to the ping in time. The connection * should be considered dead. */ log_message(MSG_ERROR, "No activity and no response to ping. Closing connection\n"); debug("(%d) --> %s", ses->fd, "no response"); close_and_callback(ses); } else if (interval >= PING_PERIOD) { /* There was no activity. * Send a ping (but don't update activity time). */ net_write(ses, "hello\n"); ses->timer_id = g_timeout_add(PING_PERIOD * 1000, ping_function, s); } else { /* Everything is fine. Reschedule this check. */ ses->timer_id = g_timeout_add((PING_PERIOD - interval) * 1000, ping_function, s); } /* Return FALSE to not reschedule this timeout. If it needed to be * rescheduled, it has been done explicitly above (with a different * timeout). */ return FALSE; } static void write_ready(Session * ses) { if (!ses || ses->fd < 0) return; if (ses->connect_in_progress) { /* We were waiting to connect to server */ int error; socklen_t error_len; error_len = sizeof(error); if (getsockopt(ses->fd, SOL_SOCKET, SO_ERROR, (GETSOCKOPT_ARG3) & error, &error_len) < 0) { notify(ses, NET_CONNECT_FAIL, NULL); log_message(MSG_ERROR, _("" "Error checking connect status: %s\n"), net_errormsg()); net_close(ses); } else if (error != 0) { #ifdef HAVE_GETADDRINFO_ET_AL if (ses->current_ai && ses->current_ai->ai_next) { // There are some protocols left to try ses->current_ai = ses->current_ai->ai_next; listen_read(ses, FALSE); listen_write(ses, FALSE); net_closesocket(ses->fd); ses->fd = -1; net_attempt_to_connect(ses); return; } #endif log_message(MSG_ERROR, _("" "Error connecting to host '%s': %s\n"), ses->host, net_errormsg_nr(error)); notify(ses, NET_CONNECT_FAIL, NULL); net_close(ses); } else { ses->connect_in_progress = FALSE; notify(ses, NET_CONNECT, NULL); listen_write(ses, FALSE); listen_read(ses, TRUE); } return; } while (ses->write_queue != NULL) { int num; char *data = ses->write_queue->data; int len = strlen(data); num = send(ses->fd, data, len, 0); debug("write_ready: write(%d, \"%.*s\", %d) = %d", ses->fd, len, data, len, num); if (num < 0) { if (net_would_block()) break; if (net_write_error()) log_message(MSG_ERROR, _("" "Error writing socket: %s\n"), net_errormsg()); close_and_callback(ses); return; } else if (num == len) { ses->write_queue = g_list_remove(ses->write_queue, data); g_free(data); } else { memmove(data, data + num, len - num + 1); break; } } /* Stop spinning when nothing to do. */ if (ses->write_queue == NULL) { if (ses->waiting_for_close) close_and_callback(ses); else listen_write(ses, FALSE); } } void net_write(Session * ses, const gchar * data) { if (!ses || ses->fd < 0) return; if (ses->write_queue != NULL || !net_connected(ses)) { /* reassign the pointer, because the glib docs say it may * change and because if we're in the process of connecting the * pointer may currently be null. */ ses->write_queue = g_list_append(ses->write_queue, g_strdup(data)); } else { int len; int num; len = strlen(data); num = send(ses->fd, data, len, 0); if (num > 0) { if (strcmp(data, "yes\n") && strcmp(data, "hello\n")) debug("(%d) --> %s", ses->fd, data); } else if (!net_would_block()) debug("(%d) --- Error writing to socket.", ses->fd); if (num < 0) { if (!net_would_block()) { log_message(MSG_ERROR, _("" "Error writing to socket: %s\n"), net_errormsg()); close_and_callback(ses); return; } num = 0; } if (num != len) { ses->write_queue = g_list_append(NULL, g_strdup(data + num)); listen_write(ses, TRUE); } } } void net_printf(Session * ses, const gchar * fmt, ...) { char *buff; va_list ap; va_start(ap, fmt); buff = g_strdup_vprintf(fmt, ap); va_end(ap); net_write(ses, buff); g_free(buff); } static int find_line(char *buff, int len) { int idx; for (idx = 0; idx < len; idx++) if (buff[idx] == '\n') return idx; return -1; } static void read_ready(Session * ses) { int num; int offset; /* There is data from this connection: record the time. */ ses->last_response = time(NULL); if (ses->read_len == sizeof(ses->read_buff)) { /* We are in trouble now - the application has not * been processing the data we have been * reading. Assume something has gone wrong and * disconnect */ log_message(MSG_ERROR, _("Read buffer overflow - disconnecting\n")); close_and_callback(ses); return; } num = recv(ses->fd, ses->read_buff + ses->read_len, sizeof(ses->read_buff) - ses->read_len, 0); if (num < 0) { if (net_would_block()) return; log_message(MSG_ERROR, _("Error reading socket: %s\n"), net_errormsg()); close_and_callback(ses); return; } if (num == 0) { close_and_callback(ses); return; } ses->read_len += num; if (ses->entered) return; ses->entered = TRUE; offset = 0; while (ses->fd >= 0 && offset < ses->read_len) { char *line = ses->read_buff + offset; int len = find_line(line, ses->read_len - offset); if (len < 0) break; line[len] = '\0'; offset += len + 1; if (!strcmp(line, "hello")) { net_write(ses, "yes\n"); continue; } if (!strcmp(line, "yes")) { continue; /* Don't notify the program */ } debug("(%d) <-- %s", ses->fd, line); notify(ses, NET_READ, line); } if (offset < ses->read_len) { /* Did not process all data in buffer - discard * processed data and copy remaining data to beginning * of buffer until next time */ memmove(ses->read_buff, ses->read_buff + offset, ses->read_len - offset); ses->read_len -= offset; } else /* Processed all data in buffer, discard it */ ses->read_len = 0; ses->entered = FALSE; if (ses->fd < 0) { close_and_callback(ses); } } Session *net_new(NetNotifyFunc notify_func, void *user_data) { Session *ses; ses = g_malloc0(sizeof(*ses)); ses->notify_func = notify_func; ses->user_data = user_data; ses->fd = -1; return ses; } void net_use_fd(Session * ses, int fd, gboolean do_ping) { ses->fd = fd; if (do_ping) { ses->last_response = time(NULL); ses->timer_id = g_timeout_add(PING_PERIOD * 1000, ping_function, ses); } listen_read(ses, TRUE); } gboolean net_connected(Session * ses) { return ses->fd >= 0 && !ses->connect_in_progress; } /* Set the socket to non-blocking * @param fd The file descriptor of the socket * @return TRUE if an error occurred */ static gboolean net_set_socket_non_blocking(int fd) { #ifdef HAVE_FCNTL return fcntl(fd, F_SETFL, O_NDELAY) < 0; #else /* HAVE_FCNTL */ #ifdef HAVE_WS2TCPIP_H unsigned long nonblocking = 1; return ioctlsocket(fd, FIONBIO, &nonblocking) != 0; #else /* HAVE_FCNTL && HAVE_WS2TCPIP_H */ #error "Don't know how to set a socket non-blocking" #error "Please contact the mailing list," #error "and send the file config.h" return TRUE; #endif #endif } /* Is the connection in progress? * @return TRUE The connection is in progress */ static gboolean net_is_connection_in_progress(void) { #ifdef G_OS_WIN32 return WSAGetLastError() == WSAEWOULDBLOCK; #else return errno == EINPROGRESS; #endif } /** * Attempt to connect the session. * @param ses Session */ static void net_attempt_to_connect(Session * ses) { #ifdef HAVE_GETADDRINFO_ET_AL struct addrinfo *aip; #else struct hostent *he; struct sockaddr_in addr; #endif /* HAVE_GETADDRINFO_ET_AL */ #ifdef HAVE_GETADDRINFO_ET_AL aip = ses->current_ai; g_return_if_fail(aip != NULL); ses->fd = socket(aip->ai_family, SOCK_STREAM, 0); #else /* HAVE_GETADDRINFO_ET_AL */ ses->fd = socket(AF_INET, SOCK_STREAM, 0); #endif /* HAVE_GETADDRINFO_ET_AL */ if (ses->fd < 0) { log_message(MSG_ERROR, _("Error creating socket: %s\n"), net_errormsg()); return; } #ifdef HAVE_FCNTL if (fcntl(ses->fd, F_SETFD, 1) < 0) { log_message(MSG_ERROR, _("Error setting socket close-on-exec: %s\n"), net_errormsg()); net_closesocket(ses->fd); ses->fd = -1; return; } #endif if (net_set_socket_non_blocking(ses->fd)) { log_message(MSG_ERROR, _("Error setting socket non-blocking: %s\n"), net_errormsg()); net_closesocket(ses->fd); ses->fd = -1; return; } #ifdef HAVE_GETADDRINFO_ET_AL if (connect(ses->fd, aip->ai_addr, aip->ai_addrlen) < 0) { #else /* HAVE_GETADDRINFO_ET_AL */ he = gethostbyname(ses->host); addr.sin_family = AF_INET; addr.sin_port = htons(atoi(ses->port)); addr.sin_addr = *((struct in_addr *) he->h_addr); memset(&addr.sin_zero, 0, 8); if (connect(ses->fd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) < 0) { #endif /* HAVE_GETADDRINFO_ET_AL */ if (net_is_connection_in_progress()) { ses->connect_in_progress = TRUE; listen_write(ses, TRUE); return; } else { log_message(MSG_ERROR, _("Error connecting to %s: %s\n"), ses->host, net_errormsg()); net_closesocket(ses->fd); ses->fd = -1; return; } } else listen_read(ses, TRUE); return; } gboolean net_connect(Session * ses, const gchar * host, const gchar * port) { #ifdef HAVE_GETADDRINFO_ET_AL int err; struct addrinfo hints; struct addrinfo *ai; #else struct hostent *he; struct sockaddr_in addr; #endif /* HAVE_GETADDRINFO_ET_AL */ net_close(ses); if (ses->host != NULL) g_free(ses->host); if (ses->port != NULL) g_free(ses->port); ses->host = g_strdup(host); ses->port = g_strdup(port); #ifdef HAVE_GETADDRINFO_ET_AL memset(&hints, 0, sizeof(hints)); hints.ai_family = NETWORK_PROTOCOL; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; if ((err = getaddrinfo(host, port, &hints, &ai))) { log_message(MSG_ERROR, _("Cannot resolve %s port %s: %s\n"), host, port, gai_strerror(err)); return FALSE; } if (!ai) { log_message(MSG_ERROR, _("" "Cannot resolve %s port %s: host not found\n"), host, port); return FALSE; } ses->base_ai = ai; ses->current_ai = ai; #endif /* HAVE_GETADDRINFO_ET_AL */ net_attempt_to_connect(ses); return (ses->fd >= 0); } /* Free and NULL-ify the session *ses */ void net_free(Session ** ses) { /* If the sessions is still in use, do not free it */ if (!net_close(*ses)) { return; } if ((*ses)->host != NULL) g_free((*ses)->host); if ((*ses)->port != NULL) g_free((*ses)->port); g_free(*ses); *ses = NULL; } gchar *get_my_hostname(void) { /* The following code fragment is taken from glib-2.0 v2.8 */ gchar hostname[100]; #ifndef G_OS_WIN32 gboolean hostname_fail = (gethostname(hostname, sizeof(hostname)) == -1); #else DWORD size = sizeof(hostname); gboolean hostname_fail = (!GetComputerName(hostname, &size)); #endif return g_strdup(hostname_fail ? "localhost" : hostname); /* End of copy from glib-2.0 v2.8 */ } gchar *get_meta_server_name(gboolean use_default) { gchar *temp; temp = g_strdup(g_getenv("PIONEERS_META_SERVER")); if (!temp) temp = g_strdup(g_getenv("GNOCATAN_META_SERVER")); if (!temp) { if (use_default) temp = g_strdup(PIONEERS_DEFAULT_META_SERVER); else { temp = get_my_hostname(); } } return temp; } const gchar *get_pioneers_dir(void) { const gchar *pioneers_dir = g_getenv("PIONEERS_DIR"); if (!pioneers_dir) pioneers_dir = g_getenv("GNOCATAN_DIR"); if (!pioneers_dir) pioneers_dir = PIONEERS_DIR_DEFAULT; return pioneers_dir; } int net_open_listening_socket(const gchar * port, gchar ** error_message) { #ifdef HAVE_GETADDRINFO_ET_AL int err; struct addrinfo hints, *ai, *aip; int yes; gint fd = -1; memset(&hints, 0, sizeof(hints)); hints.ai_family = NETWORK_PROTOCOL; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; if ((err = getaddrinfo(NULL, port, &hints, &ai)) || !ai) { *error_message = g_strdup_printf(_("" "Error creating struct addrinfo: %s"), gai_strerror(err)); return -1; } for (aip = ai; aip; aip = aip->ai_next) { fd = socket(aip->ai_family, SOCK_STREAM, 0); if (fd < 0) { continue; } yes = 1; /* setsockopt() before bind(); otherwise it has no effect! -- egnor */ if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { net_closesocket(fd); continue; } if (bind(fd, aip->ai_addr, aip->ai_addrlen) < 0) { net_closesocket(fd); continue; } break; } if (!aip) { *error_message = g_strdup_printf(_("" "Error creating listening socket: %s\n"), net_errormsg()); freeaddrinfo(ai); return -1; } freeaddrinfo(ai); if (net_set_socket_non_blocking(fd)) { *error_message = g_strdup_printf(_("" "Error setting socket non-blocking: %s\n"), net_errormsg()); net_closesocket(fd); return -1; } if (listen(fd, 5) < 0) { *error_message = g_strdup_printf(_("" "Error during listen on socket: %s\n"), net_errormsg()); net_closesocket(fd); return -1; } *error_message = NULL; return fd; #else /* HAVE_GETADDRINFO_ET_AL */ *error_message = g_strdup(_("Listening not yet supported on this platform.")); return -1; #endif /* HAVE_GETADDRINFO_ET_AL */ } void net_closesocket(int fd) { #ifdef G_OS_WIN32 closesocket(fd); #else /* G_OS_WIN32 */ close(fd); #endif /* G_OS_WIN32 */ } gboolean net_get_peer_name(gint fd, gchar ** hostname, gchar ** servname, gchar ** error_message) { #ifdef HAVE_GETADDRINFO_ET_AL sockaddr_t peer; socklen_t peer_len; #endif /* HAVE_GETADDRINFO_ET_AL */ *hostname = g_strdup(_("unknown")); *servname = g_strdup(_("unknown")); #ifdef HAVE_GETADDRINFO_ET_AL peer_len = sizeof(peer); if (getpeername(fd, &peer.sa, &peer_len) < 0) { *error_message = g_strdup_printf(_("Error getting peer name: %s"), net_errormsg()); return FALSE; } else { int err; char host[NI_MAXHOST]; char port[NI_MAXSERV]; if ((err = getnameinfo(&peer.sa, peer_len, host, NI_MAXHOST, port, NI_MAXSERV, 0))) { *error_message = g_strdup_printf(_("" "Error resolving address: %s"), gai_strerror(err)); return FALSE; } else { g_free(*hostname); g_free(*servname); *hostname = g_strdup(host); *servname = g_strdup(port); return TRUE; } } #else /* HAVE_GETADDRINFO_ET_AL */ *error_message = g_strdup(_("" "Net_get_peer_name not yet supported on this platform.")); return FALSE; #endif /* HAVE_GETADDRINFO_ET_AL */ } gint net_accept(gint accept_fd, gchar ** error_message) { gint fd; sockaddr_t addr; socklen_t addr_len; addr_len = sizeof(addr); fd = accept(accept_fd, &addr.sa, &addr_len); if (fd < 0) { *error_message = g_strdup_printf(_("Error accepting connection: %s"), net_errormsg()); } return fd; } void net_init(void) { #ifdef G_OS_WIN32 WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2, 2); if (0 != WSAStartup(wVersionRequested, &wsaData)) { g_error("No usable version of WinSock was found."); } #else /* G_OS_WIN32 */ /* Do nothing on unix like platforms */ #endif /* G_OS_WIN32 */ } void net_finish(void) { #ifdef G_OS_WIN32 WSACleanup(); #else /* G_OS_WIN32 */ /* Do nothing on unix like platforms */ #endif /* G_OS_WIN32 */ } pioneers-14.1/common/network.h0000644000175000017500000000735311736612124013351 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __network_h #define __network_h #include typedef enum { NET_CONNECT, NET_CONNECT_FAIL, NET_CLOSE, NET_READ } NetEvent; typedef void (*NetNotifyFunc) (NetEvent event, void *user_data, gchar * line); typedef struct _Session Session; void set_enable_debug(gboolean enabled); void debug(const gchar * fmt, ...); /** Initialize the network drivers */ void net_init(void); /* Finish the network drivers */ void net_finish(void); Session *net_new(NetNotifyFunc notify_func, void *user_data); void net_free(Session ** ses); void net_use_fd(Session * ses, int fd, gboolean do_ping); gboolean net_connect(Session * ses, const gchar * host, const gchar * port); gboolean net_connected(Session * ses); /** Open a socket for listening. * @param port The port * @retval error_message If opening fails, a description of the error * You should g_free the error_message * @return A file descriptor if succesfull, or -1 if it fails */ int net_open_listening_socket(const gchar * port, gchar ** error_message); /** Close a socket */ void net_closesocket(int fd); /** Get peer name * @param fd File descriptor to resolve * @retval hostname The resolved hostname * @retval servname The resolved port name/service name * @retval error_message The error message when it fails * @return TRUE is successful */ gboolean net_get_peer_name(gint fd, gchar ** hostname, gchar ** servname, gchar ** error_message); /** Accept incoming connections * @param accept_fd The file descriptor * @retval error_message The message if it fails * @return The file descriptor of the connection */ gint net_accept(gint accept_fd, gchar ** error_message); /** Close a session * @param ses The session to close * @return TRUE if the session can be removed */ gboolean net_close(Session * ses); void net_close_when_flushed(Session * ses); void net_wait_for_close(Session * ses); void net_printf(Session * ses, const gchar * fmt, ...); /** Write data. * @param ses The session * @param data The data to send */ void net_write(Session * ses, const gchar * data); /** Get the hostname of this computer. * @return "localhost" if the hostname could not be determined. */ gchar *get_my_hostname(void); /** Get the name of the meta server. * First the environment variable PIONEERS_META_SERVER is queried * If it is not set, the use_default flag is used. * @param use_default If true, return the default meta server if the * environment variable is not set. * If false, return the hostname of this computer. * @return The hostname of the meta server */ gchar *get_meta_server_name(gboolean use_default); /** Get the directory of the game related files. * First the environment variable PIONEERS_DIR is queried * If it is not set, the default value is returned */ const gchar *get_pioneers_dir(void); #endif pioneers-14.1/common/notifying-string.gob0000644000175000017500000000063411611553240015500 00000000000000requires 2.0.0 class Notifying:String from G:Object { private gchar *value = { NULL } destroywith g_free; signal last NONE(NONE) void changed(self) { } public GObject *new(void) { return (GObject *) GET_NEW; } public void set(self, const gchar * value) { self->_priv->value = g_strdup(value); self_changed(self); } public gchar *get(self) { return g_strdup(self->_priv->value); } } pioneers-14.1/common/notifying-string.gob.stamp0000644000175000017500000000000011760646027016621 00000000000000pioneers-14.1/common/notifying-string.c0000644000175000017500000001533111760646027015166 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ /* End world hunger, donate to the World Food Programme, http://www.wfp.org */ #define GOB_VERSION_MAJOR 2 #define GOB_VERSION_MINOR 0 #define GOB_VERSION_PATCHLEVEL 18 #define selfp (self->_priv) #include /* memset() */ #include "notifying-string.h" #include "notifying-string-private.h" #ifdef G_LIKELY #define ___GOB_LIKELY(expr) G_LIKELY(expr) #define ___GOB_UNLIKELY(expr) G_UNLIKELY(expr) #else /* ! G_LIKELY */ #define ___GOB_LIKELY(expr) (expr) #define ___GOB_UNLIKELY(expr) (expr) #endif /* G_LIKELY */ /* self casting macros */ #define SELF(x) NOTIFYING_STRING(x) #define SELF_CONST(x) NOTIFYING_STRING_CONST(x) #define IS_SELF(x) NOTIFYING_IS_STRING(x) #define TYPE_SELF NOTIFYING_TYPE_STRING #define SELF_CLASS(x) NOTIFYING_STRING_CLASS(x) #define SELF_GET_CLASS(x) NOTIFYING_STRING_GET_CLASS(x) /* self typedefs */ typedef NotifyingString Self; typedef NotifyingStringClass SelfClass; /* here are local prototypes */ #line 0 "common/notifying-string.gob" static void notifying_string_init (NotifyingString * o) G_GNUC_UNUSED; #line 41 "notifying-string.c" #line 0 "common/notifying-string.gob" static void notifying_string_class_init (NotifyingStringClass * c) G_GNUC_UNUSED; #line 44 "notifying-string.c" /* * Signal connection wrapper macro shortcuts */ #define self_connect__changed(object,func,data) notifying_string_connect__changed((object),(func),(data)) #define self_connect_after__changed(object,func,data) notifying_string_connect_after__changed((object),(func),(data)) #define self_connect_data__changed(object,func,data,destroy_data,flags) notifying_string_connect_data__changed((object),(func),(data),(destroy_data),(flags)) enum { CHANGED_SIGNAL, LAST_SIGNAL }; static guint object_signals[LAST_SIGNAL] = {0}; /* pointer to the class of our parent */ static GObjectClass *parent_class = NULL; /* Short form macros */ #define self_changed notifying_string_changed #define self_new notifying_string_new #define self_set notifying_string_set #define self_get notifying_string_get GType notifying_string_get_type (void) { static GType type = 0; if ___GOB_UNLIKELY(type == 0) { static const GTypeInfo info = { sizeof (NotifyingStringClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) notifying_string_class_init, (GClassFinalizeFunc) NULL, NULL /* class_data */, sizeof (NotifyingString), 0 /* n_preallocs */, (GInstanceInitFunc) notifying_string_init, NULL }; type = g_type_register_static (G_TYPE_OBJECT, "NotifyingString", &info, (GTypeFlags)0); } return type; } /* a macro for creating a new object of our type */ #define GET_NEW ((NotifyingString *)g_object_new(notifying_string_get_type(), NULL)) /* a function for creating a new object of our type */ #include static NotifyingString * GET_NEW_VARG (const char *first, ...) G_GNUC_UNUSED; static NotifyingString * GET_NEW_VARG (const char *first, ...) { NotifyingString *ret; va_list ap; va_start (ap, first); ret = (NotifyingString *)g_object_new_valist (notifying_string_get_type (), first, ap); va_end (ap); return ret; } static void ___finalize(GObject *obj_self) { #define __GOB_FUNCTION__ "Notifying:String::finalize" NotifyingString *self G_GNUC_UNUSED = NOTIFYING_STRING (obj_self); gpointer priv G_GNUC_UNUSED = self->_priv; if(G_OBJECT_CLASS(parent_class)->finalize) \ (* G_OBJECT_CLASS(parent_class)->finalize)(obj_self); #line 5 "common/notifying-string.gob" if(self->_priv->value) { g_free ((gpointer) self->_priv->value); self->_priv->value = NULL; } #line 121 "notifying-string.c" } #undef __GOB_FUNCTION__ static void notifying_string_init (NotifyingString * o G_GNUC_UNUSED) { #define __GOB_FUNCTION__ "Notifying:String::init" o->_priv = G_TYPE_INSTANCE_GET_PRIVATE(o,NOTIFYING_TYPE_STRING,NotifyingStringPrivate); #line 4 "common/notifying-string.gob" o->_priv->value = NULL ; #line 132 "notifying-string.c" } #undef __GOB_FUNCTION__ static void notifying_string_class_init (NotifyingStringClass * c G_GNUC_UNUSED) { #define __GOB_FUNCTION__ "Notifying:String::class_init" GObjectClass *g_object_class G_GNUC_UNUSED = (GObjectClass*) c; g_type_class_add_private(c,sizeof(NotifyingStringPrivate)); parent_class = g_type_class_ref (G_TYPE_OBJECT); object_signals[CHANGED_SIGNAL] = g_signal_new ("changed", G_TYPE_FROM_CLASS (g_object_class), (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), G_STRUCT_OFFSET (NotifyingStringClass, changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); c->changed = NULL; g_object_class->finalize = ___finalize; } #undef __GOB_FUNCTION__ #line 7 "common/notifying-string.gob" void notifying_string_changed (NotifyingString * self) { #line 165 "notifying-string.c" GValue ___param_values[1]; GValue ___return_val; memset (&___return_val, 0, sizeof (___return_val)); memset (&___param_values, 0, sizeof (___param_values)); #line 7 "common/notifying-string.gob" g_return_if_fail (self != NULL); #line 7 "common/notifying-string.gob" g_return_if_fail (NOTIFYING_IS_STRING (self)); #line 176 "notifying-string.c" ___param_values[0].g_type = 0; g_value_init (&___param_values[0], G_TYPE_FROM_INSTANCE (self)); g_value_set_instance (&___param_values[0], (gpointer) self); g_signal_emitv (___param_values, object_signals[CHANGED_SIGNAL], 0 /* detail */, &___return_val); g_value_unset (&___param_values[0]); } #line 12 "common/notifying-string.gob" GObject * notifying_string_new (void) { #line 194 "notifying-string.c" #define __GOB_FUNCTION__ "Notifying:String::new" { #line 12 "common/notifying-string.gob" return (GObject *) GET_NEW; }} #line 201 "notifying-string.c" #undef __GOB_FUNCTION__ #line 16 "common/notifying-string.gob" void notifying_string_set (NotifyingString * self, const gchar * value) { #line 208 "notifying-string.c" #define __GOB_FUNCTION__ "Notifying:String::set" #line 16 "common/notifying-string.gob" g_return_if_fail (self != NULL); #line 16 "common/notifying-string.gob" g_return_if_fail (NOTIFYING_IS_STRING (self)); #line 214 "notifying-string.c" { #line 16 "common/notifying-string.gob" self->_priv->value = g_strdup(value); self_changed(self); }} #line 221 "notifying-string.c" #undef __GOB_FUNCTION__ #line 21 "common/notifying-string.gob" gchar * notifying_string_get (NotifyingString * self) { #line 228 "notifying-string.c" #define __GOB_FUNCTION__ "Notifying:String::get" #line 21 "common/notifying-string.gob" g_return_val_if_fail (self != NULL, (gchar * )0); #line 21 "common/notifying-string.gob" g_return_val_if_fail (NOTIFYING_IS_STRING (self), (gchar * )0); #line 234 "notifying-string.c" { #line 21 "common/notifying-string.gob" return g_strdup(self->_priv->value); }} #line 240 "notifying-string.c" #undef __GOB_FUNCTION__ pioneers-14.1/common/notifying-string.h0000644000175000017500000000731011760646027015171 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ #include #include #ifndef __NOTIFYING_STRING_H__ #define __NOTIFYING_STRING_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Type checking and casting macros */ #define NOTIFYING_TYPE_STRING (notifying_string_get_type()) #define NOTIFYING_STRING(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), notifying_string_get_type(), NotifyingString) #define NOTIFYING_STRING_CONST(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), notifying_string_get_type(), NotifyingString const) #define NOTIFYING_STRING_CLASS(klass) G_TYPE_CHECK_CLASS_CAST((klass), notifying_string_get_type(), NotifyingStringClass) #define NOTIFYING_IS_STRING(obj) G_TYPE_CHECK_INSTANCE_TYPE((obj), notifying_string_get_type ()) #define NOTIFYING_STRING_GET_CLASS(obj) G_TYPE_INSTANCE_GET_CLASS((obj), notifying_string_get_type(), NotifyingStringClass) /* Private structure type */ typedef struct _NotifyingStringPrivate NotifyingStringPrivate; /* * Main object structure */ #ifndef __TYPEDEF_NOTIFYING_STRING__ #define __TYPEDEF_NOTIFYING_STRING__ typedef struct _NotifyingString NotifyingString; #endif struct _NotifyingString { GObject __parent__; /*< private >*/ NotifyingStringPrivate *_priv; }; /* * Class definition */ typedef struct _NotifyingStringClass NotifyingStringClass; struct _NotifyingStringClass { GObjectClass __parent__; /*signal*/void (* changed) (NotifyingString * self); }; /* * Public methods */ GType notifying_string_get_type (void) G_GNUC_CONST; #line 7 "common/notifying-string.gob" void notifying_string_changed (NotifyingString * self); #line 57 "notifying-string.h" #line 12 "common/notifying-string.gob" GObject * notifying_string_new (void); #line 60 "notifying-string.h" #line 16 "common/notifying-string.gob" void notifying_string_set (NotifyingString * self, const gchar * value); #line 64 "notifying-string.h" #line 21 "common/notifying-string.gob" gchar * notifying_string_get (NotifyingString * self); #line 67 "notifying-string.h" /* * Signal connection wrapper macros */ #if defined(__GNUC__) && !defined(__STRICT_ANSI__) #define notifying_string_connect__changed(object,func,data) g_signal_connect(NOTIFYING_STRING(__extension__ ({NotifyingString *___object = (object); ___object; })),"changed",(GCallback) __extension__ ({void (* ___changed) (NotifyingString * ___fake___self, gpointer ___data ) = (func); ___changed; }), (data)) #define notifying_string_connect_after__changed(object,func,data) g_signal_connect_after(NOTIFYING_STRING(__extension__ ({NotifyingString *___object = (object); ___object; })),"changed",(GCallback) __extension__ ({void (* ___changed) (NotifyingString * ___fake___self, gpointer ___data ) = (func); ___changed; }), (data)) #define notifying_string_connect_data__changed(object,func,data,destroy_data,flags) g_signal_connect_data(NOTIFYING_STRING(__extension__ ({NotifyingString *___object = (object); ___object; })),"changed",(GCallback) __extension__ ({void (* ___changed) (NotifyingString * ___fake___self, gpointer ___data ) = (func); ___changed; }), (data), (destroy_data), (GConnectFlags)(flags)) #else /* __GNUC__ && !__STRICT_ANSI__ */ #define notifying_string_connect__changed(object,func,data) g_signal_connect(NOTIFYING_STRING(object),"changed",(GCallback)(func),(data)) #define notifying_string_connect_after__changed(object,func,data) g_signal_connect_after(NOTIFYING_STRING(object),"changed",(GCallback)(func),(data)) #define notifying_string_connect_data__changed(object,func,data,destroy_data,flags) g_signal_connect_data(NOTIFYING_STRING(object),"changed",(GCallback)(func),(data),(destroy_data),(GConnectFlags)(flags)) #endif /* __GNUC__ && !__STRICT_ANSI__ */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif pioneers-14.1/common/notifying-string-private.h0000644000175000017500000000063211760646027016641 00000000000000/* Generated by GOB (v2.0.18) (do not edit directly) */ #ifndef __NOTIFYING_STRING_PRIVATE_H__ #define __NOTIFYING_STRING_PRIVATE_H__ #include "notifying-string.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ struct _NotifyingStringPrivate { #line 4 "common/notifying-string.gob" gchar * value; #line 16 "notifying-string-private.h" }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif pioneers-14.1/common/quoteinfo.c0000644000175000017500000001035110433622406013651 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include "game.h" #include "quoteinfo.h" void quotelist_new(QuoteList ** list) { g_assert(*list == NULL); quotelist_free(list); *list = g_malloc0(sizeof(**list)); } void quotelist_free(QuoteList ** list) { if (*list == NULL) return; /* Already free */ while ((*list)->quotes != NULL) { QuoteInfo *quote = (*list)->quotes->data; (*list)->quotes = g_list_remove((*list)->quotes, quote); g_free(quote); } g_free(*list); *list = NULL; } static gint sort_quotes(QuoteInfo * a, QuoteInfo * b) { gint res; res = a->is_domestic - b->is_domestic; if (res != 0) return res; if (a->is_domestic) { res = a->var.d.player_num - b->var.d.player_num; if (res != 0) return res; return a->var.d.quote_num - b->var.d.quote_num; } res = a->var.m.ratio - b->var.m.ratio; if (res != 0) return res; res = a->var.m.receive - b->var.m.receive; if (res != 0) return res; return a->var.m.supply - b->var.m.supply; } QuoteInfo *quotelist_add_maritime(QuoteList * list, gint ratio, Resource supply, Resource receive) { QuoteInfo *quote; quote = g_malloc0(sizeof(*quote)); quote->is_domestic = FALSE; quote->var.m.ratio = ratio; quote->var.m.supply = supply; quote->var.m.receive = receive; list->quotes = g_list_insert_sorted(list->quotes, quote, (GCompareFunc) sort_quotes); quote->list = g_list_find(list->quotes, quote); return quote; } QuoteInfo *quotelist_add_domestic(QuoteList * list, gint player_num, gint quote_num, const gint * supply, const gint * receive) { QuoteInfo *quote; quote = g_malloc0(sizeof(*quote)); quote->is_domestic = TRUE; quote->var.d.player_num = player_num; quote->var.d.quote_num = quote_num; memcpy(quote->var.d.supply, supply, sizeof(quote->var.d.supply)); memcpy(quote->var.d.receive, receive, sizeof(quote->var.d.receive)); list->quotes = g_list_insert_sorted(list->quotes, quote, (GCompareFunc) sort_quotes); quote->list = g_list_find(list->quotes, quote); return quote; } QuoteInfo *quotelist_find_domestic(QuoteList * list, gint player_num, gint quote_num) { GList *scan; for (scan = list->quotes; scan != NULL; scan = g_list_next(scan)) { QuoteInfo *quote = scan->data; if (!quote->is_domestic) continue; if (quote->var.d.player_num != player_num) continue; if (quote->var.d.quote_num == quote_num || quote_num < 0) return quote; } return NULL; } QuoteInfo *quotelist_first(QuoteList * list) { if (list == NULL || list->quotes == NULL) return NULL; return list->quotes->data; } QuoteInfo *quotelist_prev(const QuoteInfo * quote) { GList *list = g_list_previous(quote->list); if (list == NULL) return NULL; return list->data; } QuoteInfo *quotelist_next(const QuoteInfo * quote) { GList *list = g_list_next(quote->list); if (list == NULL) return NULL; return list->data; } gboolean quotelist_is_player_first(const QuoteInfo * quote) { const QuoteInfo *prev = quotelist_prev(quote); return prev == NULL || !prev->is_domestic || prev->var.d.player_num != quote->var.d.player_num; } void quotelist_delete(QuoteList * list, QuoteInfo * quote) { GList *scan; for (scan = list->quotes; scan != NULL; scan = g_list_next(scan)) { if (scan->data == quote) { list->quotes = g_list_remove_link(list->quotes, scan); g_list_free_1(scan); g_free(quote); return; } } } pioneers-14.1/common/quoteinfo.h0000644000175000017500000000430610433622406013661 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __quoteinfo_h #define __quoteinfo_h typedef struct { GList *list; /* list entry which owns the quote */ gboolean is_domestic; /* is this a maritime trade? */ union { struct { gint player_num; /* player who make the quote */ gint quote_num; /* quote identifier */ gint supply[NO_RESOURCE]; /* resources supplied in the quote */ gint receive[NO_RESOURCE]; /* resources received in the quote */ } d; struct { gint ratio; Resource supply; Resource receive; } m; } var; } QuoteInfo; typedef struct { GList *quotes; } QuoteList; /** Create a new quote list, and remove the old list if needed */ void quotelist_new(QuoteList ** list); /** Free the QuoteList (if needed), and set it to NULL */ void quotelist_free(QuoteList ** list); QuoteInfo *quotelist_add_domestic(QuoteList * list, gint player_num, gint quote_num, const gint * supply, const gint * receive); QuoteInfo *quotelist_add_maritime(QuoteList * list, gint ratio, Resource supply, Resource receive); QuoteInfo *quotelist_first(QuoteList * list); QuoteInfo *quotelist_prev(const QuoteInfo * quote); QuoteInfo *quotelist_next(const QuoteInfo * quote); gboolean quotelist_is_player_first(const QuoteInfo * quote); QuoteInfo *quotelist_find_domestic(QuoteList * list, gint player_num, gint quote_num); void quotelist_delete(QuoteList * list, QuoteInfo * quote); #endif pioneers-14.1/common/state.c0000644000175000017500000002405711665242417013000 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include #include #include #include #include #include #include "game.h" #include "log.h" #include "state.h" static void route_event(StateMachine * sm, gint event); void sm_inc_use_count(StateMachine * sm) { sm->use_count++; } void sm_dec_use_count(StateMachine * sm) { if (!--sm->use_count && sm->is_dead) sm_free(sm); } const gchar *sm_current_name(StateMachine * sm) { return sm->current_state; } void sm_state_name(StateMachine * sm, const gchar * name) { sm->current_state = name; sm->stack_name[sm->stack_ptr] = name; } gboolean sm_is_connected(StateMachine * sm) { return sm->ses != NULL && net_connected(sm->ses); } static void route_event(StateMachine * sm, gint event) { StateFunc curr_state; gpointer user_data; if (sm->stack_ptr >= 0) curr_state = sm_current(sm); else curr_state = NULL; user_data = sm->user_data; if (user_data == NULL) user_data = sm; /* send death notification even when dead */ if (event == SM_FREE) { /* send death notifications only to global handler */ if (sm->global !=NULL) sm->global (user_data, event); return; } if (sm->is_dead) return; switch (event) { case SM_ENTER: if (curr_state != NULL) curr_state(user_data, event); break; case SM_INIT: if (curr_state != NULL) curr_state(user_data, event); if (!sm->is_dead && sm->global !=NULL) sm->global (user_data, event); break; case SM_RECV: sm_cancel_prefix(sm); if (curr_state != NULL && curr_state(user_data, event)) break; sm_cancel_prefix(sm); if (!sm->is_dead && sm->global !=NULL && sm->global (user_data, event)) break; sm_cancel_prefix(sm); if (!sm->is_dead && sm->unhandled != NULL) sm->unhandled(user_data, event); break; case SM_NET_CLOSE: sm_close(sm); default: if (curr_state != NULL) curr_state(user_data, event); if (!sm->is_dead && sm->global !=NULL) sm->global (user_data, event); break; } } void sm_cancel_prefix(StateMachine * sm) { sm->line_offset = 0; } static void net_event(NetEvent event, StateMachine * sm, gchar * line) { sm_inc_use_count(sm); switch (event) { case NET_CONNECT: route_event(sm, SM_NET_CONNECT); break; case NET_CONNECT_FAIL: route_event(sm, SM_NET_CONNECT_FAIL); break; case NET_CLOSE: route_event(sm, SM_NET_CLOSE); break; case NET_READ: sm->line = line; /* Only handle data if there is a context. Fixes bug that * clients starting to send data immediately crash the * server */ if (sm->stack_ptr != -1) route_event(sm, SM_RECV); else { sm_dec_use_count(sm); return; } break; } route_event(sm, SM_INIT); sm_dec_use_count(sm); } gboolean sm_connect(StateMachine * sm, const gchar * host, const gchar * port) { if (sm->ses != NULL) net_free(&(sm->ses)); sm->ses = net_new((NetNotifyFunc) net_event, sm); log_message(MSG_INFO, _("Connecting to %s, port %s\n"), host, port); if (net_connect(sm->ses, host, port)) return TRUE; net_free(&(sm->ses)); return FALSE; } void sm_use_fd(StateMachine * sm, gint fd, gboolean do_ping) { if (sm->ses != NULL) net_free(&(sm->ses)); sm->ses = net_new((NetNotifyFunc) net_event, sm); net_use_fd(sm->ses, fd, do_ping); } gboolean sm_recv(StateMachine * sm, const gchar * fmt, ...) { va_list ap; gint offset; va_start(ap, fmt); offset = game_vscanf(sm->line + sm->line_offset, fmt, ap); va_end(ap); return offset > 0 && sm->line[sm->line_offset + offset] == '\0'; } gboolean sm_recv_prefix(StateMachine * sm, const gchar * fmt, ...) { va_list ap; gint offset; va_start(ap, fmt); offset = game_vscanf(sm->line + sm->line_offset, fmt, ap); va_end(ap); if (offset < 0) return FALSE; sm->line_offset += offset; return TRUE; } void sm_write(StateMachine * sm, const gchar * str) { if (sm->use_cache) { /* Protect against strange/slow connects */ if (g_list_length(sm->cache) > 1000) { net_write(sm->ses, "ERR connection too slow\n"); net_close_when_flushed(sm->ses); } else { sm->cache = g_list_append(sm->cache, g_strdup(str)); } } else net_write(sm->ses, str); } void sm_write_uncached(StateMachine * sm, const gchar * str) { g_assert(sm->ses); g_assert(sm->use_cache); net_write(sm->ses, str); } void sm_send(StateMachine * sm, const gchar * fmt, ...) { va_list ap; gchar *buff; if (!sm->ses) return; va_start(ap, fmt); buff = game_vprintf(fmt, ap); va_end(ap); sm_write(sm, buff); g_free(buff); } void sm_set_use_cache(StateMachine * sm, gboolean use_cache) { if (sm->use_cache == use_cache) return; if (!use_cache) { /* The cache is turned off, send the delayed data */ GList *list = sm->cache; while (list) { gchar *data = list->data; net_write(sm->ses, data); list = g_list_remove(list, data); g_free(data); } sm->cache = NULL; } else { /* Be sure that the cache is empty */ g_assert(!sm->cache); } sm->use_cache = use_cache; } void sm_global_set(StateMachine * sm, StateFunc state) { sm->global = state; } void sm_unhandled_set(StateMachine * sm, StateFunc state) { sm->unhandled = state; } static void push_new_state(StateMachine * sm) { ++sm->stack_ptr; /* check for stack overflows */ if (sm->stack_ptr >= G_N_ELEMENTS(sm->stack)) { log_message(MSG_ERROR, /* Error message */ _("" "State stack overflow. Stack dump sent to standard error.\n")); sm_stack_dump(sm); g_error("State stack overflow"); } sm->stack[sm->stack_ptr] = NULL; sm->stack_name[sm->stack_ptr] = NULL; } static void do_goto(StateMachine * sm, StateFunc new_state, gboolean enter) { sm_inc_use_count(sm); if (sm->stack_ptr < 0) { /* Wait until the application window is fully * displayed before starting state machine. */ if (driver != NULL && driver->event_queue != NULL) driver->event_queue(); push_new_state(sm); } sm->stack[sm->stack_ptr] = new_state; if (enter) route_event(sm, SM_ENTER); route_event(sm, SM_INIT); #ifdef STACK_DEBUG debug("sm_goto -> %d:%s", sm->stack_ptr, sm->current_state); #endif sm_dec_use_count(sm); } void sm_debug(G_GNUC_UNUSED const gchar * function, G_GNUC_UNUSED const gchar * state) { #ifdef STACK_DEBUG debug("Call %s with %s\n", function, state); #endif } void sm_goto_nomacro(StateMachine * sm, StateFunc new_state) { do_goto(sm, new_state, TRUE); } void sm_goto_noenter_nomacro(StateMachine * sm, StateFunc new_state) { do_goto(sm, new_state, FALSE); } static void do_push(StateMachine * sm, StateFunc new_state, gboolean enter) { sm_inc_use_count(sm); push_new_state(sm); sm->stack[sm->stack_ptr] = new_state; if (enter) route_event(sm, SM_ENTER); route_event(sm, SM_INIT); #ifdef STACK_DEBUG debug("sm_push -> %d:%s (enter=%d)", sm->stack_ptr, sm->current_state, enter); #endif sm_dec_use_count(sm); } void sm_push_nomacro(StateMachine * sm, StateFunc new_state) { do_push(sm, new_state, TRUE); } void sm_push_noenter_nomacro(StateMachine * sm, StateFunc new_state) { do_push(sm, new_state, FALSE); } void sm_pop(StateMachine * sm) { sm_inc_use_count(sm); g_assert(sm->stack_ptr > 0); sm->stack_ptr--; route_event(sm, SM_ENTER); #ifdef STACK_DEBUG debug("sm_pop -> %d:%s", sm->stack_ptr, sm->current_state); #endif route_event(sm, SM_INIT); sm_dec_use_count(sm); } void sm_multipop(StateMachine * sm, gint depth) { sm_inc_use_count(sm); g_assert(sm->stack_ptr >= depth - 1); sm->stack_ptr -= depth; route_event(sm, SM_ENTER); #ifdef STACK_DEBUG debug("sm_multipop -> %d:%s", sm->stack_ptr, sm->current_state); #endif route_event(sm, SM_INIT); sm_dec_use_count(sm); } void sm_pop_all_and_goto(StateMachine * sm, StateFunc new_state) { sm_inc_use_count(sm); sm->stack_ptr = 0; sm->stack[sm->stack_ptr] = new_state; sm->stack_name[sm->stack_ptr] = NULL; route_event(sm, SM_ENTER); route_event(sm, SM_INIT); sm_dec_use_count(sm); } /** Return the state at offset from the top of the stack. * @param sm The StateMachine * @param offset Offset from the top (0=top, 1=previous) * @return The StateFunc, or NULL if the stack contains * less than offset entries */ StateFunc sm_stack_inspect(const StateMachine * sm, guint offset) { if (sm->stack_ptr >= offset) return sm->stack[sm->stack_ptr - offset]; else return NULL; } StateFunc sm_current(StateMachine * sm) { g_assert(sm->stack_ptr >= 0); return sm->stack[sm->stack_ptr]; } /* Build a new state machine instance */ StateMachine *sm_new(gpointer user_data) { StateMachine *sm = g_malloc0(sizeof(*sm)); sm->user_data = user_data; sm->stack_ptr = -1; return sm; } /* Free a state machine */ void sm_free(StateMachine * sm) { if (sm->ses != NULL) { net_free(&(sm->ses)); return; } if (sm->use_count > 0) sm->is_dead = TRUE; else { route_event(sm, SM_FREE); g_free(sm); } } void sm_close(StateMachine * sm) { net_free(&(sm->ses)); if (sm->use_cache) { /* Purge the cache */ GList *list = sm->cache; sm->cache = NULL; sm_set_use_cache(sm, FALSE); while (list) { gchar *data = list->data; list = g_list_remove(list, data); g_free(data); } } } void sm_stack_dump(StateMachine * sm) { gint sp; fprintf(stderr, "Stack dump for %p\n", sm); for (sp = 0; sp <= sm->stack_ptr; ++sp) { fprintf(stderr, "Stack %2d: %s\n", sp, sm->stack_name[sp]); } } pioneers-14.1/common/state.h0000644000175000017500000001365411457561330013003 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 1999 Dave Cole * Copyright (C) 2003, 2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __state_h #define __state_h #include "network.h" /* sm_ API: * * The server output is handled one line at a time. For each line * received, the current state is called with the SM_RECV event. The * [fmt] format string is modelled on the printf format string, * see game_printf and game_scanf for details. * * sm_recv(fmt, ...) * Match the entire current line from the start position. * Returns TRUE if there is a match * * sm_recv_prefix(fmt, ...) * Match a prefix of the current line from the start position. * Returns TRUE if there is a match, and sets the start position * to the character following the prefix. If the prefix does not * match, the function returns FALSE, and does not alter the * start position. * * sm_cancel_prefix() * Set start position in current line back to beginning. * * sm_send(fmt, ...) * Send data back to the server. * * The sm_ API maintains a record of the current state, and a stack of * previous states. Code can move to new states using the following * functions. * * sm_goto(new_state) * Set the current state to [new_state] * * sm_push(new_state) * Save the current state on the stack, then set the current * state to [new_state] * * sm_pop() * Pop the top state off the stack and make it the current state. * * sm_multipop() * Pop a number of states off the stack and set a new current state * accordingly. * * sm_pop_all_and_goto(new_state) * Clear the state stack, set the current state to [new_state] * * sm_stack_inspect() * Return the state at offset from the top of the stack. */ typedef enum { SM_NET_CONNECT = 10000, SM_NET_CONNECT_FAIL, SM_NET_CLOSE, SM_ENTER, SM_INIT, SM_RECV, SM_FREE } EventType; typedef struct StateMachine StateMachine; /* All state functions look like this */ typedef gboolean(*StateFunc) (StateMachine * sm, gint event); struct StateMachine { gpointer user_data; /* parameter for mode functions */ /* FIXME RC 2004-11-13 in practice: * it is NULL or a Player* * the value is set by sm_new. * Why? Can the player not be bound to a * StateMachine otherwise? */ StateFunc global; /* global state - test after current state */ StateFunc unhandled; /* global state - process unhandled states */ StateFunc stack[16]; /* handle sm_push() to save context */ const gchar *stack_name[16]; /* state names used for a stack dump */ gint stack_ptr; /* stack index */ const gchar *current_state; /* name of current state */ gchar *line; /* line passed in from network event */ gint line_offset; /* line prefix handling */ Session *ses; /* network session feeding state machine */ gint use_count; /* # functions is in use by */ gboolean is_dead; /* is this machine waiting to be killed? */ gboolean use_cache; /* cache the data that is sent */ GList *cache; /* cache for the delayed data */ }; StateMachine *sm_new(gpointer user_data); void sm_free(StateMachine * sm); void sm_close(StateMachine * sm); const gchar *sm_current_name(StateMachine * sm); void sm_state_name(StateMachine * sm, const gchar * name); gboolean sm_recv(StateMachine * sm, const gchar * fmt, ...); gboolean sm_recv_prefix(StateMachine * sm, const gchar * fmt, ...); void sm_cancel_prefix(StateMachine * sm); void sm_write(StateMachine * sm, const gchar * str); /** Send the data, even when caching is turned on */ void sm_write_uncached(StateMachine * sm, const gchar * str); void sm_send(StateMachine * sm, const gchar * fmt, ...); /** Cache the messages that are sent. * When the caching is turned off, all cached data is sent. * @param sm The statemachine * @param use_cache Turn the caching on/off */ void sm_set_use_cache(StateMachine * sm, gboolean use_cache); void sm_debug(const gchar * function, const gchar * state); #define sm_goto(a, b) do { sm_debug("sm_goto", #b); sm_goto_nomacro(a, b); } while (0) void sm_goto_nomacro(StateMachine * sm, StateFunc new_state); #define sm_goto_noenter(a, b) do { sm_debug("sm_goto_noenter", #b); sm_goto_noenter_nomacro(a, b); } while (0) void sm_goto_noenter_nomacro(StateMachine * sm, StateFunc new_state); #define sm_push(a, b) do { sm_debug("sm_push", #b); sm_push_nomacro(a, b); } while (0) void sm_push_nomacro(StateMachine * sm, StateFunc new_state); #define sm_push_noenter(a, b) do { sm_debug("sm_push_noenter", #b); sm_push_noenter_nomacro(a, b); } while (0) void sm_push_noenter_nomacro(StateMachine * sm, StateFunc new_state); void sm_pop(StateMachine * sm); void sm_multipop(StateMachine * sm, gint depth); void sm_pop_all_and_goto(StateMachine * sm, StateFunc new_state); StateFunc sm_current(StateMachine * sm); StateFunc sm_stack_inspect(const StateMachine * sm, guint offset); void sm_global_set(StateMachine * sm, StateFunc state); void sm_unhandled_set(StateMachine * sm, StateFunc state); gboolean sm_is_connected(StateMachine * sm); gboolean sm_connect(StateMachine * sm, const gchar * host, const gchar * port); void sm_use_fd(StateMachine * sm, gint fd, gboolean do_ping); void sm_dec_use_count(StateMachine * sm); void sm_inc_use_count(StateMachine * sm); /** Dump the stack */ void sm_stack_dump(StateMachine * sm); #endif pioneers-14.1/docs/0000755000175000017500000000000011760646035011224 500000000000000pioneers-14.1/docs/Makefile.am0000644000175000017500000000175411224207046013175 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 2006 Bas Wijnen # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA man_MANS += docs/pioneers.6 docs/pioneers-server-gtk.6 docs/pioneers-server-console.6 docs/pioneersai.6 docs/pioneers-meta-server.6 docs/pioneers-editor.6 pioneers-14.1/docs/pioneers.60000644000175000017500000000475011702641030013047 00000000000000.TH pioneers 6 "January 8, 2012" "pioneers" .SH NAME pioneers \- network implementation of Settlers of Catan .SH SYNOPSIS .B pioneers [ .BI \-\-server " server" ] [ .BI \-\-port " port" ] [ .BI \-\-name " name" ] .SH DESCRIPTION This manual page documents briefly the .B pioneers command. .PP .B Pioneers is an implementation of the popular, award-winning "Settlers of Catan" board game for the GNOME desktop environment. It uses a client/server model for networked play of between two and eight players. You will need to connect to a machine running either \fBpioneers-server-gtk\fP or \fBpioneers-server-console\fP to play. An AI client, \fBpioneersai\fP, is also available. .SH OPTIONS Pioneers accepts the standard GTK+/GNOME commandline options, and the following options: .TP .BI "\-s, \-\-server" " server" Hostname of the server .TP .BI "\-p, \-\-port" " port" Portname of the server .TP .BI "\-n, \-\-name" " name" Use this name for the player instead of the name in the settings file .TP .BI "\-v, \-\-spectator" Connect as spectator instead of as a player .TP .BI "\-m, \-\-meta\-server" " meta-server" Connect to this meta-server instead of the meta-server in the settings file .TP .BI "\-\-debug" Turn on debugging mode .TP .BI "\-\-version" Show the version and quit .PP When the server and port are both provided, the client automatically quits when the connection is broken. .SH ENVIRONMENT The default settings can be influenced with the following environment variable: .TP .B PIONEERS_META_SERVER The hostname of the meta-server. If it is not set, the default meta-server will be used. .SH FILES .B /usr/share/games/pioneers/themes/* .RS Themes for display of the map. Each theme goes in a separate subdirectory. .RE .B /usr/share/pixmaps/pioneers/* .RS Icons .RE .B /usr/share/pixmaps/pioneers.png .RS Main icon .RE .B $XDG_CONFIG_HOME/pioneers .RS Saved settings .RE .B $XDG_DATA_HOME/pioneers/themes .RS Personal themes .RE .SH AUTHOR This manual page was written by Steve Langasek , and updated by Roland Clobus . Pioneers was written by Dave Cole , Andy Heroff , and Roman Hodek , with contributions from many other developers on the Internet; see the AUTHORS file in the pioneers distribution for a complete list of contributing authors. .SH SEE ALSO More detailed user documentation is available in the online help. .PP .BR pioneers-server-gtk(6) ", " pioneers-server-console(6) ", " .B pioneersai(6) pioneers-14.1/docs/pioneers-server-gtk.60000644000175000017500000000376111702641030015137 00000000000000.TH pioneers-server-gtk 6 "January 8, 2012" "pioneers" .SH NAME pioneers-server-gtk \- graphical game server for Pioneers .SH SYNOPSIS .B pioneers-server-gtk .RI [ options ] .SH DESCRIPTION This manual page documents briefly the .B pioneers-server-gtk command. .PP .B Pioneers is an implementation of the popular, award-winning "Settlers of Catan" board game for the GNOME desktop environment. It uses a client/server model for networked play of between two and eight players. This program provides a GUI-configurable stand-alone server which you connect to from .B pioneers itself. .SH OPTIONS Pioneers accepts the standard GTK+ commandline options. .SH ENVIRONMENT The default settings of the server can be influenced with the following three environment variables: .TP .B PIONEERS_META_SERVER The hostname of the meta-server when no meta-server is specified in the user interface. (The settings file takes precedence) .TP .B PIONEERS_SERVER_NAME The hostname of the server. If it is not set, the hostname is determined by .BR hostname(1) . (The settings file takes precedence) .TP .B PIONEERS_DIR The path to the game definition files. If it is not set, the default installation path will be used. .SH FILES .B /usr/share/games/pioneers/*.game and .B $XDG_DATA_HOME/pioneers/*.game .RS Game definitions .RE .B /usr/share/pixmaps/pioneers-server.png .RS Game icon .RE .B $XDG_CONFIG_HOME/pioneers-server .RS Saved settings .RE .B /usr/share/games/pioneers/computer_names .RS A list of names the computer player can use .RE .SH AUTHOR This manual page was written by Steve Langasek , and updated by Roland Clobus . Pioneers was written by Dave Cole , Andy Heroff , and Roman Hodek , with contributions from many other developers on the Internet; see the AUTHORS file in the pioneers distribution for a complete list of contributing authors. .SH SEE ALSO .BR pioneers(6) ", " pioneers-server-console(6) ", " pioneersai(6) pioneers-14.1/docs/pioneers-server-console.60000644000175000017500000000764711702641030016023 00000000000000.TH pioneers-server-console 6 "January 8, 2012" "pioneers" .SH NAME pioneers-server-console \- command-line game server for Pioneers .SH SYNOPSIS .B pioneers-server-console [ OPTIONS ] .SH DESCRIPTION This manual page documents briefly the .B pioneers-server-console command. .PP .B Pioneers is an implementation of the popular, award-winning "Settlers of Catan" board game for the GNOME desktop environment. It uses a client/server model for networked play of between two and eight players. This program provides a console-only server that \fBpioneers\fP clients can connect to. .SH OPTIONS .SS Application options .BI "\-g,\-\-game\-title" " game title" Load the ruleset specified by \fIgame title\fP. The title can be found in the *.game files. You need quotes for titles with spaces. .TP .BI "\-\-file" "filename" Load the ruleset in the file \fIfilename\fP. .TP .BI "\-p,\-\-port" " port" Use port \fIport\fP for player connections. .TP .BI "\-P,\-\-players" " num" Start a game for \fInum\fP total players (including computer players). .TP .BI "\-v,\-\-points" " points" Specify the number of "victory points" required to win the game. .TP .BI "\-R,\-\-seven\-rule" [0|1|2] "Sevens rule": Specify gameplay behavior when a player rolls a seven. A value of \fI0\fP (the default) means that rolling a seven always moves the robber. A value of \fI1\fP requires the player to re-roll if a seven is rolled on the first two turns. A value of \fI2\fP means the player always re-rolls. .TP .BI "\-T,\-\-terrain" [0|1] Choose a terrain type: \fI0\fP for the default, or \fI1\fP for random terrain. .TP .BI "\-c,\-\-computer\-players" " num" Start up \fInum\fP computer players. .TP .BI "\-\-version" Show version information. .SS Meta-server options .TP .BI "\-r,\-\-register" Register with a meta server. The meta server to use can be overridden with the .B \-m option. Default meta sever: pioneers.debian.net .TP .BI "\-m,\-\-meta\-server" " metaserver" Register this server with the metaserver at the specified address. .TP .BI "\-n, \-\-hostname" " hostname" Use this hostname instead of the hostname reported by .BR hostname(1) . .SS Miscellaneous options .BI "\-x,\-\-auto\-quit" Automatically exit after a player has won. .TP .BI "\-k,\-\-empty\-timeout" " secs" Automatically stop the server if no one has connected after \fIsecs\fP seconds. .TP .BI "\-t,\-\-tournament" " mins" Tournament mode: add AI players after \fImins\fP minutes. .TP .BI "\-a,\-\-admin\-port" " port" Listen for administrative commands on port \fIport\fP. .TP .BI "\-s,\-\-admin\-wait" Don't start the game immediately; wait for a command on the admin port .RB ( \-a ) instead. .TP .BI "\-\-fixed\-seating\-order" Give players numbers according to the order they enter the game. .TP .BI "\-\-debug" Enable debug messages. .SH ENVIRONMENT The default settings of the server can be influenced with the following three environment variables: .TP .B PIONEERS_META_SERVER The hostname of the meta-server when no meta-server is specified on the command-line. .TP .B PIONEERS_SERVER_NAME The hostname of the server. If it is not set, the hostname is determined by .BR hostname(1) . .TP .B PIONEERS_DIR The path to the game definition files. If it is not set, the default installation path will be used. .SH FILES .B /usr/share/games/pioneers/*.game and .B $XDG_DATA_HOME/pioneers/*.game .RS Game definitions .RE .B /usr/share/games/pioneers/computer_names .RS A list of names the computer player can use .RE .SH AUTHOR This manual page was written by Steve Langasek , and updated by Roland Clobus . Pioneers was written by Dave Cole , Andy Heroff , and Roman Hodek , with contributions from many other developers on the Internet; see the AUTHORS file in the pioneers distribution for a complete list of contributing authors. .SH SEE ALSO .BR pioneers(6) ", " pioneers-server-gtk(6) ", " pioneersai(6) ", " hostname(1) pioneers-14.1/docs/pioneersai.60000644000175000017500000000332111702641030013352 00000000000000.TH pioneersai 6 "January 8, 2012" "pioneers" .SH NAME pioneersai \- Computer player for Pioneers .SH SYNOPSIS .B pioneersai [ .BI \-s " server" ] [ .BI \-p " port" ] .BI \-n " name" .if n .ti +5n [ .BI \-a " algorithm" ] [ .BI \-t " milliseconds" ] [ .BI \-c ] .SH DESCRIPTION This manual page documents briefly the .B pioneersai command. .PP .B Pioneers is an emulation of the Settlers of Catan board game which can be played over the internet. This is a computer player implementation that can take part in Pioneers games. .SH OPTIONS .TP 12 .BI "\-s,\-\-server" " server" Connect to a pioneers game running on \fIserver\fP. .TP .BI "\-p,\-\-port" " port" Connect to a pioneers game running on \fIport\fP. .TP .BI "\-n,\-\-name" " name" Specify \fIname\fP of the computer player. .TP .BI "\-a,\-\-algorithm" " algorithm" Specify \fIalgorithm\fP of the computer player. The only algorithm for an active partipant in a game is "greedy". Other allowed values are: lobbybot, logbot. .TP .BI "\-t,\-\-time" " milliseconds" Time to wait between turns, in \fImilliseconds\fP. Default is 1000. .TP .BI "\-c,\-\-chat\-free" Do not chat with other players. .TP .BI \-\-debug Enable debug messages. .TP .BI \-\-version Show version information. .SH AUTHOR This manual page was written by Jeff Breidenbach , and updated by Roland Clobus . Pioneers was written by Dave Cole , Andy Heroff , and Roman Hodek , with contributions from many other developers on the Internet; see the AUTHORS file in the pioneers distribution for a complete list of contributing authors. .SH SEE ALSO .BR pioneers(6) ", " pioneers-server-gtk(6) ", " pioneers-server-console(6) pioneers-14.1/docs/pioneers-meta-server.60000644000175000017500000000536711702641030015304 00000000000000.TH pioneers-meta-server 6 "January 8, 2012" "pioneers" .SH NAME pioneers-meta-server \- meta game server for Pioneers .SH SYNOPSIS .B pioneers-meta-server .RI [ options ] .SH DESCRIPTION .B Pioneers is an implementation of the popular, award-winning "Settlers of Catan" board game. It uses a client/server model for networked play. This program provides a piece of network infrastructure that helps match pioneers clients to pioneers servers. Casual players of pioneers probably do not need to run this program. .SH OPTIONS .TP .B \-?, \-\-help Print a short help text and exit. .TP .B \-d, \-\-daemon Run in daemon mode. .TP .BI "\-P, \-\-pidfile" " pidfile" .RI "Write the pid to " pidfile " (implies -d)" .TP .BI "\-r, \-\-redirect" " location" .RI "Redirect to another meta-server running at " location "." .TP .BI "\-s, \-\-servername" " hostname" .RI "Use " hostname " as hostname when creating servers." .TP .BI "\-p, \-\-port\-range" " from" \- "to" .RI "Use ports in the range " from "-" to " (inclusive) to start servers." It is advised not to include port 5557 in the range. (See BUGS below.) When this range is not specified, the meta-server will not be able to create new games. .TP .B \-\-debug Enable debug messages. .TP .B \-\-syslog-debug Duplicate the messages of the syslog to the console. .TP .B \-\-version Show version information. .SH ENVIRONMENT The default settings of the meta-server can be influenced with the following three environment variables: .TP .B PIONEERS_META_SERVER The hostname the meta-server will use when creating new games. This should be a hostname that can be resolved by all clients that will connect. .TP .B PIONEERS_SERVER_CONSOLE .RB "The path to " pioneers-server-console "." If it is not set, the default installation path will be used. .TP .B PIONEERS_DIR The path to the game definition files. If it is not set, the default installation path will be used. .SH FILES .B /usr/share/games/pioneers/*.game .RS Game definitions .RE .SH SIGNALS .B USR1 .RS Shutdown the meta-server gracefully (can be used to check for memory leaks) .RE .SH BUGS Do not include port 5557 in the .I \-\-port\-range argument because the meta-server uses this port. .SH AUTHOR This manual page was written by Jeff Breidenbach , and updated by Roland Clobus and Bas Wijnen . Pioneers was written by Dave Cole , Andy Heroff , and Roman Hodek , with contributions from many other developers on the Internet; see the AUTHORS file in the pioneers distribution or the help->about dialog in one of the graphical programs for a complete list of contributing authors. .SH SEE ALSO .BR pioneers(6) ", " pioneers-server-gtk(6) ", " pioneers-server-console(6) pioneers-14.1/docs/pioneers-editor.60000644000175000017500000000416611702641030014334 00000000000000.TH pioneers-editor 6 "January 8, 2012" "pioneers" .SH NAME pioneers-editor \- Editor for the Pioneers boardgame .SH SYNOPSIS .B pioneers-editor .BI [ filename ] .SH DESCRIPTION This manual page documents briefly the .B pioneers-editor command. .PP Pioneers is an implementation of the popular, award-winning "Settlers of Catan" board game for the GNOME desktop environment. It uses a client/server model for networked play of between two and eight players. You will need to connect to a machine running either \fBpioneers-server-gtk\fP or \fBpioneers-server-console\fP to play. An AI client, \fBpioneersai\fP, is also available. .PP .B Pioneers-editor can be used to create new board layouts. Clicking on the plus and minus signs on the side of the board will increase and decrease the board size respectively. Left clicking on a tile allows one to select the terrain type; Middle or right clicking allows one to set the chit number or port type and orientation. The chit number can also be set by pressing the number key(s) while the pointer is hovering over the tile. .PP In the settings tab, several game settings can be adjusted. .SH PLAYING Games created with pioneers-editor can be played with pioneers-server-gtk and pioneers-server-console, if they are installed in the global game directory. Alternatively, they can be played with pioneers-server-console, by using the .I \-\-file option. .SH OPTIONS Pioneers-editor accepts the standard GTK+/GNOME commandline options. See .I pioneers-editor --help for details. .SH FILES .B /usr/share/games/pioneers/*.game .RS Global game files. Games which are installed here can be selected by title, and played from pioneers-server-gtk. .SH AUTHOR This manual page was written by Bas Wijnen . Pioneers was written by Dave Cole , Andy Heroff , and Roman Hodek , with contributions from many other developers on the Internet; see the AUTHORS file in the pioneers distribution for a complete list of contributing authors. .SH SEE ALSO .BR pioneers(6) ", " pioneers-server-gtk(6) ", " pioneers-server-console(6) ", " .B pioneersai(6) pioneers-14.1/editor/0000755000175000017500000000000011760646033011560 500000000000000pioneers-14.1/editor/gtk/0000755000175000017500000000000011760646036012350 500000000000000pioneers-14.1/editor/gtk/Makefile.am0000644000175000017500000000321411711560325014314 00000000000000# Pioneers - Implementation of the excellent Settlers of Catan board game. # Go buy a copy. # # Copyright (C) 1999 Dave Cole # Copyright (C) 2003, 2006 Bas Wijnen # Copyright (C) 2006 Roland Clobus # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA icon_DATA += editor/gtk/pioneers-editor.png desktop_in_files += editor/gtk/pioneers-editor.desktop.in bin_PROGRAMS += pioneers-editor icons += editor/gtk/pioneers-editor.svg pioneers_editor_CPPFLAGS = $(gtk_cflags) pioneers_editor_SOURCES = \ editor/gtk/editor.c \ editor/gtk/game-devcards.c \ editor/gtk/game-devcards.h \ editor/gtk/game-buildings.c \ editor/gtk/game-buildings.h \ editor/gtk/game-resources.c \ editor/gtk/game-resources.h pioneers_editor_LDADD = $(gtk_libs) if USE_WINDOWS_ICON pioneers_editor_LDADD += editor/gtk/pioneers-editor.res CLEANFILES += editor/gtk/pioneers-editor.res endif windows_resources_output += editor/gtk/pioneers-editor.ico windows_resources_input += editor/gtk/pioneers-editor.rc pioneers-14.1/editor/gtk/editor.c0000644000175000017500000012330011755663642013727 00000000000000/* Pioneers - Implementation of the excellent Settlers of Catan board game. * Go buy a copy. * * Copyright (C) 2005 Brian Wellington * Copyright (C) 2005,2006 Roland Clobus * Copyright (C) 2005,2006 Bas Wijnen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "version.h" #ifdef HAVE_LOCALE_H #include #endif #include #include "authors.h" #include "aboutbox.h" #include "config-gnome.h" #include "game.h" #include "game-settings.h" #include "game-rules.h" #include "game-devcards.h" #include "game-buildings.h" #include "game-resources.h" #include "scrollable-text-view.h" #include "guimap.h" #include "theme.h" #include "colors.h" #include "common_gtk.h" #include "cards.h" #define MAINICON_FILE "pioneers-editor.png" #define MAP_WIDTH 550 /* default map width */ #define MAP_HEIGHT 400 /* default map height */ static GtkWidget *toplevel; static gchar *default_game; static gchar *window_title; static gchar *open_filename; static GameSettings *game_settings; static GameRules *game_rules; static GameDevCards *game_devcards; static GameBuildings *game_buildings; static GameResources *game_resources; static GtkWidget *game_title; static GtkWidget *game_description; static GtkWidget *game_comments; static GtkWidget *terrain_menu; static GtkWidget *roll_menu; static GtkWidget *roll_numbers[12 + 1]; static GtkCheckMenuItem *shuffle_tile; static GtkWidget *port_menu; static GtkWidget *port_directions[6]; static GtkWidget *hresize_buttons[4]; static GtkWidget *vresize_buttons[4]; typedef enum { RESIZE_INSERT_LEFT, RESIZE_REMOVE_LEFT, RESIZE_INSERT_RIGHT, RESIZE_REMOVE_RIGHT } hresize_type; /* order of vresize must match order of hresize */ typedef enum { RESIZE_INSERT_TOP, RESIZE_REMOVE_TOP, RESIZE_INSERT_BOTTOM, RESIZE_REMOVE_BOTTOM } vresize_type; static GuiMap *gmap; static Hex *current_hex; static const gchar *terrain_names[] = { /* Use an unique shortcut key for each resource */ N_("_Hill"), /* Use an unique shortcut key for each resource */ N_("_Field"), /* Use an unique shortcut key for each resource */ N_("_Mountain"), /* Use an unique shortcut key for each resource */ N_("_Pasture"), /* Use an unique shortcut key for each resource */ N_("F_orest"), /* Use an unique shortcut key for each resource */ N_("_Desert"), /* Use an unique shortcut key for each resource */ N_("_Sea"), /* Use an unique shortcut key for each resource */ N_("_Gold"), /* Use an unique shortcut key for each resource */ N_("_None") }; static const gchar *port_names[] = { /* Use an unique shortcut key for each port type */ N_("_Brick (2:1)"), /* Use an unique shortcut key for each port type */ N_("_Grain (2:1)"), /* Use an unique shortcut key for each port type */ N_("_Ore (2:1)"), /* Use an unique shortcut key for each port type */ N_("_Wool (2:1)"), /* Use an unique shortcut key for each port type */ N_("_Lumber (2:1)"), /* Use an unique shortcut key for each port type */ N_("_None"), /* Use an unique shortcut key for each port type */ N_("_Any (3:1)") }; static const gchar *port_direction_names[] = { /* East */ N_("East|E"), /* North east */ N_("North East|NE"), /* North west */ N_("North West|NW"), /* West */ N_("West|W"), /* South west */ N_("South West|SW"), /* South east */ N_("South East|SE") }; static void check_vp_cb(GObject * caller, gpointer main_window); static void error_dialog(const char *fmt, ...) { GtkWidget *dialog; gchar *buf; va_list ap; va_start(ap, fmt); buf = g_strdup_vprintf(fmt, ap); va_end(ap); dialog = gtk_message_dialog_new(GTK_WINDOW(toplevel), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", buf); g_free(buf); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void fill_map(Map * map) { gint x, y; for (y = 0; y < map->y_size; y++) { for (x = 0; x < map->x_size; x++) { if (x == 0 && y % 2 == 0 && map->shrink_left) { continue; } if (x == map->x_size - 1 && y % 2 == 1 && map->shrink_right) { continue; } if (map->grid[y][x] != NULL) { continue; } /* Add a default hex on the empty spot */ map_reset_hex(map, x, y); } } } static void canonicalize_map(Map * map) { Hex *hex; gint x, y; gint sequence_number; if (map->chits != NULL) g_array_free(map->chits, TRUE); map->chits = g_array_new(FALSE, FALSE, sizeof(gint)); sequence_number = 0; for (y = 0; y < map->y_size; y++) { for (x = 0; x < map->x_size; x++) { hex = map->grid[y][x]; if (hex == NULL) continue; if (hex->roll > 0) { g_array_append_val(map->chits, hex->roll); hex->chit_pos = sequence_number++; } else if (hex->terrain == DESERT_TERRAIN) { hex->chit_pos = sequence_number++; } } } } static gboolean terrain_has_chit(Terrain terrain) { if (terrain == HILL_TERRAIN || terrain == FIELD_TERRAIN || terrain == MOUNTAIN_TERRAIN || terrain == PASTURE_TERRAIN || terrain == FOREST_TERRAIN || terrain == GOLD_TERRAIN) return TRUE; return FALSE; } static void build_map_resize(GtkWidget * table, guint col, guint row, GtkOrientation dir, GtkWidget ** buttons, GCallback resize_callback) { /* symbols[] must match order of hresize_type and vresize_type; */ static const gchar *symbols[] = { GTK_STOCK_ADD, GTK_STOCK_REMOVE, GTK_STOCK_ADD, GTK_STOCK_REMOVE }; /* The order must match hresize_type and vresize_type, and also depends on the orientation */ static const gchar *tooltip[] = { N_("Insert a row"), N_("Delete a row"), N_("Insert a column"), N_("Delete a column") }; GtkWidget *box; gint i; if (dir == GTK_ORIENTATION_VERTICAL) { box = gtk_vbox_new(FALSE, 0); } else { box = gtk_hbox_new(FALSE, 0); } for (i = 0; i < 4; i++) { buttons[i] = GTK_WIDGET(gtk_tool_button_new_from_stock(symbols[i])); gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(buttons[i]), _(tooltip [i % 2 + (dir == GTK_ORIENTATION_VERTICAL ? 0 : 2)])); if (i < 2) { gtk_box_pack_start(GTK_BOX(box), buttons[i], FALSE, TRUE, 0); } else { gtk_box_pack_end(GTK_BOX(box), buttons[i], FALSE, TRUE, 0); } g_signal_connect(G_OBJECT(buttons[i]), "clicked", resize_callback, GINT_TO_POINTER(i)); } gtk_box_pack_start(GTK_BOX(box), gtk_fixed_new(), TRUE, TRUE, 0); gtk_table_attach(GTK_TABLE(table), box, col, col + 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); } static void scale_map(GuiMap * gmap) { GtkAllocation allocation; gtk_widget_get_allocation(gmap->area, &allocation); guimap_scale_to_size(gmap, allocation.width, allocation.height); gtk_widget_queue_draw(gmap->area); } static gint button_press_map_cb(GtkWidget * area, GdkEventButton * event, gpointer user_data) { GuiMap *gmap = user_data; GtkWidget *menu; const Hex *adjacent; gboolean port_ok; gint num_ports; gint i; if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; current_hex = guimap_find_hex(gmap, event->x, event->y); if (current_hex == NULL) return TRUE; menu = NULL; if (event->button == 1) { MapElement element; Node *current_node; gint distance_node; gint distance_hex; current_node = guimap_find_node(gmap, event->x, event->y); element.node = current_node; distance_node = guimap_distance_cursor(gmap, &element, MAP_NODE, event->x, event->y); element.hex = current_hex; distance_hex = guimap_distance_cursor(gmap, &element, MAP_HEX, event->x, event->y); if (distance_node < distance_hex) { current_node->no_setup = !current_node->no_setup; for (i = 0; i < G_N_ELEMENTS(current_node->hexes); i++) { guimap_draw_hex(gmap, current_node->hexes[i]); } return TRUE; } else { menu = terrain_menu; } } else if (event->button == 3 && current_hex->roll > 0) { menu = roll_menu; for (i = 2; i <= 12; i++) { if (roll_numbers[i] != NULL) gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(roll_numbers[i]), current_hex->roll == i); } gtk_check_menu_item_set_active(shuffle_tile, current_hex->shuffle); } else if (event->button == 3 && current_hex->terrain == SEA_TERRAIN) { num_ports = 0; for (i = 0; i < 6; i++) { adjacent = hex_in_direction(current_hex, i); port_ok = FALSE; if (adjacent != NULL && adjacent->terrain != LAST_TERRAIN && adjacent->terrain != SEA_TERRAIN) { num_ports++; if (current_hex->resource != NO_RESOURCE) port_ok = TRUE; } gtk_widget_set_sensitive(port_directions[i], port_ok); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM (port_directions [i]), current_hex->facing == i && port_ok); } if (num_ports > 0) menu = port_menu; } if (menu != NULL) gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } static gint key_press_map_cb(GtkWidget * area, GdkEventKey * event, gpointer user_data) { static gint last_x, last_y; static gchar *last_key; GuiMap *gmap = user_data; gint x, y; gboolean plus10; if (gtk_widget_get_window(area) == NULL || gmap->map == NULL) return FALSE; gtk_widget_get_pointer(area, &x, &y); current_hex = guimap_find_hex(gmap, x, y); if (current_hex == NULL || !terrain_has_chit(current_hex->terrain)) return TRUE; if (last_x == x && last_y == y && strcmp(last_key, "1") == 0) plus10 = TRUE; else plus10 = FALSE; if (!plus10 && strcmp(event->string, "2") == 0) current_hex->roll = 2; else if (strcmp(event->string, "3") == 0) current_hex->roll = 3; else if (strcmp(event->string, "4") == 0) current_hex->roll = 4; else if (strcmp(event->string, "5") == 0) current_hex->roll = 5; else if (strcmp(event->string, "6") == 0) current_hex->roll = 6; else if (strcmp(event->string, "8") == 0) current_hex->roll = 8; else if (strcmp(event->string, "9") == 0) current_hex->roll = 9; else if (plus10 && strcmp(event->string, "0") == 0) current_hex->roll = 10; else if (plus10 && strcmp(event->string, "1") == 0) current_hex->roll = 11; else if (plus10 && strcmp(event->string, "2") == 0) current_hex->roll = 12; guimap_draw_hex(gmap, current_hex); last_x = x; last_y = y; g_free(last_key); last_key = g_strdup(event->string); return TRUE; } static void update_resize_buttons(void) { gtk_widget_set_sensitive(hresize_buttons[RESIZE_REMOVE_LEFT], gmap->map->x_size > 1 || !(gmap->map->shrink_right || gmap->map->shrink_left)); gtk_widget_set_sensitive(hresize_buttons[RESIZE_REMOVE_RIGHT], gmap->map->x_size > 1 || !(gmap->map->shrink_right || gmap->map->shrink_left)); gtk_widget_set_sensitive(hresize_buttons[RESIZE_INSERT_LEFT], gmap->map->x_size < MAP_SIZE || gmap->map->shrink_left); gtk_widget_set_sensitive(hresize_buttons[RESIZE_INSERT_RIGHT], gmap->map->x_size < MAP_SIZE || gmap->map->shrink_right); gtk_widget_set_sensitive(vresize_buttons[RESIZE_REMOVE_TOP], gmap->map->y_size > 1 && (gmap->map->x_size < MAP_SIZE || gmap->map->shrink_left)); gtk_widget_set_sensitive(vresize_buttons[RESIZE_REMOVE_BOTTOM], gmap->map->y_size > 1); gtk_widget_set_sensitive(vresize_buttons[RESIZE_INSERT_TOP], gmap->map->y_size < MAP_SIZE && (gmap->map->x_size < MAP_SIZE || gmap->map->shrink_left)); gtk_widget_set_sensitive(vresize_buttons[RESIZE_INSERT_BOTTOM], gmap->map->y_size < MAP_SIZE); scale_map(gmap); guimap_display(gmap); } static void change_height(G_GNUC_UNUSED GtkWidget * menu, gpointer user_data) { switch (GPOINTER_TO_INT(user_data)) { case RESIZE_REMOVE_BOTTOM: map_modify_row_count(gmap->map, MAP_MODIFY_REMOVE, MAP_MODIFY_ROW_BOTTOM); break; case RESIZE_INSERT_BOTTOM: map_modify_row_count(gmap->map, MAP_MODIFY_INSERT, MAP_MODIFY_ROW_BOTTOM); break; case RESIZE_REMOVE_TOP: map_modify_row_count(gmap->map, MAP_MODIFY_REMOVE, MAP_MODIFY_ROW_TOP); break; case RESIZE_INSERT_TOP: map_modify_row_count(gmap->map, MAP_MODIFY_INSERT, MAP_MODIFY_ROW_TOP); break; } update_resize_buttons(); } static void change_width(G_GNUC_UNUSED GtkWidget * menu, gpointer user_data) { switch (GPOINTER_TO_INT(user_data)) { case RESIZE_REMOVE_RIGHT: map_modify_column_count(gmap->map, MAP_MODIFY_REMOVE, MAP_MODIFY_COLUMN_RIGHT); break; case RESIZE_INSERT_RIGHT: map_modify_column_count(gmap->map, MAP_MODIFY_INSERT, MAP_MODIFY_COLUMN_RIGHT); break; case RESIZE_REMOVE_LEFT: map_modify_column_count(gmap->map, MAP_MODIFY_REMOVE, MAP_MODIFY_COLUMN_LEFT); break; case RESIZE_INSERT_LEFT: map_modify_column_count(gmap->map, MAP_MODIFY_INSERT, MAP_MODIFY_COLUMN_LEFT); break; } update_resize_buttons(); } static GtkWidget *build_map(void) { GtkWidget *table; GtkWidget *area; table = gtk_table_new(4, 2, FALSE); gmap = guimap_new(); guimap_set_show_no_setup_nodes(gmap, TRUE); area = guimap_build_drawingarea(gmap, MAP_WIDTH, MAP_HEIGHT); gtk_widget_set_can_focus(area, TRUE); gtk_widget_add_events(gmap->area, GDK_ENTER_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK); g_signal_connect(G_OBJECT(gmap->area), "enter_notify_event", G_CALLBACK(gtk_widget_grab_focus), gmap); g_signal_connect(G_OBJECT(gmap->area), "button_press_event", G_CALLBACK(button_press_map_cb), gmap); g_signal_connect(G_OBJECT(gmap->area), "key_press_event", G_CALLBACK(key_press_map_cb), gmap); gtk_table_attach(GTK_TABLE(table), gmap->area, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); build_map_resize(table, 1, 2, GTK_ORIENTATION_VERTICAL, vresize_buttons, G_CALLBACK(change_height)); build_map_resize(table, 0, 3, GTK_ORIENTATION_HORIZONTAL, hresize_buttons, G_CALLBACK(change_width)); return table; } /** Builds the comments tab. * @return The comments tab. */ static GtkWidget *build_comments(void) { GtkWidget *vbox; GtkWidget *widget; vbox = gtk_vbox_new(FALSE, 5); widget = gtk_label_new_with_mnemonic("_Title"); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0); game_title = gtk_entry_new(); gtk_widget_show(game_title); gtk_box_pack_start(GTK_BOX(vbox), game_title, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget(GTK_LABEL(widget), game_title); widget = gtk_label_new_with_mnemonic("_Description"); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0); game_description = scrollable_text_view_new(); gtk_widget_show(game_description); gtk_box_pack_start(GTK_BOX(vbox), game_description, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget(GTK_LABEL(widget), scrollable_text_view_get_for_mnemonic (SCROLLABLE_TEXT_VIEW (game_description))); scrollable_text_view_set_text(SCROLLABLE_TEXT_VIEW (game_description), ""); widget = gtk_label_new_with_mnemonic("_Comments"); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0); game_comments = scrollable_text_view_new(); gtk_widget_show(game_comments); gtk_box_pack_start(GTK_BOX(vbox), game_comments, TRUE, TRUE, 0); gtk_label_set_mnemonic_widget(GTK_LABEL(widget), scrollable_text_view_get_for_mnemonic (SCROLLABLE_TEXT_VIEW (game_comments))); return vbox; } static gint select_terrain_cb(G_GNUC_UNUSED GtkWidget * menu, gpointer user_data) { Terrain terrain = GPOINTER_TO_INT(user_data); Hex *adjacent; gint i; if (terrain == current_hex->terrain) return TRUE; current_hex->terrain = terrain; if (terrain_has_chit(terrain)) { if (current_hex->roll == 0) current_hex->roll = 2; } else current_hex->roll = 0; if (terrain != SEA_TERRAIN) current_hex->resource = NO_RESOURCE; if (terrain == SEA_TERRAIN || terrain == LAST_TERRAIN) { for (i = 0; i < 6; i++) { adjacent = hex_in_direction(current_hex, i); if (adjacent != NULL && adjacent->resource != NO_RESOURCE && adjacent->facing == (i + 3) % 6) { adjacent->resource = NO_RESOURCE; adjacent->facing = 0; guimap_draw_hex(gmap, adjacent); } } } guimap_draw_hex(gmap, current_hex); /* XXX Since some edges may have changed, we need to redisplay */ guimap_display(gmap); return TRUE; } static GtkWidget *build_terrain_menu(void) { gint i; GtkWidget *menu; GtkWidget *item; GdkPixbuf *pixbuf; GtkWidget *image; gint width; gint height; MapTheme *theme = theme_get_current(); menu = gtk_menu_new(); for (i = 0; i <= LAST_TERRAIN; i++) { item = gtk_image_menu_item_new_with_mnemonic(gettext (terrain_names [i])); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(select_terrain_cb), GINT_TO_POINTER(i)); if (i == LAST_TERRAIN) continue; /* Use the default size, or smaller */ gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); if (height > width / theme->scaledata[i].aspect) { height = width / theme->scaledata[i].aspect; } else if (width > height * theme->scaledata[i].aspect) { width = height * theme->scaledata[i].aspect; } pixbuf = gdk_pixbuf_scale_simple(theme-> scaledata[i].native_image, width, height, GDK_INTERP_BILINEAR); image = gtk_image_new_from_pixbuf(pixbuf); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); } gtk_widget_show_all(menu); return menu; } static void select_roll_cb(GtkCheckMenuItem * menu_item, gpointer user_data) { if (gtk_check_menu_item_get_active(menu_item)) { current_hex->roll = GPOINTER_TO_INT(user_data); guimap_draw_hex(gmap, current_hex); } } static void select_shuffle_cb(GtkCheckMenuItem * menu_item, G_GNUC_UNUSED gpointer user_data) { current_hex->shuffle = gtk_check_menu_item_get_active(menu_item); } static GtkWidget *build_roll_menu(void) { GtkWidget *menu; gint i; gchar buffer[128]; MapTheme *theme = theme_get_current(); THEME_COLOR tcolor; GdkColor *color; GtkWidget *item; GtkWidget *label; menu = gtk_menu_new(); for (i = 2; i <= 12; i++) { if (i == 7) continue; tcolor = (i == 6 || i == 8) ? TC_CHIP_H_FG : TC_CHIP_FG; color = &theme->colors[tcolor].color; sprintf(buffer, "%d", color->red, color->green, color->blue, i); item = gtk_check_menu_item_new(); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), buffer); gtk_container_add(GTK_CONTAINER(item), label); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(select_roll_cb), GINT_TO_POINTER(i)); gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM (item), TRUE); roll_numbers[i] = item; } gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); /* Menu item */ item = gtk_check_menu_item_new_with_label(_("Shuffle")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(select_shuffle_cb), NULL); shuffle_tile = GTK_CHECK_MENU_ITEM(item); gtk_widget_show_all(menu); return menu; } static gint select_port_resource_cb(G_GNUC_UNUSED GtkWidget * menu, gpointer user_data) { gint i; if (current_hex->resource == NO_RESOURCE) { for (i = 0; i < 6; i++) { const Hex *adjacent; adjacent = hex_in_direction(current_hex, i); if (adjacent != NULL && adjacent->terrain != LAST_TERRAIN && adjacent->terrain != SEA_TERRAIN) { current_hex->facing = i; break; } } } current_hex->resource = GPOINTER_TO_INT(user_data); guimap_draw_hex(gmap, current_hex); return TRUE; } static void select_port_direction_cb(GtkCheckMenuItem * menu_item, gpointer user_data) { if (gtk_check_menu_item_get_active(menu_item)) { current_hex->facing = GPOINTER_TO_INT(user_data); guimap_draw_hex(gmap, current_hex); } } static GtkWidget *build_port_menu(void) { gint i; GtkWidget *item; GdkPixmap *pixmap; GtkWidget *image; GtkWidget *menu; MapTheme *theme = theme_get_current(); menu = gtk_menu_new(); for (i = 0; i <= ANY_RESOURCE; i++) { item = gtk_image_menu_item_new_with_mnemonic(gettext (port_names[i])); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(select_port_resource_cb), GINT_TO_POINTER(i)); pixmap = theme->port_tiles[i]; if (i >= NO_RESOURCE || pixmap == NULL) continue; image = gtk_image_new_from_pixmap(pixmap, NULL); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); } gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); for (i = 0; i < 6; i++) { item = gtk_check_menu_item_new_with_label(Q_ (port_direction_names [i])); gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM (item), TRUE); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(select_port_direction_cb), GINT_TO_POINTER(i)); port_directions[i] = item; } gtk_widget_show_all(menu); return menu; } static GtkWidget *build_settings(GtkWindow * main_window) { /* vbox */ /* outer_hbox */ /* inner_hbox */ /* lvbox */ /* fix */ /* inner_hbox */ /* vsep */ /* rvbox */ GtkWidget *vbox; GtkWidget *outer_hbox; GtkWidget *inner_hbox; GtkWidget *lvbox; GtkWidget *fix; GtkWidget *vsep; GtkWidget *rvbox; /* vbox */ vbox = gtk_vbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); /*outer_hbox */ outer_hbox = gtk_hbox_new(TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), outer_hbox, TRUE, TRUE, 0); /* inner_hbox */ inner_hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(outer_hbox), inner_hbox, TRUE, TRUE, 0); /* lvbox */ lvbox = gtk_vbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(inner_hbox), lvbox, TRUE, TRUE, 0); /* fix */ fix = gtk_fixed_new(); gtk_box_pack_start(GTK_BOX(inner_hbox), fix, FALSE, TRUE, 0); /* inner_hbox */ inner_hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(outer_hbox), inner_hbox, TRUE, TRUE, 0); /* vsep */ vsep = gtk_vseparator_new(); gtk_widget_show(vsep); gtk_box_pack_start(GTK_BOX(inner_hbox), vsep, FALSE, FALSE, 0); /* rvbox */ rvbox = gtk_vbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(inner_hbox), rvbox, TRUE, TRUE, 0); /* get elements */ game_settings = GAMESETTINGS(game_settings_new(TRUE)); game_rules = GAMERULES(game_rules_new()); game_resources = GAMERESOURCES(game_resources_new()); game_devcards = GAMEDEVCARDS(game_devcards_new()); game_buildings = GAMEBUILDINGS(game_buildings_new()); /* Caption */ build_frame(lvbox, _("Game parameters"), GTK_WIDGET(game_settings), FALSE); /* Caption */ build_frame(lvbox, _("Rules"), GTK_WIDGET(game_rules), FALSE); /* Caption */ build_frame(lvbox, _("Resources"), GTK_WIDGET(game_resources), FALSE); /* Caption */ build_frame(rvbox, _("Buildings"), GTK_WIDGET(game_buildings), FALSE); /* Caption */ build_frame(rvbox, _("Development cards"), GTK_WIDGET(game_devcards), FALSE); g_signal_connect(G_OBJECT(game_settings), "check", G_CALLBACK(check_vp_cb), main_window); return vbox; } static void set_window_title(const gchar * title) { gchar *str; g_free(window_title); if (title == NULL) { title = "Untitled"; window_title = NULL; } else window_title = g_strdup(title); /* Application caption */ str = g_strdup_printf("%s: %s", _("Pioneers Editor"), title); gtk_window_set_title(GTK_WINDOW(toplevel), str); g_free(str); gtk_entry_set_text(GTK_ENTRY(game_title), window_title); } static void apply_params(const GameParams * params) { gint i; set_window_title(params->title); game_rules_set_random_terrain(game_rules, params->random_terrain); game_rules_set_strict_trade(game_rules, params->strict_trade); game_rules_set_domestic_trade(game_rules, params->domestic_trade); game_settings_set_players(game_settings, params->num_players); game_rules_set_sevens_rule(game_rules, params->sevens_rule); game_settings_set_victory_points(game_settings, params->victory_points); /* check_victory_at_end_of_turn not needed in the editor */ for (i = 1; i < NUM_BUILD_TYPES; i++) game_buildings_set_num_buildings(game_buildings, i, params->num_build_type [i]); game_resources_set_num_resources(game_resources, params->resource_count); for (i = 0; i < NUM_DEVEL_TYPES; i++) game_devcards_set_num_cards(game_devcards, i, params->num_develop_type[i]); /* Do not disable the pirate rule if currently no ships are present */ game_rules_set_use_pirate(game_rules, params->use_pirate, 1); game_rules_set_island_discovery_bonus(game_rules, params->island_discovery_bonus); scrollable_text_view_set_text(SCROLLABLE_TEXT_VIEW(game_comments), params->comments); scrollable_text_view_set_text(SCROLLABLE_TEXT_VIEW (game_description), params->description); map_free(gmap->map); gmap->map = map_copy(params->map); } /** Returns params found in game_rules, game_settings, and other settings. * @return Params found in settings. */ static GameParams *get_params(void) { GameParams *params = params_new(); gint i; params->title = g_strdup(window_title); params->random_terrain = game_rules_get_random_terrain(game_rules); params->strict_trade = game_rules_get_strict_trade(game_rules); params->domestic_trade = game_rules_get_domestic_trade(game_rules); params->num_players = game_settings_get_players(game_settings); params->sevens_rule = game_rules_get_sevens_rule(game_rules); params->victory_points = game_settings_get_victory_points(game_settings); /* check_victory_at_end_of_turn not needed in the editor */ for (i = 1; i < NUM_BUILD_TYPES; i++) params->num_build_type[i] = game_buildings_get_num_buildings(game_buildings, i); params->resource_count = game_resources_get_num_resources(game_resources); for (i = 0; i < NUM_DEVEL_TYPES; i++) params->num_develop_type[i] = game_devcards_get_num_cards(game_devcards, i); params->use_pirate = game_rules_get_use_pirate(game_rules); params->island_discovery_bonus = game_rules_get_island_discovery_bonus(game_rules); params->comments = scrollable_text_view_get_text(SCROLLABLE_TEXT_VIEW (game_comments)); params->description = scrollable_text_view_get_text(SCROLLABLE_TEXT_VIEW (game_description)); params->map = map_copy(gmap->map); return params; } static void load_game(const gchar * file, gboolean is_reload) { const gchar *gamefile; GameParams *params; gchar *new_filename; gint i; if (file == NULL) gamefile = default_game; else gamefile = file; params = params_load_file(gamefile); if (params == NULL) { error_dialog(_("Failed to load '%s'"), file); return; } if (file == NULL) { g_free(params->title); params->title = g_strdup("Untitled"); map_free(params->map); params->map = map_new(); for (i = 0; i < 6; i++) { map_modify_row_count(params->map, MAP_MODIFY_INSERT, MAP_MODIFY_ROW_BOTTOM); } for (i = 0; i < 11; i++) { map_modify_column_count(params->map, MAP_MODIFY_INSERT, MAP_MODIFY_COLUMN_RIGHT); } /* Chits array will be constructed later */ params->map->chits = NULL; new_filename = NULL; } else { new_filename = g_strdup(file); config_set_string("editor/last-game", new_filename); } guimap_reset(gmap); apply_params(params); params_free(params); if (open_filename != NULL) g_free(open_filename); open_filename = new_filename; map_move_robber(gmap->map, -1, -1); fill_map(gmap->map); if (is_reload) { scale_map(gmap); guimap_display(gmap); } update_resize_buttons(); } static void save_game(const gchar * file) { GameParams *params = get_params(); canonicalize_map(params->map); if (!params_write_file(params, file)) error_dialog(_("Failed to save to '%s'"), file); else config_set_string("editor/last-game", file); params_free(params); } static void new_game_menu_cb(void) { load_game(NULL, TRUE); } static void add_file_filter(GtkFileChooser * file_chooser) { GtkFileFilter *filter; filter = gtk_file_filter_new(); /* Name of the file filter: show only games */ gtk_file_filter_set_name(filter, _("Games")); gtk_file_filter_add_pattern(filter, "*.game"); gtk_file_chooser_add_filter(file_chooser, filter); filter = gtk_file_filter_new(); /* Name of the file filter: show all files */ gtk_file_filter_set_name(filter, _("Unfiltered")); gtk_file_filter_add_pattern(filter, "*"); gtk_file_chooser_add_filter(file_chooser, filter); } static void load_game_menu_cb(void) { GtkWidget *dialog; gchar *directory; dialog = gtk_file_chooser_dialog_new( /* Dialog caption */ _("Open Game"), GTK_WINDOW(toplevel), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); directory = g_build_filename(g_get_user_data_dir(), "pioneers", NULL); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), directory); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), directory, NULL); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), get_pioneers_dir(), NULL); g_free(directory); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), default_game); add_file_filter(GTK_FILE_CHOOSER(dialog)); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { char *file; file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog)); load_game(file, TRUE); g_free(file); scale_map(gmap); guimap_display(gmap); } gtk_widget_destroy(dialog); } static void save_as_menu_cb(void) { GtkWidget *dialog; gchar *directory; dialog = gtk_file_chooser_dialog_new( /* Dialog caption */ _("Save As..."), GTK_WINDOW(toplevel), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); directory = g_build_filename(g_get_user_data_dir(), "pioneers", NULL); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), directory); gtk_file_chooser_add_shortcut_folder(GTK_FILE_CHOOSER(dialog), directory, NULL); g_free(directory); add_file_filter(GTK_FILE_CHOOSER(dialog)); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *file; file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog)); save_game(file); if (open_filename == NULL) open_filename = file; else g_free(file); } gtk_widget_destroy(dialog); } static void save_game_menu_cb(void) { if (open_filename == NULL) save_as_menu_cb(); else save_game(open_filename); } static void change_title_menu_cb(void) { GtkWidget *dialog, *vbox, *hbox, *label, *entry; dialog = gtk_dialog_new_with_buttons( /* Dialog caption */ _("Change Title"), GTK_WINDOW(toplevel), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); g_signal_connect(G_OBJECT(dialog), "destroy", G_CALLBACK(gtk_widget_destroyed), &dialog); gtk_widget_realize(dialog); gdk_window_set_functions(gtk_widget_get_window(dialog), GDK_FUNC_MOVE | GDK_FUNC_CLOSE); vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); /* Label */ label = gtk_label_new(_("New title:")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry), 60); gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); if (window_title != NULL) gtk_entry_set_text(GTK_ENTRY(entry), window_title); gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); gtk_widget_show_all(dialog); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) set_window_title(gtk_entry_get_text(GTK_ENTRY(entry))); gtk_widget_destroy(dialog); } static void check_vp_cb(G_GNUC_UNUSED GObject * caller, gpointer main_window) { GameParams *params; params = get_params(); check_victory_points(params, main_window); params_free(params); } static void exit_cb(void) { gtk_main_quit(); } #ifdef HAVE_HELP /* Commented out, until the help is written static void contents_menu_cb(void) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(toplevel), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, _("There is no help")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } */ #endif static void about_menu_cb(void) { const gchar *authors[] = { AUTHORLIST }; /* About dialog caption */ aboutbox_display(_("About Pioneers Game Editor"), authors); } /** Toggles full screen mode. * @param GtkToggleAction The calling action. * @param main_window The window to toggle full screen mode. */ static void toggle_full_screen_cb(GtkToggleAction * caller, gpointer main_window) { if (gtk_toggle_action_get_active(caller)) { gtk_window_fullscreen(GTK_WINDOW(main_window)); } else { gtk_window_unfullscreen(GTK_WINDOW(main_window)); } } static void zoom_normal_cb(void) { guimap_zoom_normal(gmap); } static void zoom_center_map_cb(void) { guimap_zoom_center_map(gmap); } static GtkActionEntry entries[] = { {"FileMenu", NULL, /* Menu entry */ N_("_File"), NULL, NULL, NULL}, {"ViewMenu", NULL, /* Menu entry */ N_("_View"), NULL, NULL, NULL}, {"HelpMenu", NULL, /* Menu entry */ N_("_Help"), NULL, NULL, NULL}, {"New", GTK_STOCK_NEW, /* Menu entry */ N_("_New"), "N", N_("Create a new game"), new_game_menu_cb}, {"Open", GTK_STOCK_OPEN, /* Menu entry */ N_("_Open..."), "O", /* Tooltip for Open menu entry */ N_("Open an existing game"), load_game_menu_cb}, {"Save", GTK_STOCK_SAVE, /* Menu entry */ N_("_Save"), "S", /* Tooltip for Save menu entry */ N_("Save game"), save_game_menu_cb}, {"SaveAs", GTK_STOCK_SAVE_AS, /* Menu entry */ N_("Save _As..."), "S", /* Tooltip for Save As menu entry */ N_("Save as"), save_as_menu_cb}, {"ChangeTitle", NULL, /* Menu entry */ N_("_Change Title"), "T", /* Tooltip for Change Title menu entry */ N_("Change game title"), change_title_menu_cb}, {"CheckVP", GTK_STOCK_APPLY, /* Menu entry */ N_("_Check Victory Point Target"), NULL, /* Tooltip for Check Victory Point Target menu entry */ N_("Check whether the game can be won"), G_CALLBACK(check_vp_cb)}, {"Quit", GTK_STOCK_QUIT, /* Menu entry */ N_("_Quit"), "Q", /* Tooltip for Quit menu entry */ N_("Quit"), exit_cb}, {"Full", GTK_STOCK_ZOOM_FIT, /* Menu entry */ N_("_Reset"), "0", /* Tooltip for Reset menu entry */ N_("View the full map"), zoom_normal_cb}, {"Center", NULL, /* Menu entry */ N_("_Center"), NULL, /* Tooltip for Center menu entry */ N_("Center the map"), zoom_center_map_cb}, #ifdef HAVE_HELP /* Disable this item, until the help is written {"Contents", GTK_STOCK_HELP, N_("_Contents"), "F1", N_("Contents"), contents_menu_cb}, */ #endif {"About", NULL, /* Menu entry */ N_("_About Pioneers Editor"), NULL, /* Tooltip for About Pioneers Editor menu entry */ N_("Information about Pioneers Editor"), about_menu_cb}, }; static GtkToggleActionEntry toggle_entries[] = { {"FullScreen", GTK_STOCK_FULLSCREEN, /* Menu entry */ N_("_Fullscreen"), "Return", /* Tooltip for Fullscreen menu entry */ N_("Set window to full screen mode"), G_CALLBACK(toggle_full_screen_cb), FALSE} }; /* *INDENT-OFF* */ static const char *ui_description = "" " " "