Revision aa0bc6b6 vl.c
b/vl.c | ||
---|---|---|
1138 | 1138 |
|
1139 | 1139 |
#define TERM_ESCAPE 0x01 /* ctrl-a is used for escape */ |
1140 | 1140 |
|
1141 |
#define TERM_FIFO_MAX_SIZE 1 |
|
1142 |
|
|
1141 | 1143 |
static int term_got_escape, client_index; |
1144 |
static uint8_t term_fifo[TERM_FIFO_MAX_SIZE]; |
|
1145 |
int term_fifo_size; |
|
1142 | 1146 |
|
1143 | 1147 |
void term_print_help(void) |
1144 | 1148 |
{ |
... | ... | |
1207 | 1211 |
|
1208 | 1212 |
chr = stdio_clients[client_index]; |
1209 | 1213 |
s = chr->opaque; |
1210 |
buf[0] = ch; |
|
1211 |
/* XXX: should queue the char if the device is not |
|
1212 |
ready */ |
|
1213 |
if (s->fd_can_read(s->fd_opaque) > 0) |
|
1214 |
if (s->fd_can_read(s->fd_opaque) > 0) { |
|
1215 |
buf[0] = ch; |
|
1214 | 1216 |
s->fd_read(s->fd_opaque, buf, 1); |
1217 |
} else if (term_fifo_size == 0) { |
|
1218 |
term_fifo[term_fifo_size++] = ch; |
|
1219 |
} |
|
1215 | 1220 |
} |
1216 | 1221 |
} |
1217 | 1222 |
} |
1218 | 1223 |
|
1219 | 1224 |
static int stdio_can_read(void *opaque) |
1220 | 1225 |
{ |
1221 |
/* XXX: not strictly correct */ |
|
1222 |
return 1; |
|
1226 |
CharDriverState *chr; |
|
1227 |
FDCharDriver *s; |
|
1228 |
|
|
1229 |
if (client_index < stdio_nb_clients) { |
|
1230 |
chr = stdio_clients[client_index]; |
|
1231 |
s = chr->opaque; |
|
1232 |
/* try to flush the queue if needed */ |
|
1233 |
if (term_fifo_size != 0 && s->fd_can_read(s->fd_opaque) > 0) { |
|
1234 |
s->fd_read(s->fd_opaque, term_fifo, 1); |
|
1235 |
term_fifo_size = 0; |
|
1236 |
} |
|
1237 |
/* see if we can absorb more chars */ |
|
1238 |
if (term_fifo_size == 0) |
|
1239 |
return 1; |
|
1240 |
else |
|
1241 |
return 0; |
|
1242 |
} else { |
|
1243 |
return 1; |
|
1244 |
} |
|
1223 | 1245 |
} |
1224 | 1246 |
|
1225 | 1247 |
static void stdio_read(void *opaque, const uint8_t *buf, int size) |
Also available in: Unified diff