/* * Do a special thing (beep, flush, etc) */ static errr Term_xtra_emx(int n, int v) { switch (n) { case TERM_XTRA_SHAPE: if (v) { v_ctype(curs_start, curs_end); } else { v_hidecursor(); } return (0); case TERM_XTRA_NOISE: DosBeep(440, 50); return (0); case TERM_XTRA_FLUSH: while (!CheckEvents(TRUE)); return 0; case TERM_XTRA_EVENT: /* Process an event */ return (CheckEvents(!v)); /* Success */ return (0); } return (1); }
char getchar(void) { byte result; byte cnt = 0; do { if (cnt == 0) v_showcursor(); result = io_read(128); if (result == 255) { delay_ms(15); if (cnt == CURSOR_DELAY) v_hidecursor(); if (++cnt == CURSOR_DELAY << 1) cnt = 0; } } while (result == 255); v_hidecursor(); return result; }
void vm_setcursorstyle(int style) { if (_osmode == DOS_MODE) { if (vm_iscolorcard()) { switch (style) { case CURSORHALF: vm_setcursorsize(4, 7); break; case CURSORFULL: vm_setcursorsize(0, 7); break; case CURSORNORM: vm_setcursorsize(7, 8); break; case CURSORHIDE: v_hidecursor(); break; default: break; } } else { switch (style) { case CURSORHALF: vm_setcursorsize(8, 13); break; case CURSORFULL: vm_setcursorsize(0, 13); break; case CURSORNORM: vm_setcursorsize(11, 13); break; case CURSORHIDE: vm_setcursorsize(32, 32); break; default: break; } } } else { VIOCURSORINFO vi; switch (style) { case CURSORHALF: vi.yStart = -50; vi.cEnd = -100; vi.cx = 0; vi.attr = 0; VioSetCurType(&vi, 0); break; case CURSORFULL: vi.yStart = 0; vi.cEnd = -100; vi.cx = 0; vi.attr = 0; VioSetCurType(&vi, 0); break; case CURSORNORM: vi.yStart = -90; vi.cEnd = -100; vi.cx = 0; vi.attr = 0; VioSetCurType(&vi, 0); break; case CURSORHIDE: vi.yStart = -90; vi.cEnd = -100; vi.cx = 0; vi.attr = -1; VioSetCurType(&vi, 0); break; default: break; } } }
void start_terminal() { char c; byte echo = 1, cnt = 0; write_inverse(6, 30, " SELECT BAUD RATE "); write_inverse(7, 30, " 1: 4800 "); write_inverse(8, 30, " 2: 9600 "); write_inverse(9, 30, " 3: 19200 "); write_inverse(10, 30, " 4: 38400 "); write_inverse(11, 30, " 5: 57600 "); write_inverse(12, 30, " 6: 115200 "); do { c = getchar_nc(); } while (!(c >= '1' && c <= '6')); io_write(170, c - '0'); switch (c) { case '1': write_inverse(0, 20, "4800 BAUD"); break; case '2': write_inverse(0, 20, "9600 BAUD"); break; case '3': write_inverse(0, 20, "19200 BAUD"); break; case '4': write_inverse(0, 20, "38400 BAUD"); break; case '5': write_inverse(0, 20, "57600 BAUD"); break; case '6': write_inverse(0, 20, "115200 BAUD"); break; } v_cls(); while (1) { if (cnt == 0) v_showcursor(); c = io_read(128); if (((byte)c) == 255) { delay_ms(15); if (cnt == CURSOR_DELAY) v_hidecursor(); if (++cnt == CURSOR_DELAY << 1) cnt = 0; } // if (c == 255) else { v_hidecursor(); cnt = 0; if (c == 0) { // special key c = getchar(); switch (c) { case 60: // F2 echo = 1 - echo; if (echo) write_inverse(0, 0, " F2: ECHO ON "); else write_inverse(0, 0, " F2: ECHO OFF"); break; case 66: // F8 v_cls(); break; case 68: // F10 quit_app(); break; } // switch (c) } // if (c == 0) else { io_write(171, c); if (echo) { if (c == 8) v_backspace(); else putchar(c); } // if (echo) } // if (c == 0) else } // if (c == 255) else if (io_read(174)) { v_hidecursor(); do { c = io_read(173); if (c) putchar(c); } while (c); } } // while (1) } // start_editor