コード例 #1
0
ファイル: commands.c プロジェクト: ProfDrLuigi/zanka
static void wd_cmd_say(wi_array_t *arguments) {
	wd_client_t		*client = wd_client();
	wi_array_t		*array;
	wi_string_t		*string;
	wd_chat_t		*chat;
	wd_cid_t		cid;
	unsigned int	i, count;

	cid = wi_string_uint32(WI_ARRAY(arguments, 0));
	chat = wd_chat_with_cid(cid);
	
	if(!chat)
		return;

	if(!wd_chat_contains_client(chat, client))
		return;

	array = wi_string_components_separated_by_string(WI_ARRAY(arguments, 1), WI_STR("\n\r"));
	count = wi_array_count(array);
	
	wd_broadcast_lock();
	for(i = 0; i < count; i++) {
		string = WI_ARRAY(array, i);
		
		if(wi_string_length(string) > 0) {
			wd_broadcast(cid, 300, WI_STR("%u%c%u%c%#@"),
						 cid,			WD_FIELD_SEPARATOR,
						 client->uid,	WD_FIELD_SEPARATOR,
						 string);
		}
	}
	wd_broadcast_unlock();
}
コード例 #2
0
ファイル: wi-terminal.c プロジェクト: Patater/libwired
static wi_mutable_array_t * _wi_terminal_buffer_lines_for_string(wi_terminal_buffer_t *buffer, wi_string_t *string) {
	wi_enumerator_t			*enumerator;
	wi_mutable_array_t		*array;
	wi_mutable_string_t		*newstring;
 	wi_string_t				*line, *subline;
	wi_size_t				size;
	wi_uinteger_t			index;
	
	array		= wi_array_init(wi_mutable_array_alloc());
	size		= wi_terminal_size(buffer->terminal);
	enumerator	= wi_array_data_enumerator(wi_string_components_separated_by_string(string, WI_STR("\n")));
	
	while((line = wi_enumerator_next_data(enumerator))) {
		if(wi_terminal_width_of_string(buffer->terminal, line) < size.width) {
			wi_mutable_array_add_data(array, line);
		} else {
			newstring = wi_mutable_copy(line);
			
			do {
				index		= wi_terminal_index_of_string_for_width(buffer->terminal, newstring, size.width);
				subline		= wi_string_substring_to_index(newstring, index);

				wi_mutable_array_add_data(array, subline);
				wi_mutable_string_delete_characters_to_index(newstring, wi_string_length(subline));
			} while(wi_terminal_width_of_string(buffer->terminal, newstring) >= size.width);
			
			wi_mutable_array_add_data(array, newstring);
			wi_release(newstring);
		}
	}
	
	return wi_autorelease(array);
}
コード例 #3
0
ファイル: wi-terminal.c プロジェクト: ProfDrLuigi/zanka
static wi_array_t * _wi_terminal_buffer_lines_for_string(wi_terminal_buffer_t *buffer, wi_string_t *string) {
	wi_array_t		*array, *linearray;
 	wi_string_t		*string_copy, *line, *subline;
	wi_size_t		size;
	uint32_t		i, count, index;
	
	array		= wi_array_init(wi_array_alloc());
	size		= wi_terminal_size(buffer->terminal);
	linearray	= wi_string_components_separated_by_string(string, WI_STR("\n"));
	count		= wi_array_count(linearray);
	
	for(i = 0; i < count; i++) {
		line = WI_ARRAY(linearray, i);
		
		if(wi_terminal_width_of_string(buffer->terminal, line) < size.width) {
			wi_array_add_data(array, line);
		} else {
			string_copy = wi_copy(line);
			
			do {
				index	= wi_terminal_index_of_string_for_width(buffer->terminal, string_copy, size.width);
				subline	= wi_string_substring_to_index(string_copy, index);

				wi_array_add_data(array, subline);
				wi_string_delete_characters_to_index(string_copy, wi_string_length(subline));
			} while(wi_terminal_width_of_string(buffer->terminal, string_copy) >= size.width);
			
			wi_array_add_data(array, string_copy);
			wi_release(string_copy);
		}
	}
	
	return array;
}
コード例 #4
0
ファイル: wi-array.c プロジェクト: ProfDrLuigi/zanka
wi_array_t * wi_array_init_with_string(wi_array_t *array, wi_string_t *string, wi_string_t *separator) {
	if(wi_string_length(string) == 0) {
		array = wi_array_init_with_data(array, WI_STR(""), (void *) NULL);
	} else {
		wi_release(array);
		
		array = wi_retain(wi_string_components_separated_by_string(string, separator));
	}
	
	return array;
}
コード例 #5
0
ファイル: wi-config.c プロジェクト: asvitkine/phxd
static wi_boolean_t _wi_config_parse_string(wi_config_t *config, wi_string_t *string, wi_string_t **name, wi_string_t **value) {
	wi_array_t		*array;
	
	array = wi_string_components_separated_by_string(string, WI_STR("="));
	
	if(wi_array_count(array) != 2)
		return false;
	
	*name = wi_string_by_deleting_surrounding_whitespace(WI_ARRAY(array, 0));
	*value = wi_string_by_deleting_surrounding_whitespace(WI_ARRAY(array, 1));
	
	return true;
}
コード例 #6
0
ファイル: windows.c プロジェクト: ProfDrLuigi/zanka
void wr_wprintf_block(wr_window_t *window, wi_string_t *fmt, ...) {
	wi_enumerator_t	*enumerator;
	wi_string_t		*string, *line;
	va_list			ap;

	va_start(ap, fmt);
	string = wi_string_init_with_format_and_arguments(wi_string_alloc(), fmt, ap);
	va_end(ap);

	enumerator = wi_array_data_enumerator(wi_string_components_separated_by_string(string, WI_STR("\n")));
	
	while((line = wi_enumerator_next_data(enumerator)))
		wr_wprintf(window, WI_STR("   %@"), line);

	wi_release(string);
}
コード例 #7
0
ファイル: windows.c プロジェクト: ProfDrLuigi/zanka
void wr_wprintf_block(wr_window_t *window, wi_string_t *fmt, ...) {
	wi_array_t		*array;
	wi_string_t		*string;
	va_list			ap;
	unsigned int	i, count;

	va_start(ap, fmt);
	string = wi_string_init_with_format_and_arguments(wi_string_alloc(), fmt, ap);
	va_end(ap);

	array = wi_string_components_separated_by_string(string, WI_STR("\n"));
	count = wi_array_count(array);
	
	for(i = 0; i < count; i++)
		wr_wprintf(window, WI_STR("   %@"), WI_ARRAY(array, i));

	wi_release(string);
}
コード例 #8
0
ファイル: wi-wired.c プロジェクト: asvitkine/phxd
void wi_parse_wired_command(wi_string_t *buffer, wi_string_t **out_command, wi_array_t **out_arguments) {
	wi_string_t		*string, *substring;
	wi_uinteger_t	index;
	
	index = wi_string_index_of_string(buffer, WI_STR(_WI_WIRED_MESSAGE_SEPARATOR), WI_STRING_BACKWARDS);
	
	if(index != WI_NOT_FOUND)
		string = wi_string_by_deleting_characters_from_index(buffer, index);
	else
		string = wi_autorelease(wi_copy(buffer));
	
	index = wi_string_index_of_string(string, WI_STR(" "), 0);
	
	if(index != WI_NOT_FOUND) {
		*out_command	= wi_string_substring_to_index(string, index);
		substring		= wi_string_substring_from_index(string, index + 1);
		*out_arguments	= wi_string_components_separated_by_string(substring, WI_STR(_WI_WIRED_FIELD_SEPARATOR));
	} else {
		*out_command	= string;
		*out_arguments	= wi_array();
	}
}
コード例 #9
0
ファイル: wi-settings.c プロジェクト: ProfDrLuigi/zanka
static wi_boolean_t _wi_settings_parse_setting(wi_settings_t *settings, wi_string_t *string) {
	wi_array_t		*array;
	wi_string_t		*name, *value;
	wi_boolean_t	result = false;
	
	array = wi_string_components_separated_by_string(string, WI_STR("="));
	
	if(wi_array_count(array) != 2) {
		wi_error_set_lib_error(WI_ERROR_SETTINGS_SYNTAXERROR);
		
		_wi_settings_log_error(settings, string);

		return false;
	}
	
	name	= wi_string_by_deleting_surrounding_whitespace(WI_ARRAY(array, 0));
	value	= wi_string_by_deleting_surrounding_whitespace(WI_ARRAY(array, 1));
	result	= _wi_settings_set_value(settings, name, value);
	
	if(!result)
		_wi_settings_log_error(settings, name);

	return result;
}
コード例 #10
0
ファイル: client.c プロジェクト: ProfDrLuigi/zanka
static void wr_msg_308(wi_array_t *arguments) {
	wi_enumerator_t		*enumerator;
	wi_date_t			*date;
	wi_array_t			*array, *transfers;
	wi_string_t			*string, *interval, *name, *transferred, *size, *speed;
	wi_uinteger_t		n;
	wi_boolean_t		first;
	
	wr_printf_prefix(WI_STR("User info:"),
		WI_ARRAY(arguments, 4));

	wr_printf_block(WI_STR("Nick:        %@"), WI_ARRAY(arguments, 4));

	if(wr_server->protocol >= 1.1)
		wr_printf_block(WI_STR("Status:      %@"), WI_ARRAY(arguments, 15));

	wr_printf_block(WI_STR("Login:       %@"), WI_ARRAY(arguments, 5));
	wr_printf_block(WI_STR("ID:          %@"), WI_ARRAY(arguments, 0));
	wr_printf_block(WI_STR("Address:     %@"), WI_ARRAY(arguments, 6));
	wr_printf_block(WI_STR("Host:        %@"), WI_ARRAY(arguments, 7));
	wr_printf_block(WI_STR("Client:      %@"), WI_ARRAY(arguments, 8));
	wr_printf_block(WI_STR("Cipher:      %@/%@ bits"), WI_ARRAY(arguments, 9), WI_ARRAY(arguments, 10));

	date = wi_date_with_rfc3339_string(WI_ARRAY(arguments, 11));
	interval = wi_time_interval_string(wi_date_time_interval_since_now(date));
    string = wi_date_string_with_format(date, WI_STR("%a %b %e %T %Y"));
	wr_printf_block(WI_STR("Login Time:  %@, since %@"), interval, string);

	date = wi_date_with_rfc3339_string(WI_ARRAY(arguments, 12));
	interval = wi_time_interval_string(wi_date_time_interval_since_now(date));
    string = wi_date_string_with_format(date, WI_STR("%a %b %e %T %Y"));
	wr_printf_block(WI_STR("Idle Time:   %@, since %@"), interval, string);
	
	for(n = WR_TRANSFER_DOWNLOAD; n <= WR_TRANSFER_UPLOAD; n++) {
		string		= WI_ARRAY(arguments, (n == WR_TRANSFER_DOWNLOAD) ? 13 : 14);
		transfers	= wi_string_components_separated_by_string(string, WI_STR(WR_GROUP_SEPARATOR_STR));
		enumerator	= wi_array_data_enumerator(transfers);
		first		= true;
		
		while((string = wi_enumerator_next_data(enumerator))) {
			array	= wi_string_components_separated_by_string(string, WI_STR(WR_RECORD_SEPARATOR_STR));
			
			if(wi_array_count(array) == 4) {
				name		= wi_string_last_path_component(WI_ARRAY(array, 0));
				transferred	= wr_files_string_for_size(wi_string_uint64(WI_ARRAY(array, 1)));
				size		= wr_files_string_for_size(wi_string_uint64(WI_ARRAY(array, 2)));
				speed		= wr_files_string_for_size(wi_string_uint32(WI_ARRAY(array, 3)));
				
				if(first) {
					if(n == WR_TRANSFER_DOWNLOAD) {
						wr_printf_block(WI_STR("Downloads:   %@, %@ of %@, %@/s"),
							name, transferred, size, speed);
					} else {
						wr_printf_block(WI_STR("Uploads:     %@, %@ of %@, %@/s"),
							name, transferred, size, speed);
					}
				} else {
					wr_printf_block(WI_STR("             %@, %@ of %@, %@/s"),
						name, transferred, size, speed);
				}
			}
			
			first = false;
		}
	}
}