/* Called when it's time for a more prompt but user has them turned off. */ void dumb_elide_more_prompt(void) { dumb_show_screen(FALSE); if (compression_mode == COMPRESSION_SPANS && hide_lines == 0) { show_row(-1); } }
zchar do_input(int timeout, bool show_cursor) { int action; long timeout_at; zchar menu_ret; dumb_show_screen(show_cursor); /* Convert timeout (tenths of a second) to ticks */ if (timeout > 0) timeout = (timeout * HZ) / 10; else timeout = TIMEOUT_BLOCK; timeout_at = *rb->current_tick + timeout; for (;;) { action = pluginlib_getaction(timeout, plugin_contexts, 1); switch (action) { case PLA_QUIT: return ZC_HKEY_QUIT; case PLA_MENU: menu_ret = menu(); if (menu_ret != ZC_BAD) return menu_ret; timeout_at = *rb->current_tick + timeout; break; case PLA_FIRE: return ZC_RETURN; case PLA_START: return ZC_BAD; default: if (timeout != TIMEOUT_BLOCK && !TIME_BEFORE(*rb->current_tick, timeout_at)) return ZC_TIME_OUT; } } }
void wait_for_key() { int action; dumb_show_screen(false); for (;;) { action = pluginlib_getaction(TIMEOUT_BLOCK, plugin_contexts, 1); switch (action) { case PLA_QUIT: hot_key_quit(); break; case PLA_FIRE: return; } } }
bool dumb_output_handle_setting(const char *setting, bool show_cursor, bool startup) { char *p; int i; if (!strncmp(setting, "pb", 2)) { toggle(&show_pictures, setting[2]); printf("Picture outlines display %s\n", show_pictures ? "ON" : "OFF"); if (startup) return TRUE; for (i = 0; i < screen_cells; i++) screen_changes[i] = (cell_style(screen_data[i]) == PICTURE_STYLE); dumb_show_screen(show_cursor); } else if (!strncmp(setting, "vb", 2)) { toggle(&visual_bell, setting[2]); printf("Visual bell %s\n", visual_bell ? "ON" : "OFF"); os_beep(1); os_beep(2); } else if (!strncmp(setting, "ln", 2)) { toggle(&show_line_numbers, setting[2]); printf("Line numbering %s\n", show_line_numbers ? "ON" : "OFF"); } else if (!strncmp(setting, "lt", 2)) { toggle(&show_line_types, setting[2]); printf("Line-type display %s\n", show_line_types ? "ON" : "OFF"); } else if (*setting == 'c') { switch (setting[1]) { case 'm': compression_mode = COMPRESSION_MAX; break; case 's': compression_mode = COMPRESSION_SPANS; break; case 'n': compression_mode = COMPRESSION_NONE; break; case 'h': hide_lines = atoi(&setting[2]); break; default: return FALSE; } printf("Compression mode %s, hiding top %d lines\n", compression_names[compression_mode], hide_lines); } else if (*setting == 'r') { switch (setting[1]) { case 'n': rv_mode = RV_NONE; break; case 'o': rv_mode = RV_DOUBLESTRIKE; break; case 'u': rv_mode = RV_UNDERLINE; break; case 'c': rv_mode = RV_CAPS; break; case 'b': rv_blank_char = setting[2] ? setting[2] : ' '; break; default: return FALSE; } printf("Reverse-video mode %s, blanks reverse to '%c': ", rv_names[rv_mode], rv_blank_char); for (p = "sample reverse text"; *p; p++) show_cell(make_cell(REVERSE_STYLE, *p)); putchar('\n'); for (i = 0; i < screen_cells; i++) screen_changes[i] = (cell_style(screen_data[i]) == REVERSE_STYLE); dumb_show_screen(show_cursor); } else if (!strcmp(setting, "set")) { printf("Compression Mode %s, hiding top %d lines\n", compression_names[compression_mode], hide_lines); printf("Picture Boxes display %s\n", show_pictures ? "ON" : "OFF"); printf("Visual Bell %s\n", visual_bell ? "ON" : "OFF"); os_beep(1); os_beep(2); printf("Line Numbering %s\n", show_line_numbers ? "ON" : "OFF"); printf("Line-Type display %s\n", show_line_types ? "ON" : "OFF"); printf("Reverse-Video mode %s, Blanks reverse to '%c': ", rv_names[rv_mode], rv_blank_char); for (p = "sample reverse text"; *p; p++) show_cell(make_cell(REVERSE_STYLE, *p)); putchar('\n'); } else return FALSE; return TRUE; }
void os_reset_screen(void) { dumb_show_screen(FALSE); }
/* Read a line, processing commands (lines that start with a backslash * (that isn't the start of a special character)), and write the * first non-command to s. * Return true if timed-out. */ static bool dumb_read_line(char *s, char *prompt, bool show_cursor, int timeout, enum input_type type, zchar *continued_line_chars) { time_t start_time; if (timeout) { if (time_ahead >= timeout) { time_ahead -= timeout; return TRUE; } timeout -= time_ahead; start_time = time(0); } time_ahead = 0; dumb_show_screen(show_cursor); for (;;) { char *command; if (prompt) fputs(prompt, stdout); else dumb_show_prompt(show_cursor, (timeout ? "tTD" : ")>}")[type]); getline_(s); if ((s[0] != '\\') || ((s[1] != '\0') && !islower(s[1]))) { /* Is not a command line. */ translate_special_chars(s); if (timeout) { int elapsed = (time(0) - start_time) * 10 * speed; if (elapsed > timeout) { time_ahead = elapsed - timeout; return TRUE; } } return FALSE; } /* Commands. */ /* Remove the \ and the terminating newline. */ command = s + 1; command[strlen(command) - 1] = '\0'; if (!strcmp(command, "t")) { if (timeout) { time_ahead = 0; s[0] = '\0'; return TRUE; } } else if (*command == 'w') { if (timeout) { int elapsed = atoi(&command[1]); time_t now = time(0); if (elapsed == 0) elapsed = (now - start_time) * 10 * speed; if (elapsed >= timeout) { time_ahead = elapsed - timeout; s[0] = '\0'; return TRUE; } timeout -= elapsed; start_time = now; } } else if (!strcmp(command, "d")) { if (type != INPUT_LINE_CONTINUED) fprintf(stderr, "DUMB-FROTZ: No input to discard\n"); else { dumb_discard_old_input(strlen((char *) continued_line_chars)); continued_line_chars[0] = '\0'; type = INPUT_LINE; } } else if (!strcmp(command, "help")) { if (!do_more_prompts) fputs(runtime_usage, stdout); else { char *current_page, *next_page; current_page = next_page = runtime_usage; for (;;) { int i; for (i = 0; (i < h_screen_rows - 2) && *next_page; i++) next_page = strchr(next_page, '\n') + 1; printf("%.*s", (int) (next_page - current_page), current_page); current_page = next_page; if (!*current_page) break; printf("HELP: Type <return> for more, or q <return> to stop: "); getline_(s); if (!strcmp(s, "q\n")) break; } } } else if (!strcmp(command, "s")) { dumb_dump_screen(); } else if (!dumb_handle_setting(command, show_cursor, FALSE)) { fprintf(stderr, "DUMB-FROTZ: unknown command: %s\n", s); fprintf(stderr, "Enter \\help to see the list of commands\n"); } } }