Exemplo n.º 1
0
wi_terminal_buffer_t * wi_terminal_buffer_init_with_terminal(wi_terminal_buffer_t *buffer, wi_terminal_t *terminal) {
	buffer->terminal	= terminal;
	buffer->textbuffer	= wi_string_init_with_capacity(wi_string_alloc(), _WI_TERMINAL_TEXTBUFFER_CAPACITY);
	buffer->linebuffer	= wi_array_init_with_capacity(wi_array_alloc(), _WI_TERMINAL_LINEBUFFER_CAPACITY);
	
	return buffer;
}
Exemplo n.º 2
0
wi_array_t * wi_file_directory_contents_at_path(wi_string_t *path) {
	wi_array_t		*contents;
	wi_string_t		*name;
	DIR				*dir;
	struct dirent	de, *dep;
	
	dir = opendir(wi_string_cstring(path));
	
	if(!dir) {
		wi_error_set_errno(errno);
		
		return NULL;
	}
	
	contents = wi_array_init_with_capacity(wi_array_alloc(), 100);
	
	while(readdir_r(dir, &de, &dep) == 0 && dep) {
		if(strcmp(dep->d_name, ".") != 0 && strcmp(dep->d_name, "..") != 0) {
			name = wi_string_init_with_cstring(wi_string_alloc(), dep->d_name);
			wi_array_add_data(contents, name);
			wi_release(name);
		}
	}

	closedir(dir);
	
	return wi_autorelease(contents);
}
Exemplo n.º 3
0
wi_terminal_t * wi_terminal_init_with_type(wi_terminal_t *terminal, wi_string_t *type) {
	char		*env;
	int			err, co, li;
	
	err = tgetent(NULL, wi_string_cstring(type));
	
	if(err <= 0) {
		if(err == 0)
			wi_error_set_lib_error(WI_ERROR_TERMCAP_NOSUCHENTRY);
		else
			wi_error_set_lib_error(WI_ERROR_TERMCAP_TERMINFONOTFOUND);

		wi_release(terminal);
		
		return NULL;
	}

	env = getenv("COLUMNS");
	co = env ? strtol(env, NULL, 10) : tgetnum("co");
	terminal->co = (co <= 0) ? 80 : co;

	env = getenv("LINES");
	li = env ? strtol(env, NULL, 10) : tgetnum("li");
	terminal->li = (li <= 0) ? 24 : li;

	terminal->ce = (char *) tgetstr("ce", NULL);
	terminal->cl = (char *) tgetstr("cl", NULL);
	terminal->cm = (char *) tgetstr("cm", NULL);
	terminal->cs = (char *) tgetstr("cs", NULL);
	
	terminal->scroll = wi_make_range(0, terminal->li);
	terminal->buffers = wi_array_init_with_capacity(wi_array_alloc(), 10);
	
	return terminal;
}
Exemplo n.º 4
0
wi_array_t * wi_array_init_with_data_and_count(wi_array_t *array, void **data, wi_uinteger_t count) {
	wi_uinteger_t		i;
	
	array = wi_array_init_with_capacity(array, count);

	for(i = 0; i < count; i++)
		wi_array_add_data(array, data[i]);
	
	return array;
}
Exemplo n.º 5
0
wi_array_t * wi_array_init_with_list(wi_array_t *array, wi_list_t *list) {
	wi_list_node_t	*node;
	void			*data;
	
	array = wi_array_init_with_capacity(array, wi_list_count(list));
	
	WI_LIST_FOREACH(list, node, data)
		wi_array_add_data(array, data);
	
	return array;
}
Exemplo n.º 6
0
wi_array_t * wi_array_init_with_data(wi_array_t *array, ...) {
	void		*data;
	va_list		ap;

	array = wi_array_init_with_capacity(array, 0);

	va_start(ap, array);
	while((data = va_arg(ap, void *)))
		wi_array_add_data(array, data);
	va_end(ap);

	return array;
}
Exemplo n.º 7
0
wi_array_t * wi_array_subarray_with_range(wi_array_t *array, wi_range_t range) {
	wi_array_t		*newarray;
	wi_uinteger_t	i;
	
	_WI_ARRAY_INDEX_ASSERT(array, range.location);
	_WI_ARRAY_INDEX_ASSERT(array, range.location + range.length - 1);
	
	newarray = wi_array_init_with_capacity(wi_array_alloc(), range.length);
	
	for(i = range.location; i < range.location + range.length; i++)
		wi_array_add_data(newarray, WI_ARRAY(array, i));

	return wi_autorelease(newarray);
}
Exemplo n.º 8
0
wi_array_t * wi_array_init_with_argv(wi_array_t *array, int argc, const char **argv) {
	wi_string_t		*string;
	int				i;
	
	array = wi_array_init_with_capacity(array, argc);
	
	for(i = 0; i < argc; i++) {
		string = wi_string_init_with_cstring(wi_string_alloc(), argv[i]);
		wi_array_add_data(array, string);
		wi_release(string);
	}
	
	return array;
}
Exemplo n.º 9
0
wi_array_t * wi_array_with_data(void *data0, ...) {
	wi_array_t	*array;
	void		*data;
	va_list		ap;

	array = wi_array_init_with_capacity(wi_array_alloc(), 0);

	wi_array_add_data(array, data0);

	va_start(ap, data0);
	while((data = va_arg(ap, void *)))
		wi_array_add_data(array, data);
	va_end(ap);

	return wi_autorelease(array);
}
Exemplo n.º 10
0
wi_array_t * wi_backtrace(void) {
#ifdef HAVE_BACKTRACE
    wi_mutable_array_t  *array;
    void                *callstack[128];
    char                **symbols;
    int                 i, frames;
    
    frames      = backtrace(callstack, sizeof(callstack));
    symbols     = backtrace_symbols(callstack, frames);
    array       = wi_array_init_with_capacity(wi_mutable_array_alloc(), frames);
    
    for(i = 0; i < frames; i++)
        wi_mutable_array_add_data(array, wi_string_with_utf8_string(symbols[i]));
    
    free(symbols);
    
    wi_runtime_make_immutable(array);
    
    return wi_autorelease(array);
#else
    return NULL;
#endif
}
Exemplo n.º 11
0
void wi_socket_initialize(void) {
#ifdef HAVE_OPENSSL_SSL_H
#ifdef WI_PTHREADS
	wi_lock_t		*lock;
	wi_uinteger_t	i, count;
#endif

	SSL_library_init();

#ifdef WI_PTHREADS
	count = CRYPTO_num_locks();
	_wi_socket_ssl_locks = wi_array_init_with_capacity(wi_array_alloc(), count);
	
	for(i = 0; i < count; i++) {
		lock = wi_lock_init(wi_lock_alloc());
		wi_array_add_data(_wi_socket_ssl_locks, lock);
		wi_release(lock);
	}

	CRYPTO_set_id_callback(_wi_socket_ssl_id_function);
	CRYPTO_set_locking_callback(_wi_socket_ssl_locking_function);
#endif
#endif
}
Exemplo n.º 12
0
wi_array_t * wi_array_init_with_argument_string(wi_array_t *array, wi_string_t *string, wi_integer_t index) {
	wi_string_t		*data;
	const char		*cstring;
	char			*buffer, *end;
	wi_uinteger_t	count;
	wi_boolean_t	squote, dquote, bsquote;
	
	array		= wi_array_init_with_capacity(array, 0);
	cstring		= wi_string_cstring(string);
	buffer		= wi_malloc(strlen(cstring) + 1);
	count		= 0;

	squote = dquote = bsquote = false;

	while(*cstring) {
		if(index < 0 || (index >= 0 && count != (wi_uinteger_t) index)) {
			while(isspace(*cstring))
				cstring++;
		}
		
		end = buffer;
		
		while(*cstring) {
			if(index >= 0 && count == (wi_uinteger_t) index) {
				*end++ = *cstring++;
				
				continue;
			}

			if(isspace(*cstring) && !squote && !dquote && !bsquote)
				break;
			
			if(bsquote) {
				bsquote = false;
				*end++ = *cstring;
			}
			else if(squote) {
				if(*cstring == '\'')
					squote = false;
				else
					*end++ = *cstring;
			}
			else if(dquote) {
				if(*cstring == '"')
					dquote = false;
				else
					*end++ = *cstring;
			}
			else {
				if(*cstring == '\'')
					squote = true;
				else if(*cstring == '"')
					dquote = true;
				else if(*cstring == '\\')
					bsquote = true;
				else
					*end++ = *cstring;
			}
			
			cstring++;
		}
		
		*end = '\0';
		
		data = wi_string_init_with_cstring(wi_string_alloc(), buffer);
		wi_array_add_data(array, data);
		wi_release(data);
		
		count++;
		
		while(isspace(*cstring))
			cstring++;
	}
	
	wi_free(buffer);
	
	return array;
}
Exemplo n.º 13
0
wi_array_t * wi_array_init(wi_array_t *array) {
	return wi_array_init_with_capacity(array, 0);
}