/* * Test using timers and intervals with curses. */ if (typeof Ncurses !== 'object') { throw new Error('Ncurses required'); } function fillScreen(ch) { var size, w, h; var i, j; size = Ncurses.getmaxyx(); h = size[0]; w = size[1]; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { Ncurses.mvprintw(i, j, ch); } } Ncurses.refresh(); } function main() { var i, j; var counters = []; var size, w, h; Ncurses.initscr(); size = Ncurses.getmaxyx(); h = size[0]; w = size[1]; fillScreen('.'); setInterval(function () { Ncurses.mvprintw(1, 4, new Date().toISOString()); Ncurses.refresh(); }, 1000); function addCounter(row, index, interval) { counters[index] = 0; setInterval(function () { counters[index]++; Ncurses.mvprintw(row, 4, '' + Date.now() + ' ' + counters[index]); Ncurses.refresh(); }, interval); } function addRandomChar(row, col, interval) { setTimeout(function () { Ncurses.mvprintw(row, col, String.fromCharCode(Math.random() * 64 + 0x20)); Ncurses.refresh(); }, interval); } for (i = 0; i < h - 5; i++) { addCounter(3 + i, i, 363 * i + 400); } /* Here the inserts take a lot of time because the underlying timer manager * data structure has O(n) insertion performance. */ for (i = 0; i < h - 5; i++) { for (j = 0; j < w - 50; j++) { // Math.exp(0)...Math.exp(8) is an uneven distribution between 1...~2980. addRandomChar(3 + i, 28 + j, 58000 - Math.exp(Math.random() * 8) * 20); } } setTimeout(function () { Ncurses.endwin(); Ncurses.delscreen(); requestEventLoopExit(); }, 120e3); } main();