Чтение онлайн

на главную

Жанры

Технологии программирования

Костерин В В

Шрифт:

MAXROWS = 100;

MINCOLWIDTH = 3; {Минимальная ширина столбца}

MAXCOLWIDTH = 77; {Максимальная ширина столбца}

….

— блок описания цветов всех полей экрана, модификация констант которого позволяет оперативно изменять цвета;

— основные константы, мнемоника имен которых облегчает восприятие текстов программы

HIGHLIGHT = True; {Подсвеченная текущая клетка}

NOHIGHLIGHT = False; {Неподсвеченная клетка}

{Атрибут содержимого клетки}

ТХТ = 0;

VALUE = 1;

FORMULA = 2;

….

{Разрешенные буквы}

LETTERS: set of Char = ['A'..'Z', 'a'..'z'];

— коды управляющих клавиш клавиатуры.

Следует отметить, что приведены даже коды неиспользуемых в программе управляющих клавиш клавиатуры. Это соответствует факту копирования данных кодов из кода какой-то другой разработки.

Далее следуют описания

типа информации содержимого табличной клетки и типа указателя на клетку:

type

CellRec = record

Error: Boolean;

case Attrib: Byte of

TXT: (T: IString);

VALUE: (Value: Real);

FORMULA: (Fvalue: Real;

Formula: IString);

end;

CellPtr = ^CellRec; {Указатель на клетку}

Данный тип организован так, что клетка всегда может содержать признак ошибки расчетов Error и размещать три варианта информации: текст, значение и формулу.

Далее описаны основные глобальные переменные. Описания начинаются с определения двухмерного, постоянно находящегося в памяти массива Cell указателя на клетки таблицы. Это позволяет не расходовать память на пустые клетки. Память под информацию клетки выделяется динамически в количестве, строго соответствующем информации клетки. Без использования динамически выделяемой памяти было бы невозможно разместить информацию клеток таблицы в 640К памяти машин того времени.

MAXCOLS*MAXROWS*[SizeOf(Istring)+SizeOf(Extened)] = 100*100*[80+10] = 900K

Далее следуют описание переменной, являющейся указателем на текущую клетку таблицы, описание массива форматов клеток и переменных позиционирования информации на экране.

Cell: array [1..MAXCOLS, 1..MAXROWS] of CellPtr;

CurCell: CellPtr; {Указатель на текущую клетку}

Format: array [1..MAXCOLS, 1..MAXROWS] of Byte;

LeftCol, RightCol, TopRow, BottomRow,

{Позиционирование}

CurCol, CurRow, LastCol, LastRow: Word;

….

Следует отметить, что выделение отдельного массива форматов информации клеток является не оправданным. Практичнее ввести байт информации формата клетки в тип CellRec.

Сравните этот проект структуры данных с проектом структуры данных электронной таблицы, представленной в гл. 3.

Для составления оставшейся проектной документации выполним трассировку программы. После двойного нажатия клавиши <F7> начинает исполняться настроечный код, содержащийся в файлах *.TPU, и далее начинают выполняться операторы основной программы program Mcalc, находящейся в файле mcalc.pas.

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

HeapError:= @HeapFunc;

В файле 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 осуществляется ожидание нажатия пользователем любой клавиши.

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6