Пример #1
0
char			*argument_completion(char *str, char *cmd)
{
	int			i;
	char		*result;
	int			v;
	char		*name;
	glob_t		list;

	i = ft_strlen(str);
	while (str[i] != ' ' && i > 0)
		--i;
	name = ft_strjoin(str, "*");
	glob(name, GLOB_NOCHECK, 0, &list);
	v = 0;
	if (list.gl_pathc == 0)
	{
		globfree(&list);
		return (NULL);
	}
	result = search_argument(list.gl_pathv, str, &v);
	if (v == 1)
		return (return_arguments(result, str, list, cmd));
	show_argument_completion(list.gl_pathv, str);
	globfree(&list);
	return (ft_strdup("ok"));
}
Пример #2
0
/**
 * 格式化错误信息
 * @param format [description]
 * @param v      [description]
 * @param ap     [description]
 */
static void format_message(MessageFormat *format, VString *v, va_list ap){
        int i;
        char buf[LINE_BUF_SIZE];
        int arg_name_index;
        char arg_name[LINE_BUF_SIZE];
        MessageArgument arg[MESSAGE_ARGUMENT_MAX];
        MessageArgument cur_arg;


        create_message_argument(arg, ap);

        for (i = 0; format->format[i] != '\0'; i++) {
                if (format->format[i] != '$') {
                        add_character(v, format->format[i]);
                        continue;
                }

                assert(format->format[i + 1] == '(');

                i += 2;

                for (arg_name_index = 0;
                     format->format[i] != ')';
                     arg_name_index++, i++) {
                        arg_name[arg_name_index] = format->format[i];
                }

                arg_name[arg_name_index] = '\0';
                assert(format->format[i] == ')');

                search_argument(arg, arg_name, &cur_arg);

                switch (cur_arg.type) {
                case INT_MESSAGE_ARGUMENT:
                        sprintf(buf, "%d", cur_arg.u.int_val);
                        add_string(v, buf);
                        break;
                case DOUBLE_MESSAGE_ARGUMENT:
                        sprintf(buf, "%f", cur_arg.u.double_val);
                        add_string(v, buf);
                        break;
                case STRING_MESSAGE_ARGUMENT:
                        strcpy(buf, cur_arg.u.string_val);
                        add_string(v, cur_arg.u.string_val);
                        break;
                case POINTER_MESSAGE_ARGUMENT:
                        sprintf(buf, "%c", cur_arg.u.character_val);
                        add_string(v, buf);
                        break;
                case MESSAGE_ARGUMENT_END:
                        assert(0);
                        break;
                default:
                        assert(0);
                }
        }
}
Пример #3
0
static void
format_message(int line_number, ErrorDefinition *format, VWString *v,
               va_list ap)
{
    int         i;
    char        buf[LINE_BUF_SIZE];
    DVM_Char    wc_buf[LINE_BUF_SIZE];
    int         arg_name_index;
    char        arg_name[LINE_BUF_SIZE];
    MessageArgument     arg[MESSAGE_ARGUMENT_MAX];
    MessageArgument     cur_arg;
    DVM_Char    *wc_format;

    create_message_argument(arg, ap);

    wc_format = dkc_mbstowcs_alloc(line_number, format->format);
    DBG_assert(wc_format != NULL, ("wc_format is null.\n"));
    
    for (i = 0; wc_format[i] != L'\0'; i++) {
        if (wc_format[i] != L'$') {
            dkc_vwstr_append_character(v, wc_format[i]);
            continue;
        }
        assert(wc_format[i+1] == L'(');
        i += 2;
        for (arg_name_index = 0; wc_format[i] != L')';
             arg_name_index++, i++) {
            arg_name[arg_name_index] = dvm_wctochar(wc_format[i]);
        }
        arg_name[arg_name_index] = '\0';
        assert(wc_format[i] == L')');

        search_argument(arg, arg_name, &cur_arg);
        switch (cur_arg.type) {
        case INT_MESSAGE_ARGUMENT:
            sprintf(buf, "%d", cur_arg.u.int_val);
            dvm_mbstowcs(buf, wc_buf);
            dkc_vwstr_append_string(v, wc_buf);
            break;
        case DOUBLE_MESSAGE_ARGUMENT:
            sprintf(buf, "%f", cur_arg.u.double_val);
            dvm_mbstowcs(buf, wc_buf);
            dkc_vwstr_append_string(v, wc_buf);
            break;
        case STRING_MESSAGE_ARGUMENT:
            dvm_mbstowcs(cur_arg.u.string_val, wc_buf);
            dkc_vwstr_append_string(v, wc_buf);
            break;
        case POINTER_MESSAGE_ARGUMENT:
            sprintf(buf, "%p", cur_arg.u.pointer_val);
            dvm_mbstowcs(buf, wc_buf);
            dkc_vwstr_append_string(v, wc_buf);
            break;
        case CHARACTER_MESSAGE_ARGUMENT:
            sprintf(buf, "%c", cur_arg.u.character_val);
            dvm_mbstowcs(buf, wc_buf);
            dkc_vwstr_append_string(v, wc_buf);
            break;
        case MESSAGE_ARGUMENT_END:
            assert(0);
            break;
        default:
            assert(0);
        }
    }
    MEM_free(wc_format);
}