Главная страница
Навигация по странице:

  • ОТЧЕТ по практической работе 3по дисциплине «Архитектура

  • Отчёт по лабораторной работе. отчёт 3 лаба. Отчет по практической работе 3 по дисциплине Архитектура эвм


    Скачать 87.87 Kb.
    НазваниеОтчет по практической работе 3 по дисциплине Архитектура эвм
    АнкорОтчёт по лабораторной работе
    Дата20.01.2023
    Размер87.87 Kb.
    Формат файлаdocx
    Имя файлаотчёт 3 лаба.docx
    ТипОтчет
    #896009

    Федеральное государственное бюджетное образовательное учреждение высшего образования

    «Сибирский государственный университет телекоммуникаций и информатики» (СибГУТИ)


    Кафедра вычислительных систем


    ОТЧЕТ

    по практической работе 3
    по дисциплине «Архитектура ЭВМ»


    Выполнил: студент гр. ИП-017

    «07» февраля 2022 г.






    /Горбань Д.В/


    Проверил:

    преподаватель Кафедры ВС

    «__» февраля 2022 г.




    /Трусов К./


    Оценка «»


    Новосибирск 2022

    Цельработы

    Изучить принципы работы терминалов ЭВМ в текстовом режиме. Понять, каким образом ко- дируется текстовая информация и как с помощью неѐ можно управлять работой терминалов. Разра- ботать библиотеку функций myTerm, включающую базовые функции по управлению текстовым терминалом (очистка экрана, позиционирование курсора, управления цветом). Начать разрабатывать консоль управления Simple Computer (вывести на экран текстовую часть).
    Заданиеналабораторнуюработу

    1. Прочитайте главу 5 практикума по курсу «Организация ЭВМ и систем». Обратите особое внимание на параграфы 5.4 и 5.5. Изучите страницу man для команды infocmp, базы terminfo, функции ioctl.

    2. Откройте текстовый терминал и запустите оболочку bash (оболочка запускается автоматиче- ски). Используя команду infocmp, определите перепишите их себе) escape- последовательности для терминала, выполняющие следующие действия:

      • очистка экрана и перемещение курсора в левый верхний угол (clear_screen);

      • перемещение курсора в заданную позицию экрана (cursor_address);

      • задание цвета последующих выводимых символов (set_a_background);

      • определение цвета фона для последующих выводимых символов (set_a_foreground);

      • скрытие и восстановление курсора (cursor_invisible, cursor_visible).

    3. Используя оболочку bash, команду echo –e и скрипт2, проверьте работу полученных последо- вательностей. Символ escape задается как \033 или \E. Например – echo -e "\033[m". Для про- верки сформируйте последовательность escape-команд, выполняющую следующие действия:

      • очищает экран;

      • выводит в пятой строке, начиная с 10 символа Ваше имя красными буквами на черном фоне;

      • в шестой строке, начиная с 8 символа Вашу группу зеленым цветом на белом фоне;

      • перемещает курсор в 10 строку, 1 символ и возвращает настройки цвета в значения «по умолчанию».

    4. Разработать следующие функции:

      • 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 в случае ошибки. В каче- стве терминала используется стандартный поток вывода.

    1. Оформите разработанные функции как статическую библиотеку myTerm. Подготовьте заго- ловочный файл для неѐ.

    1. Команды infocpm с параметром -1L:

    Находим нужные нам команды, а именно:

      • очистка экрана и перемещение курсора в левый верхний угол (clear_screen);

      • перемещение курсора в заданную позицию экрана (cursor_address);

      • задание цвета последующих выводимых символов (set_a_background);

      • определение цвета фона для последующих выводимых символов (set_a_foreground);

      • скрытие и восстановление курсора (cursor_invisible, cursor_visible). Выписываем escape-последовательности этих команд в текстовый файл.





    1. Скрипт для следующей последовательности команд:

      • очищает экран;

      • выводит в пятой строке, начиная с 10 символа Ваше имя красными буквами на черномфоне;

      • в шестой строке, начиная с 8 символа Вашу группу зеленым цветом на белом фоне;

      • перемещает курсор в 10 строку, 1 символ и возвращает настройки цвета в значения «поумолчанию».



    С помощью команды bash infocmp.txt запускаем скрипт. Результат работы:





    1. Библиотека 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





    написать администратору сайта