# HG changeset patch # User Elliott Sales de Andrade # Date 1248760154 0 # Node ID b960be0f3423a5b18b54e494ee0e904f318b00de # Parent 1b6ac48c5ffa807e519b847cb89f014d7df96b13# Parent 2e49cbdd5040ffe21612820f039ac5aa2f6a1a65 propagate from branch 'im.pidgin.pidgin' (head 31e040ab1b9ac3ec6250c3e89b47f8df06c03879) to branch 'im.pidgin.cpw.qulogic.gtk3' (head 1153f36f9a7f396da1c60c96af0b347a9739a948) diff -r 1b6ac48c5ffa -r b960be0f3423 .mtn-ignore --- a/.mtn-ignore Tue Jul 28 05:47:09 2009 +0000 +++ b/.mtn-ignore Tue Jul 28 05:49:14 2009 +0000 @@ -31,6 +31,8 @@ doc/finch.1$ doc/pidgin.1$ doc/html +package_revision.h +package_revision_raw.txt pidgin.apspec$ pidgin.desktop$ pidgin.spec$ @@ -48,6 +50,7 @@ pidgin/win32/pidgin_exe_rc.rc$ install-sh libpurple/dbus-bindings.c +libpurple/dbus-signals.c libpurple/dbus-types.c libpurple/dbus-types.h libpurple/example/nullclient diff -r 1b6ac48c5ffa -r b960be0f3423 ChangeLog --- a/ChangeLog Tue Jul 28 05:47:09 2009 +0000 +++ b/ChangeLog Tue Jul 28 05:49:14 2009 +0000 @@ -3,14 +3,15 @@ version 2.6.0 (??/??/2009): libpurple: * Theme support in libpurple thanks to Justin Rodriguez's summer of code - project. With some minor additions and clean ups from Paul Aurich. + project, with some minor additions and cleanups from Paul Aurich. * Voice & Video framework in libpurple, thanks to Mike Ruprecht's summer of code project in 2008. * It should no longer be possible to end up with duplicates of buddies in a group on the buddy list. * Removed the unmaintained and unneeded toc protocol plugin. * Fixed NTLM authentication on big-endian systems. - * Various memory cleanups when unloading libpurple. (Nick Hebner) + * Various memory cleanups when unloading libpurple. (Nick Hebner and + Stefan Becker) * Report idle time 'From last message sent' should work properly. * DNS servers are re-read when DNS queries fail in case the system has moved to a new network and the old servers are not accessible. @@ -36,7 +37,7 @@ (Aman Gupta) * Don't fork a DNS resolver process to resolve IP addresses. (Aman Gupta) * Better handling of corrupt certificates in the TLS Peers cache. - * More efficient purple_find_buddies() and purple_find_group() functions. + * More efficient buddy list and conversation search functions. (Jan Kaluza and Aman Gupta) * Internationalized Domain Names are supported when libpurple is compiled against the GNU IDN library. @@ -119,10 +120,11 @@ (Sulabh Mahajan) * Addition of MSN buddies to Yahoo accounts by adding them as 'msn/buddy@somedomain.com' is now supported. (Sulabh Mahajan) - * Further fixes for buddy pictures, aliases etc. + * Further fixes for buddy pictures, aliases, etc. * Yahoo! and Yahoo! JAPAN are now two separate protocol plugins that share common protocol code. You can now have the same account on both - networks. + networks. Accounts should be seamlessly migrated to the new + arrangement. * Ability to set personal details for an account and for buddies in the buddylist. diff -r 1b6ac48c5ffa -r b960be0f3423 ChangeLog.API --- a/ChangeLog.API Tue Jul 28 05:47:09 2009 +0000 +++ b/ChangeLog.API Tue Jul 28 05:49:14 2009 +0000 @@ -15,6 +15,9 @@ * account-destroying * blist-node-added and blist-node-removed signals (see blist-signals.dox) + * Three Blist UI ops used to overload libpurple's built-in saving + of the buddy list to blist.xml. If a UI implements these, it probably + wants to add the buddies itself and not call purple_blist_load. * Jabber plugin signals (see jabber-signals.dox) * purple_account_remove_setting * purple_buddy_destroy @@ -85,9 +88,13 @@ * purple_find_buddies is now more efficient in the case where it is enumerating all the buddies for an account. * purple_find_group is now more efficient for large numbers of groups. + * purple_find_conversation_with_account is more efficient for large + numbers of concurrent conversations. * All DNS routines support internationalized domain names (IDNs) when libpurple is compiled with GNU libidn. * status is set before emitting signals in purple_xfer_set_status. + * Creating multiple distinct chats with the same name (i.e. "MSN Chat") + is deprecated and will be removed in libpurple 3.0.0. Deprecated: * buddy-added and buddy-removed blist signals diff -r 1b6ac48c5ffa -r b960be0f3423 Makefile.mingw --- a/Makefile.mingw Tue Jul 28 05:47:09 2009 +0000 +++ b/Makefile.mingw Tue Jul 28 05:49:14 2009 +0000 @@ -73,7 +73,7 @@ .PHONY: all docs install installer installer_nogtk installer_debug installers clean uninstall create_release_install_dir -all: $(PIDGIN_CONFIG_H) +all: $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) ifndef DISABLE_NLS @@ -125,7 +125,7 @@ $(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) clean $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) clean $(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) clean - rm -f $(PIDGIN_CONFIG_H) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip + rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip rm -rf doc/html Doxyfile.mingw uninstall: diff -r 1b6ac48c5ffa -r b960be0f3423 configure.ac --- a/configure.ac Tue Jul 28 05:47:09 2009 +0000 +++ b/configure.ac Tue Jul 28 05:49:14 2009 +0000 @@ -1640,14 +1640,14 @@ dnl # Thanks go to Evolution for the checks. dnl ####################################################################### -AC_ARG_WITH(with-system-ssl-certs, [AC_HELP_STRING([--with-system-ssl-certs=], [directory containing system-wide SSL CA certificates])]) +AC_ARG_WITH(system-ssl-certs, [AC_HELP_STRING([--with-system-ssl-certs=], [directory containing system-wide SSL CA certificates])], [ssl_certificates_dir=$withval]) SSL_CERTIFICATES_DIR="" -if ! test -z "$with_system_ssl_certs" ; then - if ! test -d "$with_system_ssl_certs" ; then - AC_MSG_ERROR([$with_system_ssl_certs does not exist, if this is the correct location please make sure that it exists.]) +if ! test -z "$ssl_certificates_dir" ; then + if ! test -d "$ssl_certificates_dir" ; then + AC_MSG_ERROR([$ssl_certificates_dir does not exist, if this is the correct location please make sure that it exists.]) fi - SSL_CERTIFICATES_DIR="$with_system_ssl_certs" + SSL_CERTIFICATES_DIR="$ssl_certificates_dir" fi AC_SUBST(SSL_CERTIFICATES_DIR) AM_CONDITIONAL(INSTALL_SSL_CERTIFICATES, test "x$SSL_CERTIFICATES_DIR" = "x") diff -r 1b6ac48c5ffa -r b960be0f3423 finch/gntsound.c --- a/finch/gntsound.c Tue Jul 28 05:47:09 2009 +0000 +++ b/finch/gntsound.c Tue Jul 28 05:49:14 2009 +0000 @@ -214,7 +214,7 @@ const char *message, PurpleSoundEventID event) { PurpleConversation *conv = purple_find_conversation_with_account( - PURPLE_CONV_TYPE_ANY, receiver, account); + PURPLE_CONV_TYPE_IM, receiver, account); play_conv_event(conv, event); } diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/Makefile.am --- a/libpurple/Makefile.am Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/Makefile.am Tue Jul 28 05:49:14 2009 +0000 @@ -151,6 +151,7 @@ theme-manager.h \ upnp.h \ util.h \ + valgrind.h \ value.h \ xmlnode.h \ whiteboard.h @@ -273,7 +274,8 @@ $(dbus_sources) noinst_HEADERS= \ - internal.h + internal.h \ + valgrind.h libpurpleincludedir=$(includedir)/libpurple libpurpleinclude_HEADERS = \ diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/account.c --- a/libpurple/account.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/account.c Tue Jul 28 05:49:14 2009 +0000 @@ -1534,6 +1534,8 @@ void purple_account_set_username(PurpleAccount *account, const char *username) { + PurpleBlistUiOps *blist_ops; + g_return_if_fail(account != NULL); g_free(account->username); @@ -1543,7 +1545,9 @@ /* if the name changes, we should re-write the buddy list * to disk with the new name */ - purple_blist_schedule_save(); + blist_ops = purple_blist_get_ui_ops(); + if (blist_ops != NULL && blist_ops->save_account != NULL) + blist_ops->save_account(account); } void diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/accountopt.c --- a/libpurple/accountopt.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/accountopt.c Tue Jul 28 05:49:14 2009 +0000 @@ -111,6 +111,16 @@ return option; } +static void +purple_account_option_list_free(gpointer data, gpointer user_data) +{ + PurpleKeyValuePair *kvp = data; + + g_free(kvp->value); + g_free(kvp->key); + g_free(kvp); +} + void purple_account_option_destroy(PurpleAccountOption *option) { @@ -127,7 +137,7 @@ { if (option->default_value.list != NULL) { - g_list_foreach(option->default_value.list, (GFunc)g_free, NULL); + g_list_foreach(option->default_value.list, purple_account_option_list_free, NULL); g_list_free(option->default_value.list); } } @@ -183,7 +193,7 @@ if (option->default_value.list != NULL) { - g_list_foreach(option->default_value.list, (GFunc)g_free, NULL); + g_list_foreach(option->default_value.list, purple_account_option_list_free, NULL); g_list_free(option->default_value.list); } diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/blist.c --- a/libpurple/blist.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/blist.c Tue Jul 28 05:49:14 2009 +0000 @@ -393,13 +393,42 @@ return FALSE; } -void -purple_blist_schedule_save() +static void +_purple_blist_schedule_save() { if (save_timer == 0) save_timer = purple_timeout_add_seconds(5, save_cb, NULL); } +static void +purple_blist_save_account(PurpleAccount *account) +{ +#if 1 + _purple_blist_schedule_save(); +#else + if (account != NULL) { + /* Save the buddies and privacy data for this account */ + } else { + /* Save all buddies and privacy data */ + } +#endif +} + +static void +purple_blist_save_node(PurpleBlistNode *node) +{ + _purple_blist_schedule_save(); +} + +void purple_blist_schedule_save() +{ + PurpleBlistUiOps *ops = purple_blist_get_ui_ops(); + + /* Save everything */ + if (ops && ops->save_account) + ops->save_account(NULL); +} + /********************************************************************* * Reading from disk * @@ -971,7 +1000,8 @@ g_free(buddy->name); buddy->name = g_strdup(name); - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode *) buddy); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode *)buddy); @@ -1011,7 +1041,8 @@ g_free(new_alias); /* could be "\0" */ } - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode*) contact); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode *)contact); @@ -1056,7 +1087,8 @@ g_free(new_alias); /* could be "\0" */ } - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode*) chat); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode *)chat); @@ -1092,7 +1124,8 @@ g_free(new_alias); /* could be "\0" */ } - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode*) buddy); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode *)buddy); @@ -1133,7 +1166,8 @@ g_free(new_alias); /* could be "\0"; */ } - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode*) buddy); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode *)buddy); @@ -1235,7 +1269,8 @@ } /* Save our changes */ - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode*) source); /* Update the UI */ if (ops && ops->update) @@ -1493,8 +1528,6 @@ * reinitialize it */ if (ops && ops->new_node) ops->new_node(cnode); - - purple_blist_schedule_save(); } if (node != NULL) { @@ -1523,7 +1556,8 @@ } } - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node(cnode); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode *)cnode); @@ -1601,8 +1635,6 @@ if (ops && ops->remove) ops->remove(purplebuddylist, bnode); - purple_blist_schedule_save(); - if (bnode->parent->parent != (PurpleBlistNode*)g) { struct _purple_hbuddy hb; hb.name = (gchar *)purple_normalize(buddy->account, buddy->name); @@ -1667,7 +1699,8 @@ purple_contact_invalidate_priority_buddy(purple_buddy_get_contact(buddy)); - purple_blist_schedule_save(); + if (ops && ops->save_node) + ops->save_node((PurpleBlistNode*) buddy); if (ops && ops->update) ops->update(purplebuddylist, (PurpleBlistNode*)buddy); @@ -1886,7 +1919,8 @@ if (ops && ops->remove) ops->remove(purplebuddylist, cnode); - purple_blist_schedule_save(); + if (ops && ops->remove_node) + ops->remove_node(cnode); } if (node && (PURPLE_BLIST_NODE_IS_CONTACT(node) || @@ -1912,7 +1946,13 @@ g->currentsize++; g->totalsize++; - purple_blist_schedule_save(); + if (ops && ops->save_node) + { + if (cnode->child) + ops->save_node(cnode); + for (bnode = cnode->child; bnode; bnode = bnode->next) + ops->save_node(bnode); + } if (ops && ops->update) { @@ -2012,7 +2052,11 @@ purplebuddylist->root = gnode; } - purple_blist_schedule_save(); + if (ops && ops->save_node) { + ops->save_node(gnode); + for (node = gnode->child; node; node = node->next) + ops->save_node(node); + } if (ops && ops->update) { ops->update(purplebuddylist, gnode); @@ -2058,12 +2102,13 @@ if (node->next) node->next->prev = node->prev; - purple_blist_schedule_save(); - /* Update the UI */ if (ops && ops->remove) ops->remove(purplebuddylist, node); + if (ops && ops->remove_node) + ops->remove_node(node); + purple_signal_emit(purple_blist_get_handle(), "blist-node-removed", PURPLE_BLIST_NODE(contact)); @@ -2119,8 +2164,6 @@ } } - purple_blist_schedule_save(); - /* Remove this buddy from the buddies hash table */ hb.name = (gchar *)purple_normalize(buddy->account, buddy->name); hb.account = buddy->account; @@ -2134,6 +2177,9 @@ if (ops && ops->remove) ops->remove(purplebuddylist, node); + if (ops && ops->remove_node) + ops->remove_node(node); + /* Signal that the buddy has been removed before freeing the memory for it */ purple_signal_emit(purple_blist_get_handle(), "buddy-removed", buddy); @@ -2176,13 +2222,15 @@ } group->totalsize--; - purple_blist_schedule_save(); } /* Update the UI */ if (ops && ops->remove) ops->remove(purplebuddylist, node); + if (ops && ops->remove_node) + ops->remove_node(node); + purple_signal_emit(purple_blist_get_handle(), "blist-node-removed", PURPLE_BLIST_NODE(chat)); @@ -2217,12 +2265,13 @@ g_hash_table_remove(groups_cache, key); g_free(key); - purple_blist_schedule_save(); - /* Update the UI */ if (ops && ops->remove) ops->remove(purplebuddylist, node); + if (ops && ops->remove_node) + ops->remove_node(node); + purple_signal_emit(purple_blist_get_handle(), "blist-node-removed", PURPLE_BLIST_NODE(group)); @@ -2383,6 +2432,9 @@ hb.name = (gchar *)purple_normalize(account, name); for (group = purplebuddylist->root; group; group = group->next) { + if (!group->child) + continue; + hb.group = group; if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb))) { return buddy; @@ -2432,6 +2484,9 @@ hb.account = account; for (node = purplebuddylist->root; node != NULL; node = node->next) { + if (!node->child) + continue; + hb.group = node; if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb)) != NULL) ret = g_slist_prepend(ret, buddy); @@ -2827,13 +2882,16 @@ void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key) { + PurpleBlistUiOps *ops; g_return_if_fail(node != NULL); g_return_if_fail(node->settings != NULL); g_return_if_fail(key != NULL); g_hash_table_remove(node->settings, key); - purple_blist_schedule_save(); + ops = purple_blist_get_ui_ops(); + if (ops && ops->save_node) + ops->save_node(node); } void @@ -2863,6 +2921,7 @@ purple_blist_node_set_bool(PurpleBlistNode* node, const char *key, gboolean data) { PurpleValue *value; + PurpleBlistUiOps *ops; g_return_if_fail(node != NULL); g_return_if_fail(node->settings != NULL); @@ -2873,7 +2932,9 @@ g_hash_table_replace(node->settings, g_strdup(key), value); - purple_blist_schedule_save(); + ops = purple_blist_get_ui_ops(); + if (ops && ops->save_node) + ops->save_node(node); } gboolean @@ -2899,6 +2960,7 @@ purple_blist_node_set_int(PurpleBlistNode* node, const char *key, int data) { PurpleValue *value; + PurpleBlistUiOps *ops; g_return_if_fail(node != NULL); g_return_if_fail(node->settings != NULL); @@ -2909,7 +2971,9 @@ g_hash_table_replace(node->settings, g_strdup(key), value); - purple_blist_schedule_save(); + ops = purple_blist_get_ui_ops(); + if (ops && ops->save_node) + ops->save_node(node); } int @@ -2935,6 +2999,7 @@ purple_blist_node_set_string(PurpleBlistNode* node, const char *key, const char *data) { PurpleValue *value; + PurpleBlistUiOps *ops; g_return_if_fail(node != NULL); g_return_if_fail(node->settings != NULL); @@ -2945,7 +3010,9 @@ g_hash_table_replace(node->settings, g_strdup(key), value); - purple_blist_schedule_save(); + ops = purple_blist_get_ui_ops(); + if (ops && ops->save_node) + ops->save_node(node); } const char * @@ -2999,7 +3066,31 @@ void purple_blist_set_ui_ops(PurpleBlistUiOps *ops) { + gboolean overrode = FALSE; blist_ui_ops = ops; + + if (!ops) + return; + + if (!ops->save_node) { + ops->save_node = purple_blist_save_node; + overrode = TRUE; + } + if (!ops->remove_node) { + ops->remove_node = purple_blist_save_node; + overrode = TRUE; + } + if (!ops->save_account) { + ops->save_account = purple_blist_save_account; + overrode = TRUE; + } + + if (overrode && (ops->save_node != purple_blist_save_node || + ops->remove_node != purple_blist_save_node || + ops->save_account != purple_blist_save_account)) { + purple_debug_warning("blist", "Only some of the blist saving UI ops " + "were overridden. This probably is not what you want!\n"); + } } PurpleBlistUiOps * diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/blist.h --- a/libpurple/blist.h Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/blist.h Tue Jul 28 05:49:14 2009 +0000 @@ -216,10 +216,49 @@ const char *alias, const char *name); void (*request_add_group)(void); + /** + * This is called when a node has been modified and should be saved. + * + * Implementation of this UI op is OPTIONAL. If not implemented, it will + * be set to a fallback function that saves data to blist.xml like in + * previous libpurple versions. + * + * @attrib node The node which has been modified. + * + * @since 2.6.0. + */ + void (*save_node)(PurpleBlistNode *node); + + /** + * Called when a node is about to be removed from the buddy list. + * The UI op should update the relevant data structures to remove this + * node (for example, removing a buddy from the group this node is in). + * + * Implementation of this UI op is OPTIONAL. If not implemented, it will + * be set to a fallback function that saves data to blist.xml like in + * previous libpurple versions. + * + * @attrib node The node which has been modified. + * @since 2.6.0. + */ + void (*remove_node)(PurpleBlistNode *node); + + /** + * Called to save all the data for an account. If the UI sets this, + * the callback must save the privacy and buddy list data for an account. + * If the account is NULL, save the data for all accounts. + * + * Implementation of this UI op is OPTIONAL. If not implemented, it will + * be set to a fallback function that saves data to blist.xml like in + * previous libpurple versions. + * + * @attrib account The account whose data to save. If NULL, save all data + * for all accounts. + * @since 2.6.0. + */ + void (*save_account)(PurpleAccount *account); + void (*_purple_reserved1)(void); - void (*_purple_reserved2)(void); - void (*_purple_reserved3)(void); - void (*_purple_reserved4)(void); }; #ifdef __cplusplus diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/conversation.c --- a/libpurple/conversation.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/conversation.c Tue Jul 28 05:49:14 2009 +0000 @@ -40,6 +40,36 @@ static GList *chats = NULL; static PurpleConversationUiOps *default_ops = NULL; +/** + * A hash table used for efficient lookups of conversations by name. + * struct _purple_hconv => PurpleConversation* + */ +static GHashTable *conversation_cache = NULL; + +struct _purple_hconv { + PurpleConversationType type; + char *name; + const PurpleAccount *account; +}; + +static guint _purple_conversations_hconv_hash(struct _purple_hconv *hc) +{ + return g_str_hash(hc->name) ^ hc->type ^ g_direct_hash(hc->account); +} + +static guint _purple_conversations_hconv_equal(struct _purple_hconv *hc1, struct _purple_hconv *hc2) +{ + return (hc1->type == hc2->type && + hc1->account == hc2->account && + g_str_equal(hc1->name, hc2->name)); +} + +static void _purple_conversations_hconv_free_key(struct _purple_hconv *hc) +{ + g_free(hc->name); + g_free(hc); +} + void purple_conversations_set_ui_ops(PurpleConversationUiOps *ops) { @@ -287,6 +317,7 @@ PurpleConversation *conv; PurpleConnection *gc; PurpleConversationUiOps *ops; + struct _purple_hconv *hc; g_return_val_if_fail(type != PURPLE_CONV_TYPE_UNKNOWN, NULL); g_return_val_if_fail(account != NULL, NULL); @@ -295,6 +326,21 @@ /* Check if this conversation already exists. */ if ((conv = purple_find_conversation_with_account(type, name, account)) != NULL) { + if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT && + !purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))) { + purple_debug_warning("conversation", "Trying to create multiple " + "chats (%s) with the same name is deprecated and will be " + "removed in libpurple 3.0.0", name); + } + + /* + * This hack is necessary because some prpls (MSN) have unnamed chats + * that all use the same name. A PurpleConversation for one of those + * is only ever re-used if the user has left, so calls to + * purple_conversation_new need to fall-through to creating a new + * chat. + * TODO 3.0.0: Remove this workaround and mandate unique names. + */ if (purple_conversation_get_type(conv) != PURPLE_CONV_TYPE_CHAT || purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))) { @@ -327,7 +373,7 @@ conv->u.im->conv = conv; PURPLE_DBUS_REGISTER_POINTER(conv->u.im, PurpleConvIm); - ims = g_list_append(ims, conv); + ims = g_list_prepend(ims, conv); if ((icon = purple_buddy_icons_find(account, name))) { purple_conv_im_set_icon(conv->u.im, icon); @@ -349,7 +395,7 @@ conv->u.chat->conv = conv; PURPLE_DBUS_REGISTER_POINTER(conv->u.chat, PurpleConvChat); - chats = g_list_append(chats, conv); + chats = g_list_prepend(chats, conv); if ((disp = purple_connection_get_display_name(account->gc))) purple_conv_chat_set_nick(conv->u.chat, disp); @@ -364,7 +410,14 @@ } } - conversations = g_list_append(conversations, conv); + conversations = g_list_prepend(conversations, conv); + + hc = g_new(struct _purple_hconv, 1); + hc->name = g_strdup(purple_normalize(account, conv->name)); + hc->account = account; + hc->type = type; + + g_hash_table_insert(conversation_cache, hc, conv); /* Auto-set the title. */ purple_conversation_autoset_title(conv); @@ -390,6 +443,7 @@ PurpleConversationUiOps *ops; PurpleConnection *gc; const char *name; + struct _purple_hconv hc; g_return_if_fail(conv != NULL); @@ -466,6 +520,12 @@ else if(conv->type==PURPLE_CONV_TYPE_CHAT) chats = g_list_remove(chats, conv); + hc.name = (gchar *)purple_normalize(conv->account, conv->name); + hc.account = conv->account; + hc.type = conv->type; + + g_hash_table_remove(conversation_cache, &hc); + purple_signal_emit(purple_conversations_get_handle(), "deleting-conversation", conv); @@ -692,10 +752,20 @@ void purple_conversation_set_name(PurpleConversation *conv, const char *name) { + struct _purple_hconv *hc; g_return_if_fail(conv != NULL); + hc = g_new(struct _purple_hconv, 1); + hc->type = conv->type; + hc->account = conv->account; + hc->name = (gchar *)purple_normalize(conv->account, conv->name); + + g_hash_table_remove(conversation_cache, hc); g_free(conv->name); + conv->name = g_strdup(name); + hc->name = g_strdup(purple_normalize(conv->account, conv->name)); + g_hash_table_insert(conversation_cache, hc, conv); purple_conversation_autoset_title(conv); } @@ -804,43 +874,31 @@ const PurpleAccount *account) { PurpleConversation *c = NULL; - gchar *name1; - const gchar *name2; - GList *cnv; + struct _purple_hconv hc; g_return_val_if_fail(name != NULL, NULL); + hc.name = (gchar *)purple_normalize(account, name); + hc.account = account; + hc.type = type; + switch (type) { case PURPLE_CONV_TYPE_IM: - cnv = purple_get_ims(); - break; case PURPLE_CONV_TYPE_CHAT: - cnv = purple_get_chats(); + c = g_hash_table_lookup(conversation_cache, &hc); break; case PURPLE_CONV_TYPE_ANY: - cnv = purple_get_conversations(); + hc.type = PURPLE_CONV_TYPE_IM; + c = g_hash_table_lookup(conversation_cache, &hc); + if (!c) { + hc.type = PURPLE_CONV_TYPE_CHAT; + c = g_hash_table_lookup(conversation_cache, &hc); + } break; default: g_return_val_if_reached(NULL); } - name1 = g_strdup(purple_normalize(account, name)); - - for (; cnv != NULL; cnv = cnv->next) { - c = (PurpleConversation *)cnv->data; - name2 = purple_normalize(account, purple_conversation_get_name(c)); - - if ((account == purple_conversation_get_account(c)) && - !purple_utf8_strcasecmp(name1, name2)) { - - break; - } - - c = NULL; - } - - g_free(name1); - return c; } @@ -2200,6 +2258,10 @@ { void *handle = purple_conversations_get_handle(); + conversation_cache = g_hash_table_new_full((GHashFunc)_purple_conversations_hconv_hash, + (GEqualFunc)_purple_conversations_hconv_equal, + (GDestroyNotify)_purple_conversations_hconv_free_key, NULL); + /********************************************************************** * Register preferences **********************************************************************/ @@ -2489,6 +2551,7 @@ { while (conversations) purple_conversation_destroy((PurpleConversation*)conversations->data); + g_hash_table_destroy(conversation_cache); purple_signals_unregister_by_instance(purple_conversations_get_handle()); } diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/media.c --- a/libpurple/media.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/media.c Tue Jul 28 05:49:14 2009 +0000 @@ -156,7 +156,7 @@ enum { - ERROR, + S_ERROR, ACCEPTED, CANDIDATES_PREPARED, CODECS_CHANGED, @@ -328,7 +328,7 @@ "Data the prpl plugin set on the media session.", G_PARAM_READWRITE)); - purple_media_signals[ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass), + purple_media_signals[S_ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); @@ -2110,7 +2110,7 @@ va_end(args); purple_debug_error("media", "%s\n", message); - g_signal_emit(media, purple_media_signals[ERROR], 0, message); + g_signal_emit(media, purple_media_signals[S_ERROR], 0, message); g_free(message); #endif @@ -2729,7 +2729,8 @@ purple_debug_error("media", "purple_media_add_remote_candidates: " "couldn't find stream %s %s.\n", - sess_id, participant); + sess_id ? sess_id : "(null)", + participant ? participant : "(null)"); return; } diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/network.h --- a/libpurple/network.h Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/network.h Tue Jul 28 05:49:14 2009 +0000 @@ -246,7 +246,7 @@ * Update the TURN server IP given the host name * Will result in a DNS query being executed asynchronous * - * @param turn_server The host name of the STUN server to set + * @param turn_server The host name of the TURN server to set * @since 2.6.0 */ void purple_network_set_turn_server(const gchar *turn_server); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/plugin.c --- a/libpurple/plugin.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/plugin.c Tue Jul 28 05:49:14 2009 +0000 @@ -33,6 +33,7 @@ #include "request.h" #include "signals.h" #include "util.h" +#include "valgrind.h" #include "version.h" typedef struct @@ -875,7 +876,7 @@ * it keeps all the plugins open, meaning that valgrind is able to * resolve symbol names in leak traces from plugins. */ - if (!g_getenv("PURPLE_LEAKCHECK_HELP")) + if (!g_getenv("PURPLE_LEAKCHECK_HELP") && !RUNNING_ON_VALGRIND) { if (plugin->handle != NULL) g_module_close(plugin->handle); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/privacy.c --- a/libpurple/privacy.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/privacy.c Tue Jul 28 05:49:14 2009 +0000 @@ -35,6 +35,7 @@ GSList *l; char *name; PurpleBuddy *buddy; + PurpleBlistUiOps *blist_ops; g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); @@ -62,7 +63,9 @@ if (privacy_ops != NULL && privacy_ops->permit_added != NULL) privacy_ops->permit_added(account, who); - purple_blist_schedule_save(); + blist_ops = purple_blist_get_ui_ops(); + if (blist_ops != NULL && blist_ops->save_account != NULL) + blist_ops->save_account(account); /* This lets the UI know a buddy has had its privacy setting changed */ buddy = purple_find_buddy(account, name); @@ -81,6 +84,7 @@ const char *name; PurpleBuddy *buddy; char *del; + PurpleBlistUiOps *blist_ops; g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); @@ -109,7 +113,9 @@ if (privacy_ops != NULL && privacy_ops->permit_removed != NULL) privacy_ops->permit_removed(account, who); - purple_blist_schedule_save(); + blist_ops = purple_blist_get_ui_ops(); + if (blist_ops != NULL && blist_ops->save_account != NULL) + blist_ops->save_account(account); buddy = purple_find_buddy(account, name); if (buddy != NULL) { @@ -127,6 +133,7 @@ GSList *l; char *name; PurpleBuddy *buddy; + PurpleBlistUiOps *blist_ops; g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); @@ -154,7 +161,9 @@ if (privacy_ops != NULL && privacy_ops->deny_added != NULL) privacy_ops->deny_added(account, who); - purple_blist_schedule_save(); + blist_ops = purple_blist_get_ui_ops(); + if (blist_ops != NULL && blist_ops->save_account != NULL) + blist_ops->save_account(account); buddy = purple_find_buddy(account, name); if (buddy != NULL) { @@ -172,6 +181,7 @@ const char *normalized; char *name; PurpleBuddy *buddy; + PurpleBlistUiOps *blist_ops; g_return_val_if_fail(account != NULL, FALSE); g_return_val_if_fail(who != NULL, FALSE); @@ -205,7 +215,10 @@ } g_free(name); - purple_blist_schedule_save(); + + blist_ops = purple_blist_get_ui_ops(); + if (blist_ops != NULL && blist_ops->save_account != NULL) + blist_ops->save_account(account); return TRUE; } diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Tue Jul 28 05:49:14 2009 +0000 @@ -88,6 +88,83 @@ return jb; } +static gint resource_compare_cb(gconstpointer a, gconstpointer b) +{ + const JabberBuddyResource *jbra = a; + const JabberBuddyResource *jbrb = b; + JabberBuddyState state_a, state_b; + + if (jbra->priority != jbrb->priority) + return jbra->priority > jbrb->priority ? 1 : -1; + + /* Fold the states for easier comparison */ + switch (jbra->state) { + case JABBER_BUDDY_STATE_ONLINE: + case JABBER_BUDDY_STATE_CHAT: + state_a = JABBER_BUDDY_STATE_ONLINE; + break; + case JABBER_BUDDY_STATE_AWAY: + case JABBER_BUDDY_STATE_DND: + state_a = JABBER_BUDDY_STATE_AWAY; + break; + case JABBER_BUDDY_STATE_XA: + state_a = JABBER_BUDDY_STATE_XA; + break; + case JABBER_BUDDY_STATE_UNAVAILABLE: + state_a = JABBER_BUDDY_STATE_UNAVAILABLE; + break; + default: + state_a = JABBER_BUDDY_STATE_UNKNOWN; + break; + } + + switch (jbrb->state) { + case JABBER_BUDDY_STATE_ONLINE: + case JABBER_BUDDY_STATE_CHAT: + state_b = JABBER_BUDDY_STATE_ONLINE; + break; + case JABBER_BUDDY_STATE_AWAY: + case JABBER_BUDDY_STATE_DND: + state_b = JABBER_BUDDY_STATE_AWAY; + break; + case JABBER_BUDDY_STATE_XA: + state_b = JABBER_BUDDY_STATE_XA; + break; + case JABBER_BUDDY_STATE_UNAVAILABLE: + state_b = JABBER_BUDDY_STATE_UNAVAILABLE; + break; + default: + state_b = JABBER_BUDDY_STATE_UNKNOWN; + break; + } + + if (state_a == state_b) { + if (jbra->idle == jbrb->idle) + return 0; + else if ((jbra->idle && !jbrb->idle) || + (jbra->idle && jbrb->idle && jbra->idle < jbrb->idle)) + return -1; + else + return 1; + } + + if (state_a == JABBER_BUDDY_STATE_ONLINE) + return 1; + else if (state_a == JABBER_BUDDY_STATE_AWAY && + (state_b == JABBER_BUDDY_STATE_XA || + state_b == JABBER_BUDDY_STATE_UNAVAILABLE || + state_b == JABBER_BUDDY_STATE_UNKNOWN)) + return 1; + else if (state_a == JABBER_BUDDY_STATE_XA && + (state_b == JABBER_BUDDY_STATE_UNAVAILABLE || + state_b == JABBER_BUDDY_STATE_UNKNOWN)) + return 1; + else if (state_a == JABBER_BUDDY_STATE_UNAVAILABLE && + state_b == JABBER_BUDDY_STATE_UNKNOWN) + return 1; + + return -1; +} JabberBuddyResource *jabber_buddy_find_resource(JabberBuddy *jb, const char *resource) @@ -104,44 +181,8 @@ if (!jbr && !resource) { jbr = tmp; } else if (!resource) { - if (tmp->priority > jbr->priority) + if (resource_compare_cb(tmp, jbr) > 0) jbr = tmp; - else if (tmp->priority == jbr->priority) { - /* Determine if this resource is more available than the one we've currently chosen */ - switch(tmp->state) { - case JABBER_BUDDY_STATE_ONLINE: - case JABBER_BUDDY_STATE_CHAT: - /* This resource is online/chatty. Prefer to one which isn't either. */ - if (((jbr->state != JABBER_BUDDY_STATE_ONLINE) && (jbr->state != JABBER_BUDDY_STATE_CHAT)) - || (jbr->idle && !tmp->idle) - || (jbr->idle && tmp->idle && tmp->idle > jbr->idle)) - jbr = tmp; - break; - case JABBER_BUDDY_STATE_AWAY: - case JABBER_BUDDY_STATE_DND: - /* This resource is away/dnd. Prefer to one which is extended away, unavailable, or unknown. */ - if (((jbr->state == JABBER_BUDDY_STATE_XA) || (jbr->state == JABBER_BUDDY_STATE_UNAVAILABLE) || - (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) - || (jbr->idle && !tmp->idle) - || (jbr->idle && tmp->idle && tmp->idle > jbr->idle)) - jbr = tmp; - break; - case JABBER_BUDDY_STATE_XA: - /* This resource is extended away. That's better than unavailable or unknown. */ - if ((jbr->state == JABBER_BUDDY_STATE_UNAVAILABLE) || (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) - jbr = tmp; - break; - case JABBER_BUDDY_STATE_UNAVAILABLE: - /* This resource is unavailable. That's better than unknown. */ - if ((jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) - jbr = tmp; - break; - case JABBER_BUDDY_STATE_UNKNOWN: - case JABBER_BUDDY_STATE_ERROR: - /* These are never preferable. */ - break; - } - } } else if(tmp->name) { if(!strcmp(tmp->name, resource)) { jbr = tmp; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/jabber/google.c --- a/libpurple/protocols/jabber/google.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/jabber/google.c Tue Jul 28 05:49:14 2009 +0000 @@ -982,7 +982,7 @@ PurpleAccount *account = purple_connection_get_account(js->gc); GSList *list = account->deny; const char *jid = xmlnode_get_attrib(item, "jid"); - char *jid_norm = jabber_normalize(account, jid); + char *jid_norm = (char *)jabber_normalize(account, jid); while (list) { if (!strcmp(jid_norm, (char*)list->data)) { diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/jabber/jingle/rtp.c --- a/libpurple/protocols/jabber/jingle/rtp.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/rtp.c Tue Jul 28 05:49:14 2009 +0000 @@ -457,7 +457,8 @@ gchar *sid, gchar *name, JingleSession *session) { purple_debug_info("jingle-rtp", "state-changed: state %d " - "id: %s name: %s\n", state, sid, name); + "id: %s name: %s\n", state, sid ? sid : "(null)", + name ? name : "(null)"); } static void @@ -466,7 +467,8 @@ JingleSession *session) { purple_debug_info("jingle-rtp", "stream-info: type %d " - "id: %s name: %s\n", type, sid, name); + "id: %s name: %s\n", type, sid ? sid : "(null)", + name ? name : "(null)"); g_return_if_fail(JINGLE_IS_SESSION(session)); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/jabber/presence.c --- a/libpurple/protocols/jabber/presence.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/jabber/presence.c Tue Jul 28 05:49:14 2009 +0000 @@ -62,14 +62,16 @@ void jabber_presence_fake_to_self(JabberStream *js, PurpleStatus *status) { PurpleAccount *account; + PurplePresence *presence; const char *username; g_return_if_fail(js->user != NULL); account = purple_connection_get_account(js->gc); username = purple_connection_get_display_name(js->gc); + presence = purple_account_get_presence(account); if (status == NULL) - status = purple_account_get_active_status(account); + status = purple_presence_get_active_status(presence); if (purple_find_buddy(account, username)) { JabberBuddy *jb = jabber_buddy_find(js, username, TRUE); @@ -86,14 +88,23 @@ state == JABBER_BUDDY_STATE_UNKNOWN) { jabber_buddy_remove_resource(jb, js->user->resource); } else { - jabber_buddy_track_resource(jb, js->user->resource, priority, - state, msg); + jbr = jabber_buddy_track_resource(jb, js->user->resource, priority, + state, msg); + jbr->idle = purple_presence_is_idle(presence) ? + purple_presence_get_idle_time(presence) : 0; } if ((jbr = jabber_buddy_find_resource(jb, NULL))) { - purple_prpl_got_user_status(account, username, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL); + purple_prpl_got_user_status(account, username, + jabber_buddy_state_get_status_id(jbr->state), + "priority", jbr->priority, + jbr->status ? "message" : NULL, jbr->status, + NULL); + purple_prpl_got_user_idle(account, username, jbr->idle, jbr->idle); } else { - purple_prpl_got_user_status(account, username, "offline", msg ? "message" : NULL, msg, NULL); + purple_prpl_got_user_status(account, username, "offline", + msg ? "message" : NULL, msg, + NULL); } g_free(msg); } diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/libymsg.c --- a/libpurple/protocols/yahoo/libymsg.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/libymsg.c Tue Jul 28 05:49:14 2009 +0000 @@ -456,7 +456,7 @@ return cookie; } -static void yahoo_process_cookie(struct yahoo_data *yd, char *c) +static void yahoo_process_cookie(YahooData *yd, char *c) { if (c[0] == 'Y') { if (yd->cookie_y) @@ -476,7 +476,7 @@ GSList *l = pkt->hash; PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; GHashTable *ht; char *norm_bud = NULL; char *temp = NULL; @@ -607,7 +607,7 @@ PurpleGroup *g; YahooFriend *f = NULL; PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; GHashTable *ht; char **lines; @@ -754,7 +754,7 @@ YahooFriend *f = NULL; GSList *l = pkt->hash; gint val_11 = 0; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; gboolean msn = FALSE; account = purple_connection_get_account(gc); @@ -849,7 +849,7 @@ PurpleAccount *account; GSList *l = pkt->hash; struct _yahoo_im *sms = NULL; - struct yahoo_data *yd; + YahooData *yd; char *server_msg = NULL; char *m; @@ -909,7 +909,7 @@ static void yahoo_process_message(PurpleConnection *gc, struct yahoo_packet *pkt, yahoo_pkt_type pkt_type) { PurpleAccount *account; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; GSList *l = pkt->hash; GSList *list = NULL; struct _yahoo_im *im = NULL; @@ -1142,7 +1142,7 @@ { struct yahoo_add_request *add_req = data; struct yahoo_packet *pkt; - struct yahoo_data *yd = add_req->gc->proto_data; + YahooData *yd = add_req->gc->proto_data; const char *who = add_req->who; if (add_req->protocol == 2) @@ -1165,7 +1165,7 @@ static void yahoo_buddy_add_deny_cb(struct yahoo_add_request *add_req, const char *msg) { - struct yahoo_data *yd = add_req->gc->proto_data; + YahooData *yd = add_req->gc->proto_data; struct yahoo_packet *pkt; char *encoded_msg = NULL; const char *who = add_req->who; @@ -1217,7 +1217,7 @@ static void yahoo_buddy_denied_our_add(PurpleConnection *gc, const char *who, const char *reason) { char *notify_msg; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; if (who == NULL) return; @@ -1524,7 +1524,7 @@ static void yahoo_process_mail(PurpleConnection *gc, struct yahoo_packet *pkt) { PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; const char *who = NULL; const char *email = NULL; const char *subj = NULL; @@ -1608,7 +1608,7 @@ static void yahoo_auth16_stage3(PurpleConnection *gc, const char *crypt) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; PurpleAccount *account = purple_connection_get_account(gc); const char *name = purple_normalize(account, purple_account_get_username(account)); PurpleCipher *md5_cipher; @@ -1651,7 +1651,7 @@ { struct yahoo_auth_data *auth_data = user_data; PurpleConnection *gc = auth_data->gc; - struct yahoo_data *yd; + YahooData *yd; gboolean try_login_on_error = FALSE; purple_debug_info("yahoo","Authentication: In yahoo_auth16_stage2\n"); @@ -1662,7 +1662,7 @@ g_return_if_reached(); } - yd = (struct yahoo_data *)gc->proto_data; + yd = (YahooData *)gc->proto_data; if (error_message != NULL) { purple_debug_error("yahoo", "Login Failed, unable to retrieve stage 2 url: %s\n", error_message); @@ -2026,7 +2026,7 @@ static void yahoo_process_authresp(PurpleConnection *gc, struct yahoo_packet *pkt) { #ifdef TRY_WEBMESSENGER_LOGIN - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; #endif /* TRY_WEBMESSENGER_LOGIN */ GSList *l = pkt->hash; int err = 0; @@ -2110,7 +2110,7 @@ char *buf; YahooFriend *f; GSList *l = pkt->hash; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; int protocol = 0; gboolean msn = FALSE; @@ -2197,7 +2197,7 @@ PurpleConnection *gc = user_data; struct yahoo_packet *pkt_to_send; PurpleAccount *account; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; account = purple_connection_get_account(gc); @@ -2216,7 +2216,7 @@ static gboolean yahoo_p2p_keepalive(gpointer data) { PurpleConnection *gc = data; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; g_hash_table_foreach(yd->peers, yahoo_p2p_keepalive_cb, gc); @@ -2257,7 +2257,7 @@ struct yahoo_packet *pkt_to_send; PurpleAccount *account; int val_13_to_send = 0; - struct yahoo_data *yd; + YahooData *yd; YahooFriend *f; if(!(p2p_data = data)) @@ -2344,7 +2344,7 @@ struct yahoo_packet *pkt; guchar *start = NULL; struct yahoo_p2p_data *p2p_data; - struct yahoo_data *yd; + YahooData *yd; if(!(p2p_data = data)) return ; @@ -2416,7 +2416,7 @@ { int acceptfd; struct yahoo_p2p_data *p2p_data; - struct yahoo_data *yd; + YahooData *yd; if(!(p2p_data = data)) return ; @@ -2455,7 +2455,7 @@ static gboolean yahoo_cancel_p2p_server_listen_cb(gpointer data) { struct yahoo_p2p_data *p2p_data; - struct yahoo_data *yd; + YahooData *yd; if(!(p2p_data = data)) return FALSE; @@ -2476,7 +2476,7 @@ static void yahoo_p2p_server_listen_cb(int listenfd, gpointer data) { struct yahoo_p2p_data *p2p_data; - struct yahoo_data *yd; + YahooData *yd; if(!(p2p_data = data)) return ; @@ -2508,7 +2508,7 @@ YahooFriend *f; struct yahoo_packet *pkt; PurpleAccount *account; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_p2p_data *p2p_data; f = yahoo_friend_find(gc, who); @@ -2576,7 +2576,7 @@ struct yahoo_p2p_data *p2p_data; struct yahoo_packet *pkt_to_send; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; if(!(p2p_data = data)) return ; @@ -2922,7 +2922,7 @@ static void yahoo_pending(gpointer data, gint source, PurpleInputCondition cond) { PurpleConnection *gc = data; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; char buf[1024]; int len; @@ -3019,7 +3019,7 @@ static void yahoo_got_connected(gpointer data, gint source, const gchar *error_message) { PurpleConnection *gc = data; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; if (source < 0) { @@ -3045,7 +3045,7 @@ static void yahoo_got_web_connected(gpointer data, gint source, const gchar *error_message) { PurpleConnection *gc = data; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; if (source < 0) { @@ -3075,7 +3075,7 @@ { PurpleConnection *gc = data; PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; char bufread[2048], *i = bufread, *buf = bufread; int len; GString *s; @@ -3150,7 +3150,7 @@ static void yahoo_got_cookies_send_cb(gpointer data, gint source, PurpleInputCondition cond) { PurpleConnection *gc; - struct yahoo_data *yd; + YahooData *yd; int written, remaining; gc = data; @@ -3264,7 +3264,7 @@ { PurpleConnection *gc = (PurpleConnection *)user_data; PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; const char *sn = purple_account_get_username(account); const char *pass = purple_connection_get_password(gc); GHashTable *hash = yahoo_login_page_hash(url_text, len); @@ -3405,7 +3405,7 @@ void yahoo_login(PurpleAccount *account) { PurpleConnection *gc = purple_account_get_connection(account); - struct yahoo_data *yd = gc->proto_data = g_new0(struct yahoo_data, 1); + YahooData *yd = gc->proto_data = g_new0(YahooData, 1); PurpleStatus *status = purple_account_get_active_status(account); const char *server = NULL; int pager_port = 0; @@ -3452,7 +3452,7 @@ } void yahoo_close(PurpleConnection *gc) { - struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; + YahooData *yd = (YahooData *)gc->proto_data; GSList *l; if (gc->inpa) @@ -3550,7 +3550,7 @@ { PurpleAccount *account; PurpleConnection *gc; - struct yahoo_data *yd; + YahooData *yd; YahooFriend *f; PurplePresence *presence; @@ -3613,7 +3613,7 @@ PurpleConnection *gc; GHashTable *components; - struct yahoo_data *yd; + YahooData *yd; int id; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); @@ -3650,7 +3650,7 @@ PurpleBuddy *buddy; PurpleConnection *gc; - struct yahoo_data *yd; + YahooData *yd; const char *game; char *game2; char *t; @@ -3661,7 +3661,7 @@ buddy = (PurpleBuddy *) node; gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - yd = (struct yahoo_data *) gc->proto_data; + yd = (YahooData *) gc->proto_data; f = yahoo_friend_find(gc, purple_buddy_get_name(buddy)); if (!f) @@ -3818,7 +3818,7 @@ static GList *build_presence_submenu(YahooFriend *f, PurpleConnection *gc) { GList *m = NULL; PurpleMenuAction *act; - struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data; + YahooData *yd = (YahooData *) gc->proto_data; if (yd->current_status == YAHOO_STATUS_INVISIBLE) { if (f->presence != YAHOO_PRESENCE_ONLINE) { @@ -3878,7 +3878,7 @@ PurpleMenuAction *act; PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; static char buf2[1024]; YahooFriend *f; @@ -3959,7 +3959,7 @@ static void yahoo_act_id(PurpleConnection *gc, PurpleRequestFields *fields) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; const char *name = yd->profiles[purple_request_fields_get_choice(fields, "id")]; struct yahoo_packet *pkt = yahoo_packet_new(YAHOO_SERVICE_IDACT, YAHOO_STATUS_AVAILABLE, yd->session_id); @@ -3976,7 +3976,7 @@ PurpleConnection *gc = user_data; gboolean set_cookie = FALSE; gchar *url; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; g_return_if_fail(PURPLE_CONNECTION_IS_VALID(gc)); @@ -4012,7 +4012,7 @@ /* XXX I have no idea how this will work with Yahoo! Japan. */ PurpleConnection *gc = action->context; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; PurpleUtilFetchUrlData *url_data; const char* base_url = "http://login.yahoo.com"; @@ -4056,7 +4056,7 @@ PurpleRequestFieldGroup *group; PurpleRequestField *field; PurpleConnection *gc = (PurpleConnection *) action->context; - struct yahoo_data *yd = purple_connection_get_protocol_data(gc); + YahooData *yd = purple_connection_get_protocol_data(gc); const char *name = purple_connection_get_display_name(gc); int iter; @@ -4126,7 +4126,7 @@ { struct yahoo_sms_carrier_cb_data *sms_cb_data = user_data; PurpleConnection *gc = sms_cb_data->gc; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; char *mobile_no = NULL; char *status = NULL; char *carrier = NULL; @@ -4177,7 +4177,7 @@ static void yahoo_get_sms_carrier(PurpleConnection *gc, gpointer data) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; PurpleUtilFetchUrlData *url_data; struct yahoo_sms_carrier_cb_data *sms_cb_data; char *validate_request_str = NULL; @@ -4235,7 +4235,7 @@ int yahoo_send_im(PurpleConnection *gc, const char *who, const char *what, PurpleMessageFlags flags) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt = NULL; char *msg = yahoo_html_to_codes(what); char *msg2; @@ -4386,7 +4386,7 @@ unsigned int yahoo_send_typing(PurpleConnection *gc, const char *who, PurpleTypingState state) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_p2p_data *p2p_data; gboolean msn = !g_strncasecmp(who, "msn/", 4); struct yahoo_packet *pkt = NULL; @@ -4431,7 +4431,7 @@ { PurpleConnection *gc; PurplePresence *presence; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; int old_status; const char *msg = NULL; @@ -4444,7 +4444,7 @@ gc = purple_account_get_connection(account); presence = purple_status_get_presence(status); - yd = (struct yahoo_data *)gc->proto_data; + yd = (YahooData *)gc->proto_data; old_status = yd->current_status; yd->current_status = get_yahoo_status_from_purple_status(status); @@ -4506,7 +4506,7 @@ void yahoo_set_idle(PurpleConnection *gc, int idle) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt = NULL; char *msg = NULL, *msg2 = NULL; PurpleStatus *status = NULL; @@ -4612,7 +4612,7 @@ void yahoo_keepalive(PurpleConnection *gc) { struct yahoo_packet *pkt; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; time_t now = time(NULL); /* We're only allowed to send a ping once an hour or the servers will boot us */ @@ -4645,7 +4645,7 @@ void yahoo_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *g) { - struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; + YahooData *yd = (YahooData *)gc->proto_data; struct yahoo_packet *pkt; const char *group = NULL; char *group2; @@ -4709,7 +4709,7 @@ void yahoo_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { - struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; + YahooData *yd = (YahooData *)gc->proto_data; struct yahoo_packet *pkt; GSList *buddies, *l; PurpleGroup *g; @@ -4757,7 +4757,7 @@ } void yahoo_add_deny(PurpleConnection *gc, const char *who) { - struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; + YahooData *yd = (YahooData *)gc->proto_data; struct yahoo_packet *pkt; if (!yd->logged_in) @@ -4773,7 +4773,7 @@ } void yahoo_rem_deny(PurpleConnection *gc, const char *who) { - struct yahoo_data *yd = (struct yahoo_data *)gc->proto_data; + YahooData *yd = (YahooData *)gc->proto_data; struct yahoo_packet *pkt; if (!yd->logged_in) @@ -4814,7 +4814,7 @@ void yahoo_change_buddys_group(PurpleConnection *gc, const char *who, const char *old_group, const char *new_group) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; char *gpn, *gpo; YahooFriend *f = yahoo_friend_find(gc, who); @@ -4863,7 +4863,7 @@ void yahoo_rename_group(PurpleConnection *gc, const char *old_name, PurpleGroup *group, GList *moved_buddies) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; char *gpn, *gpo; @@ -4903,7 +4903,7 @@ { GHashTable *comp; PurpleConnection *gc; - struct yahoo_data *yd; + YahooData *yd; int id; if (!args || !args[0]) diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/libymsg.h --- a/libpurple/protocols/yahoo/libymsg.h Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/libymsg.h Tue Jul 28 05:49:14 2009 +0000 @@ -167,7 +167,7 @@ } phone; } YahooPersonalDetails; -struct yahoo_data { +typedef struct { PurpleConnection *gc; int fd; guchar *rxqueue; @@ -239,7 +239,7 @@ int yahoo_p2p_server_watcher; GHashTable *sms_carrier; /* sms carrier data */ guint yahoo_p2p_server_timeout_handle; -}; +} YahooData; #define YAHOO_MAX_STATUS_MESSAGE_LENGTH (255) diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/util.c --- a/libpurple/protocols/yahoo/util.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/util.c Tue Jul 28 05:49:14 2009 +0000 @@ -53,7 +53,7 @@ gchar *t1,*t2,*t3; GSList *tmp; GSList *cookies; - cookies = ((struct yahoo_data*)(gc->proto_data))->cookies; + cookies = ((YahooData*)(gc->proto_data))->cookies; tmp = cookies; while(tmp) { @@ -118,7 +118,7 @@ */ char *yahoo_string_encode(PurpleConnection *gc, const char *str, gboolean *utf8) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; char *ret; const char *to_codeset; @@ -147,7 +147,7 @@ */ char *yahoo_string_decode(PurpleConnection *gc, const char *str, gboolean utf8) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; char *ret; const char *from_codeset; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_aliases.c --- a/libpurple/protocols/yahoo/yahoo_aliases.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_aliases.c Tue Jul 28 05:49:14 2009 +0000 @@ -37,9 +37,9 @@ #include "yahoo_packet.h" /* I hate hardcoding this stuff, but Yahoo never sends us anything to use. Someone in the know may be able to tweak this URL */ -#define YAHOO_ALIAS_FETCH_URL "http://address.yahoo.com/yab/us?v=XM&prog=ymsgr&.intl=us&diffs=1&t=0&tags=short&rt=0&prog-ver=8.1.0.249&useutf8=1&legenc=codepage-1252" +#define YAHOO_ALIAS_FETCH_URL "http://address.yahoo.com/yab/us?v=XM&prog=ymsgr&.intl=us&diffs=1&t=0&tags=short&rt=0&prog-ver=" YAHOO_CLIENT_VERSION "&useutf8=1&legenc=codepage-1252" #define YAHOO_ALIAS_UPDATE_URL "http://address.yahoo.com/yab/us?v=XM&prog=ymsgr&.intl=us&sync=1&tags=short&noclear=1&useutf8=1&legenc=codepage-1252" -#define YAHOOJP_ALIAS_FETCH_URL "http://address.yahoo.co.jp/yab/jp?v=XM&prog=ymsgr&.intl=jp&diffs=1&t=0&tags=short&rt=0&prog-ver=7.0.0.7" +#define YAHOOJP_ALIAS_FETCH_URL "http://address.yahoo.co.jp/yab/jp?v=XM&prog=ymsgr&.intl=jp&diffs=1&t=0&tags=short&rt=0&prog-ver=" YAHOOJP_CLIENT_VERSION #define YAHOOJP_ALIAS_UPDATE_URL "http://address.yahoo.co.jp/yab/jp?v=XM&prog=ymsgr&.intl=jp&sync=1&tags=short&noclear=1" void yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias); @@ -74,7 +74,7 @@ yahoo_fetch_aliases_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, size_t len, const gchar *error_message) { PurpleConnection *gc = user_data; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; yd->url_datas = g_slist_remove(yd->url_datas, url_data); @@ -186,7 +186,7 @@ void yahoo_fetch_aliases(PurpleConnection *gc) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; const char *url; gchar *request, *webpage, *webaddress; PurpleUtilFetchUrlData *url_data; @@ -228,7 +228,7 @@ xmlnode *node, *result; struct callback_data *cb = user_data; PurpleConnection *gc = cb->gc; - struct yahoo_data *yd; + YahooData *yd; yd = gc->proto_data; yd->url_datas = g_slist_remove(yd->url_datas, url_data); @@ -289,7 +289,7 @@ void yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias) { - struct yahoo_data *yd; + YahooData *yd; const char *url; gchar *content, *request, *webpage, *webaddress; struct callback_data *cb; @@ -403,7 +403,7 @@ * which is stupid, and thus not really surprising. */ struct yahoo_userinfo { - struct yahoo_data *yd; + YahooData *yd; char *xml; }; @@ -452,7 +452,7 @@ { xmlnode *node = xmlnode_new("ab"); xmlnode *ct = xmlnode_new_child(node, "ct"); - struct yahoo_data *yd = purple_connection_get_protocol_data(gc); + YahooData *yd = purple_connection_get_protocol_data(gc); PurpleAccount *account; PurpleUtilFetchUrlData *url_data; char *webaddress, *webpage; @@ -592,7 +592,7 @@ void yahoo_set_userinfo(PurpleConnection *gc) { - struct yahoo_data *yd = purple_connection_get_protocol_data(gc); + YahooData *yd = purple_connection_get_protocol_data(gc); PurpleRequestFields *fields = request_fields_from_personal_details(&yd->ypd, purple_connection_get_display_name(gc)); purple_request_fields(gc, NULL, _("Set User Info"), NULL, fields, @@ -602,7 +602,7 @@ } static gboolean -parse_contact_details(struct yahoo_data *yd, const char *who, const char *xml) +parse_contact_details(YahooData *yd, const char *who, const char *xml) { xmlnode *node, *nd; YahooFriend *f; @@ -690,7 +690,7 @@ { GSList *l = pkt->hash; const char *who = NULL, *xml = NULL; - struct yahoo_data *yd = purple_connection_get_protocol_data(gc); + YahooData *yd = purple_connection_get_protocol_data(gc); for (; l; l = l->next) { struct yahoo_pair *pair = l->data; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_doodle.c --- a/libpurple/protocols/yahoo/yahoo_doodle.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_doodle.c Tue Jul 28 05:49:14 2009 +0000 @@ -384,7 +384,7 @@ const char *imv, const char *sixtyfour) { - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; purple_debug_info("yahoo", "doodle: Sent %s (%s)\n", type, to); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_filexfer.c --- a/libpurple/protocols/yahoo/yahoo_filexfer.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_filexfer.c Tue Jul 28 05:49:14 2009 +0000 @@ -80,7 +80,7 @@ static void yahoo_xfer_data_free(struct yahoo_xfer_data *xd) { PurpleConnection *gc; - struct yahoo_data *yd; + YahooData *yd; PurpleXfer *xfer; GSList *l; @@ -233,7 +233,7 @@ size_t content_length, header_len, pkt_buf_len; PurpleConnection *gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; purple_debug_info("yahoo", "in yahoo_sendfile_connected\n"); @@ -311,7 +311,7 @@ struct yahoo_xfer_data *xfer_data; PurpleConnection *gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; xfer_data = xfer->data; gc = xfer_data->gc; @@ -354,7 +354,7 @@ struct yahoo_xfer_data *xfer_data; PurpleConnection *gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; xfer_data = xfer->data; @@ -525,7 +525,7 @@ { PurpleConnection *gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; gc = xfer_data->gc; @@ -573,7 +573,7 @@ PurpleConnection *gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; gc = xfer_data->gc; @@ -634,7 +634,7 @@ struct yahoo_xfer_data *xfer_data; PurpleXfer *xfer = NULL; PurpleConnection *gc; - struct yahoo_data *yd; + YahooData *yd; xfer_data = xfer_old->data; if(xfer_data && xfer_data->version == 15 @@ -802,7 +802,7 @@ char *imv = NULL; long expires = 0; PurpleXfer *xfer; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_xfer_data *xfer_data; char *service = NULL; char *filename = NULL; @@ -985,7 +985,7 @@ long a,b,c,d; PurpleConnection *gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; gchar *url; gchar *filename; @@ -1068,7 +1068,7 @@ void yahoo_send_file(PurpleConnection *gc, const char *who, const char *file) { struct yahoo_xfer_data *xfer_data; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; PurpleXfer *xfer = yahoo_new_xfer(gc, who); g_return_if_fail(xfer != NULL); @@ -1226,7 +1226,7 @@ PurpleXfer *xfer; struct yahoo_xfer_data *xd; PurpleAccount *account; - struct yahoo_data* yd; + YahooData* yd; if (!(xfer = data)) return; @@ -1479,7 +1479,7 @@ struct yahoo_xfer_data *xd; struct yahoo_packet *pkt; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; gchar *filename; const char *local_ip; gchar *url_to_send = NULL; @@ -1546,7 +1546,7 @@ struct yahoo_xfer_data *xd; struct yahoo_packet *pkt; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; gchar *filename; struct yahoo_p2p_data *p2p_data; @@ -1583,7 +1583,7 @@ char *imv = NULL; long val_222 = 0L; PurpleXfer *xfer; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_xfer_data *xfer_data; char *service = NULL; char *filename = NULL; @@ -1760,7 +1760,7 @@ long val_249 = 0; long val_66 = 0; PurpleXfer *xfer; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_xfer_data *xfer_data; char *filename = NULL; char *xfer_peer_idstring = NULL; @@ -1867,7 +1867,7 @@ gchar *xfer_peer_idstring = NULL; gchar *xfer_idstring_for_relay = NULL; PurpleXfer *xfer; - struct yahoo_data *yd; + YahooData *yd; struct yahoo_xfer_data *xfer_data; GSList *l; PurpleAccount *account; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_friend.c --- a/libpurple/protocols/yahoo/yahoo_friend.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_friend.c Tue Jul 28 05:49:14 2009 +0000 @@ -42,7 +42,7 @@ YahooFriend *yahoo_friend_find(PurpleConnection *gc, const char *name) { - struct yahoo_data *yd; + YahooData *yd; const char *norm; g_return_val_if_fail(gc != NULL, NULL); @@ -57,7 +57,7 @@ YahooFriend *yahoo_friend_find_or_new(PurpleConnection *gc, const char *name) { YahooFriend *f; - struct yahoo_data *yd; + YahooData *yd; const char *norm; g_return_val_if_fail(gc != NULL, NULL); @@ -215,7 +215,7 @@ void yahoo_friend_update_presence(PurpleConnection *gc, const char *name, YahooPresenceVisibility presence) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt = NULL; YahooFriend *f; const char *thirtyone, *thirteen; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_packet.c --- a/libpurple/protocols/yahoo/yahoo_packet.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_packet.c Tue Jul 28 05:49:14 2009 +0000 @@ -285,7 +285,7 @@ static void yahoo_packet_send_can_write(gpointer data, gint source, PurpleInputCondition cond) { - struct yahoo_data *yd = data; + YahooData *yd = data; int ret, writelen; writelen = purple_circ_buffer_get_max_read(yd->txbuf); @@ -342,7 +342,7 @@ return len; } -int yahoo_packet_send(struct yahoo_packet *pkt, struct yahoo_data *yd) +int yahoo_packet_send(struct yahoo_packet *pkt, YahooData *yd) { size_t len; gssize ret; @@ -382,7 +382,7 @@ return ret; } -int yahoo_packet_send_and_free(struct yahoo_packet *pkt, struct yahoo_data *yd) +int yahoo_packet_send_and_free(struct yahoo_packet *pkt, YahooData *yd) { int ret; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_packet.h --- a/libpurple/protocols/yahoo/yahoo_packet.h Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_packet.h Tue Jul 28 05:49:14 2009 +0000 @@ -137,8 +137,8 @@ void yahoo_packet_hash(struct yahoo_packet *pkt, const char *fmt, ...); void yahoo_packet_hash_str(struct yahoo_packet *pkt, int key, const char *value); void yahoo_packet_hash_int(struct yahoo_packet *pkt, int key, int value); -int yahoo_packet_send(struct yahoo_packet *pkt, struct yahoo_data *yd); -int yahoo_packet_send_and_free(struct yahoo_packet *pkt, struct yahoo_data *yd); +int yahoo_packet_send(struct yahoo_packet *pkt, YahooData *yd); +int yahoo_packet_send_and_free(struct yahoo_packet *pkt, YahooData *yd); size_t yahoo_packet_build(struct yahoo_packet *pkt, int pad, gboolean wm, gboolean jp, guchar **buf); void yahoo_packet_read(struct yahoo_packet *pkt, const guchar *data, int len); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_picture.c --- a/libpurple/protocols/yahoo/yahoo_picture.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_picture.c Tue Jul 28 05:49:14 2009 +0000 @@ -49,7 +49,7 @@ const gchar *pic_data, size_t len, const gchar *error_message) { struct yahoo_fetch_picture_data *d; - struct yahoo_data *yd; + YahooData *yd; d = user_data; yd = d->gc->proto_data; @@ -71,7 +71,7 @@ void yahoo_process_picture(PurpleConnection *gc, struct yahoo_packet *pkt) { - struct yahoo_data *yd; + YahooData *yd; GSList *l = pkt->hash; char *who = NULL, *us = NULL; gboolean got_icon_info = FALSE, send_icon_info = FALSE; @@ -192,7 +192,7 @@ void yahoo_process_picture_upload(PurpleConnection *gc, struct yahoo_packet *pkt) { PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; GSList *l = pkt->hash; char *url = NULL; @@ -268,7 +268,7 @@ void yahoo_send_picture_info(PurpleConnection *gc, const char *who) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; if (!yd->picture_url) { @@ -285,7 +285,7 @@ void yahoo_send_picture_request(PurpleConnection *gc, const char *who) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE, YAHOO_STATUS_AVAILABLE, yd->session_id); @@ -297,7 +297,7 @@ void yahoo_send_picture_checksum(PurpleConnection *gc) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; pkt = yahoo_packet_new(YAHOO_SERVICE_PICTURE_CHECKSUM, YAHOO_STATUS_AVAILABLE, yd->session_id); @@ -308,7 +308,7 @@ void yahoo_send_picture_update_to_user(PurpleConnection *gc, const char *who, int type) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; pkt = yahoo_packet_new(YAHOO_SERVICE_AVATAR_UPDATE, YAHOO_STATUS_AVAILABLE, yd->session_id); @@ -333,7 +333,7 @@ void yahoo_send_picture_update(PurpleConnection *gc, int type) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yspufe data; data.gc = gc; @@ -427,7 +427,7 @@ gsize pkt_buf_len; PurpleConnection *gc = d->gc; PurpleAccount *account; - struct yahoo_data *yd; + YahooData *yd; /* use whole URL if using HTTP Proxy */ gboolean use_whole_url = yahoo_account_use_http_proxy(gc); @@ -461,7 +461,7 @@ /* header + packet + "29" + 0xc0 + 0x80) + pictureblob */ - host = purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST); + host = purple_account_get_string(account, "xfer_host", yd->jp? YAHOOJP_XFER_HOST : YAHOO_XFER_HOST); port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT); tmp = g_strdup_printf("%s:%d", host, port); header = g_strdup_printf("POST %s%s/notifyft HTTP/1.1\r\n" @@ -497,7 +497,7 @@ void yahoo_buddy_icon_upload(PurpleConnection *gc, struct yahoo_buddy_icon_upload_data *d) { PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; if (yd->buddy_icon_connect_data != NULL) { /* Cancel any in-progress buddy icon upload */ @@ -506,8 +506,8 @@ } yd->buddy_icon_connect_data = purple_proxy_connect(NULL, account, - yd->jp ? purple_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST) - : purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), + purple_account_get_string(account, "xfer_host", + yd->jp? YAHOOJP_XFER_HOST : YAHOO_XFER_HOST), purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), yahoo_buddy_icon_upload_connected, d); @@ -542,7 +542,7 @@ void yahoo_set_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; PurpleAccount *account = gc->account; if (img == NULL) { diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoo_profile.c --- a/libpurple/protocols/yahoo/yahoo_profile.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_profile.c Tue Jul 28 05:49:14 2009 +0000 @@ -784,7 +784,7 @@ char *tmp; char *profile_url_text = NULL; int lang, strid; - struct yahoo_data *yd; + YahooData *yd; const profile_strings_node_t *strings = NULL; const char *title; profile_state_t profile_state = PROFILE_STATE_DEFAULT; @@ -956,7 +956,7 @@ const gchar *url_text, size_t len, const gchar *error_message) { YahooGetInfoStepTwoData *info2_data = (YahooGetInfoStepTwoData *)data; - struct yahoo_data *yd; + YahooData *yd; gboolean found = FALSE; int id = -1; @@ -1264,7 +1264,7 @@ void yahoo_get_info(PurpleConnection *gc, const char *name) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; YahooGetInfoData *data; char *url; PurpleUtilFetchUrlData *url_data; diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoochat.c --- a/libpurple/protocols/yahoo/yahoochat.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoochat.c Tue Jul 28 05:49:14 2009 +0000 @@ -53,7 +53,7 @@ /* special function to log us on to the yahoo chat service */ static void yahoo_chat_online(PurpleConnection *gc) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; const char *rll; @@ -98,7 +98,7 @@ static PurpleConversation *yahoo_find_conference(PurpleConnection *gc, const char *name) { - struct yahoo_data *yd; + YahooData *yd; GSList *l; yd = gc->proto_data; @@ -373,7 +373,7 @@ static void yahoo_chat_join(PurpleConnection *gc, const char *dn, const char *room, const char *topic, const char *id) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; char *room2; gboolean utf8 = TRUE; @@ -401,7 +401,7 @@ /* this is a confirmation of yahoo_chat_online(); */ void yahoo_process_chat_online(PurpleConnection *gc, struct yahoo_packet *pkt) { - struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data; + YahooData *yd = (YahooData *) gc->proto_data; if (pkt->status == 1) { yd->chat_online = TRUE; @@ -433,7 +433,7 @@ /* this is basicly the opposite of chat_online */ void yahoo_process_chat_logout(PurpleConnection *gc, struct yahoo_packet *pkt) { - struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data; + YahooData *yd = (YahooData *) gc->proto_data; GSList *l; for (l = pkt->hash; l; l = l->next) { @@ -463,7 +463,7 @@ void yahoo_process_chat_join(PurpleConnection *gc, struct yahoo_packet *pkt) { PurpleAccount *account = purple_connection_get_account(gc); - struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data; + YahooData *yd = (YahooData *) gc->proto_data; PurpleConversation *c = NULL; GSList *l; GList *members = NULL; @@ -618,7 +618,7 @@ char *who = NULL; char *room = NULL; GSList *l; - struct yahoo_data *yd; + YahooData *yd; yd = gc->proto_data; @@ -769,7 +769,7 @@ * I think conference names are always ascii. */ -void yahoo_conf_leave(struct yahoo_data *yd, const char *room, const char *dn, GList *who) +void yahoo_conf_leave(YahooData *yd, const char *room, const char *dn, GList *who) { struct yahoo_packet *pkt; GList *w; @@ -791,7 +791,7 @@ static int yahoo_conf_send(PurpleConnection *gc, const char *dn, const char *room, GList *members, const char *what) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; GList *who; char *msg, *msg2; @@ -818,7 +818,7 @@ return 0; } -static void yahoo_conf_join(struct yahoo_data *yd, PurpleConversation *c, const char *dn, const char *room, +static void yahoo_conf_join(YahooData *yd, PurpleConversation *c, const char *dn, const char *room, const char *topic, const char *members) { struct yahoo_packet *pkt; @@ -848,7 +848,7 @@ static void yahoo_conf_invite(PurpleConnection *gc, PurpleConversation *c, const char *dn, const char *buddy, const char *room, const char *msg) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; GList *members; char *msg2 = NULL; @@ -878,7 +878,7 @@ static void yahoo_chat_leave(PurpleConnection *gc, const char *room, const char *dn, gboolean logout) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; PurpleConversation *c; @@ -930,7 +930,7 @@ static int yahoo_chat_send(PurpleConnection *gc, const char *dn, const char *room, const char *what, PurpleMessageFlags flags) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; int me = 0; char *msg1, *msg2, *room2; @@ -975,7 +975,7 @@ static void yahoo_chat_invite(PurpleConnection *gc, const char *dn, const char *buddy, const char *room, const char *msg) { - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; struct yahoo_packet *pkt; char *room2, *msg2 = NULL; gboolean utf8 = TRUE; @@ -1000,7 +1000,7 @@ void yahoo_chat_goto(PurpleConnection *gc, const char *name) { - struct yahoo_data *yd; + YahooData *yd; struct yahoo_packet *pkt; yd = gc->proto_data; @@ -1035,7 +1035,7 @@ void yahoo_c_leave(PurpleConnection *gc, int id) { - struct yahoo_data *yd = (struct yahoo_data *) gc->proto_data; + YahooData *yd = (YahooData *) gc->proto_data; PurpleConversation *c; if (!yd) @@ -1060,9 +1060,9 @@ { PurpleConversation *c; int ret; - struct yahoo_data *yd; + YahooData *yd; - yd = (struct yahoo_data *) gc->proto_data; + yd = (YahooData *) gc->proto_data; if (!yd) return -1; @@ -1116,11 +1116,11 @@ void yahoo_c_join(PurpleConnection *gc, GHashTable *data) { - struct yahoo_data *yd; + YahooData *yd; char *room, *topic, *type; PurpleConversation *c; - yd = (struct yahoo_data *) gc->proto_data; + yd = (YahooData *) gc->proto_data; if (!yd) return; @@ -1480,7 +1480,7 @@ { struct yahoo_roomlist *yrl = data; PurpleRoomlist *list = yrl->list; - struct yahoo_data *yd = purple_account_get_connection(list->account)->proto_data; + YahooData *yd = purple_account_get_connection(list->account)->proto_data; if (source < 0) { purple_notify_error(purple_account_get_connection(list->account), NULL, _("Unable to connect"), _("Fetching the room list failed.")); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/yahoochat.h --- a/libpurple/protocols/yahoo/yahoochat.h Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoochat.h Tue Jul 28 05:49:14 2009 +0000 @@ -50,7 +50,7 @@ char *yahoo_get_chat_name(GHashTable *data); void yahoo_c_invite(PurpleConnection *gc, int id, const char *msg, const char *name); -void yahoo_conf_leave(struct yahoo_data *yd, const char *room, const char *dn, GList *who); +void yahoo_conf_leave(YahooData *yd, const char *room, const char *dn, GList *who); void yahoo_chat_goto(PurpleConnection *gc, const char *name); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/protocols/yahoo/ycht.c --- a/libpurple/protocols/yahoo/ycht.c Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/protocols/yahoo/ycht.c Tue Jul 28 05:49:14 2009 +0000 @@ -55,7 +55,7 @@ static void ycht_process_login(YchtConn *ycht, YchtPkt *pkt) { PurpleConnection *gc = ycht->gc; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; if (ycht->logged_in) return; @@ -70,7 +70,7 @@ static void ycht_process_logout(YchtConn *ycht, YchtPkt *pkt) { PurpleConnection *gc = ycht->gc; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; yd->chat_online = FALSE; ycht->logged_in = FALSE; @@ -175,7 +175,7 @@ { #if 0 PurpleConnection *gc = ycht->gc; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; if (ycht->logged_in) return; @@ -431,7 +431,7 @@ void ycht_connection_close(YchtConn *ycht) { - struct yahoo_data *yd = ycht->gc->proto_data; + YahooData *yd = ycht->gc->proto_data; if (yd) { yd->ycht = NULL; @@ -543,7 +543,7 @@ { YchtConn *ycht = data; PurpleConnection *gc = ycht->gc; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; YchtPkt *pkt; char *buf; @@ -570,7 +570,7 @@ void ycht_connection_open(PurpleConnection *gc) { YchtConn *ycht; - struct yahoo_data *yd = gc->proto_data; + YahooData *yd = gc->proto_data; PurpleAccount *account = purple_connection_get_account(gc); ycht = g_new0(YchtConn, 1); diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/valgrind.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/valgrind.h Tue Jul 28 05:49:14 2009 +0000 @@ -0,0 +1,3924 @@ +/* -*- c -*- + ---------------------------------------------------------------- + + Notice that the following BSD-style license applies to this one + file (valgrind.h) only. The rest of Valgrind is licensed under the + terms of the GNU General Public License, version 2, unless + otherwise indicated. See the COPYING file in the source + distribution for details. + + ---------------------------------------------------------------- + + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2000-2008 Julian Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------------------------------- + + Notice that the above BSD-style license applies to this one file + (valgrind.h) only. The entire rest of Valgrind is licensed under + the terms of the GNU General Public License, version 2. See the + COPYING file in the source distribution for details. + + ---------------------------------------------------------------- +*/ + + +/* This file is for inclusion into client (your!) code. + + You can use these macros to manipulate and query Valgrind's + execution inside your own programs. + + The resulting executables will still run without Valgrind, just a + little bit more slowly than they otherwise would, but otherwise + unchanged. When not running on valgrind, each client request + consumes very few (eg. 7) instructions, so the resulting performance + loss is negligible unless you plan to execute client requests + millions of times per second. Nevertheless, if that is still a + problem, you can compile with the NVALGRIND symbol defined (gcc + -DNVALGRIND) so that client requests are not even compiled in. */ + +#ifndef __VALGRIND_H +#define __VALGRIND_H + +#include + +/* Nb: this file might be included in a file compiled with -ansi. So + we can't use C++ style "//" comments nor the "asm" keyword (instead + use "__asm__"). */ + +/* Derive some tags indicating what the target platform is. Note + that in this file we're using the compiler's CPP symbols for + identifying architectures, which are different to the ones we use + within the rest of Valgrind. Note, __powerpc__ is active for both + 32 and 64-bit PPC, whereas __powerpc64__ is only active for the + latter (on Linux, that is). */ +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64_linux +#undef PLAT_ppc32_aix5 +#undef PLAT_ppc64_aix5 + +#if !defined(_AIX) && defined(__i386__) +# define PLAT_x86_linux 1 +#elif !defined(_AIX) && defined(__x86_64__) +# define PLAT_amd64_linux 1 +#elif !defined(_AIX) && defined(__powerpc__) && !defined(__powerpc64__) +# define PLAT_ppc32_linux 1 +#elif !defined(_AIX) && defined(__powerpc__) && defined(__powerpc64__) +# define PLAT_ppc64_linux 1 +#elif defined(_AIX) && defined(__64BIT__) +# define PLAT_ppc64_aix5 1 +#elif defined(_AIX) && !defined(__64BIT__) +# define PLAT_ppc32_aix5 1 +#endif + + +/* If we're not compiling for our target platform, don't generate + any inline asms. */ +#if !defined(PLAT_x86_linux) && !defined(PLAT_amd64_linux) \ + && !defined(PLAT_ppc32_linux) && !defined(PLAT_ppc64_linux) \ + && !defined(PLAT_ppc32_aix5) && !defined(PLAT_ppc64_aix5) +# if !defined(NVALGRIND) +# define NVALGRIND 1 +# endif +#endif + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS. There is nothing */ +/* in here of use to end-users -- skip to the next section. */ +/* ------------------------------------------------------------------ */ + +#if defined(NVALGRIND) + +/* Define NVALGRIND to completely remove the Valgrind magic sequence + from the compiled code (analogous to NDEBUG's effects on + assert()) */ +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + { \ + (_zzq_rlval) = (_zzq_default); \ + } + +#else /* ! NVALGRIND */ + +/* The following defines the magic code sequences which the JITter + spots and handles magically. Don't look too closely at them as + they will rot your brain. + + The assembly code sequences for all architectures is in this one + file. This is because this file must be stand-alone, and we don't + want to have multiple files. + + For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default + value gets put in the return slot, so that everything works when + this is executed not under Valgrind. Args are passed in a memory + block, and so there's no intrinsic limit to the number that could + be passed, but it's currently five. + + The macro args are: + _zzq_rlval result lvalue + _zzq_default default value (result returned when running on real CPU) + _zzq_request request code + _zzq_arg1..5 request params + + The other two macros are used to support function wrapping, and are + a lot simpler. VALGRIND_GET_NR_CONTEXT returns the value of the + guest's NRADDR pseudo-register and whatever other information is + needed to safely run the call original from the wrapper: on + ppc64-linux, the R2 value at the divert point is also needed. This + information is abstracted into a user-visible type, OrigFn. + + VALGRIND_CALL_NOREDIR_* behaves the same as the following on the + guest, but guarantees that the branch instruction will not be + redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64: + branch-and-link-to-r11. VALGRIND_CALL_NOREDIR is just text, not a + complete inline asm, since it needs to be combined with more magic + inline asm stuff to be useful. +*/ + +/* ------------------------- x86-linux ------------------------- */ + +#if defined(PLAT_x86_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "roll $3, %%edi ; roll $13, %%edi\n\t" \ + "roll $29, %%edi ; roll $19, %%edi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + { volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EDX = client_request ( %EAX ) */ \ + "xchgl %%ebx,%%ebx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EAX = guest_NRADDR */ \ + "xchgl %%ecx,%%ecx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_EAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%EAX */ \ + "xchgl %%edx,%%edx\n\t" +#endif /* PLAT_x86_linux */ + +/* ------------------------ amd64-linux ------------------------ */ + +#if defined(PLAT_amd64_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ + "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + { volatile unsigned long long int _zzq_args[6]; \ + volatile unsigned long long int _zzq_result; \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RDX = client_request ( %RAX ) */ \ + "xchgq %%rbx,%%rbx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RAX = guest_NRADDR */ \ + "xchgq %%rcx,%%rcx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_RAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%RAX */ \ + "xchgq %%rdx,%%rdx\n\t" +#endif /* PLAT_amd64_linux */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ + "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned int _zzq_args[6]; \ + unsigned int _zzq_result; \ + unsigned int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64_linux) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + unsigned long long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned long long int _zzq_args[6]; \ + register unsigned long long int _zzq_result __asm__("r3"); \ + register unsigned long long int* _zzq_ptr __asm__("r4"); \ + _zzq_args[0] = (unsigned long long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1" \ + : "=r" (_zzq_result) \ + : "0" (_zzq_default), "r" (_zzq_ptr) \ + : "cc", "memory"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + register unsigned long long int __addr __asm__("r3"); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2" \ + : "=r" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4" \ + : "=r" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#endif /* PLAT_ppc64_linux */ + +/* ------------------------ ppc32-aix5 ------------------------- */ + +#if defined(PLAT_ppc32_aix5) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + unsigned int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rlwinm 0,0,3,0,0 ; rlwinm 0,0,13,0,0\n\t" \ + "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned int _zzq_args[7]; \ + register unsigned int _zzq_result; \ + register unsigned int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + _zzq_args[6] = (unsigned int)(_zzq_default); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 4,%1\n\t" \ + "lwz 3, 24(4)\n\t" \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" \ + : "=b" (_zzq_result) \ + : "b" (_zzq_ptr) \ + : "r3", "r4", "cc", "memory"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + register unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#endif /* PLAT_ppc32_aix5 */ + +/* ------------------------ ppc64-aix5 ------------------------- */ + +#if defined(PLAT_ppc64_aix5) + +typedef + struct { + unsigned long long int nraddr; /* where's the code? */ + unsigned long long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST( \ + _zzq_rlval, _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + { unsigned long long int _zzq_args[7]; \ + register unsigned long long int _zzq_result; \ + register unsigned long long int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int long long)(_zzq_request); \ + _zzq_args[1] = (unsigned int long long)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int long long)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int long long)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int long long)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int long long)(_zzq_arg5); \ + _zzq_args[6] = (unsigned int long long)(_zzq_default); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 4,%1\n\t" \ + "ld 3, 48(4)\n\t" \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" \ + : "=b" (_zzq_result) \ + : "b" (_zzq_ptr) \ + : "r3", "r4", "cc", "memory"); \ + _zzq_rlval = _zzq_result; \ + } + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + register unsigned long long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "r3", "cc", "memory" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#endif /* PLAT_ppc64_aix5 */ + +/* Insert assembly code for other platforms here... */ + +#endif /* NVALGRIND */ + + +/* ------------------------------------------------------------------ */ +/* PLATFORM SPECIFICS for FUNCTION WRAPPING. This is all very */ +/* ugly. It's the least-worst tradeoff I can think of. */ +/* ------------------------------------------------------------------ */ + +/* This section defines magic (a.k.a appalling-hack) macros for doing + guaranteed-no-redirection macros, so as to get from function + wrappers to the functions they are wrapping. The whole point is to + construct standard call sequences, but to do the call itself with a + special no-redirect call pseudo-instruction that the JIT + understands and handles specially. This section is long and + repetitious, and I can't see a way to make it shorter. + + The naming scheme is as follows: + + CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc} + + 'W' stands for "word" and 'v' for "void". Hence there are + different macros for calling arity 0, 1, 2, 3, 4, etc, functions, + and for each, the possibility of returning a word-typed result, or + no result. +*/ + +/* Use these to write the name of your wrapper. NOTE: duplicates + VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. */ + +#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ + _vgwZU_##soname##_##fnname + +#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ + _vgwZZ_##soname##_##fnname + +/* Use this macro from within a wrapper function to collect the + context (address and possibly other info) of the original function. + Once you have that you can then use it in one of the CALL_FN_ + macros. The type of the argument _lval is OrigFn. */ +#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) + +/* Derivatives of the main macros below, for calling functions + returning void. */ + +#define CALL_FN_v_v(fnptr) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_v(_junk,fnptr); } while (0) + +#define CALL_FN_v_W(fnptr, arg1) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_W(_junk,fnptr,arg1); } while (0) + +#define CALL_FN_v_WW(fnptr, arg1,arg2) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) + +#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) + +/* ------------------------- x86-linux ------------------------- */ + +#if defined(PLAT_x86_linux) + +/* These regs are trashed by the hidden call. No need to mention eax + as gcc can already see that, plus causes gcc to bomb. */ +#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx" + +/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $4, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $8, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $12, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $16, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $20, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $24, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $28, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $32, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $36, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $40, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $44, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "pushl 48(%%eax)\n\t" \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + "addl $48, %%esp\n" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_x86_linux */ + +/* ------------------------ amd64-linux ------------------------ */ + +#if defined(PLAT_amd64_linux) + +/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi", \ + "rdi", "r8", "r9", "r10", "r11" + +/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned + long) == 8. */ + +/* NB 9 Sept 07. There is a nasty kludge here in all these CALL_FN_ + macros. In order not to trash the stack redzone, we need to drop + %rsp by 128 before the hidden call, and restore afterwards. The + nastyness is that it is only by luck that the stack still appears + to be unwindable during the hidden call - since then the behaviour + of any routine using this macro does not match what the CFI data + says. Sigh. + + Why is this important? Imagine that a wrapper has a stack + allocated local, and passes to the hidden call, a pointer to it. + Because gcc does not know about the hidden call, it may allocate + that local in the redzone. Unfortunately the hidden call may then + trash it before it comes to use it. So we must step clear of the + redzone, for the duration of the hidden call, to make it safe. + + Probably the same problem afflicts the other redzone-style ABIs too + (ppc64-linux, ppc32-aix5, ppc64-aix5); but for those, the stack is + self describing (none of this CFI nonsense) so at least messing + with the stack pointer doesn't give a danger of non-unwindable + stack. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + "addq $128,%%rsp\n\t" \ + VALGRIND_CALL_NOREDIR_RAX \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $8, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $16, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $24, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $32, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $40, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "subq $128,%%rsp\n\t" \ + "pushq 96(%%rax)\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + "addq $48, %%rsp\n" \ + "addq $128,%%rsp\n\t" \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_amd64_linux */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +/* This is useful for finding out about the on-stack stuff: + + extern int f9 ( int,int,int,int,int,int,int,int,int ); + extern int f10 ( int,int,int,int,int,int,int,int,int,int ); + extern int f11 ( int,int,int,int,int,int,int,int,int,int,int ); + extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int ); + + int g9 ( void ) { + return f9(11,22,33,44,55,66,77,88,99); + } + int g10 ( void ) { + return f10(11,22,33,44,55,66,77,88,99,110); + } + int g11 ( void ) { + return f11(11,22,33,44,55,66,77,88,99,110,121); + } + int g12 ( void ) { + return f12(11,22,33,44,55,66,77,88,99,110,121,132); + } +*/ + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* These CALL_FN_ macros assume that on ppc32-linux, + sizeof(unsigned long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,16\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,16\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,32\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + _argvec[12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg12 */ \ + "lwz 3,48(11)\n\t" \ + "stw 3,20(1)\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "addi 1,1,32\n\t" \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64_linux) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)" /* restore tocptr */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,128" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,128" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,144" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg12 */ \ + "ld 3,96(11)\n\t" \ + "std 3,136(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + "addi 1,1,144" /* restore frame */ \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64_linux */ + +/* ------------------------ ppc32-aix5 ------------------------- */ + +#if defined(PLAT_ppc32_aix5) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Expand the stack frame, copying enough info that unwinding + still works. Trashes r3. */ + +#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr) \ + "addi 1,1,-" #_n_fr "\n\t" \ + "lwz 3," #_n_fr "(1)\n\t" \ + "stw 3,0(1)\n\t" + +#define VG_CONTRACT_FRAME_BY(_n_fr) \ + "addi 1,1," #_n_fr "\n\t" + +/* These CALL_FN_ macros assume that on ppc32-aix5, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(64) \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(64) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(64) \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,60(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(64) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(72) \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,64(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,60(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(72) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "stw 2,-8(11)\n\t" /* save tocptr */ \ + "lwz 2,-4(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(72) \ + /* arg12 */ \ + "lwz 3,48(11)\n\t" \ + "stw 3,68(1)\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,64(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,60(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,56(1)\n\t" \ + /* args1-8 */ \ + "lwz 3, 4(11)\n\t" /* arg1->r3 */ \ + "lwz 4, 8(11)\n\t" /* arg2->r4 */ \ + "lwz 5, 12(11)\n\t" /* arg3->r5 */ \ + "lwz 6, 16(11)\n\t" /* arg4->r6 */ \ + "lwz 7, 20(11)\n\t" /* arg5->r7 */ \ + "lwz 8, 24(11)\n\t" /* arg6->r8 */ \ + "lwz 9, 28(11)\n\t" /* arg7->r9 */ \ + "lwz 10, 32(11)\n\t" /* arg8->r10 */ \ + "lwz 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "lwz 2,-8(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(72) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc32_aix5 */ + +/* ------------------------ ppc64-aix5 ------------------------- */ + +#if defined(PLAT_ppc64_aix5) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Expand the stack frame, copying enough info that unwinding + still works. Trashes r3. */ + +#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr) \ + "addi 1,1,-" #_n_fr "\n\t" \ + "ld 3," #_n_fr "(1)\n\t" \ + "std 3,0(1)\n\t" + +#define VG_CONTRACT_FRAME_BY(_n_fr) \ + "addi 1,1," #_n_fr "\n\t" + +/* These CALL_FN_ macros assume that on ppc64-aix5, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(128) \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(128) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(128) \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(128) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(144) \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(144) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + "mr 11,%1\n\t" \ + VG_EXPAND_FRAME_BY_trashes_r3(512) \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + VG_EXPAND_FRAME_BY_trashes_r3(144) \ + /* arg12 */ \ + "ld 3,96(11)\n\t" \ + "std 3,136(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VG_CONTRACT_FRAME_BY(144) \ + VG_CONTRACT_FRAME_BY(512) \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64_aix5 */ + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ +/* */ +/* ------------------------------------------------------------------ */ + +/* Some request codes. There are many more of these, but most are not + exposed to end-user view. These are the public ones, all of the + form 0x1000 + small_number. + + Core ones are in the range 0x00000000--0x0000ffff. The non-public + ones start at 0x2000. +*/ + +/* These macros are used by tools -- they must be public, but don't + embed them into other programs. */ +#define VG_USERREQ_TOOL_BASE(a,b) \ + ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) +#define VG_IS_TOOL_USERREQ(a, b, v) \ + (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) + +/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! + This enum comprises an ABI exported by Valgrind to programs + which use client requests. DO NOT CHANGE THE ORDER OF THESE + ENTRIES, NOR DELETE ANY -- add new ones at the end. */ +typedef + enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, + VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002, + + /* These allow any function to be called from the simulated + CPU but run on the real CPU. Nb: the first arg passed to + the function is always the ThreadId of the running + thread! So CLIENT_CALL0 actually requires a 1 arg + function, etc. */ + VG_USERREQ__CLIENT_CALL0 = 0x1101, + VG_USERREQ__CLIENT_CALL1 = 0x1102, + VG_USERREQ__CLIENT_CALL2 = 0x1103, + VG_USERREQ__CLIENT_CALL3 = 0x1104, + + /* Can be useful in regression testing suites -- eg. can + send Valgrind's output to /dev/null and still count + errors. */ + VG_USERREQ__COUNT_ERRORS = 0x1201, + + /* These are useful and can be interpreted by any tool that + tracks malloc() et al, by using vg_replace_malloc.c. */ + VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301, + VG_USERREQ__FREELIKE_BLOCK = 0x1302, + /* Memory pool support. */ + VG_USERREQ__CREATE_MEMPOOL = 0x1303, + VG_USERREQ__DESTROY_MEMPOOL = 0x1304, + VG_USERREQ__MEMPOOL_ALLOC = 0x1305, + VG_USERREQ__MEMPOOL_FREE = 0x1306, + VG_USERREQ__MEMPOOL_TRIM = 0x1307, + VG_USERREQ__MOVE_MEMPOOL = 0x1308, + VG_USERREQ__MEMPOOL_CHANGE = 0x1309, + VG_USERREQ__MEMPOOL_EXISTS = 0x130a, + + /* Allow printfs to valgrind log. */ + VG_USERREQ__PRINTF = 0x1401, + VG_USERREQ__PRINTF_BACKTRACE = 0x1402, + + /* Stack support. */ + VG_USERREQ__STACK_REGISTER = 0x1501, + VG_USERREQ__STACK_DEREGISTER = 0x1502, + VG_USERREQ__STACK_CHANGE = 0x1503 + } Vg_ClientRequest; + +#if !defined(__GNUC__) +# define __extension__ /* */ +#endif + +/* Returns the number of Valgrinds this code is running under. That + is, 0 if running natively, 1 if running under Valgrind, 2 if + running under Valgrind which is running under another Valgrind, + etc. */ +#define RUNNING_ON_VALGRIND __extension__ \ + ({unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* if not */, \ + VG_USERREQ__RUNNING_ON_VALGRIND, \ + 0, 0, 0, 0, 0); \ + _qzz_res; \ + }) + + +/* Discard translation of code in the range [_qzz_addr .. _qzz_addr + + _qzz_len - 1]. Useful if you are debugging a JITter or some such, + since it provides a way to make sure valgrind will retranslate the + invalidated area. Returns no value. */ +#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__DISCARD_TRANSLATIONS, \ + _qzz_addr, _qzz_len, 0, 0, 0); \ + } + + +/* These requests are for getting Valgrind itself to print something. + Possibly with a backtrace. This is a really ugly hack. */ + +#if defined(NVALGRIND) + +# define VALGRIND_PRINTF(...) +# define VALGRIND_PRINTF_BACKTRACE(...) + +#else /* NVALGRIND */ + +/* Modern GCC will optimize the static routine out if unused, + and unused attribute will shut down warnings about it. */ +static int VALGRIND_PRINTF(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +static int +VALGRIND_PRINTF(const char *format, ...) +{ + unsigned long _qzz_res; + va_list vargs; + va_start(vargs, format); + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF, + (unsigned long)format, (unsigned long)vargs, + 0, 0, 0); + va_end(vargs); + return (int)_qzz_res; +} + +static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +static int +VALGRIND_PRINTF_BACKTRACE(const char *format, ...) +{ + unsigned long _qzz_res; + va_list vargs; + va_start(vargs, format); + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF_BACKTRACE, + (unsigned long)format, (unsigned long)vargs, + 0, 0, 0); + va_end(vargs); + return (int)_qzz_res; +} + +#endif /* NVALGRIND */ + + +/* These requests allow control to move from the simulated CPU to the + real CPU, calling an arbitary function. + + Note that the current ThreadId is inserted as the first argument. + So this call: + + VALGRIND_NON_SIMD_CALL2(f, arg1, arg2) + + requires f to have this signature: + + Word f(Word tid, Word arg1, Word arg2) + + where "Word" is a word-sized type. + + Note that these client requests are not entirely reliable. For example, + if you call a function with them that subsequently calls printf(), + there's a high chance Valgrind will crash. Generally, your prospects of + these working are made higher if the called function does not refer to + any global variables, and does not refer to any libc or other functions + (printf et al). Any kind of entanglement with libc or dynamic linking is + likely to have a bad outcome, for tricky reasons which we've grappled + with a lot in the past. +*/ +#define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL0, \ + _qyy_fn, \ + 0, 0, 0, 0); \ + _qyy_res; \ + }) + +#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL1, \ + _qyy_fn, \ + _qyy_arg1, 0, 0, 0); \ + _qyy_res; \ + }) + +#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL2, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, 0, 0); \ + _qyy_res; \ + }) + +#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ + __extension__ \ + ({unsigned long _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__CLIENT_CALL3, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, \ + _qyy_arg3, 0); \ + _qyy_res; \ + }) + + +/* Counts the number of errors that have been recorded by a tool. Nb: + the tool must record the errors with VG_(maybe_record_error)() or + VG_(unique_error)() for them to be counted. */ +#define VALGRIND_COUNT_ERRORS \ + __extension__ \ + ({unsigned int _qyy_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */, \ + VG_USERREQ__COUNT_ERRORS, \ + 0, 0, 0, 0, 0); \ + _qyy_res; \ + }) + +/* Mark a block of memory as having been allocated by a malloc()-like + function. `addr' is the start of the usable block (ie. after any + redzone) `rzB' is redzone size if the allocator can apply redzones; + use '0' if not. Adding redzones makes it more likely Valgrind will spot + block overruns. `is_zeroed' indicates if the memory is zeroed, as it is + for calloc(). Put it immediately after the point where a block is + allocated. + + If you're using Memcheck: If you're allocating memory via superblocks, + and then handing out small chunks of each superblock, if you don't have + redzones on your small blocks, it's worth marking the superblock with + VALGRIND_MAKE_MEM_NOACCESS when it's created, so that block overruns are + detected. But if you can put redzones on, it's probably better to not do + this, so that messages for small overruns are described in terms of the + small block rather than the superblock (but if you have a big overrun + that skips over a redzone, you could miss an error this way). See + memcheck/tests/custom_alloc.c for an example. + + WARNING: if your allocator uses malloc() or 'new' to allocate + superblocks, rather than mmap() or brk(), this will not work properly -- + you'll likely get assertion failures during leak detection. This is + because Valgrind doesn't like seeing overlapping heap blocks. Sorry. + + Nb: block must be freed via a free()-like function specified + with VALGRIND_FREELIKE_BLOCK or mismatch errors will occur. */ +#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MALLOCLIKE_BLOCK, \ + addr, sizeB, rzB, is_zeroed, 0); \ + } + +/* Mark a block of memory as having been freed by a free()-like function. + `rzB' is redzone size; it must match that given to + VALGRIND_MALLOCLIKE_BLOCK. Memory not freed will be detected by the leak + checker. Put it immediately after the point where the block is freed. */ +#define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__FREELIKE_BLOCK, \ + addr, rzB, 0, 0, 0); \ + } + +/* Create a memory pool. */ +#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__CREATE_MEMPOOL, \ + pool, rzB, is_zeroed, 0, 0); \ + } + +/* Destroy a memory pool. */ +#define VALGRIND_DESTROY_MEMPOOL(pool) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__DESTROY_MEMPOOL, \ + pool, 0, 0, 0, 0); \ + } + +/* Associate a piece of memory with a memory pool. */ +#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_ALLOC, \ + pool, addr, size, 0, 0); \ + } + +/* Disassociate a piece of memory from a memory pool. */ +#define VALGRIND_MEMPOOL_FREE(pool, addr) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_FREE, \ + pool, addr, 0, 0, 0); \ + } + +/* Disassociate any pieces outside a particular range. */ +#define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_TRIM, \ + pool, addr, size, 0, 0); \ + } + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MOVE_MEMPOOL, \ + poolA, poolB, 0, 0, 0); \ + } + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_CHANGE, \ + pool, addrA, addrB, size, 0); \ + } + +/* Return 1 if a mempool exists, else 0. */ +#define VALGRIND_MEMPOOL_EXISTS(pool) \ + ({unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__MEMPOOL_EXISTS, \ + pool, 0, 0, 0, 0); \ + _qzz_res; \ + }) + +/* Mark a piece of memory as being a stack. Returns a stack id. */ +#define VALGRIND_STACK_REGISTER(start, end) \ + ({unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__STACK_REGISTER, \ + start, end, 0, 0, 0); \ + _qzz_res; \ + }) + +/* Unmark the piece of memory associated with a stack id as being a + stack. */ +#define VALGRIND_STACK_DEREGISTER(id) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__STACK_DEREGISTER, \ + id, 0, 0, 0, 0); \ + } + +/* Change the start and end address of the stack id. */ +#define VALGRIND_STACK_CHANGE(id, start, end) \ + {unsigned int _qzz_res; \ + VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, \ + VG_USERREQ__STACK_CHANGE, \ + id, start, end, 0, 0); \ + } + + +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64_linux +#undef PLAT_ppc32_aix5 +#undef PLAT_ppc64_aix5 + +#endif /* __VALGRIND_H */ diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/win32/global.mak --- a/libpurple/win32/global.mak Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/win32/global.mak Tue Jul 28 05:49:14 2009 +0000 @@ -47,6 +47,8 @@ # Locations of important (in-tree) build targets PIDGIN_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h PURPLE_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h +PIDGIN_REVISION_H := $(PIDGIN_TREE_TOP)/package_revision.h +PIDGIN_REVISION_RAW_TXT := $(PIDGIN_TREE_TOP)/package_revision_raw.txt PIDGIN_IDLETRACK_DLL := $(PIDGIN_IDLETRACK_TOP)/idletrack.dll PURPLE_PURPLE_H := $(PURPLE_TOP)/purple.h PURPLE_VERSION_H := $(PURPLE_TOP)/version.h diff -r 1b6ac48c5ffa -r b960be0f3423 libpurple/win32/targets.mak --- a/libpurple/win32/targets.mak Tue Jul 28 05:47:09 2009 +0000 +++ b/libpurple/win32/targets.mak Tue Jul 28 05:49:14 2009 +0000 @@ -17,6 +17,16 @@ /^m4_define..purple_minor_version/ {system("sed -e s/@PURPLE_MINOR_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@");} \ /^m4_define..purple_micro_version/ {system("sed -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@"); exit}' $(PIDGIN_TREE_TOP)/configure.ac +$(PIDGIN_REVISION_RAW_TXT): + (cd $(PIDGIN_TREE_TOP) && mtn --root=. automate get_base_revision_id) 2>/dev/null >$@ \ + || rm -f $@ + +$(PIDGIN_REVISION_H): $(PIDGIN_REVISION_RAW_TXT) + if [ -f $< ]; then \ + sed 's/^\(.\+\)$$/#define REVISION "\1"/' $< > $@; \ + fi + [ -f $@ ] || echo "#define REVISION \"unknown\"" > $@ + $(PURPLE_DLL) $(PURPLE_DLL).a: $(PURPLE_VERSION_H) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) libpurple.dll diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/gtkft.c --- a/pidgin/gtkft.c Tue Jul 28 05:47:09 2009 +0000 +++ b/pidgin/gtkft.c Tue Jul 28 05:49:14 2009 +0000 @@ -75,8 +75,6 @@ /* Buttons */ GtkWidget *open_button; - GtkWidget *pause_button; - GtkWidget *resume_button; GtkWidget *remove_button; GtkWidget *stop_button; GtkWidget *close_button; @@ -330,8 +328,6 @@ if (dialog->selected_xfer == NULL) { gtk_widget_set_sensitive(dialog->expander, FALSE); gtk_widget_set_sensitive(dialog->open_button, FALSE); - gtk_widget_set_sensitive(dialog->pause_button, FALSE); - gtk_widget_set_sensitive(dialog->resume_button, FALSE); gtk_widget_set_sensitive(dialog->stop_button, FALSE); gtk_widget_show(dialog->stop_button); @@ -361,8 +357,6 @@ gtk_widget_set_sensitive (dialog->open_button, FALSE); } #endif - gtk_widget_set_sensitive(dialog->pause_button, FALSE); - gtk_widget_set_sensitive(dialog->resume_button, FALSE); gtk_widget_set_sensitive(dialog->remove_button, TRUE); } else if (purple_xfer_is_canceled(xfer)) { @@ -370,8 +364,6 @@ gtk_widget_show(dialog->remove_button); gtk_widget_set_sensitive(dialog->open_button, FALSE); - gtk_widget_set_sensitive(dialog->pause_button, FALSE); - gtk_widget_set_sensitive(dialog->resume_button, FALSE); gtk_widget_set_sensitive(dialog->remove_button, TRUE); } else { @@ -379,10 +371,6 @@ gtk_widget_hide(dialog->remove_button); gtk_widget_set_sensitive(dialog->open_button, FALSE); - - /* TODO: If the transfer can pause, blah blah */ - gtk_widget_set_sensitive(dialog->pause_button, FALSE); - gtk_widget_set_sensitive(dialog->resume_button, FALSE); gtk_widget_set_sensitive(dialog->stop_button, TRUE); } } @@ -559,16 +547,6 @@ } static void -pause_button_cb(GtkButton *button, PidginXferDialog *dialog) -{ -} - -static void -resume_button_cb(GtkButton *button, PidginXferDialog *dialog) -{ -} - -static void remove_button_cb(GtkButton *button, PidginXferDialog *dialog) { pidgin_xfer_dialog_remove_xfer(dialog, dialog->selected_xfer); @@ -763,6 +741,7 @@ /* Create the window. */ dialog->window = window = pidgin_create_dialog(_("File Transfers"), PIDGIN_HIG_BORDER, "file transfer", TRUE); + gtk_window_set_default_size(GTK_WINDOW(window), 450, 250); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_win_cb), dialog); @@ -818,16 +797,6 @@ gtk_widget_set_sensitive(button, FALSE); dialog->open_button = button; - /* Pause button */ - button = pidgin_dialog_add_button(GTK_DIALOG(window), _("_Pause"), G_CALLBACK(pause_button_cb), dialog); - gtk_widget_set_sensitive(button, FALSE); - dialog->pause_button = button; - - /* Resume button */ - button = pidgin_dialog_add_button(GTK_DIALOG(window), _("_Resume"), G_CALLBACK(resume_button_cb), dialog); - gtk_widget_set_sensitive(button, FALSE); - dialog->resume_button = button; - /* Remove button */ button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_REMOVE, G_CALLBACK(remove_button_cb), dialog); gtk_widget_hide(button); diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/gtkmedia.c --- a/pidgin/gtkmedia.c Tue Jul 28 05:47:09 2009 +0000 +++ b/pidgin/gtkmedia.c Tue Jul 28 05:49:14 2009 +0000 @@ -38,6 +38,10 @@ #ifdef USE_VV #include "media-gst.h" +#ifdef _WIN32 +#include +#endif + #include #define PIDGIN_TYPE_MEDIA (pidgin_media_get_type()) @@ -213,6 +217,7 @@ return FALSE; } +#ifdef HAVE_X11 static int pidgin_x_error_handler(Display *display, XErrorEvent *event) { @@ -246,6 +251,7 @@ error_type); return 0; } +#endif static void menu_hangup(gpointer data, guint action, GtkWidget *item) @@ -303,7 +309,9 @@ GtkWidget *vbox; media->priv = PIDGIN_MEDIA_GET_PRIVATE(media); +#ifdef HAVE_X11 XSetErrorHandler(pidgin_x_error_handler); +#endif vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(media), vbox); @@ -450,10 +458,19 @@ PidginMediaPrivate *priv = data->gtkmedia->priv; gulong window_id; +#ifdef _WIN32 + if (data->participant == NULL) + window_id = GDK_WINDOW_HWND(priv->local_video->window); + else + window_id = GDK_WINDOW_HWND(priv->remote_video->window); +#elif defined(HAVE_X11) if (data->participant == NULL) window_id = GDK_WINDOW_XWINDOW(priv->local_video->window); else window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window); +#else +# error "Unsupported windowing system" +#endif purple_media_set_output_window(priv->media, data->session_id, data->participant, window_id); @@ -786,7 +803,7 @@ gchar *sid, gchar *name, PidginMedia *gtkmedia) { purple_debug_info("gtkmedia", "state: %d sid: %s name: %s\n", - state, sid, name); + state, sid ? sid : "(null)", name ? name : "(null)"); if (sid == NULL && name == NULL) { if (state == PURPLE_MEDIA_STATE_END) { pidgin_media_emit_message(gtkmedia, diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/gtksound.c --- a/pidgin/gtksound.c Tue Jul 28 05:47:09 2009 +0000 +++ b/pidgin/gtksound.c Tue Jul 28 05:49:14 2009 +0000 @@ -158,7 +158,7 @@ const char *message, PurpleSoundEventID event) { PurpleConversation *conv = purple_find_conversation_with_account( - PURPLE_CONV_TYPE_ANY, receiver, account); + PURPLE_CONV_TYPE_IM, receiver, account); play_conv_event(conv, event); } diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/11/invisible.png Binary file pidgin/pixmaps/status/11/invisible.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/16/invisible.png Binary file pidgin/pixmaps/status/16/invisible.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/16/offline.png Binary file pidgin/pixmaps/status/16/offline.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/22/invisible.png Binary file pidgin/pixmaps/status/22/invisible.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/22/offline.png Binary file pidgin/pixmaps/status/22/offline.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/32/invisible.png Binary file pidgin/pixmaps/status/32/invisible.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/32/offline.png Binary file pidgin/pixmaps/status/32/offline.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/48/invisible.png Binary file pidgin/pixmaps/status/48/invisible.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 pidgin/pixmaps/status/48/offline.png Binary file pidgin/pixmaps/status/48/offline.png has changed diff -r 1b6ac48c5ffa -r b960be0f3423 po/ChangeLog --- a/po/ChangeLog Tue Jul 28 05:47:09 2009 +0000 +++ b/po/ChangeLog Tue Jul 28 05:49:14 2009 +0000 @@ -7,11 +7,13 @@ * Chinese (Simplified) translation updated under new translator (Aron Xu) * Czech translation updated (David Vachulka) * Dutch translation updated (Daniël Heres) + * English (British) translation updated (Luke Ross) * Finnish translation updated (Timo Jyrinki) * French translation updated (Éric Boumaour) * Galician translation updated (Frco. Javier Rial Rodríguez) * German translation updated (Jochen Kemnade and Björn Voigt) * Greek translation updated (Bouklis Panos) + * Hebrew translation updated (Shalom Craimer) * Khmer translation added (Khoem Sokhem) * Lao translation updated (Anousak Souphavah) * Norwegian Nynorsk translation updated (Yngve Spjeld Landro) diff -r 1b6ac48c5ffa -r b960be0f3423 po/ca.po --- a/po/ca.po Tue Jul 28 05:47:09 2009 +0000 +++ b/po/ca.po Tue Jul 28 05:49:14 2009 +0000 @@ -33,8 +33,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-06 15:04-0700\n" -"PO-Revision-Date: 2009-07-06 00:19+0200\n" +"POT-Creation-Date: 2009-07-26 17:22+0200\n" +"PO-Revision-Date: 2009-07-26 17:23+0200\n" "Last-Translator: Josep Puigdemont i Casamajó \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" @@ -1726,6 +1726,7 @@ msgstr "" "No es pot comprovar el certificat que presenta «%s» atès que està auto-signat." +#. FIXME 2.6.1 #, c-format msgid "The certificate chain presented for %s is not valid." msgstr "La cadena de certificació que presenta %s no és vàlida." @@ -1736,6 +1737,7 @@ #. stifle it. #. TODO: Probably wrong. #. TODO: Probably wrong +#. TODO: Probably wrong. msgid "SSL Certificate Error" msgstr "Error en el certificat SSL" @@ -1817,7 +1819,6 @@ msgstr "+++ %s se n'ha anat" #. Unknown error -#. Unknown error! msgid "Unknown error" msgstr "Error desconegut" @@ -2009,6 +2010,11 @@ msgstr "S'està iniciant la transferència de %s de %s?" #, c-format +msgid "Transfer of file %s complete" +msgstr "" +"S'ha completat la transferència del fitxer %s" + +#, c-format msgid "Transfer of file %s complete" msgstr "S'ha completat la transferència del fitxer %s" @@ -2932,18 +2938,17 @@ "No s'ha pogut detectar la instal·lació d'ActiveTCL. Si voleu emprar " "connectors TCL, instal·leu l'ActiveTCL de http://www.activestate.com\n" -#, fuzzy msgid "" "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin." "im/BonjourWindows for more information." msgstr "" -"No s'ha pogut trobar el joc d'eines per a Windows de l'Apple Bonjour, " -"consulteu les preguntes més freqüents a http://developer.pidgin.im/" -"BonjourWindows per a més informació." - -#, fuzzy +"No s'ha pogut trobar el joc d'eines «Bonjour per a Windows» d'Apple, " +"consulteu les preguntes més freqüents a http://d.pidgin.im/BonjourWindows " +"per a més informació." + +# FIXME msgid "Unable to listen for incoming IM connections" -msgstr "No es poden escoltar connexions entrants de MI\n" +msgstr "No s'ha pogut escoltar connexions entrants de MI" msgid "" "Unable to establish connection with the local mDNS server. Is it running?" @@ -2997,21 +3002,17 @@ msgid "Unable to send the message, the conversation couldn't be started." msgstr "No s'ha pogut enviar el missatge, no s'ha pogut iniciar la conversa." -#, fuzzy, c-format +#, c-format msgid "Unable to create socket: %s" -msgstr "" -"No s'ha pogut crear el sòcol:\n" -"%s" - -#, fuzzy, c-format +msgstr "No s'ha pogut crear el sòcol: %s" + +#, c-format msgid "Unable to bind socket to port: %s" -msgstr "No s'ha pogut vincular el sòcol al port" - -#, fuzzy, c-format +msgstr "No s'ha pogut vincular el sòcol al port: %s" + +#, c-format msgid "Unable to listen on socket: %s" -msgstr "" -"No s'ha pogut crear el sòcol:\n" -"%s" +msgstr "No s'ha pogut crear el sòcol: %s" msgid "Error communicating with local mDNSResponder." msgstr "" @@ -3061,17 +3062,14 @@ msgid "Load buddylist from file..." msgstr "Carrega la llista d'amics d'un fitxer..." -#, fuzzy msgid "You must fill in all registration fields" -msgstr "Empleneu els camps de registre." - -#, fuzzy +msgstr "Heu d'emplenar tots els camps de registre" + msgid "Passwords do not match" -msgstr "Les contrasenyes no coincideixen." - -#, fuzzy +msgstr "Les contrasenyes no coincideixen" + msgid "Unable to register new account. An unknown error occurred." -msgstr "No s'ha pogut registrar el nou compte. S'ha produït un error.\n" +msgstr "No s'ha pogut registrar el nou compte. S'ha produït un error." msgid "New Gadu-Gadu Account Registered" msgstr "S'ha registrat el nou compte Gadu-Gadu" @@ -3086,11 +3084,10 @@ msgstr "Contrasenya (repetiu-la)" msgid "Enter captcha text" -msgstr "" - -#, fuzzy +msgstr "Introduïu el text captcha" + msgid "Captcha" -msgstr "Imatge captcha" +msgstr "Captcha" msgid "Register New Gadu-Gadu Account" msgstr "Registra un compte Gadu-Gadu nou" @@ -3229,9 +3226,9 @@ msgid "Chat _name:" msgstr "_Nom del xat:" -#, fuzzy, c-format +#, c-format msgid "Unable to resolve hostname '%s': %s" -msgstr "No s'ha pogut resoldre el nom del servidor" +msgstr "No s'ha pogut resoldre el nom «%s»: %s" #. 1. connect to server #. connect to the server @@ -3244,9 +3241,8 @@ msgid "This chat name is already in use" msgstr "Aquest nom de xat ja existeix" -#, fuzzy msgid "Not connected to the server" -msgstr "No esteu connectat al servidor." +msgstr "No esteu connectat al servidor" msgid "Find buddies..." msgstr "Cerca amics..." @@ -3304,7 +3300,6 @@ msgid "File Transfer Failed" msgstr "Ha fallat la transferència del fitxer" -#, fuzzy msgid "Unable to open a listening port." msgstr "No s'ha pogut obrir cap port on escoltar." @@ -3328,11 +3323,9 @@ #. #. TODO: what to do here - do we really have to disconnect? #. TODO: do we really want to disconnect on a failure to write? -#, fuzzy, c-format +#, c-format msgid "Lost connection with server: %s" -msgstr "" -"S'ha perdut la connexió amb el servidor:\n" -"%s" +msgstr "S'ha perdut la connexió amb el servidor: %s" msgid "View MOTD" msgstr "Mostra la frase del dia" @@ -3354,13 +3347,13 @@ msgstr "No s'ha pogut connectar" #. this is a regular connect, error out -#, fuzzy, c-format +#, c-format msgid "Unable to connect: %s" -msgstr "No s'ha pogut connectar a %s" - -#, fuzzy, c-format +msgstr "No s'ha pogut connectar: %s" + +#, c-format msgid "Server closed the connection" -msgstr "El servidor ha tancat la connexió." +msgstr "El servidor ha tancat la connexió" msgid "Users" msgstr "Usuaris" @@ -3788,13 +3781,11 @@ msgid "execute" msgstr "executa" -#, fuzzy msgid "Server requires TLS/SSL, but no TLS/SSL support was found." msgstr "" -"El servidor requereix TLS/SSL per entrar. No s'ha trobat suport per a TLS/" -"SSL." - -#, fuzzy +"El servidor requereix TLS/SSL per entrar, però no s'ha trobat cap " +"implementació de TLS/SSL." + msgid "You require encryption, but no TLS/SSL support was found." msgstr "" "Heu requerit que es xifri, però no s'ha trobat cap implementació de TLS/SSL." @@ -3813,13 +3804,11 @@ msgid "Plaintext Authentication" msgstr "Autenticació de text" -#, fuzzy msgid "SASL authentication failed" -msgstr "Ha fallat l'autenticació" - -#, fuzzy +msgstr "Ha fallat l'autenticació SASL" + msgid "Invalid response from server" -msgstr "La resposta del servidor no és vàlida." +msgstr "La resposta del servidor no és vàlida" msgid "Server does not use any supported authentication method" msgstr "No hi ha cap mètode d'autenticació compatible amb aquest servidor" @@ -3830,9 +3819,9 @@ msgid "Invalid challenge from server" msgstr "Repte del servidor invàlid" -#, fuzzy, c-format +#, c-format msgid "SASL error: %s" -msgstr "Error en el SASL" +msgstr "Error SASL: %s" msgid "The BOSH connection manager terminated your session." msgstr "El gestor de connexions BOSH ha tancat la connexió." @@ -3846,9 +3835,9 @@ msgid "Unable to establish a connection with the server" msgstr "No s'ha pogut establir una connexió amb el servidor" -#, fuzzy, c-format +#, c-format msgid "Unable to establish a connection with the server: %s" -msgstr "No s'ha pogut establir una connexió amb el servidor" +msgstr "No s'ha pogut establir una connexió amb el servidor: %s" msgid "Unable to establish SSL connection" msgstr "No s'ha pogut establir una connexió SSL" @@ -4112,17 +4101,15 @@ msgid "Roles:" msgstr "Rols:" -#, fuzzy msgid "Ping timed out" -msgstr "Temps d'espera del ping" - -#, fuzzy +msgstr "S'ha esgitat el temps d'espera (ping)" + msgid "" "Unable to find alternative XMPP connection methods after failing to connect " "directly." msgstr "" "No s'ha pogut trobar cap mètode alternatiu de connexió XMPP després de no " -"haver pogut connectar directament.\n" +"haver pogut connectar directament." msgid "Invalid XMPP ID" msgstr "ID de l'XMPP invàlid" @@ -4200,9 +4187,6 @@ msgid "Change Registration" msgstr "Canvia el registre" -msgid "Malformed BOSH Connect Server" -msgstr "La connexió al servidor BOSH està malmesa" - msgid "Error unregistering account" msgstr "S'ha produït un error en cancel·lar el registre" @@ -4709,17 +4693,16 @@ msgid "_Accept Defaults" msgstr "_Accepta els valors predeterminats" -#, fuzzy msgid "No reason" msgstr "No s'ha indicat cap motiu" -#, fuzzy, c-format +#, c-format msgid "You have been kicked: (%s)" -msgstr "%s us ha fet fora: (%s)" - -#, fuzzy, c-format +msgstr "Us han fet fora: (%s)" + +#, c-format msgid "Kicked (%s)" -msgstr "%s us ha fet fora (%s)" +msgstr "Us han fet fora (%s)" msgid "An error occurred on the in-band bytestream transfer\n" msgstr "" @@ -5057,6 +5040,26 @@ msgstr "Contactes que no són de MI" #, c-format +msgid "%s sent a wink. Click here to play it" +msgstr "" +"%s us ha enviat un wink. Feu clic aquí per escoltar-" +"lo" + +#, c-format +msgid "%s sent a wink, but it could not be saved" +msgstr "%s us ha envia un wink, però no s'ha pogut desar" + +#, c-format +msgid "%s sent a voice clip. Click here to play it" +msgstr "" +"%s us ha enviat un clip de veu. Feu clic aquí per " +"escoltar-lo" + +#, c-format +msgid "%s sent a voice clip, but it could not be saved" +msgstr "%s us han enviat un clip de música, però no s'ha pogut desar" + +#, c-format msgid "%s sent you a voice chat invite, which is not yet supported." msgstr "" "%s us ha enviat una invitació per fer una conversa de veu, però això encara " @@ -5213,6 +5216,29 @@ msgid "SSL support is needed for MSN. Please install a supported SSL library." msgstr "L'MSN necessita SSL, instal·leu alguna biblioteca d'SSL permesa." +#, c-format +msgid "" +"Unable to add the buddy %s because the username is invalid. Usernames must " +"be a valid email address." +msgstr "" +"No s'ha pogut afegir l'amic %s perquè el nom d'usuari no és vàlid. Els noms " +"d'usuari han de ser adreces de correu vàlides." + +msgid "Unable to Add" +msgstr "No s'ha pogut afegir" + +msgid "Authorization Request Message:" +msgstr "Missatge de petició d'autorització:" + +msgid "Please authorize me!" +msgstr "Autoritzeu-me, si us plau." + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#. +msgid "_OK" +msgstr "_D'acord" + msgid "Error retrieving profile" msgstr "S'ha produït un error en recuperar el perfil" @@ -5412,6 +5438,7 @@ msgid "Unable to add user" msgstr "No s'ha pogut afegir l'usuari" +#. Unknown error! #, c-format msgid "Unknown error (%d)" msgstr "Error desconegut (%d)" @@ -5484,26 +5511,22 @@ "S'ha produït un error de connexió del servidor %s:\n" "%s" -#, fuzzy msgid "Our protocol is not supported by the server" -msgstr "El servidor no implementa el nostre protocol." - -#, fuzzy +msgstr "El servidor no implementa aquest protocol" + msgid "Error parsing HTTP" -msgstr "S'ha produït un error en analitzar HTTP." - -#, fuzzy +msgstr "S'ha produït un error en analitzar HTTP" + msgid "You have signed on from another location" -msgstr "Us heu connectat des d'un altre lloc." +msgstr "Us heu connectat des d'un altre lloc" msgid "The MSN servers are temporarily unavailable. Please wait and try again." msgstr "" "Els servidors MSN estan temporalment no disponibles. Espereu i proveu-ho més " "tard." -#, fuzzy msgid "The MSN servers are going down temporarily" -msgstr "Els servidors MSN no seran accessibles temporalment." +msgstr "Els servidors MSN no seran accessibles temporalment" #, c-format msgid "Unable to authenticate: %s" @@ -5851,14 +5874,14 @@ msgid "Client Version" msgstr "Versió del client" -#, fuzzy msgid "" "An error occurred while trying to set the username. Please try again, or " "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " "to set your username." msgstr "" -"Aneu a http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " -"escolliu un nom d'usuari i torneu a provar d'entrar." +"S'ha produït un error en intentar establir el nom d'usuari. Intenteu-ho de " +"nou, o aneu a http://editprofile.myspace.com/index.cfm?fuseaction=profile." +"username per establir el vostre nom d'usuari." msgid "MySpaceIM - Username Available" msgstr "MySpaceIM - El nom d'usuari està disponible" @@ -6119,9 +6142,9 @@ msgid "Unknown error: 0x%X" msgstr "Error desconegut: 0x%X" -#, fuzzy, c-format +#, c-format msgid "Unable to login: %s" -msgstr "No s'ha pogut fer ping a l'usuari %s" +msgstr "No s'ha pogut entrar: %s" #, c-format msgid "Unable to send message. Could not get details for user (%s)." @@ -6307,10 +6330,8 @@ msgid "Error requesting " msgstr "S'ha produït en sol·licitar " -#, fuzzy msgid "AOL does not allow your screen name to authenticate here" -msgstr "" -"AOL no permet que autentiqueu aquest nom d'usuari a través d'aquest web." +msgstr "AOL no permet que us autentiqueu amb aquest nom d'usuari aquí" msgid "Could not join chat room" msgstr "No s'ha pogut entrar a la sala de xat" @@ -6318,9 +6339,8 @@ msgid "Invalid chat room name" msgstr "El nom de sala de xat no és vàlid" -#, fuzzy msgid "Received invalid data on connection with server" -msgstr "S'han rebut dades invàlides a la connexió amb el servidor." +msgstr "S'han rebut dades invàlides a la connexió amb el servidor" #. *< type #. *< ui_requirement @@ -6367,9 +6387,8 @@ msgid "Received invalid data on connection with remote user." msgstr "S'han rebut dades invàlides a la connexió amb l'usuari remot." -#, fuzzy msgid "Unable to establish a connection with the remote user." -msgstr "No s'ha pogut establir una connexió amb l'usuari remot." +msgstr "No s'ha pogut establir una connexió amb el servidor remot." msgid "Direct IM established" msgstr "S'ha establert una connexió directa de MI" @@ -6571,15 +6590,13 @@ msgid "Buddy Comment" msgstr "Comentari de l'amic" -#, fuzzy, c-format +#, c-format msgid "Unable to connect to authentication server: %s" -msgstr "" -"No s'ha pogut connectar al servidor d'autenticació:\n" -"%s" - -#, fuzzy, c-format +msgstr "No s'ha pogut connectar al servidor d'autenticació: %s" + +#, c-format msgid "Unable to connect to BOS server: %s" -msgstr "No s'ha pogut connectar al servidor." +msgstr "No s'ha pogut connectar al servidor BOS: %s" msgid "Username sent" msgstr "S'ha enviat el nom d'usuari" @@ -6591,16 +6608,15 @@ msgid "Finalizing connection" msgstr "S'està finalitzant la connexió" -#, fuzzy, c-format +#, c-format msgid "" "Unable to sign on as %s because the username is invalid. Usernames must be " "a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"No s'ha pogut entrar: no s'ha pogut entrar com a %s perquè el nom d'usuari " -"no és vàlid. Els noms d'usuari han de ser adreces de correu vàlides, o " -"començar amb una lletra i contenir només lletres, nombres o espais, o només " -"nombres." +"No s'ha pogut entrar com a %s perquè aquest nom d'usuari no és vàlid. Els " +"noms d'usuari han de ser adreces de correu vàlides, o començar amb una " +"lletra i contenir només lletres, nombres o espais, o només nombres." #, c-format msgid "You may be disconnected shortly. If so, check %s for updates." @@ -6625,15 +6641,15 @@ msgstr "L'usuari no existeix" #. Suspended account -#, fuzzy msgid "Your account is currently suspended" -msgstr "El vostre compte està actualment suspès." +msgstr "El vostre compte està actualment suspès" #. service temporarily unavailable msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "" "El servei de missatges instantanis d'AOL no està disponible temporalment." +#. client too old #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "La versió del client que useu és massa antiga, actualitzeu-la a %s" @@ -6647,9 +6663,8 @@ "minut i intenteu-ho de nou. Si continueu intentant-ho, haureu d'esperar " "encara més temps." -#, fuzzy msgid "The SecurID key entered is invalid" -msgstr "La clau SecurID que heu entrat no és vàlida." +msgstr "La clau SecurID que heu entrat no és vàlida" msgid "Enter SecurID" msgstr "Introduïu el SecureID" @@ -6657,12 +6672,6 @@ msgid "Enter the 6 digit number from the digital display." msgstr "Introduïu el nombre de 6 dígits de la pantalla digital." -#. * -#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. -#. -msgid "_OK" -msgstr "_D'acord" - msgid "Password sent" msgstr "S'ha enviat la contrasenya" @@ -6672,12 +6681,6 @@ msgid "Please authorize me so I can add you to my buddy list." msgstr "Autoritzeu-me perquè us pugui afegir a la meva llista d'amics." -msgid "Authorization Request Message:" -msgstr "Missatge de petició d'autorització:" - -msgid "Please authorize me!" -msgstr "Autoritzeu-me, si us plau." - msgid "No reason given." msgstr "No s'ha indicat cap motiu." @@ -7001,7 +7004,7 @@ msgid "Away message too long." msgstr "El missatge d'absència és massa llarg." -#, fuzzy, c-format +#, c-format msgid "" "Unable to add the buddy %s because the username is invalid. Usernames must " "be a valid email address, or start with a letter and contain only letters, " @@ -7011,9 +7014,6 @@ "d'usuari han de ser adreces de correu vàlides, o començar amb una lletra i " "contenir només lletres, nombres i espais, o només nombres." -msgid "Unable to Add" -msgstr "No s'ha pogut afegir" - msgid "Unable to Retrieve Buddy List" msgstr "No s'ha pogut obtenir la llista d'amics" @@ -7027,18 +7027,18 @@ msgid "Orphans" msgstr "Orfes" -#, fuzzy, c-format +#, c-format msgid "" "Unable to add the buddy %s because you have too many buddies in your buddy " "list. Please remove one and try again." msgstr "" -"No s'ha pogut afegir l'amic %s perquè hi ha massa entrades a la llista " -"d'amics. Suprimiu-ne algun i torneu-ho a intentar." +"No s'ha pogut afegir l'amic %s perquè hi ha massa amics a la llista d'amics. " +"Suprimiu-ne algun i torneu-ho a intentar." msgid "(no name)" msgstr "(sense nom)" -#, fuzzy, c-format +#, c-format msgid "Unable to add the buddy %s for an unknown reason." msgstr "Per motius desconeguts no s'ha pogut afegir l'amic %s." @@ -7817,7 +7817,6 @@ msgid "Update interval (seconds)" msgstr "Interval d'actualització (en segons)" -#, fuzzy msgid "Unable to decrypt server reply" msgstr "No es pot desxifrar la resposta del servidor" @@ -7887,9 +7886,8 @@ msgid "Requesting token" msgstr "S'està sol·licitant un testimoni" -#, fuzzy msgid "Unable to resolve hostname" -msgstr "No s'ha pogut resoldre el nom del servidor" +msgstr "No s'ha pogut resoldre el nom de l'ordinador" msgid "Invalid server or port" msgstr "El servidor o el port no són vàlids" @@ -7942,7 +7940,6 @@ msgid "QQ Qun Command" msgstr "Ordre QQ Qun" -#, fuzzy msgid "Unable to decrypt login reply" msgstr "No s'ha pogut desxifrar la resposta d'entrada" @@ -8927,7 +8924,6 @@ msgid "Disconnected by server" msgstr "El servidor us ha desconnectat" -#, fuzzy msgid "Error connecting to SILC Server" msgstr "S'ha produït un error en connectar al servidor SILC" @@ -8943,7 +8939,6 @@ msgid "Performing key exchange" msgstr "S'estan intercanviant les claus" -#, fuzzy msgid "Unable to load SILC key pair" msgstr "No s'ha pogut carregar el parell de claus SILC" @@ -8951,14 +8946,9 @@ msgid "Connecting to SILC Server" msgstr "S'està connectant al servidor SILC" -#, fuzzy -msgid "Unable to not load SILC key pair" -msgstr "No s'ha pogut carregar el parell de claus SILC" - msgid "Out of memory" msgstr "Sense memòria" -#, fuzzy msgid "Unable to initialize SILC protocol" msgstr "No s'ha pogut inicialitzar el protocol SILC" @@ -9258,9 +9248,8 @@ msgid "Creating SILC key pair..." msgstr "S'està creant el parell de claus SILC..." -#, fuzzy msgid "Unable to create SILC key pair" -msgstr "No s'ha pogut crear el parell de claus SILC\n" +msgstr "No s'ha pogut crear el parell de claus SILC" #. Hint for translators: Please check the tabulator width here and in #. the next strings (short strings: 2 tabs, longer strings 1 tab, @@ -9401,27 +9390,24 @@ msgid "Failure: Authentication failed" msgstr "Error: ha fallat l'autenticació" -#, fuzzy msgid "Unable to initialize SILC Client connection" msgstr "No s'ha pogut inicialitzar la connexió per al client SILC" msgid "John Noname" msgstr "Pepet Sensenom" -#, fuzzy, c-format +#, c-format msgid "Unable to load SILC key pair: %s" msgstr "No s'ha pogut carregar la parella de claus SILC: %s" msgid "Unable to create connection" msgstr "No s'ha pogut crear la connexió" -#, fuzzy msgid "Unknown server response" -msgstr "Resposta desconeguda del servidor." - -#, fuzzy +msgstr "Resposta desconeguda del servidor" + msgid "Unable to create listen socket" -msgstr "No s'ha pogut crear el sòcol" +msgstr "No s'ha pogut crear el sòcol on escoltar" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "Els noms d'usuari SIP no poden contenir espais en blanc ni @" @@ -9484,9 +9470,8 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "Yahoo! Protocol Plugin" -msgstr "Connector per al protocol Yahoo" +msgstr "Connector per al protocol Yahoo!" msgid "Pager server" msgstr "Servidor de cercapersones" @@ -9517,9 +9502,8 @@ msgid "Yahoo Chat port" msgstr "Port del xat de Yahoo" -#, fuzzy msgid "Yahoo JAPAN ID..." -msgstr "ID de Yahoo..." +msgstr "ID de Yahoo del Japó..." #. *< type #. *< ui_requirement @@ -9531,9 +9515,8 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "Yahoo! JAPAN Protocol Plugin" -msgstr "Connector per al protocol Yahoo" +msgstr "Connector per al protocol Yahoo! del Japó" msgid "Your SMS was not delivered" msgstr "No s'ha enviat l'SMS" @@ -9567,22 +9550,20 @@ msgstr "S'han rebut dades invàlides" #. security lock from too many failed login attempts -#, fuzzy msgid "" "Account locked: Too many failed login attempts. Logging into the Yahoo! " "website may fix this." msgstr "" -"El compte està blocat perquè s'ha intentat entrar massa cops.\n" -"Això es pot solucionar entrant al web de Yahoo!" +"El compte està blocat perquè s'ha intentat entrar massa cops. Això es pot " +"solucionar entrant al web de Yahoo!" #. indicates a lock of some description -#, fuzzy msgid "" "Account locked: Unknown reason. Logging into the Yahoo! website may fix " "this." msgstr "" -"El compte està blocat, però no se'n coneix el motiu.\n" -"Això es pot solucionar entrant al web de Yahoo!" +"El compte està blocat, però no se'n coneix el motiu. Això es pot solucionar " +"entrant al web de Yahoo!" #. username or password missing msgid "Username or password missing" @@ -9621,13 +9602,12 @@ "S'ha produït un error desconegut, número %d. Això es pot solucionar entrant " "al web de Yahoo!" -#, fuzzy, c-format +#, c-format msgid "Unable to add buddy %s to group %s to the server list on account %s." msgstr "" "No s'ha pogut afegir l'amic %s al grup %s a la llista del servidor del " "compte %s." -#, fuzzy msgid "Unable to add buddy to server list" msgstr "No s'ha pogut afegir l'amic a la llista del servidor" @@ -9635,19 +9615,16 @@ msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ Audible %s/%s/%s.swf ] %s" -#, fuzzy msgid "Received unexpected HTTP response from server" -msgstr "S'ha rebut una resposta HTTP inesperada del servidor." - -#, fuzzy, c-format +msgstr "S'ha rebut una resposta HTTP inesperada del servidor" + +#, c-format msgid "Lost connection with %s: %s" -msgstr "" -"S'ha perdut la connexió amb %s:\n" -"%s" - -#, fuzzy, c-format +msgstr "S'ha perdut la connexió amb %s: %s" + +#, c-format msgid "Unable to establish a connection with %s: %s" -msgstr "No s'ha pogut establir una connexió amb el servidor" +msgstr "No s'ha pogut establir una connexió amb %s: %s" msgid "Not at Home" msgstr "Fora de casa" @@ -9796,12 +9773,8 @@ msgstr "El perfil d'usuari està buit." #, c-format -msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." -msgstr "" -"%s no ha acceptat la vostra invitació d'entrar a la sala «%s» perquè «%s»." - -msgid "Invitation Rejected" -msgstr "S'ha rebutjat la invitació" +msgid "%s has declined to join." +msgstr "%s no ha volgut connectar-se." msgid "Failed to join chat" msgstr "No s'ha pogut unir al xat" @@ -9853,9 +9826,8 @@ msgid "User Rooms" msgstr "Sales d'usuari" -#, fuzzy msgid "Connection problem with the YCHT server" -msgstr "Problema de connexió amb el servidor YCHT." +msgstr "Hi ha un problema de connexió amb el servidor YCHT" msgid "" "(There was an error converting this message.\t Check the 'Encoding' option " @@ -9990,17 +9962,17 @@ msgid "Exposure" msgstr "Exposició" -#, fuzzy, c-format +#, c-format msgid "Unable to parse response from HTTP proxy: %s" msgstr "" -"No s'ha pogut analitzar la resposta del servidor intermediari d'HTTP: %s\n" +"No s'ha pogut analitzar la resposta del servidor intermediari d'HTTP: %s" #, c-format msgid "HTTP proxy connection error %d" msgstr "Error en la connexió al servidor intermediari d'HTTP %d" # FIXME: tunelitzar... tunelar? fer un túnel? -#, fuzzy, c-format +#, c-format msgid "Access denied: HTTP proxy server forbids port %d tunneling" msgstr "" "S'ha denegat l'accés: el servidor intermediari d'HTTP prohibeix la " @@ -10301,7 +10273,7 @@ msgid "Use this buddy _icon for this account:" msgstr "Utilitza aquesta _icona d'amic per a aquest compte:" -msgid "_Advanced" +msgid "Ad_vanced" msgstr "_Avançat" msgid "Use GNOME Proxy Settings" @@ -10364,7 +10336,7 @@ msgid "Create _this new account on the server" msgstr "Crea _aquest compte nou al servidor" -msgid "_Proxy" +msgid "P_roxy" msgstr "Servidor _intermediari" msgid "Enabled" @@ -13254,8 +13226,20 @@ msgid "_Copy Email Address" msgstr "_Copia l'adreça de correu" +msgid "_Open File" +msgstr "_Obre un fitxer" + +msgid "Open _Containing Directory" +msgstr "Obre el directori on es _troba" + msgid "Save File" -msgstr "Desa un fitxer" +msgstr "Desa el fitxer" + +msgid "_Play Sound" +msgstr "_Reprodueix un so" + +msgid "_Save File" +msgstr "_Desa el fitxer" msgid "Select color" msgstr "Seleccioneu un color" @@ -14421,6 +14405,20 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." +#~ msgid "" +#~ "%s declined your conference invitation to room \"%s\" because \"%s\"." +#~ msgstr "" +#~ "%s no ha acceptat la vostra invitació d'entrar a la sala «%s» perquè «%s»." + +#~ msgid "Invitation Rejected" +#~ msgstr "S'ha rebutjat la invitació" + +#~ msgid "Malformed BOSH Connect Server" +#~ msgstr "La connexió al servidor BOSH està malmesa" + +#~ msgid "_Proxy" +#~ msgstr "Servidor _intermediari" + #~ msgid "Cannot open socket" #~ msgstr "No s'ha pogut obrir el sòcol" diff -r 1b6ac48c5ffa -r b960be0f3423 po/en_GB.po --- a/po/en_GB.po Tue Jul 28 05:47:09 2009 +0000 +++ b/po/en_GB.po Tue Jul 28 05:49:14 2009 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Pidgin 2.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-06 15:04-0700\n" +"POT-Creation-Date: 2009-07-25 14:11-0700\n" "PO-Revision-Date: 2006-02-07 13:57+0000\n" "Last-Translator: Luke Ross \n" "Language-Team: \n" @@ -25,7 +25,7 @@ msgid "%s. Try `%s -h' for more information.\n" msgstr "%s. Try `%s -h' for more information.\n" -#, fuzzy, c-format +#, c-format msgid "" "%s\n" "Usage: %s [OPTION]...\n" @@ -40,7 +40,7 @@ "Usage: %s [OPTION]...\n" "\n" " -c, --config=DIR use DIR for config files\n" -" -d, --debug print debug messages to stdout\n" +" -d, --debug print debugging messages to stderr\n" " -h, --help display this help and exit\n" " -n, --nologin don't automatically login\n" " -v, --version display the current version and exit\n" @@ -70,7 +70,6 @@ msgid "Remember password" msgstr "Remember password" -#, fuzzy msgid "There are no protocol plugins installed." msgstr "There are no protocol plugins installed." @@ -96,9 +95,8 @@ msgstr "Alias:" #. Register checkbox -#, fuzzy msgid "Create this account on the server" -msgstr "Create this new account on the server" +msgstr "Create this account on the server" #. Cancel button #. Cancel @@ -405,9 +403,8 @@ msgid "View Log..." msgstr "View Log..." -#, fuzzy msgid "View All Logs" -msgstr "View Log" +msgstr "View All Logs" msgid "Show" msgstr "Show" @@ -616,9 +613,8 @@ msgid "Add Buddy Pounce..." msgstr "Add Buddy Pounce..." -#, fuzzy msgid "Invite..." -msgstr "Invite" +msgstr "Invite..." msgid "Enable Logging" msgstr "Enable Logging" @@ -629,11 +625,11 @@ msgid " " msgstr " " -#, fuzzy, c-format +#, c-format msgid "List of %d user:\n" msgid_plural "List of %d users:\n" -msgstr[0] "List of users:\n" -msgstr[1] "List of users:\n" +msgstr[0] "List of %d user:\n" +msgstr[1] "List of %d users:\n" msgid "Supported debug options are: version" msgstr "Supported debug options are: version" @@ -653,10 +649,12 @@ "%s is not a valid message class. See '/help msgcolor' for valid message " "classes." msgstr "" +"%s is not a valid message class. See '/help msgcolor' for valid message " +"classes." #, c-format msgid "%s is not a valid color. See '/help msgcolor' for valid colors." -msgstr "" +msgstr "%s is not a valid colour. See '/help msgcolor' for valid colours." msgid "" "say <message>: Send a message normally as if you weren't using a " @@ -709,6 +707,11 @@ "background>: black, red, green, blue, white, gray, darkgray, magenta, " "cyan, default

EXAMPLE:
msgcolor send cyan default" msgstr "" +"msgcolor <class> <foreground> <background>: Set the colour " +"for different classes of messages in the conversation window.
<" +"class>: receive, send, highlight, action, timestamp
<foreground/" +"background>: black, red, green, blue, white, gray, darkgray, magenta, " +"cyan, default

EXAMPLE:
msgcolor send cyan default" msgid "Unable to open file." msgstr "Unable to open file." @@ -729,10 +732,10 @@ msgid "Pause" msgstr "Pause" -#, fuzzy, c-format +#, c-format msgid "File Transfers - %d%% of %d file" msgid_plural "File Transfers - %d%% of %d files" -msgstr[0] "File Transfers - %d%% of %d files" +msgstr[0] "File Transfers - %d%% of %d file" msgstr[1] "File Transfers - %d%% of %d files" #. Create the window. @@ -847,19 +850,17 @@ msgid "Conversations with %s" msgstr "Conversations with %s" -#, fuzzy msgid "All Conversations" -msgstr "Conversations" +msgstr "All Conversations" msgid "System Log" msgstr "System Log" -#, fuzzy msgid "Calling ... " -msgstr "Calculating..." +msgstr "Calling ... " msgid "Hangup" -msgstr "" +msgstr "Hangup" #. Number of actions msgid "Accept" @@ -869,25 +870,24 @@ msgstr "Reject" msgid "Call in progress." -msgstr "" +msgstr "Call in progress." msgid "The call has been terminated." -msgstr "" +msgstr "The call has been terminated." #, c-format msgid "%s wishes to start an audio session with you." -msgstr "" +msgstr "%s wishes to start an audio session with you." #, c-format msgid "%s is trying to start an unsupported media session type with you." -msgstr "" - -#, fuzzy +msgstr "%s is trying to start an unsupported media session type with you." + msgid "You have rejected the call." -msgstr "You have parted the channel%s%s" +msgstr "You have rejected the call." msgid "call: Make an audio call." -msgstr "" +msgstr "call: Make an audio call." msgid "Emails" msgstr "Emails" @@ -1516,10 +1516,10 @@ msgstr "No Grouping" msgid "Nested Subgroup" -msgstr "" +msgstr "Nested Subgroup" msgid "Nested Grouping (experimental)" -msgstr "" +msgstr "Nested Grouping (experimental)" msgid "Provides alternate buddylist grouping options." msgstr "Provides alternate buddylist grouping options." @@ -1542,22 +1542,23 @@ "\n" "Fetching TinyURL..." msgstr "" +"\n" +"Fetching TinyURL..." msgid "Only create TinyURL for urls of this length or greater" -msgstr "" +msgstr "Only create TinyURL for urls of this length or greater" msgid "TinyURL (or other) address prefix" -msgstr "" - -#, fuzzy +msgstr "TinyURL (or other) address prefix" + msgid "TinyURL" -msgstr "Tune URL" +msgstr "TinyURL" msgid "TinyURL plugin" -msgstr "" +msgstr "TinyURL plugin" msgid "When receiving a message with URL(s), TinyURL for easier copying" -msgstr "" +msgstr "When receiving a message with URL(s), TinyURL for easier copying" msgid "accounts" msgstr "accounts" @@ -1672,6 +1673,7 @@ "The certificate presented by \"%s\" is self-signed. It cannot be " "automatically checked." +#. FIXME 2.6.1 #, c-format msgid "The certificate chain presented for %s is not valid." msgstr "The certificate chain presented for %s is not valid." @@ -1681,6 +1683,7 @@ #. stifle it. #. TODO: Probably wrong. #. TODO: Probably wrong +#. TODO: Probably wrong. msgid "SSL Certificate Error" msgstr "SSL Certificate Error" @@ -1762,7 +1765,6 @@ msgstr "+++ %s signed off" #. Unknown error -#. Unknown error! msgid "Unknown error" msgstr "Unknown error" @@ -1809,9 +1811,8 @@ msgid "%s left the room (%s)." msgstr "%s left the room (%s)." -#, fuzzy msgid "Invite to chat" -msgstr "Invite to Conference" +msgstr "Invite to chat" #. Put our happy label in it. msgid "" @@ -1867,7 +1868,7 @@ #, c-format msgid "Resolver process exited without answering our request" -msgstr "" +msgstr "Resolver process exited without answering our request" #, c-format msgid "Thread creation failure: %s" @@ -1952,6 +1953,10 @@ msgstr "Starting transfer of %s from %s" #, c-format +msgid "Transfer of file %s complete" +msgstr "Transfer of file %s complete" + +#, c-format msgid "Transfer of file %s complete" msgstr "Transfer of file %s complete" @@ -2164,9 +2169,8 @@ msgid "(%s) %s : %s\n" msgstr "(%s) %s : %s\n" -#, fuzzy msgid "Error creating conference." -msgstr "Error creating connection" +msgstr "Error creating conference." #, c-format msgid "You are using %s, but this plugin requires %s." @@ -2183,10 +2187,10 @@ msgid "ABI version mismatch %d.%d.x (need %d.%d.x)" msgstr "ABI version mismatch %d.%d.x (need %d.%d.x)" -#, fuzzy msgid "" "Plugin does not implement all required functions (list_icon, login and close)" -msgstr "Plug-in does not implement all required functions" +msgstr "" +"Plugin does not implement all required functions (list_icon, login and close)" #, c-format msgid "" @@ -2266,9 +2270,8 @@ "Notify with a popup when an autoaccepted file transfer is complete\n" "(only when there's no conversation with the sender)" -#, fuzzy msgid "Create a new directory for each user" -msgstr "Select a user directory to search" +msgstr "Create a new directory for each user" msgid "Notes" msgstr "Notes" @@ -2432,7 +2435,7 @@ msgstr "User Inactivity Timeout (in minutes)" msgid "Apply hiding rules to buddies" -msgstr "" +msgstr "Apply hiding rules to buddies" #. *< type #. *< ui_requirement @@ -2565,7 +2568,6 @@ msgstr "Includes other IM clients' logs in the log viewer." #. * description -#, fuzzy msgid "" "When viewing logs, this plugin will include logs from other IM clients. " "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" @@ -2574,7 +2576,7 @@ "at your own risk!" msgstr "" "When viewing logs, this plugin will include logs from other IM clients. " -"Currently, this includes Adium, MSN Messenger, and Trillian.\n" +"Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" "\n" "WARNING: This plugin is still alpha code and may crash frequently. Use it " "at your own risk!" @@ -2622,12 +2624,11 @@ msgid "Save messages sent to an offline user as pounce." msgstr "Save messages sent to an offline user as pounce." -#, fuzzy msgid "" "The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." msgstr "" -"The rest of the messages will be saved as pounce. You can edit/delete the " +"The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." #, c-format @@ -2656,9 +2657,8 @@ msgid "Do not ask. Always save in pounce." msgstr "Do not ask. Always save in pounce." -#, fuzzy msgid "One Time Password" -msgstr "Enter Password" +msgstr "One Time Password" #. *< type #. *< ui_requirement @@ -2667,13 +2667,13 @@ #. *< priority #. *< id msgid "One Time Password Support" -msgstr "" +msgstr "One Time Password Support" #. *< name #. *< version #. * summary msgid "Enforce that passwords are used only once." -msgstr "" +msgstr "Enforce that passwords are used only once." #. * description msgid "" @@ -2681,6 +2681,9 @@ "are only used in a single successful connection.\n" "Note: The account password must not be saved for this to work." msgstr "" +"Allows you to enforce on a per-account basis that passwords not being saved " +"are only used in a single successful connection.\n" +"Note: The account password must not be saved for this to work." #. *< type #. *< ui_requirement @@ -2874,18 +2877,15 @@ "Unable to detect ActiveTCL installation. If you wish to use TCL plugins, " "install ActiveTCL from http://www.activestate.com\n" -#, fuzzy msgid "" "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin." "im/BonjourWindows for more information." msgstr "" -"The Apple Bonjour For Windows toolkit wasn't found, see the FAQ at: http://" -"developer.pidgin.im/wiki/Using%20Pidgin#CanIusePidginforBonjourLink-" -"LocalMessaging for more information." - -#, fuzzy +"Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin." +"im/BonjourWindows for more information." + msgid "Unable to listen for incoming IM connections" -msgstr "Unable to listen for incoming IM connections\n" +msgstr "Unable to listen for incoming IM connections" msgid "" "Unable to establish connection with the local mDNS server. Is it running?" @@ -2924,9 +2924,8 @@ msgstr "Purple Person" #. Creating the options for the protocol -#, fuzzy msgid "Local Port" -msgstr "Locality" +msgstr "Local Port" msgid "Bonjour" msgstr "Bonjour" @@ -2938,21 +2937,17 @@ msgid "Unable to send the message, the conversation couldn't be started." msgstr "Unable to send the message: the conversation couldn't be started." -#, fuzzy, c-format +#, c-format msgid "Unable to create socket: %s" -msgstr "" -"Unable to create socket:\n" -"%s" - -#, fuzzy, c-format +msgstr "Unable to create socket: %s" + +#, c-format msgid "Unable to bind socket to port: %s" -msgstr "Could not bind socket to port" - -#, fuzzy, c-format +msgstr "Unable to bind socket to port: %s" + +#, c-format msgid "Unable to listen on socket: %s" -msgstr "" -"Unable to create socket:\n" -"%s" +msgstr "Unable to listen on socket: %s" msgid "Error communicating with local mDNSResponder." msgstr "Error communicating with local mDNSResponder." @@ -3001,17 +2996,14 @@ msgid "Load buddylist from file..." msgstr "Load buddylist from file..." -#, fuzzy msgid "You must fill in all registration fields" -msgstr "Fill in the registration fields." - -#, fuzzy +msgstr "You must fill in all registration fields" + msgid "Passwords do not match" -msgstr "Passwords do not match." - -#, fuzzy +msgstr "Passwords do not match" + msgid "Unable to register new account. An unknown error occurred." -msgstr "Unable to register new account. Error occurred.\n" +msgstr "Unable to register new account. An unknown error occurred." msgid "New Gadu-Gadu Account Registered" msgstr "New Gadu-Gadu Account Registered" @@ -3026,11 +3018,10 @@ msgstr "Password (again)" msgid "Enter captcha text" -msgstr "" - -#, fuzzy +msgstr "Enter captcha text" + msgid "Captcha" -msgstr "Save Image" +msgstr "Captcha" msgid "Register New Gadu-Gadu Account" msgstr "Register New Gadu-Gadu Account" @@ -3169,9 +3160,9 @@ msgid "Chat _name:" msgstr "Chat _name:" -#, fuzzy, c-format +#, c-format msgid "Unable to resolve hostname '%s': %s" -msgstr "Unable to connect to server." +msgstr "Unable to resolve hostname '%s': %s" #. 1. connect to server #. connect to the server @@ -3184,9 +3175,8 @@ msgid "This chat name is already in use" msgstr "This chat name is already in use" -#, fuzzy msgid "Not connected to the server" -msgstr "Not connected to the server." +msgstr "Not connected to the server" msgid "Find buddies..." msgstr "Find buddies..." @@ -3227,9 +3217,8 @@ msgid "Gadu-Gadu User" msgstr "Gadu-Gadu User" -#, fuzzy msgid "GG server" -msgstr "Set User Info..." +msgstr "GG server" #, c-format msgid "Unknown command: %s" @@ -3245,9 +3234,8 @@ msgid "File Transfer Failed" msgstr "File Transfer Failed" -#, fuzzy msgid "Unable to open a listening port." -msgstr "Could not open a listening port." +msgstr "Unable to open a listening port." msgid "Error displaying MOTD" msgstr "Error displaying MOTD" @@ -3269,11 +3257,9 @@ #. #. TODO: what to do here - do we really have to disconnect? #. TODO: do we really want to disconnect on a failure to write? -#, fuzzy, c-format +#, c-format msgid "Lost connection with server: %s" -msgstr "" -"Lost connection with server:\n" -"%s" +msgstr "Lost connection with server: %s" msgid "View MOTD" msgstr "View MOTD" @@ -3284,9 +3270,8 @@ msgid "_Password:" msgstr "_Password:" -#, fuzzy msgid "IRC nick and server may not contain whitespace" -msgstr "IRC nicks may not contain whitespace" +msgstr "IRC nick and server may not contain whitespace" msgid "SSL support unavailable" msgstr "SSL support unavailable" @@ -3295,13 +3280,13 @@ msgstr "Unable to connect" #. this is a regular connect, error out -#, fuzzy, c-format +#, c-format msgid "Unable to connect: %s" -msgstr "Unable to connect to %s" - -#, fuzzy, c-format +msgstr "Unable to connect: %s" + +#, c-format msgid "Server closed the connection" -msgstr "Server closed the connection." +msgstr "Server closed the connection" msgid "Users" msgstr "Users" @@ -3336,7 +3321,7 @@ msgstr "Encodings" msgid "Auto-detect incoming UTF-8" -msgstr "" +msgstr "Auto-detect incoming UTF-8" msgid "Real name" msgstr "Real name" @@ -3351,9 +3336,9 @@ msgid "Bad mode" msgstr "Bad mode" -#, fuzzy, c-format +#, c-format msgid "Ban on %s by %s, set %s ago" -msgstr "Ban on %s by %s, set %ld seconds ago" +msgstr "Ban on %s by %s, set %s ago" #, c-format msgid "Ban on %s" @@ -3485,13 +3470,12 @@ #. We only want to do the following dance if the connection #. has not been successfully completed. If it has, just #. notify the user that their /nick command didn't go. -#, fuzzy, c-format +#, c-format msgid "The nickname \"%s\" is already being used." -msgstr "This chat name is already in use" - -#, fuzzy +msgstr "The nickname \"%s\" is already being used." + msgid "Nickname in use" -msgstr "Nickname" +msgstr "Nickname in use" msgid "Cannot change nick" msgstr "Cannot change nick" @@ -3535,7 +3519,7 @@ "away." msgid "ctcp : sends ctcp msg to nick." -msgstr "" +msgstr "ctcp : sends ctcp msg to nick." msgid "chanserv: Send a command to chanserv" msgstr "chanserv: Send a command to chanserv" @@ -3728,13 +3712,11 @@ msgid "execute" msgstr "execute" -#, fuzzy msgid "Server requires TLS/SSL, but no TLS/SSL support was found." -msgstr "Server requires TLS/SSL for login. No TLS/SSL support found." - -#, fuzzy +msgstr "Server requires TLS/SSL, but no TLS/SSL support was found." + msgid "You require encryption, but no TLS/SSL support was found." -msgstr "You require encryption, but no TLS/SSL support found." +msgstr "You require encryption, but no TLS/SSL support was found." msgid "Server requires plaintext authentication over an unencrypted stream" msgstr "Server requires plaintext authentication over an unencrypted stream" @@ -3750,13 +3732,11 @@ msgid "Plaintext Authentication" msgstr "Plaintext Authentication" -#, fuzzy msgid "SASL authentication failed" -msgstr "Authentication failed" - -#, fuzzy +msgstr "SASL Authentication failed" + msgid "Invalid response from server" -msgstr "Invalid response from server." +msgstr "Invalid response from server" msgid "Server does not use any supported authentication method" msgstr "Server does not use any supported authentication method" @@ -3767,36 +3747,28 @@ msgid "Invalid challenge from server" msgstr "Invalid challenge from server" -#, fuzzy, c-format +#, c-format msgid "SASL error: %s" -msgstr "SASL error" +msgstr "SASL error: %s" msgid "The BOSH connection manager terminated your session." -msgstr "" - -#, fuzzy +msgstr "The BOSH connection manager terminated your session." + msgid "No session ID given" -msgstr "No reason given." - -#, fuzzy +msgstr "No session ID given" + msgid "Unsupported version of BOSH protocol" -msgstr "Unsupported Version" - -#, fuzzy +msgstr "Unsupported version of BOSH protocol" + msgid "Unable to establish a connection with the server" -msgstr "" -"Could not establish a connection with the server:\n" -"%s" - -#, fuzzy, c-format +msgstr "Unable to establish a connection with the server" + +#, c-format msgid "Unable to establish a connection with the server: %s" -msgstr "" -"Could not establish a connection with the server:\n" -"%s" - -#, fuzzy +msgstr "Unable to establish a connection with the server: %s" + msgid "Unable to establish SSL connection" -msgstr "Unable to initialise connection" +msgstr "Unable to establish SSL connection" msgid "Full Name" msgstr "Full Name" @@ -3823,7 +3795,7 @@ msgstr "Region" msgid "Postal Code" -msgstr "Postal Code" +msgstr "Postcode" msgid "Country" msgstr "Country" @@ -3864,9 +3836,8 @@ msgid "Operating System" msgstr "Operating System" -#, fuzzy msgid "Local Time" -msgstr "Local File:" +msgstr "Local Time" msgid "Priority" msgstr "Priority" @@ -3876,11 +3847,10 @@ #, c-format msgid "%s ago" -msgstr "" - -#, fuzzy +msgstr "%s ago" + msgid "Logged Off" -msgstr "Logged In" +msgstr "Logged Off" msgid "Middle Name" msgstr "Middle Name" @@ -4048,26 +4018,24 @@ msgid "Find Rooms" msgstr "Find Rooms" -#, fuzzy msgid "Affiliations:" -msgstr "Alias:" - -#, fuzzy +msgstr "Affiliations:" + msgid "No users found" -msgstr "No matching users found" - -#, fuzzy +msgstr "No users found" + msgid "Roles:" -msgstr "Role" - -#, fuzzy +msgstr "Roles:" + msgid "Ping timed out" -msgstr "Ping timeout" +msgstr "Ping timed out" msgid "" "Unable to find alternative XMPP connection methods after failing to connect " "directly." msgstr "" +"Unable to find alternative XMPP connection methods after failing to connect " +"directly." msgid "Invalid XMPP ID" msgstr "Invalid XMPP ID" @@ -4075,9 +4043,8 @@ msgid "Invalid XMPP ID. Domain must be set." msgstr "Invalid XMPP ID. Domain must be set." -#, fuzzy msgid "Malformed BOSH URL" -msgstr "Failed to connect to server." +msgstr "Malformed BOSH URL" #, c-format msgid "Registration of %s@%s successful" @@ -4146,10 +4113,6 @@ msgid "Change Registration" msgstr "Change Registration" -#, fuzzy -msgid "Malformed BOSH Connect Server" -msgstr "Failed to connect to server." - msgid "Error unregistering account" msgstr "Error unregistering account" @@ -4169,7 +4132,7 @@ msgstr "Re-initialising Stream" msgid "Server doesn't support blocking" -msgstr "" +msgstr "Server doesn't support blocking" msgid "Not Authorized" msgstr "Not Authorised" @@ -4435,19 +4398,21 @@ msgid "Unable to ping user %s" msgstr "Unable to ping user %s" -#, fuzzy, c-format +#, c-format msgid "Unable to buzz, because there is nothing known about %s." -msgstr "Unable to buzz, because there is nothing known about user %s." - -#, fuzzy, c-format +msgstr "Unable to buzz, because there is nothing known about %s." + +#, c-format msgid "Unable to buzz, because %s might be offline." -msgstr "Unable to buzz, because user %s might be offline." - -#, fuzzy, c-format +msgstr "Unable to buzz, because %s might be offline." + +#, c-format msgid "" "Unable to buzz, because %s does not support it or does not wish to receive " "buzzes now." -msgstr "Unable to buzz, because the user %s does not support it." +msgstr "" +"Unable to buzz, because %s does not support it or does not wish to receive " +"buzzes now." #, c-format msgid "Buzzing %s..." @@ -4462,35 +4427,34 @@ msgid "%s has buzzed you!" msgstr "%s has buzzed you!" -#, fuzzy, c-format +#, c-format msgid "Unable to initiate media with %s: invalid JID" -msgstr "Unable to send file to %s, invalid JID" - -#, fuzzy, c-format +msgstr "Unable to initiate media with %s: invalid JID" + +#, c-format msgid "Unable to initiate media with %s: user is not online" -msgstr "Unable to send file to %s, user is not online" - -#, fuzzy, c-format +msgstr "Unable to initiate media with %s: user is not online" + +#, c-format msgid "Unable to initiate media with %s: not subscribed to user presence" -msgstr "Unable to send file to %s, not subscribed to user presence" - -#, fuzzy +msgstr "Unable to initiate media with %s: not subscribed to user presence" + msgid "Media Initiation Failed" -msgstr "Registration Failed" - -#, fuzzy, c-format +msgstr "Media Initiation Failed" + +#, c-format msgid "" "Please select the resource of %s with which you would like to start a media " "session." msgstr "" -"Please select the resource of %s to which you would like to send a file" +"Please select the resource of %s with which you would like to start a media " +"session." msgid "Select a Resource" msgstr "Select a Resource" -#, fuzzy msgid "Initiate Media" -msgstr "Initiate _Chat" +msgstr "Initiate Media" msgid "config: Configure a chat room." msgstr "config: Configure a chat room." @@ -4510,21 +4474,19 @@ msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <user> [reason]: Ban a user from the room." -#, fuzzy msgid "" "affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " "the users with an affiliation or set users' affiliation with the room." msgstr "" -"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " -"affiliation with the room." - -#, fuzzy +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." + msgid "" "role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " "users with an role or set users' role with the room." msgstr "" -"role <user> <moderator|participant|visitor|none>: Set a user's " -"role in the room." +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " +"users with an role or set users' role with the room." msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <user> [message]: Invite a user to the room." @@ -4585,13 +4547,12 @@ msgstr "File transfer proxies" msgid "BOSH URL" -msgstr "" +msgstr "BOSH URL" #. this should probably be part of global smiley theme settings later on, #. shared with MSN -#, fuzzy msgid "Show Custom Smileys" -msgstr "Show custom smileys" +msgstr "Show Custom Smileys" #, c-format msgid "%s has left the conversation." @@ -4616,9 +4577,9 @@ msgid "XMPP Message Error" msgstr "XMPP Message Error" -#, fuzzy, c-format +#, c-format msgid "(Code %s)" -msgstr " (Code %s)" +msgstr "(Code %s)" msgid "XML Parse error" msgstr "XML Parse error" @@ -4650,32 +4611,28 @@ msgid "_Accept Defaults" msgstr "_Accept Defaults" -#, fuzzy msgid "No reason" -msgstr "No reason given." - -#, fuzzy, c-format +msgstr "No reason" + +#, c-format msgid "You have been kicked: (%s)" -msgstr "You have been kicked by %s: (%s)" - -#, fuzzy, c-format +msgstr "You have been kicked: (%s)" + +#, c-format msgid "Kicked (%s)" -msgstr "Kicked by %s (%s)" - -#, fuzzy +msgstr "Kicked (%s)" + msgid "An error occurred on the in-band bytestream transfer\n" -msgstr "An error occurred while opening the file." - -#, fuzzy +msgstr "An error occurred on the in-band bytestream transfer\n" + msgid "Transfer was closed." -msgstr "File Transfer Failed" - -#, fuzzy +msgstr "Transfer was closed." + msgid "Failed to open the file" -msgstr "Failed to open file \"%s\": %s" +msgstr "Failed to open the file" msgid "Failed to open in-band bytestream" -msgstr "" +msgstr "Failed to open in-band bytestream" #, c-format msgid "Unable to send file to %s, user does not support file transfers" @@ -4743,11 +4700,10 @@ msgstr "Unable to add \"%s\"." msgid "Buddy Add error" -msgstr "" - -#, fuzzy +msgstr "Buddy Add error" + msgid "The username specified does not exist." -msgstr "The username specified is invalid." +msgstr "The username specified does not exist." #, c-format msgid "Buddy list synchronization issue in %s (%s)" @@ -4977,9 +4933,8 @@ msgid "Passport account not yet verified" msgstr "Passport account not yet verified" -#, fuzzy msgid "Passport account suspended" -msgstr "Passport account not yet verified" +msgstr "Passport account suspended" #, c-format msgid "Bad ticket" @@ -4993,17 +4948,31 @@ msgid "MSN Error: %s\n" msgstr "MSN Error: %s\n" -#, fuzzy msgid "Other Contacts" -msgstr "Preferred Contact" - -#, fuzzy +msgstr "Other Contacts" + msgid "Non-IM Contacts" -msgstr "Remove Contact" - -#, fuzzy, c-format +msgstr "Non-IM Contacts" + +#, c-format +msgid "%s sent a wink. Click here to play it" +msgstr "%s sent a wink. Click here to play it" + +#, c-format +msgid "%s sent a wink, but it could not be saved" +msgstr "%s sent a wink, but it could not be saved" + +#, c-format +msgid "%s sent a voice clip. Click here to play it" +msgstr "%s sent a voice clip. Click here to play it" + +#, c-format +msgid "%s sent a voice clip, but it could not be saved" +msgstr "%s sent a voice clip, but it could not be saved" + +#, c-format msgid "%s sent you a voice chat invite, which is not yet supported." -msgstr "%s has sent you a webcam invitation, which is not yet supported." +msgstr "%s sent you a voice chat invite, which is not yet supported." msgid "Nudge" msgstr "Nudge" @@ -5016,9 +4985,8 @@ msgid "Nudging %s..." msgstr "Nudging %s..." -#, fuzzy msgid "Email Address..." -msgstr "Email Address" +msgstr "Email Address..." msgid "Your new MSN friendly name is too long." msgstr "Your new MSN friendly name is too long." @@ -5054,22 +5022,21 @@ msgid "Disallow" msgstr "Disallow" -#, fuzzy, c-format +#, c-format msgid "Blocked Text for %s" -msgstr "Buddy Comment for %s" - -#, fuzzy +msgstr "Blocked Text for %s" + msgid "No text is blocked for this account." -msgstr "Use this buddy _icon for this account:" +msgstr "No text is blocked for this account." #, c-format msgid "" "MSN servers are currently blocking the following regular expressions:
%s" msgstr "" - -#, fuzzy +"MSN servers are currently blocking the following regular expressions:
%s" + msgid "This account does not have email enabled." -msgstr "This Hotmail account may not be active." +msgstr "This account does not have email enabled." msgid "Send a mobile message." msgstr "Send a mobile message." @@ -5078,11 +5045,10 @@ msgstr "Page" msgid "Playing a game" -msgstr "" - -#, fuzzy +msgstr "Playing a game" + msgid "Working" -msgstr "Work" +msgstr "Working" msgid "Has you" msgstr "Has you" @@ -5120,13 +5086,11 @@ msgid "Album" msgstr "Album" -#, fuzzy msgid "Game Title" -msgstr "Tune Title" - -#, fuzzy +msgstr "Game Title" + msgid "Office Title" -msgstr "Tune Title" +msgstr "Office Title" msgid "Set Friendly Name..." msgstr "Set Friendly Name..." @@ -5147,7 +5111,7 @@ msgstr "Allow/Disallow Mobile Pages..." msgid "View Blocked Text..." -msgstr "" +msgstr "View Blocked Text..." msgid "Open Hotmail Inbox" msgstr "Open Hotmail Inbox" @@ -5161,6 +5125,29 @@ msgid "SSL support is needed for MSN. Please install a supported SSL library." msgstr "SSL support is needed for MSN. Please install a supported SSL library." +#, c-format +msgid "" +"Unable to add the buddy %s because the username is invalid. Usernames must " +"be a valid email address." +msgstr "" +"Unable to add the buddy %s because the username is invalid. Usernames must " +"be a valid email address." + +msgid "Unable to Add" +msgstr "Unable to Add" + +msgid "Authorization Request Message:" +msgstr "Authorisation Request Message:" + +msgid "Please authorize me!" +msgstr "Please authorise me!" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#. +msgid "_OK" +msgstr "_OK" + msgid "Error retrieving profile" msgstr "Error retreiving profile" @@ -5316,9 +5303,8 @@ "Could not find any information in the user's profile. The user most likely " "does not exist." -#, fuzzy msgid "View web profile" -msgstr "Hide when offline" +msgstr "View web profile" #. *< type #. *< ui_requirement @@ -5347,32 +5333,30 @@ msgid "Windows Live ID authentication:Unable to connect" msgstr "Windows Live ID authentication: Unable to connect" -#, fuzzy msgid "Windows Live ID authentication:Invalid response" -msgstr "Windows Live ID authentication: Unable to connect" +msgstr "Windows Live ID authentication: Invalid response" #, c-format msgid "%s just sent you a Nudge!" msgstr "%s just sent you a Nudge!" -#, fuzzy, c-format +#, c-format msgid "Unknown error (%d): %s" -msgstr "Unknown error (%d)" +msgstr "Unknown error (%d): %s" msgid "Unable to add user" msgstr "Unable to add user" +#. Unknown error! #, c-format msgid "Unknown error (%d)" msgstr "Unknown error (%d)" -#, fuzzy msgid "The following users are missing from your addressbook" -msgstr "The following are the results of your search" - -#, fuzzy +msgstr "The following users are missing from your addressbook" + msgid "Mobile message was not sent because it was too long." -msgstr "Message was not sent because you are not signed on." +msgstr "Mobile message was not sent because it was too long." #, c-format msgid "" @@ -5408,18 +5392,17 @@ "Message was not sent because the system is unavailable. This normally " "happens when the user is blocked or does not exist." msgstr "" - -#, fuzzy +"Message was not sent because the system is unavailable. This normally " +"happens when the user is blocked or does not exist." + msgid "Message was not sent because messages are being sent too quickly." -msgstr "Message could not be sent because we are sending too quickly:" - -#, fuzzy +msgstr "Message was not sent because messages are being sent too quickly." + msgid "Message was not sent because an unknown encoding error occurred." -msgstr "Message may have not been sent because an unknown error occurred:" - -#, fuzzy +msgstr "Message was not sent because an unknown encoding error occurred." + msgid "Message was not sent because an unknown error occurred." -msgstr "Message may have not been sent because an unknown error occurred:" +msgstr "Message was not sent because an unknown error occurred." msgid "Writing error" msgstr "Writing error" @@ -5435,25 +5418,21 @@ "Connection error from %s server:\n" "%s" -#, fuzzy msgid "Our protocol is not supported by the server" -msgstr "Our protocol is not supported by the server." - -#, fuzzy +msgstr "Our protocol is not supported by the server" + msgid "Error parsing HTTP" -msgstr "Error parsing HTTP." - -#, fuzzy +msgstr "Error parsing HTTP" + msgid "You have signed on from another location" -msgstr "You have signed on from another location." +msgstr "You have signed on from another location" msgid "The MSN servers are temporarily unavailable. Please wait and try again." msgstr "" "The MSN servers are temporarily unavailable. Please wait and try again." -#, fuzzy msgid "The MSN servers are going down temporarily" -msgstr "The MSN servers are going down temporarily." +msgstr "The MSN servers are going down temporarily" #, c-format msgid "Unable to authenticate: %s" @@ -5482,9 +5461,10 @@ msgid "Retrieving buddy list" msgstr "Retrieving buddy list" -#, fuzzy, c-format +#, c-format msgid "%s requests to view your webcam, but this request is not yet supported." -msgstr "%s has sent you a webcam invitation, which is not yet supported." +msgstr "" +"%s requests to view your webcam, but this request is not yet supported." #, c-format msgid "%s has sent you a webcam invite, which is not yet supported." @@ -5529,13 +5509,11 @@ msgid "Message may have not been sent because an unknown error occurred:" msgstr "Message may have not been sent because an unknown error occurred:" -#, fuzzy msgid "Delete Buddy from Address Book?" -msgstr "Add to Address Book" - -#, fuzzy +msgstr "Delete Buddy from Address Book?" + msgid "Do you want to delete this buddy from your address book as well?" -msgstr "Do you want to add this buddy to your buddy list?" +msgstr "Do you want to delete this buddy from your address book as well?" msgid "The username specified is invalid." msgstr "The username specified is invalid." @@ -5632,11 +5610,8 @@ msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" msgstr "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" -#, fuzzy msgid "Lost connection with server" -msgstr "" -"Lost connection with server\n" -"%s" +msgstr "Lost connection with server" #. Can't write _()'d strings in array initializers. Workaround. #. khc: then use N_() in the array initializer and use _() when they are @@ -5662,7 +5637,7 @@ msgid "IM Friends" msgstr "IM Friends" -#, fuzzy, c-format +#, c-format msgid "" "%d buddy was added or updated from the server (including buddies already on " "the server-side list)" @@ -5670,8 +5645,8 @@ "%d buddies were added or updated from the server (including buddies already " "on the server-side list)" msgstr[0] "" -"%d buddies were added or updated from the server (including buddies already " -"on the server-side list)" +"%d buddy was added or updated from the server (including buddies already on " +"the server-side list)" msgstr[1] "" "%d buddies were added or updated from the server (including buddies already " "on the server-side list)" @@ -5683,16 +5658,15 @@ msgid "Protocol error, code %d: %s" msgstr "Protocol error, code %d: %s" -#, fuzzy, c-format +#, c-format msgid "" "%s Your password is %zu characters, which is longer than the maximum length " "of %d. Please shorten your password at http://profileedit.myspace.com/index." "cfm?fuseaction=accountSettings.changePassword and try again." msgstr "" -"%s Your password is %d characters, greater than the expected maximum length " -"of %d for MySpaceIM. Please shorten your password at http://profileedit." -"myspace.com/index.cfm?fuseaction=accountSettings.changePassword and try " -"again." +"%s Your password is %zu characters, which is longer than the maximum length " +"of %d. Please shorten your password at http://profileedit.myspace.com/index." +"cfm?fuseaction=accountSettings.changePassword and try again." msgid "Incorrect username or password" msgstr "Incorrect username or password" @@ -5791,6 +5765,9 @@ "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " "to set your username." msgstr "" +"An error occurred while trying to set the username. Please try again, or " +"visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " +"to set your username." msgid "MySpaceIM - Username Available" msgstr "MySpaceIM - Username Available" @@ -6050,9 +6027,9 @@ msgid "Unknown error: 0x%X" msgstr "Unknown error: 0x%X" -#, fuzzy, c-format +#, c-format msgid "Unable to login: %s" -msgstr "Unable to login" +msgstr "Unable to login: %s" #, c-format msgid "Unable to send message. Could not get details for user (%s)." @@ -6184,13 +6161,12 @@ "%s appears to be offline and did not receive the message that you have just " "sent." -#, fuzzy msgid "" "Unable to connect to server. Please enter the address of the server to which " "you wish to connect." msgstr "" -"Unable to connect to server. Please enter the address of the server you wish " -"to connect to." +"Unable to connect to server. Please enter the address of the server to which " +"you wish to connect." msgid "This conference has been closed. No more messages can be sent." msgstr "This conference has been closed. No more messages can be sent." @@ -6214,9 +6190,8 @@ msgid "Server port" msgstr "Server port" -#, fuzzy msgid "Received unexpected response from " -msgstr "Received unexpected HTTP response from server." +msgstr "Received unexpected response from " #. username connecting too frequently msgid "" @@ -6226,12 +6201,12 @@ "You have been connecting and disconnecting too frequently. Wait ten minutes " "and try again. If you continue to try, you will need to wait even longer." -#, fuzzy, c-format +#, c-format msgid "Error requesting " -msgstr "Error requesting login token" +msgstr "Error requesting " msgid "AOL does not allow your screen name to authenticate here" -msgstr "" +msgstr "AOL does not allow your screen name to authenticate here" msgid "Could not join chat room" msgstr "Could not join chat room" @@ -6239,9 +6214,8 @@ msgid "Invalid chat room name" msgstr "Invalid chat room name" -#, fuzzy msgid "Received invalid data on connection with server" -msgstr "Received invalid data on connection with server." +msgstr "Received invalid data on connection with server" #. *< type #. *< ui_requirement @@ -6257,7 +6231,7 @@ msgstr "AIM Protocol Plugin" msgid "ICQ UIN..." -msgstr "" +msgstr "ICQ UIN..." #. *< type #. *< ui_requirement @@ -6288,9 +6262,8 @@ msgid "Received invalid data on connection with remote user." msgstr "Received invalid data on connection with remote user." -#, fuzzy msgid "Unable to establish a connection with the remote user." -msgstr "Could not establish a connection with the remote user." +msgstr "Unable to establish a connection with the remote user." msgid "Direct IM established" msgstr "Direct IM established" @@ -6356,10 +6329,10 @@ msgstr "In local permit/deny" msgid "Warning level too high (sender)" -msgstr "" +msgstr "Warning level too high (sender)" msgid "Warning level too high (receiver)" -msgstr "" +msgstr "Warning level too high (receiver)" msgid "User temporarily unavailable" msgstr "User temporarily unavailable" @@ -6463,7 +6436,7 @@ msgstr "Camera" msgid "Screen Sharing" -msgstr "" +msgstr "Screen Sharing" msgid "Free For Chat" msgstr "Free For Chat" @@ -6489,15 +6462,13 @@ msgid "Buddy Comment" msgstr "Buddy Comment" -#, fuzzy, c-format +#, c-format msgid "Unable to connect to authentication server: %s" -msgstr "" -"Could not connect to authentication server:\n" -"%s" - -#, fuzzy, c-format +msgstr "Unable to connect to authentication server: %s" + +#, c-format msgid "Unable to connect to BOS server: %s" -msgstr "Unable to connect to server." +msgstr "Unable to connect to BOS server: %s" msgid "Username sent" msgstr "Username sent" @@ -6509,19 +6480,19 @@ msgid "Finalizing connection" msgstr "Finalising connection" -#, fuzzy, c-format +#, c-format msgid "" "Unable to sign on as %s because the username is invalid. Usernames must be " "a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"Unable to login: Could not sign on as %s because the username is invalid. " -"Usernames must be a valid email address, or start with a letter and contain " -"only letters, numbers and spaces, or contain only numbers." - -#, fuzzy, c-format +"Unable to sign on as %s because the username is invalid. Usernames must be " +"a valid email address, or start with a letter and contain only letters, " +"numbers and spaces, or contain only numbers." + +#, c-format msgid "You may be disconnected shortly. If so, check %s for updates." -msgstr "You may be disconnected shortly. Check %s for updates." +msgstr "You may be disconnected shortly. If so, check %s for updates." msgid "Unable to get a valid AIM login hash." msgstr "Unable to get a valid AIM login hash." @@ -6535,35 +6506,32 @@ #. Unregistered username #. uid is not exist #. the username does not exist -#, fuzzy msgid "Username does not exist" -msgstr "User does not exist" +msgstr "Username does not exist" #. Suspended account -#, fuzzy msgid "Your account is currently suspended" -msgstr "Your account is currently suspended." +msgstr "Your account is currently suspended" #. service temporarily unavailable msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "The AOL Instant Messenger service is temporarily unavailable." +#. client too old #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "The client version you are using is too old. Please upgrade at %s" #. IP address connecting too frequently -#, fuzzy msgid "" "You have been connecting and disconnecting too frequently. Wait a minute and " "try again. If you continue to try, you will need to wait even longer." msgstr "" -"You have been connecting and disconnecting too frequently. Wait ten minutes " -"and try again. If you continue to try, you will need to wait even longer." - -#, fuzzy +"You have been connecting and disconnecting too frequently. Wait a minute and " +"try again. If you continue to try, you will need to wait even longer." + msgid "The SecurID key entered is invalid" -msgstr "The SecurID key entered is invalid." +msgstr "The SecurID key entered is invalid" msgid "Enter SecurID" msgstr "Enter SecurID" @@ -6571,12 +6539,6 @@ msgid "Enter the 6 digit number from the digital display." msgstr "Enter the 6 digit number from the digital display." -#. * -#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. -#. -msgid "_OK" -msgstr "_OK" - msgid "Password sent" msgstr "Password sent" @@ -6586,12 +6548,6 @@ msgid "Please authorize me so I can add you to my buddy list." msgstr "Please authorise me so I can add you to my buddy list." -msgid "Authorization Request Message:" -msgstr "Authorisation Request Message:" - -msgid "Please authorize me!" -msgstr "Please authorise me!" - msgid "No reason given." msgstr "No reason given." @@ -6687,20 +6643,24 @@ msgstr[1] "" "You missed %hu messages from %s because the rate limit has been exceeded." -#, fuzzy, c-format +#, c-format msgid "" "You missed %hu message from %s because his/her warning level is too high." msgid_plural "" "You missed %hu messages from %s because his/her warning level is too high." -msgstr[0] "You missed %hu message from %s because he/she was too evil." -msgstr[1] "You missed %hu messages from %s because he/she was too evil." - -#, fuzzy, c-format +msgstr[0] "" +"You missed %hu message from %s because his/her warning level is too high." +msgstr[1] "" +"You missed %hu messages from %s because his/her warning level is too high." + +#, c-format msgid "You missed %hu message from %s because your warning level is too high." msgid_plural "" "You missed %hu messages from %s because your warning level is too high." -msgstr[0] "You missed %hu message from %s because you are too evil." -msgstr[1] "You missed %hu messages from %s because you are too evil." +msgstr[0] "" +"You missed %hu message from %s because your warning level is too high." +msgstr[1] "" +"You missed %hu messages from %s because your warning level is too high." #, c-format msgid "You missed %hu message from %s for an unknown reason." @@ -6913,23 +6873,18 @@ msgid "Away message too long." msgstr "Away message too long." -#, fuzzy, c-format +#, c-format msgid "" "Unable to add the buddy %s because the username is invalid. Usernames must " "be a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"Could not add the buddy %s because the username is invalid. Usernames must " +"Unable to add the buddy %s because the username is invalid. Usernames must " "be a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." -#, fuzzy -msgid "Unable to Add" -msgstr "Unable To Add" - -#, fuzzy msgid "Unable to Retrieve Buddy List" -msgstr "Unable To Retrieve Buddy List" +msgstr "Unable to Retrieve Buddy List" msgid "" "The AIM servers were temporarily unable to send your buddy list. Your buddy " @@ -6941,20 +6896,20 @@ msgid "Orphans" msgstr "Orphans" -#, fuzzy, c-format +#, c-format msgid "" "Unable to add the buddy %s because you have too many buddies in your buddy " "list. Please remove one and try again." msgstr "" -"Could not add the buddy %s because you have too many buddies in your buddy " +"Unable to add the buddy %s because you have too many buddies in your buddy " "list. Please remove one and try again." msgid "(no name)" msgstr "(no name)" -#, fuzzy, c-format +#, c-format msgid "Unable to add the buddy %s for an unknown reason." -msgstr "Could not add the buddy %s for an unknown reason." +msgstr "Unable to add the buddy %s for an unknown reason." #, c-format msgid "" @@ -7111,9 +7066,8 @@ msgid "Search for Buddy by Information" msgstr "Search for Buddy by Information" -#, fuzzy msgid "Use clientLogin" -msgstr "User is not logged in" +msgstr "Use clientLogin" msgid "" "Always use AIM/ICQ proxy server for\n" @@ -7125,7 +7079,7 @@ "but does not reveal your IP address)" msgid "Allow multiple simultaneous logins" -msgstr "" +msgstr "Allow multiple simultaneous logins" #, c-format msgid "Asking %s to connect to us at %s:%hu for Direct IM." @@ -7226,16 +7180,14 @@ msgid "Other" msgstr "Other" -#, fuzzy msgid "Visible" -msgstr "Invisible" +msgstr "Visible" msgid "Friend Only" -msgstr "" - -#, fuzzy +msgstr "Friend Only" + msgid "Private" -msgstr "Privacy" +msgstr "Private" msgid "QQ Number" msgstr "QQ Number" @@ -7252,9 +7204,8 @@ msgid "Phone Number" msgstr "Telephone Number" -#, fuzzy msgid "Authorize adding" -msgstr "Authorise buddy?" +msgstr "Authorise adding" msgid "Cellphone Number" msgstr "Mobile Number" @@ -7262,64 +7213,50 @@ msgid "Personal Introduction" msgstr "Personal Introduction" -#, fuzzy msgid "City/Area" -msgstr "City" - -#, fuzzy +msgstr "City/Area" + msgid "Publish Mobile" -msgstr "Personal Mobile" - -#, fuzzy +msgstr "Publish Mobile" + msgid "Publish Contact" -msgstr "Alias Contact" +msgstr "Publish Contact" msgid "College" msgstr "College/University" -#, fuzzy msgid "Horoscope" -msgstr "Horoscope Symbol" - -#, fuzzy +msgstr "Horoscope" + msgid "Zodiac" -msgstr "Zodiac Sign" - -#, fuzzy +msgstr "Zodiac" + msgid "Blood" -msgstr "Blocked" - -#, fuzzy +msgstr "Blood" + msgid "True" -msgstr "Taurus" - -#, fuzzy +msgstr "True" + msgid "False" -msgstr "Failed" - -#, fuzzy +msgstr "False" + msgid "Modify Contact" -msgstr "Modify Account" - -#, fuzzy +msgstr "Modify Contact" + msgid "Modify Address" -msgstr "Home Address" - -#, fuzzy +msgstr "Modify Address" + msgid "Modify Extended Information" -msgstr "Modify my information" - -#, fuzzy +msgstr "Modify Extended Information" + msgid "Modify Information" -msgstr "Modify my information" - -#, fuzzy +msgstr "Modify Information" + msgid "Update" -msgstr "Last Update" - -#, fuzzy +msgstr "Update" + msgid "Could not change buddy information." -msgstr "Please enter buddy information." +msgstr "Could not change buddy information." msgid "Mobile" msgstr "Mobile" @@ -7328,99 +7265,84 @@ msgstr "Note" #. callback -#, fuzzy msgid "Buddy Memo" -msgstr "Buddy Icon" +msgstr "Buddy Memo" msgid "Change his/her memo as you like" -msgstr "" - -#, fuzzy +msgstr "Change his/her memo as you like" + msgid "_Modify" -msgstr "Modify" - -#, fuzzy +msgstr "_Modify" + msgid "Memo Modify" -msgstr "Modify" - -#, fuzzy +msgstr "Memo Modify" + msgid "Server says:" -msgstr "Server busy" +msgstr "Server says:" msgid "Your request was accepted." -msgstr "" +msgstr "Your request was accepted." msgid "Your request was rejected." -msgstr "" - -#, fuzzy, c-format +msgstr "Your request was rejected." + +#, c-format msgid "%u requires verification" -msgstr "Require authorisation" - -#, fuzzy +msgstr "%u requires verification" + msgid "Add buddy question" -msgstr "Add buddy to your list?" - -#, fuzzy +msgstr "Add buddy question" + msgid "Enter answer here" -msgstr "Enter request here" +msgstr "Enter answer here" msgid "Send" msgstr "Send" -#, fuzzy msgid "Invalid answer." -msgstr "Invalid username." +msgstr "Invalid answer." msgid "Authorization denied message:" msgstr "Authorisation denied message:" -#, fuzzy msgid "Sorry, you're not my style." -msgstr "Sorry, you are not my type..." - -#, fuzzy, c-format +msgstr "Sorry, you are not my style." + +#, c-format msgid "%u needs authorization" -msgstr "User %d needs authentication" - -#, fuzzy +msgstr "%u needs authorisation" + msgid "Add buddy authorize" -msgstr "Add buddy to your list?" - -#, fuzzy +msgstr "Add buddy authorise" + msgid "Enter request here" msgstr "Enter request here" msgid "Would you be my friend?" msgstr "Would you like to be my friend?" -#, fuzzy msgid "QQ Buddy" -msgstr "Buddy" - -#, fuzzy +msgstr "QQ Buddy" + msgid "Add buddy" -msgstr "Add Buddy" - -#, fuzzy +msgstr "Add buddy" + msgid "Invalid QQ Number" -msgstr "Invalid QQ Face" - -#, fuzzy +msgstr "Invalid QQ Number" + msgid "Failed sending authorize" -msgstr "Please authorise me!" - -#, fuzzy, c-format +msgstr "Failed sending authorise" + +#, c-format msgid "Failed removing buddy %u" -msgstr "Failed to remove buddy" - -#, fuzzy, c-format +msgstr "Failed removing buddy %u" + +#, c-format msgid "Failed removing me from %d's buddy list" -msgstr "%s has removed you from his or her buddy list." - -#, fuzzy +msgstr "Failed removing me from %d's buddy list" + msgid "No reason given" -msgstr "No reason given." +msgstr "No reason given" #. only need to get value #, c-format @@ -7430,9 +7352,9 @@ msgid "Would you like to add him?" msgstr "Would you like to add this person?" -#, fuzzy, c-format +#, c-format msgid "Rejected by %s" -msgstr "Reject" +msgstr "Rejected by %s" #, c-format msgid "Message: %s" @@ -7447,89 +7369,73 @@ msgid "QQ Qun" msgstr "QQ Qun" -#, fuzzy msgid "Please enter Qun number" -msgstr "Please enter the new name for %s" - -#, fuzzy +msgstr "Please enter Qun number" + msgid "You can only search for permanent Qun\n" -msgstr "You can only search for permanent QQ groups\n" - -#, fuzzy +msgstr "You can only search for permanent Qun\n" + msgid "(Invalid UTF-8 string)" -msgstr "Invalid proxy settings" - -#, fuzzy +msgstr "(Invalid UTF-8 string)" + msgid "Not member" -msgstr "I am not a member" - -#, fuzzy +msgstr "Not member" + msgid "Member" -msgstr "Member Since" - -#, fuzzy +msgstr "Member" + msgid "Requesting" -msgstr "Request Dialog" - -#, fuzzy +msgstr "Requesting" + msgid "Admin" -msgstr "Adium" - -#, fuzzy +msgstr "Admin" + msgid "Notice" -msgstr "Note" - -#, fuzzy +msgstr "Notice" + msgid "Detail" -msgstr "Default" +msgstr "Detail" msgid "Creator" msgstr "Creator" -#, fuzzy msgid "About me" -msgstr "About %s" - -#, fuzzy +msgstr "About me" + msgid "Category" -msgstr "Chat error" - -#, fuzzy +msgstr "Category" + msgid "The Qun does not allow others to join" -msgstr "This group does not allow others to join" - -#, fuzzy +msgstr "The Qun does not allow others to join" + msgid "Join QQ Qun" -msgstr "Join Chat" +msgstr "Join QQ Qun" msgid "Input request here" msgstr "Enter request here" -#, fuzzy, c-format +#, c-format msgid "Successfully joined Qun %s (%u)" -msgstr "You have successfully modified Qun member" - -#, fuzzy +msgstr "Successfully joined Qun %s (%u)" + msgid "Successfully joined Qun" -msgstr "You have successfully modified Qun member" +msgstr "Successfully joined Qun" #, c-format msgid "Qun %u denied from joining" -msgstr "" +msgstr "Qun %u denied from joining" msgid "QQ Qun Operation" msgstr "QQ Qun Operation" -#, fuzzy msgid "Failed:" -msgstr "Failed" +msgstr "Failed:" msgid "Join Qun, Unknown Reply" -msgstr "" - -#, fuzzy +msgstr "Join Qun, Unknown Reply" + msgid "Quit Qun" -msgstr "QQ Qun" +msgstr "Quit Qun" msgid "" "Note, if you are the creator, \n" @@ -7538,51 +7444,47 @@ "Note: if you are the creator \n" "this operation will eventually remove this Qun." -#, fuzzy msgid "Sorry, you are not our style" -msgstr "Sorry, you are not my type..." - -#, fuzzy +msgstr "Sorry, you are not our style" + msgid "Successfully changed Qun members" -msgstr "You have successfully modified Qun member" - -#, fuzzy +msgstr "Successfully changed Qun members" + msgid "Successfully changed Qun information" -msgstr "You have successfully modified Qun information" +msgstr "Successfully changed Qun information" msgid "You have successfully created a Qun" msgstr "You have successfully created a Qun" -#, fuzzy msgid "Would you like to set up detailed information now?" -msgstr "Would you like to set up the Qun details now?" +msgstr "Would you like to set up detailed information now?" msgid "Setup" msgstr "Setup" -#, fuzzy, c-format +#, c-format msgid "%u requested to join Qun %u for %s" -msgstr "User %d requested to join group %d" - -#, fuzzy, c-format +msgstr "%u requested to join Qun %u for %s" + +#, c-format msgid "%u request to join Qun %u" -msgstr "User %d requested to join group %d" - -#, fuzzy, c-format +msgstr "%u request to join Qun %u" + +#, c-format msgid "Failed to join Qun %u, operated by admin %u" -msgstr "Failed to join buddy in chat" +msgstr "Failed to join Qun %u, operated by admin %u" #, c-format msgid "Joining Qun %u is approved by admin %u for %s" -msgstr "" - -#, fuzzy, c-format +msgstr "Joining Qun %u is approved by admin %u for %s" + +#, c-format msgid "Removed buddy %u." -msgstr "Remove Buddy" - -#, fuzzy, c-format +msgstr "Removed buddy %u." + +#, c-format msgid "New buddy %u joined." -msgstr "Remove Buddy" +msgstr "New buddy %u joined." #, c-format msgid "Unknown-%d" @@ -7592,151 +7494,139 @@ msgstr "Level" msgid " VIP" -msgstr "" +msgstr " VIP" msgid " TCP" -msgstr "" - -#, fuzzy +msgstr " TCP" + msgid " FromMobile" -msgstr "Mobile" - -#, fuzzy +msgstr " FromMobile" + msgid " BindMobile" -msgstr "Mobile" - -#, fuzzy +msgstr " BindMobile" + msgid " Video" -msgstr "Live Video" - -#, fuzzy +msgstr " Video" + msgid " Zone" -msgstr "None" +msgstr " Zone" msgid "Flag" -msgstr "" +msgstr "Flag" msgid "Ver" -msgstr "" +msgstr "Ver" msgid "Invalid name" msgstr "Invalid name" -#, fuzzy msgid "Select icon..." -msgstr "Select Folder..." - -#, fuzzy, c-format +msgstr "Select icon..." + +#, c-format msgid "Login time: %d-%d-%d, %d:%d:%d
\n" -msgstr "Login Time: %s
\n" - -#, fuzzy, c-format +msgstr "Login Time: %d-%d-%d, %d:%d:%d
\n" + +#, c-format msgid "Total Online Buddies: %d
\n" -msgstr "Currently Online: %d
\n" - -#, fuzzy, c-format +msgstr "Total Online Buddies: %d
\n" + +#, c-format msgid "Last Refresh: %d-%d-%d, %d:%d:%d
\n" -msgstr "Last Refreshed: %s
\n" - -#, fuzzy, c-format +msgstr "Last Refresh: %d-%d-%d, %d:%d:%d
\n" + +#, c-format msgid "Server: %s
\n" -msgstr "Server IP: %s: %d
\n" - -#, fuzzy, c-format +msgstr "Server: %s
\n" + +#, c-format msgid "Client Tag: %s
\n" -msgstr "Login Time: %s
\n" +msgstr "Client Tag: %s
\n" #, c-format msgid "Connection Mode: %s
\n" msgstr "Connection Mode: %s
\n" -#, fuzzy, c-format +#, c-format msgid "My Internet IP: %s:%d
\n" -msgstr "Connection Mode: %s
\n" - -#, fuzzy, c-format +msgstr "My Internet IP: %s:%d
\n" + +#, c-format msgid "Sent: %lu
\n" -msgstr "Currently Online: %d
\n" - -#, fuzzy, c-format +msgstr "Sent: %lu
\n" + +#, c-format msgid "Resend: %lu
\n" -msgstr "Last Refreshed: %s
\n" - -#, fuzzy, c-format +msgstr "Resend: %lu
\n" + +#, c-format msgid "Lost: %lu
\n" -msgstr "Last Refreshed: %s
\n" - -#, fuzzy, c-format +msgstr "Lost: %lu
\n" + +#, c-format msgid "Received: %lu
\n" -msgstr "Last Refreshed: %s
\n" - -#, fuzzy, c-format +msgstr "Received: %lu
\n" + +#, c-format msgid "Received Duplicate: %lu
\n" -msgstr "My Public IP: %s
\n" - -#, fuzzy, c-format +msgstr "Received Duplicate: %lu
\n" + +#, c-format msgid "Time: %d-%d-%d, %d:%d:%d
\n" -msgstr "Login Time: %s
\n" - -#, fuzzy, c-format +msgstr "Time: %d-%d-%d, %d:%d:%d
\n" + +#, c-format msgid "IP: %s
\n" -msgstr "Server IP: %s: %d
\n" +msgstr "IP: %s
\n" msgid "Login Information" msgstr "Login Information" msgid "

Original Author:
\n" -msgstr "" +msgstr "

Original Author:
\n" msgid "

Code Contributors:
\n" -msgstr "" - -#, fuzzy +msgstr "

Code Contributors:
\n" + msgid "

Lovely Patch Writers:
\n" -msgstr "Last Refreshed: %s
\n" - -#, fuzzy +msgstr "

Lovely Patch Writers:
\n" + msgid "

Acknowledgement:
\n" -msgstr "Currently Online: %d
\n" - -#, fuzzy +msgstr "

Acknowledgement:
\n" + msgid "

Scrupulous Testers:
\n" -msgstr "Last Refreshed: %s
\n" +msgstr "

Scrupulous Testers:
\n" msgid "and more, please let me know... thank you!))" -msgstr "" +msgstr "and more, please let me know... thank you!))" msgid "

And, all the boys in the backroom...
\n" -msgstr "" +msgstr "

And, all the boys in the backroom...
\n" msgid "Feel free to join us! :)" -msgstr "" - -#, fuzzy, c-format +msgstr "Feel free to join us! :)" + +#, c-format msgid "About OpenQ %s" -msgstr "About %s" - -#, fuzzy +msgstr "About OpenQ %s" + msgid "Change Icon" -msgstr "Save Icon" +msgstr "Change Icon" msgid "Change Password" msgstr "Change Password" -#, fuzzy msgid "Account Information" -msgstr "Login Information" +msgstr "Account Information" msgid "Update all QQ Quns" -msgstr "" - -#, fuzzy +msgstr "Update all QQ Quns" + msgid "About OpenQ" -msgstr "About %s" - -#, fuzzy +msgstr "About OpenQ" + msgid "Modify Buddy Memo" -msgstr "Home Address" +msgstr "Modify Buddy Memo" #. *< type #. *< ui_requirement @@ -7748,189 +7638,171 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "QQ Protocol Plugin" -msgstr "QQ Protocol\tPlugin" - -#, fuzzy +msgstr "QQ Protocol Plugin" + msgid "Auto" -msgstr "Author" - -#, fuzzy +msgstr "Auto" + msgid "Select Server" -msgstr "Select User" +msgstr "Select Server" msgid "QQ2005" -msgstr "" +msgstr "QQ2005" msgid "QQ2007" -msgstr "" +msgstr "QQ2007" msgid "QQ2008" -msgstr "" - -#, fuzzy +msgstr "QQ2008" + msgid "Connect by TCP" -msgstr "Connect using TCP" - -#, fuzzy +msgstr "Connect by TCP" + msgid "Show server notice" -msgstr "Server port" - -#, fuzzy +msgstr "Show server notice" + msgid "Show server news" -msgstr "Server address" +msgstr "Show server news" msgid "Show chat room when msg comes" -msgstr "" - -#, fuzzy +msgstr "Show chat room when msg comes" + msgid "Keep alive interval (seconds)" -msgstr "Keep alive error" - -#, fuzzy +msgstr "Keep alive interval (seconds)" + msgid "Update interval (seconds)" -msgstr "Keep alive error" - -#, fuzzy +msgstr "Update interval (seconds)" + msgid "Unable to decrypt server reply" -msgstr "Cannot get server information" +msgstr "Unable to decrypt server reply" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "" - -#, fuzzy, c-format +msgstr "Failed to request token, 0x%02X" + +#, c-format msgid "Invalid token len, %d" -msgstr "Invalid title" +msgstr "Invalid token len, %d" #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" -msgstr "" +msgstr "Redirect_EX is not currently supported" #. need activation #. need activation #. need activation -#, fuzzy msgid "Activation required" -msgstr "Registration Required" +msgstr "Activation required" #, c-format msgid "Unknown reply code when logging in (0x%02X)" -msgstr "" - -#, fuzzy +msgstr "Unknown reply code when logging in (0x%02X)" + msgid "Requesting captcha" -msgstr "Requesting %s's attention..." - -#, fuzzy +msgstr "Requesting captcha" + msgid "Checking captcha" -msgstr "Requesting %s's attention..." - -#, fuzzy +msgstr "Checking captcha" + msgid "Failed captcha verification" -msgstr "Failed Yahoo! Authentication" - -#, fuzzy +msgstr "Failed captcha verification" + msgid "Captcha Image" -msgstr "Save Image" - -#, fuzzy +msgstr "Captcha Image" + msgid "Enter code" -msgstr "Enter Password" - -#, fuzzy +msgstr "Enter code" + msgid "QQ Captcha Verification" -msgstr "SSL Certificate Verification" - -#, fuzzy +msgstr "QQ Captcha Verification" + msgid "Enter the text from the image" -msgstr "Enter the name of the group" +msgstr "Enter the text from the image" #, c-format msgid "Unknown reply when checking password (0x%02X)" -msgstr "" +msgstr "Unknown reply when checking password (0x%02X)" #, c-format msgid "" "Unknown reply code when logging in (0x%02X):\n" "%s" msgstr "" +"Unknown reply code when logging in (0x%02X):\n" +"%s" msgid "Socket error" msgstr "Socket error" -#, fuzzy msgid "Getting server" -msgstr "Set User Info..." - -#, fuzzy +msgstr "Getting server" + msgid "Requesting token" -msgstr "Request denied" - -#, fuzzy +msgstr "Requesting token" + msgid "Unable to resolve hostname" -msgstr "Unable to connect to server." - -#, fuzzy +msgstr "Unable to resolve hostname" + msgid "Invalid server or port" -msgstr "Invalid error" - -#, fuzzy +msgstr "Invalid server or port" + msgid "Connecting to server" -msgstr "Connecting to SILC Server" - -#, fuzzy +msgstr "Connecting to server" + msgid "QQ Error" -msgstr "QQid Error" - -#, fuzzy, c-format +msgstr "QQ Error" + +#, c-format msgid "" "Server News:\n" "%s\n" "%s\n" "%s" -msgstr "ICQ Server Relay" - -#, fuzzy, c-format +msgstr "" +"Server News:\n" +"%s\n" +"%s\n" +"%s" + +#, c-format msgid "%s:%s" -msgstr "%s (%s)" - -#, fuzzy, c-format +msgstr "%s:%s" + +#, c-format msgid "From %s:" -msgstr "From" - -#, fuzzy, c-format +msgstr "From %s:" + +#, c-format msgid "" "Server notice From %s: \n" "%s" -msgstr "Server Instructions: %s" - -#, fuzzy +msgstr "" +"Server notice From %s: \n" +"%s" + msgid "Unknown SERVER CMD" -msgstr "Unknown reason" +msgstr "Unknown SERVER CMD" #, c-format msgid "" "Error reply of %s(0x%02X)\n" "Room %u, reply 0x%02X" msgstr "" - -#, fuzzy +"Error reply of %s(0x%02X)\n" +"Room %u, reply 0x%02X" + msgid "QQ Qun Command" -msgstr "Command" - -#, fuzzy +msgstr "QQ Qun Command" + msgid "Unable to decrypt login reply" -msgstr "Cannot get server information" - -#, fuzzy +msgstr "Unable to decrypt login reply" + msgid "Unknown LOGIN CMD" -msgstr "Unknown reason" - -#, fuzzy +msgstr "Unknown LOGIN CMD" + msgid "Unknown CLIENT CMD" -msgstr "Unknown reason" +msgstr "Unknown CLIENT CMD" #, c-format msgid "%d has declined the file %s" @@ -8903,9 +8775,8 @@ msgid "Disconnected by server" msgstr "Disconnected by server" -#, fuzzy msgid "Error connecting to SILC Server" -msgstr "Error during connecting to SILC Server" +msgstr "Error connecting to SILC Server" msgid "Key Exchange failed" msgstr "Key Exchange failed" @@ -8918,31 +8789,25 @@ msgid "Performing key exchange" msgstr "Performing key exchange" -#, fuzzy msgid "Unable to load SILC key pair" -msgstr "Could not load SILC key pair" +msgstr "Unable to load SILC key pair" #. Progress msgid "Connecting to SILC Server" msgstr "Connecting to SILC Server" -#, fuzzy -msgid "Unable to not load SILC key pair" -msgstr "Could not load SILC key pair" - msgid "Out of memory" msgstr "Out of memory" -#, fuzzy msgid "Unable to initialize SILC protocol" -msgstr "Cannot initialise SILC protocol" +msgstr "Unable to initialize SILC protocol" msgid "Error loading SILC key pair" msgstr "Error loading SILC key pair" -#, fuzzy, c-format +#, c-format msgid "Download %s: %s" -msgstr "Users on %s: %s" +msgstr "Download %s: %s" msgid "Your Current Mood" msgstr "Your Current Mood" @@ -9225,9 +9090,8 @@ msgid "Creating SILC key pair..." msgstr "Creating SILC key pair..." -#, fuzzy msgid "Unable to create SILC key pair" -msgstr "Cannot create SILC key pair\n" +msgstr "Unable to create SILC key pair" #. Hint for translators: Please check the tabulator width here and in #. the next strings (short strings: 2 tabs, longer strings 1 tab, @@ -9365,34 +9229,30 @@ msgid "Failure: Authentication failed" msgstr "Failure: Authentication failed" -#, fuzzy msgid "Unable to initialize SILC Client connection" -msgstr "Cannot initialise SILC Client connection" +msgstr "Unable to initialize SILC Client connection" msgid "John Noname" -msgstr "No name" - -#, fuzzy, c-format +msgstr "John Noname" + +#, c-format msgid "Unable to load SILC key pair: %s" -msgstr "Could not load SILC key pair: %s" +msgstr "Unable to load SILC key pair: %s" msgid "Unable to create connection" msgstr "Unable to create connection" -#, fuzzy msgid "Unknown server response" -msgstr "Unknown server response." - -#, fuzzy +msgstr "Unknown server response" + msgid "Unable to create listen socket" -msgstr "Unable to create socket" +msgstr "Unable to create listen socket" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "SIP usernames may not contain whitespaces or @ symbols" -#, fuzzy msgid "SIP connect server not specified" -msgstr "Server port" +msgstr "SIP connect server not specified" #. *< type #. *< ui_requirement @@ -9436,9 +9296,8 @@ msgid "doodle: Request user to start a Doodle session" msgstr "doodle: Request user to start a Doodle session" -#, fuzzy msgid "Yahoo ID..." -msgstr "Yahoo! ID" +msgstr "Yahoo ID..." #. *< type #. *< ui_requirement @@ -9450,9 +9309,8 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "Yahoo! Protocol Plugin" -msgstr "Yahoo Protocol Plug-in" +msgstr "Yahoo! Protocol Plugin" msgid "Pager server" msgstr "Pager server" @@ -9481,9 +9339,8 @@ msgid "Yahoo Chat port" msgstr "Yahoo Chat port" -#, fuzzy msgid "Yahoo JAPAN ID..." -msgstr "Yahoo! ID" +msgstr "Yahoo JAPAN ID..." #. *< type #. *< ui_requirement @@ -9495,12 +9352,11 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "Yahoo! JAPAN Protocol Plugin" -msgstr "Yahoo Protocol Plug-in" +msgstr "Yahoo! JAPAN Protocol Plugin" msgid "Your SMS was not delivered" -msgstr "" +msgstr "Your SMS was not delivered" msgid "Your Yahoo! message did not get sent." msgstr "Your Yahoo! message did not get sent." @@ -9525,28 +9381,28 @@ msgstr "Add buddy rejected" #. Some error in the received stream -#, fuzzy msgid "Received invalid data" -msgstr "Received invalid data on connection with server." +msgstr "Received invalid data" #. security lock from too many failed login attempts -#, fuzzy msgid "" "Account locked: Too many failed login attempts. Logging into the Yahoo! " "website may fix this." -msgstr "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "" +"Account locked: Too many failed login attempts. Logging into the Yahoo! " +"website may fix this." #. indicates a lock of some description -#, fuzzy msgid "" "Account locked: Unknown reason. Logging into the Yahoo! website may fix " "this." -msgstr "Unknown error number %d. Logging into the Yahoo! website may fix this." +msgstr "" +"Account locked: Unknown reason. Logging into the Yahoo! website may fix " +"this." #. username or password missing -#, fuzzy msgid "Username or password missing" -msgstr "Incorrect username or password" +msgstr "Username or password missing" #, c-format msgid "" @@ -9579,33 +9435,27 @@ msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." msgstr "Unknown error number %d. Logging into the Yahoo! website may fix this." -#, fuzzy, c-format +#, c-format msgid "Unable to add buddy %s to group %s to the server list on account %s." -msgstr "Could not add buddy %s to group %s to the server list on account %s." - -#, fuzzy +msgstr "Unable to add buddy %s to group %s to the server list on account %s." + msgid "Unable to add buddy to server list" -msgstr "Could not add buddy to server list" +msgstr "Unable to add buddy to server list" #, c-format msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ Audible %s/%s/%s.swf ] %s" -#, fuzzy msgid "Received unexpected HTTP response from server" -msgstr "Received unexpected HTTP response from server." - -#, fuzzy, c-format +msgstr "Received unexpected HTTP response from server" + +#, c-format msgid "Lost connection with %s: %s" -msgstr "" -"Lost connection with %s:\n" -"%s" - -#, fuzzy, c-format +msgstr "Lost connection with %s: %s" + +#, c-format msgid "Unable to establish a connection with %s: %s" -msgstr "" -"Could not establish a connection with the server:\n" -"%s" +msgstr "Unable to establish a connection with %s: %s" msgid "Not at Home" msgstr "Not at Home" @@ -9653,7 +9503,7 @@ msgstr "Start Doodling" msgid "Select the ID you want to activate" -msgstr "" +msgstr "Select the ID you want to activate" msgid "Join whom in chat?" msgstr "Join whom in chat?" @@ -9730,12 +9580,10 @@ msgid "Last Update" msgstr "Last Update" -#, fuzzy msgid "" "This profile is in a language or format that is not supported at this time." msgstr "" -"Sorry, this profile seems to be in a language or format that is not " -"supported at this time." +"This profile is in a language or format that is not supported at this time." msgid "" "Could not retrieve the user's profile. This most likely is a temporary " @@ -9757,11 +9605,8 @@ msgstr "The user's profile is empty." #, c-format -msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." -msgstr "%s declined your conference invitation to room \"%s\" because \"%s\"." - -msgid "Invitation Rejected" -msgstr "Invitation Rejected" +msgid "%s has declined to join." +msgstr "%s has declined to join." msgid "Failed to join chat" msgstr "Failed to join chat" @@ -9813,9 +9658,8 @@ msgid "User Rooms" msgstr "User Rooms" -#, fuzzy msgid "Connection problem with the YCHT server" -msgstr "Connection problem with the YCHT server." +msgstr "Connection problem with the YCHT server" msgid "" "(There was an error converting this message.\t Check the 'Encoding' option " @@ -9941,17 +9785,17 @@ msgid "Exposure" msgstr "Exposure" -#, fuzzy, c-format +#, c-format msgid "Unable to parse response from HTTP proxy: %s" -msgstr "Unable to parse response from HTTP proxy: %s\n" +msgstr "Unable to parse response from HTTP proxy: %s" #, c-format msgid "HTTP proxy connection error %d" msgstr "HTTP proxy connection error %d" -#, fuzzy, c-format +#, c-format msgid "Access denied: HTTP proxy server forbids port %d tunneling" -msgstr "Access denied: HTTP proxy server forbids port %d tunnelling." +msgstr "Access denied: HTTP proxy server forbids port %d tunnelling" #, c-format msgid "Error resolving %s" @@ -10009,21 +9853,18 @@ msgstr "Accept chat invitation?" #. Shortcut -#, fuzzy msgid "Shortcut" -msgstr "Sort" - -#, fuzzy +msgstr "Shortcut" + msgid "The text-shortcut for the smiley" -msgstr "GTK+ Text Shortcut Theme" +msgstr "The text-shortcut for the smiley" #. Stored Image -#, fuzzy msgid "Stored Image" -msgstr "Save Image" +msgstr "Stored Image" msgid "Stored Image. (that'll have to do for now)" -msgstr "" +msgstr "Stored Image. (that'll have to do for now)" msgid "SSL Connection Failed" msgstr "SSL Connection Failed" @@ -10137,9 +9978,9 @@ msgid "Unable to connect to %s" msgstr "Unable to connect to %s" -#, fuzzy, c-format +#, c-format msgid "Error reading from %s: response too long (%d bytes limit)" -msgstr "Error reading from %s: %s" +msgstr "Error reading from %s: response too long (%d bytes limit)" #, c-format msgid "" @@ -10190,20 +10031,20 @@ msgstr "Connection refused." #. 10048 -#, fuzzy, c-format +#, c-format msgid "Address already in use." -msgstr "This chat name is already in use" +msgstr "Address already in use." #, c-format msgid "Error Reading %s" msgstr "Error reading %s" -#, fuzzy, c-format +#, c-format msgid "" "An error was encountered reading your %s. The file has not been loaded, and " "the old file has been renamed to %s~." msgstr "" -"An error was encountered reading your %s. They have not been loaded, and " +"An error was encountered reading your %s. The file has not been loaded, and " "the old file has been renamed to %s~." msgid "Internet Messenger" @@ -10248,8 +10089,8 @@ msgid "Use this buddy _icon for this account:" msgstr "Use this buddy _icon for this account:" -msgid "_Advanced" -msgstr "_Advanced" +msgid "Ad_vanced" +msgstr "Ad_vanced" msgid "Use GNOME Proxy Settings" msgstr "Use GNOME Proxy Settings" @@ -10308,13 +10149,11 @@ msgid "_Basic" msgstr "_Basic" -#, fuzzy msgid "Create _this new account on the server" -msgstr "Create this new account on the server" - -#, fuzzy -msgid "_Proxy" -msgstr "Proxy" +msgstr "Create _this new account on the server" + +msgid "P_roxy" +msgstr "P_roxy" msgid "Enabled" msgstr "Enabled" @@ -10322,7 +10161,7 @@ msgid "Protocol" msgstr "Protocol" -#, fuzzy, c-format +#, c-format msgid "" "Welcome to %s!\n" "\n" @@ -10337,12 +10176,12 @@ "Welcome to %s!\n" "\n" "You have no IM accounts configured. To start connecting with %s press the " -"Add button below and configure your first account. If you want %s to " -"connect to multiple IM accounts, press Add again to configure them " -"all.\n" +"Add... button below and configure your first account. If you want %s " +"to connect to multiple IM accounts, press Add... again to configure " +"them all.\n" "\n" "You can come back to this window to add, edit, or remove accounts from " -"Accounts->Add/Edit in the Buddy List window" +"Accounts->Manage Accounts in the Buddy List window" #, c-format msgid "You have %d contact named %s. Would you like to merge them?" @@ -10364,9 +10203,8 @@ msgid "Please update the necessary fields." msgstr "Please update the necessary fields." -#, fuzzy msgid "A_ccount" -msgstr "Account" +msgstr "A_ccount" msgid "" "Please enter the appropriate information about the chat you would like to " @@ -10393,16 +10231,14 @@ msgid "I_M" msgstr "I_M" -#, fuzzy msgid "_Audio Call" -msgstr "_Add Chat" +msgstr "_Audio Call" msgid "Audio/_Video Call" -msgstr "" - -#, fuzzy +msgstr "Audio/_Video Call" + msgid "_Video Call" -msgstr "Video Chat" +msgstr "_Video Call" msgid "_Send File..." msgstr "_Send File..." @@ -10413,13 +10249,11 @@ msgid "View _Log" msgstr "View _Log" -#, fuzzy msgid "Hide When Offline" -msgstr "Hide when offline" - -#, fuzzy +msgstr "Hide When Offline" + msgid "Show When Offline" -msgstr "Show when offline" +msgstr "Show When Offline" msgid "_Alias..." msgstr "_Alias..." @@ -10427,9 +10261,8 @@ msgid "_Remove" msgstr "_Remove" -#, fuzzy msgid "Set Custom Icon" -msgstr "Set Custom Icon..." +msgstr "Set Custom Icon" msgid "Remove Custom Icon" msgstr "Remove Custom Icon" @@ -10532,9 +10365,8 @@ msgid "/_Accounts" msgstr "/_Accounts" -#, fuzzy msgid "/Accounts/Manage Accounts" -msgstr "/Accounts/Manage" +msgstr "/Accounts/Manage Accounts" #. Tools msgid "/_Tools" @@ -10546,9 +10378,8 @@ msgid "/Tools/_Certificates" msgstr "/Tools/_Certificates" -#, fuzzy msgid "/Tools/Custom Smile_ys" -msgstr "/Tools/Privacy" +msgstr "/Tools/Custom Smile_ys" msgid "/Tools/Plu_gins" msgstr "/Tools/Plu_g-ins" @@ -10677,7 +10508,7 @@ msgstr "By status" msgid "By recent log activity" -msgstr "" +msgstr "By recent log activity" #, c-format msgid "%s disconnected" @@ -10694,7 +10525,7 @@ msgstr "Re-enable" msgid "SSL FAQs" -msgstr "" +msgstr "SSL FAQs" msgid "Welcome back!" msgstr "Welcome back!" @@ -10721,7 +10552,7 @@ msgstr "/Accounts" #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy -#, fuzzy, c-format +#, c-format msgid "" "Welcome to %s!\n" "\n" @@ -10732,8 +10563,8 @@ "Welcome to %s!\n" "\n" "You have no accounts enabled. Enable your IM accounts from the Accounts window at Accounts->Manage. Once you enable accounts, you'll be " -"able to sign on, set your status, and talk to your friends." +"b> window at Accounts->Manage Accounts. Once you enable accounts, " +"you'll be able to sign on, set your status, and talk to your friends." #. set the Show Offline Buddies option. must be done #. * after the treeview or faceprint gets mad. -Robot101 @@ -10791,9 +10622,8 @@ msgid "Auto_join when account becomes online." msgstr "Auto_join when account becomes online." -#, fuzzy msgid "_Remain in chat after window is closed." -msgstr "_Hide chat when the window is closed." +msgstr "_Remain in chat after window is closed." msgid "Please enter the name of the group to be added." msgstr "Please enter the name of the group to be added." @@ -10826,111 +10656,98 @@ msgid "Background Color" msgstr "Background Colour" -#, fuzzy msgid "The background color for the buddy list" -msgstr "This group has been added to your buddy list" - -#, fuzzy +msgstr "The background colour for the buddy list" + msgid "Layout" -msgstr "Lao" +msgstr "Layout" msgid "The layout of icons, name, and status of the blist" -msgstr "" +msgstr "The layout of icons, name, and status of the blist" #. Group -#, fuzzy msgid "Expanded Background Color" -msgstr "Background Colour" +msgstr "Expanded Background Colour" msgid "The background color of an expanded group" -msgstr "" - -#, fuzzy +msgstr "The background colour of an expanded group" + msgid "Expanded Text" -msgstr "_Expand" +msgstr "Expanded Text" msgid "The text information for when a group is expanded" -msgstr "" - -#, fuzzy +msgstr "The text information for when a group is expanded" + msgid "Collapsed Background Color" -msgstr "Select Background Colour" +msgstr "Collapsed Background Colour" msgid "The background color of a collapsed group" -msgstr "" - -#, fuzzy +msgstr "The background colour of a collapsed group" + msgid "Collapsed Text" -msgstr "_Collapse" +msgstr "Collapsed Text" msgid "The text information for when a group is collapsed" -msgstr "" +msgstr "The text information for when a group is collapsed" #. Buddy -#, fuzzy msgid "Contact/Chat Background Color" -msgstr "Select Background Colour" +msgstr "Contact/Chat Background Colour" msgid "The background color of a contact or chat" -msgstr "" - -#, fuzzy +msgstr "The background colour of a contact or chat" + msgid "Contact Text" -msgstr "Sort" +msgstr "Contact Text" msgid "The text information for when a contact is expanded" -msgstr "" - -#, fuzzy +msgstr "The text information for when a contact is expanded" + msgid "On-line Text" -msgstr "Online" +msgstr "On-line Text" msgid "The text information for when a buddy is online" -msgstr "" - -#, fuzzy +msgstr "The text information for when a buddy is online" + msgid "Away Text" -msgstr "Away" +msgstr "Away Text" msgid "The text information for when a buddy is away" -msgstr "" - -#, fuzzy +msgstr "The text information for when a buddy is away" + msgid "Off-line Text" -msgstr "Offline" +msgstr "Off-line Text" msgid "The text information for when a buddy is off-line" -msgstr "" - -#, fuzzy +msgstr "The text information for when a buddy is off-line" + msgid "Idle Text" -msgstr "Mood Text" +msgstr "Idle Text" msgid "The text information for when a buddy is idle" -msgstr "" - -#, fuzzy +msgstr "The text information for when a buddy is idle" + msgid "Message Text" -msgstr "Message sent" +msgstr "Message Text" msgid "The text information for when a buddy has an unread message" -msgstr "" +msgstr "The text information for when a buddy has an unread message" msgid "Message (Nick Said) Text" -msgstr "" +msgstr "Message (Nick Said) Text" msgid "" "The text information for when a chat has an unread message that mentions " "your nick" msgstr "" - -#, fuzzy +"The text information for when a chat has an unread message that mentions " +"your nick" + msgid "The text information for a buddy's status" -msgstr "Change user information for %s" - -#, fuzzy +msgstr "The text information for a buddy's status" + msgid "Type the host name for this certificate." -msgstr "Type the host name this certificate is for." +msgstr "Type the host name for this certificate." #. Widget creation function msgid "SSL Servers" @@ -10978,9 +10795,8 @@ msgid "Get Away Message" msgstr "Get Away Message" -#, fuzzy msgid "Last Said" -msgstr "Last said" +msgstr "Last Said" msgid "Unable to save icon file to disk." msgstr "Unable to save icon file to disk." @@ -11025,21 +10841,17 @@ msgid "/Conversation/Clea_r Scrollback" msgstr "/Conversation/Clea_r Scrollback" -#, fuzzy msgid "/Conversation/M_edia" -msgstr "/Conversation/M_ore" - -#, fuzzy +msgstr "/Conversation/M_edia" + msgid "/Conversation/Media/_Audio Call" -msgstr "/Conversation/M_ore" - -#, fuzzy +msgstr "/Conversation/Media/_Audio Call" + msgid "/Conversation/Media/_Video Call" -msgstr "/Conversation/M_ore" - -#, fuzzy +msgstr "/Conversation/Media/_Video Call" + msgid "/Conversation/Media/Audio\\/Video _Call" -msgstr "/Conversation/View _Log" +msgstr "/Conversation/Media/Audio\\/Video _Call" msgid "/Conversation/Se_nd File..." msgstr "/Conversation/Se_nd File..." @@ -11113,17 +10925,14 @@ msgid "/Conversation/View Log" msgstr "/Conversation/View Log" -#, fuzzy msgid "/Conversation/Media/Audio Call" -msgstr "/Conversation/More" - -#, fuzzy +msgstr "/Conversation/Media/Audio Call" + msgid "/Conversation/Media/Video Call" -msgstr "/Conversation/View Log" - -#, fuzzy +msgstr "/Conversation/Media/Video Call" + msgid "/Conversation/Media/Audio\\/Video Call" -msgstr "/Conversation/More" +msgstr "/Conversation/Media/Audio\\/Video Call" msgid "/Conversation/Send File..." msgstr "/Conversation/Send File..." @@ -11298,25 +11107,23 @@ msgstr "Fatal Error" msgid "bug master" -msgstr "" - -#, fuzzy +msgstr "bug master" + msgid "artist" -msgstr "Artist" +msgstr "artist" #. feel free to not translate this msgid "Ka-Hing Cheung" -msgstr "" +msgstr "Ka-Hing Cheung" msgid "voice and video" -msgstr "" +msgstr "voice and video" msgid "support" msgstr "support" -#, fuzzy msgid "webmaster" -msgstr "developer & webmaster" +msgstr "webmaster" msgid "Senior Contributor/QA" msgstr "Senior Contributor/QA" @@ -11338,7 +11145,7 @@ msgstr "support/QA" msgid "XMPP" -msgstr "" +msgstr "XMPP" msgid "original author" msgstr "original author" @@ -11415,9 +11222,8 @@ msgid "French" msgstr "French" -#, fuzzy msgid "Irish" -msgstr "Kurdish" +msgstr "Irish" msgid "Galician" msgstr "Galician" @@ -11437,9 +11243,8 @@ msgid "Hungarian" msgstr "Hungarian" -#, fuzzy msgid "Armenian" -msgstr "Romanian" +msgstr "Armenian" msgid "Indonesian" msgstr "Indonesian" @@ -11456,9 +11261,8 @@ msgid "Ubuntu Georgian Translators" msgstr "Ubuntu Georgian Translators" -#, fuzzy msgid "Khmer" -msgstr "Other" +msgstr "Khmer" msgid "Kannada" msgstr "Kannada" @@ -11481,9 +11285,8 @@ msgid "Macedonian" msgstr "Macedonian" -#, fuzzy msgid "Mongolian" -msgstr "Macedonian" +msgstr "Mongolian" msgid "Bokmål Norwegian" msgstr "Bokmål Norwegian" @@ -11498,7 +11301,7 @@ msgstr "Norwegian Nynorsk" msgid "Occitan" -msgstr "" +msgstr "Occitan" msgid "Punjabi" msgstr "Punjabi" @@ -11540,7 +11343,7 @@ msgstr "Swedish" msgid "Swahili" -msgstr "" +msgstr "Swahili" msgid "Tamil" msgstr "Tamil" @@ -11606,21 +11409,26 @@ "FAQ: http://developer.pidgin.im/wiki/FAQ

" msgstr "" +"FAQ: http://developer.pidgin.im/wiki/FAQ

" #, c-format msgid "" "Help via e-mail: support@pidgin.im

" msgstr "" - -#, fuzzy, c-format +"Help via e-mail: support@pidgin.im

" + +#, c-format msgid "" "IRC Channel: #pidgin on irc.freenode.net

" -msgstr "IRC: #pidgin on irc.freenode.net

" - -#, fuzzy, c-format +msgstr "" +"IRC Channel: #pidgin on irc.freenode.net

" + +#, c-format msgid "XMPP MUC: devel@conference.pidgin.im

" -msgstr "IRC: #pidgin on irc.freenode.net

" +msgstr "XMPP MUC: devel@conference.pidgin.im

" msgid "Current Developers" msgstr "Current Developers" @@ -11758,45 +11566,35 @@ msgid "Right-click for more unread messages...\n" msgstr "Right-click for more unread messages...\n" -#, fuzzy msgid "_Change Status" -msgstr "Change Status" - -#, fuzzy +msgstr "_Change Status" + msgid "Show Buddy _List" -msgstr "Show Buddy List" - -#, fuzzy +msgstr "Show Buddy _List" + msgid "_Unread Messages" -msgstr "Unread Messages" - -#, fuzzy +msgstr "_Unread Messages" + msgid "New _Message..." -msgstr "New Message..." - -#, fuzzy +msgstr "New _Message..." + msgid "_Accounts" -msgstr "/_Accounts" - -#, fuzzy +msgstr "_Accounts" + msgid "Plu_gins" -msgstr "Plug-ins" - -#, fuzzy +msgstr "Plu_gins" + msgid "Pr_eferences" -msgstr "Preferences" - -#, fuzzy +msgstr "Pr_eferences" + msgid "Mute _Sounds" -msgstr "Mute Sounds" - -#, fuzzy +msgstr "Mute _Sounds" + msgid "_Blink on New Message" -msgstr "Blink on New Message" - -#, fuzzy +msgstr "_Blink on New Message" + msgid "_Quit" -msgstr "Quit" +msgstr "_Quit" msgid "Not started" msgstr "Not started" @@ -11879,13 +11677,11 @@ msgid "Color to draw hyperlinks." msgstr "Colour to draw hyperlinks." -#, fuzzy msgid "Hyperlink visited color" -msgstr "Hyperlink colour" - -#, fuzzy +msgstr "Hyperlink visited colour" + msgid "Color to draw hyperlink after it has been visited (or activated)." -msgstr "Colour to draw hyperlinks when mouse is over them." +msgstr "Colour to draw hyperlinks after they has been visited (or activated)." msgid "Hyperlink prelight color" msgstr "Hyperlink prelight colour" @@ -11918,28 +11714,23 @@ msgid "Color to draw the name of an action message." msgstr "Colour to draw the name of an action message." -#, fuzzy msgid "Action Message Name Color for Whispered Message" -msgstr "Action Message Name Colour" - -#, fuzzy +msgstr "Action Message Name Colour for Whispered Message" + msgid "Color to draw the name of a whispered action message." -msgstr "Colour to draw the name of an action message." - -#, fuzzy +msgstr "Colour to draw the name of a whispered action message." + msgid "Whisper Message Name Color" -msgstr "Sent Message Name Colour" - -#, fuzzy +msgstr "Whisper Message Name Colour" + msgid "Color to draw the name of a whispered message." -msgstr "Colour to draw the name of an action message." +msgstr "Colour to draw the name of a whispered message." msgid "Typing notification color" msgstr "Typing notification colour" -#, fuzzy msgid "The color to use for the typing notification" -msgstr "The colour to use for the typing notification font" +msgstr "The colour to use for the typing notification" msgid "Typing notification font" msgstr "Typing notification font" @@ -11994,9 +11785,8 @@ msgid "_Save Image..." msgstr "_Save Image..." -#, fuzzy msgid "_Add Custom Smiley..." -msgstr "Show custom smileys" +msgstr "_Add Custom Smiley..." msgid "Select Font" msgstr "Select Font" @@ -12041,13 +11831,14 @@ "This smiley is disabled because a custom smiley exists for this shortcut:\n" " %s" msgstr "" +"This smiley is disabled because a custom smiley exists for this shortcut:\n" +" %s" msgid "Smile!" msgstr "Smile!" -#, fuzzy msgid "_Manage custom smileys" -msgstr "Show custom smileys" +msgstr "_Manage custom smileys" msgid "This theme has no available smileys." msgstr "This theme has no available smileys." @@ -12191,7 +11982,7 @@ msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%s %s. Try `%s -h' for more information.\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12213,6 +12004,7 @@ "\n" " -c, --config=DIR use DIR for config files\n" " -d, --debug print debugging messages to stdout\n" +" -f, --force-online force online, regardless of network status\n" " -h, --help display this help and exit\n" " -m, --multiple do not ensure single instance\n" " -n, --nologin don't automatically login\n" @@ -12222,7 +12014,7 @@ " --display=DISPLAY X display to use\n" " -v, --version display the current version and exit\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12243,6 +12035,7 @@ "\n" " -c, --config=DIR use DIR for config files\n" " -d, --debug print debugging messages to stdout\n" +" -f, --force-online force online, regardless of network status\n" " -h, --help display this help and exit\n" " -m, --multiple do not ensure single instance\n" " -n, --nologin don't automatically login\n" @@ -12251,7 +12044,7 @@ " Without this only the first account will be enabled).\n" " -v, --version display the current version and exit\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" @@ -12278,11 +12071,6 @@ "and post the backtrace from the core file. If you do not know\n" "how to get the backtrace, please read the instructions at\n" "%swiki/GetABacktrace\n" -"\n" -"If you need further assistance, please IM either SeanEgn or \n" -"LSchiere (via AIM). Contact information for Sean and Luke \n" -"on other protocols is at\n" -"%swiki/DeveloperPages\n" #. Translators may want to transliterate the name. #. It is not to be translated. @@ -12291,25 +12079,24 @@ #, c-format msgid "Exiting because another libpurple client is already running.\n" -msgstr "" +msgstr "Exiting because another libpurple client is already running.\n" msgid "/_Media" -msgstr "" +msgstr "/_Media" msgid "/Media/_Hangup" -msgstr "" - -#, fuzzy +msgstr "/Media/_Hangup" + msgid "Calling..." -msgstr "Calculating..." +msgstr "Calling..." #, c-format msgid "%s wishes to start an audio/video session with you." -msgstr "" +msgstr "%s wishes to start an audio/video session with you." #, c-format msgid "%s wishes to start a video session with you." -msgstr "" +msgstr "%s wishes to start a video session with you." #, c-format msgid "%s has %d new message." @@ -12339,9 +12126,8 @@ msgstr "" "The 'Manual' browser command has been chosen, but no command has been set." -#, fuzzy msgid "No message" -msgstr "Unknown message" +msgstr "No message" msgid "Open All Messages" msgstr "Open All Messages" @@ -12349,16 +12135,14 @@ msgid "You have mail!" msgstr "You have mail!" -#, fuzzy msgid "New Pounces" -msgstr "New Buddy Pounce" +msgstr "New Pounces" msgid "Dismiss" -msgstr "" - -#, fuzzy +msgstr "Dismiss" + msgid "You have pounced!" -msgstr "You have mail!" +msgstr "You have pounced!" msgid "The following plugins will be unloaded." msgstr "The following plug-ins will be unloaded." @@ -12408,9 +12192,8 @@ msgid "Select a file" msgstr "Select a file" -#, fuzzy msgid "Modify Buddy Pounce" -msgstr "Edit Buddy Pounce" +msgstr "Modify Buddy Pounce" #. Create the "Pounce on Whom" frame. msgid "Pounce on Whom" @@ -12485,61 +12268,58 @@ msgid "Pounce Target" msgstr "Pounce Target" -#, fuzzy, c-format +#, c-format msgid "Started typing" -msgstr "Starts typing" - -#, fuzzy, c-format +msgstr "Started typing" + +#, c-format msgid "Paused while typing" -msgstr "Pauses while typing" - -#, fuzzy, c-format +msgstr "Paused while typing" + +#, c-format msgid "Signed on" -msgstr "Signs on" - -#, fuzzy, c-format +msgstr "Signed on" + +#, c-format msgid "Returned from being idle" -msgstr "%s has returned from being idle (%s)" - -#, fuzzy, c-format +msgstr "Returned from being idle" + +#, c-format msgid "Returned from being away" -msgstr "Returns from away" - -#, fuzzy, c-format +msgstr "Returned from being away" + +#, c-format msgid "Stopped typing" -msgstr "Stopped Typing" - -#, fuzzy, c-format +msgstr "Stopped typing" + +#, c-format msgid "Signed off" -msgstr "Signs off" - -#, fuzzy, c-format +msgstr "Signed off" + +#, c-format msgid "Became idle" -msgstr "Becomes idle" - -#, fuzzy, c-format +msgstr "Became idle" + +#, c-format msgid "Went away" -msgstr "When away" - -#, fuzzy, c-format +msgstr "Went away" + +#, c-format msgid "Sent a message" -msgstr "Send a message" - -#, fuzzy, c-format +msgstr "Sent a message" + +#, c-format msgid "Unknown.... Please report this!" -msgstr "Unknown pounce event. Please report this!" - -#, fuzzy +msgstr "Unknown.... Please report this!" + msgid "Theme failed to unpack." -msgstr "Smiley theme failed to unpack." - -#, fuzzy +msgstr "Theme failed to unpack." + msgid "Theme failed to load." -msgstr "Smiley theme failed to unpack." - -#, fuzzy +msgstr "Theme failed to load." + msgid "Theme failed to copy." -msgstr "Smiley theme failed to unpack." +msgstr "Theme failed to copy." msgid "Install Theme" msgstr "Install Theme" @@ -12561,9 +12341,8 @@ msgstr "Cl_ose conversations with the Escape key" #. Buddy List Themes -#, fuzzy msgid "Buddy List Theme" -msgstr "Buddy List" +msgstr "Buddy List Theme" #. System Tray msgid "System Tray Icon" @@ -12575,9 +12354,8 @@ msgid "On unread messages" msgstr "On unread messages" -#, fuzzy msgid "Conversation Window" -msgstr "IM Conversation Windows" +msgstr "Conversation Window" msgid "_Hide new IM conversations:" msgstr "_Hide new IM conversations:" @@ -12680,9 +12458,9 @@ msgid "Example: stunserver.org" msgstr "Example: stunserver.org" -#, fuzzy, c-format +#, c-format msgid "Use _automatically detected IP address: %s" -msgstr "_Autodetect IP address" +msgstr "Use _automatically detected IP address: %s" msgid "Public _IP:" msgstr "Public _IP:" @@ -12704,7 +12482,7 @@ #. TURN server msgid "Relay Server (TURN)" -msgstr "" +msgstr "Relay Server (TURN)" msgid "Proxy Server & Browser" msgstr "Proxy Server & Browser" @@ -12736,7 +12514,7 @@ #. This is a global option that affects SOCKS4 usage even with account-specific proxy settings msgid "Use remote DNS with SOCKS4 proxies" -msgstr "" +msgstr "Use remote DNS with SOCKS4 proxies" msgid "_User:" msgstr "_User:" @@ -12859,31 +12637,26 @@ "Sound c_ommand:\n" "(%s for filename)" -#, fuzzy msgid "M_ute sounds" -msgstr "Mute Sounds" +msgstr "M_ute Sounds" msgid "Sounds when conversation has _focus" msgstr "Sounds when conversation has _focus" -#, fuzzy msgid "_Enable sounds:" -msgstr "Enable sounds:" - -#, fuzzy +msgstr "_Enable sounds:" + msgid "V_olume:" -msgstr "Volume:" +msgstr "V_olume:" msgid "Play" msgstr "Play" -#, fuzzy msgid "_Browse..." -msgstr "Brows_e..." - -#, fuzzy +msgstr "_Browse..." + msgid "_Reset" -msgstr "Reset" +msgstr "_Reset" msgid "_Report idle time:" msgstr "_Report idle time:" @@ -13058,55 +12831,44 @@ msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." msgstr "" - -#, fuzzy +"A custom smiley for '%s' already exists. Please use a different shortcut." + msgid "Custom Smiley" -msgstr "Insert Smiley" - -#, fuzzy +msgstr "Custom Smiley" + msgid "Duplicate Shortcut" -msgstr "Duplicate Correction" - -#, fuzzy +msgstr "Duplicate Shortcut" + msgid "Edit Smiley" -msgstr "Insert Smiley" - -#, fuzzy +msgstr "Edit Smiley" + msgid "Add Smiley" -msgstr "Smile!" - -#, fuzzy +msgstr "Add Smiley" + msgid "_Image:" -msgstr "_Image" +msgstr "_Image:" #. Shortcut text -#, fuzzy msgid "S_hortcut text:" -msgstr "Sort" - -#, fuzzy +msgstr "S_hortcut text:" + msgid "Smiley" -msgstr "Smile!" - -#, fuzzy +msgstr "Smiley" + msgid "Shortcut Text" -msgstr "Sort" - -#, fuzzy +msgstr "Shortcut Text" + msgid "Custom Smiley Manager" -msgstr "Certificate Manager" - -#, fuzzy +msgstr "Custom Smiley Manager" + msgid "Select Buddy Icon" -msgstr "Select Buddy" - -#, fuzzy +msgstr "Select Buddy Icon" + msgid "Click to change your buddyicon for this account." -msgstr "Use this buddy _icon for this account:" - -#, fuzzy +msgstr "Click to change your buddy icon for this account." + msgid "Click to change your buddyicon for all accounts." -msgstr "Use this buddy _icon for this account:" +msgstr "Click to change your buddy icon for all accounts." msgid "Waiting for network connection" msgstr "Waiting for network connection" @@ -13186,13 +12948,12 @@ msgid "Cannot send launcher" msgstr "Cannot send launcher" -#, fuzzy msgid "" "You dragged a desktop launcher. Most likely you wanted to send the target of " "this launcher instead of this launcher itself." msgstr "" -"You dragged a desktop launcher. Most likely you wanted to send whatever this " -"launcher points to instead of this launcher itself." +"You dragged a desktop launcher. Most likely you wanted to send the target of " +"this launcher instead of this launcher itself." #, c-format msgid "" @@ -13224,9 +12985,8 @@ msgstr "" "Failed to load image \"%s\": reason not known; probably a corrupt image file" -#, fuzzy msgid "_Open Link" -msgstr "_Open Link in:" +msgstr "_Open Link" msgid "_Copy Link Location" msgstr "_Copy Link Location" @@ -13234,9 +12994,21 @@ msgid "_Copy Email Address" msgstr "_Copy Email Address" +msgid "_Open File" +msgstr "_Open File" + +msgid "Open _Containing Directory" +msgstr "Open _Containing Directory" + msgid "Save File" msgstr "Save File" +msgid "_Play Sound" +msgstr "_Play Sound" + +msgid "_Save File" +msgstr "_Save File" + msgid "Select color" msgstr "Select colour" @@ -13252,20 +13024,17 @@ msgid "_Invite" msgstr "_Invite" -#, fuzzy msgid "_Modify..." -msgstr "_Modify" - -#, fuzzy +msgstr "_Modify..." + msgid "_Add..." -msgstr "_Add" +msgstr "_Add..." msgid "_Open Mail" msgstr "_Open Mail" -#, fuzzy msgid "_Edit" -msgstr "Edit" +msgstr "_Edit" msgid "Pidgin Tooltip" msgstr "Pidgin Tooltip" @@ -13282,12 +13051,11 @@ msgid "none" msgstr "none" -#, fuzzy msgid "Small" -msgstr "Email" +msgstr "Small" msgid "Smaller versions of the default smilies" -msgstr "" +msgstr "Smaller versions of the default smilies" msgid "Response Probability:" msgstr "Responses Probability:" @@ -13328,77 +13096,65 @@ msgid "Displays statistical information about your buddies' availability" msgstr "Displays statistical information about your buddies' availability" -#, fuzzy msgid "Server name request" -msgstr "Server address" - -#, fuzzy +msgstr "Server name request" + msgid "Enter an XMPP Server" -msgstr "Enter a Conference Server" - -#, fuzzy +msgstr "Enter an XMPP Server" + msgid "Select an XMPP server to query" -msgstr "Select a conference server to query" - -#, fuzzy +msgstr "Select an XMPP server to query" + msgid "Find Services" -msgstr "Online Services" - -#, fuzzy +msgstr "Find Services" + msgid "Add to Buddy List" -msgstr "Send Buddy List" - -#, fuzzy +msgstr "Add to Buddy List" + msgid "Gateway" -msgstr "Goes away" - -#, fuzzy +msgstr "Gateway" + msgid "Directory" -msgstr "Log Directory" - -#, fuzzy +msgstr "Directory" + msgid "PubSub Collection" -msgstr "Sound Selection" - -#, fuzzy +msgstr "PubSub Collection" + msgid "PubSub Leaf" -msgstr "PubSub Service" - -#, fuzzy +msgstr "PubSub Leaf" + msgid "" "\n" "Description: " -msgstr "Description" +msgstr "" +"\n" +"Description: " #. Create the window. -#, fuzzy msgid "Service Discovery" -msgstr "Service Discovery Info" - -#, fuzzy +msgstr "Service Discovery" + msgid "_Browse" -msgstr "_Browser:" - -#, fuzzy +msgstr "_Browse" + msgid "Server does not exist" -msgstr "User does not exist" - -#, fuzzy +msgstr "Server does not exist" + msgid "Server does not support service discovery" -msgstr "Server does not use any supported authentication method" - -#, fuzzy +msgstr "Server does not support service discovery" + msgid "XMPP Service Discovery" -msgstr "Service Discovery Info" +msgstr "XMPP Service Discovery" msgid "Allows browsing and registering services." -msgstr "" - -#, fuzzy +msgstr "Allows browsing and registering services." + msgid "" "This plugin is useful for registering with legacy transports or other XMPP " "services." -msgstr "This plugin is useful for debugging XMPP servers or clients." +msgstr "" +"This plugin is useful for registering with legacy transports or other XMPP " +"services." msgid "Buddy is idle" msgstr "Buddy is idle" @@ -13664,10 +13420,10 @@ msgstr "Optional information:" msgid "First name:" -msgstr "Forename" +msgstr "Forename:" msgid "Last name:" -msgstr "Surname" +msgstr "Surname:" msgid "Email:" msgstr "Email:" @@ -13786,13 +13542,12 @@ msgstr "Music Messaging Plugin for collaborative composition." #. * summary -#, fuzzy msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " "on a piece of music by editing a common score in real-time." msgstr "" "The Music Messaging Plugin allows a number of users to simultaneously work " -"on a piece of music by editting a common score in real-time." +"on a piece of music by editing a common score in real-time." #. ---------- "Notify For" ---------- msgid "Notify For" @@ -13823,9 +13578,8 @@ msgid "Set window manager \"_URGENT\" hint" msgstr "Set window manager \"_URGENT\" hint" -#, fuzzy msgid "_Flash window" -msgstr "C_hat windows" +msgstr "_Flash window" #. Raise window method button msgid "R_aise conversation window" @@ -13905,16 +13659,14 @@ msgid "Hyperlink Color" msgstr "Hyperlink Colour" -#, fuzzy msgid "Visited Hyperlink Color" -msgstr "Hyperlink Colour" +msgstr "Visited Hyperlink Colour" msgid "Highlighted Message Name Color" msgstr "Highlighted Messages Name Colour" -#, fuzzy msgid "Typing Notification Color" -msgstr "Typing notification colour" +msgstr "Typing Notification Colour" msgid "GtkTreeView Horizontal Separation" msgstr "GtkTreeView Horizontal Separation" @@ -13945,23 +13697,20 @@ msgid "GTK+ Text Shortcut Theme" msgstr "GTK+ Text Shortcut Theme" -#, fuzzy msgid "Disable Typing Notification Text" -msgstr "Enable typing notification" - -#, fuzzy +msgstr "Disable Typing Notification Text" + msgid "GTK+ Theme Control Settings" -msgstr "Pidgin GTK+ Theme Control" - -#, fuzzy +msgstr "GTK+ Theme Control Settings" + msgid "Colors" -msgstr "Close" +msgstr "Colours" msgid "Fonts" msgstr "Fonts" msgid "Miscellaneous" -msgstr "" +msgstr "Miscellaneous" msgid "Gtkrc File Tools" msgstr "Gtkrc File Tools" @@ -13994,18 +13743,16 @@ #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "You can upgrade to %s %s today." msgid "New Version Available" msgstr "New Version Available" -#, fuzzy msgid "Later" -msgstr "Date" - -#, fuzzy +msgstr "Later" + msgid "Download Now" -msgstr "Users on %s: %s" +msgstr "Download Now" #. *< type #. *< ui_requirement @@ -14047,13 +13794,12 @@ msgstr "Conversation Window Send Button." #. *< summary -#, fuzzy msgid "" "Adds a Send button to the entry area of the conversation window. Intended " "for use when no physical keyboard is present." msgstr "" "Adds a Send button to the entry area of the conversation window. Intended " -"for when no physical keyboard is present." +"for use when no physical keyboard is present." msgid "Duplicate Correction" msgstr "Duplicate Correction" @@ -14104,94 +13850,78 @@ msgid "Replaces text in outgoing messages according to user-defined rules." msgstr "Replaces text in outgoing messages according to user-defined rules." -#, fuzzy msgid "Just logged in" -msgstr "Not logged in" - -#, fuzzy +msgstr "Just logged in" + msgid "Just logged out" -msgstr "Not logged in" +msgstr "Just logged out" msgid "" "Icon for Contact/\n" "Icon for Unknown person" msgstr "" - -#, fuzzy +"Icon for Contact/\n" +"Icon for Unknown person" + msgid "Icon for Chat" -msgstr "Join a Chat" - -#, fuzzy +msgstr "Icon for Chat" + msgid "Ignored" -msgstr "Ignore" - -#, fuzzy +msgstr "Ignored" + msgid "Founder" -msgstr "Louder" - -#, fuzzy +msgstr "Founder" + msgid "Operator" -msgstr "Opera" +msgstr "Operator" msgid "Half Operator" -msgstr "" - -#, fuzzy +msgstr "Half Operator" + msgid "Authorization dialog" -msgstr "Authorisation Given" - -#, fuzzy +msgstr "Authorisation dialog" + msgid "Error dialog" -msgstr "Error " - -#, fuzzy +msgstr "Error dialog" + msgid "Information dialog" -msgstr "Information" +msgstr "Information dialog" msgid "Mail dialog" -msgstr "" - -#, fuzzy +msgstr "Mail dialog" + msgid "Question dialog" -msgstr "Request Dialog" - -#, fuzzy +msgstr "Question dialog" + msgid "Warning dialog" -msgstr "Warning Level" +msgstr "Warning dialog" msgid "What kind of dialog is this?" -msgstr "" - -#, fuzzy +msgstr "What kind of dialog is this?" + msgid "Status Icons" -msgstr "Status for %s" - -#, fuzzy +msgstr "Status Icons" + msgid "Chatroom Emblems" -msgstr "Chat room locale" - -#, fuzzy +msgstr "Chatroom Emblems" + msgid "Dialog Icons" -msgstr "Save Icon" - -#, fuzzy +msgstr "Dialog Icons" + msgid "Pidgin Icon Theme Editor" -msgstr "Pidgin GTK+ Theme Control" - -#, fuzzy +msgstr "Pidgin Icon Theme Editor" + msgid "Contact" -msgstr "Contact Info" - -#, fuzzy +msgstr "Contact" + msgid "Pidgin Buddylist Theme Editor" -msgstr "Buddy List" - -#, fuzzy +msgstr "Pidgin Buddylist Theme Editor" + msgid "Edit Buddylist Theme" -msgstr "Buddy List" +msgstr "Edit Buddylist Theme" msgid "Edit Icon Theme" -msgstr "" +msgstr "Edit Icon Theme" #. *< type #. *< ui_requirement @@ -14200,16 +13930,14 @@ #. *< priority #. *< id #. * description -#, fuzzy msgid "Pidgin Theme Editor" -msgstr "Pidgin GTK+ Theme Control" +msgstr "Pidgin Theme Editor" #. *< name #. *< version #. * summary -#, fuzzy msgid "Pidgin Theme Editor." -msgstr "Pidgin GTK+ Theme Control" +msgstr "Pidgin Theme Editor." #. *< type #. *< ui_requirement @@ -14378,7 +14106,6 @@ msgid "Options specific to Pidgin for Windows." msgstr "Options specific to Pidgin for Windows." -#, fuzzy msgid "" "Provides options specific to Pidgin for Windows, such as buddy list docking." msgstr "" @@ -14420,831 +14147,3 @@ #. * description msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "This plugin is useful for debugging XMPP servers or clients." - -#~ msgid "Cannot open socket" -#~ msgstr "Cannot open socket" - -#~ msgid "Could not listen on socket" -#~ msgstr "Could not listen on socket" - -#~ msgid "Unable to read socket" -#~ msgstr "Unable to read socket" - -#~ msgid "Connection failed." -#~ msgstr "Connection failed." - -#~ msgid "Server has disconnected" -#~ msgstr "Server has disconnected" - -#~ msgid "Couldn't create socket" -#~ msgstr "Couldn't create socket" - -#~ msgid "Couldn't connect to host" -#~ msgstr "Couldn't connect to host" - -#~ msgid "Read error" -#~ msgstr "Read error" - -#~ msgid "" -#~ "Could not establish a connection with the server:\n" -#~ "%s" -#~ msgstr "" -#~ "Could not establish a connection with the server:\n" -#~ "%s" - -#~ msgid "Write error" -#~ msgstr "Write error" - -#~ msgid "Last Activity" -#~ msgstr "Last Activity" - -#~ msgid "Service Discovery Info" -#~ msgstr "Service Discovery Info" - -#~ msgid "Service Discovery Items" -#~ msgstr "Service Discovery Items" - -#~ msgid "Extended Stanza Addressing" -#~ msgstr "Extended Stanza Addressing" - -#~ msgid "Multi-User Chat" -#~ msgstr "Multi-User Chat" - -#~ msgid "Multi-User Chat Extended Presence Information" -#~ msgstr "Multi-User Chat Extended Presence Information" - -#~ msgid "In-Band Bytestreams" -#~ msgstr "In-Band Bytestreams" - -#~ msgid "Ad-Hoc Commands" -#~ msgstr "Ad-Hoc Commands" - -#~ msgid "PubSub Service" -#~ msgstr "PubSub Service" - -#~ msgid "SOCKS5 Bytestreams" -#~ msgstr "SOCKS5 Bytestreams" - -#~ msgid "Out of Band Data" -#~ msgstr "Out of Band Data" - -#~ msgid "XHTML-IM" -#~ msgstr "XHTML-IM" - -#~ msgid "In-Band Registration" -#~ msgstr "In-Band Registration" - -#~ msgid "User Location" -#~ msgstr "User Location" - -#~ msgid "User Avatar" -#~ msgstr "User Avatar" - -#~ msgid "Chat State Notifications" -#~ msgstr "Chat State Notifications" - -#~ msgid "Software Version" -#~ msgstr "Software Version" - -#~ msgid "Stream Initiation" -#~ msgstr "Stream Initiation" - -#~ msgid "User Mood" -#~ msgstr "User Mood" - -#~ msgid "User Activity" -#~ msgstr "User Activity" - -#~ msgid "Entity Capabilities" -#~ msgstr "Entity Capabilities" - -#~ msgid "Encrypted Session Negotiations" -#~ msgstr "Encrypted Session Negotiations" - -#~ msgid "User Tune" -#~ msgstr "User Tune" - -#~ msgid "Roster Item Exchange" -#~ msgstr "Roster Item Exchange" - -#~ msgid "Reachability Address" -#~ msgstr "Reachability Address" - -#~ msgid "User Profile" -#~ msgstr "User Profile" - -#~ msgid "Jingle" -#~ msgstr "Jingle" - -#~ msgid "Jingle Audio" -#~ msgstr "Jingle Audio" - -#~ msgid "User Nickname" -#~ msgstr "User Nickname" - -#~ msgid "Jingle ICE UDP" -#~ msgstr "Jingle ICE UDP" - -#~ msgid "Jingle ICE TCP" -#~ msgstr "Jingle ICE TCP" - -#~ msgid "Jingle Raw UDP" -#~ msgstr "Jingle Raw UDP" - -#~ msgid "Jingle Video" -#~ msgstr "Jingle Video" - -#~ msgid "Jingle DTMF" -#~ msgstr "Jingle DTMF" - -#~ msgid "Message Receipts" -#~ msgstr "Message Receipts" - -#~ msgid "Public Key Publishing" -#~ msgstr "Public Key Publishing" - -#~ msgid "User Chatting" -#~ msgstr "User Chatting" - -#~ msgid "User Browsing" -#~ msgstr "User Browsing" - -#~ msgid "User Gaming" -#~ msgstr "User Gaming" - -#~ msgid "User Viewing" -#~ msgstr "User Viewing" - -#~ msgid "Stanza Encryption" -#~ msgstr "Stanza Encryption" - -#~ msgid "Entity Time" -#~ msgstr "Entity Time" - -#~ msgid "Delayed Delivery" -#~ msgstr "Delayed Delivery" - -#~ msgid "Collaborative Data Objects" -#~ msgstr "Collaborative Data Objects" - -#~ msgid "File Repository and Sharing" -#~ msgstr "File Repository and Sharing" - -#~ msgid "STUN Service Discovery for Jingle" -#~ msgstr "STUN Service Discovery for Jingle" - -#~ msgid "Simplified Encrypted Session Negotiation" -#~ msgstr "Simplified Encrypted Session Negotiation" - -#~ msgid "Hop Check" -#~ msgstr "Hop Check" - -#~ msgid "Read Error" -#~ msgstr "Read Error" - -#~ msgid "Failed to connect to server." -#~ msgstr "Failed to connect to server." - -#~ msgid "Read buffer full (2)" -#~ msgstr "Read buffer full (2)" - -#~ msgid "Unparseable message" -#~ msgstr "Unparseable message" - -#~ msgid "Couldn't connect to host: %s (%d)" -#~ msgstr "Couldn't connect to host: %s (%d)" - -#~ msgid "Login failed (%s)." -#~ msgstr "Login failed (%s)." - -#~ msgid "" -#~ "You have been logged out because you logged in at another workstation." -#~ msgstr "" -#~ "You have been logged out because you logged in at another workstation." - -#~ msgid "Error. SSL support is not installed." -#~ msgstr "Error: SSL support is not installed." - -#~ msgid "Incorrect password." -#~ msgstr "Incorrect password." - -#~ msgid "" -#~ "Could not connect to BOS server:\n" -#~ "%s" -#~ msgstr "" -#~ "Could not connect to BOS server:\n" -#~ "%s" - -#~ msgid "You may be disconnected shortly. Check %s for updates." -#~ msgstr "You may be disconnected shortly. Check %s for updates." - -#~ msgid "Could Not Connect" -#~ msgstr "Could Not Connect" - -#~ msgid "Invalid username." -#~ msgstr "Invalid username." - -#, fuzzy -#~ msgid "Could not decrypt server reply" -#~ msgstr "Cannot get server information" - -#~ msgid "Connection lost" -#~ msgstr "Connection lost" - -#~ msgid "Couldn't resolve host" -#~ msgstr "Couldn't resolve host" - -#~ msgid "Connection closed (writing)" -#~ msgstr "Connection closed (writing)" - -#~ msgid "Connection reset" -#~ msgstr "Connection reset" - -#~ msgid "Error reading from socket: %s" -#~ msgstr "Error reading from socket: %s" - -#~ msgid "Unable to connect to host" -#~ msgstr "Unable to connect to host" - -#~ msgid "Could not write" -#~ msgstr "Could not write" - -#~ msgid "Could not connect" -#~ msgstr "Could not connect" - -#~ msgid "Could not create listen socket" -#~ msgstr "Could not create listen socket" - -#~ msgid "Could not resolve hostname" -#~ msgstr "Could not resolve hostname" - -#, fuzzy -#~ msgid "Incorrect Password" -#~ msgstr "Incorrect password" - -#~ msgid "" -#~ "Could not establish a connection with %s:\n" -#~ "%s" -#~ msgstr "" -#~ "Could not establish a connection with %s:\n" -#~ "%s" - -#~ msgid "Yahoo Japan" -#~ msgstr "Yahoo Japan" - -#~ msgid "Japan Pager server" -#~ msgstr "Japan Pager server" - -#~ msgid "Japan file transfer server" -#~ msgstr "Japan file transfer server" - -#~ msgid "" -#~ "Lost connection with server\n" -#~ "%s" -#~ msgstr "" -#~ "Lost connection with server\n" -#~ "%s" - -#~ msgid "Could not resolve host name" -#~ msgstr "Could not resolve host name" - -#, fuzzy -#~ msgid "" -#~ "Unable to connect to %s: Server requires TLS/SSL, but no TLS/SSL support " -#~ "was found." -#~ msgstr "Server requires TLS/SSL for login. No TLS/SSL support found." - -#~ msgid "Conversation Window Hiding" -#~ msgstr "Conversation Window Hiding" - -#, fuzzy -#~ msgid "Please select an image for the smiley." -#~ msgstr "Please select your mood from the list." - -#~ msgid "Activate which ID?" -#~ msgstr "Activate which ID?" - -#~ msgid "Cursor Color" -#~ msgstr "Cursor Colour" - -#~ msgid "Secondary Cursor Color" -#~ msgstr "Secondary Cursor Colour" - -#~ msgid "Interface colors" -#~ msgstr "Interface colours" - -#~ msgid "Widget Sizes" -#~ msgstr "Widget Sizes" - -#, fuzzy -#~ msgid "Invite message" -#~ msgstr "Insert in message" - -#, fuzzy -#~ msgid "" -#~ "Please enter the name of the user you wish to invite,\n" -#~ "along with an optional invite message." -#~ msgstr "" -#~ "Please enter the name of the user you wish to invite, along with an " -#~ "optional invite message." - -#~ msgid "Unable to retrieve MSN Address Book" -#~ msgstr "Unable to retrieve MSN Address Book" - -#, fuzzy -#~ msgid "Connection to server lost (no data received within %d second)" -#~ msgid_plural "" -#~ "Connection to server lost (no data received within %d seconds)" -#~ msgstr[0] "Connection to server lost (no data received within %d seconds)" -#~ msgstr[1] "Connection to server lost (no data received within %d seconds)" - -#~ msgid "" -#~ "You may be disconnected shortly. You may want to use TOC until this is " -#~ "fixed. Check %s for updates." -#~ msgstr "" -#~ "You may be disconnected shortly. You may want to use TOC until this is " -#~ "fixed. Check %s for updates." - -#, fuzzy -#~ msgid "Add buddy Q&A" -#~ msgstr "Add Buddy" - -#, fuzzy -#~ msgid "Can not decrypt get server reply" -#~ msgstr "Cannot get server information" - -#~ msgid "Keep alive error" -#~ msgstr "Keep alive error" - -#, fuzzy -#~ msgid "" -#~ "Lost connection with server:\n" -#~ "%d, %s" -#~ msgstr "" -#~ "Lost connection with server:\n" -#~ "%s" - -#, fuzzy -#~ msgid "Connecting server ..." -#~ msgstr "Connect server" - -#~ msgid "Failed to send IM." -#~ msgstr "Failed to send IM." - -#~ msgid "Looking up %s" -#~ msgstr "Looking up %s" - -#~ msgid "Connect to %s failed" -#~ msgstr "Connect to %s failed" - -#~ msgid "Signon: %s" -#~ msgstr "Signon: %s" - -#~ msgid "Unable to write file %s." -#~ msgstr "Unable to write file %s." - -#~ msgid "Unable to read file %s." -#~ msgstr "Unable to read file %s." - -#~ msgid "Message too long, last %s bytes truncated." -#~ msgstr "Message too long, last %s bytes truncated." - -#~ msgid "%s not currently logged in." -#~ msgstr "%s not currently logged in." - -#~ msgid "Warning of %s not allowed." -#~ msgstr "Warning of %s not allowed." - -#~ msgid "" -#~ "A message has been dropped, you are exceeding the server speed limit." -#~ msgstr "" -#~ "A message has been dropped, you are exceeding the server speed limit." - -#~ msgid "Chat in %s is not available." -#~ msgstr "Chat in %s is not available." - -#~ msgid "You are sending messages too fast to %s." -#~ msgstr "You are sending messages too fast to %s." - -#~ msgid "You missed an IM from %s because it was too big." -#~ msgstr "You missed an IM from %s because it was too big." - -#~ msgid "You missed an IM from %s because it was sent too fast." -#~ msgstr "You missed an IM from %s because it was sent too fast." - -#~ msgid "Failure." -#~ msgstr "Failure." - -#~ msgid "Too many matches." -#~ msgstr "Too many matches." - -#~ msgid "Need more qualifiers." -#~ msgstr "Need more qualifiers." - -#~ msgid "Dir service temporarily unavailable." -#~ msgstr "Dir service temporarily unavailable." - -#~ msgid "Email lookup restricted." -#~ msgstr "Email lookup restricted." - -#~ msgid "Keyword ignored." -#~ msgstr "Keyword ignored." - -#~ msgid "No keywords." -#~ msgstr "No keywords." - -#~ msgid "User has no directory information." -#~ msgstr "User has no directory information." - -#~ msgid "Country not supported." -#~ msgstr "Country not supported." - -#~ msgid "Failure unknown: %s." -#~ msgstr "Failure unknown: %s." - -#~ msgid "Incorrect username or password." -#~ msgstr "Incorrect username or password." - -#~ msgid "The service is temporarily unavailable." -#~ msgstr "The service is temporarily unavailable." - -#~ msgid "Your warning level is currently too high to log in." -#~ msgstr "Your warning level is currently too high to log in." - -#~ msgid "" -#~ "You have been connecting and disconnecting too frequently. Wait ten " -#~ "minutes and try again. If you continue to try, you will need to wait " -#~ "even longer." -#~ msgstr "" -#~ "You have been connecting and disconnecting too frequently. Wait ten " -#~ "minutes and try again. If you continue to try, you will need to wait " -#~ "even longer." - -#~ msgid "An unknown signon error has occurred: %s." -#~ msgstr "An unknown signon error has occurred: %s." - -#~ msgid "An unknown error, %d, has occurred. Info: %s" -#~ msgstr "An unknown error, %d, has occurred. Info: %s" - -#~ msgid "Invalid Groupname" -#~ msgstr "Invalid Groupname" - -#~ msgid "Connection Closed" -#~ msgstr "Connection Closed" - -#~ msgid "Waiting for reply..." -#~ msgstr "Waiting for reply..." - -#~ msgid "TOC has come back from its pause. You may now send messages again." -#~ msgstr "TOC has come back from its pause. You may now send messages again." - -#~ msgid "Password Change Successful" -#~ msgstr "Password Change Successful" - -#~ msgid "Get Dir Info" -#~ msgstr "Get Dir Info" - -#~ msgid "Set Dir Info" -#~ msgstr "Set Dir Info" - -#~ msgid "Could not open %s for writing!" -#~ msgstr "Could not open %s for writing!" - -#~ msgid "File transfer failed; other side probably canceled." -#~ msgstr "File transfer failed; other side probably cancelled." - -#~ msgid "Could not connect for transfer." -#~ msgstr "Could not connect for transfer." - -#~ msgid "Could not write file header. The file will not be transferred." -#~ msgstr "Could not write file header. The file will not be transferred." - -#~ msgid "Save As..." -#~ msgstr "Save As..." - -#~ msgid "%s requests %s to accept %d file: %s (%.2f %s)%s%s" -#~ msgid_plural "%s requests %s to accept %d files: %s (%.2f %s)%s%s" -#~ msgstr[0] "%s requests %s to accept %d file: %s (%.2f %s)%s%s" -#~ msgstr[1] "%s requests %s to accept %d files: %s (%.2f %s)%s%s" - -#~ msgid "%s requests you to send them a file" -#~ msgstr "%s requests you to send them a file" - -#~ msgid "TOC Protocol Plugin" -#~ msgstr "TOC Protocol Plug-in" - -#~ msgid "User information for %s unavailable" -#~ msgstr "User information for %s unavailable" - -#~ msgid "%s Options" -#~ msgstr "%s Options" - -#~ msgid "Proxy Options" -#~ msgstr "Proxy Options" - -#~ msgid "By log size" -#~ msgstr "By log size" - -#~ msgid "_Open Link in Browser" -#~ msgstr "_Open Link in Browser" - -#~ msgid "ST_UN server:" -#~ msgstr "ST_UN Server:" - -#, fuzzy -#~ msgid "Smiley _Image" -#~ msgstr "Save Image" - -#, fuzzy -#~ msgid "Smiley S_hortcut" -#~ msgstr "Keyboard Shortcuts" - -#~ msgid "_Flash window when chat messages are received" -#~ msgstr "_Flash window when chat messages are received" - -#~ msgid "A group with the name already exists." -#~ msgstr "A group with that name already exists." - -#~ msgid "Primary Information" -#~ msgstr "Primary Information" - -#~ msgid "Blood Type" -#~ msgstr "Blood Group" - -#, fuzzy -#~ msgid "Update information" -#~ msgstr "Update my information" - -#, fuzzy -#~ msgid "Successed:" -#~ msgstr "Speed:" - -#~ msgid "" -#~ "Setting custom faces is not currently supported. Please choose an image " -#~ "from %s." -#~ msgstr "" -#~ "Setting custom faces is not currently supported. Please choose an image " -#~ "from %s." - -#~ msgid "Invalid QQ Face" -#~ msgstr "Invalid QQ Face" - -#~ msgid "You rejected %d's request" -#~ msgstr "You rejected %d's request" - -#~ msgid "Reject request" -#~ msgstr "Reject request" - -#~ msgid "Add buddy with auth request failed" -#~ msgstr "Add buddy with auth request failed" - -#, fuzzy -#~ msgid "Add into %d's buddy list" -#~ msgstr "Couldn't load buddy list" - -#, fuzzy -#~ msgid "QQ Number Error" -#~ msgstr "QQ Number" - -#~ msgid "Group Description" -#~ msgstr "Group Description" - -#~ msgid "Auth" -#~ msgstr "Auth" - -#~ msgid "Approve" -#~ msgstr "Approve" - -#, fuzzy -#~ msgid "Successed to join Qun %d, operated by admin %d" -#~ msgstr "Your request to join group %d has been rejected by admin %d" - -#, fuzzy -#~ msgid "[%d] removed from Qun \"%d\"" -#~ msgstr "You [%d] have left group \"%d\"" - -#, fuzzy -#~ msgid "[%d] added to Qun \"%d\"" -#~ msgstr "You [%d] have been added to group \"%d\"" - -#~ msgid "I am a member" -#~ msgstr "I am a member" - -#, fuzzy -#~ msgid "I am requesting" -#~ msgstr "Bad Request" - -#~ msgid "I am the admin" -#~ msgstr "I am the admin" - -#~ msgid "Unknown status" -#~ msgstr "Unknown status" - -#, fuzzy -#~ msgid "Remove from Qun" -#~ msgstr "Remove Group" - -#~ msgid "You entered a group ID outside the acceptable range" -#~ msgstr "You entered a group ID outside the acceptable range" - -#~ msgid "Are you sure you want to leave this Qun?" -#~ msgstr "Are you sure you want to leave this Qun?" - -#~ msgid "Do you want to approve the request?" -#~ msgstr "Do you want to approve the request?" - -#, fuzzy -#~ msgid "Change Qun member" -#~ msgstr "Telephone Number" - -#, fuzzy -#~ msgid "Change Qun information" -#~ msgstr "Channel Information" - -#~ msgid "System Message" -#~ msgstr "System Message" - -#~ msgid "Last Login IP: %s
\n" -#~ msgstr "Last Login IP: %s
\n" - -#~ msgid "Last Login Time: %s\n" -#~ msgstr "Last Login Time: %s\n" - -#~ msgid "Set My Information" -#~ msgstr "Set My Information" - -#, fuzzy -#~ msgid "Leave the QQ Qun" -#~ msgstr "Leave this QQ Qun" - -#~ msgid "Block this buddy" -#~ msgstr "Block this buddy" - -#, fuzzy -#~ msgid "Error password: %s" -#~ msgstr "Error changing password" - -#, fuzzy -#~ msgid "Failed to connect all servers" -#~ msgstr "Failed to connect to server." - -#, fuzzy -#~ msgid "Connecting server %s, retries %d" -#~ msgstr "" -#~ "Connection error from %s server:\n" -#~ "%s" - -#, fuzzy -#~ msgid "Do you approve the requestion?" -#~ msgstr "Do you want to approve the request?" - -#, fuzzy -#~ msgid "Do you add the buddy?" -#~ msgstr "Do you want to add this buddy?" - -#, fuzzy -#~ msgid "%s added you [%s] to buddy list" -#~ msgstr "%s has added you [%s] to his or her buddy list" - -#, fuzzy -#~ msgid "QQ Budy" -#~ msgstr "Buddy" - -#~ msgid "%s wants to add you [%s] as a friend" -#~ msgstr "%s wants to add you [%s] as a friend" - -#, fuzzy -#~ msgid "%s is not in buddy list" -#~ msgstr "%s is not in your buddy list" - -#, fuzzy -#~ msgid "Would you add?" -#~ msgstr "Would you like to add this person?" - -#, fuzzy -#~ msgid "QQ Server Notice" -#~ msgstr "Server port" - -#, fuzzy -#~ msgid "Network disconnected" -#~ msgstr "Remote disconnected" - -#~ msgid "developer" -#~ msgstr "developer" - -#~ msgid "XMPP developer" -#~ msgstr "XMPP developer" - -#~ msgid "Artists" -#~ msgstr "Artists" - -#~ msgid "" -#~ "You are using %s version %s. The current version is %s. You can get it " -#~ "from %s


" -#~ msgstr "" -#~ "You are using %s version %s. The current version is %s. You can get it " -#~ "from %s
" - -#~ msgid "ChangeLog:
%s" -#~ msgstr "ChangeLog:
%s" - -#~ msgid "EOF while reading from resolver process" -#~ msgstr "EOF while reading from resolver process" - -#~ msgid "Error setting socket options" -#~ msgstr "Error setting socket options" - -#~ msgid "" -#~ "Windows Live ID authentication: cannot find authenticate token in server " -#~ "response" -#~ msgstr "" -#~ "Windows Live ID authentication: cannot find authenticate token in server " -#~ "response" - -#~ msgid "Windows Live ID authentication Failed" -#~ msgstr "Windows Live ID authentication failed" - -#~ msgid "Too evil (sender)" -#~ msgstr "Too evil (sender)" - -#~ msgid "Too evil (receiver)" -#~ msgstr "Too evil (receiver)" - -#~ msgid "Available Message" -#~ msgstr "Available Message" - -#~ msgid "Away Message" -#~ msgstr "Away Message" - -#~ msgid "(retrieving)" -#~ msgstr " (retrieving)" - -#~ msgid "Your information has been updated" -#~ msgstr "Your information has been updated" - -#~ msgid "Input your reason:" -#~ msgstr "Enter your reason:" - -#~ msgid "You have successfully removed a buddy" -#~ msgstr "You have successfully removed a buddy" - -#~ msgid "You have successfully removed yourself from your friend's buddy list" -#~ msgstr "" -#~ "You have successfully removed yourself from your friend's buddy list" - -#~ msgid "You have added %d to buddy list" -#~ msgstr "You have added %d to buddy list" - -#~ msgid "Invalid QQid" -#~ msgstr "Invalid QQid" - -#~ msgid "Please enter external group ID" -#~ msgstr "Please enter external group ID" - -#~ msgid "Reason: %s" -#~ msgstr "Reason: %s" - -#~ msgid "Your request to join group %d has been approved by admin %d" -#~ msgstr "Your request to join group %d has been approved by admin %d" - -#~ msgid "I am applying to join" -#~ msgstr "I am applying to join" - -#~ msgid "You have successfully left the group" -#~ msgstr "You have successfully left the group" - -#~ msgid "QQ Group Auth" -#~ msgstr "QQ Group Auth" - -#~ msgid "Your authorization request has been accepted by the QQ server" -#~ msgstr "Your authorisation request has been accepted by the QQ server" - -#~ msgid "Code [0x%02X]: %s" -#~ msgstr "Code [0x%02X]: %s" - -#~ msgid "Group Operation Error" -#~ msgstr "Group Operation Error" - -#~ msgid "Enter your reason:" -#~ msgstr "Enter your reason:" - -#~ msgid "Unable to login. Check debug log." -#~ msgstr "Unable to login. Check debug log" - -#~ msgid "TCP Address" -#~ msgstr "TCP Address" - -#~ msgid "UDP Address" -#~ msgstr "UDP Address" - -#~ msgid "Show Login Information" -#~ msgstr "Show Login Information" - -#~ msgid "Login failed, no reply" -#~ msgstr "Login failed; no reply" - -#~ msgid "User %s rejected your request" -#~ msgstr "User %s rejected your request" - -#~ msgid "User %s approved your request" -#~ msgstr "User %s approved your request" diff -r 1b6ac48c5ffa -r b960be0f3423 po/he.po --- a/po/he.po Tue Jul 28 05:47:09 2009 +0000 +++ b/po/he.po Tue Jul 28 05:49:14 2009 +0000 @@ -1,5 +1,5 @@ # Pidgin Hebrew translation -# Copyright (C) 2005-2007, Shalom Craimer +# Copyright (C) 2005-2009, Shalom Craimer # Copyright (C) 2003, Pavel Bibergal cyberkm@barak-online.net # # This file is distributed under the same license as the Pidgin package. @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: he\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-06 15:04-0700\n" -"PO-Revision-Date: 2008-08-27 21:03+0200\n" +"POT-Creation-Date: 2009-07-27 19:57-0700\n" +"PO-Revision-Date: 2009-07-27 16:21+0200\n" "Last-Translator: Shalom Craimer \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" @@ -26,7 +26,7 @@ msgid "%s. Try `%s -h' for more information.\n" msgstr "%s. יש לנסות את '%s –h' למידע נוסף.\n" -#, fuzzy, c-format +#, c-format msgid "" "%s\n" "Usage: %s [OPTION]...\n" @@ -41,7 +41,7 @@ "שימוש: %s [אפשרות]...\n" "\n" " -c, --config=ספריה השתמש בספרייה לקבצי הגדרות\n" -" -d, --debug שלח הודעות ניפוי באגים ל-stdout\n" +" -d, --debug שלח הודעות ניפוי באגים ל-stderr\n" " -h, --help הצג הודעה זו וצא\n" " -n, --nologin אל תתחבר אוטומטית\n" " -v, --version הצג את הגירסא של התוכנה וצא\n" @@ -70,7 +70,6 @@ msgid "Remember password" msgstr "זכור סיסמה" -#, fuzzy msgid "There are no protocol plugins installed." msgstr "לא מותקנים תוספים לפרוטוקולים." @@ -843,12 +842,11 @@ msgid "System Log" msgstr "דו\"ח מערכת" -#, fuzzy msgid "Calling ... " -msgstr "מחשב..." +msgstr "מתקשר ..." msgid "Hangup" -msgstr "" +msgstr "התנתק" #. Number of actions msgid "Accept" @@ -858,25 +856,24 @@ msgstr "דחה" msgid "Call in progress." -msgstr "" +msgstr "באמצע שיחה." msgid "The call has been terminated." -msgstr "" +msgstr "השיחה נותקה." #, c-format msgid "%s wishes to start an audio session with you." -msgstr "" +msgstr "נתקבלה בקשה מאת %s לבצע התקשרות קולית." #, c-format msgid "%s is trying to start an unsupported media session type with you." -msgstr "" - -#, fuzzy +msgstr "נקבלה בקשה מאת %s לביצוע התקשרות שאינה נתמכת." + msgid "You have rejected the call." -msgstr "עזבת את הערוץ%s%s" +msgstr "דחית את השיחה." msgid "call: Make an audio call." -msgstr "" +msgstr "call: בצע התקשרות קולית." msgid "Emails" msgstr "דוא\"ל" @@ -1500,10 +1497,10 @@ msgstr "ללא קיבוץ" msgid "Nested Subgroup" -msgstr "" +msgstr "קבוצה בתוך קבוצה" msgid "Nested Grouping (experimental)" -msgstr "" +msgstr "קבוצות בתוך קבוצות (נסיוני)" msgid "Provides alternate buddylist grouping options." msgstr "מאפשר אפשרויות נוספות לחלוקת רשימת אנשי הקשר לקבוצות." @@ -1526,22 +1523,23 @@ "\n" "Fetching TinyURL..." msgstr "" +"\n" +"מביא TinyURL..." msgid "Only create TinyURL for urls of this length or greater" -msgstr "" +msgstr "רק ייצר TinyURL עבור כתובות באורך הזה ומעלה" msgid "TinyURL (or other) address prefix" -msgstr "" - -#, fuzzy +msgstr "ראשית כתובת עבור TinyURL (או אחר)" + msgid "TinyURL" -msgstr "כתובת השיר" +msgstr "TinyURL" msgid "TinyURL plugin" -msgstr "" +msgstr "תוסף TinyURL" msgid "When receiving a message with URL(s), TinyURL for easier copying" -msgstr "" +msgstr "בעת קבלת הודעה עם כתובת, השתמש ב-TinyURL להעתקה קלה יותר" msgid "accounts" msgstr "חשבונות" @@ -1655,6 +1653,7 @@ msgstr "" "התעודה שהוצגה על ידי \"%s\" נחתמה על ידי עצמה. לא ניתן לבצע בדיקה אוטומטית." +#. FIXME 2.6.1 #, c-format msgid "The certificate chain presented for %s is not valid." msgstr "שרשרת רשויות הנפקת התעודה עבור %s אינה תקפה." @@ -1664,6 +1663,7 @@ #. stifle it. #. TODO: Probably wrong. #. TODO: Probably wrong +#. TODO: Probably wrong. msgid "SSL Certificate Error" msgstr "שגיאת תעודת SSL" @@ -1741,7 +1741,6 @@ msgstr "+++ %s התנתק" #. Unknown error -#. Unknown error! msgid "Unknown error" msgstr "שגיאה לא מוכרת" @@ -1788,9 +1787,8 @@ msgid "%s left the room (%s)." msgstr "%s עזב את החדר (%s)." -#, fuzzy msgid "Invite to chat" -msgstr "הזמן לועידה" +msgstr "הזמן לצ'אט" #. Put our happy label in it. msgid "" @@ -1844,7 +1842,7 @@ #, c-format msgid "Resolver process exited without answering our request" -msgstr "" +msgstr "שירות תרגום הכתובת סיים ללא תשובה לבקשתנו" #, c-format msgid "Thread creation failure: %s" @@ -1929,6 +1927,10 @@ msgstr "מתחיל את ההעברה של %s מ-%s" #, c-format +msgid "Transfer of file %s complete" +msgstr "העברה של הקובץ %s הושלמה" + +#, c-format msgid "Transfer of file %s complete" msgstr "העברה של קובץ %s הושלמה" @@ -2123,9 +2125,8 @@ msgid "(%s) %s : %s\n" msgstr "(%s) %s <מענה-אוטומטי>: %s\n" -#, fuzzy msgid "Error creating conference." -msgstr "שגיאה ביצירת החיבור" +msgstr "שגיאה ביצירת שיחת הועידה." #, c-format msgid "You are using %s, but this plugin requires %s." @@ -2517,7 +2518,6 @@ msgstr "כלול יומנים של תוכנות צ'אט אחרות בצופה-היומנים." #. * description -#, fuzzy msgid "" "When viewing logs, this plugin will include logs from other IM clients. " "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n" @@ -2526,7 +2526,7 @@ "at your own risk!" msgstr "" "בעת צפייה ביומני-שיחה, תוסף זה יכלול יומנים מתוכנות צ'אט אחרות. כרגע, זה " -"כולל Adium, MSN Messenger, Trillian.\n" +"כולל Adium, MSN Messenger, aMSN, Trillian.\n" "\n" "אזהרה: תוסף זה עדיין בשלבי פיתוח מוקדמים וייתכן ויקרוס לעיתים קרובות. יש " "להשתמש בו על חשבון סיכונך האישי בלבד!" @@ -2574,7 +2574,6 @@ msgid "Save messages sent to an offline user as pounce." msgstr "שמור הודעות שנשלחו למשתמש לא-מחובר בתור תגובת-פעילות." -#, fuzzy msgid "" "The rest of the messages will be saved as pounces. You can edit/delete the " "pounce from the `Buddy Pounce' dialog." @@ -2608,9 +2607,8 @@ msgid "Do not ask. Always save in pounce." msgstr "אל תשאל. תמיד שמור בתגובת פעילות." -#, fuzzy msgid "One Time Password" -msgstr "הזן סיסמא" +msgstr "One Time Password" #. *< type #. *< ui_requirement @@ -2619,13 +2617,13 @@ #. *< priority #. *< id msgid "One Time Password Support" -msgstr "" +msgstr "תמיכת One Time Password" #. *< name #. *< version #. * summary msgid "Enforce that passwords are used only once." -msgstr "" +msgstr "אכוף שימוש בסיסמאות חד-פעמיות" #. * description msgid "" @@ -2633,6 +2631,9 @@ "are only used in a single successful connection.\n" "Note: The account password must not be saved for this to work." msgstr "" +"מאפשר לך לאכוף לכל חשבון משתמש שסיסמאות שאינן נשמרות ישומשו רק לחיבור יחיד " +"שמצליח.\n" +"הערה: על מנת שזה יעבוד אין לשמור את סיסמת החשבון." #. *< type #. *< ui_requirement @@ -2826,17 +2827,15 @@ "לא היה ניתן לזהות ActiveTCL מתוקן. אם ברצונך להשתמש בתוספי TCL, יש להתקין " "ActiveTCL מתוך http://www.activestate.com\n" -#, fuzzy msgid "" "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin." "im/BonjourWindows for more information." msgstr "" -"חבילת בונג'ור של אפל עבור חלונות לא נמצאה, ראה את השו\"ת באתר: http://d." +"חבילת \"בונג'ור\" של אפל עבור חלונות לא נמצאה, ראה את השו\"ת באתר: http://d." "pidgin.im/BonjourWindows למידע נוסף." -#, fuzzy msgid "Unable to listen for incoming IM connections" -msgstr "לא ניתן להקשיב לתקשורת-הודעות נכנסת.\n" +msgstr "לא ניתן להקשיב לחיבורי הודעות נכנסת" msgid "" "Unable to establish connection with the local mDNS server. Is it running?" @@ -2874,9 +2873,8 @@ msgstr "אדם סגול" #. Creating the options for the protocol -#, fuzzy msgid "Local Port" -msgstr "מיקום" +msgstr "חיבור מקומי" msgid "Bonjour" msgstr "Bonjour" @@ -2888,21 +2886,17 @@ msgid "Unable to send the message, the conversation couldn't be started." msgstr "לא ניתן לשלוח את ההודעה, לא היה אפשר להתחיל את השיחה." -#, fuzzy, c-format +#, c-format msgid "Unable to create socket: %s" -msgstr "" -"אין אפשרות ליצור שקע:\n" -"%s" - -#, fuzzy, c-format +msgstr "אין אפשרות ליצור שקע: %s" + +#, c-format msgid "Unable to bind socket to port: %s" -msgstr "לא ניתן לקבע את השקע ליציאה" - -#, fuzzy, c-format +msgstr "לא ניתן לקבע את השקע ליציאה: %s" + +#, c-format msgid "Unable to listen on socket: %s" -msgstr "" -"אין אפשרות ליצור שקע:\n" -"%s" +msgstr "אין אפשרות ליצור שקע: %s" msgid "Error communicating with local mDNSResponder." msgstr "שגיאה בתקשורת עם mDNSResponder מקומי." @@ -2949,17 +2943,14 @@ msgid "Load buddylist from file..." msgstr "טען את רשימת אנשי הקשר מקובץ..." -#, fuzzy msgid "You must fill in all registration fields" -msgstr "יש למלא את שדות ההרשמה." - -#, fuzzy +msgstr "יש למלא את כל שדות ההרשמה" + msgid "Passwords do not match" -msgstr "הסיסמאות אינן תואמות." - -#, fuzzy +msgstr "הסיסמאות אינן תואמות" + msgid "Unable to register new account. An unknown error occurred." -msgstr "לא ניתן לבצע הרשמה לחשבון חדש. אירעה שגיאה.\n" +msgstr "לא ניתן לבצע הרשמה לחשבון חדש. אירעה שגיאה לא-מוכרת." msgid "New Gadu-Gadu Account Registered" msgstr "הושלמה ההרשמה לחשבון החדש של Gadu-Gadu" @@ -2974,11 +2965,10 @@ msgstr "סיסמא (שנית)" msgid "Enter captcha text" -msgstr "" - -#, fuzzy +msgstr "יש להזין את טקסט ב-caphtca" + msgid "Captcha" -msgstr "שמור תמונה" +msgstr "Captcha" msgid "Register New Gadu-Gadu Account" msgstr "בצע רישום לחשבון חדש של Gadu-Gadu" @@ -3117,9 +3107,9 @@ msgid "Chat _name:" msgstr "שם _צ'אט:" -#, fuzzy, c-format +#, c-format msgid "Unable to resolve hostname '%s': %s" -msgstr "לא ניתן להתחבר לשרת" +msgstr "לא ניתן לתרגם לכתובת את שם השרת '%s': %s" #. 1. connect to server #. connect to the server @@ -3132,9 +3122,8 @@ msgid "This chat name is already in use" msgstr "שם הצ'אט הזה כבר בשימוש" -#, fuzzy msgid "Not connected to the server" -msgstr "לא מחובר לשרת." +msgstr "לא מחובר אל השרת" msgid "Find buddies..." msgstr "חפש אנשי קשר..." @@ -3175,9 +3164,8 @@ msgid "Gadu-Gadu User" msgstr "משתמש Gadu-Gadu" -#, fuzzy msgid "GG server" -msgstr "קבע את המידע על המשתמש..." +msgstr "שרת GG" #, c-format msgid "Unknown command: %s" @@ -3193,7 +3181,6 @@ msgid "File Transfer Failed" msgstr "העברת הקובץ נכשלה" -#, fuzzy msgid "Unable to open a listening port." msgstr "לא ניתן לפתוח שקע-קשב." @@ -3217,11 +3204,9 @@ #. #. TODO: what to do here - do we really have to disconnect? #. TODO: do we really want to disconnect on a failure to write? -#, fuzzy, c-format +#, c-format msgid "Lost connection with server: %s" -msgstr "" -"אבדה התקשורת עם השרת:\n" -"%s" +msgstr "אבדה התקשורת עם השרת: %s" msgid "View MOTD" msgstr "הצג את הודעת היום" @@ -3232,9 +3217,8 @@ msgid "_Password:" msgstr "_סיסמא:" -#, fuzzy msgid "IRC nick and server may not contain whitespace" -msgstr "אסור לשמות ב-IRC להכיל רווחים" +msgstr "אסור לשמות ולשרתים ב-IRC להכיל רווחים" msgid "SSL support unavailable" msgstr "אין תמיכה ב-SSL." @@ -3243,13 +3227,13 @@ msgstr "לא ניתן להתחבר" #. this is a regular connect, error out -#, fuzzy, c-format +#, c-format msgid "Unable to connect: %s" -msgstr "לא ניתן להתחבר אל %s" - -#, fuzzy, c-format +msgstr "לא ניתן להתחבר: %s" + +#, c-format msgid "Server closed the connection" -msgstr "השרת סגר את החיבור." +msgstr "השרת סגר את החיבור" msgid "Users" msgstr "משתמשים" @@ -3429,13 +3413,12 @@ #. We only want to do the following dance if the connection #. has not been successfully completed. If it has, just #. notify the user that their /nick command didn't go. -#, fuzzy, c-format +#, c-format msgid "The nickname \"%s\" is already being used." -msgstr "שם הצ'אט הזה כבר בשימוש" - -#, fuzzy +msgstr "הכינו \"%s\" כבר בשימוש." + msgid "Nickname in use" -msgstr "כינוי" +msgstr "שם-הכינוי בשימוש" msgid "Cannot change nick" msgstr "כשל בשינוי הכינוי" @@ -3667,11 +3650,9 @@ msgid "execute" msgstr "הפעל" -#, fuzzy msgid "Server requires TLS/SSL, but no TLS/SSL support was found." -msgstr "השרת דורש TLS/SSL להתחברות. לא נמצאה תמיכה ל-TLS/SSL." - -#, fuzzy +msgstr "השרת דורש TLS/SSL להתחברות, אך לא נמצאה תמיכה ל-TLS/SSL." + msgid "You require encryption, but no TLS/SSL support was found." msgstr "הגדרת דרישה להצפנה, אך לא נמצאה תמיכה ב-TLS/SSL." @@ -3687,13 +3668,11 @@ msgid "Plaintext Authentication" msgstr "אימות לא מוצפן" -#, fuzzy msgid "SASL authentication failed" -msgstr "האימות נכשל" - -#, fuzzy +msgstr "אימות SASL נכשל" + msgid "Invalid response from server" -msgstr "שגיעה בתגובה מהשרת" +msgstr "תגובה לא תקפה מהשרת" msgid "Server does not use any supported authentication method" msgstr "השרת לא תומך באימות באף תצורה" @@ -3704,36 +3683,28 @@ msgid "Invalid challenge from server" msgstr "תשובת אימות לא תקפה מהשרת" -#, fuzzy, c-format +#, c-format msgid "SASL error: %s" -msgstr "שגיאת SASL" +msgstr "שגיאת SASL: %s" msgid "The BOSH connection manager terminated your session." -msgstr "" - -#, fuzzy +msgstr "מנהל התקשורת BOSH ניתק את חיבורך." + msgid "No session ID given" -msgstr "לא ניתנה סיבה." - -#, fuzzy +msgstr "לא ניתן מזהה לחיבור" + msgid "Unsupported version of BOSH protocol" -msgstr "גירסא ללא תמיכה" - -#, fuzzy +msgstr "גירסת פרוטוקול BOSH שאינה נתמכת" + msgid "Unable to establish a connection with the server" -msgstr "" -"לא ניתן ליצור חיבור עם השרת:\n" -"%s" - -#, fuzzy, c-format +msgstr "לא ניתן ליצור חיבור עם השרת" + +#, c-format msgid "Unable to establish a connection with the server: %s" -msgstr "" -"לא ניתן ליצור חיבור עם השרת:\n" -"%s" - -#, fuzzy +msgstr "לא ניתן ליצור חיבור עם השרת: %s" + msgid "Unable to establish SSL connection" -msgstr "לא ניתן לאתחל חיבור" +msgstr "לא ניתן ליצור חיבור SSL" msgid "Full Name" msgstr "שם מלא" @@ -3799,9 +3770,8 @@ msgid "Operating System" msgstr "מערכת הפעלה" -#, fuzzy msgid "Local Time" -msgstr "קובץ מקומי:" +msgstr "שעה מקומית" msgid "Priority" msgstr "עדיפות" @@ -3811,11 +3781,10 @@ #, c-format msgid "%s ago" -msgstr "" - -#, fuzzy +msgstr "לפני %s" + msgid "Logged Off" -msgstr "מחובר" +msgstr "התנתק/ה" msgid "Middle Name" msgstr "שם אמצעי" @@ -3983,26 +3952,22 @@ msgid "Find Rooms" msgstr "חפש חדרים" -#, fuzzy msgid "Affiliations:" -msgstr "תיאור:" - -#, fuzzy +msgstr "שיוכים:" + msgid "No users found" -msgstr "לא נמצאו משתמשים תואמים" - -#, fuzzy +msgstr "לא נמצאו משתמשים" + msgid "Roles:" -msgstr "תפקיד" - -#, fuzzy +msgstr "תפקידים:" + msgid "Ping timed out" msgstr "פינג לא חזר בזמן" msgid "" "Unable to find alternative XMPP connection methods after failing to connect " "directly." -msgstr "" +msgstr "לא יכול למצוא צורות חיבור XMPP חלופיות אחרי כישלון בחיבור ישירות." msgid "Invalid XMPP ID" msgstr "מזהה XMPP לא תקין" @@ -4010,9 +3975,8 @@ msgid "Invalid XMPP ID. Domain must be set." msgstr "מזהה XMPP שגוי. יש להגדיר את הדומיין." -#, fuzzy msgid "Malformed BOSH URL" -msgstr "כשל בהתחברות לשרת" +msgstr "כתובת BOTH משובשת" #, c-format msgid "Registration of %s@%s successful" @@ -4080,10 +4044,6 @@ msgid "Change Registration" msgstr "שנה רישום" -#, fuzzy -msgid "Malformed BOSH Connect Server" -msgstr "כשל בהתחברות לשרת" - msgid "Error unregistering account" msgstr "שגיאה ברישום חשבון" @@ -4103,7 +4063,7 @@ msgstr "מאתחל את הזרם מחדש" msgid "Server doesn't support blocking" -msgstr "" +msgstr "השרת לא תומך בחסימה" msgid "Not Authorized" msgstr "לא מורשה" @@ -4369,19 +4329,19 @@ msgid "Unable to ping user %s" msgstr "לא ניתן לעשות פינג למשתמש %s" -#, fuzzy, c-format +#, c-format msgid "Unable to buzz, because there is nothing known about %s." -msgstr "לא ניתן לזמזם, מכיוון שלא ידוע כלום על המשתמש %s." - -#, fuzzy, c-format +msgstr "לא ניתן לזמזם, מכיוון שלא ידוע כלום על %s." + +#, c-format msgid "Unable to buzz, because %s might be offline." -msgstr "לא ניתן לזמזם, מכיוון שייתכן והמשתמש %s לא מחובר." - -#, fuzzy, c-format +msgstr "לא ניתן לזמזם, מכיוון שייתכן כי%s לא מחובר." + +#, c-format msgid "" "Unable to buzz, because %s does not support it or does not wish to receive " "buzzes now." -msgstr "לא ניתן לזמזם, כי המשתמש %s לא תומך בזה." +msgstr "לא ניתן לזמזם, כי %s לא תומך בזה או לא רוצה לקבל זימזומים כרגע." #, c-format msgid "Buzzing %s..." @@ -4396,34 +4356,32 @@ msgid "%s has buzzed you!" msgstr "%s זימזם אותך!" -#, fuzzy, c-format +#, c-format msgid "Unable to initiate media with %s: invalid JID" -msgstr "לא ניתן לשלוח את הקובץ ל %s, JID לא-תקף" - -#, fuzzy, c-format +msgstr "לא ניתן ליזום מדיה עם %s: JID לא תקף" + +#, c-format msgid "Unable to initiate media with %s: user is not online" -msgstr "לא ניתן לשלוח את הקובץ אל %s, המשתמש לא מחובר" - -#, fuzzy, c-format +msgstr "לא ניתן ליזום מדיה עם %s: המשתמש לא מחובר" + +#, c-format msgid "Unable to initiate media with %s: not subscribed to user presence" -msgstr "לא ניתן לשלוח את הקובץ אל %s, אינך רשומ/ה להודעת קיום המשתמש" - -#, fuzzy +msgstr "לא ניתן ליזום מדיה עם %s: לא רשום להודעות-נוכחות המשתמש" + msgid "Media Initiation Failed" -msgstr "הרישום נכשל" - -#, fuzzy, c-format +msgstr "ייזום מדיה נכשל" + +#, c-format msgid "" "Please select the resource of %s with which you would like to start a media " "session." -msgstr "יש לבחור את המשאב של %s אליו ברצונך לשלוח קובץ" +msgstr "יש לבחור את המשאב של %s איתו ברצונך להתחיל תקשורת מדיה." msgid "Select a Resource" msgstr "יש לבחור משאב" -#, fuzzy msgid "Initiate Media" -msgstr "יז_ום שיחה" +msgstr "יזום מדיה" msgid "config: Configure a chat room." msgstr "config: קבע הגדרות חדר צ'אט." @@ -4443,21 +4401,19 @@ msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <משתמש> [סיבה]: חסום משתמש מן החדר." -#, fuzzy msgid "" "affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " "the users with an affiliation or set users' affiliation with the room." msgstr "" -"affiliate <משתמש> <בעלים|מפעיל|חבר|בגלות|ללא>: קביעת ייחוס משתמש " -"עם החדר." - -#, fuzzy +"affiliate <משתמש> <בעלים|מפעיל|חבר|בגלות|ללא> [שם1][שם2]...: " +"שלוף או קבע את ייחוסם של משתמשים עם החדר." + msgid "" "role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " "users with an role or set users' role with the room." msgstr "" -"role <משתמש> <בעלים|מפעיל|חבר|בגלות|ללא>: קביעת ייחוס משתמש עם " -"החדר." +"role <משתמש> <בעלים|מפעיל|חבר|בגלות|ללא> [שם1][שם2]...: שלוף או " +"קבע את ייחוסם של משתמשים עם החדר." msgid "invite <user> [message]: Invite a user to the room." msgstr "invite <משתמש> [חדר]: הזמן משתמש לחדר." @@ -4517,13 +4473,12 @@ msgstr "שרתי תיווך להעברת קבצים" msgid "BOSH URL" -msgstr "" +msgstr "כתובת BOSH" #. this should probably be part of global smiley theme settings later on, #. shared with MSN -#, fuzzy msgid "Show Custom Smileys" -msgstr "הצג סמייליים שלי" +msgstr "הצג חייכנים שלי" #, c-format msgid "%s has left the conversation." @@ -4581,32 +4536,28 @@ msgid "_Accept Defaults" msgstr "קבל את ברירות המחדל" -#, fuzzy msgid "No reason" -msgstr "לא ניתנה סיבה." - -#, fuzzy, c-format +msgstr "לא ניתנה סיבה" + +#, c-format msgid "You have been kicked: (%s)" -msgstr "נבעטת ע\"י: %s (%s)" - -#, fuzzy, c-format +msgstr "נבעטת: (%s)" + +#, c-format msgid "Kicked (%s)" -msgstr "נבעט ע\"י %s (%s)" - -#, fuzzy +msgstr "נבעט (%s)" + msgid "An error occurred on the in-band bytestream transfer\n" -msgstr "ארעה שגיאה בעת פתיחת הקובץ." - -#, fuzzy +msgstr "ארעה שגיאה בעת ההעברה בזרם בתווך\n" + msgid "Transfer was closed." -msgstr "העברת הקובץ נכשלה" - -#, fuzzy +msgstr "העברת הקובץ נסגרה." + msgid "Failed to open the file" -msgstr "כישלון בעת פתיחת הקובץ '%s': %s" +msgstr "כישלון בעת פתיחת הקובץ" msgid "Failed to open in-band bytestream" -msgstr "" +msgstr "כישלון בפתיחת תזרים מידע בתווך" #, c-format msgid "Unable to send file to %s, user does not support file transfers" @@ -4672,11 +4623,10 @@ msgstr "אין אפשרות להוסיף \"%s\"." msgid "Buddy Add error" -msgstr "" - -#, fuzzy +msgstr "שגיאת הוספת חבר" + msgid "The username specified does not exist." -msgstr "שם המשתמש שהוזן אינו חוקי." +msgstr "שם המשתמש שהוזן אינו קיים." #, c-format msgid "Buddy list synchronization issue in %s (%s)" @@ -4904,9 +4854,8 @@ msgid "Passport account not yet verified" msgstr "חשבון הפספורט לא אומת עדיין" -#, fuzzy msgid "Passport account suspended" -msgstr "חשבון הפספורט לא אומת עדיין" +msgstr "חשבון הפספורט מושעה" #, c-format msgid "Bad ticket" @@ -4920,17 +4869,31 @@ msgid "MSN Error: %s\n" msgstr "שגיאת MSN: %s\n" -#, fuzzy msgid "Other Contacts" -msgstr "איש קשר מועדף" - -#, fuzzy +msgstr "אנשי-קשר אחרים" + msgid "Non-IM Contacts" -msgstr "הסר איש קשר" - -#, fuzzy, c-format +msgstr "אנשי-קשר שאינם להודעות" + +#, c-format +msgid "%s sent a wink. Click here to play it" +msgstr "נשלח קריצה מאת %s. יש ללחוץ כאן להפעלתה" + +#, c-format +msgid "%s sent a wink, but it could not be saved" +msgstr "נשלח קריצה מאת %s, אבל לא ניתן היה לשמור אותה" + +#, c-format +msgid "%s sent a voice clip. Click here to play it" +msgstr "נשלח קטע קולי מאת %s. יש ללחוץ כאן להשמיעה" + +#, c-format +msgid "%s sent a voice clip, but it could not be saved" +msgstr "נשלח אליך קטע קולי מאת %s, אבל היה ניתן לשמור אותו" + +#, c-format msgid "%s sent you a voice chat invite, which is not yet supported." -msgstr "%s שלח לך" +msgstr "נשלחה אליך הזמנה לשיחה קולית מאת %s, אשר אינה נתמכת כעת." msgid "Nudge" msgstr "נו כבר!" @@ -5002,11 +4965,10 @@ msgstr "דף" msgid "Playing a game" -msgstr "" - -#, fuzzy +msgstr "באמצע משחק" + msgid "Working" -msgstr "בעבודה" +msgstr "עובד" msgid "Has you" msgstr "יש אותך" @@ -5044,13 +5006,11 @@ msgid "Album" msgstr "אלבום" -#, fuzzy msgid "Game Title" -msgstr "שם השיר" - -#, fuzzy +msgstr "שם המשחק" + msgid "Office Title" -msgstr "שם השיר" +msgstr "שם המשרד" msgid "Set Friendly Name..." msgstr "קבע/י שם ידידותי..." @@ -5085,6 +5045,29 @@ msgid "SSL support is needed for MSN. Please install a supported SSL library." msgstr "נדרשת תמיכה ב-SSL עבור MSN. נא להתקין ספריית SSL נתמכת." +#, c-format +msgid "" +"Unable to add the buddy %s because the username is invalid. Usernames must " +"be a valid email address." +msgstr "" +"לא ניתן להוסיף את החבר %s מכיוון ששם המשתמש אינו חוקי. שמות משתמשים מוכרחים " +"להיות כתובות אימייל תקפות." + +msgid "Unable to Add" +msgstr "לא ניתן להוסיף" + +msgid "Authorization Request Message:" +msgstr "הודעת בקשה להרשאה:" + +msgid "Please authorize me!" +msgstr "בבקשה, אני רוצה הרשאה!" + +#. * +#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. +#. +msgid "_OK" +msgstr "אישור" + msgid "Error retrieving profile" msgstr "שגיאה בשליפת הפרופיל" @@ -5237,9 +5220,8 @@ "does not exist." msgstr "לא יכול למצוא מידע בתוך פרופיל המשתמש. ככל הנראה המשתמש לא קיים." -#, fuzzy msgid "View web profile" -msgstr "החבא כאשר לא-מקוון" +msgstr "הצג פרופיל ווב" #. *< type #. *< ui_requirement @@ -5275,20 +5257,20 @@ msgid "%s just sent you a Nudge!" msgstr "%s שלח לך הרגע דחיפה קלה!" -#, fuzzy, c-format +#, c-format msgid "Unknown error (%d): %s" -msgstr "שגיאה לא מוכרת (%d)" +msgstr "שגיאה לא מוכרת (%d): %s" msgid "Unable to add user" msgstr "לא ניתן להוסיף משתמש" +#. Unknown error! #, c-format msgid "Unknown error (%d)" msgstr "שגיאה לא מוכרת (%d)" -#, fuzzy msgid "The following users are missing from your addressbook" -msgstr "להלן תוצאות החיפוש שלך" +msgstr "המשתמשים להלן אינם נמצאים בפנקס הכתובות שלך" msgid "Mobile message was not sent because it was too long." msgstr "הודעת לנייד לא נשלחה מכיוון שהיא ארוכה מדי." @@ -5349,24 +5331,20 @@ "שגיאת תקשורת משרת %s:\n" "%s" -#, fuzzy msgid "Our protocol is not supported by the server" -msgstr "הפרוטוקול שלנו לא נתמך ע\"י השרת." - -#, fuzzy +msgstr "הפרוטוקול שלנו לא נתמך ע\"י השרת" + msgid "Error parsing HTTP" -msgstr "שגיאה בפיענוח HTTP." - -#, fuzzy +msgstr "שגיאה בפיענוח HTTP" + msgid "You have signed on from another location" -msgstr "אתה התחברת ממיקום נוסף." +msgstr "אתה התחברת ממיקום נוסף" msgid "The MSN servers are temporarily unavailable. Please wait and try again." msgstr "שרתי ה-MSN לא זמינים כרגע. אנא נסו מאוחר יותר." -#, fuzzy msgid "The MSN servers are going down temporarily" -msgstr "שרתי ב-MSN זמנית מפסיקים לפעול." +msgstr "שרתי ה-MSN זמנית מפסיקים לפעול." #, c-format msgid "Unable to authenticate: %s" @@ -5394,9 +5372,10 @@ msgid "Retrieving buddy list" msgstr "מקבל רשימת אנשי הקשר" -#, fuzzy, c-format +#, c-format msgid "%s requests to view your webcam, but this request is not yet supported." -msgstr "%s שלח לך" +msgstr "" +"נשלחה בקשה מאת %s לצפות במצלמת האינטרנט שלך, אבל בקשה זו אינה נתמכת כרגע." #, c-format msgid "%s has sent you a webcam invite, which is not yet supported." @@ -5440,13 +5419,11 @@ msgid "Message may have not been sent because an unknown error occurred:" msgstr "ההודעה אולי לא נשלחה מכיוון שאירעה שגיאה לא מוכרת:" -#, fuzzy msgid "Delete Buddy from Address Book?" -msgstr "הוסף לפנקס הכתובות" - -#, fuzzy +msgstr "מחק חבר מפנקס הכתובות?" + msgid "Do you want to delete this buddy from your address book as well?" -msgstr "האם ברצונך להוסיף את המשתמש הזה לרשימת אנשי הקשר שלך?" +msgstr "האם ברצונך גם למחוק את המשתמש הזה מפנקס הכתובות שלך?" msgid "The username specified is invalid." msgstr "שם המשתמש שהוזן אינו חוקי." @@ -5543,11 +5520,8 @@ msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)" msgstr "האם ברצונך לקבוע אחד כעת? (הערה: לא ניתן לשינוי!)" -#, fuzzy msgid "Lost connection with server" -msgstr "" -"אבד החיבור עם השרת\n" -"%s" +msgstr "אבד החיבור עם השרת" #. Can't write _()'d strings in array initializers. Workaround. #. khc: then use N_() in the array initializer and use _() when they are @@ -5592,15 +5566,15 @@ msgid "Protocol error, code %d: %s" msgstr "שגיאת פרוטוקול, קוד %d: %s" -#, fuzzy, c-format +#, c-format msgid "" "%s Your password is %zu characters, which is longer than the maximum length " "of %d. Please shorten your password at http://profileedit.myspace.com/index." "cfm?fuseaction=accountSettings.changePassword and try again." msgstr "" -"%s סיסמתך הינה באורך %d תוים, יותר מהאורך המצופה של %d עבור MySpaceIM (מערכת " -"הודעות מיידיות במייספייס).יש לקצר את הסיסמא בדףhttp://profileedit.myspace." -"com/index.cfm?fuseaction=accountSettings.changePassword ולנסות שנית." +"%s סיסמתך הינה באורך %zu תוים, יותר מהאורך המצופה של %d. יש לקצר את הסיסמא " +"באתר http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings." +"changePassword ולנסות שנית." msgid "Incorrect username or password" msgstr "שם משתמש או סיסמה שגויים" @@ -5698,6 +5672,9 @@ "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username " "to set your username." msgstr "" +"קרתה שגיאה בעת קביעת שם המשתמש. יש לנסות שנית, או לגשת אל http://editprofile." +"myspace.com/index.cfm?fuseaction=profile.username על מנת לקבוע את שם המשתמש " +"שלך." msgid "MySpaceIM - Username Available" msgstr "MySpaceIM - שם המשתמש זמין" @@ -5953,9 +5930,9 @@ msgid "Unknown error: 0x%X" msgstr "שגיאה לא מוכרת: 0x%X" -#, fuzzy, c-format +#, c-format msgid "Unable to login: %s" -msgstr "לא ניתן להתחבר" +msgstr "לא ניתן להתחבר: %s" #, c-format msgid "Unable to send message. Could not get details for user (%s)." @@ -6085,11 +6062,10 @@ "%s appears to be offline and did not receive the message that you just sent." msgstr "ככל הנראה, %s אינו מחובר ולא קיבל את ההודעה ששלחת הרגע." -#, fuzzy msgid "" "Unable to connect to server. Please enter the address of the server to which " "you wish to connect." -msgstr "לא ניתן להתחבר לשרת. יש להזין את כתובת השרת שברצונך להתחבר אליו." +msgstr "לא ניתן להתחבר לשרת. יש להזין את כתובת השרת אליו ברצונך להתחבר." msgid "This conference has been closed. No more messages can be sent." msgstr "ועידה זו נסגרה. לא ניתן לשלוח עוד הודעות." @@ -6113,9 +6089,8 @@ msgid "Server port" msgstr "פורט השרת" -#, fuzzy msgid "Received unexpected response from " -msgstr "התקבלה תגובת HTTP לא-צפויה מן השרת." +msgstr "התקבלה תגובה לא-צפויה מאת" #. username connecting too frequently msgid "" @@ -6125,12 +6100,12 @@ "התחברת והתנתקת התדירות גבוהה מדיי. המתן 10 דקות ונסה שנית. אם תמשיך לנסות, " "תיאלץ להמתין אפילו יותר." -#, fuzzy, c-format +#, c-format msgid "Error requesting " -msgstr "שגיאה בבקשת אסימון כניסה" +msgstr "שגיאה בבקשה" msgid "AOL does not allow your screen name to authenticate here" -msgstr "" +msgstr "AOL אינם מאפשרים לאמת את שם המשתמש שלך כאן" msgid "Could not join chat room" msgstr "לא ניתן להתחבר אל חדר הצ'אט" @@ -6138,9 +6113,8 @@ msgid "Invalid chat room name" msgstr "שם החדר אינו תקף" -#, fuzzy msgid "Received invalid data on connection with server" -msgstr "התקבל מידע שגוי בחיבור עם השרת." +msgstr "התקבל מידע שגוי בעת חיבור עם השרת." #. *< type #. *< ui_requirement @@ -6156,7 +6130,7 @@ msgstr "תוסף פרוטוקולים AIM" msgid "ICQ UIN..." -msgstr "" +msgstr "ICQ UIN..." #. *< type #. *< ui_requirement @@ -6187,7 +6161,6 @@ msgid "Received invalid data on connection with remote user." msgstr "התקבל מידע שגוי בחיבור עם המשתמש המרוחק." -#, fuzzy msgid "Unable to establish a connection with the remote user." msgstr "לא ניתן ליצור חיבור עם המשתמש המרוחק." @@ -6387,15 +6360,13 @@ msgid "Buddy Comment" msgstr "הערת איש קשר" -#, fuzzy, c-format +#, c-format msgid "Unable to connect to authentication server: %s" -msgstr "" -"לא ניתן להתחבר לשרת האימות:\n" -"%s" - -#, fuzzy, c-format +msgstr "לא ניתן להתחבר לשרת האימות: %s" + +#, c-format msgid "Unable to connect to BOS server: %s" -msgstr "לא ניתן להתחבר לשרת" +msgstr "לא ניתן להתחבר לשרת ה-BOS: %s" msgid "Username sent" msgstr "שם משתמש נשלח" @@ -6407,19 +6378,19 @@ msgid "Finalizing connection" msgstr "מבצע גימור לחיבור" -#, fuzzy, c-format +#, c-format msgid "" "Unable to sign on as %s because the username is invalid. Usernames must be " "a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"לא ניתן להתחבר: לא היה ניתן להתחבר בתור %s כיוון ששם-תצוגה זה אינו תקף. שמות-" -"תצוגה חייבים להיות כתובות אימייל חוקיות, או להתחיל באות ולהכיל רק אותיות " -"מספרים ורווחים, או לחלופין להכיל אך ורק מספרים." - -#, fuzzy, c-format +"לא ניתן להתחבר בתור %s כיוון ששם משתמש זה אינו תקף. שמות משתמשים חייבים " +"להיות כתובות אימייל חוקיות, או לחילופין להתחיל באות ולהכיל רק אותיות מספרים " +"ורווחים, או לחילופין להכיל אך ורק מספרים." + +#, c-format msgid "You may be disconnected shortly. If so, check %s for updates." -msgstr "ייתכן ותנותק/י בקרוב. יש לבדוק את %s לעידכונים." +msgstr "ייתכן ותנותק/י בקרוב. במידה וכך יש לבדוק %s לעידכונים." msgid "Unable to get a valid AIM login hash." msgstr "לא מצליח להשיג קוד התחברות תקף של AIM." @@ -6433,35 +6404,32 @@ #. Unregistered username #. uid is not exist #. the username does not exist -#, fuzzy msgid "Username does not exist" -msgstr "המשתמש לא קיים" +msgstr "שם המשתמש אינו קיים" #. Suspended account -#, fuzzy msgid "Your account is currently suspended" -msgstr "חשבונך מושעה כרגע." +msgstr "חשבונך מושעה כרגע" #. service temporarily unavailable msgid "The AOL Instant Messenger service is temporarily unavailable." msgstr "שירות ההודעות של AOL לא זמין כרגע." +#. client too old #, c-format msgid "The client version you are using is too old. Please upgrade at %s" msgstr "גירסת תוכנת הלקוח בה את/ה משתמש/ת ישנה מדי. אנא שדרג/י ב-%s" #. IP address connecting too frequently -#, fuzzy msgid "" "You have been connecting and disconnecting too frequently. Wait a minute and " "try again. If you continue to try, you will need to wait even longer." msgstr "" -"התחברת והתנתקת התדירות גבוהה מדיי. המתן 10 דקות ונסה שנית. אם תמשיך לנסות, " -"תיאלץ להמתין אפילו יותר." - -#, fuzzy +"התחברת והתנתקת בתדירות גבוהה מדיי. יש להמתין דקה ולנסות שנית. אם תמשיכ/י " +"לנסות, תיאלצ/י להמתין אפילו יותר." + msgid "The SecurID key entered is invalid" -msgstr "המפתח עבור SecurID אינו תקף." +msgstr "המפתח SecurID שהוזן אינו תקף." msgid "Enter SecurID" msgstr "יש להזין SecurID" @@ -6469,12 +6437,6 @@ msgid "Enter the 6 digit number from the digital display." msgstr "יש להזין את קוד 6 הספרות מהתצוגה הדיגיטלית." -#. * -#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons. -#. -msgid "_OK" -msgstr "אישור" - msgid "Password sent" msgstr "הסיסמא נשלחה" @@ -6484,12 +6446,6 @@ msgid "Please authorize me so I can add you to my buddy list." msgstr "בבקשה, תנ/י לי אישור כדי להוסיף אותך לרשימת אנשי הקשר שלי." -msgid "Authorization Request Message:" -msgstr "הודעת בקשה להרשאה:" - -msgid "Please authorize me!" -msgstr "בבקשה, אני רוצה הרשאה!" - msgid "No reason given." msgstr "לא ניתנה סיבה." @@ -6792,22 +6748,18 @@ msgid "Away message too long." msgstr "הודעת הריחוק מהמחשב ארוכה מדי." -#, fuzzy, c-format +#, c-format msgid "" "Unable to add the buddy %s because the username is invalid. Usernames must " "be a valid email address, or start with a letter and contain only letters, " "numbers and spaces, or contain only numbers." msgstr "" -"לא ניתן להוסיף את איש הקשר %s מכיוון ששם-התצוגה שלו לא חוקי. שמות-תצוגה " -"חייבים להתחיל באות ולהכיל רק אותיות, מספרים ורווחים, או רק להכיל מספרים." - -#, fuzzy -msgid "Unable to Add" -msgstr "לא ניתן להוסיף" - -#, fuzzy +"לא ניתן להוסיף את החבר %s מכיוון ששם המשתמש שלו לא חוקי. שמות-משתמשים " +"מוכרחים להיות כתובות אימייל תקפות, או לחילופין להתחיל באות ולהכיל רק אותיות, " +"מספרים ורווחים, או לחילופין להכיל רק מספרים." + msgid "Unable to Retrieve Buddy List" -msgstr "כשלון בשליפת רשימת אנשי הקשר" +msgstr "לא ניתן לשלוף את רשימת החברים" msgid "" "The AIM servers were temporarily unable to send your buddy list. Your buddy " @@ -6819,20 +6771,20 @@ msgid "Orphans" msgstr "יתומים" -#, fuzzy, c-format +#, c-format msgid "" "Unable to add the buddy %s because you have too many buddies in your buddy " "list. Please remove one and try again." msgstr "" -"לא ניתן להוסיף את %s לרשימת אנשי הקשר שלך, כיוון שיש יותר מדי אנשי קשר " -"ברשימה. יש להסיר אחד ולנסות שנית." +"לא ניתן להוסיף את %s לרשימת החברים שלך, כיוון שיש יותר מדי חברים ברשימה. יש " +"להסיר אחד ולנסות שנית." msgid "(no name)" msgstr "(ללא שם)" -#, fuzzy, c-format +#, c-format msgid "Unable to add the buddy %s for an unknown reason." -msgstr "לא היה ניתן להוסיף את איש הקשר %s מסיבה לא ידועה." +msgstr "לא ניתן להוסיף את החבר%s מסיבה לא ידועה." #, c-format msgid "" @@ -6987,9 +6939,8 @@ msgid "Search for Buddy by Information" msgstr "חפש איש-קשר עפ\"י מידע" -#, fuzzy msgid "Use clientLogin" -msgstr "המשתמש לא מחובר" +msgstr "השתמש ב-clientLogin" msgid "" "Always use AIM/ICQ proxy server for\n" @@ -7102,16 +7053,14 @@ msgid "Other" msgstr "אחר" -#, fuzzy msgid "Visible" -msgstr "בלתי נראה" +msgstr "נראה" msgid "Friend Only" -msgstr "" - -#, fuzzy +msgstr "חבר בלבד" + msgid "Private" -msgstr "פרטיות" +msgstr "פרטי" msgid "QQ Number" msgstr "מספר QQ" @@ -7128,9 +7077,8 @@ msgid "Phone Number" msgstr "מםפר טלפון" -#, fuzzy msgid "Authorize adding" -msgstr "לתת אישור לחבר?" +msgstr "אישור הוספה" msgid "Cellphone Number" msgstr "מםפר פלאפון" @@ -7138,64 +7086,50 @@ msgid "Personal Introduction" msgstr "הצגה אישית" -#, fuzzy msgid "City/Area" -msgstr "עיר" - -#, fuzzy +msgstr "עיר/איזור" + msgid "Publish Mobile" -msgstr "טלפון נייד" - -#, fuzzy +msgstr "פרסם טל. נייד" + msgid "Publish Contact" -msgstr "שם נוסף לאיש קשר" +msgstr "פרסם איש-קשר" msgid "College" msgstr "מכללה" -#, fuzzy msgid "Horoscope" -msgstr "סמל הורוסקופ" - -#, fuzzy +msgstr "הורוסקופ" + msgid "Zodiac" -msgstr "סמל מן המזלות" - -#, fuzzy +msgstr "גלגל המזלות" + msgid "Blood" -msgstr "חסום" - -#, fuzzy +msgstr "סוג דם" + msgid "True" -msgstr "שור" - -#, fuzzy +msgstr "אמת" + msgid "False" -msgstr "נכשל" - -#, fuzzy +msgstr "שקר" + msgid "Modify Contact" -msgstr "עריכת החשבון" - -#, fuzzy +msgstr "ערוך איש-קשר" + msgid "Modify Address" -msgstr "כתובת בבית" - -#, fuzzy +msgstr "ערוך כתובת" + msgid "Modify Extended Information" -msgstr "ערוך את המידע שלי" - -#, fuzzy +msgstr "ערוך מידע נוסף" + msgid "Modify Information" -msgstr "ערוך את המידע שלי" - -#, fuzzy +msgstr "ערוך מידע" + msgid "Update" -msgstr "עודכן לאחרונה" - -#, fuzzy +msgstr "עדכן" + msgid "Could not change buddy information." -msgstr "יש להזין מידע על איש הקשר." +msgstr "לא ניתן לשנות מידע של החבר." msgid "Mobile" msgstr "נייד" @@ -7204,99 +7138,84 @@ msgstr "הערה" #. callback -#, fuzzy msgid "Buddy Memo" -msgstr "סמל איש הקשר" +msgstr "מזכר חבר" msgid "Change his/her memo as you like" -msgstr "" - -#, fuzzy +msgstr "ניתן לערוך את הטקסט של החבר כרצונך" + msgid "_Modify" -msgstr "ערוך" - -#, fuzzy +msgstr "_ערוך" + msgid "Memo Modify" -msgstr "ערוך" - -#, fuzzy +msgstr "עריכת מזכר" + msgid "Server says:" -msgstr "שרת עסוק" +msgstr "השרת אומר:" msgid "Your request was accepted." -msgstr "" +msgstr "בקשתך נתקבלה." msgid "Your request was rejected." -msgstr "" - -#, fuzzy, c-format +msgstr "בקשתך נדחתה." + +#, c-format msgid "%u requires verification" -msgstr "דרוש הרשאה" - -#, fuzzy +msgstr "נדרש אימות מאת %u" + msgid "Add buddy question" -msgstr "להוסיף את איש הקשר לרשימה שלך?" - -#, fuzzy +msgstr "הוסף שאלת חבר" + msgid "Enter answer here" -msgstr "יש להזין את הבקשה כאו" +msgstr "יש להזין את התשובה כאן" msgid "Send" msgstr "שלח" -#, fuzzy msgid "Invalid answer." -msgstr "שם משתמש לא תקף." +msgstr "תשובה לא תקפה." msgid "Authorization denied message:" msgstr "הודעת סירוב הרשאה:" -#, fuzzy msgid "Sorry, you're not my style." -msgstr "סליחה, את/ה לא הטיפוס שלי..." - -#, fuzzy, c-format +msgstr "סליחה, את/ה לא הטיפוס שלי." + +#, c-format msgid "%u needs authorization" -msgstr "משתמש %d דורש אימות" - -#, fuzzy +msgstr "%u דורש אימות" + msgid "Add buddy authorize" -msgstr "להוסיף את איש הקשר לרשימה שלך?" - -#, fuzzy +msgstr "הוסף אימות חבר" + msgid "Enter request here" -msgstr "יש להזין את הבקשה כאו" +msgstr "יש להזין את הבקשה כאן" msgid "Would you be my friend?" msgstr "התרצ/י להיות ידיד/ה שלי?" -#, fuzzy msgid "QQ Buddy" -msgstr "איש הקשר" - -#, fuzzy +msgstr "חבר QQ" + msgid "Add buddy" -msgstr "הוסף איש קשר" - -#, fuzzy +msgstr "הוסף חבר" + msgid "Invalid QQ Number" -msgstr "פרצוף QQ לא תקף" - -#, fuzzy +msgstr "מספר QQ לא תקף" + msgid "Failed sending authorize" -msgstr "בבקשה, אני רוצה הרשאה!" - -#, fuzzy, c-format +msgstr "כשל בשליחת אישור" + +#, c-format msgid "Failed removing buddy %u" -msgstr "כשל בהסרת איש-קשר" - -#, fuzzy, c-format +msgstr "כשל בהסרת חבר %u" + +#, c-format msgid "Failed removing me from %d's buddy list" -msgstr "%s הסיר/ה אותך מרשימת אנשי הקשר שלו או שלה." - -#, fuzzy +msgstr "כשל בהסרתי מרשימת החברים של %d" + msgid "No reason given" -msgstr "לא ניתנה סיבה." +msgstr "לא ניתנה סיבה" #. only need to get value #, c-format @@ -7306,9 +7225,9 @@ msgid "Would you like to add him?" msgstr "האם ברצונך להוסיף אותו?" -#, fuzzy, c-format +#, c-format msgid "Rejected by %s" -msgstr "דחה" +msgstr "נדחה על ידי %s" #, c-format msgid "Message: %s" @@ -7323,88 +7242,73 @@ msgid "QQ Qun" msgstr "QQ Qun" -#, fuzzy msgid "Please enter Qun number" -msgstr "אנא הזן את השם חדש עבור %s" - -#, fuzzy +msgstr "יש להזין מספר Qun" + msgid "You can only search for permanent Qun\n" -msgstr "ניתן לחפש רק קבוצות QQ קבועות\n" - -#, fuzzy +msgstr "ניתן לחפש רק Qun קבועות\n" + msgid "(Invalid UTF-8 string)" -msgstr "הגדרות לא תקפות של מתווכים" - -#, fuzzy +msgstr "(מחרוזת UTF-8 שגויה)" + msgid "Not member" -msgstr "אני אינני חבר/ה" +msgstr "לא חבר בקבוצה" msgid "Member" msgstr "חבר" -#, fuzzy msgid "Requesting" -msgstr "חלון בקשה" - -#, fuzzy +msgstr "מבקש" + msgid "Admin" -msgstr "Adium" - -#, fuzzy +msgstr "מנהל" + msgid "Notice" -msgstr "הערה" - -#, fuzzy +msgstr "הודעה" + msgid "Detail" -msgstr "ברירת המחדל" +msgstr "פרטים" msgid "Creator" msgstr "יוצר" -#, fuzzy msgid "About me" -msgstr "אודות %s" - -#, fuzzy +msgstr "אודותי" + msgid "Category" -msgstr "שגיאה בצ'אט" - -#, fuzzy +msgstr "קטגוריה" + msgid "The Qun does not allow others to join" -msgstr "קבוצה זו לא מאשרת לאחרים להצטרף" - -#, fuzzy +msgstr "ה-Qnn הזו לא מאשרת לאחרים להצטרף" + msgid "Join QQ Qun" -msgstr "הצטרף לצ'אט" +msgstr "הצטרף אל QQ Qun" msgid "Input request here" msgstr "יש להזין את הבקשה כאו" -#, fuzzy, c-format +#, c-format msgid "Successfully joined Qun %s (%u)" -msgstr "שינית בהצלחה את החבר-Qun" - -#, fuzzy +msgstr "צורף בהצלחה אל Qun %s (%u)" + msgid "Successfully joined Qun" -msgstr "שינית בהצלחה את החבר-Qun" +msgstr "צורף בהצלחה אל Qun" #, c-format msgid "Qun %u denied from joining" -msgstr "" +msgstr "Qun %u נאסר מלהצטרף" msgid "QQ Qun Operation" msgstr "פעולת QQ Qun" -#, fuzzy msgid "Failed:" -msgstr "נכשל" +msgstr "נכשל:" msgid "Join Qun, Unknown Reply" -msgstr "" - -#, fuzzy +msgstr "תשובה לא מוכרת, Join Qun" + msgid "Quit Qun" -msgstr "QQ Qun" +msgstr "יציאה מה-Qun" msgid "" "Note, if you are the creator, \n" @@ -7413,51 +7317,47 @@ "יש לשים לב, כי אם את/ה היוצר/ת, \n" "פעולה זו תביא בסופו של דבר להסרת ה-Qun." -#, fuzzy msgid "Sorry, you are not our style" -msgstr "סליחה, את/ה לא הטיפוס שלי..." - -#, fuzzy +msgstr "סליחה, את/ה לא הטיפוס שלנו" + msgid "Successfully changed Qun members" -msgstr "שינית בהצלחה את החבר-Qun" - -#, fuzzy +msgstr "שינית בהצלחה את חברי ה-Qun" + msgid "Successfully changed Qun information" msgstr "שינית בהצלחה מידע של ה-Qun" msgid "You have successfully created a Qun" msgstr "יצרת בהצלחה Qun" -#, fuzzy msgid "Would you like to set up detailed information now?" -msgstr "האם ברצונך לקבוע את פרטי ה-Qun כעת?" +msgstr "האם ברצונך כעת לקבוע את הפרטים?" msgid "Setup" msgstr "הגדרות" -#, fuzzy, c-format +#, c-format msgid "%u requested to join Qun %u for %s" -msgstr "המשתמש %d ביקש להצטרף לקבוצה %d" - -#, fuzzy, c-format +msgstr "%u ביקש להצטרף אל Qun %u בשביל %s" + +#, c-format msgid "%u request to join Qun %u" -msgstr "המשתמש %d ביקש להצטרף לקבוצה %d" - -#, fuzzy, c-format +msgstr "%u ביקש להצטרף אל Qun %u" + +#, c-format msgid "Failed to join Qun %u, operated by admin %u" -msgstr "כישלון בהצטרפות לאיש קשר בצ'אט" +msgstr "כשל בצטרפות אל Qun %u, המופעל על ידי המנהל %u" #, c-format msgid "Joining Qun %u is approved by admin %u for %s" -msgstr "" - -#, fuzzy, c-format +msgstr "הצטרפות אל Qun %u מאושרת על ידי המנהל %u עבור %s" + +#, c-format msgid "Removed buddy %u." -msgstr "הסר איש קשר" - -#, fuzzy, c-format +msgstr "הוסר חבר %u." + +#, c-format msgid "New buddy %u joined." -msgstr "הסר איש קשר" +msgstr "חבר חדש %u הצטרף." #, c-format msgid "Unknown-%d" @@ -7481,9 +7381,8 @@ msgid " Video" msgstr " וידאו" -#, fuzzy msgid " Zone" -msgstr "ללא" +msgstr "איזור" msgid "Flag" msgstr "דגל" @@ -7494,121 +7393,113 @@ msgid "Invalid name" msgstr "שם משתמש שגוי" -#, fuzzy msgid "Select icon..." -msgstr "בחירת תיקיה..." - -#, fuzzy, c-format +msgstr "בחירת סמל..." + +#, c-format msgid "Login time: %d-%d-%d, %d:%d:%d
\n" -msgstr "זמן כניסה: %s
\n" - -#, fuzzy, c-format +msgstr "זמן כניסה: %d-%d-%d, %d:%d:%d
\n" + +#, c-format msgid "Total Online Buddies: %d
\n" -msgstr "כרגע מחוברים: %d
\n" - -#, fuzzy, c-format +msgstr "סך-הכל חברים מחוברים: %d
\n" + +#, c-format msgid "Last Refresh: %d-%d-%d, %d:%d:%d
\n" -msgstr "עידכון אחרון: %s
\n" - -#, fuzzy, c-format +msgstr "עידכון אחרון: %d-%d-%d, %d:%d:%d
\n" + +#, c-format msgid "Server: %s
\n" -msgstr "שרת: %s: %d
\n" - -#, fuzzy, c-format +msgstr "שרת: %s
\n" + +#, c-format msgid "Client Tag: %s
\n" -msgstr "זמן כניסה: %s
\n" +msgstr "תגית לקוח: %s
\n" #, c-format msgid "Connection Mode: %s
\n" msgstr "סוג החיבור: %s
\n" -#, fuzzy, c-format +#, c-format msgid "My Internet IP: %s:%d
\n" -msgstr "סוג החיבור: %s
\n" - -#, fuzzy, c-format +msgstr "כתובתי באינטרנט: %s:%d
\n" + +#, c-format msgid "Sent: %lu
\n" -msgstr "שרת: %s: %d
\n" - -#, fuzzy, c-format +msgstr "נשלח: %lu
\n" + +#, c-format msgid "Resend: %lu
\n" -msgstr "עידכון אחרון: %s
\n" - -#, fuzzy, c-format +msgstr "נשלח שוב: %lu
\n" + +#, c-format msgid "Lost: %lu
\n" -msgstr "עידכון אחרון: %s
\n" - -#, fuzzy, c-format +msgstr "אבד: %lu
\n" + +#, c-format msgid "Received: %lu
\n" -msgstr "שרת: %s: %d
\n" - -#, fuzzy, c-format +msgstr "התקבל: %lu
\n" + +#, c-format msgid "Received Duplicate: %lu
\n" -msgstr "כתובתי המפורסמת: %s
\n" - -#, fuzzy, c-format +msgstr "התקבל במכופל: %lu
\n" + +#, c-format msgid "Time: %d-%d-%d, %d:%d:%d
\n" -msgstr "זמן כניסה: %s
\n" - -#, fuzzy, c-format +msgstr "זמן: %d-%d-%d, %d:%d:%d
\n" + +#, c-format msgid "IP: %s
\n" -msgstr "שרת: %s: %d
\n" +msgstr "IP: %s
\n" msgid "Login Information" msgstr "מידע על הכניסה" msgid "

Original Author:
\n" -msgstr "" +msgstr "

מחבר מקורי:
\n" msgid "

Code Contributors:
\n" -msgstr "" - -#, fuzzy +msgstr "

תורמי קוד:
\n" + msgid "

Lovely Patch Writers:
\n" -msgstr "עידכון אחרון: %s
\n" - -#, fuzzy +msgstr "

כותבי-טלאי נפלאים:
\n" + msgid "

Acknowledgement:
\n" -msgstr "שרת: %s: %d
\n" - -#, fuzzy +msgstr "

הכרת-תודה:
\n" + msgid "

Scrupulous Testers:
\n" -msgstr "עידכון אחרון: %s
\n" +msgstr "

בודקי-תוכנה קפדניים:
\n" msgid "and more, please let me know... thank you!))" -msgstr "" +msgstr "ועוד, אנא הודיעו לי... תודה!))" msgid "

And, all the boys in the backroom...
\n" -msgstr "" +msgstr "

וכן, כל החבר'ה בחדר האחורי...
\n" msgid "Feel free to join us! :)" -msgstr "" - -#, fuzzy, c-format +msgstr "הרגישו חופשי להצטרף אלינו! :)" + +#, c-format msgid "About OpenQ %s" -msgstr "אודות %s" - -#, fuzzy +msgstr "אודות OpenQ %s" + msgid "Change Icon" -msgstr "שמירת סמל" +msgstr "שנה סמל" msgid "Change Password" msgstr "שנה סיסמא" -#, fuzzy msgid "Account Information" -msgstr "מידע על הכניסה" +msgstr "מידע על החשבון" msgid "Update all QQ Quns" -msgstr "" - -#, fuzzy +msgstr "עדכן את כל QQ Quns" + msgid "About OpenQ" -msgstr "אודות %s" - -#, fuzzy +msgstr "אודות OpenQ" + msgid "Modify Buddy Memo" -msgstr "כתובת בבית" +msgstr "ערוך מזכר על החבר" #. *< type #. *< ui_requirement @@ -7620,57 +7511,48 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "QQ Protocol Plugin" -msgstr "פרוטוקול QQ\tתוסף" - -#, fuzzy +msgstr "פרוטוקול תוסף QQ" + msgid "Auto" -msgstr "מחבר" - -#, fuzzy +msgstr "אוטומטי" + msgid "Select Server" -msgstr "בחר משתמש" +msgstr "בחר שרת" msgid "QQ2005" -msgstr "" +msgstr "QQ2005" msgid "QQ2007" -msgstr "" +msgstr "QQ2007" msgid "QQ2008" -msgstr "" - -#, fuzzy +msgstr "QQ2008" + msgid "Connect by TCP" -msgstr "מתחבר בעזרת TCP" - -#, fuzzy +msgstr "התחבר בעזרת TCP" + msgid "Show server notice" -msgstr "פורט השרת" - -#, fuzzy +msgstr "הצג הודעת שרת" + msgid "Show server news" -msgstr "כתובת שרת" +msgstr "הצג חדשות שרת" msgid "Show chat room when msg comes" -msgstr "" - -#, fuzzy +msgstr "הצג חדר-צ'אט כשמתקבלת הודעה" + msgid "Keep alive interval (seconds)" -msgstr "פרקי-זמן להודעות הישאר-בחיים" - -#, fuzzy +msgstr "פרקי-זמן להודעות הישאר-בחיים (בשניות)" + msgid "Update interval (seconds)" -msgstr "פרק זמן בין עידכונים" - -#, fuzzy +msgstr "פרק זמן בין עידכונים (שניות)" + msgid "Unable to decrypt server reply" -msgstr "אין אפשרות לפיענוח המשוב בעת אימות משתמש" +msgstr "אין אפשרות לפענוח המשוב מהשרת" #, c-format msgid "Failed requesting token, 0x%02X" -msgstr "" +msgstr "כישלון בבקשת token, 0x%02X" #, c-format msgid "Invalid token len, %d" @@ -7678,135 +7560,122 @@ #. extend redirect used in QQ2006 msgid "Redirect_EX is not currently supported" -msgstr "" +msgstr "Redirect_EX אינו נתמך כרגע" #. need activation #. need activation #. need activation -#, fuzzy msgid "Activation required" -msgstr "נדרשת הרשמה" - -#, fuzzy, c-format +msgstr "נדרשת הפעלה" + +#, c-format msgid "Unknown reply code when logging in (0x%02X)" -msgstr "קוד-תגובה שגוי, 0x%02X" - -#, fuzzy +msgstr "משוב לא מוכר בעת התחברות (0x%02X)" + msgid "Requesting captcha" -msgstr "מבקש/ת את תשומת-הלב של %s..." - -#, fuzzy +msgstr "מבקש וידוא-אדם" + msgid "Checking captcha" -msgstr "מבקש/ת את תשומת-הלב של %s..." - -#, fuzzy +msgstr "בודק וידוא-אדם" + msgid "Failed captcha verification" -msgstr "כישלון באימות מול Yahoo!" - -#, fuzzy +msgstr "כישלון וידוא-אדם" + msgid "Captcha Image" -msgstr "שמור תמונה" - -#, fuzzy +msgstr "תמונת captcha" + msgid "Enter code" -msgstr "הזן סיסמא" - -#, fuzzy +msgstr "הזן קוד" + msgid "QQ Captcha Verification" -msgstr "וידוא תעודת SSL" - -#, fuzzy +msgstr "וידוא-אדם של QQ" + msgid "Enter the text from the image" -msgstr "יש להזין את שם הקבוצה" - -#, fuzzy, c-format +msgstr "יש להזין את הטקסט מהתמונה" + +#, c-format msgid "Unknown reply when checking password (0x%02X)" -msgstr "קוד-תגובה שגוי, 0x%02X" - -#, fuzzy, c-format +msgstr "משוב לא מוכר בעת בדיקת סיסמא (0x%02X)" + +#, c-format msgid "" "Unknown reply code when logging in (0x%02X):\n" "%s" -msgstr "קוד-תגובה שגוי, 0x%02X" +msgstr "" +"קוד-משוב לא מוכר בעת התחברות (0x%02X):\n" +"%s" msgid "Socket error" msgstr "שגיאת שקע" -#, fuzzy msgid "Getting server" -msgstr "קבע את המידע על המשתמש..." - -#, fuzzy +msgstr "שולף שרת" + msgid "Requesting token" -msgstr "הבקשה נדחית" - -#, fuzzy +msgstr "מבקש סמלון" + msgid "Unable to resolve hostname" -msgstr "לא ניתן להתחבר לשרת" - -#, fuzzy +msgstr "לא ניתן לתרגם את שם השרת לכתובת" + msgid "Invalid server or port" -msgstr "מספר שגיאה לא תקף." - -#, fuzzy +msgstr "שרת או יציאה לא-חוקיים" + msgid "Connecting to server" -msgstr "מתחבר לשרת ה-SILC" - -#, fuzzy +msgstr "מתחבר לשרת" + msgid "QQ Error" -msgstr "שגיאת QQid" - -#, fuzzy, c-format +msgstr "שגיאת QQ" + +#, c-format msgid "" "Server News:\n" "%s\n" "%s\n" "%s" -msgstr "ניתוב שרת ICQ" - -#, fuzzy, c-format +msgstr "" +"חדשות שרת:\n" +"%s\n" +"%s\n" +"%s" + +#, c-format msgid "%s:%s" -msgstr "%s (%s)" - -#, fuzzy, c-format +msgstr "%s:%s" + +#, c-format msgid "From %s:" -msgstr "מאת" - -#, fuzzy, c-format +msgstr "מאת %s:" + +#, c-format msgid "" "Server notice From %s: \n" "%s" -msgstr "הנחיות שרת: %s" - -#, fuzzy +msgstr "" +"הודעת שרת מאת %s: \n" +"%s" + msgid "Unknown SERVER CMD" -msgstr "סיבה לא ידועה" - -#, fuzzy, c-format +msgstr "SERVER CMD לא מוכר" + +#, c-format msgid "" "Error reply of %s(0x%02X)\n" "Room %u, reply 0x%02X" msgstr "" -"משוב %s(0x%02X )\n" -"נשלח %s(0x%02X )\n" -"מזהה חדר %d, משוב [0x%02X]: \n" -"%s" - -#, fuzzy +"משוב שגיאה של %s(0x%02X)\n" +"חדר %u, משוב 0x%02X" + msgid "QQ Qun Command" -msgstr "פקודה" - -#, fuzzy +msgstr "פקודת QQ Qun" + msgid "Unable to decrypt login reply" -msgstr "אין אפשרות לפיענוח המשוב בעת אימות משתמש" - -#, fuzzy +msgstr "אין אפשרות לפענוח המשוב לניסיון ההתחברות" + msgid "Unknown LOGIN CMD" -msgstr "סיבה לא ידועה" - -#, fuzzy +msgstr "LOGIN CMD לא מוכר" + msgid "Unknown CLIENT CMD" -msgstr "סיבה לא ידועה" +msgstr "CLIENT CMD לא מוכר" #, c-format msgid "%d has declined the file %s" @@ -8767,7 +8636,6 @@ msgid "Disconnected by server" msgstr "נותק ע\"י השרת" -#, fuzzy msgid "Error connecting to SILC Server" msgstr "שגיאה בעת התחברות לשרת ה-SILC" @@ -8781,7 +8649,6 @@ msgid "Performing key exchange" msgstr "מבצע החלפת מפתחות" -#, fuzzy msgid "Unable to load SILC key pair" msgstr "לא ניתן לטעון את זוג מפתחות ה-SILC" @@ -8789,14 +8656,9 @@ msgid "Connecting to SILC Server" msgstr "מתחבר לשרת ה-SILC" -#, fuzzy -msgid "Unable to not load SILC key pair" -msgstr "לא ניתן לטעון את זוג מפתחות ה-SILC" - msgid "Out of memory" msgstr "אזל הזיכרון" -#, fuzzy msgid "Unable to initialize SILC protocol" msgstr "לא ניתן לאתחל את פרוטוקול SILC" @@ -9084,9 +8946,8 @@ msgid "Creating SILC key pair..." msgstr "יוצר זוג מפתחות SILC..." -#, fuzzy msgid "Unable to create SILC key pair" -msgstr "לא יכול ליצור זוג מפתחות SILC\n" +msgstr "לא ניתן ליצור זוג מפתחות SILC" #. Hint for translators: Please check the tabulator width here and in #. the next strings (short strings: 2 tabs, longer strings 1 tab, @@ -9222,34 +9083,30 @@ msgid "Failure: Authentication failed" msgstr "שגיאה: האימות נכשל" -#, fuzzy msgid "Unable to initialize SILC Client connection" msgstr "לא ניתן לאתחל חיבור לקוח של SILC" msgid "John Noname" msgstr "פלוני אלמוני" -#, fuzzy, c-format +#, c-format msgid "Unable to load SILC key pair: %s" msgstr "לא ניתן לטעון את זוג מפתחות ה-SILC: %s" msgid "Unable to create connection" msgstr "לא ניתן ליצור חיבור" -#, fuzzy msgid "Unknown server response" -msgstr "תגובת שרת לא ידועה." - -#, fuzzy +msgstr "תגובת שרת לא מוכרת" + msgid "Unable to create listen socket" -msgstr "אין אפשרות ליצור שקע" +msgstr "אין אפשרות ליצור שקע-קשב" msgid "SIP usernames may not contain whitespaces or @ symbols" msgstr "אסור לשמות משתמשים של SIP להכיל רווחים או סמלי @" -#, fuzzy msgid "SIP connect server not specified" -msgstr "פורט השרת" +msgstr "לא הוגדר שרת חיבור SIP" #. *< type #. *< ui_requirement @@ -9293,9 +9150,8 @@ msgid "doodle: Request user to start a Doodle session" msgstr "doodle: לבקש מהמשתמש להתחיל ב- Doodle" -#, fuzzy msgid "Yahoo ID..." -msgstr "Yahoo! ID" +msgstr "Yahoo ID..." #. *< type #. *< ui_requirement @@ -9307,9 +9163,8 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "Yahoo! Protocol Plugin" -msgstr "תוסף פרוטוקול Yahoo" +msgstr "תוסף פרוטוקול Yahoo!" msgid "Pager server" msgstr "שרת ה-Pager" @@ -9338,9 +9193,8 @@ msgid "Yahoo Chat port" msgstr "כניסת שרת Yahoo" -#, fuzzy msgid "Yahoo JAPAN ID..." -msgstr "Yahoo! ID" +msgstr "Yahoo יפן ID" #. *< type #. *< ui_requirement @@ -9352,12 +9206,11 @@ #. *< version #. * summary #. * description -#, fuzzy msgid "Yahoo! JAPAN Protocol Plugin" -msgstr "תוסף פרוטוקול Yahoo" +msgstr "תוסף פרוטוקול Yahoo! יפן" msgid "Your SMS was not delivered" -msgstr "" +msgstr "הסמס שלך לא הגיע ליעדו" msgid "Your Yahoo! message did not get sent." msgstr "הודעת ה Yahoo שלך לא נשלחה." @@ -9382,28 +9235,26 @@ msgstr "הוספת איש קשר נדחתה" #. Some error in the received stream -#, fuzzy msgid "Received invalid data" -msgstr "התקבל מידע שגוי בחיבור עם השרת." +msgstr "התקבל מידע שגוי" #. security lock from too many failed login attempts -#, fuzzy msgid "" "Account locked: Too many failed login attempts. Logging into the Yahoo! " "website may fix this." -msgstr "שגיאה לא מוכרת מספר %d. התחברות באתר Yahoo! אולי יתקן את זה." +msgstr "" +"החשבון נעול: יותר מדי ניסיון התחברות כושלים. התחברות באתר Yahoo! אולי תתקן " +"את זה." #. indicates a lock of some description -#, fuzzy msgid "" "Account locked: Unknown reason. Logging into the Yahoo! website may fix " "this." -msgstr "שגיאה לא מוכרת מספר %d. התחברות באתר Yahoo! אולי יתקן את זה." +msgstr "החשבון נעול: סיבה לא ידועה. התחברות באתר Yahoo! אולי תתקן את זה." #. username or password missing -#, fuzzy msgid "Username or password missing" -msgstr "שם משתמש או סיסמה שגויים" +msgstr "שם משתמש או סיסמה חסרים" #, c-format msgid "" @@ -9435,33 +9286,27 @@ msgid "Unknown error number %d. Logging into the Yahoo! website may fix this." msgstr "שגיאה לא מוכרת מספר %d. התחברות באתר Yahoo! אולי יתקן את זה." -#, fuzzy, c-format +#, c-format msgid "Unable to add buddy %s to group %s to the server list on account %s." -msgstr "לא ניתן להוסיף את איש הקשר %s לקבוצה %s ברשימה על השרת בחשבון %s." - -#, fuzzy +msgstr "לא ניתן להוסיף את החבר %s לקבוצה %s ברשימה בשרת בחשבון %s." + msgid "Unable to add buddy to server list" -msgstr "לא ניתן להוסיף את איש הקשר לרשימה בשרת" +msgstr "לא ניתן להוסיף את החבר לרשימה בשרת" #, c-format msgid "[ Audible %s/%s/%s.swf ] %s" msgstr "[ בר-שמיעה %s/%s/%s.swf ] %s" -#, fuzzy msgid "Received unexpected HTTP response from server" -msgstr "התקבלה תגובת HTTP לא-צפויה מן השרת." - -#, fuzzy, c-format +msgstr "התקבלה תגובת HTTP לא-צפויה מן השרת" + +#, c-format msgid "Lost connection with %s: %s" -msgstr "" -"אבד החיבור עם %s:\n" -"%s" - -#, fuzzy, c-format +msgstr "אבד החיבור עם %s: %s" + +#, c-format msgid "Unable to establish a connection with %s: %s" -msgstr "" -"לא ניתן ליצור חיבור עם השרת:\n" -"%s" +msgstr "לא ניתן ליצור חיבור עם %s: %s" msgid "Not at Home" msgstr "לא נמצא בבית" @@ -9509,7 +9354,7 @@ msgstr "התחל לקשקש" msgid "Select the ID you want to activate" -msgstr "" +msgstr "יש לבחור את המזהה ברצונך להפעיל" msgid "Join whom in chat?" msgstr "להצטרף למי בצ'אט?" @@ -9582,10 +9427,9 @@ msgid "Last Update" msgstr "עודכן לאחרונה" -#, fuzzy msgid "" "This profile is in a language or format that is not supported at this time." -msgstr "סליחה, אך נראה כי פרופיל זה הוא בשפה או פורמט שלא נתמכים כרגע." +msgstr "פרופיל זה אינו בשפה או פורמט אשר אינם נתמכים כרגע." msgid "" "Could not retrieve the user's profile. This most likely is a temporary " @@ -9606,12 +9450,9 @@ msgid "The user's profile is empty." msgstr "פרופיל המשתמש ריק." -#, c-format -msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." -msgstr "%s סרב את ההזמנה שלך לועידה בחדר \"%s\" כיוון ש-\"%s\"." - -msgid "Invitation Rejected" -msgstr "ההזמנה נדחתה" +#, fuzzy, c-format +msgid "%s has declined to join." +msgstr "%s התחבר." msgid "Failed to join chat" msgstr "לא ניתן להצטרף לשיחה" @@ -9663,9 +9504,8 @@ msgid "User Rooms" msgstr "חדרים של משתמשים" -#, fuzzy msgid "Connection problem with the YCHT server" -msgstr "שגיאה בתקשורת עם שרת ה-YCHT." +msgstr "שגיאה עם החיבור אל שרת ה-YCHT." msgid "" "(There was an error converting this message.\t Check the 'Encoding' option " @@ -9787,17 +9627,17 @@ msgid "Exposure" msgstr "חשיפה" -#, fuzzy, c-format +#, c-format msgid "Unable to parse response from HTTP proxy: %s" -msgstr "לא ניתן לעכל את תשובת שרת התיווך של HTTP: %s\n" +msgstr "לא ניתן לעבד את משוב שרת התיווך של HTTP: %s" #, c-format msgid "HTTP proxy connection error %d" msgstr "שגיאה בשרת התיווך של HTTP %d" -#, fuzzy, c-format +#, c-format msgid "Access denied: HTTP proxy server forbids port %d tunneling" -msgstr "אין הרשאה: שרת התיווך אוסר על תיעול ליציאה %d." +msgstr "אין הרשאה: שרת התיווך אוסר על תיעול ליציאה %d" #, c-format msgid "Error resolving %s" @@ -9980,9 +9820,9 @@ msgid "Unable to connect to %s" msgstr "לא ניתן להתחבר אל %s" -#, fuzzy, c-format +#, c-format msgid "Error reading from %s: response too long (%d bytes limit)" -msgstr "שגיאה בקריאה מתוך %s: %s" +msgstr "שגיאה בקריאה מתוך %s: אורך המשוב ארוך מדי (מוגבל עד %d בייט)" #, c-format msgid "" @@ -10041,12 +9881,12 @@ msgid "Error Reading %s" msgstr "שגיאה בקריאת %s" -#, fuzzy, c-format +#, c-format msgid "" "An error was encountered reading your %s. The file has not been loaded, and " "the old file has been renamed to %s~." msgstr "" -"חלה שגיאה בעת קריאת ה-%s שלך. הם לא נטענו, ושם הקובץ הישן הוחלף ל-%s~." +"חלה שגיאה בעת קריאת ה-%s שלך. הקובץ לא נטען, ושם ההובץ הישן שונה ל-%s~." msgid "Internet Messenger" msgstr "למסרים באינטרנט" @@ -10090,7 +9930,7 @@ msgid "Use this buddy _icon for this account:" msgstr "השתמש בתמונה זו לחשבון זה:" -msgid "_Advanced" +msgid "Ad_vanced" msgstr "_מתקדם" msgid "Use GNOME Proxy Settings" @@ -10153,9 +9993,8 @@ msgid "Create _this new account on the server" msgstr "צור חשבון חדש זה על השרת" -#, fuzzy -msgid "_Proxy" -msgstr "מתווך" +msgid "P_roxy" +msgstr "מת_ווך" msgid "Enabled" msgstr "פעיל" @@ -10163,7 +10002,7 @@ msgid "Protocol" msgstr "פרוטוקול" -#, fuzzy, c-format +#, c-format msgid "" "Welcome to %s!\n" "\n" @@ -10175,14 +10014,14 @@ "You can come back to this window to add, edit, or remove accounts from " "Accounts->Manage Accounts in the Buddy List window" msgstr "" -"ברוכים הבאים ל-%s!\n" -"\n" -"אין ברשותך שם חשבונות מוגדרים. להתחיל התחברות עם %s יש ללחוץ על הכפתור " -"הוסף שלמטה ולהגדיר את החשבון הראשון שלך. אם ברצונך ש-%s יתחבר לכמה " -"חשבונות, יש ללחוץ על הוסף שוב על-מנת להגדיר את כולם.\n" +"ברוכים הבאים אל%s!\n" +"\n" +"אין ברשותך שם חשבונות מוגדרים. על מנת להתחבר עם %s יש ללחוץ על הכפתור " +"הוסף... שלהלן להגדיר את חשבונך הראשון. אם ברצונך ש-%s יתחבר לכמה " +"חשבונות, יש ללחוץ על הוסף... שוב על מנת להגדיר את כולם.\n" "\n" "ניתן גם לחזור לחלון זה על מנת להוסיף, לערוך, או להסיר חשבונות על-ידי " -"חשבונות->הוסף/ערוך שבחלון רשימת אנשי-הקשר" +"חשבונות->נהל חשבונות שבחלון רשימת החברים" #, c-format msgid "You have %d contact named %s. Would you like to merge them?" @@ -10203,9 +10042,8 @@ msgid "Please update the necessary fields." msgstr "יש לעדכן את השדות הנחוצים." -#, fuzzy msgid "A_ccount" -msgstr "חשבון" +msgstr "ח_שבון" msgid "" "Please enter the appropriate information about the chat you would like to " @@ -10230,16 +10068,14 @@ msgid "I_M" msgstr "הודעה" -#, fuzzy msgid "_Audio Call" -msgstr "הוסף שיחה" +msgstr "שיחה _קולית" msgid "Audio/_Video Call" -msgstr "" - -#, fuzzy +msgstr "שיחה קולית או שיחת וידאו" + msgid "_Video Call" -msgstr "שיחת וידאו" +msgstr "שיחת וי_דאו" msgid "_Send File..." msgstr "שלח קובץ..." @@ -10250,11 +10086,9 @@ msgid "View _Log" msgstr "הצ_ג רישום" -#, fuzzy msgid "Hide When Offline" msgstr "החבא כאשר לא-מקוון" -#, fuzzy msgid "Show When Offline" msgstr "הצג כאשר לא-מקוון" @@ -10380,9 +10214,8 @@ msgid "/Tools/_Certificates" msgstr "/כלים/תעודות" -#, fuzzy msgid "/Tools/Custom Smile_ys" -msgstr "/כלים/_חייכן" +msgstr "/כלים/_חייכן שלי" msgid "/Tools/Plu_gins" msgstr "/כלים/תו_ספים" @@ -10511,7 +10344,7 @@ msgstr "לפי מצב" msgid "By recent log activity" -msgstr "" +msgstr "על פי פעילות אחרונה ביומן הרישום" #, c-format msgid "%s disconnected" @@ -10528,7 +10361,7 @@ msgstr "הפעל מחדש" msgid "SSL FAQs" -msgstr "" +msgstr "שו\"ת SSL" msgid "Welcome back!" msgstr "ברוך שובך!" @@ -10620,9 +10453,8 @@ msgid "Auto_join when account becomes online." msgstr "הצטרפות אוטומטית כאשר החשבון נעשה מקוון." -#, fuzzy msgid "_Remain in chat after window is closed." -msgstr "ה_סתר צ'אט כאשר החלון נסגר." +msgstr "הש_אר בצ'אט אחרי שהחלון נסגר." msgid "Please enter the name of the group to be added." msgstr "יש להזין את שם הקבוצה החדשה." @@ -10655,111 +10487,96 @@ msgid "Background Color" msgstr "צבע הרקע" -#, fuzzy msgid "The background color for the buddy list" -msgstr "קבוצה זו נוספה לרשימת אנשי הקשר שלך" - -#, fuzzy +msgstr "צבע הרקע עבור רשימת החברים" + msgid "Layout" -msgstr "לאית" +msgstr "מתווה" msgid "The layout of icons, name, and status of the blist" -msgstr "" +msgstr "מיקומי הסמלים, השמות והמצבים ברשימת אנשי-הקשר" #. Group -#, fuzzy msgid "Expanded Background Color" -msgstr "צבע הרקע" +msgstr "צבע רקע עבור מורחב" msgid "The background color of an expanded group" -msgstr "" - -#, fuzzy +msgstr "צבע-הרקע של קבוצה שהורחבה" + msgid "Expanded Text" -msgstr "ה_רחב" +msgstr "טקסט מורחב" msgid "The text information for when a group is expanded" -msgstr "" - -#, fuzzy +msgstr "טקסט למידע כשקבוצה מורחבת" + msgid "Collapsed Background Color" -msgstr "בחירת צבע רקע" +msgstr "צבע רקע עבור עבור מקופל" msgid "The background color of a collapsed group" -msgstr "" - -#, fuzzy +msgstr "צבע-הרקע של קבוצה שצומצמה" + msgid "Collapsed Text" -msgstr "_קפל" +msgstr "טקסט מקופל" msgid "The text information for when a group is collapsed" -msgstr "" +msgstr "טקסט למידע כשקבוצה מצומצמת" #. Buddy -#, fuzzy msgid "Contact/Chat Background Color" -msgstr "בחירת צבע רקע" +msgstr "צבע רקע עבור צ'אט/איש-קשר" msgid "The background color of a contact or chat" -msgstr "" - -#, fuzzy +msgstr "צבע-הרקע של איש-קשר או צ'אט" + msgid "Contact Text" -msgstr "קיצור-דרך" +msgstr "טקסט איש-קשר" msgid "The text information for when a contact is expanded" -msgstr "" - -#, fuzzy +msgstr "טקסט למידע כשאיש-קשר מורחב" + msgid "On-line Text" -msgstr "מחובר" +msgstr "טקסט כשמחובר" msgid "The text information for when a buddy is online" -msgstr "" - -#, fuzzy +msgstr "טקסט למידע כשאיש-קשר מחובר" + msgid "Away Text" -msgstr "רחוק מהמחשב" +msgstr "טקסט כשרחוק מהמחשב" msgid "The text information for when a buddy is away" -msgstr "" - -#, fuzzy +msgstr "טקסט למידע כשאיש-קשר מרוחק מהמחשב" + msgid "Off-line Text" -msgstr "מנותק" +msgstr "טקסט כשמנותק" msgid "The text information for when a buddy is off-line" -msgstr "" - -#, fuzzy +msgstr "טקסט למידע כשאיש-קשר מנותק" + msgid "Idle Text" -msgstr "טקסט מצב-רוח" +msgstr "טקסט כשחסר-פעילות" msgid "The text information for when a buddy is idle" -msgstr "" - -#, fuzzy +msgstr "טקסט למידע כשאיש-קשר חסר-פעילות" + msgid "Message Text" -msgstr "הודעה נשלחה" +msgstr "טקסט הודעת" msgid "The text information for when a buddy has an unread message" -msgstr "" +msgstr "טקסט למידע כשלאיש-קשר יש הודעות שלא נקראו" msgid "Message (Nick Said) Text" -msgstr "" +msgstr "טקסט הודעות (מישהו אמר)" msgid "" "The text information for when a chat has an unread message that mentions " "your nick" -msgstr "" - -#, fuzzy +msgstr "טקסט להציג כשצ'אט מכיל הודעה שלא-נקראה שמזכירה את הכינוי שלך" + msgid "The text information for a buddy's status" -msgstr "שנה פרטי משתמש עבור %s" - -#, fuzzy +msgstr "הטקסט עבור מצבו של חבר" + msgid "Type the host name for this certificate." -msgstr "יש להקליד את שם השרת שעבורו נועדה התעודה" +msgstr "יש להקליד את שם השרת שעבורו נועדה תעודה זו" #. Widget creation function msgid "SSL Servers" @@ -10806,7 +10623,6 @@ msgid "Get Away Message" msgstr "השג את הודעת ההתרחקות" -#, fuzzy msgid "Last Said" msgstr "נאמר לאחרונה" @@ -10853,21 +10669,17 @@ msgid "/Conversation/Clea_r Scrollback" msgstr "/שיחה/נ_קה גלילה לאחור" -#, fuzzy msgid "/Conversation/M_edia" -msgstr "/שיחה/_עוד" - -#, fuzzy +msgstr "/שיחה/_מדיה" + msgid "/Conversation/Media/_Audio Call" -msgstr "/שיחה/_עוד" - -#, fuzzy +msgstr "/שיחה _קולית/שיחה/מדיה" + msgid "/Conversation/Media/_Video Call" -msgstr "/שיחה/_עוד" - -#, fuzzy +msgstr "/שיחת _וידאו/שיחה/מדיה" + msgid "/Conversation/Media/Audio\\/Video _Call" -msgstr "/שיחה/ה_צג יומן שיחות" +msgstr "/שיחת ו_ידאו/\\קול/שיחה/מדיה" msgid "/Conversation/Se_nd File..." msgstr "/שיחה/ש_לח קובץ..." @@ -10941,17 +10753,14 @@ msgid "/Conversation/View Log" msgstr "/שיחה/הצג יומן שיחות" -#, fuzzy msgid "/Conversation/Media/Audio Call" -msgstr "/שיחה/עוד" - -#, fuzzy +msgstr "/שיחת קול/שיחה/מדיה" + msgid "/Conversation/Media/Video Call" -msgstr "/שיחה/הצג יומן שיחות" - -#, fuzzy +msgstr "/שיחת וידאו/שיחה/מדיה" + msgid "/Conversation/Media/Audio\\/Video Call" -msgstr "/שיחה/עוד" +msgstr "/שיחת וידאו/\\קול/שיחה/מדיה" msgid "/Conversation/Send File..." msgstr "/שיחה/שלח קובץ..." @@ -11126,9 +10935,8 @@ msgstr "שגיאה קטלנית" msgid "bug master" -msgstr "" - -#, fuzzy +msgstr "שר-הבאגים" + msgid "artist" msgstr "אמן" @@ -11137,14 +10945,13 @@ msgstr "קא-הינג צ'אונג" msgid "voice and video" -msgstr "" +msgstr "קול ווידאו" msgid "support" msgstr "תמיכה" -#, fuzzy msgid "webmaster" -msgstr "מפתח ומנהל אתר" +msgstr "מנהל אתר" msgid "Senior Contributor/QA" msgstr "תורם בכיר/QA" @@ -11166,7 +10973,7 @@ msgstr "תמיכה/QA" msgid "XMPP" -msgstr "" +msgstr "XMPP" msgid "original author" msgstr "מתכנת מקורי" @@ -11243,9 +11050,8 @@ msgid "French" msgstr "צרפתית" -#, fuzzy msgid "Irish" -msgstr "כורדית" +msgstr "אירית" msgid "Galician" msgstr "גליסיאנית" @@ -11265,9 +11071,8 @@ msgid "Hungarian" msgstr "הונגרית" -#, fuzzy msgid "Armenian" -msgstr "רומנית" +msgstr "ארמנית" msgid "Indonesian" msgstr "אינדונזית" @@ -11284,9 +11089,8 @@ msgid "Ubuntu Georgian Translators" msgstr "מתרגמי הגרוזינית של אובונטו" -#, fuzzy msgid "Khmer" -msgstr "אחר" +msgstr "קמבודית" msgid "Kannada" msgstr "קאנאדית" @@ -11309,9 +11113,8 @@ msgid "Macedonian" msgstr "מקדונית" -#, fuzzy msgid "Mongolian" -msgstr "מקדונית" +msgstr "מונגולית" msgid "Bokmål Norwegian" msgstr "נורבגית ספרותית" @@ -11368,7 +11171,7 @@ msgstr "שוודית" msgid "Swahili" -msgstr "" +msgstr "סוואהילי" msgid "Tamil" msgstr "תמיל" @@ -11433,21 +11236,25 @@ "FAQ: http://developer.pidgin.im/wiki/FAQ

" msgstr "" +"שו\"ת: http://developer.pidgin.im/wiki/FAQ

" #, c-format msgid "" "Help via e-mail: support@pidgin.im

" msgstr "" - -#, fuzzy, c-format +"עזרה דרך האימייל: support@pidgin.im

" + +#, c-format msgid "" "IRC Channel: #pidgin on irc.freenode.net

" -msgstr "IRC: #pidgin ב- irc.freenode.net

" - -#, fuzzy, c-format +msgstr "ערוץ IRC: #pidgin על irc.freenode.net

" + +#, c-format msgid "XMPP MUC: devel@conference.pidgin.im

" -msgstr "IRC: #pidgin ב- irc.freenode.net

" +msgstr "XMPP MUC: devel@conference.pidgin.im

" msgid "Current Developers" msgstr "מפתחים" @@ -11687,13 +11494,11 @@ msgid "Color to draw hyperlinks." msgstr "צבע לצבוע בו קישורים." -#, fuzzy msgid "Hyperlink visited color" -msgstr "צבע קישורים" - -#, fuzzy +msgstr "צבע קישור שביקרת" + msgid "Color to draw hyperlink after it has been visited (or activated)." -msgstr "הצבע לצבוע בו קישורים כאשר העכבר מעליהם." +msgstr "הצבע עבור קישורים שכבר בוקרו (או הופעלו)." msgid "Hyperlink prelight color" msgstr "צבע קישורים לפני לחיצה" @@ -11728,23 +11533,20 @@ msgid "Action Message Name Color for Whispered Message" msgstr "צבע עבור שמות הודעות-פעולה להודעות שנלחשות" -#, fuzzy msgid "Color to draw the name of a whispered action message." -msgstr "הצבע עבור שם של הודעות-פעולה." +msgstr "הצבע עבור השם של הודעת פעולה שנלחשה." msgid "Whisper Message Name Color" msgstr "צבע עבור שם הודעה שנלחשה" -#, fuzzy msgid "Color to draw the name of a whispered message." -msgstr "הצבע עבור שם של הודעות-פעולה." +msgstr "הצבע עבור השם של הודעה שנלחשה." msgid "Typing notification color" msgstr "צבע התרעת-הקלדה" -#, fuzzy msgid "The color to use for the typing notification" -msgstr "הצבע בו תוצג התרעת ההקלדה" +msgstr "הצבע עבור התרעת ההקלדה." msgid "Typing notification font" msgstr "גופן התרעת-הקלדה" @@ -11988,7 +11790,7 @@ msgid "%s %s. Try `%s -h' for more information.\n" msgstr "%s %s. יש לנסות את '%s –h' למידע נוסף.\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12010,6 +11812,7 @@ "\n" " -c, --config=ספריה השתמש בספרייה לקבצי הגדרות\n" " -d, --debug שלח הודעות ניפוי באגים ל-stdout\n" +" -f, --force-online אלץ מצב מקוון, בלי להתחשב במצב הרשת\n" " -h, --help הצג הודעה זו וצא\n" " -m, --multiple אל תוודא שרק עותק אחד רץ\n" " -n, --nologin אל תתחבר אוטומטית\n" @@ -12018,7 +11821,7 @@ " --display=DISPLAY מספר התצוגה להשתמש בו בחלונות X\n" " -v, --version הצג את הגירסאשל התוכנה וצא\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -12039,6 +11842,7 @@ "\n" " -c, --config=ספריה השתמש בספרייה לקבצי הגדרות\n" " -d, --debug שלח הודעות ניפוי באגים ל-stdout\n" +" -f, --force-online אלץ מצב מקוון, בלי להתחשב במצב הרשת\n" " -h, --help הצג הודעה זו וצא\n" " -m, --multiple אל תוודא שרק עותק אחד רץ\n" " -n, --nologin אל תתחבר אוטומטית\n" @@ -12047,7 +11851,7 @@ " --display=DISPLAY מספר התצוגה להשתמש בו בחלונות X\n" " -v, --version הצג את הגרסה של התוכנה וצא\n" -#, fuzzy, c-format +#, c-format msgid "" "%s %s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" @@ -12065,17 +11869,14 @@ "%s %s נפל וניסה לכתוב קובץ של הזיכרון לקובץ.\n" "זהו באג בתוכנה, שקרה ללא שום אשמה מצידך.\n" "\n" -"אם באפשרותך לגרום לנפילה לקרות שוב, אנא הודע על כך למפתחים דרך:\n" +"אם באפשרותך לגרום לנפילה לקרות שוב, אנא הודע על כך למפתחים\n" +"על ידי דיווח באג באתר:\n" "%ssimpleticket/\n" "\n" "יש לפרט בדיוק מה עשית בזמן הנפילה, ולשלוח את הודעות ה-backtrace מהקובץ " "core.\n" "אם אינך יודע/ת להוציא את ה-backtrace, אנא קרא את ההוראות ב:\n" "%swiki/GetABacktrace\n" -"\n" -"אם יש צורך בעזרה נוספת, אנא פנה בהודעה אל SeanEgn או LSchiere דרך AIM.\n" -"מידע ליצור קשר עם שון ולוק בפרוטוקולים אחרים נמצא ב:\n" -"%swiki/DeveloperPages\n" #. Translators may want to transliterate the name. #. It is not to be translated. @@ -12084,25 +11885,24 @@ #, c-format msgid "Exiting because another libpurple client is already running.\n" -msgstr "" +msgstr "מסיים מכיוון שכבר רצה תוכנה אחרת שהמשתמש בספריית libpurple.\n" msgid "/_Media" -msgstr "" +msgstr "/_מדיה" msgid "/Media/_Hangup" -msgstr "" - -#, fuzzy +msgstr "/מדיה/_ניתוק" + msgid "Calling..." -msgstr "מחשב..." +msgstr "מתקשר..." #, c-format msgid "%s wishes to start an audio/video session with you." -msgstr "" +msgstr "נתקבלה בקשה מאת %s להתחיל התקשרות קול/וידאו איתך." #, c-format msgid "%s wishes to start a video session with you." -msgstr "" +msgstr "נתקבלה בקשה מאת %s להתחיל התקשרות וידאו איתך." #, c-format msgid "%s has %d new message." @@ -12131,9 +11931,8 @@ "The 'Manual' browser command has been chosen, but no command has been set." msgstr "נבחרה לביצוע הפקודה 'הידנית' של הדפדפן, אבל לא נקבעה הוראה לביצוע." -#, fuzzy msgid "No message" -msgstr "הודעת לא מוכרת" +msgstr "ללא הודעה" msgid "Open All Messages" msgstr "פתח את כל ההודעות" @@ -12141,16 +11940,14 @@ msgid "You have mail!" msgstr "דואר חדש נכנס!" -#, fuzzy msgid "New Pounces" -msgstr "צור תגובת פעילות חדשה" +msgstr "צור תגובות פעילות חדשות" msgid "Dismiss" -msgstr "" - -#, fuzzy +msgstr "סגור" + msgid "You have pounced!" -msgstr "דואר חדש נכנס!" +msgstr "הפעלת פעולת-תגובה!" msgid "The following plugins will be unloaded." msgstr "התוספים שלהלן ייפרקו מן הזיכרון." @@ -12198,7 +11995,6 @@ msgid "Select a file" msgstr "בחר קובץ" -#, fuzzy msgid "Modify Buddy Pounce" msgstr "ערוך שינויים בתגובת פעילות" @@ -12275,61 +12071,58 @@ msgid "Pounce Target" msgstr "מטרת התגובה" -#, fuzzy, c-format +#, c-format msgid "Started typing" -msgstr "מתחיל/ה להקליד" - -#, fuzzy, c-format +msgstr "התחיל/ה להקליד" + +#, c-format msgid "Paused while typing" -msgstr "עוצר בעת הקלדה" - -#, fuzzy, c-format +msgstr "עצר/ה בעת הקלדה" + +#, c-format msgid "Signed on" -msgstr "מתחבר" - -#, fuzzy, c-format +msgstr "התחבר/ה" + +#, c-format msgid "Returned from being idle" -msgstr "%s חזר לפעילות (%s)" - -#, fuzzy, c-format +msgstr "חזר/ה מחוסר-פעילות" + +#, c-format msgid "Returned from being away" -msgstr "חוזר/ת למחשב" - -#, fuzzy, c-format +msgstr "חזר/ה למחשב" + +#, c-format msgid "Stopped typing" -msgstr "הפסיק/ה להקליד" - -#, fuzzy, c-format +msgstr "כבר לא מקליד/ה" + +#, c-format msgid "Signed off" -msgstr "מתנתק" - -#, fuzzy, c-format +msgstr "התנתק/ה" + +#, c-format msgid "Became idle" -msgstr "חסר/ת פעילות" - -#, fuzzy, c-format +msgstr "הפכ/ה לחסרת-פעילות" + +#, c-format msgid "Went away" -msgstr "כאשר מרוחק" - -#, fuzzy, c-format +msgstr "נעשה מרוחק" + +#, c-format msgid "Sent a message" msgstr "שלח הודעה" -#, fuzzy, c-format +#, c-format msgid "Unknown.... Please report this!" -msgstr "אירעה פעילות לא מוכרת. אנא דווח על כך!" - -#, fuzzy +msgstr "לא מוכר. אנא דווח על כך!" + msgid "Theme failed to unpack." -msgstr "כישלון בעת פתיחת ערכת סמייליים" - -#, fuzzy +msgstr "כישלון בעת פתיחת ערכת מוטיב." + msgid "Theme failed to load." -msgstr "כישלון בעת פתיחת ערכת סמייליים" - -#, fuzzy +msgstr "כישלון בעת טעינת ערכת מוטיב." + msgid "Theme failed to copy." -msgstr "כישלון בעת פתיחת ערכת סמייליים" +msgstr "כישלון בעת העתקת ערכת מוטיב." msgid "Install Theme" msgstr "התקן עיצוב" @@ -12351,9 +12144,8 @@ msgstr "_סגור חלונות שיחה עם כפתור האסקייפ" #. Buddy List Themes -#, fuzzy msgid "Buddy List Theme" -msgstr "רשימת אנשי קשר" +msgstr "מוטיבי תצוגה עבור רשימת החברים" #. System Tray msgid "System Tray Icon" @@ -12365,9 +12157,8 @@ msgid "On unread messages" msgstr "בהגעת הודעות שלא נקראו" -#, fuzzy msgid "Conversation Window" -msgstr "חלונות שיחה להודעות" +msgstr "חלון שיחה" msgid "_Hide new IM conversations:" msgstr "ה_סתר שיחות חדשות" @@ -12470,9 +12261,9 @@ msgid "Example: stunserver.org" msgstr "לדוגמא: stunserver.org" -#, fuzzy, c-format +#, c-format msgid "Use _automatically detected IP address: %s" -msgstr "מצ_א כתובת IP אוטומטית" +msgstr "התשמש ב_כתובת ה-IP שזוההתה אוטומטית: %s" msgid "Public _IP:" msgstr "כתובת IP חיצונית:" @@ -12494,7 +12285,7 @@ #. TURN server msgid "Relay Server (TURN)" -msgstr "" +msgstr "שרת העברה (TURN)" msgid "Proxy Server & Browser" msgstr "שרת תיווך ודפדפן" @@ -12526,7 +12317,7 @@ #. This is a global option that affects SOCKS4 usage even with account-specific proxy settings msgid "Use remote DNS with SOCKS4 proxies" -msgstr "" +msgstr "השתמש בשירות DNS מרוחק עם שרתי-תיווך SOCKS" msgid "_User:" msgstr "_משתמש:" @@ -12649,20 +12440,17 @@ "צליל לפקו_דה:\n" "(%s עבור קובץ)" -#, fuzzy msgid "M_ute sounds" msgstr "ה_שתק צלילים" msgid "Sounds when conversation has _focus" msgstr "צלילים כאשר יש לחלון השיחה מי_קוד" -#, fuzzy msgid "_Enable sounds:" -msgstr "הפעל צלילים:" - -#, fuzzy +msgstr "ה_פעל צלילים" + msgid "V_olume:" -msgstr "עוצמת-שמע:" +msgstr "עו_צמת-שמע" msgid "Play" msgstr "נגן" @@ -12842,10 +12630,10 @@ msgid "Status for %s" msgstr "מצב עבור %s" -#, fuzzy, c-format +#, c-format msgid "" "A custom smiley for '%s' already exists. Please use a different shortcut." -msgstr "חייכן שלך כבר קיים לקיצור-הדרך שנבחר. יש לבחור קיצור-דרך אחר." +msgstr "כבר קיים חייכן משלך עבור '%s'. יש לנסות קיצור-דרך אחר." msgid "Custom Smiley" msgstr "חייכן שלך" @@ -12859,36 +12647,30 @@ msgid "Add Smiley" msgstr "הוס_ף חייכן" -#, fuzzy msgid "_Image:" -msgstr "תמונה" +msgstr "ת_מונה" #. Shortcut text -#, fuzzy msgid "S_hortcut text:" -msgstr "קיצור-דרך" +msgstr "טקסט לק_יצור-דרך:" msgid "Smiley" msgstr "חייכן" -#, fuzzy msgid "Shortcut Text" -msgstr "קיצור-דרך" +msgstr "טקסט לקיצור-דרך" msgid "Custom Smiley Manager" msgstr "מנהל החייכנים שלך" -#, fuzzy msgid "Select Buddy Icon" -msgstr "בחר איש קשר" - -#, fuzzy +msgstr "בחירת תמונה עבור חבר" + msgid "Click to change your buddyicon for this account." -msgstr "השתמש בתמונה זו לחשבון זה:" - -#, fuzzy +msgstr "ניתן ללחוץ על מנת להחליף את תמונת החבר של חשבון זה." + msgid "Click to change your buddyicon for all accounts." -msgstr "השתמש בתמונה זו לחשבון זה:" +msgstr "ניתן ללחוץ על מנת להחליף את תמונת החבר של כל החשבונות." msgid "Waiting for network connection" msgstr "ממתין לחיבור לרשת" @@ -12962,13 +12744,12 @@ msgid "Cannot send launcher" msgstr "לא ניתן לשלוח את קובץ המפעיל" -#, fuzzy msgid "" "You dragged a desktop launcher. Most likely you wanted to send the target of " "this launcher instead of this launcher itself." msgstr "" -"גררת קובץ מפעיל של שולחן העבודה. קרוב לודאי שרצית לשלוח את מה שהמפעיל " -"מצביעעליו, ולא את המפעיל עצמו." +"גררת קובץ מפעיל של שולחן העבודה. קרוב לודאי שרצית לשלוח את מה שהמפעיל מצביע " +"עליו, ולא את המפעיל עצמו." #, c-format msgid "" @@ -12999,9 +12780,8 @@ "Failed to load image '%s': reason not known, probably a corrupt image file" msgstr "כישלון בעת טעינת התמונה '%s': סיבה לא ידועה, כנראה קובץ תמונה פגום" -#, fuzzy msgid "_Open Link" -msgstr "_פתח את הקישור בדפדפן הבא:" +msgstr "_פתח קישור" msgid "_Copy Link Location" msgstr "ה_עתק מיקום הקישור" @@ -13009,9 +12789,21 @@ msgid "_Copy Email Address" msgstr "העתק _כתובת הדוא\"ל" +msgid "_Open File" +msgstr "פתח קוב_ץ" + +msgid "Open _Containing Directory" +msgstr "פתח ספרייה _מכילה" + msgid "Save File" msgstr "שמור קובץ" +msgid "_Play Sound" +msgstr "_נגן צליל" + +msgid "_Save File" +msgstr "_שמור קובץ" + msgid "Select color" msgstr "בחר צבע" @@ -13027,13 +12819,11 @@ msgid "_Invite" msgstr "הזמן" -#, fuzzy msgid "_Modify..." -msgstr "_ערוך" - -#, fuzzy +msgstr "_ערוך..." + msgid "_Add..." -msgstr "הוסף" +msgstr "_הוסף..." msgid "_Open Mail" msgstr "_פתח דואר" @@ -13056,12 +12846,11 @@ msgid "none" msgstr "ללא" -#, fuzzy msgid "Small" -msgstr "דואר" +msgstr "קטן" msgid "Smaller versions of the default smilies" -msgstr "" +msgstr "גירסאות מוקטנות של חייכני ברירת המחדל" msgid "Response Probability:" msgstr "התסברות תגובה:" @@ -13102,77 +12891,64 @@ msgid "Displays statistical information about your buddies' availability" msgstr "מציג מידע סטטיסטי על זמינות אנשי-הקשר שלך" -#, fuzzy msgid "Server name request" -msgstr "כתובת שרת" - -#, fuzzy +msgstr "בקשת שם שרת" + msgid "Enter an XMPP Server" -msgstr "יש להזין שרת ועידה" - -#, fuzzy +msgstr "יש להזין שרת XMPP" + msgid "Select an XMPP server to query" -msgstr "יש לבחור שרת ועידה לתישאול" - -#, fuzzy +msgstr "יש לבחור שרת XMPP לתישאול" + msgid "Find Services" -msgstr "שירותים מקוונים" - -#, fuzzy +msgstr "מצא שירות" + msgid "Add to Buddy List" -msgstr "שלח רשימת אנשי הקשר" - -#, fuzzy +msgstr "הוסף לרשימת אנשי-הקשר" + msgid "Gateway" -msgstr "מתרחק/ת מהמחשב" - -#, fuzzy +msgstr "שער" + msgid "Directory" -msgstr "ספריית יומן אירועים" - -#, fuzzy +msgstr "ספרייה" + msgid "PubSub Collection" -msgstr "בחירת הצליל" - -#, fuzzy +msgstr "אוסף PubSub" + msgid "PubSub Leaf" -msgstr "שירות PubSub" - -#, fuzzy +msgstr "עלה PubSub" + msgid "" "\n" "Description: " -msgstr "תיאור" +msgstr "" +"\n" +"תיאור: " #. Create the window. -#, fuzzy msgid "Service Discovery" -msgstr "מידע של שירות תגלית" - -#, fuzzy +msgstr "גילוי שרותים" + msgid "_Browse" -msgstr "_דפדפן:" - -#, fuzzy +msgstr "_עיין" + msgid "Server does not exist" -msgstr "המשתמש לא קיים" - -#, fuzzy +msgstr "השרת אינו קיים" + msgid "Server does not support service discovery" -msgstr "השרת לא תומך באימות באף תצורה" - -#, fuzzy +msgstr "השרת לא תומך בגילוי שירותים" + msgid "XMPP Service Discovery" -msgstr "מידע של שירות תגלית" +msgstr "גילוי שירות XMPP" msgid "Allows browsing and registering services." -msgstr "" - -#, fuzzy +msgstr "מאפשר רישום ועיון ברשימת השירותים" + msgid "" "This plugin is useful for registering with legacy transports or other XMPP " "services." -msgstr "תוסף זה שימושי לניפוי באגים בשרתים ולקוחות של XMPP." +msgstr "" +"תוסף זה שימושי לטובת רישום עם פרוטוקולי תקשורת ישנים או שירותי XMPP אחרים." msgid "Buddy is idle" msgstr "איש הקשר במנוחה" @@ -13553,12 +13329,12 @@ msgstr "תוסף להודעות מוזיקה להלחנה משותפת." #. * summary -#, fuzzy msgid "" "The Music Messaging Plugin allows a number of users to simultaneously work " "on a piece of music by editing a common score in real-time." msgstr "" -"התוסף להודעות מוזיקה מאפשר למספר משתמשים לעבוד יחד על הלחנת יצירה בזמן אמת." +"התוסף להודעות מוזיקה מאפשר למספר משתמשים לעבוד יחד על יצירה מוזיקלית על ידי " +"עריכה של לחן משותף בזמן אמת." #. ---------- "Notify For" ---------- msgid "Notify For" @@ -13589,9 +13365,8 @@ msgid "Set window manager \"_URGENT\" hint" msgstr "קבע את רמז ה-\"URGENT\" של מנהל החלונות" -#, fuzzy msgid "_Flash window" -msgstr "חלונות _שיחה" +msgstr "הבהב ח_לון" #. Raise window method button msgid "R_aise conversation window" @@ -13671,14 +13446,12 @@ msgid "Hyperlink Color" msgstr "צבע קישורים" -#, fuzzy msgid "Visited Hyperlink Color" -msgstr "צבע קישורים" +msgstr "צבע קישורים שביקרת" msgid "Highlighted Message Name Color" msgstr "צבע לסימון שמות בהודעות" -#, fuzzy msgid "Typing Notification Color" msgstr "צבע התרעת-הקלדה" @@ -13711,23 +13484,20 @@ msgid "GTK+ Text Shortcut Theme" msgstr "מוטיב קיצור הדרך הטקסטואלי של GTK+" -#, fuzzy msgid "Disable Typing Notification Text" -msgstr "הפעל התרעת הקלדה" - -#, fuzzy +msgstr "כבה טקסט התרעת הקלדה" + msgid "GTK+ Theme Control Settings" -msgstr "בקרת מוטיבים של GTK+ בפידג'ין" - -#, fuzzy +msgstr "בקרת מוטיבים של GTK+" + msgid "Colors" -msgstr "סגור" +msgstr "צבעים" msgid "Fonts" msgstr "גופנים" msgid "Miscellaneous" -msgstr "" +msgstr "שונות" msgid "Gtkrc File Tools" msgstr "כלים לקובץ Gtkrc" @@ -13760,18 +13530,16 @@ #, c-format msgid "You can upgrade to %s %s today." -msgstr "" +msgstr "ניתן לשדרג אל %s %s היום." msgid "New Version Available" msgstr "קיימת גירסה חדשה" -#, fuzzy msgid "Later" -msgstr "תאריך" - -#, fuzzy +msgstr "מאוחר יותר" + msgid "Download Now" -msgstr "הורדת %s: %s" +msgstr "הורד כעת" #. *< type #. *< ui_requirement @@ -13812,12 +13580,11 @@ msgstr "כפתור שליחה בחלון שיחה." #. *< summary -#, fuzzy msgid "" "Adds a Send button to the entry area of the conversation window. Intended " "for use when no physical keyboard is present." msgstr "" -"מוסיף כפתור שליחה לאיזור הקלט של חלון השיחה. נועד לשימוש כאשר אין מקלדת " +"מוסיף כפתור שליחה לאיזור הקלט של חלון השיחה. נועד לתרחיש שאין בנמצא מקלדת " "פיזית." msgid "Duplicate Correction" @@ -13869,94 +13636,78 @@ msgid "Replaces text in outgoing messages according to user-defined rules." msgstr "מחליף טקסט בהודעות יוצאות עפ\"י חוקים שנקבעים ע\"י המשתמש." -#, fuzzy msgid "Just logged in" -msgstr "לא מחובר" - -#, fuzzy +msgstr "רק התחבר" + msgid "Just logged out" -msgstr "לא מחובר" +msgstr "רק התנתק" msgid "" "Icon for Contact/\n" "Icon for Unknown person" msgstr "" - -#, fuzzy +"סמל עבור איש-קשר\n" +"סמל עבור אדם לא מוכר" + msgid "Icon for Chat" -msgstr "הצטרף לשיחה" - -#, fuzzy +msgstr "סמל לשיחה" + msgid "Ignored" msgstr "התעלם" -#, fuzzy msgid "Founder" -msgstr "יותר רועש" - -#, fuzzy +msgstr "מייסד" + msgid "Operator" -msgstr "אופרה" +msgstr "מפעיל" msgid "Half Operator" -msgstr "" - -#, fuzzy +msgstr "חצי-מפעיל" + msgid "Authorization dialog" -msgstr "ההרשאה ניתנה" - -#, fuzzy +msgstr "חלון הרשאה" + msgid "Error dialog" -msgstr "שגיאה " - -#, fuzzy +msgstr "חלון שגיאה " + msgid "Information dialog" -msgstr "מידע" +msgstr "חלון מידע" msgid "Mail dialog" -msgstr "" - -#, fuzzy +msgstr "חלון דואר" + msgid "Question dialog" -msgstr "חלון בקשה" - -#, fuzzy +msgstr "חלון שאלה" + msgid "Warning dialog" -msgstr "רמת אזהרה" +msgstr "חלון אזהרה" msgid "What kind of dialog is this?" -msgstr "" - -#, fuzzy +msgstr "איזה סוג חלון זה?" + msgid "Status Icons" -msgstr "מצב עבור %s" - -#, fuzzy +msgstr "סמלי מצב" + msgid "Chatroom Emblems" -msgstr "הגדרה איזורית לחדר צ'אט" - -#, fuzzy +msgstr "תגיות חדרי-צ'אט" + msgid "Dialog Icons" -msgstr "שמירת סמל" - -#, fuzzy +msgstr "סמלי חלונות דו-שיח" + msgid "Pidgin Icon Theme Editor" -msgstr "בקרת מוטיבים של GTK+ בפידג'ין" - -#, fuzzy +msgstr "עורך מוטיבים של סמלים בפידג'ין" + msgid "Contact" -msgstr "מידע על איש הקשר" - -#, fuzzy +msgstr "איש הקשר" + msgid "Pidgin Buddylist Theme Editor" -msgstr "רשימת אנשי קשר" - -#, fuzzy +msgstr "עורך המוטיבים של רשימת החברים בפידג'ין" + msgid "Edit Buddylist Theme" -msgstr "רשימת אנשי קשר" +msgstr "ערוך מוטיבים של רשימת החברים" msgid "Edit Icon Theme" -msgstr "" +msgstr "ערוך מוטיב-סמלים" #. *< type #. *< ui_requirement @@ -13965,16 +13716,14 @@ #. *< priority #. *< id #. * description -#, fuzzy msgid "Pidgin Theme Editor" -msgstr "בקרת מוטיבים של GTK+ בפידג'ין" +msgstr "עורך מוטיבים בפידג'ין" #. *< name #. *< version #. * summary -#, fuzzy msgid "Pidgin Theme Editor." -msgstr "בקרת מוטיבים של GTK+ בפידג'ין" +msgstr "עורך מוטיבים בפידג'ין." #. *< type #. *< ui_requirement @@ -14140,7 +13889,6 @@ msgid "Options specific to Pidgin for Windows." msgstr "אפשרויות לפידג'ין היחודיות לחלונות." -#, fuzzy msgid "" "Provides options specific to Pidgin for Windows, such as buddy list docking." msgstr "" @@ -14184,6 +13932,23 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "תוסף זה שימושי לניפוי באגים בשרתים ולקוחות של XMPP." +#~ msgid "Malformed BOSH Connect Server" +#~ msgstr "שרת חיבור BOSH משובש" + +#~ msgid "Unable to not load SILC key pair" +#~ msgstr "לא ניתן שלא לטעון את זוג מפתחות ה-SILC" + +#~ msgid "" +#~ "%s declined your conference invitation to room \"%s\" because \"%s\"." +#~ msgstr "%s סרב את ההזמנה שלך לועידה בחדר \"%s\" כיוון ש-\"%s\"." + +#~ msgid "Invitation Rejected" +#~ msgstr "ההזמנה נדחתה" + +#, fuzzy +#~ msgid "_Proxy" +#~ msgstr "מתווך" + #~ msgid "Cannot open socket" #~ msgstr "אין אפשרות לפתוח שקע" diff -r 1b6ac48c5ffa -r b960be0f3423 po/pt_BR.po --- a/po/pt_BR.po Tue Jul 28 05:47:09 2009 +0000 +++ b/po/pt_BR.po Tue Jul 28 05:49:14 2009 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-20 11:50-0700\n" +"POT-Creation-Date: 2009-07-25 09:57-0400\n" "PO-Revision-Date: 2009-02-24 22:11-0300\n" "Last-Translator: Rodrigo Luiz Marques Flores \n" "Language-Team: Rodrigo Luiz Marques Flores \n" @@ -1691,6 +1691,7 @@ "O certificado enviado por \"%s\" é auto-assinado. Ele não pode ser " "verificado automaticamente." +#. FIXME 2.6.1 #, c-format msgid "The certificate chain presented for %s is not valid." msgstr "A cadeia de certificados enviada para %s não é válida." @@ -1700,6 +1701,7 @@ #. stifle it. #. TODO: Probably wrong. #. TODO: Probably wrong +#. TODO: Probably wrong. msgid "SSL Certificate Error" msgstr "Erro no certificado SSL" @@ -9728,9 +9730,9 @@ msgid "The user's profile is empty." msgstr "O perfil do usuário está vazio." -#, fuzzy, c-format +#, c-format msgid "%s has declined to join." -msgstr "%s conectou." +msgstr "%s rejeitou o convite." msgid "Failed to join chat" msgstr "Falha ao entrar no bate-papo"