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(); }
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); }
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; }
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; }
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; }
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); }
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); }
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(); } }
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; }
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; } } }