Changeset 690ad20 in mainline for kernel/generic/src/console/kconsole.c
- Timestamp:
- 2025-04-17T15:29:16Z (5 days ago)
- Branches:
- master
- Children:
- 39e1b9a
- Parents:
- d5b37b6
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2025-04-11 20:06:16)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2025-04-17 15:29:16)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/console/kconsole.c
rd5b37b6 r690ad20 39 39 */ 40 40 41 #include <adt/list.h> 42 #include <arch.h> 41 43 #include <assert.h> 42 #include <console/kconsole.h>43 #include <console/console.h>44 44 #include <console/chardev.h> 45 45 #include <console/cmd.h> 46 #include <console/console.h> 47 #include <console/kconsole.h> 46 48 #include <console/prompt.h> 49 #include <debug.h> 50 #include <errno.h> 51 #include <halt.h> 52 #include <macros.h> 53 #include <panic.h> 47 54 #include <stdio.h> 48 #include <panic.h> 55 #include <stdlib.h> 56 #include <str.h> 57 #include <symtab.h> 58 #include <sysinfo/sysinfo.h> 49 59 #include <typedefs.h> 50 #include <adt/list.h>51 #include <arch.h>52 #include <macros.h>53 #include <debug.h>54 #include <halt.h>55 #include <str.h>56 #include <sysinfo/sysinfo.h>57 #include <symtab.h>58 #include <errno.h>59 #include <putchar.h>60 #include <stdlib.h>61 60 62 61 /** Simple kernel console. … … 158 157 159 158 /** Print count times a character */ 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); 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); 165 165 } 166 166 … … 347 347 if (ch == '\n') { 348 348 /* Enter */ 349 put uchar(ch);349 putstr("\n", 1); 350 350 break; 351 351 } … … 358 358 if (wstr_remove(current, position - 1)) { 359 359 position--; 360 put uchar('\b');360 putstr("\b", 1); 361 361 printf("%ls ", current + position); 362 362 print_cc('\b', wstr_length(current) - position + 1); … … 368 368 /* Tab completion */ 369 369 370 /* Move to the end of the word */ 371 for (; (current[position] != 0) && (!isspace(current[position])); 372 position++) 373 putuchar(current[position]); 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", ¤t[position]); 377 current[i] = stash; 378 position = i; 374 379 375 380 /* … … 430 435 */ 431 436 size_t off = 0; 432 size_t i = 0; 433 while ((ch = str_decode(tmp, &off, STR_NO_LIMIT)) != 0) { 437 for (size_t i = 0; (ch = str_decode(tmp, &off, STR_NO_LIMIT)); i++) 434 438 if (!wstr_linsert(current, ch, position + i, MAX_CMDLINE)) 435 439 break; 436 437 i++;438 }439 440 440 441 if (found > 1) { … … 466 467 /* Left */ 467 468 if (position > 0) { 468 put uchar('\b');469 putstr("\b", 1); 469 470 position--; 470 471 } … … 475 476 /* Right */ 476 477 if (position < wstr_length(current)) { 477 p utuchar(current[position]);478 printf("%lc", current[position]); 478 479 position++; 479 480 }
Note:
See TracChangeset
for help on using the changeset viewer.