Лекция 03

Лекция 03
Прямой ввод-вывод: Часть II Содержание:
03.00. Инструкция.

03.01. Чистка экрана

03.02. Управление курсором

03.03. Резюме

03.04. Вопросы и упражнения.

03.05. Г Л О С С А Р И Й


=== *** === *** ===
03.00. Инструкция.
На данной лекции Вы познакомитесь с операциями позиционирования курсора на дисплее монитора.
03.01. Чистка Лекция 03 экрана
Чистку всего экрана можно выполнить при помощи специальной команды либо при помощи escape – последовательности Esc[2J. Разглядим эти методы поподробнее.
Содержание:
03.01.1. Реализация на ассемблере

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

03.01.3. Реализация на Бейсике

03.01.4. Реализация в Лекция 03 Command Shell

03.01.5. Реализация в языках Перл, Питон и Пролог
03.01.1. Реализация на ассемблере 1-ый способ: внедрение функции 6 прерывания 10H.
Функция 6 прерывания 10H очищает определённую прямоугольную область экрана. Число строк, на которое нужно двинуть Лекция 03 экран, заносится в регистр AL. Если установлено значение 0, то экран очищается. Строчка для верхнего левого угла очищаемой области заносится в регистр CH, столбец для левого верхнего угла – в регистр CL, а значения для правой нижней Лекция 03 строчки и столбца – в регистры DH и DL соответственно. Атрибут, которым должен чиститься экран, записывается в регистр BH. Он тщательно описан в таблице 03.I.

Примечание: нумерация позиций экрана начинается с Лекция 03 точки (0, 0) в верхнем левом углу экрана!


Таблица 03.I.

Числовое значение атрибутов знаков (цвет и фон)

<>
Пример 03.001
; --- Чистка экрана меж координатами 0, 0 и 24, 79,

; --- обычное наполнение знаков.


MOV AH, 6 ; применяемая функция.

MOV AL, 0 ; очищается весь спектр

MOV BH Лекция 03, 007H ; белоснежные знаки на чёрном фоне

MOV CH, 0 ; левый верхний

MOV CL, 0 ; угол

MOV DH, 24 ; правый нижний

MOV DL, 79 ; угол

INT 10H
2-й способ: внедрение функции 9 прерывания 10H.
Функция 9 прерывания 10H выводит знак и атрибут столько раз, сколько Лекция 03 обозначено в CX. Значение 2000 чистит весь экран, если курсор установлен в позицию 0, 0. AL должен содержать знак пробела (код 020H), BL – б атрибутов, а BH – номер странички монитора.
Пример 03.002.
; --- установка курсора в левый Лекция 03 верхний угол экрана

MOV AH, 2 ; номер функции

MOV BH, 0 ; номер экранной странички

MOV DX, 0 ; обнуляем координату позиции курсора

INT 10H

; --- вывод знака 'пробел' 2000 раз

MOV AH, 9 ; номер функции

MOV CX, 2000 ; число повторений вывода

MOV AL, 020H ; знак пробела

MOV Лекция 03 BL, 7 ; атрибут 'белоснежный по чёрному'

INT 10H


Дополнительную информацию смотрите [Абель, Джордейн]
03.01.2. Реализация на языке Си
Реализация чистки экрана средствами языка Си вероятна только средством использования escape-последовательности:
Пример 03.003.


puts( "\x1B[2J" );


03.01.3. Реализация на Лекция 03 Бейсике
В бейсике для чистки экрана применяется оператор CLS


^ ОПЕРАТОР CLS

СИНТАКСИС: CLS

Предназначение: Данный оператор очищает текущий экран вывода программки Basic и переносит экранную позицию вывода (курсор) в координаты (0, 0).

Оператор не Лекция 03 воспринимает и не возвращает никаких значений.
03.01.4. Реализация в Command Shell
Чистку экрана в MS-DOS Command Shell можно выполнить последующим методом:


CLS


Дополнительную информацию смотри [Финогентов II]
03.01.5. Реализация в языках Перл, Питон и Пролог
Реализация чистки экрана средствами языков Перл, Питон и Турбо Пролог не предусмотрена.
03.02. Управление курсором Содержание:
03.02.1. Абсолютное размещение курсора

03.02.2. Относительное размещение Лекция 03 курсора

03.02.3. Запоминание позиции курсора


=== *** === *** ===

Кроме цвета выводимых знаков, еще почаще Вам придётся изменять положение курсора на дисплее монитора. При всем этом может потребоваться:

  1. Абсолютное размещение курсора;

  2. Относительное размещение (относительно текущей позиции);

  3. Запоминание либо Лекция 03 чтение позиции курсора.

Этим операциям мы научимся в этом разделе.
03.02.1. Абсолютное размещение курсора
Курсор служит двум целям. Во-1-х, он служит указателем места на дисплее, в которое операторы программки отправляют собственный ввод Лекция 03. Во-2-х, он обеспечивает видимую точку отсчёта на дисплее для юзера программки. Только для второго внедрения курсор должен быть видимым. Но даже невидимый курсор показывает на позицию на дисплее. Это принципиально, так как хоть Лекция 03 какой вывод на экран начинается с текущей позиции курсора (который может быть выключен).

Для курсора могут быть установлены абсолютные координаты либо координаты относительно текущей позиции. Абсолютные координаты могут изменяться в границах 25 (время Лекция 03 от времени 50) строк и 80 (время от времени 40) столбцов. В языках высочайшего уровня обычно отсчитывают координаты экрана, начиная с единицы. Таким макаром, позиция левого верхнего угла – 1, 1. В ассемблере отсчёт всегда начинается Лекция 03 с нуля и позиция левого верхнего угла – 0, 0.

Разглядим функции абсолютного позиционирования курсора, реализованные на различных языках.
Содержание:
03.02.1.1. Реализация на ассемблере

03.02.1.2. Реализация в языках Си

03.02.1.3. Реализация в Бейсике

03.02.1.4. Реализация в Perl и Python

03.02.1.5. Реализация в Command Shell

03.02.1.6. Реализация Лекция 03 в языке Turbo Prolog
03.02.1.1. Реализация на ассемблере 1-ый способ.
Функция 2 прерывания 10H устанавливает курсор, относящийся к обозначенной страничке видео памяти.


^ ФУНКЦИЯ 2 ПРЕРЫВАНИЯ 10H

Входные значения:


AH = 2 – номер функции

BH – номер видеостраницы (обычно 0):

DH – строчка монитора. Отсчёт строк Лекция 03 начинается с 0;

DL – столбец монитора. Отсчёт столбцов начинается с 0;


Пример установки графического курсора в центре экрана:
Пример 03.004.

; --- установка курсора в строчку 12, столбец 39.

MOV AH, 2 ; номер функции

MOV BH, 0 ; номер странички

MOV DH Лекция 03, 12

MOV DL, 39

INT 10H


Подробнее смотри [Абель, Джордейн]
2-ой способ.
2-ой способ позиционирования курсора состоит в применении escape-последовательностей драйвера ANSI.SYS. В данном случае можно воспользоваться функцией 9 прерывания 21H, выводя escape-последовательность как Лекция 03 обыденную строчку.
Пример 03.005.

; --- установка курсора в строчку 12, столбец 39.


; --- в секторе данных

DOS_CENTER DB 27,'[12;39H$' ; строчка позиции курсора

; --- в секторе кода

MOV AH, 9 ; номер функции вывода строчки.

LEA DX, DOS_CENTER ; загрузка адреса строчки

INT 21H


Подробнее Лекция 03 см. [MS_DOS 6.0, Финогентов I]
03.02.1.2. Реализация в языках Си
Не глядя на то, что на языке Си есть свои функции управления позицией курсора, предпочтительней использовать средства, предоставляемые драйвером ANSI.SYS (примеры Лекция 03 см. ниже).
Пример 03.006.

1. Реализация в Turbo C/C++


const char POS_CENTER[] = "\x1b[12;39H";



puts( POS_CENTER);


2. Реализация в SPHINX C--


WRITESTR( "\x1b[13;39H" );


Подробнее см. [Бочков, Финогентов I]

Другие Лекция 03 функции задания абсолютной позиции курсора в Си:
Функции Turbo C++

^ ФУНКЦИЯ GOTOXY

ОПИСАНА В: (содержит макет функции)

СИНТАКСИС: void gotoxy( x, y );

int x;

int y:

Предназначение: Позиционирует курсор в текстовом окне Лекция 03.

ОПИСАНИЕ: gotoxy перемещает курсор в текстовом окне в обозначенную позицию. Если координаты указаны ошибочно, вызов данной функции игнорируется. К примеру, это произойдёт при вызове gotoxy(80,30) когда окно имеет размеры 40 столбцов на 25 строк.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ Лекция 03: Нет.

ПЕРЕНОСИМОСТЬ: Работает лишь на системах, совместимых с IBM PC. Подобная функция есть в Turbo Pascal.
Функции SPHINX C--

^ ФУНКЦИЯ GOTOXY

СИНТАКСИС: void GOTOXY ()

AL = xloc; BL = yloc;

Предназначение: Устанавливает текстовый Лекция 03 курсор в позицию, заданную xloc и yloc. Отсчёт позиций начинается с нуля.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: AX, BX и DX не определены.


^ ФУНКЦИЯ GOTOXYZ

СИНТАКСИС: void GOTOXYZ ()

AL = xloc; BL = yloc; CL = page;

Предназначение: Устанавливает текстовый курсор Лекция 03 в позицию, заданную xloc и yloc для обозначенной «page» видео странички монитора. Отсчёт значений начинается с нуля.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: AX,BX,CX и DX не определены.
03.02.1.3. Реализация в Бейсике
Бейсик нумерует Лекция 03 строчки от 1 до 25, а столбцы – от 1 до 80. Абсолютная позиция строчки задаётся оператором LOCATE.


^ ОПЕРАТОР LOCATE

Синтаксис: LOCATE строчка, столбец

где

строчка – переменная либо целая константа, указывающая на положение строчки вывода;

столбец – переменная либо целая константа, указывающая Лекция 03 на положение столбца вывода.

Предназначение: Абсолютное размещение строчки.
Пример 03.007.

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

^ LOCATE 12, 40


Подробнее см. [Джордейн]
03.02.1.4. Реализация в Perl и Python
Абсолютное размещение в Perl и Python не реализовано.
03.02.1.5. Реализация Лекция 03 в языке Turbo Prolog
Абсолютное размещение в Turbo Prolog осуществляется при помощи специальной функции (см. примеры ниже).


^ ФУНКЦИЯ: CURSOR

СИНТАКСИС: cursor(Row, Column)

где Row – целая переменная, устанавливающая либо считывающая значение Лекция 03 позиции строчки выводимых знаков, Column – целая переменная, устанавливающая либо считывающая значение столбца на дисплее, куда выводится знак;

Предназначение: Устанавливает либо считывает позицию курсора в окне;

ОПИСАНИЕ: Шаблон: (i,i) Перемещает курсор в обозначенную позицию Лекция 03 (Row,Column) относительно исходной позиции (0,0) в активном окне. Шаблон: (o,o), связывает Row и Column с текущей позицией курсора. Никогда не даёт плохого окончания;

ШАБЛОНЫ: (i,i) (o,o);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ Лекция 03: Никогда не даёт плохого окончания;

ОШИБКИ:

* 1001 Недопустимые значения позиции курсора.
Пример 03.008.
/* Реализация абсолютного позиционирования курсора средствами спец. функции Турбо Prolog. */


… cursor(12, 39), …

03.02.2. Относительное размещение курсора
Функции относительного позиционирования курсора производятся только через escape-последовательности Лекция 03. Они выводятся на экран на ассемблере с помощи функции 9 прерывания 21H. В таблице 02.I приводится вид escape-последовательностей для различных операций. Такие последовательности интерпретируются оболочкой как команды управления экраном, а не Лекция 03 вывод знаков строчки.

Вероятны последующие направления перемещения курсора:

Не считая того, для управления курсором нередко употребляются последующие «пробельные» метасимволы (см. таблицу 02.II Лекция 03).

Подробнее см. [MS-DOS 6.0, Финогентов 1]
Содержание:
03.02.2.1. Реализация на Ассемблере

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

03.02.2.3. Реализация на Бейсике

03.02.2.4. Реализация в Perl и Python

03.02.2.5. Реализация в Turbo Prolog
03.02.2.1. Реализация на Ассемблере
Для управления относительным перемещением курсора Лекция 03 на языке ассемблера нужно:

См. пример 03.005.
03.02.2.2. Реализация на языке Си
Вывод escape – последовательностей осуществляется с внедрением функции puts Лекция 03 (потоковая функция).

Тексты примеров с внедрением escape – последовательностей приведены выше (см. пример 03.003. и др.)

Для переноса вывода в начало новейшей строчки в языке C-- есть функция WRITELN:


^ ФУНКЦИЯ WRITELN

СИНТАКСИС: WRITELN();

Предназначение: Перемещает Лекция 03 курсор в начало последующей строчки;

ВХОДНЫЕ Характеристики: нет;

ФУНКЦИЯ ВОЗВРАЩАЕТ:

* AX = 0xE0A;

* BX = 7;

03.02.2.3. Реализация на Бейсике
В реализации функций относительного позиционирования курсора на Бейсике вероятны последующий вариант:


^ ФУНКЦИЯ TAB

СИНТАКСИС: TAB( число Лекция 03 )

где число – целая константа либо переменная, определяющая отступ (в знаках) от позиции начала строчки вывода.

Предназначение: Функция сдвигает текстовый курсор в обозначенную позицию вывода на строке.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ: нет.

03.02.2.4. Реализация в Perl и Лекция 03 Python
В языках Perl и Python относительное размещение курсора может быть при помощи «пробельных» управляющих знаков.
Пример 03.009.

# Реализация на Perl

# отступ на семь позиций на лево с внедрением горизонтальной позиции Лекция 03 табуляции


print "\n\tТекст";
Пример 03.010.

# Реализация на Python примера 03.009.

# отступ на семь позиций на лево с внедрением горизонтальной позиции табуляции


print "\n\tТекст";

03.02.2.5. Реализация в Turbo Prolog
В языке Turbo Prolog относительное размещение курсора может Лекция 03 быть при помощи «пробельных» управляющих знаков.
Пример 03.011.

/* Реализация на Prolog примера 03.009. */

/* отступ с внедрением горизонтальной позиции табуляции */


… nl, write( "\tТекст" ), …

03.02.3. Запоминание позиции курсора
Время от времени появляются ситуации, когда нужно оборвать Лекция 03 вывод текста, перевести курсор в другую позицию, вывести либо ввести характеристики программки, а потом продолжить вывод текста со «старого» места.

Реализацию этой последовательности действий можно выполнить последующим образом:

  1. Чтением абсолютной позиции курсора;

  2. Запоминанием Лекция 03 последней позиции курсора в неконтролируемый программером буфер, и потом повторной «вставкой на экран» запомненной позиции курсора.

Последнюю реализацию можно выполнить при помощи последующих escape последовательностей:

Esc[s – сохранение текущей позиции курсора;

Esc[u Лекция 03 – восстановление сохранённых в буфере координат курсора.

Подробнее см. [MS-DOS 6.0, Финогентов I]
Реализация чтения координат курсора на Ассемблере.
Функция 3 прерывания 10H возвращает строчку курсора в DH, а столбец – в DL. На Лекция 03 входе нужно поместить в BH номер странички.


^ ФУНКЦИЯ 3 ПРЕРЫВАНИЯ 10H

Предназначение: Определяет и сохраняет текущую позицию курсора на дисплее монитора.

Характеристики: AH = 3 – номер функции;

BH – номер экранной странички монитора;

^ ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ:

* DH Лекция 03 – текущая строчка курсора;

* DL – текущий столбец курсора.
Пример 03.012.

; --- В секторе данных

CUR_ROW DB ? ; текущая строчка курсора

CUR_COL DB ? ; текущий столбец курсора

; --- в секторе кода

; --- определение позиции курсора

MOV AH, 3 ; номер функции

MOV BH, 0 ; номер экранной странички

INT 10H

; --- Строчка - столбец Лекция 03 DH - DL

^ MOV CUR_ROW, DH

MOV CUR_COL, DL

Смотрите также [Абель, Джордейн]
Реализация чтения координат в Turbo C++

ФУНКЦИЯ WHEREX

ОПИСАНА В: (содержит макет)

СИНТАКСИС: int wherex( void );

Предназначение: Возвращает горизонтальную позицию курсора в окне Лекция 03.

ОПИСАНИЕ: wherex возвращает координату X текущей позиции курсора (снутри текущего текстового окна).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: целое число от 1 до 80.

ПЕРЕНОСИМОСТЬ: Реальна только для IBM PC и совместимых с ним компьютерах. Подобная функция Лекция 03 существует в Turbo Pascal.


^ ФУНКЦИЯ WHEREY

ОПИСАНА В: (содержит макет)

СИНТАКСИС: int wherey( void);

Предназначение: Возвращает вертикальную позицию курсора в окне.

ОПИСАНИЕ: wherey возвращает координату Y текущей позиции курсора (снутри текущего текстового окна Лекция 03).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: wherey возвращает целое число от 1 до 25, время от времени до 43 либо 50.

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


Реализация Лекция 03 чтения координат курсора на C--

^ ФУНКЦИЯ GETXY

СИНТАКСИС: word GETXY ()

Предназначение: Читает позицию курсора на нулевой страничке монитора.

Характеристики ФУНКЦИИ: нет

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ:
Реализация чтения координат в Turbo Prolog
Функция cursor языка Турбо Пролог 2.0 позволяет как записывать, так и считывать текущее значение курсора (см. пример).
Пример Лекция 03 03.013.
/* ex03013.pro */

/* Реализация абсолютного позиционирования курсора средствами спец. функции Турбо Prolog. */


domains

Row, Col = integer


clauses

… cursor( Row, Col ), …

03.03. Резюме
В данной лекции Вы ознакомились с такими «вспомогательными» способностями текстового вывода, как чисткой экрана перед выводом Лекция 03 инфы, и перемещением и установкой курсора на дисплее монитора. Эти функции изредка применяются при написании программ-фильтров, но они способны «моделировать» графический интерфейс при «консольном вводе-выводе» текста. Вот поэтому создатель включил их в Лекция 03 данный курс лекций.

Манипулирование положением курсора нередко просит установки драйвера: ANSI.SYS в операционной системе. В новейших операционных системах он установлен по-умолчанию, но в операционных системах, сделанных до 2001 года, этот Лекция 03 драйвер может быть не установлен. Для его установки пропишите последующую строчку в файле:


CONFIG.SYS:

DEVICEHIGH=C:\WINDOWS\Commands\ANSI.SYS


CONFIG.NT

DEVICEHIGH=%SystemRoot%\System32\ANSI.SYS

Примечание: Файл C:\CONFIG.SYS употребляется Лекция 03 в операционных системах Windows 9x/ME, а файл %SystemRoot%\System32\CONFIG.NT — в операционных системах Windows 2000/XP/Vista/7.

Подробнее см. [MS-DOS 6.0, Финогентов I]
03.04. Вопросы и упражнения. Задание 1. Вариант I Задания 1. Какими Лекция 03 методами можно выполнить чистку всего экрана?
+1. При помощи оператора языка программирования;

+2. При помощи escape-последовательности;

+3. При помощи команды операционной системы.
Вариант II Задания 1. Внедрение каких функций прерывания BIOS 10H приводит к чистке Лекция 03 экрана монитора?
1. Функция 2;

+2. Функция 6;

+3. Функция 9;

+4. Функция 0AH;
Вариант III Задания 1. Какой точкой обозначается начало координат в языке Quick Basic?
1. (0,0);

+2. (1.1);

3. (0,1);
Задание 2. Вариант I Задания 2. Точкой с какими координатами обозначается начало координат на языках Си и Лекция 03 Ассемблер?
+1. (0,0);

2. (1.1);

3. (0,1);
Вариант II Задания 2. Каким эмблемой происходит чистка экрана при вызове функции 9 прерывания BIOS 10H?
1. 00H;

2. 0AH;

3. 0DH;

+4. 20H;
Вариант III Задания 2. Какими методами делается чистка экрана на языке Си Лекция 03 эталона ANSI?
1. C помощью функции textmode;

2. При помощи функции CLS;

+3. При помощи вывода escape последовательности puts( "\x1B[2J" );

4. Не предусмотрена;
Задание 3. Вариант I Задания 3. Какими методами делается чистка экрана на языке Лекция 03 Quick Basic?
1. C помощью функции SCREEN;

+2. При помощи функции CLS;

3. При помощи вывода escape последовательности PRINT "\x1B[2J";

4. Не предусмотрена;
Вариант II Задания 3. Какими методами делается чистка экрана на языках Perl Лекция 03 и Python?
1. C помощью функции SCREEN;

2. При помощи функции CLS;

3. При помощи вывода escape последовательности print "\x1B[2J";

+4. Не предусмотрена;
Вариант III Задания 3. Какие методы позиционирования курсора употребляются в операционных системах с помощью Лекция 03 escape последовательностей?
+1. Абсолютное размещение курсора;

2. Чтение абсолютной позиции курсора;

+3. Относительное размещение курсора;

+4. Запоминание и восстановление позиции курсора;
Задание 4. Вариант I Задания 4. Какие методы позиционирования курсора употребляются в языке Си?
+1. Абсолютное размещение курсора Лекция 03;

+2. Чтение абсолютной позиции курсора;

3. Относительное размещение курсора;

4. Запоминание и восстановление позиции курсора;
Вариант II Задания 4. Для каких целей предназначен курсор?
+1. Он показывает место на дисплее, в которое операторы программки Лекция 03 отправляют собственный вывод;

2. Служит для декорации позиции ввода текста;

+3. Обеспечивает видимую точку отсчёта на дисплее для юзера программки;
Вариант III Задания 4. Каково стандартное разрешение экрана монитора в текстовом режиме?
1. 640х480 пикселей;

2. 40х25 знаков Лекция 03;

+3. 80х25 знаков;

4. 80х50 знаков;
Задание 5. Вариант I Задания 5. Какая функция прерывания 10H устанавливает в языке Ассемблер позицию курсора на дисплее монитора?
+1. Функция 2;

2. Функция 6;

3. Функция 9;

4. Функция 0AH;
Вариант II Задания 5. Какими методами Лекция 03 можно установить курсор в абсолютную позицию (центр экрана) при помощи функций Turbo C?
+1. puts( "\x1B[12;39H" );

+2. gotoxy( 39, 12 );

^ 3. LOCATE 13, 40;

4. cursor( 12, 39 );
Вариант III Задания 5. Какая функция употребляется на языке Turbo Prolog для установки курсора в центр Лекция 03 экрана?
1. puts( "\x1B[12;39H" );

2. gotoxy( 39, 12 );

^ 3. LOCATE 13, 40;

+4. cursor( 12, 39 );
Задание 6. Вариант I Задания 6. Какие управляющие знаки употребляются для управления относительным позиционированием курсора?
1. \0;

+2. \n;

+3. \r;

+4 \t;

5. $;
Вариант II Задания 6. Какая функция употребляется для Лекция 03 чтения абсолютной позиции курсора на языке Ассемблере?
1. Функция 2;

+2. Функция 3;

3. Функция 6;

4. Функция 9;
Вариант III Задания 6. Какая функция на языке Turbo C употребляется для чтения абсолютной позиции курсора?
+1. wherex;

+2. wherey;

3. getxy;
03.05. Г Л О Лекция 03 С С А Р И Й
<>


Свёрстано 06.09.2010 10:16

lekciya-1-poryadok-dejstviya-zakona-ukraini-ob-ohrane-truda-stranica-4.html
lekciya-1-predmet-i-obekti-disciplini-pravovedenie.html
lekciya-1-predmet-politologii-i-opredeleniya-politiki.html