/*
 * cgets — построчный ввод в стиле Solid-C / Turbo-C:
 *   buf[0] = максимум символов (вход)
 *   buf[1] = фактическое количество (выход)
 *   buf[2..] = символы + NUL
 * Ввод через getche() (с эхом), Enter завершает строку (выводится
 * "\r\n"), Backspace откатывает символ.  Возвращает &buf[2].
 */

#include <conio.h>
#include <stdint.h>

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];
}
