1*da917039SDavid du Colombier #include "include.h"
2*da917039SDavid du Colombier
3*da917039SDavid du Colombier #define uartputs vuartputs
4*da917039SDavid du Colombier #define uartgets vuartgets
5*da917039SDavid du Colombier #define uartputc vuartputc
6*da917039SDavid du Colombier
7*da917039SDavid du Colombier static int useuart = 1;
8*da917039SDavid du Colombier
9*da917039SDavid du Colombier int debug;
10*da917039SDavid du Colombier
11*da917039SDavid du Colombier void
kbdinit(void)12*da917039SDavid du Colombier kbdinit(void)
13*da917039SDavid du Colombier {
14*da917039SDavid du Colombier }
15*da917039SDavid du Colombier
16*da917039SDavid du Colombier void
consinit(char * name,char * speed)17*da917039SDavid du Colombier consinit(char* name, char* speed)
18*da917039SDavid du Colombier {
19*da917039SDavid du Colombier int port;
20*da917039SDavid du Colombier
21*da917039SDavid du Colombier if(name == nil || cistrcmp(name, "cga") == 0)
22*da917039SDavid du Colombier return;
23*da917039SDavid du Colombier port = strtoul(name, 0, 0);
24*da917039SDavid du Colombier if(port < 0 || port > 1)
25*da917039SDavid du Colombier return;
26*da917039SDavid du Colombier USED(speed);
27*da917039SDavid du Colombier
28*da917039SDavid du Colombier uartputs("\n", 1);
29*da917039SDavid du Colombier }
30*da917039SDavid du Colombier
31*da917039SDavid du Colombier void
consdrain(void)32*da917039SDavid du Colombier consdrain(void)
33*da917039SDavid du Colombier {
34*da917039SDavid du Colombier // if(useuart)
35*da917039SDavid du Colombier // uartdrain();
36*da917039SDavid du Colombier }
37*da917039SDavid du Colombier
38*da917039SDavid du Colombier static void
consputs(char * s,int n)39*da917039SDavid du Colombier consputs(char* s, int n)
40*da917039SDavid du Colombier {
41*da917039SDavid du Colombier if(useuart)
42*da917039SDavid du Colombier uartputs(s, n);
43*da917039SDavid du Colombier }
44*da917039SDavid du Colombier
45*da917039SDavid du Colombier void
warp86(char * s,ulong)46*da917039SDavid du Colombier warp86(char* s, ulong)
47*da917039SDavid du Colombier {
48*da917039SDavid du Colombier if(s != nil)
49*da917039SDavid du Colombier print(s);
50*da917039SDavid du Colombier spllo();
51*da917039SDavid du Colombier consdrain();
52*da917039SDavid du Colombier print("Takes a licking and keeps on ticking...\n");
53*da917039SDavid du Colombier splhi();
54*da917039SDavid du Colombier for(;;)
55*da917039SDavid du Colombier ;
56*da917039SDavid du Colombier }
57*da917039SDavid du Colombier
58*da917039SDavid du Colombier static int
getline(char * buf,int size,int timeout)59*da917039SDavid du Colombier getline(char *buf, int size, int timeout)
60*da917039SDavid du Colombier {
61*da917039SDavid du Colombier int c, i=0;
62*da917039SDavid du Colombier // ulong start;
63*da917039SDavid du Colombier char echo;
64*da917039SDavid du Colombier
65*da917039SDavid du Colombier USED(timeout);
66*da917039SDavid du Colombier for (;;) {
67*da917039SDavid du Colombier // start = m->ticks;
68*da917039SDavid du Colombier // do{
69*da917039SDavid du Colombier // /* timeout seconds to first char */
70*da917039SDavid du Colombier // if(timeout && ((m->ticks - start) > timeout*HZ))
71*da917039SDavid du Colombier // return -2;
72*da917039SDavid du Colombier // c = consiq.getc(&consiq);
73*da917039SDavid du Colombier // }while(c == -1);
74*da917039SDavid du Colombier c = vuartgetc();
75*da917039SDavid du Colombier // timeout = 0;
76*da917039SDavid du Colombier
77*da917039SDavid du Colombier if(c == '\r')
78*da917039SDavid du Colombier c = '\n'; /* turn carriage return into newline */
79*da917039SDavid du Colombier if(c == '\177')
80*da917039SDavid du Colombier c = '\010'; /* turn delete into backspace */
81*da917039SDavid du Colombier if(c == '\025')
82*da917039SDavid du Colombier echo = '\n'; /* echo ^U as a newline */
83*da917039SDavid du Colombier else
84*da917039SDavid du Colombier echo = c;
85*da917039SDavid du Colombier consputs(&echo, 1);
86*da917039SDavid du Colombier
87*da917039SDavid du Colombier if(c == '\010'){
88*da917039SDavid du Colombier if(i > 0)
89*da917039SDavid du Colombier i--; /* bs deletes last character */
90*da917039SDavid du Colombier continue;
91*da917039SDavid du Colombier }
92*da917039SDavid du Colombier /* a newline ends a line */
93*da917039SDavid du Colombier if (c == '\n')
94*da917039SDavid du Colombier break;
95*da917039SDavid du Colombier /* ^U wipes out the line */
96*da917039SDavid du Colombier if (c =='\025')
97*da917039SDavid du Colombier return -1;
98*da917039SDavid du Colombier if(i == size)
99*da917039SDavid du Colombier return size;
100*da917039SDavid du Colombier buf[i++] = c;
101*da917039SDavid du Colombier }
102*da917039SDavid du Colombier buf[i] = 0;
103*da917039SDavid du Colombier return i;
104*da917039SDavid du Colombier }
105*da917039SDavid du Colombier
106*da917039SDavid du Colombier int
getstr(char * prompt,char * buf,int size,char * def,int timeout)107*da917039SDavid du Colombier getstr(char *prompt, char *buf, int size, char *def, int timeout)
108*da917039SDavid du Colombier {
109*da917039SDavid du Colombier int len, isdefault;
110*da917039SDavid du Colombier char pbuf[PRINTSIZE];
111*da917039SDavid du Colombier
112*da917039SDavid du Colombier buf[0] = 0;
113*da917039SDavid du Colombier isdefault = (def && *def);
114*da917039SDavid du Colombier if(isdefault == 0){
115*da917039SDavid du Colombier timeout = 0;
116*da917039SDavid du Colombier seprint(pbuf, pbuf + sizeof pbuf, "%s: ", prompt);
117*da917039SDavid du Colombier }
118*da917039SDavid du Colombier else if(timeout)
119*da917039SDavid du Colombier seprint(pbuf, pbuf + sizeof pbuf, "%s[default==%s (%ds timeout)]: ",
120*da917039SDavid du Colombier prompt, def, timeout);
121*da917039SDavid du Colombier else
122*da917039SDavid du Colombier seprint(pbuf, pbuf + sizeof pbuf, "%s[default==%s]: ",
123*da917039SDavid du Colombier prompt, def);
124*da917039SDavid du Colombier for (;;) {
125*da917039SDavid du Colombier print(pbuf);
126*da917039SDavid du Colombier consdrain();
127*da917039SDavid du Colombier len = getline(buf, size, timeout);
128*da917039SDavid du Colombier switch(len){
129*da917039SDavid du Colombier case 0:
130*da917039SDavid du Colombier /* RETURN */
131*da917039SDavid du Colombier if(isdefault)
132*da917039SDavid du Colombier break;
133*da917039SDavid du Colombier continue;
134*da917039SDavid du Colombier case -1:
135*da917039SDavid du Colombier /* ^U typed */
136*da917039SDavid du Colombier continue;
137*da917039SDavid du Colombier case -2:
138*da917039SDavid du Colombier /* timeout, use default */
139*da917039SDavid du Colombier consputs("\n", 1);
140*da917039SDavid du Colombier len = 0;
141*da917039SDavid du Colombier break;
142*da917039SDavid du Colombier default:
143*da917039SDavid du Colombier break;
144*da917039SDavid du Colombier }
145*da917039SDavid du Colombier if(len >= size){
146*da917039SDavid du Colombier print("line too long\n");
147*da917039SDavid du Colombier continue;
148*da917039SDavid du Colombier }
149*da917039SDavid du Colombier break;
150*da917039SDavid du Colombier }
151*da917039SDavid du Colombier if(len == 0 && isdefault)
152*da917039SDavid du Colombier strecpy(buf, buf + size, def);
153*da917039SDavid du Colombier return 0;
154*da917039SDavid du Colombier }
155*da917039SDavid du Colombier
156*da917039SDavid du Colombier void
panic(char * fmt,...)157*da917039SDavid du Colombier panic(char *fmt, ...)
158*da917039SDavid du Colombier {
159*da917039SDavid du Colombier int n;
160*da917039SDavid du Colombier va_list arg;
161*da917039SDavid du Colombier char buf[PRINTSIZE];
162*da917039SDavid du Colombier
163*da917039SDavid du Colombier strecpy(buf, buf + sizeof buf, "panic: ");
164*da917039SDavid du Colombier va_start(arg, fmt);
165*da917039SDavid du Colombier n = vseprint(buf+7, buf+sizeof(buf)-7, fmt, arg) - buf;
166*da917039SDavid du Colombier va_end(arg);
167*da917039SDavid du Colombier buf[n] = '\n';
168*da917039SDavid du Colombier consputs(buf, n+1);
169*da917039SDavid du Colombier
170*da917039SDavid du Colombier if (securemem) {
171*da917039SDavid du Colombier n = qtmerrfmt(buf, sizeof buf);
172*da917039SDavid du Colombier consputs(buf, n+1);
173*da917039SDavid du Colombier }
174*da917039SDavid du Colombier
175*da917039SDavid du Colombier // splhi(); for(;;);
176*da917039SDavid du Colombier if(etherdetach)
177*da917039SDavid du Colombier etherdetach();
178*da917039SDavid du Colombier
179*da917039SDavid du Colombier // consputs("\nPress almost any key to reset...", 32);
180*da917039SDavid du Colombier spllo();
181*da917039SDavid du Colombier // while(consiq.getc(&consiq) == -1)
182*da917039SDavid du Colombier // ;
183*da917039SDavid du Colombier vuartgetc();
184*da917039SDavid du Colombier warp86(nil, 0);
185*da917039SDavid du Colombier }
186