- if (WITH_STDIO == DO_USE_STDIO) {
- int c = getchar ();
- if (c == EOF) {
- hw_pal->input.buffer = 0;
- hw_pal->input.status = 0;
- } else {
- hw_pal->input.buffer = c;
- hw_pal->input.status = 1;
- }
-
- } else {
-#if !defined(O_NDELAY) || !defined(F_GETFL) || !defined(F_SETFL)
- error ("O_NDELAY, F_GETFL, or F_SETFL not defined");
-
-#else
- /* check for input */
- int flags;
- int status;
- /* get the old status */
- flags = fcntl(0, F_GETFL, 0);
- if (flags == -1) {
- perror("hw_pal");
- return;
- }
- /* temp, disable blocking IO */
- status = fcntl(0, F_SETFL, flags | O_NDELAY);
- if (status == -1) {
- perror("hw_pal");
- return;
- }
- /* try for input */
- status = read(0, &hw_pal->input.buffer, 1);
- if (status == 1) {
- hw_pal->input.status = 1;
- }
- else {
- hw_pal->input.status = 0;
- }
- /* return to regular vewing */
- flags = fcntl(0, F_SETFL, flags);
- if (flags == -1) {
- perror("hw_pal");
- return;
- }
-#endif
+ char c;
+ int count;
+ count = sim_io_read_stdin(&c, sizeof(c));
+ switch (count) {
+ case sim_io_not_ready:
+ case sim_io_eof:
+ hw_pal->input.buffer = 0;
+ hw_pal->input.status = 0;
+ break;
+ default:
+ hw_pal->input.buffer = c;
+ hw_pal->input.status = 1;