Жанр: Учеба
Техника программирования на турбо-С
A L S T E V E N S
======================================================
--------¬
--¬ --¬ ¦ ----¬ ¦ --¬
--- L-¬ --¬ --¬ ----¬ ¦ L---¬ ------¬ ¦ ¦ L-- L--
L-¬ --- ¦ ¦ ¦ ¦ ¦ --- ¦ --¬ ¦ ¦ --¬ ¦ ¦ ¦ --¬ --¬
¦ L-¬ ¦ L-- ¦ ¦ ¦ ¦ L-- ¦ ¦ L-- ¦ ¦ L---- ¦ L--
L---- L------ L-- L------ L------ L--------
-----------------------------------------------------¬
¦ MEMORY - RESIDENT UTILITIES, SCREEN I / O ¦
¦ AND PROGRAMMING TECHNIQUES ¦
L-----------------------------------------------------
-----------------------------------------------------
MANAGEMENT INFORMATION SOURCE, INC.
-----------------------------------------------------
--------------¬
¦ ¦
¦ M I S : ¦
+-------------+
¦ P R E S S ¦
+-------------+
+ - - - - - - +
+-------------+
+-------------+
¦=============¦
L=============-
--------------------------------------------------------
Ал. Стивенс
"ТЕХНИКА ПРОГРАММИРОВАНИЯ НА ТУРБО СИ"
( c ) перевод на русский язык AcademySoft, 1989.
Предисловие..................................................... 5
Обзор разделов.................................................. 7
Интерактивное программное обеспечение, управляющее изображением. 9
Язык Си........................................................ 14
Краткая история языка Си....................................... 14
Особенности языка Си........................................... 15
Достоинства языка Си........................................... 17
Одобрение языка Си............................................. 18
Рекомендуемая литература по Си ................................ 18
Компилятор Турбо Си ........................................... 20
Два Турбо Си .................................................. 21
Настройка интегрированной среды ............................... 21
Редактор Турбо Си ............................................. 22
Компоновщик Турбо Си .......................................... 23
Утилита построителя задач (Make) в Турбо Си ................... 23
Обнаружение ошибок при компиляции и компоновке ................ 24
Программные средства низкого уровня ........................... 24
Начальная установка ........................................... 25
Модели памяти ................................................. 25
Библиотека исходных модулей ................................... 25
Заключение .................................................... 25
Функции общего назначения ..................................... 26
Исходные модули функций общего назначения ..................... 28
Заключение..................................................... 32
Экранные окна ................................................. 33
Экранное окно ................................................. 33
Архитектура видеопамяти ....................................... 36
"Снег" и обратный ход луча развертки .......................... 39
Заключение .................................................... 41
Библиотека оконных функций .................................... 42
Стековые окна ................................................. 42
Слоеные окна .................................................. 43
Оконные функции ............................................... 46
Листинги оконных функций ...................................... 51
Описание программы: twindow.h ................................. 54
Описание программы: twindow.c ................................. 66
Примеры окон .................................................. 69
Перемещение окна ............................................. 69
Подъем и опускание окон ....................................... 72
Назначение заголовков и изменение цветов окна ................. 74
Сравнение стековых и слоеных окон ............................. 76
Перемещение, подъем, скрытие окон, меню, изменение интенсив. .. 77
Резюме ........................................................ 82
Контекстно-управляемые окна подсказки ......................... 83
Программирование окон подсказки ............................... 84
Текстовый файл окна подсказки ................................. 86
Функции подсказки ............................................. 88
Изменение функциональной клавиши подсказки .................... 88
Изменение функции подсказки ................................... 88
Выключение подсказки .......................................... 89
Исходный листинг: thelp.c ..................................... 89
Описание программы: thelp.c ................................... 91
Пример контекстно-управляемой подсказки ....................... 92
Резюме ........................................................ 94
Использование данных в окнах .................................. 95
Шаблон ввода данных ........................................... 95
Поле ввода данных ............................................. 96
Позиция ....................................................... 96
Атрибуты ...................................................... 96
Буфер ......................................................... 96
Проверка допустимости значений ................................ 96
Help-информация ............................................... 97
Маска вводимых данных ......................................... 97
Приглашения к вводу в поле (Prompts) .......................... 97
Ввод данных ................................................... 98
Функции сбора данных .......................................... 98
Исходный текст: entry.c ....................................... 103
Описание программы: entry.c ................................... 109
Пример: Ввод данных в определенном порядке .................... 112
Резюме ........................................................ 117
Оконный текстовый редактор .................................... 118
Команды тестового редактора ................................... 119
Управление курсором ........................................... 119
Постраничная работа ........................................... 120
Команды работы с блоками текста ............................... 120
Команды редактирования ........................................ 121
Функция, реализующая текстовый редактор ....................... 121
Исходный листинг: editor.c .................................... 122
Описание программы: editor.c .................................. 134
Пример: Использование редактора ............................... 138
Резюме ........................................................ 140
Оконные меню .................................................. 141
Меню .......................................................... 141
Процесс, образующий оконное меню .............................. 142
Функции поддержки меню ........................................ 143
Исходный листинг: tmenu.c ..................................... 144
Описание программы: tmenu.c ................................... 147
Пример оконного меню .......................................... 148
Резюме ........................................................ 151
Резидентные программы ......................................... 154
Прерывания .................................................... 154
Векторы прерывания ............................................ 154
Аппаратные прерывания ......................................... 155
Программные прерывания ........................................ 155
ДОС - однозадачная операционная система ....................... 155
TSR-программы ................................................. 157
Программы обработки прерываний ................................ 158
Резидентные утилиты ........................................... 158
Что может быть резидентным .................................... 159
Построение TSR-программ ....................................... 160
Превращение программы в резидентную ........................... 161
Резидентна ли уже программа? .................................. 161
Захват прерывания ............................................. 162
Величина TSR-программы ........................................ 163
Переключение контекстов ....................................... 165
Стек .......................................................... 165
Program Segment Prefix (PSP) .................................. 166
Дисковый буфер ................................................ 172
Прерывание от клавиатуры (9) .................................. 173
Прерывание от таймера ......................................... 173
Проблема реентерабельности ДОС ................................ 174
Два стека ДОС ................................................. 174
Системный флажок занятости (0х34) ............................. 174
Прерывание DOSOK .............................................. 175
Дисковое прерывание ROM-BIOS.(0х13) ........................... 176
Прерывание Ctrl-Break в ДОС.(0х23) ............................ 177
Выполнение TSR-программы ...................................... 177
Завершение TSR-программы ...................................... 177
Приостановка и возобновление выполнения TSR-программы ......... 179
Выводы ........................................................ 179
Построение резидентных программ ............................... 180
Пример TSR-программы - "часы" ................................. 180
Превращение программы в резидентную ........................... 180
Прерывание по делению на ноль ................................. 181
Выполнение обработчика прерываний от таймера .................. 182
Связывание старого вектора прерывания по таймеру .............. 182
Сохранение и переключение контекста стека ..................... 182
Вычисление времени ............................................ 182
Программы TSR-драйвера ........................................ 185
Действия трех программных модулей ............................. 186
Размер TSR-программы .......................................... 186
Присвоение "горячего ключа" ................................... 186
Сигнатура TSR-программы ....................................... 188
Коммуникационные прерывания ................................... 188
Подготовка к резидентности .................................... 189
Обработчик обращения к диску .................................. 190
Обработчик критических ситуаций ............................... 191
Обработчик клавиатуры ......................................... 191
Обработчик таймера ............................................ 191
Обработчик DOSOK .............................................. 191
Выполнение TSR-программы ...................................... 192
Удаление TSR-программы ........................................ 192
Блоки памяти и управляющие блоки памяти ....................... 193
Исходные тексты: popup.c, resident.c .......................... 193
TSR-программа - приложение .................................... 201
Проверка TSR-программ ......................................... 202
Выводы ........................................................ 203
Предисловие
-----------------------------------------------------------------
Поскольку вы читаете данную книгу, то, вероятно, вы
программируете на языке Си и уже приобрели или собираетесь
приобрести компилятор Турбо Си для своей IBM PC. При чтении от
вас потребуется довольно хорошее знание языка Си, а также DOS -
операционной системы персональных ЭВМ (ПЭВМ) линии IBM PC - и ее
функций. Знание языка ассемблера процессора 8086 и архитектуры
IBM PC желательно, но не обязательно. В книге содержится
множество исходных модулей функций на языке Си, которые помогут
писать программы, работающие с окнами, а также делать ваши
программы резидентными в памяти.
Программы, работающие с окнами, и резидентные в памяти
программные утилиты составляют в настоящее время основное
направление в программировании для IBM PC. По своей природе
персональная ЭВМ является настольной интерактивной (диалоговой)
системой, которая предоставляет пользователю доступ к набору
интерактивных программ. Аппаратура и операционная система
обеспечивают возможность разработки программ, работающих с
окнами и меню, которые появляются на экране по нажатию клавиши.
Большинство пакетов программ, пользующихся в настоящее время
наибольшим спросом у пользователей, применяют хотя бы одно из
этих средств. В данной книге разбираются основы работы с ними и
содержатся исходные тексты функций на языке Си, позволяющие
использовать эти средства в ваших программах. Прочитав эту
книгу и разобрав содержащиеся в ней программы, а также освоив
компилятор Турбо Си и основы программирования на языке Си, вы
будете готовы создавать резидентные программные утилиты,
использующие окна для организации пользовательского интерфейса.
Эта книга содержит сведения о языках программирования, о
развитии программного обеспечения, а также примеры использования
языков программирования для написания интерактивных,
экранно-ориентированных программ для ЭВМ. Не следует думать, что
перед вами очередная книга об IBM PC, но образ этой персональной
ЭВМ постоянно присутствует здесь. Если прежде акроним РС
обозначал определенную ЭВМ, то теперь он обозначает архитектуру
ЭВМ, которая была создана промышленным гигантом и стала
общепризнанной. РС в данной книге не является объектом изучения,
а обозначает некоторый абстрактный объект, который располагается
на вашем столе, работает под управлением MS-DOS и называется РС,
ХТ, АТ или чем-либо совместимым с ними.
В данной книге вы столкнетесь с программами, написанными на
языке Си. Это замечательный язык, и хотя некоторым он не
нравится, но все же большинство программистов его любят. На Си вы
можете создавать программы, которые делают все, что вы пожелаете.
Нет другого такого языка, который бы так же стимулировал к
программированию. Создается впечатление, что остальные языки
программирования воздвигают искусственные препятствия для
творчества, а Си - нет. Использование этого языка позволяет
сократить затраты времени на создание работающих программ. Си
позволяет программировать быстро, эффективно и предсказуемо. Еще
одно преимущество Си заключается в том, что он позволяет
использовать все возможности вашей ЭВМ. Этот язык создан
программистом для использования другими программистами, чего о
других языках программирования сказать нельзя. Кобол был
создан таким, чтобы менеджеры могли разбираться в написанных на
этом языке программах; Бэйсик был создан для непрограммистов;
Фортран - для научных работников; Ада вообще был создан
прямо-таки правительственным комитетом; Пайлот создан для
учителей; Паскаль - для студентов; Лого - для детей; АПЛ - для
марсиан; Форт, Лисп и Пролог - специализированные языки. Один Си
- это язык для программистов.
Турбо Си, о котором идет речь в этой книге, - это пакет,
который создает программную среду для программирования на языке
Си и является первым из компиляторов Си нового поколения. Турбо
Си содержит редактор с возможностью установки его параметров
пользователем, построитель задач, ориентированный на реализацию
программного проекта, "быстрый" компоновщик, а также самый
"быстрый" компилятор Си для РС, которые "погружены" в
интегрированную, оконно-ориентированную программную среду. Турбо
Си также предоставляет возможность работы с библиотекой функций
и расширениями языка Си, что обеспечивается использованием
вспомогательных программ обработки прерываний и других
резидентных в памяти программ. Такое использование законно,
поскольку Borland International - создатель Турбо Си -
является также основным производителем резидентных программных
утилит.
В этой книге содержатся исходные тексты функций, которые вы
можете использовать в своих программах, работающих в режиме
интерактивного взаимодействия с пользователем. Использование
этих функций улучшит пользовательский интерфейс ваших программ.
Они обеспечивают возможности работы с окнами, меню, ввода
данных по установленному шаблону, оконного редактирования
текста, а также создания резидентных программ, которые
вызываются нажатием определенных клавиш.
Кроме описания этих функций в книге излагаются также
аппаратные и программные принципы, которые лежат в основе
создания программ, управляющих выводом изображений и резидентных
программ. Подробно рассматриваются система прерываний,
видеопамять, а также внутренняя организация DOS, включая
множество функций DOS, использование которых необходимо при
создании резидентных программ, но по которым нет документации
или, наоборот, которые распространяются разработчиками и
поставщиками DOS.
Обзор разделов
------------------------------------------------------------------
экранно-ориентированных программных систем, в которых
организация обмена с пользователем так же важна, как и
прикладное назначение программы.
среду.
особенности аппаратной архитектуры РС.
содержит общие сведения об архитектуре видеосистемы и знакомит с
проблемами, возникающими при создании окон в видеопамяти РС.
Посмотри в окно!
Чтобы сохранить великий дар природы — зрение,
врачи рекомендуют читать непрерывно не более 45–50 минут,
а потом делать перерыв для ослабления мышц глаза.
В перерывах между чтением полезны
гимнастические упражнения: переключение зрения с ближней точки на более дальнюю.
с окнами. Эти функции могут применяться в пользовательских
программах для отображения различного рода информации, а также
быть основой для создания меню, редакторов и функций ввода
данных по формату, которые разбираются в последующих разделах.
иллюстрирующих использование библиотеки функций для работы с
окнами.
(Help) и содержит исходные тексты функций, которые позволят
реализовать эту возможность.
формату; управление вводом при этом осуществляется путем
определения набора полей для ввода данных внутри определенного
окна. Существуют функции, которые позволяют реализовать эту
возможность в ваших программах. В качестве примера приводится
программа диалогового ввода данных.
информации, использующую окна. Описываемая здесь программа
представляет собой текстовый редактор общего назначения для ввода
и редактирования текстов свободного формата. Он имеет множество
команд, присущих большим системам текстовой обработки и
обеспечивающих автоматическое форматирование текста,
автоматический перенос слов, выделение и перемещение фрагментов и
т.д. Приводится также текст программы интерактивной записной
книжки, в которой используется функция редактирования текста.
позволяющих создавать один из типов меню, который можно встретить
в серьезных программах: строковое меню в заголовке окна, выбор
каждого из элементов которого вызывает возникновение на экране
нового меню. Для иллюстрации использования такого типа меню
программные модули объединены в единую программу, которая
позволяет с помощью меню выбрать нужный модуль.
программ. По этой проблеме дается исчерпывающая информация.
Приводятся также разъяснения по тем функциям DOS, по которым не
поставляется документация: какие из них можно использовать, а
каких следует избегать и почему. Освещается проблема
реентерабельности DOS и способы ее решения. Упоминается также
проблема параллельно выполняющихся резидентных утилит. В
заключение обсуждаются свойства "однозадачности" DOS и
объясняется, почему не может быть обеспечена надежная защита
резидентных в памяти программ.
Турбо Си для создания резидентных программных утилит. Первый
пример представляет резидентную в памяти утилиту обработки
прерываний по таймеру, которая отображает текущее время в правом
верхнем углу экрана. Также приведена управляющая программа
общего назначения, которая позволит Вам разрабатывать утилиты,
тестировать их в качестве нерезидентных программ в среде Турбо
Си, а затем компоновать их в рабочие резидентные модули. Для
иллюстрации этого процесса программа управления окнами и меню
из главы 10 преобразуется в резидентную программу, которая
выполняется при нажатии "горячей клавиши".
Подводя итог, можно сказать, что данная книга содержит
разъяснения и исходные тексты программ, касающиеся двух наиболее
популярных свойств программного обеспечения для РС -
использования окон и резидентности программ. Пользуясь этими
инструментами и полными возможностями пакета Турбо Си, вы сможете
повысить свою производительность в программировании, а также
сделать свои программы более полезными и "дружественными" для
пользователя.
Сентябрь, 1987
Меррит Айленд, Флорида
-------
Интерактивное программное обеспечение,
управляющее изображением на экране
------------------------------------------------------------------
Большинство программ для PC, пользующихся в настоящее время
наибольшим спросом, рассчитаны на интерактивный режим работы, при
котором пользователь обменивается с ЭВМ сообщениями в виде
последовательностей нажатий клавиш на клавиатуре и символов на
экране дисплея. При этом программы вывода сообщений пользователю
широко используют возможности видеотерминала РС. Пользователь
реагирует на это набором на клавиатуре соответствующих слов и
чисел. Такой способ общения с ЭВМ стал естественным для нового
поколения пользователей. Он подразумевает развитие стиля
отображения и ввода информации в ЭВМ, который называется
"смотреть и чувствовать" и постоянно используется и развивается
программистами. Французский язык, Кобол, код Морзе являются
средствами общения, для общения с ЭВМ также нужен язык. Можно
считать, что каждая новая программа является новым языком или
диалектом уже существующего. И поскольку в данном случае язык
служит для взаимодействия с ЭВМ, то повышение его эффективности
способствует более полному соответствию намерений пользователя и
действий ЭВМ.
Эти языки, как правило, не разрабатываются специально, а
возникают сами по себе в процессе создания программы. Программист
озабочен обычно другими проблемами: средой программирования,
структурами данных, функциональными алгоритмами, интерфейсом
пользователя. После завершения разработки программы программист
вводит в нее запросы к пользователю и сообщения об ошибках.
Качество пользовательского интерфейса программы зависит от воли
программиста и наличия программных средств, которые помогают
разрабатывать пользовательский интерфейс.
Программисты могут использовать множество различных
технологий для организации обмена между ПЭВМ и пользователем.
Каждая из этих технологий имеет свои области применения, в
которых она более предпочтительна, чем другие. Но все эт
...Поділитися у соцмережах