Текстовый ввод-вывод

Вывод на дисплей: Часть III

Разбить на страницы
Показывать лекцию целиком

4.1. Атрибуты символов

Когда дисплей установлен в текстовый режим в любой из видеосистем, каждой позиции на экране отводится два байта памяти. Первый байт содержит номер кода ASCII символа, а второй байт - атрибуты символа. Для указания цветов экрана одни и те же номера кодов используются в бейсике, Си и прерываниях операционной системы (см. таблицу 4.1.).

Обозначения цветов в стандартной трёхбитной палитре
Числ. Значение Цветовой атрибут Символ или фон?
0 Чёрный Символ
1 Синий Символ
2 Зелёный Символ
3 Циан (голубой) Символ
4 Красный Символ
5 Пурпурный Символ
6 Коричневый Символ
7 Светло-серый Символ
8 Тёмно-серый Символ
9 Светло-синий Символ
10 Светло-зелёный Символ
11 Светло-голубой Символ
12 Светло-красный Символ
13 Светло-пурпурный Символ
14 Жёлтый Символ
15 Белый Символ
0 Чёрный Фон
16 Синий Фон
32 Зелёный Фон
48 Циан (голубой) Фон
64 Красный Фон
80 Пурпурный Фон
96 Коричневый Фон
112 Светло-серый Фон
128 Мигание Символ
Примечание: Атрибут = Символ+Фон (+ Мигание)

Младшие четыре бита байта атрибутов устанавливают цвет самого символа (бит 3 включает высокую интенсивность цвета). Следующие три бита устанавливают фон символа, и при обычных обстоятельствах старший бит включает и выключает мигание. Образование шестнадцати цветов из 4-х бит проиллюстрировано в таблице 4.2.

Образование 16 цветов из 4-х бит
Сопоставление кодов цветов экрана в 16-ти цветной палитре
Канал Интенсивность
Красный Зелёный Синий Низкая (0) Высокая (1)
0 0 0 Чёрный (0) Серый (8)
0 0 1 Синий (1) Светло-синий (9)
0 1 0 Зелёный (2) Светло-зелёный (10)
0 1 1 Циан (3) Светлый циан (11)
1 0 0 Красный (4) Ярко-красный (12)
1 0 1 Магента (5) Светлая магента (13)
1 1 0 Коричневый (6) Жёлтый (14)
1 1 1 Белый (7) Ярко-белый (15)

4.1.1. Реализация на ассемблере

Прерывания DOS и BIOS предоставляют очень скудные возможности для работы с цветным текстом. Только функция 9 прерывания 10H принимает байт атрибутов при выводе символа. Функция 0AH прерывания 10H выводит символ без указания цвета - он принимается равным цвету по-умолчанию. Функция 0DH прерывания также оставляет нетронутым байт атрибутов.

Функция вывода на экран DOS прерывания 21H всегда выводит белые символы на чёрном фоне. Единственный способ обойти это ограничение - использовать escape-последовательности (см. таблицу 2.2).

Приведём примеры на языке ассемблера вывода сначала обычной строки (белым по чёрному), а затем надпись: "Внимание!" жёлтым цветом на красном фоне.

Пример 4.1.

; --- в сегменте данных
STRING_01	DB	'Я хочу обратить Ваше',0AH,0DH,'$'
STRING_02	DB	'Внимание!$'
NORM_COLOR	DB	27, '[0m$'
ATTENT_COLOR	DB	27, '[1;33;41m$'
CLEAR_COLOR	DB	27, '[0m$'
; --- в сегменте кода
; --- вывод строк
	MOV AH, 9	; функция вывода страницы
	LEA DX, NORM_COLOR	; Обычный цвет
	INT 21H
	LEA DX, STRING_01	; Первая строка
	INT 21H
	LEA DX, ATTENT_COLOR	; Выделение цветом
	INT 21H
	LEA DX, STRING_02	; Вторая строка
	INT 21H
	LEA DX, CLEAR_COLOR	; Сброс атрибутов текста
	INT 21H

Смотри Листинг программы ex04001.asm

4.1.2. Реализация на языках Си

В стандарте на язык Си (ANSI C) нет функций для работы с цветом. Вместо этого рекомендуется использовать escape - последовательности, при условии, что у Вас в системе установлен драйвер ANSI.SYS

В этом случае пример 4.1. запишется следующим образом:

Пример 4.2.

/* ex04002.c */
/* Вставка заголовочных файлов */
#include <stdio.h>
#include <conio.h>
/* описание констант */
const char NORM_COLOR[] = "\x1b[0m"; //Нормальный режим
const char ATTENT_COLOR[] = "\x1b[1;33;41m"; // Выделение цветом
/* Основная программа */
void main( void )
{
/* Определение временной переменной */
	char  cJunk;
/* Вывод строк */
	puts( NORM_COLOR );
	puts( "\nЯ хочу обратить Ваше" );
	puts( ATTENT_COLOR );
	puts( "Внимание!\x1b[0m" );
/* Завершение работы программы */
	cputs( "Press key Enter to exit...\r\n" );
	cJunk = getche();
}
/* Конец программы */

Ниже рассмотрены некоторые функции для "цветного" вывода средствами Turbo C++ и SPHINX C--.

ФУНКЦИЯ TEXTATTR
ОПИСАНА В: <conio.h> (содержит только прототип);
СИНТАКСИС:
void textattr( newattr );
int newattr;
НАЗНАЧЕНИЕ: Устанавливает текстовые атрибуты;
ОПИСАНИЕ: textattr позволяет устанавливать цвет фона и цвет символов одновременно за один вызов. (Обычно вы устанавливаете атрибуты с помощью textcolor и textbackground );

Эта функция не относится к символам, находящимся в текущий момент на экране; она относится только к тому, что отображается функциями (такими как cprintf ) выполняющими вывод в текстовом режиме, после того, как была вызвана функция textattr.

Информация цвета кодируется в параметре newattr следующим образом (смотри рисунок 4.1):

(рис 4.1) Расшифровка байта атрибута символа при консольном выводе

В этом 8-битном параметре newattr:

  • ffff - 4-битный цвет символов (1 - 15)
  • bbb - 3-битный цвет фона (1 - 7)
  • B - бит мигания.
  • Если бит мигания включён, то символ будет мигать. Это можно осуществить путём добавления константы BLINK в атрибут. Если вы используете символьные цветовые константы, определённые в conio.h для создания текстовых атрибутов с помощью textattr, запомните следующие ограничения на цвет фона:

  • Вы можете выбрать только первые 8 цветов для фона;
  • Вы должны сдвинуть выбранный цвет фона влево на 4 бита для перемещения его в правильную битовую позицию.
  • Символьные константы в таблице
    Константы для атрибутов текста, определённые в <conio.h>
    Константа Перевод Числ. Значение Для символов или фона?
    BLACK Чёрный 0 оба
    BLUE Синий 1 оба
    GREEN Зелёный 2 оба
    CYAN Циан (голубой) 3 оба
    RED Красный 4 оба
    MAGENTA Пурпурный 5 оба
    BROWN Коричневый 6 оба
    LIGHTGRAY Светло-серый 7 оба
    DARKGRAY Тёмно-серый 8 для символов
    LIGHTBLUE Светло-синий 9 для символов
    LIGHTGREEN Светло-зелёный 10 для символов
    LIGHTCYAN Светло-голубой 11 для символов
    LIGHTRED Светло-красный 12 для символов
    LIGHTMAGENTA Светло-пурпурный 13 для символов
    YELLOW Жёлтый 14 для символов
    WHITE Белый 15 для символов
    BLINK Мигание 128 для символов

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
    ПЕРЕНОСИМОСТЬ: textattr работает только на IBM PC и совместимых системах;

    ФУНКЦИЯ TEXTCOLOR
    ОПИСАНА В: <conio.h> (содержится прототип функции);
    СИНТАКСИС:
    void textcolor( newcolor);
    int newcolor;
    НАЗНАЧЕНИЕ: Устанавливает цвет символов в текстовом режиме;
    ОПИСАНИЕ: textcolor выбирает цвет символа. Эта функция оказывает влияние на функции, производящие прямой вывод на экран в текстовом режиме. Вы можете выбрать цвет, используя символьную константу, определённую в conio.h. Если вы используете эту константу, вы должны включить файл conio.h ;

    Эта функция не относится к символам, находящимся в текущий момент на экране; она относится только к тем символам, которые выводятся функциями (такими как cprintf ) в текстовом режиме, осуществлявшим вывод на дисплей после вызова textcolor.

    Следующая таблица отображает возможные цвета (как символьные константы ) и их числовые значения (Таблица 4.4.).

    Константы возможных цветов символов.
    Константы для атрибутов текста, определённые в <conio.h>
    Константа Перевод Числ.знач.
    BLACK Чёрный 0
    BLUE Синий 1
    GREEN Зелёный 2
    CYAN Циан (голубой) 3
    RED Красный 4
    MAGENTA Пурпурный 5
    BROWN Коричневый 6
    LIGHTGRAY Светло-серый 7
    DARKGRAY Тёмно-серый 8
    LIGHTBLUE Светло-синий 9
    LIGHTGREEN Светло-зелёный 10
    LIGHTCYAN Светло-голубой 11
    LIGHTRED Светло-красный 12
    LIGHTMAGENTA Светло-пурпурный 13
    YELLOW Жёлтый 14
    WHITE Белый 15
    BLINK Мигание 128

    Вы можете сделать символы мигающими, добавляя BLINK к цвету символов. Встроенная константа BLINK предназначена для этой цели. Например:

    textcolor(CYAN+BLINK);

    Замечание. Некоторые мониторы не определяют интенсивность сигнала, используемую для создания восьми "light" (светлый) цветов (8-15). На таких мониторах светлые цвета будут изображаться как их "тёмные" эквиваленты (0-7). Аналогично, системы, которые не отображают цвет, используют эти номера как оттенки одного цвета, особые образцы или особые атрибуты (такие как подчёркивание, полужирный шрифт, курсив и т.п.). То, что вы увидите при этом на экране, зависит от оборудования.

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
    ПЕРЕНОСИМОСТЬ: Только на IBM PC и совместимых компьютерах. Соответствующая функция существует в Turbo Pascal;

    ФУНКЦИЯ TEXTBACKGROUND
    ОПИСАНА В: <conio.h> (содержит прототип);
    СИНТАКСИС:
    void textbackground( newcolor);
    int newcolor;
    НАЗНАЧЕНИЕ Выбирает новый цвет фона для текста;
    ОПИСАНИЕ: textbackground выбирает цвет фона в текстовом режиме. Эта функция работает только для функций, осуществляющих примой вывод на экран в текстовом режиме. newcolor определяет новый цвет фона. Вы можете определить его как целое (от 0 до 7) или как одну из символических констант, определённых в файле conio.h. При использовании символьных констант необходимо включить файл conio.h ;

    Эта функция не относится к символам, находящимся в текущий момент на экране; она относится только к тем символам, которые выводятся функциями (такими как cprintf ) в текстовом режиме, осуществлявшим вывод на экран после вызова этой функции.

    Символьные константы в таблице 4.5:

    Символьные константы цветов фона консоли
    Константы для атрибутов текста, определённые в <conio.h>
    Константа Перевод Числ.знач.
    BLACK Чёрный 0
    BLUE Синий 1
    GREEN Зелёный 2
    CYAN Циан (голубой) 3
    RED Красный 4
    MAGENTA Пурпурный 5
    BROWN Коричневый 6
    LIGHTGRAY Светло-серый 7

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
    ПЕРЕНОСИМОСТЬ: Только с IBM PC и совместимыми компьютерами. Соответствующая функция существует в Turbo Pascal;

    Пример 4.3.

    Использование функций управления атрибутами символов textcolor и textbackground.

    /* ex04003.c  */
    /* Работает только в системе Borland C/C++ 3.10 */
    /* Вставка заголовочных файлов */
    #include <conio.h>
    /* Основная программа */
    void main( void )
    {
    /* Определение временной переменной */
    	char  cJunk;
    /* Вывод строк */
    	textcolor( LIGHTGRAY); textbackground( BLACK );
    	cputs( "\r\nЯ хочу обратить Ваше\r\n" );
    	textcolor( YELLOW); textbackground( RED );
    	cputs( "Внимание!" );
    	textcolor( LIGHTGRAY); textbackground( BLACK );
    /* Завершение работы программы */
    	cputs( "\r\n\r\nPress key Enter to exit...\r\n" );
    	cJunk = getche();
    }
    /* Конец программы */

    4.1.3. Реализация в оболочке DOS Command Shell и NDOS

    В командной оболочке NDOS есть штатная функция: be, с помощью которой можно менять цвет выводимых символов и их фон. Её синтаксис следующий:

    be "команда" "опции и параметры"

    а также

    be "имя batch-файла".dat

    Все команды и опции команды be приведены в приложении №1 (пункт 4.4 данной лекции). Здесь же приведём пример batch файла, реализующий пример 4.3.:

    Пример 4.4. Файл ex04005.dat

    cls white on black
    rowcol 1, 1 "Я хочу обратить Ваше"
    rowcol 2, 1 "Внимание!" bright yellow on red

    Примечание: Этот файл запускается из командной строки командой:

    Пример 4.5

    be ex04005.dat

    4.1.4. Реализация на языках Perl и Python

    Вывод текста с "нестандартными" атрибутами на языках Perl и Python не возможен.

    4.1.5. Реализация на языке Prolog

    Вывод текста с атрибутами цвета на языке ПРОЛОГ осуществляется с использованием предиката attribute, который может читать и устанавливать текстовый атрибут;

    Приведём синтаксис предиката attribute

    ФУНКЦИЯ: attribute
    СИНТАКСИС: attribute(Attr), где Attr - атрибут символа (целое число);
    НАЗНАЧЕНИЕ: Устанавливает или выдаёт текущий атрибут символа;
    ОПИСАНИЕ: attribute устанавливает или считывает текущий атрибут вывода. Вывод при помощи write или writef даёт отображение экрана с этим атрибутом. Каждое окно имеет свой атрибут вывода. Когда вы создаёте окно, атрибут вывода автоматически принимает значение атрибута окна, но вы можете изменить его предикатом attribute ;
    ШАБЛОНЫ: (i) (o) ;
    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Всегда успех;
    ОШИБКИ: Никогда не даёт;

    Пример 4.3, записанный на языке ПРОЛОГ, будет выглядеть следующим образом:

    Пример 4.6.

    /* Файл ex04006.pro */
    domains
    /* Описываем переменные */
    	CNorm_color= char
    predicates
    	attent
    	norm_color
    clauses
    /* Определяем правила */
    norm_color :- attribute( '\07' ).
    attent :- attribute( '\78' ), nl, write( "Внимание!" ).
    goal
    /* Вывод нормального текста */
    	norm_color, nl,
    	write( "Я хочу обратить Ваше" ),nl,
    /* Вывод текста с изменёнными атрибутами */
    	attent,
    /* Возвращение нормальных атрибутов */
    	norm_color, nl,
    /* Вывод завершающей надписи */
    	write( "Press key Enter to exit..." ), readchar( _ ).
    /* Конец программы */

    4.2. Escape-последовательности

    Как Вы, наверное, уже уяснили то, что основным способом манипуляции положением позиции курсора, сменой атрибутов текста при выводе на экран является использование так называемых escape-последовательностей. Наиболее широко их применяют в "консольных" приложениях MS-DOS и UNIX, но часто используют и в других операционных системах. Эти последовательности стандартизированы американским национальным институтом стандартов (ANSI). Сводку используемых при выводе на экран escape - последовательностей см. в таблице 2.1.

    Для поддержки escape- последовательностей в операционных системах MS-DOS, Windows 9x/ME необходимо в файле CONFIG.SYS загрузить драйвер ANSI.SYS, при помощи директив DEVICE или DEVICEHIGH. В остальных операционных системах поддержка расширений ANSI включена по-умолчанию (в реестре и файлах конфигурации). Если escape- последовательности всё же не работают, смотрите настройки Вашего компьютера (в файлах конфигурации и в реестре).

    4.3. Резюме

    После прочтения последних трёх лекций Вы уяснили, каким образом символьные данные выводятся на дисплей с использованием "функций среднего уровня". Материал может показаться Вам не актуальным - ведь Вы уже привыкли работать в "оконном интерфейсе", в котором шрифтовое и абзацное оформление текста намного богаче. Однако если Вы хотите делать свои консольные приложения (а вы их обязательно будете делать в первую очередь) хотя бы чуть-чуть более привлекательными, чем это предоставляют стандартные потоки вывода на дисплей, Вы обязательно обратитесь к этим функциям.

    Кроме того, Вы ознакомились с принципиально важными функциями для вывода текста на экран, имеющие при консольном выводе не меньшее значение, чем функции манипулирования контекстом Windows, о котором речь пойдёт в последующих лекциях.

    4.4. Приложение №1. Команды и опции функции be

    В данном разделе даётся описание функции работы с командными файлами при помощи приложения Norton Utilities 8.0 BE.

    BE ASK

    BE ASK Ожидание нажатия заданной клавиши
    СИНТАКСИС: BE ASK "приглашение" [список-клавиш][DEFAULT=клавиша][TIMEOUT=n][ADJUST=n][цвет][/DEBUG]
    НАЗНАЧЕНИЕ: Запрашивает ввод с клавиатуры и устанавливает код переменной DOS ERRORLEVEL
    ПОЯСНЕНИЯ: BE ASK приглашает пользователя ответить на вопрос. Это позволяет создавать интерактивные пакетные файлы, которые поддерживают условные переходы.

    Можно задать клавишу (если пользователь нажимает клавишу Enter ) и время ожидания по-умолчанию. Выбранная клавиша возвращается как код возврата и используется в дальнейшем при обработке перехода.

    ВОЗМОЖНЫЕ ПАРАМЕТРЫ:

    сообщение Текстовая строка - подсказка, выводится при запуске команды. Если в строке есть запятые и/или пробелы, то всю строку следует заключить в кавычки. Используйте пару кавычек без каких-либо символов между ними, если не нужно выводить строку сообщения.
    список-клавиш Список возможных клавиш для ответа (символы или числа);
    DEFAULT Клавиша, возвращаемая по тайм-ауту, если в течение заданного периода ничего не было нажато или если нажата клавиша Enter ;
    TIMEOUT Время в секундах, по истечении которого возвращается код клавиши, заданной по-умолчанию. Если n=0 или тайм-аут не установлен, ASK будет ожидать до тех пор, пока не будет нажата клавиша;
    ADJUST Увеличивает возвращаемое значение на заданное число;
    цвет Задание цвета сообщения в формате SA (Screen Attribute). См. BE SA;

    Параметр /DEBUG выводит возвращаемый код ERRORLEVEL на экран.

    Если пользователь нажимает клавишу, которая не обозначена в списке клавиш, звучит сигнал предупреждения.

    ПРИМЕР:

    Следующий фрагмент пакетного файла можно использовать как часть системы меню:

    be ask "Run the E(ditor), D(atabase) or Q(uit)?" edq
    if errorlevel 3 goto quit
    if errorlevel 2 goto database
    if errorlevel 1 goto editor

    BE BEEP

    СИНТАКСИС:
    BE BEEP [/Dn] [/Fn] [/Rn] {/Wn}
    BE BEEP [путь [/E]]
    НАЗНАЧЕНИЕ: Задаёт частоту и длительность звука, выдаваемого на динамик.
    ПОЯСНЕНИЯ: BE BEEP использует системный динамик для создания звуков заданной частоты и длительности. Используйте их для сигнализации ошибочной ситуации или завершения задачи.
    ВОЗМОЖНЫЕ ПАРАМЕТРЫ: /Dn длительность звука в долях 1/18 секунды
    /Fn частота тона в герцах
    /Rn повторить вывод сигнала n раз
    /Wn образовать паузу между сигналами длительностью n/18 секунды
    /E отобразить указанный в кавычках текст в комментарии

    BE BEEP также может воспроизвести ноты из пакетного файла. Это текстовый файл с перечнем ключей. Комментарии можно помещать в пакетный файл после ключей, но им должна предшествовать точка с запятой. Части комментария, заключённые в кавычки, будут выводиться на экран при работе пакетного файла.

    ПРИМЕЧАНИЕ:

    NDOS самостоятельно не обрабатывает пакетные файлы BE. Если пакетный файл задан в командной строке, NDOS попытается найти программу Norton BE.EXE и подставить командную строку как параметр в неё.

    ПРИМЕР:

    Исполнить ноту "ля" в течение 2 секунд и повторить 3 раза. Сделать паузу в 1 секунду между нотами:

    be beep /f440 /d36 /r3 /w18

    Следующий пакетный файл 2NOTE воспроизводит две различные ноты:

    /f330 /d10 /r2 /w5; это была "ми"
    /f440 /d10 /r2 /w5; эта была "соль"

    Для того чтобы отобразить слова: "ми" и "соль", используйте:

    be beep 2note /e

    BE BOX

    Построить рамку на экране

    СИНТАКСИС: BE BOX верх, слева, низ, справа [SINGLE | DOUBLE] [цвет]
    НАЗНАЧЕНИЕ: Рисует прямоугольник в указанной позиции на экране.
    ПОЯСНЕНИЯ: BE BOX рисует прямоугольники различной формы, размеров и цветов в указанной позиции экрана. Прямоугольники могут иметь одиночную или двойную границу. Прямоугольники не заполняются каким-либо символом, так что любой текст внутри них сохраняется.
    ВОЗМОЖНЫЕ ПАРАМЕТРЫ: вверх строка левого верхнего угла
    слева столбец левого верхнего угла
    низ строка нижнего правого угла
    справа столбец нижнего правого угла
    SINGLE одиночная линия границы
    DOUBLE двойная линия границы
    цвет цвет рамки, задаваемый атрибутами SA (атрибуты экрана) для рамки (см. BE SA).

    По-умолчанию рамка рисуется двойной линией.

    См. также DRAWBOX.

    ПРИМЕР:

    Нарисовать красную рамку на зелёном фоне с границей в виде одиночной линии:

    be box 10 10 20 40 single red on green

    BE CLS

    Очистить экран (и установить цвет)

    СИНТАКСИС: BE CLS [цвет]
    НАЗНАЧЕНИЕ: Очищает экран, используя заданные атрибуты (необязательно).
    ПОЯСНЕНИЯ: BE CLS будет очищать экран, используя атрибуты текущего положения курсора или атрибуты, заданные в командной строке. Одна из причин, по которой очистка экрана производится некоторым атрибутом, состоит в том, что другие команды BE, такие как ROWCOL, ASK, и BOX, будут использовать текущие атрибуты экрана, если цвет не задан в командной строке. Устанавливая некоторый атрибут экрана заранее, можно сделать другие команды BE меньше по размеру и быстрее по выполнению.
    Имеет единственный параметр: цвет использовать цвет, заданный в формате SA (см. BE SA).

    См. также CLS.

    ПРИМЕР:

    Очистить экран и установить красный цвет на зелёном фоне:

    be cls red on green

    BE command

    BE команда
    СИНТАКСИС: BE команда
    НАЗНАЧЕНИЕ: Расширенные возможности для пакетных файлов.
    ПОЯСНЕНИЯ: Для более быстрого выполнения пакетных файлов NDOS непосредственно поддерживает следующие команды Norton Batch Enhancer:
    BE ASK BE REBOOT
    BE BEEP BE ROWCOL
    BE BOX BE SA
    BE CLS BE SHIFTSTATE
    BE DELAY BE TRIGGER
    BE MONTHDAY BE WEEKDAY
    BE PRINTCHAR BE WINDOW
    Каждая команда BE описана под её собственным заголовком.

    Пользуйтесь:

    BE команда /?

    для получения оперативной справки по интересующей команде BE..

    ПРИМЕЧАНИЕ:

    Если внутренняя команда NDOS BE не может найти указанную команду, например, пакетный файл для BE в виде:

    BE файл процедуры [[GOTO] метка]

    то NDOS будет искать BE.EXE (используя путь) и выполнит BE, подставляя остаток команды. Следующие команды BE не имеют значения в NDOS, поскольку встречаются только в пакетных файлах BE:

    BE EXIT
    BE GOTO
    BE JUMP
    BE DELAY

    BE DELAY

    Сделать паузу

    СИНТАКСИС: BE DELAY число
    НАЗНАЧЕНИЕ: Приостанавливает выполнение пакетного файла на заданное время.
    ПОЯСНЕНИЯ: BE DELAY приостанавливает выполнение пакетного файла на заданный интервал. Выполнение пакетного файла возобновляется по истечении заданного периода времени.
    Имеет единственный параметр: число количество 1/18-секундных интервалов.

    См. также DELAY.

    ПРИМЕР:

    Сделать паузу в полсекунды:

    be delay 9

    BE EXIT

    СИНТАКСИС: BE EXIT
    НАЗНАЧЕНИЕ: Завершить выполнение пакетного файла BE прежде, чем будет достигнут конец файла.
    ПОЯСНЕНИЯ: Команда BE EXIT используется только в пакетных файлах BE и не вызывает никакого действия при вызове из DOS.

    ПРИМЕР:

    Следующий пакетный файл COLOR.DAT просит ввести цифры, а затем, в соответствии с нажатой цифрой, меняет цвета экрана:

    ask "1=Чёрно/белый, 2=Бело/синий, 3=Прервать" 123 DEFAULT=3
    jump onblack, onblue, nochange
    :onblack
    sa white on black
    exit
    :onblue
    sa bright white on blue
    :nochange

    Для выполнения этого пакетного файла введите команду:

    be color.dat

    BE GOTO

    СИНТАКСИС: BE пакетный файл [[GOTO] метка]
    НАЗНАЧЕНИЕ: Определяет начальную точку выполнения в пакетном файле BE.
    ПОЯСНЕНИЯ: Команда BE GOTO используется для того, чтобы начать выполнение пакетного файла не обязательно с начальной строки. Слово GOTO можно не задавать, если метка перехода определяется после имени пакетного файла.

    Соглашения для использования меток такие же, как и в DOS. Метка должна начинаться с двоеточия (:) и находиться в отдельной строке в пакетном фале.

    ПАРАМЕТРЫ BE GOTO: пакетный файл Имя пакетного файла для BE.
    метка Допустимая метка, которая находится в пакетном файле.

    BE GOTO отличается от команды GOTO пакетных файлов DOS тем, что работает только в пакетных файлах BE.

    BE JUMP используется для условных переходов внутри пакетного файла, тогда как BE GOTO используется для организации точки входа в пакетный файл по условию.

    ПРИМЕР:

    Следующий пакетный файл COLOR.DAT приглашает ввести цифру и затем, в соответствии с нажатой клавишей, меняет цвета экрана.

    ask "1=Чёрно/белый, 2=Бело/синий, 3=Прервать" 123 DEFAULT=3
    jump onblack, onblue, nochange
    :onblack
    sa white on black
    exit
    :onblue
    sa bright white on blue
    :nochange

    Для выполнения этого файла, начиная со второй метки, используйте:

    be color.dat goto onblue

    BE JUMP

    СИНТАКСИС: JUMP метка1 [, метка2 [, ... меткаN]] [/DEFAULT:метка]
    НАЗНАЧЕНИЕ: Выполняет переход к метке в пакетных файлах BE в зависимости от выходного кода ( ERRORLEVEL ) предыдущей команды.
    ПОЯСНЕНИЯ: BE использует выходной код, чтобы переместиться к соответствующей метке и продолжить выполнение.
    BE JUMP имеет параметры: метка допустимая метка в пакетном файле.
    /DEFAULT:метка Метка, на которую осуществляется переход, если выходной код равен нулю или если выходной код больше, чем число заданных меток.

    Команда BE JUMP работает только в пакетных файлах BE и не имеет какого-либо смысла при вызове непосредственно из DOS.

    BE JUMP используется для условных переходов в пакетных файлах, тогда как BE GOTO используется для организации точек входа в пакетный файл по условию.

    BE PRINTCHAR

    Вывести символ

    СИНТАКСИС: BE PRINTCHAR символ число_повторений [цвет]
    ПОЯСНЕНИЯ: BE PRINTCHAR отображает заданный символ заданное количество раз, начиная с текущей позиции курсора. Символ можно повторить до 132 раз. (Предел Norton BE - 80 раз).
    ИМЕЕТ ПАРАМЕТРЫ: символ выводимый символ
    число_повторений число повторений
    цвет цвет символа в формате SA (Screen Attribute) (см. BE SA).

    См. также SCRPUT и SCREEN.

    ПРИМЕР:

    be printchar X 30 blue on red

    BE REBOOT

    СИНТАКСИС: BE REBOOT [/VERIFY] [/COLD]
    НАЗНАЧЕНИЕ: Выполняет "горячий" (без выключения питания) перезапуск компьютера.
    ПОЯСНЕНИЯ: BE ROOT даёт возможность выполнять перезапуск компьютера из пакетного файла. Это полезно в конструкциях пакетных файлов, которые воздействуют на конфигурацию системы.
    ПАРАМЕТРЫ: /VERIFY Запросить пользователя о подтверждении перезапуска.
    /COLD Выполнить холодный перезапуск.

    ПРИМЕЧАНИЕ:

    Некоторые диспетчеры памяти или TSR-программы могут помешать перезагрузке.

    ПРИМЕР:

    Для горячей перезагрузке компьютера с запросом подтверждения Y/N:

    be reboot /verify

    BE ROWCOL

    Позиционирует курсор

    СИНТАКСИС: BE ROWCOL строка столбец ["текст"] [цвет]
    НАЗНАЧЕНИЕ: Устанавливает курсор в положение, заданное строкой и столбцом, и (необязательно) выводит текст.
    ПОЯСНЕНИЯ: BE ROWCOL обеспечивает управление положением курсора на экране, так что текст можно выводить в любую позицию. После того, как местоположение курсора определено, вывод текста будет выполняться, начиная с этой позиции. ROWCOL также может вывести строку текста с необязательным параметром цвета.
    ПАРАМЕТРЫ: строка строка, куда помещается курсор
    столбец столбец, куда помещается курсор
    текст строка текста (не обязательно)
    цвет цвет текста, задаваемый в формате SA (Screen Attribute - см. BE SA ).

    См. также SCRPUT и SCREEN.

    ПРИМЕР:

    Отобразить текст вблизи центра верхней строки экрана:

    be rowcol 1, 27 "Здесь был он!" blue on green

    BE SA

    Управление цветом и атрибутами

    СИНТАКСИС:
    BE SA NORMAL|UNDERLINE|REVERSE [/N]
    BE SA [BRIGHT|BLINKING] передний_план [ON фон] [/N] [/CLS]
    НАЗНАЧЕНИЕ: Управляет цветом и атрибутами экрана.
    ПОЯСНЕНИЯ: BE SA (атрибуты экрана) используются в двух формах.
    Первая форма устанавливает дисплей в режим с подчёркиванием букв или в режим инверсного изображения. Параметр UNDERLINE доступен только на монохромных мониторах (на цветном мониторе выдаст синий цвет для переднего плана). Параметр NORMAL используется для снятия режима UNDERLINE или REVERSE.
    Вторая форма BE SA задаёт цвета экрана и режим повышенной яркости или мигание. BRIGHT или BOLD можно использовать для задания повышенной яркости.

    Формат цветовых установок SA также используется командами BE ASK, BE BOX, BE CLS, BE PRINTCHAR, BE ROWCOL и BE WINDOW.

    Допустимыми цветами для переднего плана и фона являются:
    WHITE WHITE (белый) BLACK BLACK (чёрный)
    RED RED (красный) MAGENTA MAGENTA (пурпурный)
    BLUE BLUE (синий) GREEN GREEN (зелёный)
    CYAN CYAN (серо-голубой) YELLOW YELLOW (жёлтый)

    ПАРАМЕТРЫ: /N не устанавливать цвет бордюра (по-умолчанию используется тот же цвет, что и у фона)
    /CLS очистить экран после установки атрибутов

    См. также COLOR.

    ПРИМЕРЫ:

    Установить дисплей в режим инверсного изображения:

    be sa reverse

    Установить цвет переднего плана синим, повышенной яркости, цвет фона красный:

    be sa bright blue on red

    BE SHIFTSTATE

    СИНТАКСИС: BE SHIFTSTATE [/DEBUG]
    НАЗНАЧЕНИЕ: Возвращает состояние клавиш Shift, Alt и Ctrl.
    ПОЯСНЕНИЯ: Команда BE SHIFTSTATE возвращает выходной код ( ERRORLEVEL ), определяющий состояние клавиш: левая Shift, правая Shift, Alt и Ctrl в этот момент. SHIFTSTATE будет выдавать следующие коды для четырёх клавиш, которые можно складывать друг с другом для получения более сложных комбинаций:
    1 Правая клавиша Shift.
    2 Левая клавиша Shift
    4 Клавиша Ctrl (левая или правая)
    8 Клавиша Alt (левая или правая)
    Единственный параметр: /DEBUG отобразить возвращаемое значение ERRORLEVEL

    ПРИМЕР:

    Отобразить состояние клавиш Shift:

    be shiftstate /debug

    BE WINDOW

    Построение сплошного прямоугольника

    СИНТАКСИС: BE WINDOW верх, слева, низ, справа, [цвет] [ZOOM|EXPLODE] [SHADOW]
    НАЗНАЧЕНИЕ: Рисует заполненный прямоугольник-окно, можно задать изображение отбрасываемой тени и эффект распахивания.
    ПОЯСНЕНИЯ: BE WINDOW рисует заполненные прямоугольники различной формы, размеров и цветов в заданном месте экрана. Прямоугольники имеют границу в виде двойной линии, и они заполнены: любой текст внутри окна будет стёрт.
    ПАРАМЕТРЫ: вверх строка верхнего левого угла окна
    слева столбец верхнего левого угла окна
    низ строка нижнего правого угла окна
    справа столбец нижнего правого угла окна
    цвет цвет окна, задаваемый в формате SA (Screen Attribute)
    ZOOM распахнуть окно при рисовании (EXPLODE - синоним)
    SHADOW добавить вид отбрасываемой от окна "тени"

    См. также BE SA.

    ПРИМЕР:

    Нарисовать на экране окно с тенью:

    be window 10 10 20 40 red on blue shadow
    Страницы:

    4.1. Атрибуты символов

    Когда дисплей установлен в текстовый режим в любой из видеосистем, каждой позиции на экране отводится два байта памяти. Первый байт содержит номер кода ASCII символа, а второй байт - атрибуты символа. Для указания цветов экрана одни и те же номера кодов используются в бейсике, Си и прерываниях операционной системы (см. таблицу 4.1.).

    Обозначения цветов в стандартной трёхбитной палитре
    Числ. Значение Цветовой атрибут Символ или фон?
    0 Чёрный Символ
    1 Синий Символ
    2 Зелёный Символ
    3 Циан (голубой) Символ
    4 Красный Символ
    5 Пурпурный Символ
    6 Коричневый Символ
    7 Светло-серый Символ
    8 Тёмно-серый Символ
    9 Светло-синий Символ
    10 Светло-зелёный Символ
    11 Светло-голубой Символ
    12 Светло-красный Символ
    13 Светло-пурпурный Символ
    14 Жёлтый Символ
    15 Белый Символ
    0 Чёрный Фон
    16 Синий Фон
    32 Зелёный Фон
    48 Циан (голубой) Фон
    64 Красный Фон
    80 Пурпурный Фон
    96 Коричневый Фон
    112 Светло-серый Фон
    128 Мигание Символ
    Примечание: Атрибут = Символ+Фон (+ Мигание)

    Младшие четыре бита байта атрибутов устанавливают цвет самого символа (бит 3 включает высокую интенсивность цвета). Следующие три бита устанавливают фон символа, и при обычных обстоятельствах старший бит включает и выключает мигание. Образование шестнадцати цветов из 4-х бит проиллюстрировано в таблице 4.2.

    Образование 16 цветов из 4-х бит
    Сопоставление кодов цветов экрана в 16-ти цветной палитре
    Канал Интенсивность
    Красный Зелёный Синий Низкая (0) Высокая (1)
    0 0 0 Чёрный (0) Серый (8)
    0 0 1 Синий (1) Светло-синий (9)
    0 1 0 Зелёный (2) Светло-зелёный (10)
    0 1 1 Циан (3) Светлый циан (11)
    1 0 0 Красный (4) Ярко-красный (12)
    1 0 1 Магента (5) Светлая магента (13)
    1 1 0 Коричневый (6) Жёлтый (14)
    1 1 1 Белый (7) Ярко-белый (15)

    4.1.1. Реализация на ассемблере

    Прерывания DOS и BIOS предоставляют очень скудные возможности для работы с цветным текстом. Только функция 9 прерывания 10H принимает байт атрибутов при выводе символа. Функция 0AH прерывания 10H выводит символ без указания цвета - он принимается равным цвету по-умолчанию. Функция 0DH прерывания также оставляет нетронутым байт атрибутов.

    Функция вывода на экран DOS прерывания 21H всегда выводит белые символы на чёрном фоне. Единственный способ обойти это ограничение - использовать escape-последовательности (см. таблицу 2.2).

    Приведём примеры на языке ассемблера вывода сначала обычной строки (белым по чёрному), а затем надпись: "Внимание!" жёлтым цветом на красном фоне.

    Пример 4.1.

    ; --- в сегменте данных
    STRING_01	DB	'Я хочу обратить Ваше',0AH,0DH,'$'
    STRING_02	DB	'Внимание!$'
    NORM_COLOR	DB	27, '[0m$'
    ATTENT_COLOR	DB	27, '[1;33;41m$'
    CLEAR_COLOR	DB	27, '[0m$'
    ; --- в сегменте кода
    ; --- вывод строк
    	MOV AH, 9	; функция вывода страницы
    	LEA DX, NORM_COLOR	; Обычный цвет
    	INT 21H
    	LEA DX, STRING_01	; Первая строка
    	INT 21H
    	LEA DX, ATTENT_COLOR	; Выделение цветом
    	INT 21H
    	LEA DX, STRING_02	; Вторая строка
    	INT 21H
    	LEA DX, CLEAR_COLOR	; Сброс атрибутов текста
    	INT 21H

    Смотри Листинг программы ex04001.asm

    4.1.2. Реализация на языках Си

    В стандарте на язык Си (ANSI C) нет функций для работы с цветом. Вместо этого рекомендуется использовать escape - последовательности, при условии, что у Вас в системе установлен драйвер ANSI.SYS

    В этом случае пример 4.1. запишется следующим образом:

    Пример 4.2.

    /* ex04002.c */
    /* Вставка заголовочных файлов */
    #include <stdio.h>
    #include <conio.h>
    /* описание констант */
    const char NORM_COLOR[] = "\x1b[0m"; //Нормальный режим
    const char ATTENT_COLOR[] = "\x1b[1;33;41m"; // Выделение цветом
    /* Основная программа */
    void main( void )
    {
    /* Определение временной переменной */
    	char  cJunk;
    /* Вывод строк */
    	puts( NORM_COLOR );
    	puts( "\nЯ хочу обратить Ваше" );
    	puts( ATTENT_COLOR );
    	puts( "Внимание!\x1b[0m" );
    /* Завершение работы программы */
    	cputs( "Press key Enter to exit...\r\n" );
    	cJunk = getche();
    }
    /* Конец программы */

    Ниже рассмотрены некоторые функции для "цветного" вывода средствами Turbo C++ и SPHINX C--.

    ФУНКЦИЯ TEXTATTR
    ОПИСАНА В: <conio.h> (содержит только прототип);
    СИНТАКСИС:
    void textattr( newattr );
    int newattr;
    НАЗНАЧЕНИЕ: Устанавливает текстовые атрибуты;
    ОПИСАНИЕ: textattr позволяет устанавливать цвет фона и цвет символов одновременно за один вызов. (Обычно вы устанавливаете атрибуты с помощью textcolor и textbackground );

    Эта функция не относится к символам, находящимся в текущий момент на экране; она относится только к тому, что отображается функциями (такими как cprintf ) выполняющими вывод в текстовом режиме, после того, как была вызвана функция textattr.

    Информация цвета кодируется в параметре newattr следующим образом (смотри рисунок 4.1):

    (рис 4.1) Расшифровка байта атрибута символа при консольном выводе

    В этом 8-битном параметре newattr:

  • ffff - 4-битный цвет символов (1 - 15)
  • bbb - 3-битный цвет фона (1 - 7)
  • B - бит мигания.
  • Если бит мигания включён, то символ будет мигать. Это можно осуществить путём добавления константы BLINK в атрибут. Если вы используете символьные цветовые константы, определённые в conio.h для создания текстовых атрибутов с помощью textattr, запомните следующие ограничения на цвет фона:

  • Вы можете выбрать только первые 8 цветов для фона;
  • Вы должны сдвинуть выбранный цвет фона влево на 4 бита для перемещения его в правильную битовую позицию.
  • Символьные константы в таблице
    Константы для атрибутов текста, определённые в <conio.h>
    Константа Перевод Числ. Значение Для символов или фона?
    BLACK Чёрный 0 оба
    BLUE Синий 1 оба
    GREEN Зелёный 2 оба
    CYAN Циан (голубой) 3 оба
    RED Красный 4 оба
    MAGENTA Пурпурный 5 оба
    BROWN Коричневый 6 оба
    LIGHTGRAY Светло-серый 7 оба
    DARKGRAY Тёмно-серый 8 для символов
    LIGHTBLUE Светло-синий 9 для символов
    LIGHTGREEN Светло-зелёный 10 для символов
    LIGHTCYAN Светло-голубой 11 для символов
    LIGHTRED Светло-красный 12 для символов
    LIGHTMAGENTA Светло-пурпурный 13 для символов
    YELLOW Жёлтый 14 для символов
    WHITE Белый 15 для символов
    BLINK Мигание 128 для символов

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
    ПЕРЕНОСИМОСТЬ: textattr работает только на IBM PC и совместимых системах;

    ФУНКЦИЯ TEXTCOLOR
    ОПИСАНА В: <conio.h> (содержится прототип функции);
    СИНТАКСИС:
    void textcolor( newcolor);
    int newcolor;
    НАЗНАЧЕНИЕ: Устанавливает цвет символов в текстовом режиме;
    ОПИСАНИЕ: textcolor выбирает цвет символа. Эта функция оказывает влияние на функции, производящие прямой вывод на экран в текстовом режиме. Вы можете выбрать цвет, используя символьную константу, определённую в conio.h. Если вы используете эту константу, вы должны включить файл conio.h ;

    Эта функция не относится к символам, находящимся в текущий момент на экране; она относится только к тем символам, которые выводятся функциями (такими как cprintf ) в текстовом режиме, осуществлявшим вывод на дисплей после вызова textcolor.

    Следующая таблица отображает возможные цвета (как символьные константы ) и их числовые значения (Таблица 4.4.).

    Константы возможных цветов символов.
    Константы для атрибутов текста, определённые в <conio.h>
    Константа Перевод Числ.знач.
    BLACK Чёрный 0
    BLUE Синий 1
    GREEN Зелёный 2
    CYAN Циан (голубой) 3
    RED Красный 4
    MAGENTA Пурпурный 5
    BROWN Коричневый 6
    LIGHTGRAY Светло-серый 7
    DARKGRAY Тёмно-серый 8
    LIGHTBLUE Светло-синий 9
    LIGHTGREEN Светло-зелёный 10
    LIGHTCYAN Светло-голубой 11
    LIGHTRED Светло-красный 12
    LIGHTMAGENTA Светло-пурпурный 13
    YELLOW Жёлтый 14
    WHITE Белый 15
    BLINK Мигание 128

    Вы можете сделать символы мигающими, добавляя BLINK к цвету символов. Встроенная константа BLINK предназначена для этой цели. Например:

    textcolor(CYAN+BLINK);

    Замечание. Некоторые мониторы не определяют интенсивность сигнала, используемую для создания восьми "light" (светлый) цветов (8-15). На таких мониторах светлые цвета будут изображаться как их "тёмные" эквиваленты (0-7). Аналогично, системы, которые не отображают цвет, используют эти номера как оттенки одного цвета, особые образцы или особые атрибуты (такие как подчёркивание, полужирный шрифт, курсив и т.п.). То, что вы увидите при этом на экране, зависит от оборудования.

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
    ПЕРЕНОСИМОСТЬ: Только на IBM PC и совместимых компьютерах. Соответствующая функция существует в Turbo Pascal;

    ФУНКЦИЯ TEXTBACKGROUND
    ОПИСАНА В: <conio.h> (содержит прототип);
    СИНТАКСИС:
    void textbackground( newcolor);
    int newcolor;
    НАЗНАЧЕНИЕ Выбирает новый цвет фона для текста;
    ОПИСАНИЕ: textbackground выбирает цвет фона в текстовом режиме. Эта функция работает только для функций, осуществляющих примой вывод на экран в текстовом режиме. newcolor определяет новый цвет фона. Вы можете определить его как целое (от 0 до 7) или как одну из символических констант, определённых в файле conio.h. При использовании символьных констант необходимо включить файл conio.h ;

    Эта функция не относится к символам, находящимся в текущий момент на экране; она относится только к тем символам, которые выводятся функциями (такими как cprintf ) в текстовом режиме, осуществлявшим вывод на экран после вызова этой функции.

    Символьные константы в таблице 4.5:

    Символьные константы цветов фона консоли
    Константы для атрибутов текста, определённые в <conio.h>
    Константа Перевод Числ.знач.
    BLACK Чёрный 0
    BLUE Синий 1
    GREEN Зелёный 2
    CYAN Циан (голубой) 3
    RED Красный 4
    MAGENTA Пурпурный 5
    BROWN Коричневый 6
    LIGHTGRAY Светло-серый 7

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет;
    ПЕРЕНОСИМОСТЬ: Только с IBM PC и совместимыми компьютерами. Соответствующая функция существует в Turbo Pascal;

    Пример 4.3.

    Использование функций управления атрибутами символов textcolor и textbackground.

    /* ex04003.c  */
    /* Работает только в системе Borland C/C++ 3.10 */
    /* Вставка заголовочных файлов */
    #include <conio.h>
    /* Основная программа */
    void main( void )
    {
    /* Определение временной переменной */
    	char  cJunk;
    /* Вывод строк */
    	textcolor( LIGHTGRAY); textbackground( BLACK );
    	cputs( "\r\nЯ хочу обратить Ваше\r\n" );
    	textcolor( YELLOW); textbackground( RED );
    	cputs( "Внимание!" );
    	textcolor( LIGHTGRAY); textbackground( BLACK );
    /* Завершение работы программы */
    	cputs( "\r\n\r\nPress key Enter to exit...\r\n" );
    	cJunk = getche();
    }
    /* Конец программы */

    4.1.3. Реализация в оболочке DOS Command Shell и NDOS

    В командной оболочке NDOS есть штатная функция: be, с помощью которой можно менять цвет выводимых символов и их фон. Её синтаксис следующий:

    be "команда" "опции и параметры"

    а также

    be "имя batch-файла".dat

    Все команды и опции команды be приведены в приложении №1 (пункт 4.4 данной лекции). Здесь же приведём пример batch файла, реализующий пример 4.3.:

    Пример 4.4. Файл ex04005.dat

    cls white on black
    rowcol 1, 1 "Я хочу обратить Ваше"
    rowcol 2, 1 "Внимание!" bright yellow on red

    Примечание: Этот файл запускается из командной строки командой:

    Пример 4.5

    be ex04005.dat

    4.1.4. Реализация на языках Perl и Python

    Вывод текста с "нестандартными" атрибутами на языках Perl и Python не возможен.

    4.1.5. Реализация на языке Prolog

    Вывод текста с атрибутами цвета на языке ПРОЛОГ осуществляется с использованием предиката attribute, который может читать и устанавливать текстовый атрибут;

    Приведём синтаксис предиката attribute

    ФУНКЦИЯ: attribute
    СИНТАКСИС: attribute(Attr), где Attr - атрибут символа (целое число);
    НАЗНАЧЕНИЕ: Устанавливает или выдаёт текущий атрибут символа;
    ОПИСАНИЕ: attribute устанавливает или считывает текущий атрибут вывода. Вывод при помощи write или writef даёт отображение экрана с этим атрибутом. Каждое окно имеет свой атрибут вывода. Когда вы создаёте окно, атрибут вывода автоматически принимает значение атрибута окна, но вы можете изменить его предикатом attribute ;
    ШАБЛОНЫ: (i) (o) ;
    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Всегда успех;
    ОШИБКИ: Никогда не даёт;

    Пример 4.3, записанный на языке ПРОЛОГ, будет выглядеть следующим образом:

    Пример 4.6.

    /* Файл ex04006.pro */
    domains
    /* Описываем переменные */
    	CNorm_color= char
    predicates
    	attent
    	norm_color
    clauses
    /* Определяем правила */
    norm_color :- attribute( '\07' ).
    attent :- attribute( '\78' ), nl, write( "Внимание!" ).
    goal
    /* Вывод нормального текста */
    	norm_color, nl,
    	write( "Я хочу обратить Ваше" ),nl,
    /* Вывод текста с изменёнными атрибутами */
    	attent,
    /* Возвращение нормальных атрибутов */
    	norm_color, nl,
    /* Вывод завершающей надписи */
    	write( "Press key Enter to exit..." ), readchar( _ ).
    /* Конец программы */

    4.2. Escape-последовательности

    Как Вы, наверное, уже уяснили то, что основным способом манипуляции положением позиции курсора, сменой атрибутов текста при выводе на экран является использование так называемых escape-последовательностей. Наиболее широко их применяют в "консольных" приложениях MS-DOS и UNIX, но часто используют и в других операционных системах. Эти последовательности стандартизированы американским национальным институтом стандартов (ANSI). Сводку используемых при выводе на экран escape - последовательностей см. в таблице 2.1.

    Для поддержки escape- последовательностей в операционных системах MS-DOS, Windows 9x/ME необходимо в файле CONFIG.SYS загрузить драйвер ANSI.SYS, при помощи директив DEVICE или DEVICEHIGH. В остальных операционных системах поддержка расширений ANSI включена по-умолчанию (в реестре и файлах конфигурации). Если escape- последовательности всё же не работают, смотрите настройки Вашего компьютера (в файлах конфигурации и в реестре).

    4.3. Резюме

    После прочтения последних трёх лекций Вы уяснили, каким образом символьные данные выводятся на дисплей с использованием "функций среднего уровня". Материал может показаться Вам не актуальным - ведь Вы уже привыкли работать в "оконном интерфейсе", в котором шрифтовое и абзацное оформление текста намного богаче. Однако если Вы хотите делать свои консольные приложения (а вы их обязательно будете делать в первую очередь) хотя бы чуть-чуть более привлекательными, чем это предоставляют стандартные потоки вывода на дисплей, Вы обязательно обратитесь к этим функциям.

    Кроме того, Вы ознакомились с принципиально важными функциями для вывода текста на экран, имеющие при консольном выводе не меньшее значение, чем функции манипулирования контекстом Windows, о котором речь пойдёт в последующих лекциях.

    4.4. Приложение №1. Команды и опции функции be

    В данном разделе даётся описание функции работы с командными файлами при помощи приложения Norton Utilities 8.0 BE.

    BE ASK

    BE ASK Ожидание нажатия заданной клавиши
    СИНТАКСИС: BE ASK "приглашение" [список-клавиш][DEFAULT=клавиша][TIMEOUT=n][ADJUST=n][цвет][/DEBUG]
    НАЗНАЧЕНИЕ: Запрашивает ввод с клавиатуры и устанавливает код переменной DOS ERRORLEVEL
    ПОЯСНЕНИЯ: BE ASK приглашает пользователя ответить на вопрос. Это позволяет создавать интерактивные пакетные файлы, которые поддерживают условные переходы.

    Можно задать клавишу (если пользователь нажимает клавишу Enter ) и время ожидания по-умолчанию. Выбранная клавиша возвращается как код возврата и используется в дальнейшем при обработке перехода.

    ВОЗМОЖНЫЕ ПАРАМЕТРЫ:

    сообщение Текстовая строка - подсказка, выводится при запуске команды. Если в строке есть запятые и/или пробелы, то всю строку следует заключить в кавычки. Используйте пару кавычек без каких-либо символов между ними, если не нужно выводить строку сообщения.
    список-клавиш Список возможных клавиш для ответа (символы или числа);
    DEFAULT Клавиша, возвращаемая по тайм-ауту, если в течение заданного периода ничего не было нажато или если нажата клавиша Enter ;
    TIMEOUT Время в секундах, по истечении которого возвращается код клавиши, заданной по-умолчанию. Если n=0 или тайм-аут не установлен, ASK будет ожидать до тех пор, пока не будет нажата клавиша;
    ADJUST Увеличивает возвращаемое значение на заданное число;
    цвет Задание цвета сообщения в формате SA (Screen Attribute). См. BE SA;

    Параметр /DEBUG выводит возвращаемый код ERRORLEVEL на экран.

    Если пользователь нажимает клавишу, которая не обозначена в списке клавиш, звучит сигнал предупреждения.

    ПРИМЕР:

    Следующий фрагмент пакетного файла можно использовать как часть системы меню:

    be ask "Run the E(ditor), D(atabase) or Q(uit)?" edq
    if errorlevel 3 goto quit
    if errorlevel 2 goto database
    if errorlevel 1 goto editor

    BE BEEP

    СИНТАКСИС:
    BE BEEP [/Dn] [/Fn] [/Rn] {/Wn}
    BE BEEP [путь [/E]]
    НАЗНАЧЕНИЕ: Задаёт частоту и длительность звука, выдаваемого на динамик.
    ПОЯСНЕНИЯ: BE BEEP использует системный динамик для создания звуков заданной частоты и длительности. Используйте их для сигнализации ошибочной ситуации или завершения задачи.
    ВОЗМОЖНЫЕ ПАРАМЕТРЫ: /Dn длительность звука в долях 1/18 секунды
    /Fn частота тона в герцах
    /Rn повторить вывод сигнала n раз
    /Wn образовать паузу между сигналами длительностью n/18 секунды
    /E отобразить указанный в кавычках текст в комментарии

    BE BEEP также может воспроизвести ноты из пакетного файла. Это текстовый файл с перечнем ключей. Комментарии можно помещать в пакетный файл после ключей, но им должна предшествовать точка с запятой. Части комментария, заключённые в кавычки, будут выводиться на экран при работе пакетного файла.

    ПРИМЕЧАНИЕ:

    NDOS самостоятельно не обрабатывает пакетные файлы BE. Если пакетный файл задан в командной строке, NDOS попытается найти программу Norton BE.EXE и подставить командную строку как параметр в неё.

    ПРИМЕР:

    Исполнить ноту "ля" в течение 2 секунд и повторить 3 раза. Сделать паузу в 1 секунду между нотами:

    be beep /f440 /d36 /r3 /w18

    Следующий пакетный файл 2NOTE воспроизводит две различные ноты:

    /f330 /d10 /r2 /w5; это была "ми"
    /f440 /d10 /r2 /w5; эта была "соль"

    Для того чтобы отобразить слова: "ми" и "соль", используйте:

    be beep 2note /e

    BE BOX

    Построить рамку на экране

    СИНТАКСИС: BE BOX верх, слева, низ, справа [SINGLE | DOUBLE] [цвет]
    НАЗНАЧЕНИЕ: Рисует прямоугольник в указанной позиции на экране.
    ПОЯСНЕНИЯ: BE BOX рисует прямоугольники различной формы, размеров и цветов в указанной позиции экрана. Прямоугольники могут иметь одиночную или двойную границу. Прямоугольники не заполняются каким-либо символом, так что любой текст внутри них сохраняется.
    ВОЗМОЖНЫЕ ПАРАМЕТРЫ: вверх строка левого верхнего угла
    слева столбец левого верхнего угла
    низ строка нижнего правого угла
    справа столбец нижнего правого угла
    SINGLE одиночная линия границы
    DOUBLE двойная линия границы
    цвет цвет рамки, задаваемый атрибутами SA (атрибуты экрана) для рамки (см. BE SA).

    По-умолчанию рамка рисуется двойной линией.

    См. также DRAWBOX.

    ПРИМЕР:

    Нарисовать красную рамку на зелёном фоне с границей в виде одиночной линии:

    be box 10 10 20 40 single red on green

    BE CLS

    Очистить экран (и установить цвет)

    СИНТАКСИС: BE CLS [цвет]
    НАЗНАЧЕНИЕ: Очищает экран, используя заданные атрибуты (необязательно).
    ПОЯСНЕНИЯ: BE CLS будет очищать экран, используя атрибуты текущего положения курсора или атрибуты, заданные в командной строке. Одна из причин, по которой очистка экрана производится некоторым атрибутом, состоит в том, что другие команды BE, такие как ROWCOL, ASK, и BOX, будут использовать текущие атрибуты экрана, если цвет не задан в командной строке. Устанавливая некоторый атрибут экрана заранее, можно сделать другие команды BE меньше по размеру и быстрее по выполнению.
    Имеет единственный параметр: цвет использовать цвет, заданный в формате SA (см. BE SA).

    См. также CLS.

    ПРИМЕР:

    Очистить экран и установить красный цвет на зелёном фоне:

    be cls red on green

    BE command

    BE команда
    СИНТАКСИС: BE команда
    НАЗНАЧЕНИЕ: Расширенные возможности для пакетных файлов.
    ПОЯСНЕНИЯ: Для более быстрого выполнения пакетных файлов NDOS непосредственно поддерживает следующие команды Norton Batch Enhancer:
    BE ASK BE REBOOT
    BE BEEP BE ROWCOL
    BE BOX BE SA
    BE CLS BE SHIFTSTATE
    BE DELAY BE TRIGGER
    BE MONTHDAY BE WEEKDAY
    BE PRINTCHAR BE WINDOW
    Каждая команда BE описана под её собственным заголовком.

    Пользуйтесь:

    BE команда /?

    для получения оперативной справки по интересующей команде BE..

    ПРИМЕЧАНИЕ:

    Если внутренняя команда NDOS BE не может найти указанную команду, например, пакетный файл для BE в виде:

    BE файл процедуры [[GOTO] метка]

    то NDOS будет искать BE.EXE (используя путь) и выполнит BE, подставляя остаток команды. Следующие команды BE не имеют значения в NDOS, поскольку встречаются только в пакетных файлах BE:

    BE EXIT
    BE GOTO
    BE JUMP
    BE DELAY

    BE DELAY

    Сделать паузу

    СИНТАКСИС: BE DELAY число
    НАЗНАЧЕНИЕ: Приостанавливает выполнение пакетного файла на заданное время.
    ПОЯСНЕНИЯ: BE DELAY приостанавливает выполнение пакетного файла на заданный интервал. Выполнение пакетного файла возобновляется по истечении заданного периода времени.
    Имеет единственный параметр: число количество 1/18-секундных интервалов.

    См. также DELAY.

    ПРИМЕР:

    Сделать паузу в полсекунды:

    be delay 9

    BE EXIT

    СИНТАКСИС: BE EXIT
    НАЗНАЧЕНИЕ: Завершить выполнение пакетного файла BE прежде, чем будет достигнут конец файла.
    ПОЯСНЕНИЯ: Команда BE EXIT используется только в пакетных файлах BE и не вызывает никакого действия при вызове из DOS.

    ПРИМЕР:

    Следующий пакетный файл COLOR.DAT просит ввести цифры, а затем, в соответствии с нажатой цифрой, меняет цвета экрана:

    ask "1=Чёрно/белый, 2=Бело/синий, 3=Прервать" 123 DEFAULT=3
    jump onblack, onblue, nochange
    :onblack
    sa white on black
    exit
    :onblue
    sa bright white on blue
    :nochange

    Для выполнения этого пакетного файла введите команду:

    be color.dat

    BE GOTO

    СИНТАКСИС: BE пакетный файл [[GOTO] метка]
    НАЗНАЧЕНИЕ: Определяет начальную точку выполнения в пакетном файле BE.
    ПОЯСНЕНИЯ: Команда BE GOTO используется для того, чтобы начать выполнение пакетного файла не обязательно с начальной строки. Слово GOTO можно не задавать, если метка перехода определяется после имени пакетного файла.

    Соглашения для использования меток такие же, как и в DOS. Метка должна начинаться с двоеточия (:) и находиться в отдельной строке в пакетном фале.

    ПАРАМЕТРЫ BE GOTO: пакетный файл Имя пакетного файла для BE.
    метка Допустимая метка, которая находится в пакетном файле.

    BE GOTO отличается от команды GOTO пакетных файлов DOS тем, что работает только в пакетных файлах BE.

    BE JUMP используется для условных переходов внутри пакетного файла, тогда как BE GOTO используется для организации точки входа в пакетный файл по условию.

    ПРИМЕР:

    Следующий пакетный файл COLOR.DAT приглашает ввести цифру и затем, в соответствии с нажатой клавишей, меняет цвета экрана.

    ask "1=Чёрно/белый, 2=Бело/синий, 3=Прервать" 123 DEFAULT=3
    jump onblack, onblue, nochange
    :onblack
    sa white on black
    exit
    :onblue
    sa bright white on blue
    :nochange

    Для выполнения этого файла, начиная со второй метки, используйте:

    be color.dat goto onblue

    BE JUMP

    СИНТАКСИС: JUMP метка1 [, метка2 [, ... меткаN]] [/DEFAULT:метка]
    НАЗНАЧЕНИЕ: Выполняет переход к метке в пакетных файлах BE в зависимости от выходного кода ( ERRORLEVEL ) предыдущей команды.
    ПОЯСНЕНИЯ: BE использует выходной код, чтобы переместиться к соответствующей метке и продолжить выполнение.
    BE JUMP имеет параметры: метка допустимая метка в пакетном файле.
    /DEFAULT:метка Метка, на которую осуществляется переход, если выходной код равен нулю или если выходной код больше, чем число заданных меток.

    Команда BE JUMP работает только в пакетных файлах BE и не имеет какого-либо смысла при вызове непосредственно из DOS.

    BE JUMP используется для условных переходов в пакетных файлах, тогда как BE GOTO используется для организации точек входа в пакетный файл по условию.

    BE PRINTCHAR

    Вывести символ

    СИНТАКСИС: BE PRINTCHAR символ число_повторений [цвет]
    ПОЯСНЕНИЯ: BE PRINTCHAR отображает заданный символ заданное количество раз, начиная с текущей позиции курсора. Символ можно повторить до 132 раз. (Предел Norton BE - 80 раз).
    ИМЕЕТ ПАРАМЕТРЫ: символ выводимый символ
    число_повторений число повторений
    цвет цвет символа в формате SA (Screen Attribute) (см. BE SA).

    См. также SCRPUT и SCREEN.

    ПРИМЕР:

    be printchar X 30 blue on red

    BE REBOOT

    СИНТАКСИС: BE REBOOT [/VERIFY] [/COLD]
    НАЗНАЧЕНИЕ: Выполняет "горячий" (без выключения питания) перезапуск компьютера.
    ПОЯСНЕНИЯ: BE ROOT даёт возможность выполнять перезапуск компьютера из пакетного файла. Это полезно в конструкциях пакетных файлов, которые воздействуют на конфигурацию системы.
    ПАРАМЕТРЫ: /VERIFY Запросить пользователя о подтверждении перезапуска.
    /COLD Выполнить холодный перезапуск.

    ПРИМЕЧАНИЕ:

    Некоторые диспетчеры памяти или TSR-программы могут помешать перезагрузке.

    ПРИМЕР:

    Для горячей перезагрузке компьютера с запросом подтверждения Y/N:

    be reboot /verify

    BE ROWCOL

    Позиционирует курсор

    СИНТАКСИС: BE ROWCOL строка столбец ["текст"] [цвет]
    НАЗНАЧЕНИЕ: Устанавливает курсор в положение, заданное строкой и столбцом, и (необязательно) выводит текст.
    ПОЯСНЕНИЯ: BE ROWCOL обеспечивает управление положением курсора на экране, так что текст можно выводить в любую позицию. После того, как местоположение курсора определено, вывод текста будет выполняться, начиная с этой позиции. ROWCOL также может вывести строку текста с необязательным параметром цвета.
    ПАРАМЕТРЫ: строка строка, куда помещается курсор
    столбец столбец, куда помещается курсор
    текст строка текста (не обязательно)
    цвет цвет текста, задаваемый в формате SA (Screen Attribute - см. BE SA ).

    См. также SCRPUT и SCREEN.

    ПРИМЕР:

    Отобразить текст вблизи центра верхней строки экрана:

    be rowcol 1, 27 "Здесь был он!" blue on green

    BE SA

    Управление цветом и атрибутами

    СИНТАКСИС:
    BE SA NORMAL|UNDERLINE|REVERSE [/N]
    BE SA [BRIGHT|BLINKING] передний_план [ON фон] [/N] [/CLS]
    НАЗНАЧЕНИЕ: Управляет цветом и атрибутами экрана.
    ПОЯСНЕНИЯ: BE SA (атрибуты экрана) используются в двух формах.
    Первая форма устанавливает дисплей в режим с подчёркиванием букв или в режим инверсного изображения. Параметр UNDERLINE доступен только на монохромных мониторах (на цветном мониторе выдаст синий цвет для переднего плана). Параметр NORMAL используется для снятия режима UNDERLINE или REVERSE.
    Вторая форма BE SA задаёт цвета экрана и режим повышенной яркости или мигание. BRIGHT или BOLD можно использовать для задания повышенной яркости.

    Формат цветовых установок SA также используется командами BE ASK, BE BOX, BE CLS, BE PRINTCHAR, BE ROWCOL и BE WINDOW.

    Допустимыми цветами для переднего плана и фона являются:
    WHITE WHITE (белый) BLACK BLACK (чёрный)
    RED RED (красный) MAGENTA MAGENTA (пурпурный)
    BLUE BLUE (синий) GREEN GREEN (зелёный)
    CYAN CYAN (серо-голубой) YELLOW YELLOW (жёлтый)

    ПАРАМЕТРЫ: /N не устанавливать цвет бордюра (по-умолчанию используется тот же цвет, что и у фона)
    /CLS очистить экран после установки атрибутов

    См. также COLOR.

    ПРИМЕРЫ:

    Установить дисплей в режим инверсного изображения:

    be sa reverse

    Установить цвет переднего плана синим, повышенной яркости, цвет фона красный:

    be sa bright blue on red

    BE SHIFTSTATE

    СИНТАКСИС: BE SHIFTSTATE [/DEBUG]
    НАЗНАЧЕНИЕ: Возвращает состояние клавиш Shift, Alt и Ctrl.
    ПОЯСНЕНИЯ: Команда BE SHIFTSTATE возвращает выходной код ( ERRORLEVEL ), определяющий состояние клавиш: левая Shift, правая Shift, Alt и Ctrl в этот момент. SHIFTSTATE будет выдавать следующие коды для четырёх клавиш, которые можно складывать друг с другом для получения более сложных комбинаций:
    1 Правая клавиша Shift.
    2 Левая клавиша Shift
    4 Клавиша Ctrl (левая или правая)
    8 Клавиша Alt (левая или правая)
    Единственный параметр: /DEBUG отобразить возвращаемое значение ERRORLEVEL

    ПРИМЕР:

    Отобразить состояние клавиш Shift:

    be shiftstate /debug

    BE WINDOW

    Построение сплошного прямоугольника

    СИНТАКСИС: BE WINDOW верх, слева, низ, справа, [цвет] [ZOOM|EXPLODE] [SHADOW]
    НАЗНАЧЕНИЕ: Рисует заполненный прямоугольник-окно, можно задать изображение отбрасываемой тени и эффект распахивания.
    ПОЯСНЕНИЯ: BE WINDOW рисует заполненные прямоугольники различной формы, размеров и цветов в заданном месте экрана. Прямоугольники имеют границу в виде двойной линии, и они заполнены: любой текст внутри окна будет стёрт.
    ПАРАМЕТРЫ: вверх строка верхнего левого угла окна
    слева столбец верхнего левого угла окна
    низ строка нижнего правого угла окна
    справа столбец нижнего правого угла окна
    цвет цвет окна, задаваемый в формате SA (Screen Attribute)
    ZOOM распахнуть окно при рисовании (EXPLODE - синоним)
    SHADOW добавить вид отбрасываемой от окна "тени"

    См. также BE SA.

    ПРИМЕР:

    Нарисовать на экране окно с тенью:

    be window 10 10 20 40 red on blue shadow
    Вернуться к учебному плану