Костерин В В
Шрифт:
В результате исследований была выявлена схема иерархии модулей программы, изображенная на рис. 7.3–7.5. Расшифровка обозначений схемы иерархии представлена в табл. 7.1.
Рис. 7.3. Фрагмент схемы иерархии основных модулей программы
Рис. 7.4. Схема иерархии модуля RedrawScreen
Рис. 7.5. Сокращенная схема иерархии модуля Run
Таблица 7.1
Расшифровка обозначений схемы иерархии
Имя модуля | Файл | Назначение модуля |
Act | Mclib | Обрабатывает информацию введенной строки, занося ее в клетку |
CenterColString | Mcutil | Рассчитывает X координату центрируемой в поле вывода строки |
ChangeAutoCalc | Mclib | Устанавливает автоматический и ручной режимы рекалькуляции таблицы |
ChangeFormDisplay | Mclib | Устанавливает режим видимости значений формул или текста формул |
ClearInput | Mcdisplay | Очищает на экране поле строки ввода |
ClrScr | Crt | Очищает информацию в окне экрана |
DisplayCell | Mclib | Выводит на экран информацию клетки |
DisplayScreen | Mclib | Отображает на экране внутреннюю информацию таблицы |
EditCell | Mcommand | Осуществляет редактирование содержимого клетки |
EditString | Mcinput | Редактор текстовой строки |
EgaInstalled | Mcdisplay | Функция, определяющая наличие видеокарты EGA |
FillChar | Dos | Присваивает элементам массива значение символа |
GetCursor | Mcdisplay | Считывает толщину курсора в переменную |
GetInput | Mcinput | Получив первый введенный символ, продолжает ввод информации клетки |
GetKey | Mcinput | Формирует слово расширенного кода клавиши |
GetSetCursor | Mcdisplay | Считывает толщину курсора в переменную и устанавливает новую толщину курсора |
GotoXY | Mcdisplay | Перемещает курсор в соответствии с заданными координатами дисплея |
InitColorTable | Mcdisplay | Инициализирует массив пересчета цветов для монохромного монитора |
InitDisplay | Mcdisplay | Инициализирует видеокарту на работу в режиме 80-25 |
InitVars | Mcutil | Инициализирует значения основных переменных программы |
Intr | Dos | Вызывает прерывание MS DOS |
LoadSheet | Mcommand | Загружает информацию таблицы из файла |
MainMenu | Mcommand | Реализует выбор тем меню программы |
Mcalc | Mcalc | Главная программа |
ParamCount | Dos | Счетчик полей командной строки запуска программы Mcalc |
ParamStr | Dos | Возвращает значения заданного поля командной строки запуска программы Mcalc |
PrintCol | Mcdisplay | Выводит значение координаты колонки таблицы |
PrintFreeMem | Mcdisplay | Выводит на экран значение остатка свободной памяти |
PrintRow | Mcdisplay | Выводит значение координаты строки таблицы |
ReadKey | Mcinput | Считывает короткий код одной нажатой клавиши |
Recalc | Mclib | Осуществляет перерасчет значений формул клеток таблицы |
RedrawScreen | Mclib | Отображает на экране всю информацию таблицы |
Run | Mcalc | Главный цикл программы |
Scroll | Mcdisplay | Прокручивает информацию экрана в указанном направлении; устанавливает цвет фона освободившейся части экрана |
SetBottomRow | Mcdisplay | Выводит на экран столбец с номерами строк таблицы |
SetColor | Mcdisplay | Устанавливает цвет вывода строк на экран |
SetCursor | Mcdisplay | Устанавливает заданную толщину курсора |
SetRightCol | Mcdisplay | Выводит на экран строку с наименованиями столбцов таблицы |
ShowCellType | Mcdisplay | Выводит на экран надпись о типе текущей клетки таблицы |
TextMode | Dos | Переводит экран в указанный текстовый режим |
Window | Crt | Определяет окно на экране дисплея |
Write | – | Оператор вывода языка Pascal |
WriteXY | Mcdisplay | Осуществляет вывод заданного числа символов заданной строки по заданным координатам дисплея |
Рассмотрим функциональное описание основного ядра программы. В файле mcutil.pas исполняется рудиментарный, оставшийся от прежних разработок код:
В файле mcdisplay.pas последовательно выполняются подпрограммы: InitDisplay, GetSetCursor, Window, EGAInsalled.
Процедура InitDisplay инициализирует видеокарту на работу в режиме 80 25 при помощи вызова прерывания 10h и вызовом процедуры InitColorTable инициализирует массив пересчета цветов для монохромного монитора. Последний массив используется при вызовах процедуры SetColor.
Процедура GetSetCursor при помощи процедуры GetCursor считывает толщину курсора в переменную OldCursor и при помощи процедуры SetCursor устанавливает новую толщину курсора (NOCURSOR).
Процедура Window определяет окно на экране дисплея для размещения информации всей таблицы. Далее начинает выполняться код главной программы Mcalc.
Присваиванием CheckBreak:= False запрещается использование клавиши <Ctrl+Break> немедленного завершения программы.
Вывод начальной заставки осуществляется следующими вызовами подпрограмм. Процедурами SetColor и ClrScr производится очистка окна программы. Двойным вызовом процедур SetColor и WriteXY выводятся две строки начальной заставки. Несмотря на отсутствие курсора, отрабатывается рудиментарный вызов "сокрытия" курсора GotoXY(80,25). При помощи функции GetKey осуществляется ожидание нажатия пользователем любой клавиши.
Процедурами SetColor и ClrScr производится очистка окна программы.
Вызовом процедуры InitVars инициализируются значения основных переменных программы. Массивы инициализируются значениями по умолчанию вызова процедуры FillChar.
Присваиванием Changed:= False указывается факт неизменности информации клеток таблицы после момента инициализации переменных для запрещения срабатывания автосохранения.
Вызовом процедуры RedrawScreen производится отображение на экране всей информации таблицы.
Если значение ParamCount = 1, то в командной строке MS DOS вызова программы было указано имя файла таблицы. В этом случае выполняется процедура LoadSheet, которая загружает информацию таблицы из файла с именем файла, полученном при помощи вызова функции ParamStr.
Наконец, отрабатывает "лишний" вызов Clearlnput, который дублируется в начале последующей процедуры Run, содержащей главный цикл программы.
При завершении выполнения программы последовательно производится установка цвета экрана, вызовом TextMode переводится экран в текстовый режим, запомненный в переменной OldMode, и, наконец, вызовом SetCursor восстанавливается толщина курсора, запомненная в переменной OldCursor.
Работа процедуры RedrawScreen заключается в последовательном выводе на экран информации:
• процедурой SetRightCol выводится на экран строка с наименованиями столбцов таблицы;
• процедурой SetBottomRow выводится на экран колонка с номерами строк таблицы;
• процедурами GotoXY и Write выводятся надписи в верхней строке экрана, хотя имеется более удобная процедура WriteXY;
• выводится число остатка байт памяти;
• процедурой DisplayScreen отображается на экране внутренняя информация таблицы.
Внешний вид программы Mcalc приведен на рис. 7.6.
Работа процедуры Run начинается с установления переменной главного цикла Stop:= False и выполнения процедуры Clearlnput. Главный цикл программы выполняется до изменения значения переменной Stop на True. Такое изменение возможно лишь при выборе пользователем темы меню Quit — завершение работы с программой.
Внутри главного цикла последовательно выполняются следующие действия:
— при помощи процедуры DisplayCell выводится на экран подсвеченная клеточным курсором текущая клетка (клетка А1 на рис. 7.6);