Ignore:
File:
1 edited

Legend:

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

    r690ad20 rfdfb24e  
    3939 */
    4040
     41#include <assert.h>
     42#include <console/kconsole.h>
     43#include <console/console.h>
     44#include <console/chardev.h>
     45#include <console/cmd.h>
     46#include <console/prompt.h>
     47#include <stdio.h>
     48#include <panic.h>
     49#include <typedefs.h>
    4150#include <adt/list.h>
    4251#include <arch.h>
    43 #include <assert.h>
    44 #include <console/chardev.h>
    45 #include <console/cmd.h>
    46 #include <console/console.h>
    47 #include <console/kconsole.h>
    48 #include <console/prompt.h>
     52#include <macros.h>
    4953#include <debug.h>
     54#include <halt.h>
     55#include <str.h>
     56#include <sysinfo/sysinfo.h>
     57#include <symtab.h>
    5058#include <errno.h>
    51 #include <halt.h>
    52 #include <macros.h>
    53 #include <panic.h>
    54 #include <stdio.h>
     59#include <putchar.h>
    5560#include <stdlib.h>
    56 #include <str.h>
    57 #include <symtab.h>
    58 #include <sysinfo/sysinfo.h>
    59 #include <typedefs.h>
    6061
    6162/** Simple kernel console.
     
    157158
    158159/** Print count times a character */
    159 _NO_TRACE static void print_cc(char ch, size_t count)
    160 {
    161         // FIXME: only lock once
    162 
    163         for (size_t i = 0; i < count; i++)
    164                 putstr(&ch, 1);
     160_NO_TRACE static void print_cc(char32_t ch, size_t count)
     161{
     162        size_t i;
     163        for (i = 0; i < count; i++)
     164                putuchar(ch);
    165165}
    166166
     
    347347                if (ch == '\n') {
    348348                        /* Enter */
    349                         putstr("\n", 1);
     349                        putuchar(ch);
    350350                        break;
    351351                }
     
    358358                        if (wstr_remove(current, position - 1)) {
    359359                                position--;
    360                                 putstr("\b", 1);
     360                                putuchar('\b');
    361361                                printf("%ls ", current + position);
    362362                                print_cc('\b', wstr_length(current) - position + 1);
     
    368368                        /* Tab completion */
    369369
    370                         size_t i = position;
    371                         while (current[i] && !isspace(current[i]))
    372                                 i++;
    373 
    374                         char32_t stash = current[i];
    375                         current[i] = 0;
    376                         printf("%ls", &current[position]);
    377                         current[i] = stash;
    378                         position = i;
     370                        /* Move to the end of the word */
     371                        for (; (current[position] != 0) && (!isspace(current[position]));
     372                            position++)
     373                                putuchar(current[position]);
    379374
    380375                        /*
     
    435430                         */
    436431                        size_t off = 0;
    437                         for (size_t i = 0; (ch = str_decode(tmp, &off, STR_NO_LIMIT)); i++)
     432                        size_t i = 0;
     433                        while ((ch = str_decode(tmp, &off, STR_NO_LIMIT)) != 0) {
    438434                                if (!wstr_linsert(current, ch, position + i, MAX_CMDLINE))
    439435                                        break;
     436
     437                                i++;
     438                        }
    440439
    441440                        if (found > 1) {
     
    467466                        /* Left */
    468467                        if (position > 0) {
    469                                 putstr("\b", 1);
     468                                putuchar('\b');
    470469                                position--;
    471470                        }
     
    476475                        /* Right */
    477476                        if (position < wstr_length(current)) {
    478                                 printf("%lc", current[position]);
     477                                putuchar(current[position]);
    479478                                position++;
    480479                        }
Note: See TracChangeset for help on using the changeset viewer.