VirtualBox

source: vbox/trunk/src/VBox/Devices/PC/Etherboot-src/filo/main/console_x.c@ 566

Last change on this file since 566 was 1, checked in by vboxsync, 55 years ago

import

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.7 KB
Line 
1
2#include "etherboot.h"
3
4#include <lib.h>
5
6int getline(char *buf, int max)
7{
8 int cur, ch, nonspace_seen;
9
10 cur = 0;
11 while (buf[cur]) {
12 putchar(buf[cur]);
13 cur++;
14 }
15 for (;;) {
16 ch = getchar();
17 switch (ch) {
18 /* end of line */
19 case '\r':
20 case '\n':
21 putchar('\n');
22 goto out;
23 /* backspace */
24 case '\b':
25 case '\x7f':
26 if (cur > 0) {
27 cur--;
28 putchar('\b');
29 putchar(' ');
30 putchar('\b');
31 }
32 break;
33 /* word erase */
34 case 'W' & 0x1f: /* ^W */
35 nonspace_seen = 0;
36 while (cur) {
37 if (buf[cur-1] != ' ')
38 nonspace_seen = 1;
39 putchar('\b');
40 putchar(' ');
41 putchar('\b');
42 cur--;
43 if (nonspace_seen && cur < max-1 && cur > 0 && buf[cur-1]==' ')
44 break;
45 }
46 break;
47 /* line erase */
48 case 'U' & 0x1f: /* ^U */
49 while (cur) {
50 putchar('\b');
51 putchar(' ');
52 putchar('\b');
53 cur--;
54 }
55 cur = 0;
56 break;
57 default:
58 if (ch < 0x20)
59 break; /* ignore control char */
60 if (ch >= 0x7f)
61 break;
62 if (cur + 1 < max) {
63 putchar(ch); /* echo back */
64 buf[cur] = ch;
65 cur++;
66 }
67 }
68 }
69out:
70 if (cur >= max)
71 cur = max - 1;
72 buf[cur] = '\0';
73 return cur;
74}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette