Файл: Отчет по практической работе 3 по дисциплине Архитектура эвм.docx
Добавлен: 29.04.2024
Просмотров: 12
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Сибирский государственный университет телекоммуникаций и информатики» (СибГУТИ)
Кафедра вычислительных систем
ОТЧЕТ
по практической работе 3
по дисциплине «Архитектура ЭВМ»
Выполнил: студент гр. ИП-017 «07» февраля 2022 г. | | /Горбань Д.В/ |
Проверил: преподаватель Кафедры ВС «__» февраля 2022 г. | | /Трусов К./ |
Оценка «»
Новосибирск 2022
Цельработы
Изучить принципы работы терминалов ЭВМ в текстовом режиме. Понять, каким образом ко- дируется текстовая информация и как с помощью неѐ можно управлять работой терминалов. Разра- ботать библиотеку функций myTerm, включающую базовые функции по управлению текстовым терминалом (очистка экрана, позиционирование курсора, управления цветом). Начать разрабатывать консоль управления Simple Computer (вывести на экран текстовую часть).
Заданиеналабораторнуюработу
-
Прочитайте главу 5 практикума по курсу «Организация ЭВМ и систем». Обратите особое внимание на параграфы 5.4 и 5.5. Изучите страницу man для команды infocmp, базы terminfo, функции ioctl. -
Откройте текстовый терминал и запустите оболочку bash (оболочка запускается автоматиче- ски). Используя команду infocmp, определите (и перепишите их себе) escape- последовательности для терминала, выполняющие следующие действия:
-
очистка экрана и перемещение курсора в левый верхний угол (clear_screen); -
перемещение курсора в заданную позицию экрана (cursor_address); -
задание цвета последующих выводимых символов (set_a_background); -
определение цвета фона для последующих выводимых символов (set_a_foreground); -
скрытие и восстановление курсора (cursor_invisible, cursor_visible).
Используя оболочку bash, команду echo –e и скрипт2, проверьте работу полученных последо- вательностей. Символ escape задается как \033 или \E. Например – echo -e "\033[m". Для про- верки сформируйте последовательность escape-команд, выполняющую следующие действия:
-
очищает экран; -
выводит в пятой строке, начиная с 10 символа Ваше имя красными буквами на черном фоне; -
в шестой строке, начиная с 8 символа Вашу группу зеленым цветом на белом фоне; -
перемещает курсор в 10 строку, 1 символ и возвращает настройки цвета в значения «по умолчанию».
Разработать следующие функции:
-
int mt_clrscr (void)- производит очистку и перемещение курсора в левый верх- ний угол экрана; -
int mt_gotoXY (int, int) - перемещает курсор в указанную позицию. Первый параметр номер строки, второй - номер столбца; -
int mt_getscreensize (int * rows, int * cols) - определяет размер экрана терминала (количество строк и столбцов); -
int mt_setfgcolor (enum colors) - устанавливает цвет последующих выводимых символов. В качестве параметра передаѐтся константа из созданного Вами перечисли- мого типа colors, описывающего цвета терминала; -
int mt_setbgcolor (enum colors) - устанавливает цвет фона последующих вы- водимых символов. В качестве параметра передаѐтся константа из созданного Вами перечислимого типа colors, описывающего цвета терминала.
Все функции возвращают 0 в случае успешного выполнения и -1 в случае ошибки. В каче- стве терминала используется стандартный поток вывода.
-
Оформите разработанные функции как статическую библиотеку myTerm. Подготовьте заго- ловочный файл для неѐ.
-
Команды infocpm с параметром -1L:
Находим нужные нам команды, а именно:
-
очистка экрана и перемещение курсора в левый верхний угол (clear_screen); -
перемещение курсора в заданную позицию экрана (cursor_address); -
задание цвета последующих выводимых символов (set_a_background); -
определение цвета фона для последующих выводимых символов (set_a_foreground); -
скрытие и восстановление курсора (cursor_invisible, cursor_visible). Выписываем escape-последовательности этих команд в текстовый файл.
-
Скрипт для следующей последовательности команд:
-
очищает экран; -
выводит в пятой строке, начиная с 10 символа Ваше имя красными буквами на черномфоне; -
в шестой строке, начиная с 8 символа Вашу группу зеленым цветом на белом фоне; -
перемещает курсор в 10 строку, 1 символ и возвращает настройки цвета в значения «поумолчанию».
С помощью команды bash infocmp.txt запускаем скрипт. Результат работы:
-
Библиотека myTerm.
В качестве терминала используются стандартный поток вывода.
int mt_clrscr()
{
printf("\\E[H\\E[2J\n");
}
int mt_clrscr (void)- производит очистку и перемещение курсора в левый верх- ний угол экрана;
int mt_gotoXY(int x, int y)
{
int rows, cols; mt_getscreensize(&rows, &cols);
if (x < rows || y < cols || x > rows || y > cols)
{
return -1;
}
else
{
printf("\\E[%d;%dH\n", x, y); return 0;
}
}
int mt_gotoXY (int, int) - перемещает курсор в указанную позицию. Первый параметр номер строки, второй - номер столбца. Если указанная позиция, меньше или больше размера консоли, то функция прекращает свою работу ошибкой и возвращает - 1.
Размер экрана проверяется с помощью функции mt_getscreensize(int *rows, int *cols).
int mt_getscreensize(int *rows, int *cols)
{
struct winsize ws;
int mt_getscreensize (int * rows, int * cols) - определяет размер экрана терминала (количество строк и столбцов). Размер заносится во встроенную структуру winsize.
enum colors { BLACK, RED, GREEN, YELLOW, BLUE, PURPLE, CYAN, WHITE, DEFAULT
};
int mt_setfgcolor(enum colors color)
{
switch (color)
{
case BLACK:
printf("\\E[30m\n"); break;
case RED:
printf("\\E[31m\n"); break;
case GREEN:
printf("\\E[32m\n"); break;
case YELLOW:
printf("\\E[33m\n"); break;
case BLUE:
printf("\\E[34m\n"); break;
int mt_setfgcolor (enum colors) - устанавливает цвет последующих выводимых символов. В качестве параметра передаѐтся константа из созданного Вами перечисли- мого типа colors, описывающего цвета терминала. С помощью оператора switch() выбирается нужный цвет.
int mt_setbgcolor (enum colors) - устанавливает цвет фона последующих вы-
int mt_setbgcolor(enum colors color)
{
switch (color)
{
case BLACK:
printf("\\E[40m\n"); break;
case RED:
printf("\\E[41m\n"); break;
case GREEN:
printf("\\E[42m\n"); break;
case YELLOW:
printf("\\E[43m\n"); break;
case BLUE:
printf("\\E[44m\n"); break;
case PURPLE:
printf("\\E[45m\n"); break;
case CYAN:
printf("\\E[46m\n"); break;
case WHITE:
printf("\\E[47m\n"); break;
case DEFAULT:
printf("\\E[49m\n"); return -1;
}
водимых символов. В качестве параметра передаѐтся константа из созданного Вами перечислимого типа colors, описывающего цвета терминала.
Исходный код
myTerm.c
return -1;
}
int mt_setfgcolor(enum colors color)
{
switch (color)
{
case BLACK:
printf("\\E[30m\n");
break; case RED:
printf("\\E[31m\n");
break; case GREEN:
printf("\\E[32m\n");
break; case YELLOW:
printf("\\E[33m\n");
break; case BLUE:
printf("\\E[34m\n");
break; case PURPLE:
printf("\\E[35m\n");
break; case CYAN:
printf("\\E[36m\n");
break; case WHITE:
printf("\\E[37m\n");
break; case DEFAULT:
printf("\\E[39m\n");
default:
return -1;
}
return 0;
}
int mt_setbgcolor(enum colors color)
{
switch (color)
{
case BLACK:
printf("\\E[40m\n");
break; case RED:
printf("\\E[41m\n");
break; case GREEN:
printf("\\E[42m\n");
break; case YELLOW:
printf("\\E[43m\n");
break; case BLUE:
printf("\\E[44m\n");
break; case PURPLE:
myTerm.h
Makefile