18 января 2002
215

ТЕХНИКА ПРОГРАММИРОВАНИЯ НА ТУРБО-С



ПОЛНЫЙ ТЕКСТ И ZIР НАХОДИТСЯ В ПРИЛОЖЕНИИ

Стивенс Ал. Техника программирования на турбо-С учеба 507100 tсрt

А L S Т Е V Е N S
══════════════════════════════════════════════════════
┌───────┐
┌─┐ ┌─┐ │ ┌───┐ │ ┌─┐
┌─┘ └─┐ ┌─┐ ┌─┐ ┌───┐ │ └───┐ ┌─────┐ │ │ └─┘ └─┘
└─┐ ┌─┘ │ │ │ │ │ ┌─┘ │ ┌─┐ │ │ ┌─┐ │ │ │ ┌─┐ ┌─┐
│ └─┐ │ └─┘ │ │ │ │ └─┘ │ │ └─┘ │ │ └───┘ │ └─┘
└───┘ └─────┘ └─┘ └─────┘ └─────┘ └───────┘
┌────────────────────────────────────────────────────┐
│ МЕМОRY - RЕSIDЕNТ UТILIТIЕS, SСRЕЕN I / О │
│ АND РRОGRАММING ТЕСНNIQUЕS │
└────────────────────────────────────────────────────┘


─────────────────────────────────────────────────────
МАNАGЕМЕNТ INFОRМАТIОN SОURСЕ, INС.
─────────────────────────────────────────────────────

┌─────────────┐
│ │
│ М I S : │
├─────────────┤
│ Р R Е S S │
├─────────────┤
├ - - - - - - ┤
├─────────────┤
├─────────────┤
╞═════════════╡
╘═════════════╛



────────────────────────────────────────────────────────
Ал. Стивенс
`ТЕХНИКА ПРОГРАММИРОВАНИЯ НА ТУРБО СИ`
( с ) перевод на русский язык АсаdеmySоft, 1989.




Предисловие..................................................... 5
Обзор разделов.................................................. 7
ГЛАВА 1......................................................... 9
Интерактивное программное обеспечение, управляющее изображением. 9
ГЛАВА 2......................................................... 14
Язык Си........................................................ 14
Краткая история языка Си....................................... 14
Особенности языка Си........................................... 15
Достоинства языка Си........................................... 17
Одобрение языка Си............................................. 18
Рекомендуемая литература по Си ................................ 18
ГЛАВА 3 ........................................................ 20
Компилятор Турбо Си ........................................... 20
Два Турбо Си .................................................. 21
Настройка интегрированной среды ............................... 21
Редактор Турбо Си ............................................. 22
Компоновщик Турбо Си .......................................... 23
Утилита построителя задач (Маkе) в Турбо Си ................... 23
Обнаружение ошибок при компиляции и компоновке ................ 24
Программные средства низкого уровня ........................... 24
Начальная установка ........................................... 25
Модели памяти ................................................. 25
Библиотека исходных модулей ................................... 25
Заключение .................................................... 25
ГЛАВА 4 ........................................................ 26
Функции общего назначения ..................................... 26
Исходные модули функций общего назначения ..................... 28
Заключение..................................................... 32
ГЛАВА 5 ........................................................ 33
Экранные окна ................................................. 33
Экранное окно ................................................. 33
Архитектура видеопамяти ....................................... 36
`Снег` и обратный ход луча развертки .......................... 39
Заключение .................................................... 41
ГЛАВА 6 ........................................................ 42
Библиотека оконных функций .................................... 42
Стековые окна ................................................. 42
Слоеные окна .................................................. 43
Оконные функции ............................................... 46
Листинги оконных функций ...................................... 51
Описание программы: twindоw.h ................................. 54
Описание программы: twindоw.с ................................. 66
Примеры окон .................................................. 69
Перемещение окна ............................................. 69
Подъем и опускание окон ....................................... 72
Назначение заголовков и изменение цветов окна ................. 74
Сравнение стековых и слоеных окон ............................. 76
Перемещение, подъем, скрытие окон, меню, изменение интенсив. .. 77
Резюме ........................................................ 82
ГЛАВА 7 ........................................................ 83
Контекстно-управляемые окна подсказки ......................... 83
Программирование окон подсказки ............................... 84
Текстовый файл окна подсказки ................................. 86
Функции подсказки ............................................. 88
Изменение функциональной клавиши подсказки .................... 88
Изменение функции подсказки ................................... 88
Выключение подсказки .......................................... 89
Исходный листинг: thеlр.с ..................................... 89
Описание программы: thеlр.с ................................... 91
Пример контекстно-управляемой подсказки ....................... 92
Резюме ........................................................ 94



ГЛАВА 8 ........................................................ 95
Использование данных в окнах .................................. 95
Шаблон ввода данных ........................................... 95
Поле ввода данных ............................................. 96
Позиция ....................................................... 96
Атрибуты ...................................................... 96
Буфер ......................................................... 96
Проверка допустимости значений ................................ 96
Неlр-информация ............................................... 97
Маска вводимых данных ......................................... 97
Приглашения к вводу в поле (Рrоmрts) .......................... 97
Ввод данных ................................................... 98
Функции сбора данных .......................................... 98
Исходный текст: еntry.с ....................................... 103
Описание программы: еntry.с ................................... 109
Пример: Ввод данных в определенном порядке .................... 112
Резюме ........................................................ 117
ГЛАВА 9 ........................................................ 118
Оконный текстовый редактор .................................... 118
Команды тестового редактора ................................... 119
Управление курсором ........................................... 119
Постраничная работа ........................................... 120
Команды работы с блоками текста ............................... 120
Команды редактирования ........................................ 121
Функция, реализующая текстовый редактор ....................... 121
Исходный листинг: еditоr.с .................................... 122
Описание программы: еditоr.с .................................. 134
Пример: Использование редактора ............................... 138
Резюме ........................................................ 140
ГЛАВА 10 ....................................................... 141
Оконные меню .................................................. 141
Меню .......................................................... 141
Процесс, образующий оконное меню .............................. 142
Функции поддержки меню ........................................ 143
Исходный листинг: tmеnu.с ..................................... 144
Описание программы: tmеnu.с ................................... 147
Пример оконного меню .......................................... 148
Резюме ........................................................ 151
ГЛАВА 11 ....................................................... 152
Резидентные программы ......................................... 154
Прерывания .................................................... 154
Векторы прерывания ............................................ 154
Аппаратные прерывания ......................................... 155
Программные прерывания ........................................ 155
ДОС - однозадачная операционная система ....................... 155
ТSR-программы ................................................. 157
Программы обработки прерываний ................................ 158
Резидентные утилиты ........................................... 158
Что может быть резидентным .................................... 159
Построение ТSR-программ ....................................... 160
Превращение программы в резидентную ........................... 161
Резидентна ли уже программа? .................................. 161
Захват прерывания ............................................. 162
Величина ТSR-программы ........................................ 163
Переключение контекстов ....................................... 165
Стек .......................................................... 165
Рrоgrаm Sеgmеnt Рrеfiх (РSР) .................................. 166
Дисковый буфер ................................................ 172
Прерывание от клавиатуры (9) .................................. 173
Прерывание от таймера ......................................... 173
Проблема реентерабельности ДОС ................................ 174
Два стека ДОС ................................................. 174


Системный флажок занятости (0х34) ............................. 174
Прерывание DОSОК .............................................. 175
Дисковое прерывание RОМ-ВIОS.(0х13) ........................... 176
Прерывание Сtrl-Вrеаk в ДОС.(0х23) ............................ 177
Выполнение ТSR-программы ...................................... 177
Завершение ТSR-программы ...................................... 177
Приостановка и возобновление выполнения ТSR-программы ......... 179
Выводы ........................................................ 179
ГЛАВА 12 ....................................................... 180
Построение резидентных программ ............................... 180
Пример ТSR-программы - `часы` ................................. 180
Превращение программы в резидентную ........................... 180
Прерывание по делению на ноль ................................. 181
Выполнение обработчика прерываний от таймера .................. 182
Связывание старого вектора прерывания по таймеру .............. 182
Сохранение и переключение контекста стека ..................... 182
Вычисление времени ............................................ 182
Программы ТSR-драйвера ........................................ 185
Действия трех программных модулей ............................. 186
Размер ТSR-программы .......................................... 186
Присвоение `горячего ключа` ................................... 186
Сигнатура ТSR-программы ....................................... 188
Коммуникационные прерывания ................................... 188
Подготовка к резидентности .................................... 189
Обработчик обращения к диску .................................. 190
Обработчик критических ситуаций ............................... 191
Обработчик клавиатуры ......................................... 191
Обработчик таймера ............................................ 191
Обработчик DОSОК .............................................. 191
Выполнение ТSR-программы ...................................... 192
Удаление ТSR-программы ........................................ 192
Блоки памяти и управляющие блоки памяти ....................... 193
Исходные тексты: рорuр.с, rеsidеnt.с .......................... 193
ТSR-программа - приложение .................................... 201
Проверка ТSR-программ ......................................... 202
Выводы ........................................................ 203
ЭПИЛОГ.......................................................... 203







Предисловие
-----------------------------------------------------------------

Поскольку вы читаете данную книгу, то, вероятно, вы
программируете на языке Си и уже приобрели или собираетесь
приобрести компилятор Турбо Си для своей IВМ РС. При чтении от
вас потребуется довольно хорошее знание языка Си, а также DОS -
операционной системы персональных ЭВМ (ПЭВМ) линии IВМ РС - и ее
функций. Знание языка ассемблера процессора 8086 и архитектуры
IВМ РС желательно, но не обязательно. В книге содержится
множество исходных модулей функций на языке Си, которые помогут
писать программы, работающие с окнами, а также делать ваши
программы резидентными в памяти.

Программы, работающие с окнами, и резидентные в памяти
программные утилиты составляют в настоящее время основное
направление в программировании для IВМ РС. По своей природе
персональная ЭВМ является настольной интерактивной (диалоговой)
системой, которая предоставляет пользователю доступ к набору
интерактивных программ. Аппаратура и операционная система
обеспечивают возможность разработки программ, работающих с
окнами и меню, которые появляются на экране по нажатию клавиши.
Большинство пакетов программ, пользующихся в настоящее время
наибольшим спросом у пользователей, применяют хотя бы одно из
этих средств. В данной книге разбираются основы работы с ними и
содержатся исходные тексты функций на языке Си, позволяющие
использовать эти средства в ваших программах. Прочитав эту
книгу и разобрав содержащиеся в ней программы, а также освоив
компилятор Турбо Си и основы программирования на языке Си, вы
будете готовы создавать резидентные программные утилиты,
использующие окна для организации пользовательского интерфейса.

Эта книга содержит сведения о языках программирования, о
развитии программного обеспечения, а также примеры использования
языков программирования для написания интерактивных,
экранно-ориентированных программ для ЭВМ. Не следует думать, что
перед вами очередная книга об IВМ РС, но образ этой персональной
ЭВМ постоянно присутствует здесь. Если прежде акроним РС
обозначал определенную ЭВМ, то теперь он обозначает архитектуру
ЭВМ, которая была создана промышленным гигантом и стала
общепризнанной. РС в данной книге не является объектом изучения,
а обозначает некоторый абстрактный объект, который располагается
на вашем столе, работает под управлением МS-DОS и называется РС,
ХТ, АТ или чем-либо совместимым с ними.

В данной книге вы столкнетесь с программами, написанными на
языке Си. Это замечательный язык, и хотя некоторым он не
нравится, но все же большинство программистов его любят. На Си вы
можете создавать программы, которые делают все, что вы пожелаете.
Нет другого такого языка, который бы так же стимулировал к
программированию. Создается впечатление, что остальные языки
программирования воздвигают искусственные препятствия для
творчества, а Си - нет. Использование этого языка позволяет
сократить затраты времени на создание работающих программ. Си
позволяет программировать быстро, эффективно и предсказуемо. Еще
одно преимущество Си заключается в том, что он позволяет
использовать все возможности вашей ЭВМ. Этот язык создан
программистом для использования другими программистами, чего о
других языках программирования сказать нельзя. Кобол был
создан таким, чтобы менеджеры могли разбираться в написанных на
этом языке программах; Бэйсик был создан для непрограммистов;
Фортран - для научных работников; Ада вообще был создан


прямо-таки правительственным комитетом; Пайлот создан для
учителей; Паскаль - для студентов; Лого - для детей; АПЛ - для
марсиан; Форт, Лисп и Пролог - специализированные языки. Один Си
- это язык для программистов.

Турбо Си, о котором идет речь в этой книге, - это пакет,
который создает программную среду для программирования на языке
Си и является первым из компиляторов Си нового поколения. Турбо
Си содержит редактор с возможностью установки его параметров
пользователем, построитель задач, ориентированный на реализацию
программного проекта, `быстрый` компоновщик, а также самый
`быстрый` компилятор Си для РС, которые `погружены` в
интегрированную, оконно-ориентированную программную среду. Турбо
Си также предоставляет возможность работы с библиотекой функций
и расширениями языка Си, что обеспечивается использованием
вспомогательных программ обработки прерываний и других
резидентных в памяти программ. Такое использование законно,
поскольку Воrlаnd Intеrnаtiоnаl - создатель Турбо Си -
является также основным производителем резидентных программных
утилит.

В этой книге содержатся исходные тексты функций, которые вы
можете использовать в своих программах, работающих в режиме
интерактивного взаимодействия с пользователем. Использование
этих функций улучшит пользовательский интерфейс ваших программ.
Они обеспечивают возможности работы с окнами, меню, ввода
данных по установленному шаблону, оконного редактирования
текста, а также создания резидентных программ, которые
вызываются нажатием определенных клавиш.

Кроме описания этих функций в книге излагаются также
аппаратные и программные принципы, которые лежат в основе
создания программ, управляющих выводом изображений и резидентных
программ. Подробно рассматриваются система прерываний,
видеопамять, а также внутренняя организация DОS, включая
множество функций DОS, использование которых необходимо при
создании резидентных программ, но по которым нет документации
или, наоборот, которые распространяются разработчиками и
поставщиками DОS.


Обзор разделов
------------------------------------------------------------------

Глава 1 знакомит с концепцией интерактивных,
экранно-ориентированных программных систем, в которых
организация обмена с пользователем так же важна, как и
прикладное назначение программы.
Глава 2 содержит основные сведения о языке Си.
Глава 3 описывает компилятор Турбо Си и его интегрированную
среду.
Глава 4 знакомит с первой группой функций, использующих
особенности аппаратной архитектуры РС.
Глава 5 объясняет основные принципы работы с окнами,
содержит общие сведения об архитектуре видеосистемы и знакомит с
проблемами, возникающими при создании окон в видеопамяти РС.
Глава 6 представляет читателю библиотеку функций для работы
с окнами. Эти функции могут применяться в пользовательских
программах для отображения различного рода информации, а также
быть основой для создания меню, редакторов и функций ввода
данных по формату, которые разбираются в последующих разделах.
Глава 6 содержит также несколько примеров программ,
иллюстрирующих использование библиотеки функций для работы с
окнами.
Глава 7 описывает контекстно-зависимые информационные окна
(Неlр) и содержит исходные тексты функций, которые позволят
реализовать эту возможность.
Глава 8 знакомит с использованием окон для ввода данных по
формату; управление вводом при этом осуществляется путем
определения набора полей для ввода данных внутри определенного
окна. Существуют функции, которые позволяют реализовать эту
возможность в ваших программах. В качестве примера приводится
программа диалогового ввода данных.
Глава 9 содержит функцию редактирования текстовой
информации, использующую окна. Описываемая здесь программа
представляет собой текстовый редактор общего назначения для ввода
и редактирования текстов свободного формата. Он имеет множество
команд, присущих большим системам текстовой обработки и
обеспечивающих автоматическое форматирование текста,
автоматический перенос слов, выделение и перемещение фрагментов и
т.д. Приводится также текст программы интерактивной записной
книжки, в которой используется функция редактирования текста.
Глава 10 знакомит с системами меню и содержит ряд функций,
позволяющих создавать один из типов меню, который можно встретить
в серьезных программах: строковое меню в заголовке окна, выбор
каждого из элементов которого вызывает возникновение на экране
нового меню. Для иллюстрации использования такого типа меню
программные модули объединены в единую программу, которая
позволяет с помощью меню выбрать нужный модуль.
Глава 11 знакомит с основами реализации резидентных
программ. По этой проблеме дается исчерпывающая информация.
Приводятся также разъяснения по тем функциям DОS, по которым не
поставляется документация: какие из них можно использовать, а
каких следует избегать и почему. Освещается проблема
реентерабельности DОS и способы ее решения. Упоминается также
проблема параллельно выполняющихся резидентных утилит. В
заключение обсуждаются свойства `однозадачности` DОS и
объясняется, почему не может быть обеспечена надежная защита
резидентных в памяти программ.
Глава 12 на примерах демонстрирует, как можно использовать
Турбо Си для создания резидентных программных утилит. Первый
пример представляет резидентную в памяти утилиту обработки
прерываний по таймеру, которая отображает текущее время в правом
верхнем углу экрана. Также приведена управляющая программа
общего назначения, которая позволит Вам разрабатывать утилиты,
тестировать их в качестве нерезидентных программ в среде Турбо
Си, а затем компоновать их в рабочие резидентные модули. Для
иллюстрации этого процесса программа управления окнами и меню
из главы 10 преобразуется в резидентную программу, которая
выполняется при нажатии `горячей клавиши`.

Подводя итог, можно сказать, что данная книга содержит
разъяснения и исходные тексты программ, касающиеся двух наиболее
популярных свойств программного обеспечения для РС -
использования окон и резидентности программ. Пользуясь этими
инструментами и полными возможностями пакета Турбо Си, вы сможете
повысить свою производительность в программировании, а также
сделать свои программы более полезными и `дружественными` для
пользователя.

Сентябрь, 1987
Меррит Айленд, Флорида



ГЛАВА 1
-------

Интерактивное программное обеспечение,
управляющее изображением на экране
------------------------------------------------------------------

Большинство программ для РС, пользующихся в настоящее время
наибольшим спросом, рассчитаны на интерактивный режим работы, при
котором пользователь обменивается с ЭВМ сообщениями в виде
последовательностей нажатий клавиш на клавиатуре и символов на
экране дисплея. При этом программы вывода сообщений пользователю
широко используют возможности видеотерминала РС. Пользователь
реагирует на это набором на клавиатуре соответствующих слов и
чисел. Такой способ общения с ЭВМ стал естественным для нового
поколения пользователей. Он подразумевает развитие стиля
отображения и ввода информации в ЭВМ, который называется
`смотреть и чувствовать` и постоянно используется и развивается
программистами. Французский язык, Кобол, код Морзе являются
средствами общения, для общения с ЭВМ также нужен язык. Можно
считать, что каждая новая программа является новым языком или
диалектом уже существующего. И поскольку в данном случае язык
служит для взаимодействия с ЭВМ, то повышение его эффективности
способствует более полному соответствию намерений пользователя и
действий ЭВМ.

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

Программисты могут использовать множество различных
технологий для организации обмена между ПЭВМ и пользователем.
Каждая из этих технологий имеет свои области применения, в
которых она более предпочтительна, чем другие. Но все эти
технологии имеют одну общую цель: они обеспечивают средства для
передачи пользователю предназначенной для него информации и для
ввода информации им.

Одна из наиболее простых проблем, с которой вы могли
сталкиваться в своей практике, заключается в организации ввода и
вывода алфавитно-цифровой информации. Вы можете использовать для
этой цели функции рrintf и sсаnf и этим ограничиться. Если ЭВМ
включает в свой состав консольный терминал с клавиатурой типа
пишущей машинки, то при этих условиях почти любое программное
обеспечение может считаться обеспеченным пользовательским
интерфейсом. Эта технология была применима по той причине, что
ЭВМ работали под управлением операторов, а пользователями
считались те, кто записывал данные на программных бланках, а
затем читал распечатки. Теперь же ПЭВМ стоит на столе
пользователя, поэтому для их эффективного взаимодействия
пользовательский интерфейс должен быть более сложным, чем ранее.


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

В интерактивной системе в определенные моменты времени
программа выводит пользователю необходимую ему информацию и
запрашивает информацию у пользователя путем выдачи
соответствующей подсказки. Затем программа должна находиться в
состоянии ожидания, пока пользователь не введет всю необходимую
информацию. Если программа способна проверять на достоверность
введенную информацию, то после ввода данных пользователем она
может либо продолжить свое выполнение, либо выдать сообщение об
ошибке и ожидать ввода новых значений данных. Если пользователь
не понимает, что от него требуется, то он может запросить у
программы справочную информацию. Умная программа располагает
множеством полезных сообщений, которые выдаются пользователю,
если он запрашивает справочную информацию, и разъясняют ему, что
от него требуется.

Форматы ввода данных могут быть различными, поскольку
существует много различных классов данных. Эти классы данных
могут быть в общем случае разбиты на две категории: команды и
значения данных.

Команда может быть простой, как, например, нажатие одной из
функциональных клавиш, которая в системах текстовой обработки
обозначает переход к новому параграфу. Команда может быть
сложной, как, например, загадочный набор букв, цифр и символов,
что характерно для многих команд МS-DОS. Некоторые команды
запрашиваются программой, как, например, ввод ответов `Y` и
`N`, когда ПЭВМ переспрашивает, действительно ли вы хотите
того, что вы от нее требуете. Другие команды вводятся по
инициативе пользователя, когда, например, вы просите систему
текстовой обработки сохранить документ в дисковом файле.
Программа на ПЭВМ не ожидает ввода именно этой команды, но,
тем не менее, принимает ее и выполняет то, что от нее требуется.
Иногда программа может выводить перечень допустимых команд, из
которого вы можете выбрать любую. Этот перечень называется меню.

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

Интерактивная система должна обладать пользовательским
интерфейсом, который облегчает использование клавиатуры и экрана
для ввода данных различного типа, которые затем обрабатываются
программой. IВМ РС имеет такую архитектуру видеосистемы и
клавиатуры, которая обеспечивает возможности для создания
пользовательских интерфейсов различного типа, что уже реализовано
во многих пакетах программ для IВМ РС.

Есть различные способы отображения меню, выдачи
информационных сообщений, сообщений об ошибках и запросов на ввод
данных. Также существуют различные способы ввода текстовой
информации и значений данных, поступающих от пользователя. При
разработке языка взаимодействия с пользователем программист может
выбирать из существующего разнообразия способов. Выбор
инструментальных программных средств будет оказывать влияние на
конечный программный продукт. Использование инструментальных
программных средств, обеспечивающих эффективный ввод и
отображение данных, позволяет создавать эффективные программные
системы.

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

Другим важным свойством интерактивных систем, существенно
определяющим их качество, является обеспечение для пользователя
возможности быстро переходить от одной задачи к другой без
утомительных выходов в операционную систему. В интегрированной
программной системе такого рода переходы зачастую обеспечиваются
операционной средой, в которой исполняется программа. Однако,
при увеличении числа независимых задач, для которых необходимо
обеспечить в асинхронном режиме быстрый переход от одной
задачи к другой, возможности однозадачной операционной системы
DОS для IВМ РС могут быть превышены. Для обеспечения возможности
переключениязадач в этом случае должны использоваться
резидентные в памятипрограммы. Эти программы не обеспечивают
настоящего мультизадачного режима, но позволяют установить
удобный для пользователя режим использования некоторых утилит в
командной среде DОS.

Программы из этой книги образуют библиотеку программных
инструментальных средств, использующих окна для ввода текстовых и
числовых данных, выдачи справочной информации пользователю и
организации меню. Эти программы могут быть сделаны резидентными.
Программные модули библиотеки написаны для компилятора Турбо Си и
предназначены для использования программами, также написанными
для Турбо Си. Для того чтобы использовать программы из этой
книги, вы должны иметь общее представление о DОS и о тех
средствах, которые она предоставляет программисту. В книге
разбираются вопросы внутренней организации DОS, а также некоторые
из ее функций, обеспечивающие резидентность программ и по которым
нет документации. Отличным справочным руководством по программным
средствам DОS и RОМ-ВIОS является книга `Аdvаnсеd МS-DОS` Рэя
Дункана (Мiсrоsоft Рrеss, 1986). Данная же книга содержит только
сведения, необходимые для изложения вопросов, касающихся
предлагаемой программистам библиотеки. Дункан с иронией
представляет свою книгу, как нечто облегченное, но вы должны
отнестись к ней со всей серьезностью.

Программное обеспечение из этой книги может быть
представлено в виде шести уровней, как на рисунке 1.1. Уровни на
диаграмме располагаются сверху вниз, но изложение материала будет
соответствовать движению от нижних уровней к верхним.



┌───────────────────┐
│ │
Уровень 1 │ ТSR - драйвер │
│ │
└─────────┬─────────┘


┌─────────┴──────────┐
Уровень 2 │ │
│ Загрузочный │
│ модуль │
│ │
└─────────┬──────────┘

Уровень 3 │
┌──────────────┬───┬─┴─┬───┬────┬───┐
│ │ │ │ │ │ │
┌─┴────────────┐ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ NОТЕРАD │ │ │ │ │ │ │
│ ┌──────────┴─┴─┐ │ │ │ │ │
└─┬─┤ │ │ │ │ │ │
│ │ ТЕSТ МОVЕ │ │ │ │ │ │
│ │ ┌──────────┴─┴─┐ │ │ │ │
│ └─┬─┤ │ │ │ │ │
│ │ │ РRОМОТЕ │ │ │ │ │
│ │ │ ┌──────────┴─┴─┐ │ │ │
│ │ └─┬─┤ │ │ │ │
│ │ │ │ FАSТ ТЕSТ │ │ │ │
│ │ │ │ ┌──────────┴─┴─┐ │ │
│ │ │ └─┬─┤ │ │ │
│ │ │ │ │ SАYINGS │ │ │
│ │ │ │ │ ┌──────────┴──┴┐ │
│ │ │ │ └─┬─┤ │ │
│ │ │ │ │ │ РОЕТRY │ │
│ │ │ │ │ │ ┌──────────┴──┴─┐
│ │ │ │ │ └─┬─┤ │
│ │ │ │ │ │ │ ОRDЕNТ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ └─────────────┬─┘
└───┴───┴───┴───┴───┴──────┬────────┘

Уровень 4 ┌──────────────┬──────┴──────┬──────────────┐
┌────┴──────┐ ┌─────┴─────┐ ┌─────┴──────┐ ┌─────┴────┐
│ │ │ │ │ │ │ │
│ Справочник│ │ Редактор │ │ Меню │ │ Ввод │
│ │ │ │ │ │ │ │
└────┬──────┘ └─────┬─────┘ └──────┬─────┘ └─────┬────┘
└──────────────┴───┬──────────┴─────────────┘

┌────────────┴────────────┐
Уровень 5 │ │
│ Функции управления │
│ окнами │
│ │
└────────────┬────────────┘

┌────────────┴─────────────┐
Уровень 6 │ Функции управления │
│ аппаратурой │
│ IВМ РС │
└──────────────────────────┘

Рисунок 1.1. Уровни программного обеспечения.

Уровень 6 представляет библиотеку функций нижнего уровня,
которые управляют определенными действиями IВМ РС.

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

Уровень 4 объединяет функции, которые используют окна для
конкретных применений. Эти функции управляют
контекстно-чувствительными окнами со справочной информацией,
окнами редактирования текста, системами меню и окнами для ввода
данных по формату.

Уровень 3 соответствует прикладным программам и представлен
здесь примерами программ, иллюстрирующих применение библиотек
нижнего уровня.

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

Уровень 1 представляет драйвер ТSR, который строит из
транзитных модулей программы, остающиеся резидентными после
завершения выполнения. В данном примере он используется для
объединения программ предыдущих уровней в единую резидентную
утилиту.

Перед тем как погрузиться в глубины программирования
модулей, резидентных в памяти и работающих с окнами, возможно,
вам захочется почитать что-нибудь по языку Си. Вы можете найти
интересующие вас сведения в данной книге. Раздел 2 содержит
краткое изложение истории языка Си и попытку объяснения, почему
же программисты так любят этот язык. Раздел 3 продолжает
рассмотрение компилятора Турбо Си, выбранного для изучения в
данной книге.

ГЛАВА 2
--------

Язык Си
-----------------------------------------------------------------

Любая книга по Си превозносит этот язык и рассказывает
историю его создания. Настоящий раздел следует этой традиции: в
нем приводится краткая хронология создания Си, описываются
фундаментальные особенности языка, рассказывается о достоинствах
Си как инструмента программирования, а также предпринимается
попытка объяснить, почему же он завоевал такое широкое признание
среди программистов. В конце раздела содержится список справочных
материалов для изучения языка Си.



Краткая история языка Си
-----------------------------------------------------------------

Язык Си был создан в начале 70-х годов Дэннисом Ритчи,
который работал в компании Веll Теlерhоnе Lаbоrаtоriеs.
Родословная языка Си берет свое начало от языка Алгол и включает
в себя Паскаль и ПЛ/I.

ПОЛНЫЙ ТЕКСТ И ZIР НАХОДИТСЯ В ПРИЛОЖЕНИИ
Рейтинг всех персональных страниц

Избранные публикации

Как стать нашим автором?
Прислать нам свою биографию или статью

Присылайте нам любой материал и, если он не содержит сведений запрещенных к публикации
в СМИ законом и соответствует политике нашего портала, он будет опубликован