void kbclose(VOID) { reset_terminal(); if (fptty != (FILE*)NULL) (void)fclose(fptty); }
void kbhit(int fd) { struct termios termios; char kb[32]; int rc; set_terminal(fd, &termios); do { rc = read(fd, kb, sizeof(kb)); if (rc > 0) break; usleep(100); } while (1); reset_terminal(fd, &termios); }
void handleDisconnectB3Ind( call_t *ptrCall, unsigned short nReason, struct userdata *ncpi ) { int delta_time; cfg.endtime = time(0); delta_time = cfg.endtime - cfg.starttime; reset_terminal(); /* No need for this here * if (nReason) printf("\tDISCONNECT B3_Reason (0x%04x)\n", nReason); */ if(ptrCall->NotAcknowledged && cfg.verbose>0) { printf("handleDisconnectB3Ind() missing %d CAPI2_DATAB3_CONF\n", ptrCall->NotAcknowledged); } }
void prompt(char *promptmsg, char *inputbuf, size_t buf_len) { char *bufptr = inputbuf; reset_terminal(); mypolldel(STDIN); printf("%s", promptmsg); while ((*bufptr = getchar())) { if (*bufptr == '\n') break; if (buf_len-- <= 0) break; //printf("bufptr=%c buf_len=%d\n", *bufptr, buf_len); bufptr++; } *bufptr = '\0'; //printf("end of conversation\n"); pollset( STDIN, POLLIN, tty_event); set_raw_terminal(); }
void stopwatch() { /* Setup Terminal */ std::cout << hide_cursor << std::setfill('0'); setup_terminal(); auto start = std::chrono::high_resolution_clock::now(); using jiffies = std::chrono::duration<int, std::centi>; while(!die) { auto delta = std::chrono::duration_cast<jiffies>( std::chrono::high_resolution_clock::now() - start ).count(); auto cs = delta%100; auto s = delta/100; auto m = s/60; s %= 60; auto h = m/60; m %= 60; std::cout << to_first_column << std::setw(2) << h << ':' << std::setw(2) << m << ':' << std::setw(2) << s << '.' << std::setw(2) << cs << std::flush; if(lap.exchange(false)) { std::cout << std::endl; } /* justification: something about Nyquist frequencies, etc. * don't want to thrash my CPU to death */ std::this_thread::sleep_for(std::chrono::milliseconds{4}); } /* Reset Terminal */ reset_terminal(); std::cout << show_cursor << std::endl; std::exit(0); }
void add_character_advanced(t_edit *line, char c, t_info *info) { char *tmp; int j; int i; tmp = NULL; if ((tmp = malloc(sizeof(char) * (line->len + 2))) == NULL) exit(EXIT_FAILURE); line->cmd = realloc(line->cmd, line->len + 2); j = 0; i = line->len + (line->pos); while (i >= 0 && line->cmd[i] && i != line->len) tmp[j++] = line->cmd[i++]; tmp[j] = '\0'; i = line->len + (line->pos); line->cmd[i] = c; line->cmd[i + 1] = '\0'; line->cmd = strcat(line->cmd, tmp); line->len += 1; reset_terminal(line, i, info); }
int main(int argc, char *argv[]) { FILE *f; char c = 0, buf[512]; int d; if (argc < 2) { fprintf(stderr, "needed a file name\n"); exit(0); } f = fopen(argv[1], "r"); if (!f) { fprintf(stderr, "unable to open %s\n", argv[1]); exit(0); } set_terminal(); while(c!=0x1b) { read(0, &c, 1); if (c == 0x0a || c == 0x0d) { if (fgets(buf, 512, f)) fputs(buf, stdout); else break; } else { if ((d = fgetc(f)) != EOF) putchar(d); else break; } fflush(stdout); } reset_terminal(); fputs("\033[0m\n", stdout); return 0; }
static void reset_terminal2(int signo) { reset_terminal(); raise(signo); }
void computer::use(game *g) { if (w_terminal == NULL) w_terminal = newwin(25, 80, 0, 0); wborder(w_terminal, LINE_XOXO, LINE_XOXO, LINE_OXOX, LINE_OXOX, LINE_OXXO, LINE_OOXX, LINE_XXOO, LINE_XOOX ); print_line("Logging into %s...", name.c_str()); if (security > 0) { print_error("ERROR! Access denied!"); switch (query_ynq("Bypass security?")) { case 'q': case 'Q': shutdown_terminal(); return; case 'n': case 'N': print_line("Shutting down... press any key."); getch(); shutdown_terminal(); return; case 'y': case 'Y': if (!hack_attempt(&(g->u))) { if (failures.size() == 0) { print_line("Maximum login attempts exceeded. Press any key..."); getch(); shutdown_terminal(); return; } activate_random_failure(g); shutdown_terminal(); return; } else { // Successful hack attempt security = 0; print_line("Login successful. Press any key..."); getch(); reset_terminal(); } } } else { // No security print_line("Login successful. Press any key..."); getch(); reset_terminal(); } // Main computer loop bool done = false; // Are we done using the computer? do { reset_terminal(); print_line("%s - Root Menu", name.c_str()); for (int i = 0; i < options.size(); i++) print_line("%d - %s", i + 1, options[i].name.c_str()); print_line("Q - Quit and shut down"); char ch; do ch = getch(); while (ch != 'q' && ch != 'Q' && (ch < '1' || ch - '1' > options.size())); if (ch == 'q' || ch == 'Q') done = true; else { // We selected an option other than quit. ch -= '1'; // So '1' -> 0; index in options.size() computer_option current = options[ch]; if (current.security > 0) { print_error("Password required."); if (query_ynq("Hack into system?")) { if (!hack_attempt(&(g->u), current.security)) { activate_random_failure(g); shutdown_terminal(); return; } else { activate_function(g, current.action); done = true; reset_terminal(); } } } else // No need to hack, just activate activate_function(g, current.action); } // Done processing a selected option. } while (!done); // Done with main terminal loop shutdown_terminal(); // This should have been done by now, but just in case. }
int _readline(struct rls *rls) { int flags; struct termios termios; int i, j; int fkey; char *kb; int ihist; int rc; char **tab; char *p; int off = 0; if (isatty(rls->fdin)) set_terminal(rls->fdin, &termios); memset(rls->kbuffer, 0, rls->maxbuflen); rls->pos = 0; /* flags = fcntl(0, F_GETFL); fcntl(0, F_SETFL, flags); */ flags = 0; ihist = 0; kb = rls->kb; rc = 0; do { if (off >= rc) { memset(kb, 0, sizeof(rls->kb)); rc = read(rls->fdin, kb, sizeof(rls->kb)); if (rc <= 0) { //usleep(1); continue; } off = 0; } else { memmove(kb, kb + off, rc - off); rc -= off; } #if 0 printf("\n%2.2x - %2.2x - %2.2x - %2.2x - %2.2x - %2.2x - %2.2x - %2.2x\n", kb[0], kb[1], kb[2], kb[3], kb[4], kb[5], kb[6], kb[6]); fflush(stdout); #endif if (kb[0] == ESC && kb[1] == ESC_PAD) { fkey = kb[2] | (kb[3] << 8); if (kb[2] == KEY_UP) { off = 3; if (flags == 0) { /* set history-mode */ flags = 1; ihist = rls->hist_total; if (rls->pos != 0) strcpy(rls->history[rls->maxhistnum], rls->kbuffer); else rls->history[rls->maxhistnum][0] = '\0'; } if (ihist == 0) continue; i = findhistory(rls, 0 - ihist); if (i == -1) continue; ihist = i; /* while (rls->pos-- > 0) */ i = strlen(rls->kbuffer); while (rls->pos++ < i) vprint(rls->fdout, " ", 1); while (i-- > 0) vprint(rls->fdout, "\b \b", 3); memset(rls->kbuffer, 0, rls->maxbuflen); strcpy(rls->kbuffer, rls->history[ihist]); rls->pos = strlen(rls->kbuffer); vprint(rls->fdout, rls->kbuffer, rls->pos); continue; } if (kb[2] == KEY_DOWN){ off = 3; if (flags == 0) continue; if ((ihist + 1) >= rls->hist_total) { i = strlen(rls->kbuffer); while (rls->pos++ < i) vprint(rls->fdout, " ", 1); while (i-- > 0) vprint(rls->fdout, "\b \b", 3); memset(rls->kbuffer, 0, rls->maxbuflen); rls->pos = 0; flags = 0; continue; } //printf("ihist = %d, rls->hist_total = %d\n", // ihist, rls->hist_total); i = findhistory(rls, ihist); if (i == -1) continue; ihist = i; i = strlen(rls->kbuffer); while (rls->pos++ < i) vprint(rls->fdout, " ", 1); while (i-- > 0) vprint(rls->fdout, "\b \b", 3); memset(rls->kbuffer, 0, rls->maxbuflen); strcpy(rls->kbuffer, rls->history[ihist]); rls->pos = strlen(rls->kbuffer); vprint(rls->fdout, rls->kbuffer, rls->pos); continue; } if (kb[2] == KEY_RIGHT) { off = 3; if (rls->pos < strlen(rls->kbuffer)) vprint(rls->fdout, &(rls->kbuffer[rls->pos++]), 1); continue; } if (kb[2] == KEY_LEFT) { off = 3; if (rls->pos > 0) { vprint(rls->fdout, "\b", 1); rls->pos --; } continue; } if (fkey == KEY_HOME) { off = 4; while (rls->pos > 0) { vprint(rls->fdout, "\b", 1); rls->pos --; } continue; } if (fkey == KEY_END) { off = 4; while (rls->pos < strlen(rls->kbuffer)) { vprint(rls->fdout, &(rls->kbuffer[rls->pos++]), 1); } continue; } } flags = 0; /* 'enter' */ if (kb[0] == LF || kb[0] == CR) { off = 1; trimspace(rls->kbuffer); rls->pos = strlen(rls->kbuffer); if (rls->pos == 0) break; if (rls->hist_total == rls->maxhistnum) { memmove(rls->history[0], rls->history[1], rls->maxbuflen * (rls->maxhistnum - 1)); rls->hist_total--; } strcpy(rls->history[rls->hist_total++], rls->kbuffer); break; } if (kb[0] == CTRLC) { off = 1; rls->pos = 0; rls->kbuffer[0] = '\0'; break; } if (kb[0] == '\t') { off = 1; if (rls->tab_callback == NULL) continue; p= NULL; if (rls->pos != 0) { p = rls->kbuffer + rls->pos; while (p > rls->kbuffer) { if (*(p - 1) == ' ') break; p--; } } tab = rls->tab_callback(rls->kbuffer, p); if (tab == NULL) continue; /* only one */ if (*tab != NULL && *(tab + 1) == NULL) { for (i = 0; i < strlen(p); i++) vprint(rls->fdout, "\b \b", 3); i = strlen(*tab); vprint(rls->fdout, *tab, i); if (p - rls->kbuffer + i < rls->maxbuflen) { strcpy(p, *tab); rls->pos = strlen(rls->kbuffer); } free(*tab); free(tab); continue; } /* more than one */ vprint(rls->fdout, "\n", 1); i = 0; while (*(tab + i)) { vprint(rls->fdout, *(tab + i), strlen(*(tab + i))); vprint(rls->fdout, " ", 1); free(*(tab + i)); i++; } vprint(rls->fdout, "\n", 1); free(tab); vprint(rls->fdout, rls->prompt, strlen(rls->prompt)); vprint(rls->fdout, rls->kbuffer, rls->pos); continue; } /* backspace */ if ((kb[0] == BACKSP0)|| (kb[0] == BACKSP1)) { off = 1; if (rls->pos > 0) { i = strlen(rls->kbuffer); j = rls->pos; while (j < i) { rls->kbuffer[j - 1] = rls->kbuffer[j]; j++; } rls->kbuffer[j - 1] = '\0'; rls->pos--; vprint(rls->fdout, "\b", 1); vprint(rls->fdout, &rls->kbuffer[rls->pos], strlen(&rls->kbuffer[rls->pos])); vprint(rls->fdout, " \b", 2); for (i = 0; i < strlen(rls->kbuffer) - rls->pos; i++) vprint(rls->fdout, "\b", 1); } continue; } /* normal key */ off = 1; i = kb[0]; if (isprint(i)) { if (rls->pos < strlen(rls->kbuffer) - 1) { j = strlen(rls->kbuffer); /* avoid overflow */ if (j < rls->maxbuflen - 1) { while (j > rls->pos) { rls->kbuffer[j] = rls->kbuffer[j-1]; j--; } rls->kbuffer[rls->pos] = kb[0]; //rls->kbuffer[rls->pos + 1] = '\0'; vprint(rls->fdout, &rls->kbuffer[rls->pos], strlen(&rls->kbuffer[rls->pos])); for (j = 0; j < strlen(rls->kbuffer) - rls->pos - 1; j++) vprint(rls->fdout, "\b", 1); } } else { rls->kbuffer[rls->pos] = kb[0]; rls->kbuffer[rls->pos + 1] = '\0'; vprint(rls->fdout, &kb[0], 1); } rls->pos++; } } while (kb[0] != CTRLP); if (isatty(rls->fdin)) reset_terminal(rls->fdin, &termios); return (rls->pos > 0 ? 1 : 0); }