214,7 → 214,7 |
|
while ((hint = cmdtab_search_one(name, &pos))) { |
if ((found == 0) || (str_length(output) > str_length(hint))) |
str_ncpy(output, hint, MAX_CMDLINE); |
str_cpy(output, MAX_CMDLINE, hint); |
|
pos = pos->next; |
found++; |
231,7 → 231,7 |
} |
|
if (found > 0) |
str_ncpy(input, output, size); |
str_cpy(input, size, output); |
|
return found; |
} |
245,7 → 245,7 |
current[0] = 0; |
|
while (true) { |
wchar_t ch = _getc(indev); |
wchar_t ch = indev_pop_character(indev); |
|
if (ch == '\n') { |
/* Enter */ |
302,6 → 302,16 |
if (found == 0) |
continue; |
|
if (found > 1) { |
/* No unique hint, list was printed */ |
printf("%s> ", prompt); |
printf("%ls", current); |
print_cc('\b', wstr_length(current) - position); |
continue; |
} |
|
/* We have a hint */ |
|
size_t off = 0; |
count_t i = 0; |
while ((ch = str_decode(tmp, &off, STR_NO_LIMIT)) != 0) { |
310,26 → 320,17 |
i++; |
} |
|
if ((str_length(tmp) > 0) || (found == 1)) { |
/* We have a hint */ |
printf("%ls", current + position); |
print_cc('\b', wstr_length(current) - position); |
position += str_length(tmp); |
|
if ((found == 1) && (position == wstr_length(current))) { |
if (wstr_linsert(current, ' ', position, MAX_CMDLINE)) { |
printf("%ls", current + position); |
position++; |
} |
printf("%ls", current + position); |
position += str_length(tmp); |
print_cc('\b', wstr_length(current) - position); |
|
if (position == wstr_length(current)) { |
/* Insert a space after the last completed argument */ |
if (wstr_linsert(current, ' ', position, MAX_CMDLINE)) { |
printf("%ls", current + position); |
position++; |
} |
} else { |
/* No unique hint, list was printed */ |
printf("%s> ", prompt); |
printf("%ls", current); |
position += str_length(tmp); |
} |
|
print_cc('\b', wstr_length(current) - position); |
continue; |
} |
|
438,7 → 439,7 |
|
if ((text[0] < '0') || (text[0] > '9')) { |
char symname[MAX_SYMBOL_NAME]; |
str_ncpy(symname, text, min(len + 1, MAX_SYMBOL_NAME)); |
str_ncpy(symname, MAX_SYMBOL_NAME, text, len + 1); |
|
uintptr_t symaddr; |
int rc = symtab_addr_lookup(symname, &symaddr); |
580,8 → 581,8 |
switch (cmd->argv[i].type) { |
case ARG_TYPE_STRING: |
buf = (char *) cmd->argv[i].buffer; |
str_ncpy(buf, cmdline + start, |
min((end - start) + 1, cmd->argv[i].len)); |
str_ncpy(buf, cmd->argv[i].len, cmdline + start, |
end - start); |
break; |
case ARG_TYPE_INT: |
if (!parse_int_arg(cmdline + start, end - start, |
592,8 → 593,9 |
if ((start < end - 1) && (cmdline[start] == '"')) { |
if (cmdline[end - 1] == '"') { |
buf = (char *) cmd->argv[i].buffer; |
str_ncpy(buf, cmdline + start + 1, |
min((end - start) - 1, cmd->argv[i].len)); |
str_ncpy(buf, cmd->argv[i].len, |
cmdline + start + 1, |
(end - start) - 1); |
cmd->argv[i].intval = (unative_t) buf; |
cmd->argv[i].vartype = ARG_TYPE_STRING; |
} else { |
651,7 → 653,7 |
printf("%s", msg); |
|
if (kcon) |
_getc(stdin); |
indev_pop_character(stdin); |
else |
printf("Type \"exit\" to leave the console.\n"); |
|