Лабораторная работа: Организация интерфейса пользователя
Стандартные средства Си для ввода данных (функция scanf) предоставляют пользователю очень мало возможностей. Редактирование вводимого текста возможно только путем удаления символов с конца строки, начальное значение установить нельзя (по умолчанию вводится пустая строка), прокрутки строки, если она не влазит в окно, не предусмотрено (точнее, строка просто переносится по границе окна, что не всегда желательно).
В связи с этим очень часто возникает необходимость в разработке своих средств ввода текста, которые обеспечили бы удобный и привычный пользовательский интерфейс. При этом достаточно организовать ввод текстовой строки, а ввод чисел и более сложных значений (например, интервалов) организуется на основе текстового ввода с последующей обработкой введенной строки (например, чтением числа с помощью функции strtol).
Рассмотрим следующую функцию ввода текста с редактированием:
int inputstr(char* str,int maxlen)
{
int x=wherex(),y=wherey(),curlen=strlen(str);
int pos=curlen;
char firstkey=1;
highvideo();
cprintf("%-*s",maxlen,str);
lowvideo();
gotoxy(x+pos,y);
_setcursortype(_NORMALCURSOR);
int exitcode=-1;
while (exitcode<0)
{
int key=getch();
switch (key)
{
case 0:
key=getch();
switch (key)
{
case LEFT:
if (pos>0)
--pos;
break;
case RIGHT:
if (pos<curlen)