void read_line() { char buffer[STRING_SIZE]; struct listnode *node; struct listroot *root; int len, cnt, match; gtd->input_buf[gtd->input_len] = 0; len = read(0, buffer, 1); buffer[len] = 0; if (HAS_BIT(gtd->ses->flags, SES_FLAG_CONVERTMETA) || HAS_BIT(gtd->flags, TINTIN_FLAG_CONVERTMETACHAR)) { convert_meta(buffer, >d->macro_buf[strlen(gtd->macro_buf)]); } else { strcat(gtd->macro_buf, buffer); } if (!HAS_BIT(gtd->ses->flags, SES_FLAG_CONVERTMETA)) { match = 0; root = gtd->ses->list[LIST_MACRO]; for (root->update = 0; root->update < root->used; root->update++) { node = root->list[root->update]; if (!strcmp(gtd->macro_buf, node->pr)) { script_driver(gtd->ses, LIST_MACRO, node->right); gtd->macro_buf[0] = 0; return; } else if (!strncmp(gtd->macro_buf, node->pr, strlen(gtd->macro_buf))) { match = 1; } } for (cnt = 0; *cursor_table[cnt].fun != NULL; cnt++) { if (!strcmp(gtd->macro_buf, cursor_table[cnt].code)) { cursor_table[cnt].fun(""); gtd->macro_buf[0] = 0; return; } else if (!strncmp(gtd->macro_buf, cursor_table[cnt].code, strlen(gtd->macro_buf))) { match = 1; } } if (match) { return; } } if (gtd->macro_buf[0] == ESCAPE) { strcpy(buffer, gtd->macro_buf); convert_meta(buffer, gtd->macro_buf); } for (cnt = 0; gtd->macro_buf[cnt]; cnt++) { switch (gtd->macro_buf[cnt]) { case 10: cursor_enter(""); break; default: if (HAS_BIT(gtd->flags, TINTIN_FLAG_INSERTINPUT) && gtd->input_len != gtd->input_cur) { if (!HAS_BIT(gtd->ses->flags, SES_FLAG_UTF8) || (gtd->macro_buf[cnt] & 192) != 128) { cursor_delete(""); } } ins_sprintf(>d->input_buf[gtd->input_cur], "%c", gtd->macro_buf[cnt]); gtd->input_len++; gtd->input_cur++; if (!HAS_BIT(gtd->ses->flags, SES_FLAG_UTF8) || (gtd->macro_buf[cnt] & 192) != 128) { gtd->input_pos++; } if (gtd->input_len != gtd->input_cur) { if (HAS_BIT(gtd->ses->flags, SES_FLAG_UTF8) && (gtd->macro_buf[cnt] & 192) == 128) { input_printf("%c", gtd->macro_buf[cnt]); } else { input_printf("\033[1@%c", gtd->macro_buf[cnt]); } } else { input_printf("%c", gtd->macro_buf[cnt]); } gtd->macro_buf[0] = 0; gtd->input_tmp[0] = 0; gtd->input_buf[gtd->input_len] = 0; cursor_check_line_modified(""); DEL_BIT(gtd->flags, TINTIN_FLAG_HISTORYBROWSE); kill_list(gtd->ses->list[LIST_TABCYCLE]); if (HAS_BIT(gtd->flags, TINTIN_FLAG_HISTORYSEARCH)) { cursor_history_find(""); } break; } } }
static void do_sleep(int seconds) { time_t target; int delta; if (!ncurses_initialized()) { sleep(seconds); return; } target = time(NULL) + seconds; delta = seconds; do { int c; usleep(6000); halfdelay(delta * 10); c = getch(); switch (c) { case KEY_BTAB: show_prev_tab(); break; case '\t': show_next_tab(); break; case KEY_RIGHT: cursor_right(); break; case KEY_LEFT: cursor_left(); break; case KEY_NPAGE: case KEY_DOWN: cursor_down(); break; case KEY_PPAGE: case KEY_UP: cursor_up(); break; case ' ': case '\n': cursor_enter(); break; case 's': if (set_refresh_timeout()) return; break; case 'r': window_refresh(); return; case KEY_EXIT: case 'q': case 27: // Escape leave_powertop = 1; return; } delta = target - time(NULL); if (delta <= 0) break; } while (1); }