mirror of https://github.com/digarok/gsplus.git
simplify readline a bit. EOF will auto-print a CR if there was a prompt.
This commit is contained in:
parent
290f36c4d3
commit
a7a0138754
|
@ -1769,7 +1769,6 @@ int debug_shell(int code) {
|
|||
for(;;) {
|
||||
cp = x_readline("] ");
|
||||
if (!cp) {
|
||||
fputs("\n", stdout);
|
||||
if (++control_d_count < 2)
|
||||
continue;
|
||||
fputs("quit\n", stdout);
|
||||
|
|
|
@ -390,8 +390,7 @@ uint32_t sweet16_asm_shell(uint32_t addr) {
|
|||
|
||||
for(;;) {
|
||||
const char *cp = x_readline("!!");
|
||||
if (!cp) { fputc('\n', stdout); return addr; }
|
||||
if (!*cp) return addr;
|
||||
if (!cp || !*cp) return addr;
|
||||
|
||||
parse_line(cp, &addr);
|
||||
|
||||
|
|
|
@ -57,7 +57,10 @@ char *x_readline(const char *prompt) {
|
|||
el_prompt = prompt;
|
||||
cp = el_gets(el, &count);
|
||||
el_prompt = NULL;
|
||||
if (count <= 0) return NULL;
|
||||
if (count <= 0) {
|
||||
if (prompt) fputc('\n', stdout);
|
||||
return NULL;
|
||||
}
|
||||
if (count > sizeof(buffer) - 1) return "";
|
||||
|
||||
|
||||
|
@ -109,7 +112,10 @@ char *x_readline(const char *prompt) {
|
|||
}
|
||||
|
||||
cp = readline(prompt);
|
||||
if (!cp) return NULL;
|
||||
if (!cp) {
|
||||
if (prompt) fputc('\n', stdout);
|
||||
return NULL;
|
||||
}
|
||||
count = strlen(cp);
|
||||
if (count > sizeof(buffer) - 1) {
|
||||
free(cp);
|
||||
|
@ -149,6 +155,7 @@ char *x_readline(const char *prompt) {
|
|||
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
|
||||
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
/* MS CRT uses -2 to indicate there is no stdin/stdout/stderr fileno */
|
||||
|
||||
/*
|
||||
if (h == INVALID_HANDLE_VALUE) {
|
||||
|
@ -203,20 +210,25 @@ char *x_readline(const char *prompt) {
|
|||
if (!ok) {
|
||||
/* msys/cygwin? */
|
||||
|
||||
fprintf(stderr, "WriteConsole: %lx (h = %p)\n", GetLastError(), hOut);
|
||||
// fprintf(stderr, "WriteConsole: %lx (h = %p)\n", GetLastError(), hOut);
|
||||
fflush(stderr);
|
||||
fputs(prompt, stdout);
|
||||
if (prompt) fputs(prompt, stdout);
|
||||
fflush(stdout);
|
||||
char *cp = fgets(buffer, sizeof(buffer), stdin);
|
||||
if (!cp) return NULL;
|
||||
if (!cp) {
|
||||
if (prompt) fputc('\n', stdout);
|
||||
return NULL;
|
||||
}
|
||||
cleanup_buffer(buffer, strlen(buffer));
|
||||
return buffer;
|
||||
}
|
||||
ok = ReadConsole(hIn, buffer, sizeof(buffer), &count, NULL);
|
||||
if (!ok) {
|
||||
fprintf(stderr, "Error: %lx (h = %p)\n", GetLastError(), hIn);
|
||||
fprintf(stderr, "Type: %08x\n", GetFileType(hIn));
|
||||
fflush(stderr);
|
||||
if (prompt) fputc('\n', stdout);
|
||||
// fflush(stdout);
|
||||
// fprintf(stderr, "Error: %lx (h = %p)\n", GetLastError(), hIn);
|
||||
// fprintf(stderr, "Type: %08x\n", GetFileType(hIn));
|
||||
// fflush(stderr);
|
||||
return NULL;
|
||||
}
|
||||
cleanup_buffer(buffer, count);
|
||||
|
@ -230,16 +242,17 @@ char *x_readline(const char *prompt) {
|
|||
|
||||
char *x_readline(const char *prompt) {
|
||||
static char buffer[1024];
|
||||
fputs(prompt, stdout);
|
||||
|
||||
if (prompt) fputs(prompt, stdout);
|
||||
fflush(stdout);
|
||||
|
||||
for(;;) {
|
||||
int ok = read(STDIN_FILENO, buffer, sizeof(buffer)-1);
|
||||
if (ok < 0) {
|
||||
if (ok == EINTR) continue;
|
||||
if (ok < 0 && ok == EINTR) continue;
|
||||
if (ok <= 0) {
|
||||
if (prompt) fputc('\n', stdout);
|
||||
return NULL;
|
||||
}
|
||||
if (ok == 0) return NULL;
|
||||
cleanup_buffer(buffer, ok);
|
||||
|
||||
return buffer;
|
||||
|
|
Loading…
Reference in New Issue