static wi_string_t * _wi_dictionary_description(wi_runtime_instance_t *instance) { wi_dictionary_t *dictionary = instance; _wi_dictionary_bucket_t *bucket; wi_mutable_string_t *string; wi_string_t *key_description, *value_description; wi_uinteger_t i; string = wi_mutable_string_with_format(WI_STR("<%@ %p>{count = %lu, mutable = %u, values = (\n"), wi_runtime_class_name(dictionary), dictionary, dictionary->key_count, wi_runtime_options(dictionary) & WI_RUNTIME_OPTION_MUTABLE ? 1 : 0); for(i = 0; i < dictionary->buckets_count; i++) { for(bucket = dictionary->buckets[i]; bucket; bucket = bucket->next) { if(dictionary->key_callbacks.description) key_description = (*dictionary->key_callbacks.description)(bucket->key); else key_description = wi_string_with_format(WI_STR("%p"), bucket->key); if(dictionary->value_callbacks.description) value_description = (*dictionary->value_callbacks.description)(bucket->data); else value_description = wi_string_with_format(WI_STR("%p"), bucket->data); wi_mutable_string_append_format(string, WI_STR(" %@: %@\n"), key_description, value_description); } } wi_mutable_string_append_string(string, WI_STR(")}")); wi_runtime_make_immutable(string); return string; }
static wi_string_t * _wi_array_description(wi_runtime_instance_t *instance) { wi_array_t *array = instance; wi_string_t *string, *description; void *data; wi_uinteger_t i; string = wi_string_with_format(WI_STR("<%@ %p>{count = %lu, values = (\n"), wi_runtime_class_name(array), array, array->data_count); for(i = 0; i < array->data_count; i++) { data = WI_ARRAY(array, i); if(array->callbacks.description) description = (*array->callbacks.description)(data); else description = wi_string_with_format(WI_STR("%p"), data); wi_string_append_format(string, WI_STR(" %lu: %@\n"), i, description); } wi_string_append_string(string, WI_STR(")}")); return string; }
wi_string_t * wi_time_interval_string(wi_time_interval_t interval) { uint32_t days, hours, minutes, seconds; seconds = interval; days = seconds / 86400; seconds -= days * 86400; hours = seconds / 3600; seconds -= hours * 3600; minutes = seconds / 60; seconds -= minutes * 60; if(days > 0) { return wi_string_with_format(WI_STR("%u:%.2u:%.2u:%.2u days"), days, hours, minutes, seconds); } else if(hours > 0) { return wi_string_with_format(WI_STR("%.2u:%.2u:%.2u hours"), hours, minutes, seconds); } else if(minutes > 0) { return wi_string_with_format(WI_STR("%.2u:%.2u minutes"), minutes, seconds); } else { return wi_string_with_format(WI_STR("00:%.2u seconds"), seconds); } }
static wi_string_t * _wi_set_description(wi_runtime_instance_t *instance) { wi_set_t *set = instance; _wi_set_bucket_t *bucket; wi_string_t *string, *description; wi_uinteger_t i; string = wi_string_with_format(WI_STR("<%@ %p>{count = %lu, values = (\n"), wi_runtime_class_name(set), set, set->data_count); for(i = 0; i < set->buckets_count; i++) { for(bucket = set->buckets[i]; bucket; bucket = bucket->next) { if(set->callbacks.description) description = (*set->callbacks.description)(bucket->data); else description = wi_string_with_format(WI_STR("%p"), bucket->data); wi_string_append_format(string, WI_STR(" %@\n"), description); } } wi_string_append_string(string, WI_STR(")}")); return string; }
void wr_draw_transfers(wi_boolean_t force) { static wi_time_interval_t update; wi_enumerator_t *enumerator; wi_mutable_string_t *string; wi_string_t *status; wr_transfer_t *transfer; wi_time_interval_t interval; wi_uinteger_t i = 0; interval = wi_time_interval(); if(!force && interval - update < 1.0) return; update = interval; wi_terminal_set_scroll(wr_terminal, wi_make_range(1 + wi_array_count(wr_transfers), wi_terminal_size(wr_terminal).height - 4)); enumerator = wi_array_data_enumerator(wr_transfers); while((transfer = wi_enumerator_next_data(enumerator))) { wi_terminal_move(wr_terminal, wi_make_point(0, i + 1)); wi_terminal_clear_line(wr_terminal); if(transfer->state == WR_TRANSFER_RUNNING && interval - transfer->start_time > 0.0) { transfer->speed = ((double) transfer->total_transferred - transfer->total_offset) / (interval - transfer->start_time); status = wi_string_with_format(WI_STR("%@/%@, %@/s"), wr_files_string_for_size(transfer->total_transferred), wr_files_string_for_size(transfer->total_size), wr_files_string_for_size(transfer->speed)); } else if(transfer->state == WR_TRANSFER_QUEUED) { status = wi_string_with_format(WI_STR("queued at %u"), transfer->queue); } else { status = wi_string_with_cstring("waiting"); } string = wi_mutable_string_with_format(WI_STR("%u %3.0f%% %@"), transfer->tid, transfer->total_size > 0 ? 100 * ((double) transfer->total_transferred / (double) transfer->total_size) : 0, transfer->name); wi_terminal_adjust_string_to_fit_width(wr_terminal, string); wi_mutable_string_delete_characters_from_index(string, wi_string_length(string) - wi_string_length(status)); wi_mutable_string_append_string(string, status); wi_terminal_printf(wr_terminal, WI_STR("%@"), string); i++; } wr_terminal_reset_location(); }
void wr_draw_transfers(wi_boolean_t force) { static wi_time_interval_t update; wi_list_node_t *node; wi_string_t *string, *status; wr_transfer_t *transfer; wi_time_interval_t interval; unsigned int i = 0; interval = wi_time_interval(); if(!force && interval - update < 1.0) return; update = interval; wi_terminal_set_scroll(wr_terminal, wi_make_range(1 + wi_list_count(wr_transfers), wi_terminal_size(wr_terminal).height - 3)); WI_LIST_FOREACH(wr_transfers, node, transfer) { wi_terminal_move(wr_terminal, wi_make_point(0, i + 1)); wi_terminal_clear_line(wr_terminal); if(transfer->state == WR_TRANSFER_RUNNING && interval - transfer->start_time > 0.0) { transfer->speed = ((double) transfer->transferred - transfer->offset) / (interval - transfer->start_time); status = wi_string_with_format(WI_STR("%@/%@, %@/s"), wr_files_string_for_size(transfer->transferred), wr_files_string_for_size(transfer->size), wr_files_string_for_size(transfer->speed)); } else if(transfer->state == WR_TRANSFER_QUEUED) { status = wi_string_with_format(WI_STR("queued at %u"), transfer->queue); } else { status = wi_string_with_cstring("waiting"); } string = wi_string_with_format(WI_STR("%u %3.0f%% %@"), transfer->tid, transfer->size > 0 ? 100 * ((double) transfer->transferred / (double) transfer->size) : 0, transfer->name); wi_terminal_adjust_string_to_fit_width(wr_terminal, string); wi_string_delete_characters_from_index(string, wi_string_length(string) - wi_string_length(status)); wi_string_append_string(string, status); wi_terminal_printf(wr_terminal, WI_STR("%@"), string); i++; }
static void wr_command_save(wi_array_t *arguments) { wi_file_t *file; wi_string_t *path, *login, *password, *port; path = wi_user_home(); path = wi_string_by_appending_path_component(path, WI_STR(WB_WIREBOT_USER_PATH)); path = wi_string_by_appending_path_component(path, WI_ARRAY(arguments, 0)); file = wi_file_for_writing(path); if(!file) { wr_printf_prefix(WI_STR("save: %@: %m"), path); return; } wi_file_write_format(file, WI_STR("charset %@\n"), wi_string_encoding_charset(wr_client_string_encoding)); wi_file_write_format(file, WI_STR("timestamp %@\n"), wr_timestamp_format); wi_file_write_format(file, WI_STR("nick %@\n"), wr_nick); if(wi_string_length(wr_status) > 0) wi_file_write_format(file, WI_STR("status %@\n"), wr_status); if(wr_icon_path) wi_file_write_format(file, WI_STR("icon %@\n"), wr_icon_path); if(wr_connected) { if(wi_string_length(wi_p7_socket_user_name(wr_p7_socket)) > 0) login = wi_string_with_format(WI_STR("-l %@"), wi_p7_socket_user_name(wr_p7_socket)); else login = NULL; if(wi_string_length(wr_password) > 0) password = wi_string_with_format(WI_STR("-p %@"), wr_password); else password = NULL; if(wi_address_port(wi_socket_address(wr_socket)) != WR_PORT) port = wi_string_with_format(WI_STR("-P %u"), wi_address_port(wi_socket_address(wr_socket))); else port = NULL; wi_file_write_format(file, WI_STR("open %#@ %#@ %#@ %@\n"), login, password, port, wi_address_string(wi_socket_address(wr_socket))); } wr_printf_prefix(WI_STR("save: \"%@\" saved"), path); }
static wi_string_t * _wi_address_description(wi_runtime_instance_t *instance) { wi_address_t *address = instance; wi_string_t *family; switch(wi_address_family(address)) { case WI_ADDRESS_IPV4: family = WI_STR("ipv4"); break; case WI_ADDRESS_IPV6: family = WI_STR("ipv6"); break; case WI_ADDRESS_NULL: default: family = WI_STR("none"); break; } return wi_string_with_format(WI_STR("<%@ %p>{family = %@, address = %@, port = %lu}"), wi_runtime_class_name(address), address, family, wi_address_string(address), wi_address_port(address)); }
void wi_test_string_format(void) { WI_TEST_ASSERT_EQUAL_INSTANCES( wi_string_with_format(WI_STR("'%d' '%u' '%p' '%.5f' '%@' '%@' '%#@' '%s' '%s' '%#s'"), -5, 5, 0xAC1DFEED, 3.1415926, WI_STR("hello world"), NULL, NULL, "hello world", NULL, NULL), WI_STR("'-5' '5' '0xac1dfeed' '3.14159' 'hello world' '(null)' '' 'hello world' '(null)' ''"), ""); }
static wi_string_t * _wi_file_description(wi_runtime_instance_t *instance) { wi_file_t *file = instance; return wi_string_with_format(WI_STR("<%s %p>{descriptor = %d}"), wi_runtime_class_name(file), file, file->fd); }
static wi_string_t * _wi_x509_description(wi_runtime_instance_t *instance) { wi_x509_t *x509 = instance; return wi_string_with_format(WI_STR("<%@ %p>{x509 = %p}"), wi_runtime_class_name(x509), x509, x509->x509); }
static wi_string_t * _wi_timer_description(wi_runtime_instance_t *instance) { wi_timer_t *timer = instance; return wi_string_with_format(WI_STR("<%@ %p>{interval = %.2fs}"), wi_runtime_class_name(instance), instance, timer->interval); }
static wi_string_t * wd_transfer_description(wi_runtime_instance_t *instance) { wd_transfer_t *transfer = instance; return wi_string_with_format(WI_STR("<%@ %p>{path = %@}"), wi_runtime_class_name(transfer), transfer, transfer->path); }
static wi_string_t * _wi_date_description(wi_runtime_instance_t *instance) { wi_date_t *date = instance; return wi_string_with_format(WI_STR("<%s %p>{interval = %.2f}"), wi_runtime_class_name(date), date, date->interval); }
static wi_string_t * wd_client_info_description(wi_runtime_instance_t *instance) { wd_client_info_t *client_info = instance; return wi_string_with_format(WI_STR("<%@ %p>{%@}"), wi_runtime_class_name(client_info), client_info, wd_client_info_string(client_info)); }
static wi_string_t * _wi_enumerator_description(wi_runtime_instance_t *instance) { wi_enumerator_t *enumerator = instance; return wi_string_with_format(WI_STR("<%@ %p>{collection = %@}"), wi_runtime_class_name(enumerator), enumerator, enumerator->collection); }
static wi_string_t * _wi_uuid_description(wi_runtime_instance_t *instance) { wi_uuid_t *uuid = instance; return wi_string_with_format(WI_STR("<%@ %p>{string = %@}"), wi_runtime_class_name(uuid), uuid, _wi_uuid_string(uuid)); }
static wi_string_t * wb_command_description(wi_runtime_instance_t *instance) { wb_command_t * command = instance; wi_string_t * string; string = wi_string_with_format(WI_STR("Command: [!%@] -> %@"), command->name, command->permissions); return string; }
static wi_string_t * _wi_date_description(wi_runtime_instance_t *instance) { wi_date_t *date = instance; return wi_string_with_format(WI_STR("<%@ %p>{date = %@}"), wi_runtime_class_name(date), date, wi_time_interval_string_with_format(date->interval, WI_STR("%Y-%m-%d %H:%M:%S %z"))); }
static wi_string_t * _wi_string_encoding_description(wi_runtime_instance_t *instance) { wi_string_encoding_t *encoding = instance; return wi_string_with_format(WI_STR("<%@ %p>{encoding = %@}"), wi_runtime_class_name(encoding), encoding, encoding->target_encoding); }
static wi_string_t * _wi_process_description(wi_runtime_instance_t *instance) { wi_process_t *process = instance; return wi_string_with_format(WI_STR("<%@ %p>{name = %@, arguments = %@}"), wi_runtime_class_name(process), process, process->name, process->arguments); }
static wi_string_t * _wi_socket_description(wi_runtime_instance_t *instance) { wi_socket_t *socket = instance; return wi_string_with_format(WI_STR("<%@ %p>{sd = %d, address = %@}"), wi_runtime_class_name(socket), socket, socket->sd, socket->address); }
static wi_string_t * _wi_p7_socket_description(wi_runtime_instance_t *instance) { wi_p7_socket_t *p7_socket = instance; return wi_string_with_format(WI_STR("<%@ %p>{options = 0x%X, socket = %@}"), wi_runtime_class_name(p7_socket), p7_socket, p7_socket->options, p7_socket->socket); }
static wi_string_t * wr_user_description(wi_runtime_instance_t *instance) { wr_user_t *user = instance; return wi_string_with_format(WI_STR("<%@ %p>{uid = %u, nick = %@}"), wi_runtime_class_name(user), user, user->uid, user->nick); }
static wi_string_t * _wi_rsa_description(wi_runtime_instance_t *instance) { wi_rsa_t *rsa = instance; return wi_string_with_format(WI_STR("<%@ %p>{key = %p, bits = %lu}"), wi_runtime_class_name(rsa), rsa, rsa->rsa, wi_rsa_bits(rsa)); }
static wi_string_t * wd_tempban_description(wi_runtime_instance_t *instance) { wd_tempban_t *tempban = instance; return wi_string_with_format(WI_STR("<%@ %p>{ip = %@, time_remaining = %.0f}"), wi_runtime_class_name(tempban), tempban, tempban->ip, wi_time_interval() - tempban->interval); }
wi_string_t * wd_user_identifier(wd_user_t *user) { wi_string_t *identifier; wi_recursive_lock_lock(user->user_lock); identifier = wi_string_with_format(WI_STR("%@/%@/%@"), user->nick, user->login, user->ip); wi_recursive_lock_unlock(user->user_lock); return identifier; }
static wi_string_t * wd_chat_description(wi_runtime_instance_t *instance) { wd_chat_t *chat = instance; return wi_string_with_format(WI_STR("<%@ %p>{cid = %u, users = %@}"), wi_runtime_class_name(chat), chat, chat->cid, chat->users); }
static wi_string_t * wd_user_description(wi_runtime_instance_t *instance) { wd_user_t *user = instance; return wi_string_with_format(WI_STR("<%@ %p>{nick = %@, login = %@, ip = %@}"), wi_runtime_class_name(user), user, user->nick, user->login, user->ip); }
static wi_string_t * wd_tracker_description(wi_runtime_instance_t *instance) { wd_tracker_t *tracker = instance; return wi_string_with_format(WI_STR("<%@ %p>{host = %@, category = %@, active = %d}"), wi_runtime_class_name(tracker), tracker, tracker->host, tracker->category, tracker->active); }