void readline_show_prompt(ReadLineState *rs) { monitor_printf(rs->mon, "%s", rs->prompt); monitor_flush(rs->mon); rs->last_cmd_buf_index = 0; rs->last_cmd_buf_size = 0; rs->esc_state = IS_NORM; }
void DECAF_output_cleanup(void) { if (ofp != NULL) { fflush(ofp); fclose(ofp); ofp = NULL; } if (pMon != NULL) { monitor_flush(pMon); pMon = NULL; } if (default_mon != NULL) { monitor_flush(default_mon); } else //should I just do an fflush anyways? - nah { fflush(stdout); } }
/* flush at every end of line or if the buffer is full */ static void monitor_puts(Monitor *mon, const char *str) { char c; if (!mon) return; for(;;) { c = *str++; if (c == '\0') break; if (c == '\n') mon->outbuf[mon->outbuf_index++] = '\r'; mon->outbuf[mon->outbuf_index++] = c; if (mon->outbuf_index >= (sizeof(mon->outbuf) - 1) || c == '\n') monitor_flush(mon); } }
/* update the displayed command line */ static void readline_update(ReadLineState *rs) { int i, delta, len; if (rs->cmd_buf_size != rs->last_cmd_buf_size || memcmp(rs->cmd_buf, rs->last_cmd_buf, rs->cmd_buf_size) != 0) { for(i = 0; i < rs->last_cmd_buf_index; i++) { monitor_printf(rs->mon, "\033[D"); } rs->cmd_buf[rs->cmd_buf_size] = '\0'; if (rs->read_password) { len = strlen(rs->cmd_buf); for(i = 0; i < len; i++) monitor_printf(rs->mon, "*"); } else { monitor_printf(rs->mon, "%s", rs->cmd_buf); } monitor_printf(rs->mon, "\033[K"); memcpy(rs->last_cmd_buf, rs->cmd_buf, rs->cmd_buf_size); rs->last_cmd_buf_size = rs->cmd_buf_size; rs->last_cmd_buf_index = rs->cmd_buf_size; } if (rs->cmd_buf_index != rs->last_cmd_buf_index) { delta = rs->cmd_buf_index - rs->last_cmd_buf_index; if (delta > 0) { for(i = 0;i < delta; i++) { monitor_printf(rs->mon, "\033[C"); } } else { delta = -delta; for(i = 0;i < delta; i++) { monitor_printf(rs->mon, "\033[D"); } } rs->last_cmd_buf_index = rs->cmd_buf_index; } monitor_flush(rs->mon); }
void DECAF_mflush(Monitor* mon) { monitor_flush(mon); }