Turbo C включає великий набір функцій уведення – висновку інформації у вікно екрана. Прототипи цих функцій поміщені в заголовному файлі <conio.h>. На відміну від функції стандартного введення – висновку вони дозволяють керувати кольором виведених символів і не перетинають межі активного в даний момент вікна. При досягненні правої вертикальної границі курсор автоматично переходить на початок наступного рядка в межах вікна, а при досягненні горизонтальної границі виконується скролінг вікна нагору (про ініціалізації вікна див. у 8.3.).

                #include <conio.h>

                void clreol( void )

            Стирає в текстовому вікні рядок, на яку встановлений курсор, починаючи з поточної позиції курсору і до кінця рядка (до правої вертикальної границі).

                #include <conio.h>

                void clrscr( void )

            Очищає все текстове вікно. Колір “заливання” вікна при очищенні буде відповідати значенню, установленому символічної перемінний attribute описі вікна (структурна перемінна по шаблоні text_info). Функції упарвления кольором тла і символу описані далі.

                #include <conio.h>

                void insline( void )

            Уставляє порожній рядок у поточній позиції курсору зі зрушенням всіх інших рядків вікна на одного терміну вниз. при цьому самий нижній рядок тексту губиться.

                #include <conio.h>

               int cprntf ( const char *format, … )

            Виконує висновок інформації з перетворенням по задньому форматному рядку, на яку вказує format. Є аналогом функції стандартної бібліотеки printf(), але виконується висновок у межах заданого вікна. На відміну від printf() функція cprintf() інакше реагує на спеціальний символ '\n': курсор переводиться на новий рядок, але не повертається до лівої границі вікна. Тому для перекладу курсору на початок нового рядка текстового вікна варто вивести послідовність символів CR-LF (0x0d,0x0a). Інші спеціальні символи впливають на курсор так само, як і у випадку функції стандартного введення – висновку (див. п. 3.2.7.). Функція повертає число виведених байтів, а не число оброблених полів, як це робить функція printf().

                #include <conio.h>

                int cputs ( const char *str)

            Виводить рядок символів у текстове вікно, починаючи з поточної позиції курсору, на початок виведеного ASIIZ-рядка вказує str. Є аналогом функції стандартної бібліотеки puts(), але виконує висновок у межах заданого вікна і при висновку не додає спеціальний символ '\n' Реакція cputs () на спеціальний символ '\n' аналогічна реакції cprintf(): курсор переводиться на новий рядок, але не повертається до лівої границі вікна. Тому для перекладу курсору на початок нового рядка текстового вікна варто вивести послідовність символів CR-LF (0x0d,0x0a). Інші спеціальні символи впливають на курсор так само, як і у випадку функції стандартного введення – висновку (див. п. 3.2.7.). Функція повертає ASCII-код останнього виведеного на екран символу. На відміну від puts() у функції відсутній вік символу EOF. Іншими словами, висновок відбувається на екран у будь-якому випадку.

                #include <conio.h>

                int movetext(int left, int right, int bottom,

    int destleft, int desttop)

            Переносить вікно, задане координатами лівого верхніх (left, top) і правого нижнього (right, bottom) кутів, в інше місце на екрані, задане координатами лівого верхнього кута нового положення вікна. Розміри вікна по горизонталі і вертикалі зберігаються. Усі координати задаються щодо координат верхнього лівого кута екрана (1,1). Функція повертає ненульове значення, якщо перенос заданого вікна виконаний. У противному випадку повертається 0. Функція коректно виконує переноси, що перекриваються, тобто переноси, у яких прямокутна область – джерело й область, у яку вікно переноситься, частково перекривають один одного.

                #include <conio.h>

                int putch(inf ch)

            Виводить символ у поточній позиції текстового вікна екрана. Як і для функції cprintf(), cputs(), спеціальний символ '\n' викликає тільки перехід курсору на наступний рядок текстового вікна без повернення до його лівої вертикальної границі. Інші спеціальні символи впливають на курсор так само, як і для функції стандартного введення – висновку (див. п. 3.2.7.).

                #include <conio.h>

                int puttext(int left, int right, int bottom,void*source)

            Виводить на екран текстове вікно, задане координатами лівого верхніх (left, top) і правого нижнього (right, bottom) кутів. Символи й атрибути розташовуються в буфері, адреса початку якого задає покажчик source. Іншими словами, функція “відкриває” (відновлює) текстове вікно екрана. Звичайно використовується разом з функцією gettext(), що виконує зворотну операцію – запису в буфер source символів/ атрибутів, що цілком описує всі знайомства текстового вікна. Функція перевірять по заданих координатах вікна, чи можна побудувати вікно на вікні для поточного режиму відеоадаптера і чи коректні ці координати. У випадку, коли вікно успішне виведене, повертається ненульове значення.

                #include <conio.h>

                void highvideo( void )

                void lowvideo( void )

    void normvideo( void )

            Функції задають відповідно використання підвищеної, зниженої і нормальної яскравості для наступного висновку символів на екран через функції файлу <conio.h>. Впливають на атрибут символу.

            Описувані далі функції керують атрибутом символу. як відзначено в 8.2, атрибут задає бітами 0-2 код кольору символу, біт 3 визначає підвищення яскравості, біт 4-6 задає код кольору тла символу, біт 7 визначає наявність або відсутність мерехтіння символу. Turbo C дає можливість задати атрибут цілком або задати только колір символу або тла. Кольори можуть задаватися або числом, або з використанням символічних констант, значення яких визначає перечислимый тип COLOROS:

            enum COLORS {

                                               /*Кольору нормальної яскравості:                         */

                 BLACK,                  /*чорний,                                        0 */

                 BLUE,                    /*синій,                                               1         */

                 GREEN,                 /* зелений,                               2         */

                 CYAN,                    /* сино – зелений,                   3         */

                 RED,                                  /* червоний,                            4         */

                 MAGENTA,                        /* червоно – синій,                  5        */

                 BROWN,                 /* коричневий,                                     6        */

                 LIGHTGRAY,                    /* світло – сірий.                     7        */

                                               /*Кольору підвищеної яскравості:              */

                 DARKGREY,                     /*темно – серій,                    8          */

     LIGHTBLUE,                     /*яскраво – синій,                             9          */

                 LIGHTGREEN,       /*яскраво – зелений,             10        */

                 LIGHTCYAN,                     /*яскраво – сино – зелений,             11        */

                 LIGHTRAD,                       /*яскраво – червоний,                       12        */

                 LIGHTMAGENTA, /*яскраво – червоно – синій,                        13        */

                YELLOW,                /*жовтий,                             14        */

                 WHITE                   /*білий.                                              15        */

};

            Яскраві кольори можуть задаватися тільки кольору символу. Крім того, 7 – біт (біт мерехтіння) може бути заданий як безпосередньо в коді байта атрибута, так і з використанням символічної константи BLINK, обумовленої як 128 у <conio.h>. Слід зазначити той факт, що якщо для кольору тла вибираються кольори з кодами 8 – 15, це встановлює в одиницю біт мерехтіння символу в байті атрибута.

            #include <conio.h>

            void textattr( int newattr )

            Встановлює атрибут для функцій, що працюють з текстовими вікнами. Атрибут зберігається в поле attribute структурної перемінний по шаблоні text_info, доступної через функцію gettextinfo(). Атрибут, що задається, може бути або числом, наприклад 0х70 – атрибут інверсного зображення (чорні символи на світло – сірому тлі), або формуватися із символічних констант, значення яких задає тип COLORS. Наприклад, для завдання мерехтливих яскраво – червоних символів на сірому тлі атрибут можна сформувати в такий спосіб:

            BLINK | (BLANK << 4) | LIGHTRED

Той же результат може бути отриманий і так:

            (DARKGRAY << 4) | LIGHTRED

            #include <conio.h>

            void textcolor( int newcolor )

            Задає колір символів, не торкаючись установлений колір тла. Колір може бути або числом, або формуватися із символічних констант, значення яких визначає перечислимый тип COLORS.

            #include <conio.h>

            void textbackground( int newcolor )

            Задає колір тла символів, не торкаючись установлений колір символу. Колір може бути або числом, або формуватися із символічних констант, значення яких визначає перечислимый тип COLORS. Для кольору тла вибір обмежений значеннями квітів 0 – 7. Якщо для кольору тла вибирається значення 8 – 15, то символи будуть мерехтіти, тому що біт мерехтіння установиться в одиницю, але колір тла буде відповідати значенням 0 – 7.

            Як приклад розглянемо функцію горизонтального скролінга тетстового вікна на одну позицію вліво або вправо (функція вертикального скролінга розглянута в 9.3). Вона використовує функцію бібліотеки Turbo C movetext(). Функція працює в текстових режимах 0 – 3, 7, а при установці зовнішньої перемінний directvideo, рівної нулю (див. далі), - і в графічних режимах. Використовується активна сторінка відеоадаптера. Функція повертає ненульове значення, якщо скролінг виконаний успішно. Перелічимо параметри функції. Параметр direction задає напрямок скролінга: якщо direction=LEFT, виконується скролінг вікна на стовпець уліво, якщо ж direction=RIGHT, виконується скролінг вікна на рядок вправо. Константи визначені у файлі “screen.h” (див. 8.4). Пари (l_row, l_col) і (r_row, r_col) задають координати (рядок, стовпець) відповідно лівого верхнього і правого нижнього кутів вікна. Координати нумеруються від 0. Покажчик blank_str ссылаеся на рядок, що додаються праворуч або ліворуч; її символи мають на екрані атрибут attr. Висновок рядка, що додається, у даному прикладі виконує функція vert_prn(), розглянута в 9.1(L9_1. C).

            /*L9_10.C*/

            #include <conio.h>

            #include “screen.h”

            int h_scroll(int direction, int l_row, int l_col, int r_row,

int r_col, char *blank_str, char attr)

            { int ret, position;

             /*Додавання до координат 1: у Turbo c вони нумеруються від 1*/

             int l_col++; l_row++; r_col++; r_row++;

             switch(direction){

             case LEFT:

                 if (!(ret=movetext(l_col+, l_row, r_col, r_row, l_col, l_row)))

                   return ret;

                 position=r_col; break;

             case RIGHT:

                 if (!(ret=movetext(l_col, l_row, r_col, r_row, l_col+1, l_row)))

                  return ret;

                 position=l_col; break; }

            /*висновок вертикально переданого рядка.*/

            vert_prn(--l_row, --position, blank_str, attr);

            }

            Функції файлу <conio.h> у принципі дозволяють побудувати віконний інтерфейс будь-якої складності, різноманітні системи меню і т.п. Керуючи зовнішньої перемінний directvideo, можна добится того, щоб функції консольного введення –висновку працювали через переривання BIOS. Якщо directvideo=1 (значення за замовчуванням), Turbo C для висновку на екран використовує безпосередній доступ до відеопам'яті, що забезпечує максимально високу продуктивність. Але якщо програма установить directvideo=0, будуть використовуватися переривання BIOS. Це дає можливість використовувати функції файлу <conio.h> і в графічних режимах адаптера. Однак варто мати через, що висновок тексту в графічних режимах роботи адаптера має ряд особливостей (див. 9.6).

            Покажемо на прикладі роботу функцій консольного висновку в графічних режимах. Демонстраційна програма, що приводиться далі, виконує дії, аналогічні рассмотреенной раніше програмі L8_1. C, але працює в графічному режимі 10h EGA – і VGA – адаптерів. Для переключення в цей режим використовується функція set_mode() (її текст див. у 8.5).

            /*L9_11. C*/

            #include <conio.h>

            #include <alloc.h>

#include <string.h>

#include <bios.h>

void set_mode(int mode); /*L8_3. C*/

            int main(void)

            { unsigned number; char string [129], *buf_screen;

             /* Указівка Turbo C використовувати функції BIOSa*/

             directvideo=0;

             /*Установка графічного режиму 10h.*/

             set_mode(0x10);

             /*Ініціалізація вікна введення – висновку.*/

             window( 1, 1, 25, 10);

             textcolor(0x1); /*вибір синього кольору для символів*/

             /*Збереження вмісту екрана під вікном у

             буфері, що динамічно розподіляється.*/

             if ((buf_screen=malloc(25*10*2))==NULL)

             { cputs(“Не вистачає оперативної пам'яті для роботи”\ “програми. \xd\xa”); return(-1); }

             gettext(1, 1, 40, 13, buf_screen);

             /*Очищення екрана і його “заливання” синім кольором.*/

             clrscr();

             textcolor(0x8f); /*жовтий колір для символів*/

             cputs(“Уведіть ціле число:”);

             cscanf(“%u”, &number);

             cputs(“\xd\xa Уведіть рядок символів \xd\xa”);

             cscanf(“%18s”, string);

             cprintf(“\xd\xa Уведене число %і і рядок”\ “символів%s”, number, string);

             cpringf(“\xd\xa Довжина рядка - %d”, strlen(string));

             cputs(“\xd\xa Для продовження натисніть будь-яку клавішу”);

             bioskey(0);

             puttext(1, 1 ,40, 13, buf_screen);

 return 0;

            }

            Використання функції gettext(), puttext(), movetext() є найбільш швидким способом маніпуляції вікнами. Одне з можливих їхніх застосувань – переключення в графічний режим зі збереженням тексту на екрані (див. 9.10).