Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/console/kconsole.c

    raca4a04 r1066041  
    4343#include <console/chardev.h>
    4444#include <console/cmd.h>
    45 #include <console/prompt.h>
    4645#include <print.h>
    4746#include <panic.h>
     
    6059#include <putchar.h>
    6160#include <str.h>
     61#include <mm/slab.h>
    6262
    6363/** Simple kernel console.
     
    202202 *
    203203 */
    204 NO_TRACE static int cmdtab_compl(char *input, size_t size, indev_t * indev)
     204NO_TRACE static int cmdtab_compl(char *input, size_t size)
    205205{
    206206        const char *name = input;
    207207       
    208208        size_t found = 0;
    209         /* Maximum Match Length : Length of longest matching common substring in
    210            case more than one match is found */
    211         size_t max_match_len = size;
    212         size_t max_match_len_tmp = size;
    213         size_t input_len = str_length(input);
    214209        link_t *pos = NULL;
    215210        const char *hint;
    216211        char *output = malloc(MAX_CMDLINE, 0);
    217         size_t hints_to_show = MAX_TAB_HINTS - 1;
    218         size_t total_hints_shown = 0;
    219         bool continue_showing_hints = true;
    220212       
    221213        output[0] = 0;
     
    227219                pos = pos->next;
    228220                found++;
    229         }
    230        
    231         /* If possible completions are more than MAX_TAB_HINTS, ask user whether to display them or not. */
    232         if (found > MAX_TAB_HINTS) {
    233                 printf("\n");
    234                 continue_showing_hints = console_prompt_display_all_hints(indev, found);
    235221        }
    236222       
     
    240226                while (cmdtab_search_one(name, &pos)) {
    241227                        cmd_info_t *hlp = list_get_instance(pos, cmd_info_t, link);
    242 
    243                         if (continue_showing_hints) {
    244                                 printf("%s (%s)\n", hlp->name, hlp->description);
    245                                 --hints_to_show;
    246                                 ++total_hints_shown;
    247 
    248                                 if (hints_to_show == 0 && total_hints_shown != found) { /* Time to ask user to continue */
    249                                         continue_showing_hints = console_prompt_more_hints(indev, &hints_to_show);
    250                                 }
    251                         }
    252 
     228                        printf("%s (%s)\n", hlp->name, hlp->description);
    253229                        pos = pos->next;
    254                         for(max_match_len_tmp = 0; output[max_match_len_tmp] == hlp->name[input_len + max_match_len_tmp]
    255                                         && max_match_len_tmp < max_match_len; ++max_match_len_tmp);
    256                         max_match_len = max_match_len_tmp;
    257                 }
    258                 /* keep only the characters common in all completions */
    259                 output[max_match_len] = 0;
     230                }
    260231        }
    261232       
     
    324295                        if (beg == 0) {
    325296                                /* Command completion */
    326                                 found = cmdtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE), indev);
     297                                found = cmdtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE));
    327298                        } else {
    328299                                /* Symbol completion */
    329                                 found = symtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE), indev);
     300                                found = symtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE));
    330301                        }
    331302                       
    332303                        if (found == 0)
    333304                                continue;
    334 
    335                         /* We have hints, may be many. In case of more than one hint,
    336                            tmp will contain the common prefix. */
     305                       
     306                        if (found > 1) {
     307                                /* No unique hint, list was printed */
     308                                printf("%s> ", prompt);
     309                                printf("%ls", current);
     310                                print_cc('\b', wstr_length(current) - position);
     311                                continue;
     312                        }
     313                       
     314                        /* We have a hint */
     315                       
    337316                        size_t off = 0;
    338317                        size_t i = 0;
     
    342321                                i++;
    343322                        }
    344                        
    345                         if (found > 1) {
    346                                 /* No unique hint, list was printed */
    347                                 printf("%s> ", prompt);
    348                                 printf("%ls", current);
    349                                 position += str_length(tmp);
    350                                 print_cc('\b', wstr_length(current) - position);
    351                                 continue;
    352                         }
    353                        
    354                         /* We have a hint */
    355323                       
    356324                        printf("%ls", current + position);
     
    573541/** Parse command line.
    574542 *
    575  * @param cmdline Command line as read from input device.
     543 * @param cmdline Command line as read from input device. 
    576544 * @param size    Size (in bytes) of the string.
    577545 *
Note: See TracChangeset for help on using the changeset viewer.