| /* | |
| * Copyright 2013 The Emscripten Authors. All rights reserved. | |
| * Emscripten is available under two separate licenses, the MIT license and the | |
| * University of Illinois/NCSA Open Source License. Both these licenses can be | |
| * found in the LICENSE file. | |
| */ | |
| int line = 0; | |
| void main_loop() { | |
| char str[10] = {0}; | |
| int ret; | |
| errno = 0; | |
| while (errno != EAGAIN) { | |
| if (line == 0) { | |
| ret = fgetc(stdin); | |
| if (ret != EOF) putc(ret, stdout); | |
| if (ret == '\n') line++; | |
| } else if (line > 0) { | |
| ret = scanf("%9s", str); | |
| if (ret > 0) puts(str); | |
| } | |
| int err = ferror(stdin); | |
| if (err && errno != EAGAIN) { | |
| printf("error %s\n", strerror(errno)); | |
| exit(EXIT_FAILURE); | |
| } | |
| if (feof(stdin)) { | |
| puts("eof"); | |
| exit(EXIT_SUCCESS); | |
| } | |
| clearerr(stdin); | |
| } | |
| } | |
| int main(int argc, char const *argv[]) { | |
| fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); | |
| // SM shell doesn't implement an event loop and therefore doesn't support | |
| // emscripten_set_main_loop. However, its stdin reads are sync so it | |
| // should exit out after calling main_loop once. | |
| main_loop(); | |
| emscripten_set_main_loop(main_loop, 60, 0); | |
| while (1) main_loop(); sleep(1); | |
| return 0; | |
| } | |