add cpu_set_init_frame to initialize init's syscall frame
[unix-history] / usr / src / sys / deprecated / kdb / kdb_input.c
CommitLineData
9d61b7ff
SL
1/*
2 * Copyright (c) 1986 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
ea18eaf6 6 * @(#)kdb_input.c 7.5 (Berkeley) %G%
9d61b7ff 7 */
22dd1ff5
SL
8
9#include "../kdb/defs.h"
10
11char line[LINSIZ];
ea18eaf6
KS
12char *kdblp;
13char kdbpeekc,kdblastc = EOR;
22dd1ff5
SL
14
15/* input routines */
16
ea18eaf6 17kdbeol(c)
22dd1ff5
SL
18 char c;
19{
20 return (c==EOR || c==';');
21}
22
ea18eaf6 23kdbrdc()
22dd1ff5
SL
24{
25 do
ea18eaf6
KS
26 (void) kdbreadchar();
27 while (kdblastc==SP || kdblastc==TB);
28 return (kdblastc);
22dd1ff5
SL
29}
30
ea18eaf6 31kdbreadchar()
22dd1ff5
SL
32{
33 static char *erase = "\b \b";
34
ea18eaf6
KS
35 if (kdblp==0) {
36 kdblp=line;
22dd1ff5 37 do {
ea18eaf6
KS
38 (void) kdbreadc(kdblp);
39 if (kdbmkfault)
40 kdberror((char *)0);
41 switch (*kdblp) {
42d3901a 42 case CTRL('h'): case 0177:
ea18eaf6
KS
43 if (kdblp > line)
44 kdbwrite(erase, 3), kdblp--;
22dd1ff5 45 break;
42d3901a 46 case CTRL('u'):
ea18eaf6
KS
47 while (kdblp > line)
48 kdbwrite(erase, 3), kdblp--;
22dd1ff5 49 break;
42d3901a 50 case CTRL('r'):
22dd1ff5 51 kdbwrite("^R\n", 3);
ea18eaf6
KS
52 if (kdblp > line)
53 kdbwrite(line, kdblp-line);
22dd1ff5 54 break;
42d3901a 55 case CTRL('w'):
ea18eaf6 56 if (kdblp <= line)
22dd1ff5
SL
57 break;
58 do {
ea18eaf6 59 if (!isspace(*kdblp))
22dd1ff5
SL
60 goto erasenb;
61 kdbwrite(erase, 3);
ea18eaf6 62 } while (--kdblp > line);
22dd1ff5
SL
63 break;
64 erasenb:
65 do
66 kdbwrite(erase, 3);
ea18eaf6 67 while (--kdblp > line && !isspace(*kdblp));
22dd1ff5
SL
68 break;
69 default:
ea18eaf6 70 kdbecho(*kdblp++);
22dd1ff5
SL
71 break;
72 }
ea18eaf6
KS
73 } while (kdblp == line || kdblp[-1] != EOR);
74 *kdblp=0; kdblp=line;
22dd1ff5 75 }
ea18eaf6
KS
76 if (kdblastc = kdbpeekc)
77 kdbpeekc=0;
78 else if (kdblastc = *kdblp)
79 kdblp++;
80 return (kdblastc);
22dd1ff5
SL
81}
82
83static
ea18eaf6 84kdbecho(c)
22dd1ff5
SL
85 char c;
86{
87 char buf[2];
88
89 if (c==0177 || (c<SP && c != TB && c != EOR)) {
90 buf[0] = '^';
91 buf[1] = c ^ 0100;
92 kdbwrite(buf, 2);
93 } else
94 kdbwrite(&c, 1);
95}
96
ea18eaf6 97kdbnextchar()
22dd1ff5
SL
98{
99
ea18eaf6
KS
100 if (kdbeol(kdbrdc())) {
101 kdblp--;
22dd1ff5
SL
102 return (0);
103 }
ea18eaf6 104 return (kdblastc);
22dd1ff5
SL
105}
106
ea18eaf6 107kdbquotchar()
22dd1ff5
SL
108{
109
ea18eaf6
KS
110 if (kdbreadchar()=='\\')
111 return (kdbreadchar());
112 if (kdblastc=='\'')
22dd1ff5 113 return (0);
ea18eaf6 114 return (kdblastc);
22dd1ff5
SL
115}
116
ea18eaf6 117kdbgetformat(deformat)
22dd1ff5
SL
118 char *deformat;
119{
120 register char *fptr;
121 register int quote;
122
adff70a5 123 fptr=deformat; quote=0;
ea18eaf6
KS
124 while ((quote ? kdbreadchar()!=EOR : !kdbeol(kdbreadchar())))
125 if ((*fptr++ = kdblastc)=='"')
22dd1ff5 126 quote = ~quote;
ea18eaf6 127 kdblp--;
22dd1ff5
SL
128 if (fptr!=deformat)
129 *fptr++ = '\0';
130}