示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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);
	}
}
示例#4
0
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;
}
示例#5
0
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();
}
示例#6
0
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++;
	}
示例#7
0
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);
}
示例#8
0
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));
}
示例#9
0
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)' ''"),
		"");
}
示例#10
0
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);
}
示例#11
0
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);
}
示例#12
0
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);
}
示例#13
0
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);
}
示例#14
0
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);
}
示例#15
0
文件: users.c 项目: ProfDrLuigi/wired
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));
}
示例#16
0
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);
}
示例#17
0
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));
}
示例#18
0
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;
}
示例#19
0
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")));
}
示例#20
0
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);
}
示例#21
0
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);
}
示例#22
0
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);
}
示例#23
0
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);
}
示例#24
0
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);
}
示例#25
0
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));
}
示例#26
0
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);
}
示例#27
0
文件: users.c 项目: ProfDrLuigi/zanka
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;
}
示例#28
0
文件: chats.c 项目: ProfDrLuigi/zanka
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);
}
示例#29
0
文件: users.c 项目: ProfDrLuigi/zanka
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);
}
示例#30
0
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);
}