1b78dda125
- mdview2_status.c: вынести статус-бар/меню/спиннер из ядра - mdview2.c: убрать retry-цикл в alloc_set_storage (fail-fast вместо ложной устойчивости — при нехватке EMM под индекс контент тоже не влезет) - mdview2.h: дополнить экспортами статус-модуля - mdview2_md.c / mdview2_raw.c: зачистка после расщепления - mdview/mdview.c: переименовать scroll_* → md_scroll_* (симметрия) - docs/fast_ram.md, docs/turboc.txt: добавить справочные доки - examples/mdview2/README.MD, READMEBG.MD: обновить описание Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
285 lines
19 KiB
Plaintext
285 lines
19 KiB
Plaintext
Функция puts()
|
||
Функция puts() записывает символьную строку в стандартный
|
||
поток данных (т.е. выводит ее на экран). Функция puts()
|
||
возвращает код символа «\п».
|
||
int puts(const char *string);
|
||
После выполнения функции puts() курсор переводится на
|
||
новую строку.
|
||
|
||
|
||
Функция putchar()
|
||
Функция putchar() записывает символ в стандартный поток
|
||
данных (т.е. выводит его на экран). Функция putchar() возвращает
|
||
выведенный на экран символ.
|
||
int putchar(int ch);
|
||
|
||
|
||
Функция gets()
|
||
Функция gets() считывает символьную строку стандартного
|
||
входного потока и помещает ее по адресу, заданному указателем
|
||
buffer; прием строки заканчивается, если функция обнаруживает
|
||
символ конца строки «\п», данный символ удаляется и
|
||
заменяется нуль-терминатором «\0».
|
||
char *gets (char*buffer);
|
||
Функция gets() возвращает указатель на считанную строку.
|
||
|
||
|
||
Функция getchar()
|
||
Функция getchar() считывает символ из стандартного
|
||
входного потока.
|
||
int getchar(void);
|
||
Функция getchar() возвращает считанный символ.
|
||
|
||
|
||
|
||
=== Функции консольного ввода
|
||
|
||
char *cgets(char *str)
|
||
- помещает в буфер, на начало которого
|
||
указывает str, строку символов со стандартного ввода.
|
||
Запись символов начинается с str[l]; str[0] должен содержать
|
||
максимальное число символов, которое должно быть прочитано
|
||
и записано в строку. Функция возвращает указатель на начало
|
||
буфера str.
|
||
|
||
int getch(void)
|
||
- выполняет ввод символа с клавиатуры.
|
||
Turbo С не выполняет «эхо» ввода. В этой связи полезна для
|
||
организации интерфейса с пользователем, при котором нажатие
|
||
той или иной клавиши вызывает немедленную реакцию программы
|
||
без отображения введённого символа на экране.
|
||
|
||
int getche(void)
|
||
- выполняет небуферизуемый ввод символа
|
||
с клавиатуры. Turbo С «эхоирует» ввод на экране. Перевод
|
||
строки происходит при достижении правой вертикальной
|
||
границы текущего активного окна.
|
||
|
||
int kbhit(void)
|
||
- проверяет, пуст ли буфер клавиатуры.
|
||
Если в буфере есть символы, функция возвращает ненулевое
|
||
значение, в противном случае она возвращает О. Является
|
||
удобным средством предотвращения «зацикливания» или «по-
|
||
висания» при ожидании невозможного в данный момент события.
|
||
Кроме того, осуществляется проверка нажатия комбинации
|
||
клавиш «Ctrl-Break», что позволяет выполнить аварийное завершение
|
||
программы.
|
||
|
||
int ungetch(int ch)
|
||
- записывает непосредственно в буфер
|
||
клавиатуры символ ch. Он будет доступен при выполнении следующей
|
||
операции чтения с консоли (функциями файла
|
||
«conio.h»). Разрешает помещать только один символ, который
|
||
не должен совпадать с константой EOF, описанной в файле
|
||
«stdio.h». В случае успеха функция возвращает ch; в противном
|
||
случае возвращается -1.
|
||
|
||
|
||
=== Функции консольного вывода
|
||
|
||
void textmode(int newmode)
|
||
- изменяет текущий текстовый
|
||
режим. Новый режим указывается единственным параметром
|
||
newmode и может задаваться либо числом, либо с использованием
|
||
символических констант, значения которых определяет
|
||
перечислимый тип text_modes
|
||
|
||
Функции консольного вывода используют понятие активного
|
||
окна экрана. Активное окно - это прямоугольная область
|
||
экрана, в границах которой в данный момент работают функции.
|
||
Описание активного окна (или, как часто говорят, фрейм)
|
||
хранится во внутренней структурной переменной Turbo С. Установку
|
||
параметров активного текстового окна выполняет функция
|
||
window ().
|
||
|
||
void window(int l_t_col, int l_t_row, int r_b_col, int r_b_row)
|
||
- описывает активное текстовое окно: первая пара
|
||
аргументов задает столбец и строку левого верхнего угла, вторая
|
||
пара - правого нижнего угла. Строки и столбцы нумеруются,
|
||
начиная от 1. Поэтому, например, координаты левого верх-
|
||
него и правого нижнего углов экрана в режимах «25 строк х 80
|
||
столбцов» задаются парами (1,1) и (80,25). Ось X направлена
|
||
слева направо, а ось Y направлена сверху вниз. Следует обратить
|
||
внимание на то, как в Turbo С задаются координаты углов,
|
||
сначала столбец, затем строка.
|
||
|
||
Фрейм окна Turbo С имеет следующую структуру:
|
||
struct text_info {
|
||
unsigned char winleft; /* столбец, строка */
|
||
unsigned char wintop; /* левого верхнего угла */
|
||
unsigned char winright; /* столбец, строка */
|
||
unsigned char winbottom;/* правого верхнего угла */
|
||
unsigned char attribute; /* атрибуты */
|
||
unsigned char normattr; /* окна */
|
||
unsigned char screenheight; /* полная высота экрана */
|
||
unsigned char screenwidth; /* полная ширина экрана */
|
||
unsigned char curx; /* строка, столбец */
|
||
unsigned char сuгу /* текущей позиции курсора */
|
||
}
|
||
|
||
|
||
void gettextinfo(struct text_info *r)
|
||
- заполняет поля
|
||
структурной переменной по шаблону text_info, на которую
|
||
ссылается. Шаблон структуры text_info, описывающей текущее
|
||
окно экрана, содержится в заголовочном файле «conio.h».
|
||
|
||
Функция window() инициализирует поля координат фрейма
|
||
окна. Функции textcolor(), textbackground(), textattr() и
|
||
другие управляют цветом отображаемых символов окна.
|
||
|
||
void textattr(int newattr)
|
||
- устанавливает атрибут для
|
||
функций, работающих с текстовыми окнами. Атрибут хранится в
|
||
поле attribute структурной переменной по шаблону text_info,
|
||
доступной через функцию gettextinfo()
|
||
|
||
void textcolor(int newcolor)
|
||
- задает цвет символов, не
|
||
затрагивая установленный цвет фона. Цвет может быть или числом,
|
||
или формироваться из символических констант, значения
|
||
которых определяет перечисляемый тип COLORS.
|
||
|
||
void textbackground(int newcolor)
|
||
- задает цвет фона
|
||
символов, не затрагивая установленный цвет символа. Цвет может
|
||
быть или числом, или формироваться из символических
|
||
констант
|
||
|
||
void gotoxy(int х, int у)
|
||
- устанавливает курсор в строку
|
||
у и столбец х в текущем активном окне экрана. Верхний левый
|
||
угол окна имеет координаты (1,1). При попытке позиционировать
|
||
курсор за границы окна он останавливается на границе окна.
|
||
Особенностью функции является то, что координаты х и у
|
||
являются относительными, приведенными к левому верхнему
|
||
углу. Например, если текущее окно было описано функцией
|
||
window(1,8,80,25), обращение gotoxy(5,5); установит курсор
|
||
в пятый относительный столбец окна (совпадает с абсолютным
|
||
столбцом 4, отсчитываемым от О) в пятой относительной строке
|
||
(так как верхняя строка окна задана равной 5, то абсолютная
|
||
строка будет равна 5+8-1, если отсчет строк ведется от О)
|
||
|
||
int wherex(void),
|
||
int wherey(void)
|
||
- сообщают столбец и
|
||
строку текущей позиции курсора; возвращают целое число в
|
||
диапазоне
|
||
|
||
void clreol(void)
|
||
- стирает в текстовом окне строку, на которую
|
||
установлен курсор, начиная с текущей позиции курсора и
|
||
до конца строки (до правой вертикальной границы окна).
|
||
|
||
void clrscr(void)
|
||
- очищает все текстовое окно. Цвет «заливки»
|
||
окна при очистке будет соответствовать значению, установленному
|
||
символической переменной attribute в описании
|
||
окна (структурная переменная по шаблону text_info).
|
||
|
||
void delline(void)
|
||
- стирает в текстовом окне всю строку
|
||
текста, на которую установлен курсор.
|
||
|
||
void insline(void)
|
||
- вставляет пустую строку в текущей
|
||
позиции курсора со сдвигом всех остальных строк окна на одну
|
||
строку вниз. При этом самая нижняя строка текста окна теряется.
|
||
|
||
int cprintf(const char *format, ...)
|
||
- выполняет вывод
|
||
информации с преобразованием по заданной форматной строке,
|
||
на которую указывает format. Является аналогом функции
|
||
стандартной библиотеки printf(), но выполняет вывод в пределах
|
||
заданного окна. В отличие от printf() функция cprintf()
|
||
иначе реагирует на специальный символ '\п' - курсор переводится
|
||
на новую строку, но не возвращается к левой границе окна.
|
||
Поэтому для перевода курсора на начало новой строки текстового
|
||
окна следует вывести последовательность символов CR-
|
||
LF (OxOd,OxOa). Остальные специальные символы воздействуют
|
||
на курсор так же, как и в случае функций стандартного ввода-
|
||
вывода. Функция возвращает число выведенных байтов, а не
|
||
число обработанных полей, как это делает функция printf().
|
||
|
||
int cputs(const char *str)
|
||
- выводит строку символов в
|
||
текстовое окно, начиная с текущей позиции курсора. На начало
|
||
выводимой ASCIIZ-строки указывает str. Является аналогом
|
||
функции стандартной библиотеки puts(), выполняет вывод в
|
||
пределах заданного окна и при выводе не добавляет специальный
|
||
символ '\п'. Реакция cputs() на специальный символ '\п'
|
||
аналогична реакции cprintf(): курсор переводится на новую
|
||
строку, но не возвращается к левой границе окна. Поэтому для
|
||
перевода курсора на начало новой строки текстового окна следует
|
||
вывести последовательность символов CR-LF (OxOd,OxOa).
|
||
Остальные специальные символы воздействуют на курсор так
|
||
же, как и в случае функций стандартного ввода/вывода. Функция
|
||
возвращает ASCII-код последнего выведенного на экран
|
||
символа. В отличие от puts() в функции отсутствует возврат
|
||
символа EOF (вывод на экран происходит в любом случае).
|
||
|
||
int movetext(int left, int top, int right, int bottom, int destleft, int desttop)
|
||
- переносит окно, заданное координатами
|
||
левого верхнего (left, top) и правого нижнего (right, bottom)
|
||
углов, в другое место на экране, заданное координатами левого
|
||
верхнего угла нового положения окна. Размеры окна по горизонтали
|
||
и вертикали сохраняются. Все координаты задаются относительно
|
||
координат верхнего левого угла экрана (1,1). Функция
|
||
возвращает ненулевое значение, если перенос заданного
|
||
окна выполнен. В противном случае возвращается О. Функция
|
||
корректно выполняет перекрывающиеся переносы, т.е. переносы,
|
||
в которых прямоугольная область-источник и область, в которую
|
||
окно переносится, частично покрывают друг друга.
|
||
|
||
int putch(int ch)
|
||
- выводит символ в текущей позиции
|
||
текстового окна экрана. Как и для функций cprintf(), cputs(),
|
||
специальный символ '\п' вызывает только переход курсора на
|
||
новую строку текстового окна без возврата к его левой вертикальной
|
||
границе. Остальные специальные символы воздействуют
|
||
на курсор так же, как и для функций стандартного ввода-
|
||
вывода.
|
||
|
||
int puttext(int left, int top, int right, int bottom, void source)
|
||
- выводит на экран текстовое окно, заданное координатами
|
||
левого верхнего (left, top) и правого нижнего (right,
|
||
bottom) углов. Символы и атрибуты располагаются в буфере,
|
||
адрес начала которого задаёт указатель source (функция «открывает»
|
||
или «восстанавливает» текстовое окно экрана). Обычно
|
||
используется вместе с функцией gettext(), выполняющей
|
||
обратную операцию - запись в source символов/атрибутов,
|
||
полностью описывающих все знакоместа текстового окна. Функция
|
||
проверяет по заданным координатам окна, можно ли разместить
|
||
окно на экране для текущего режима видеоадаптера и
|
||
корректны ли эти координаты. В случае, когда окно успешно
|
||
выведено, возвращается ненулевое значение.
|
||
|
||
int gettext(int left, int top, int right, int bottom, void destin)
|
||
- записывает в буфер destin символы и атрибуты текстового
|
||
окна, заданного строкой и столбцом левого верхнего
|
||
(left, top) и правого нижнего (right, bottom) углов. Первые два
|
||
слова буфера занимают ширина и длина скопированного окна.
|
||
Работает только в текстовых режимах видеоадаптера. Координаты
|
||
задаются относительно верхнего левого угла экрана (1,1). В
|
||
случае успеха возвращает ненулевое число.
|
||
|
||
|
||
=== Файловый ввод/вывод
|
||
|
||
Прототипы функций ввода-вывода и используемые для этого
|
||
типы данных описаны в стандартном заголовочном файле
|
||
«stdio.h».
|
||
Для файлового ввода/вывода в Си предусмотрены две основные
|
||
группы функций:
|
||
• функции низкоуровневого ввода/вывода, использующие
|
||
для доступа к файлам целочисленные файловые дескрипторы;
|
||
• функции более высокого уровня, осуществляющие буферизованный
|
||
ввод/вывод с применением потоков.
|
||
Поток в Си - это объект, служащий для доступа к файлам
|
||
как к упорядоченной последовательности символов.
|
||
Поток представляется структурой типа FILE, с которой ассоциирован
|
||
некоторый открытый файл. При необходимости несколько
|
||
потоков могут ссылаться на один и тот же файл.
|
||
|
||
|