From d32a967966bc8d8568dc9db8c9f0e2e741a24f97 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Wed, 16 Aug 2023 16:06:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D1=91=D1=80=D1=81=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- snipplets/code/C/conio.h/README.md | 148 ++++++++++--------- snipplets/code/C/conio.h/textattr_coding.png | Bin 0 -> 23765 bytes 2 files changed, 75 insertions(+), 73 deletions(-) create mode 100644 snipplets/code/C/conio.h/textattr_coding.png diff --git a/snipplets/code/C/conio.h/README.md b/snipplets/code/C/conio.h/README.md index 21b1ea9..f8fff65 100644 --- a/snipplets/code/C/conio.h/README.md +++ b/snipplets/code/C/conio.h/README.md @@ -13,9 +13,9 @@ ## Содержание -### `void _setcursortype(int type)` +## `void _setcursortype(int type)` -**Описание:** +### Описание: Эта функция не определена стандартом ANSI С. @@ -27,16 +27,16 @@ занимающий символьную позицию. Использование макроса `_NORMALCURSOR` создает стандартный курсор. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода изменяет курсор */ _setcursortуре(_SOLIDCURSOR); ``` -### `char *getpass(const char *str)` +## `char *getpass(const char *str)` -**Описание:** +### Описание: Эта функция не определена стандартом ANSI С. @@ -47,7 +47,7 @@ _setcursortуре(_SOLIDCURSOR); Если необходимо сохранить эту строку, ее нужно скопировать в какое-либо место в памяти. Нажатые клавиши не отображаются эхом на экране во время ввода пароля. -**Пример:** +### Пример: ```c /* Следующая функция ожидает ввода подходящего пароля */ @@ -65,9 +65,9 @@ void pswd(char *pw) { } ``` -### `void window(int left, int top, int right, int bottom)` +## `void window(int left, int top, int right, int bottom)` -**Описание:** +### Описание: Функция `window()` используется для создания прямоугольного текстового окна, имеющего левый верхний угол и правый нижний угол в точках с координатами @@ -76,7 +76,7 @@ void pswd(char *pw) { После успешного вызова функции `window()` все ссылки на координаты местоположения интерпретируются относительно окна, а не экрана. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода создает окно @@ -87,14 +87,14 @@ gotoxy(2, 3); cprintf("at location 2, 3"); ``` -### `int wherex(void)` и `int wherey(void)` +## `int wherex(void)` и `int wherey(void)` -**Описание:** +### Описание: Функции `wherex()` и `wherey()` возвращают текущие координаты курсора `х` и `у` по отношению к текущему текстовому окну. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода присваивает переменным @@ -104,9 +104,9 @@ xpos = wherex(); ypos = wherey(); ``` -### `void textmode(int mode)` +## `void textmode(int mode)` -**Описание:** +### Описание: Функция `textmode()` используется для изменения видеорежима текстового экрана. Аргумент `mode` может принимать одно из значений, показанных в следующей таблице. @@ -126,7 +126,7 @@ ypos = wherey(); После вызова функции `textmode()` экран переустанавливается и все атрибуты текстового экрана возвращаются к своим значениям по умолчанию. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода переводит видеорежим на 80-колоночный цветной */ @@ -134,9 +134,9 @@ textmode(С80); ``` -### `void textcolor(int color)` +## `void textcolor(int color)` -**Описание:** +### Описание: Функция `textcolor()` устанавливает цвет символов, выводимых на текстовый экран. Работает в старых компиляторах таких, как **Turbo C** и **Dev C**. @@ -167,16 +167,16 @@ textmode(С80); Цвет символов на экране не изменяется функцией `textcolor()`. Изменения касаются только тех символов, которые будут выведены после функции `textcolor()`. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода выводит текст с помощью мерцающих символов */ textcolor(BLINK); ``` -### `void textbackground(int color)` +## `void textbackground(int color)` -**Описание:** +### Описание: Функция `textbackground()` устанавливает цвет фона текстового экрана. Вызов функции `textbackground()` воздействует только на цвет фона последующих операций записи. @@ -195,16 +195,16 @@ textcolor(BLINK); Новый цвет фона становится видимым после вызова функции `textbackground()`. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода устанавливает цвет фона текстового экрана голубым */ textbackground(CYAN); ``` -### `void textattr(int attr)` +## `void textattr(int attr)` -**Описание:** +### Описание: Функция `textattr()` устанавливает одновременно как цвета переднего плана, так и фона. Величина параметра `attr` представляет собой закодированную информацию о цвете. @@ -223,7 +223,7 @@ textbackground(CYAN); Для того, чтобы заставить этот текст мерцать, к результату надо применить операцию побитового ИЛИ с макросом `BLINK(128)`. -**Пример:** +### Пример: ```c /* Следующая инструкция выводит текст, @@ -231,9 +231,9 @@ textbackground(CYAN); textattr(RED | BLINK | BLUE*16); ``` -### `int puttext(int left, int top, int right, int bottom, void *buf)` +## `int puttext(int left, int top, int right, int bottom, void *buf)` -**Описание:** +### Описание: Функция `puttext()` копирует текст, предварительно сохраненный с использованием функции `gettext()`. Копирование осуществляется из буфера, на который указывает переменная `buf`, @@ -245,6 +245,8 @@ textattr(RED | BLINK | BLUE*16); если координаты выходят за допустимую область, и ненулевое значение — в противном случае. +### Пример: + ```c /* Следующий фрагмент кода копирует область экрана в память, на которую указывает параметр buf, @@ -254,22 +256,22 @@ gettext(10, 10, 20, 20, buf); puttext(0, 0, 30, 30, buf); ``` -### `void normvideo(void)` +## `void normvideo(void)` -**Описание:** +### Описание: После вызова функции `normvideo()` изображенные на экране символы выводятся в режиме нормальной интенсивности. Эта функция работает только для текстовых экранов. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода включает режим вывода с нормальной интенсивностью */ normvideo(); ``` -### `void lowvideo(void)` +## `void lowvideo(void)` **Описание** @@ -277,30 +279,30 @@ normvideo(); в режиме пониженной яркости. Эта функция работает только для текстовых экранов. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода включает вывод с пониженной яркостью */ lowvideo(); ``` -### `void highvideo(void)` +## `void highvideo(void)` -**Описание:** +### Описание: После вызова функции `highvideo()` выводимые на экран символы изображаются в режиме повышенной яркости. Эта функция работает только для текстовых экранов. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода включает вывод с повышенной яркостью */ highvideo(); ``` -### `int movetext(int left, int top, int right, int bottom, int newleft, int newtop)` +## `int movetext(int left, int top, int right, int bottom, int newleft, int newtop)` -**Описание:** +### Описание: Функция `movetext()` перемещает часть текста по экрану. Текст берется из прямоугольника с левым верхним углом @@ -312,7 +314,7 @@ highvideo(); если хотя бы одна из координат выходит за пределы допустимой области, и ненулевое значение — в противном случае. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода передвигает содержимое прямоугольника @@ -321,16 +323,16 @@ highvideo(); movetext(1, 1, 8, 8, 10, 10); ``` -### **void insline(void)** +## **void insline(void)** -**Описание:** +### Описание: Функция `insline()` вставляет пустую строку в текущее положение курсора. Все строки ниже курсора сдвигаются вниз. Эта функция предназначена только для текстового режима и выполняет операцию вставки относительно текущего текстового окна. -**Пример:** +### Пример: ```c /* Следующая программа иллюстрирует использование функции insline() */ @@ -353,14 +355,14 @@ int main(void) { } ``` -### `void gotoxy(int x, int y)` +## `void gotoxy(int x, int y)` -**Описание:** +### Описание: Функция `gotoxy()` помещает курсор текстового экрана в точку с координатами х, у. Если хотя бы одна из координат недействительна, то никаких действий не выполняется. -**Пример:** +### Пример: ```c /* Следующая программа выводит символы X по диагонали экрана */ @@ -382,9 +384,9 @@ int main(void) { } ``` -### `void gettextinfo(struct text_info *info)` +## `void gettextinfo(struct text_info *info)` -**Описание:** +### Описание: Функция `gettextinfo()` получает текущие установки текста и возвращает их в структуре, на которую указывает параметр `info`. @@ -406,7 +408,7 @@ struct text_info { }; ``` -**Пример:** +### Пример: ```c /* Следующий фрагмент получает текущие установки текста */ @@ -414,9 +416,9 @@ struct text_info i; gettextinfo(&i); ``` -### `int gettext(int left, int top, int right, int bottom, void *buf)` +## `int gettext(int left, int top, int right, int bottom, void *buf)` -**Описание:** +### Описание: Функция `gettext()` копирует текст из прямоугольника с левым верхним углом в точке `left`, `top` @@ -433,7 +435,7 @@ gettextinfo(&i); Функция возвращает в случае успеха `1` и `0` при ошибке. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода копирует область экрана в память, @@ -442,16 +444,16 @@ buf = malloc(10 * 10 *2); gettext(10, 10, 20, 20, buf); ``` -### `void delline(void)` +## `void delline(void)` -**Описание:** +### Описание: Функция `delline()` удаляет строку в активном окне, которая содержит курсор. Все линии ниже удаляемой поднимаются вверх. Надо помнить, что если текущее окно меньше целого экрана, то воздействие оказывается только на текст в окне. -**Пример:** +### Пример: ```c /* Следующая программа выводит 24 строки и затем убирает строку 3 */ @@ -469,9 +471,9 @@ int main(void) { } ``` -### `int cscanf(char *fmt, ...)` +## `int cscanf(char *fmt, ...)` -**Описание:** +### Описание: Функция `cscanf()` работает так же, как и функция scanf(), за исключением того, что она читает информацию с консоли вместо `stdin`. @@ -482,7 +484,7 @@ int main(void) { Это число не включает пропущенные поля. Функция `cscanf()` возвращает значение `EOF` в случае, если была сделана попытка чтения за пределами конца файла. -**Пример:** +### Пример: ```c /* Следующий фрагмент кода читает с консоли строку и число с плавающей точкой */ @@ -491,9 +493,9 @@ float f; cscanf("%s%f", str, &f); ``` -### `int cputs(const char *str)` +## `int cputs(const char *str)` -**Описание:** +### Описание: Функция `cputs()` выводит в текущее текстовое окно строку, на которую указывает параметр `str`. @@ -502,7 +504,7 @@ cscanf("%s%f", str, &f); Функция возвращает последний символ, либо величину `EOF` в случае возникновения ошибки. -**Пример:** +### Пример: ```c /* Следующая программа создает окно и использует функцию cputs() для записи строки, @@ -543,9 +545,9 @@ void border(int startx, int starty, int endx, int endy) { } ``` -### `int cprintf(const char *fmt, ...)` +## `int cprintf(const char *fmt, ...)` -**Описание:** +### Описание: Функция `cprintf()` работает так же, как и функция `printf()`, с тем только отличием, что она пишет в текущее окно вместо `stdout`. @@ -561,7 +563,7 @@ void border(int startx, int starty, int endx, int endy) { Функция `cprintf()` возвращает число фактически выведенных символов. Отрицательное возвращаемое значение означает наличие ошибки. -**Пример:** +### Пример: ```c /* Следующая программа выводит данные, представленные ниже в комментариях */ @@ -580,9 +582,9 @@ int main(void) { } ``` -### `void clreol(void)` и `void clrscr(void)` +## `void clreol(void)` и `void clrscr(void)` -**Описание:** +### Описание: Функция `clreol()` очищает строку от текущей позиции курсора и до конца строки активного окна. Позиция курсора не изменяется. @@ -590,7 +592,7 @@ int main(void) { Функция `clrscr()` полностью очищает активное текстовое окно и помещает курсор в левый верхний угол (1, 1). -**Пример:** +### Пример: ```c /* Следующая программа иллюстрирует использование функций clreol() и clrscr() */ @@ -613,9 +615,9 @@ int main(void) { } ``` -### `int kbhit()` +## `int kbhit()` -**Описание:** +### Описание: Эта функция не определена стандартом ANSI C. @@ -623,16 +625,16 @@ int main(void) { В противном случае возвращается 0. В любом случае код клавиши не удаляется из входного буфера. -**Пример:** +### Пример: ```c /* Следующий фрагмент является циклом, выход из которого осуществляется по нажатию клавиши */ while(!kbhit()); /* ожидание нажатия клавиши */ ``` -### `int ungetch(int ch)` +## `int ungetch(int ch)` -**Описание:** +### Описание: Эта функция не определена стандартом ANSI С. Она не может использоваться в программах Windows. @@ -643,7 +645,7 @@ while(!kbhit()); /* ожидание нажатия клавиши */ Возвращаемое значение равно `ch` в случае успеха и `EOF` — при неудаче. -**Пример:** +### Пример: ```c /* Приведенная ниже программа вводит клавишу, отображает ее на экране, @@ -663,9 +665,9 @@ int main() { } ``` -### `int getch(void)` и `int getche(void)` +## `int getch(void)` и `int getche(void)` -**Описание:** +### Описание: Функция `getch()` возвращает очередной символ, считанный с консоли, но не выводит этот символ на экран. @@ -675,7 +677,7 @@ int main() { Ни одна из этих функций не определена стандартом ANSI С. -**Пример:** +### Пример: ```c /* В этом фрагменте getch() используется diff --git a/snipplets/code/C/conio.h/textattr_coding.png b/snipplets/code/C/conio.h/textattr_coding.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8f0afd1acad075475cd1c0b25e895952256ddf GIT binary patch literal 23765 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 z