zchar replay_read_input (zchar *buf) { zchar c; for (;;) { c = replay_char (); if (c == ZC_BAD || is_terminator (c)) break; *buf++ = c; } *buf = 0; if (fgetc (pfp) != '\n') { replay_close (); return ZC_BAD; } else return c; }/* replay_read_input */
// Returns true iff at least 1 statement in a statement // sequence contains a terminator. inline bool has_terminator_action(Stmt_seq const& body) { for (auto s : body) { if (is_terminator(s)) return true; } return false; }
// Returns true iff more than 1 statement in a statement sequence // is a terminator. inline bool has_multiple_terminators(Stmt_seq const& body) { int c = 0; for (auto s : body) { if (is_terminator(s)) c++; } return (c > 1) ? true : false; }
zchar os_read_line (int max, zchar *buf, int timeout, int width, int continued) { char *p; int terminator; static bool timed_out_last_time; int timed_out; /* Discard any keys read for single key input. */ read_key_buffer[0] = '\0'; /* After timing out, discard any further input unless we're continuing. */ if (timed_out_last_time && !continued) read_line_buffer[0] = '\0'; if (read_line_buffer[0] == '\0') timed_out = dumb_read_line(read_line_buffer, NULL, TRUE, timeout, buf[0] ? INPUT_LINE_CONTINUED : INPUT_LINE, buf); else timed_out = check_timeout(timeout); if (timed_out) { timed_out_last_time = TRUE; return ZC_TIME_OUT; } /* find the terminating character. */ for (p = read_line_buffer;; p++) { if (is_terminator(*p)) { terminator = *p; *p++ = '\0'; break; } } /* TODO: Truncate to width and max. */ /* copy to screen */ dumb_display_user_input(read_line_buffer); /* copy to the buffer and save the rest for next time. */ strcat((char *) buf, read_line_buffer); p = read_line_buffer + strlen(read_line_buffer) + 1; memmove(read_line_buffer, p, strlen(p) + 1); /* If there was just a newline after the terminating character, * don't save it. */ if ((read_line_buffer[0] == '\r') && (read_line_buffer[1] == '\0')) read_line_buffer[0] = '\0'; timed_out_last_time = FALSE; return terminator; }
zchar Processor::replay_read_input(zchar *buf) { zchar c; for (;;) { c = replay_char(); if (c == ZC_BAD || is_terminator(c)) break; *buf++ = c; } *buf = 0; if (pfp->getChar() != '\n') { replay_close(); return ZC_BAD; } else { return c; } }
char remote488_device::recv_update(uint8_t& data) { char c; unsigned i; // Do not iterate too much.. for (i = 0; i < 8 && m_stream->input(&c , 1); i++) { int prev_state = m_rx_state; switch (m_rx_state) { case REM_RX_WAIT_CH: if (is_msg_type(c)) { m_rx_ch = c; m_rx_state = REM_RX_WAIT_COLON; } else if (!is_space(c)) { m_rx_state = REM_RX_WAIT_WS; } break; case REM_RX_WAIT_COLON: if (c == ':') { m_rx_state = REM_RX_WAIT_1ST_HEX; } else { m_rx_state = REM_RX_WAIT_WS; } break; case REM_RX_WAIT_1ST_HEX: if (a2hex(c , m_rx_data)) { m_rx_state = REM_RX_WAIT_2ND_HEX; } else { m_rx_state = REM_RX_WAIT_WS; } break; case REM_RX_WAIT_2ND_HEX: { uint8_t tmp; if (a2hex(c , tmp)) { m_rx_data = (m_rx_data << 4) | tmp; m_rx_state = REM_RX_WAIT_SEP; } else { m_rx_state = REM_RX_WAIT_WS; } } break; case REM_RX_WAIT_SEP: if (is_terminator(c) || is_space(c)) { m_rx_state = REM_RX_WAIT_CH; LOG_PARSER("PARSE %02x %d->%d\n" , c , prev_state , m_rx_state); data = m_rx_data; return m_rx_ch; } else { m_rx_state = REM_RX_WAIT_WS; } break; case REM_RX_WAIT_WS: if (is_terminator(c) || is_space(c)) { m_rx_state = REM_RX_WAIT_CH; } break; default: m_rx_state = REM_RX_WAIT_CH; break; } LOG_PARSER("PARSE %02x %d->%d\n" , c , prev_state , m_rx_state); } return 0; }