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

на главную - закладки

Жанры

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

Костерин В В

Шрифт:

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

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

Измена. Ребёнок от бывшего мужа

Стар Дана
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Ребёнок от бывшего мужа

Отборная бабушка

Мягкова Нинель
Фантастика:
фэнтези
юмористическая фантастика
7.74
рейтинг книги
Отборная бабушка

Мимик нового Мира 3

Северный Лис
2. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 3

Адский пекарь

Дрейк Сириус
1. Дорогой пекарь!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Адский пекарь

Я еще не князь. Книга XIV

Дрейк Сириус
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще не князь. Книга XIV

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Наследница Драконов

Суббота Светлана
2. Наследница Драконов
Любовные романы:
современные любовные романы
любовно-фантастические романы
6.81
рейтинг книги
Наследница Драконов

Ретроградный меркурий

Рам Янка
4. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ретроградный меркурий