diff --git a/main.cpp b/main.cpp index d1defe2..98ccde5 100644 --- a/main.cpp +++ b/main.cpp @@ -11,8 +11,10 @@ #include #include +#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) #include #include +#endif #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" @@ -747,6 +749,7 @@ bool llama_eval( static bool is_interacting = false; +#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) void sigint_handler(int signo) { if (signo == SIGINT) { if (!is_interacting) { @@ -756,6 +759,7 @@ void sigint_handler(int signo) { } } } +#endif int main(int argc, char ** argv) { ggml_time_init(); @@ -822,11 +826,13 @@ int main(int argc, char ** argv) { } printf("\n"); if (params.interactive) { +#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) struct sigaction sigint_action; sigint_action.sa_handler = sigint_handler; sigemptyset (&sigint_action.sa_mask); sigint_action.sa_flags = 0; sigaction(SIGINT, &sigint_action, NULL); +#endif printf("%s: interactive mode on.\n", __func__); @@ -855,7 +861,9 @@ int main(int argc, char ** argv) { if (params.interactive) { printf("== Running in interactive mode. ==\n" +#if defined (__unix__) || (defined (__APPLE__) && defined (__MACH__)) " - Press Ctrl+C to interject at any time.\n" +#endif " - Press Return to return control to LLaMa.\n" " - If you want to submit another line, end your input in '\\'.\n"); } @@ -957,10 +965,15 @@ int main(int argc, char ** argv) { // currently being interactive bool another_line=true; while (another_line) { + fflush(stdout); char buf[256] = {0}; int n_read; if(params.use_color) printf(ANSI_BOLD ANSI_COLOR_GREEN); - scanf("%255[^\n]%n%*c", buf, &n_read); + if (scanf("%255[^\n]%n%*c", buf, &n_read) <= 0) { + // presumable empty line, consume the newline + scanf("%*c"); + n_read=0; + } if(params.use_color) printf(ANSI_COLOR_RESET); if (n_read > 0 && buf[n_read-1]=='\\') {