/* * cgets — построчный ввод в стиле Solid-C / Turbo-C: * buf[0] = максимум символов (вход) * buf[1] = фактическое количество (выход) * buf[2..] = символы + NUL * Ввод через getche() (с эхом), Enter завершает строку (выводится * "\r\n"), Backspace откатывает символ. Возвращает &buf[2]. */ #include #include char *cgets(char *buf) { uint8_t maxlen = (uint8_t)buf[0]; uint8_t n = 0; while (n < maxlen) { int ch = getche(); if (ch == '\n' || ch == '\r') { putch('\r'); putch('\n'); break; } if (ch == 8) { /* backspace */ if (n > 0) { n--; } continue; } buf[2 + n] = (char)ch; n++; } buf[1] = (char)n; buf[2 + n] = 0; return &buf[2]; }