ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 31


ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
ЦДДДДДДДї          Авторский коллектив "*.*"
є  ХНН» і                   ЦДї                        ЦДї
є  і  є і                   є і                        є і
є  АДДј Аї ЦДДДДДї ЦДДДДДї  є і   ЦДДДДДї ЦДДї ЦДї ЦДДДЅ і
є  ХНН»  і є ХН» і є ХН» і  є і   є ХН» і є  Аїє і є ХН» і
є  і  є  і є і є і є АДј µ  є і   є АДј і є Х»АЅ і є і є і
є  АДДј  і є АДј і є ХН» Аї є Аї ЦЅ ХН» і є іИ»  і є АДј і
ИННННННННѕ ИНННННѕ ИНѕ ИННѕ ИННѕ ИННѕ ИНѕ ИНѕ ИННѕ ИНННННЩ

РЕЗИДЕНТНАЯ ПРОГРАММА-СПРАВОЧНИК "РУКОВОДСТВО ПО СИСТЕМНЫМ
               СРЕДСТВАМ И УТИЛИТАМ С++"

                (Примечание: эта версия поставляется для
                             пользователей Borland Pascal
                                 временно)

                           г.Москва, 1993 г.
ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН

                  О г л а в л е н и е 

Введение...................................................
Глава 1. Средства библиотек импорта........................
Утилита IMPDEF: администратор файлов определения модуля....
Классы в DLL...............................................
Функции в DLL..............................................
Утилита IMPLIB: библиотекарь импорта.......................
Таблица 1.1 Параметры утилиты IMPLIB.......................
Повторное создание IMPORT.LIB..............................
Утилита IMPLIBW: администратор библиотек импорта для
 Windows...................................................
Выбор библиотеки импорта...................................
Создание библиотеки импорта................................
Глава 2. Утилита MAKE: администратор программ..............
Как работает утилита MAKE..................................
Запуск утилиты MAKE........................................
Параметры командной строки.................................
Таблица 2.1 Параметры утилиты MAKE.........................
Файл BUILTINS.MAK..........................................
Простой пример использования утилиты MAKE..................
Создание формирующих файлов утилиты MAKE...................
Компоненты формирующего файла..............................
Комментарии................................................
Списки команд для явных и неявных правил...................
Префиксы...................................................
Тело команды и операторы...................................
Параметр совместимости.....................................
Пакетная обработка.........................................
Выполнение команд DOS......................................
Явные правила..............................................
Особые случаи..............................................
Несколько явных правил для одного целевого файла...........
Примеры....................................................
Автоматическая проверка зависимостей.......................
Неявные правила............................................
Макрокоманды...............................................
Определение макрокоманд....................................
Использование макрокоманд..................................
Использование в качестве макрокоманд переменных среды......
Подстановки с помощью макрокоманд..........................
Особые ситуации............................................
Предопределенные макрокоманды..............................
Таблица 2.3 Предопределенные макрокоманды утилиты MAKE.....
Таблица 2.4 Макрокоманды утилиты MAKE......................
Макрокоманды имен файлов...................................
Модификаторы макрокоманд...................................
Директивы..................................................
Директивы с точкой.........................................
Директива .precious........................................
Директива .PATH.расширение.................................
Директива .suffixes........................................
Директива включения файлов.................................
Директивы условного выполнения.............................
Выражения, допустимые в директивах условного выполнения....
Таблица 2.7 Операторы утилиты MAKE.........................
Директива Error (Ошибка)...................................
Директива отмены макроопределения..........................
Параметр совместимости -N..................................
Глава 3. Утилита TLIB: Турбо библиотекарь..................
Почему следует использовать библиотеки объектных модулей...
Командная строка утилиты TLIB..............................
Таблица 3.1 Параметры утилиты TLIB.........................
Список операций............................................
Имена файлов и модулей.....................................
Операции утилиты TLIB......................................
Таблица 3.2 Обозначения операций утилиты TLIB..............
Использование файлов отклика...............................
Создание расширенного словаря: параметр /E.................
Задание размера страницы: параметр /P......................
Специальная операция: параметр /C..........................
Примеры....................................................
Глава 4. Утилита TLINK: Турбо компоновщик..................
Вызов утилиты TLINK........................................
Таблица 4.1 Параметры утилиты TLINK........................
Пример компоновки для DOS..................................
Пример компоновки для Windows..............................
Имена файлов в командной строке утилиты TLINK..............
Использование файлов отклика...............................
Файл конфигурации утилиты TLINK............................
Использование TLINK с модулями Borland C++.................
Код инициализации..........................................
Библиотеки.................................................
Использование утилиты TLINK с программой BCC...............
Параметры компоновщика TLINK...............................
Файл конфигурации утилиты TLINK............................
Параметр /3 (32-битовый код для процессора 80386)..........
Параметр /A (выравнивание сегментов).......................
Параметр /c (Различие регистров букв)......................
Параметр /C (различие регистров букв в секции экспорта)....
Параметр /d (дублируемые идентификаторы)...................
Параметр /e (расширенный словарь)..........................
Параметр /i (неинициализированные завершающие сегменты)....
Параметр /l (номера строк).................................
Параметр /L (маршрут поиска библиотек).....................
Параметры /m, /s, /x (параметры карты памяти)..............
Параметр /n (игнорировать стандартные библиотеки)..........
Параметр /o (оверлеи)......................................
Параметр /P (упаковывать сегменты кода)....................
Параметр /t (.COM файл крохотной модели)...................
Параметры /Td и /Tw (параметры результата).................
Параметр /v (отладочная информация)........................
Параметр /ye (дополнительная память).......................
Параметр /yx (расширенная память)..........................
Файл определения модуля....................................
Стандартный файл определения модуля........................
Пример.....................................................
Справочник описания модулей................................
CODE (код).................................................
DATA (данные)..............................................
DESCRIPTION (описание).....................................
EXETYPE (тип выполняемого файла)...........................
EXPORTS (экспортируемые функции)...........................
HEAPSIZE (размер динамически распределяемой области")......
IMPORTS (импортируемые функции)............................
LIBRARY (библиотека).......................................
NAME (имя).................................................
SEGMENTS (сегменты)........................................
STACKSIZE (размер стека)...................................
STUB (заглушка)............................................
Глава 5. Использование утилиты WinSight....................
Начало работы..............................................
Действия "мыши" и клавиатуры         Таблица 5.1...........
Выход......................................................
Выбор отображаемого элемента...............................
Выбор области..............................................
Упорядочивание областей....................................
Получение подробной информации.............................
Использование дерева окон..................................
Упрощение дерева...........................................
Поиск окна.................................................
Наблюдение за окнами.......................................
Работа с классами..........................................
Использование области списка классов.......................
Наблюдение за классами.....................................
Переключение режимов.......................................
Выключение трассировки.....................................
Приостановка обновление экрана.............................
Выбор трассируемых сообщений...............................
Фильтрация сообщений.......................................
Параметры трассировки сообщений............................
Окна утилиты Winsight......................................
Область списка классов.....................................
Область дерева окон........................................
Область трассировки сообщений..............................
Глава 6. Компилятор ресурсов Windows RC....................
Создание ресурсов..........................................
Добавление ресурсов к выполняемому файлу...................
Компиляция ресурсов из интегрированной интерактивной среды.
Компиляция ресурсов из командной строки....................
Компиляция ресурсов с помощью формирующего файла...........
Синтаксис компилятора ресурсов.............................
Глава 7. HC: Компилятор справочников Help..................
Создание системы интерактивной документации Help: цикл
 разработки................................................
Система интерактивной документации с точки зрения
 пользователя..............................................
Система интерактивной документации с точки зрения ее
 разработчика..............................................
Система интерактивной документации с точки зрения
 программиста..............................................
Планирование интерактивной документации....................
Построение плана...........................................
Определение аудитории......................................
Планирование структуры статей..............................
Контекстно-зависимая справка...............................
Определение структуры информационных файлов................
Выбор структуры файлов Help для конкретной прикладной
 программе.................................................
Проектирование статей справочника..........................
Схема текста...............................................
Использование различных типов и размеров шрифтов...........
Вставка графических изображений............................
Создание информационного файла Help........................
Выбор редактора............................................
Структурирование информационного файла.....................
Кодирование информационного файла..........................
Назначение признаков включения.............................
Назначение контекстных строк...............................
Назначение заголовков......................................
Назначение ключевых слов...................................
Создание множественных таблиц ключевых слов................
Назначение порядковых номеров просмотра....................
Организация последовательности просмотра...................
Кодирование последовательности просмотра...................
Организация перекрестных ссылок............................
Определения терминов.......................................
Создание определения термина...............................
Кодирование определяемых терминов..........................
Вставка графических изображений............................
Создание битовых изображений...............................
Вставка графических изображений средствами текстового
 процессора................................................
Вставка битовых изображений по ссылке......................
Сопровождение информационных файлов........................
Отслеживание файлов и статей...............................
Создание файла отслеживания................................
Построение справочного файла системы интерактивной
 документации..............................................
Создание файла описания проекта............................
Указание информационных файлов.............................
Указание признаков включения...............................
Указание параметров........................................
Уровень сообщений об ошибках...............................
Условие включения статей...................................
Указание каталога, используемого по умолчанию..............
Оглавление справочника Help................................
Заголовок справочника Help.................................
Преобразование шрифтов.....................................
Изменение размеров шрифта..................................
Множественные таблицы ключевых слов........................
Упаковка файла.............................................
Указание альтернативных контекстных строк..................
Назначение контекстных номеров.............................
Вставка битовых изображений по ссылке......................
Компиляция справочного файла...............................
Работа с компилятором системы интерактивной документации...
Доступ к системе Help из прикладной программы пользователя.
Вызов WinHelp из прикладной программы......................
Получение контекстно-зависимой справки.....................
Обработка комбинации клавиш Shift+F1.......................
Обработка нажатия клавиши F1...............................
Доступ к справочной информации при помощи меню Help
 (Справочник)..............................................
Доступ к дополнительным таблицам ключевых слов.............
Завершение работы со справочником..........................
Примеры информационных файлов..............................
Файл описания проекта Helpex...............................

                         Введение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В состав  пакета Borland C++ входят мощные автономные утили-
ты,  которые можно использовать как при работе с вашими  файлами,
созданными с помощью системы Borland C++, так и с другими модуля-
ми, что облегчает программирование в среде DOS и Windows.  В дан-
ном руководстве оприсываются  утилиты  IMPDEF,  IMPLIB,  IMPLIBW,
MAKE, TLIB,  TLINK и WinSight. Здесь вы найдете примеры с исполь-
зованием исходного кода и командной строки, иллюстрирующие приме-
нение этих  программ.  Остальные  утилиты  Borland  C++ описаны в
текстовом файле с именем UTILS.DOC, который утилита INSTALL поме-
щает в подкаталог DOC.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іНазвание         Описание                                      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Описаны в данном руководстве:                               і
і                                                               і
і IMPDEF         Создает файлы определения модулей.             і
і                                                               і
і IMPLIB         Генерирует библиотеки импорта.                 і
і                                                               і
і MAKE           Автономный администратор программ.             і
і                                                               і
і TLIB           Турбо библиотекарь.                            і
і                                                               і
і TLINK          Турбо компоновщик.                             і
і                                                               і
і WinSight       Монитор сообщений Windows.                     і
і                                                               і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Описаны в файле документации UTILS.DOC:                     і
і                                                               і
і BGIOBJ        Утилита преобразования для графических драйверові
і               и шрифтов.                                      і
і                                                               і
і CPP           Препроцессор.                                   і
і                                                               і
і GREP          Утилита поиска информации в файлах.             і
і                                                               і
і OBJXREF       Генератор перекрестных ссылок объектного модуля.і
і                                                               і
і PRJCFG        Модифицирует  параметры  в файле проекта  значе-і
і               ниями из файла конфигурации или преобразует файлі
і               проекта в файл конфигурации.                    і
і                                                               і
і PRJCNVT       Преобразует  файл  проекта  Tурбо  Си  в  форматі
і               Borland C++.                                    і
і                                                               і
і PRJ2MAK       Преобразует  файлы проектов системы  Borland C++і
і               в файлы формата MAKE.                           і
і                                                               і
і THELP         Утилита-справочник Helр.                        і
і                                                               і
і TOUCH         Утилита изменения даты и времени.               і
і                                                               і
і TRANCOPY      Копирует элементы перехода из  одного  проекта ві
і               другой.                                         і
і                                                               і
і TRIGRAPH      Утилита преобразования символов.                і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Макрокоманды Transfer,  макроязык  Турбо   редактора   Turbo
Editor  Macro  Language  (TEML) и макрокомпилятор Турбо редактора
Turbo Editor Macro Compiler  (TEMC)  описываются  также  в  файле
UTILS.DOC.

           Глава 1. Средства библиотек импорта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Важной частью программирования в Windows являются динамичес-
ки компонуемые  библиотеки  DLL.  Вы  можете создавать библиотеки
DLL, как обычные файлы кода и использовать  их  (или  библиотеки,
написанные кем-то еще) в своих прикладных программах.

     При построении   прикладной  программы  Windows  компоновщик
TLINK использует  библиотеки импорта, чтобы знать, где определена
функция, и когда она импортируется из DLL. Библиотеки импорта за-
меняют обычно файлы определения модуля (.DEF).

     Утилита IMFDEF создает файл определения  модуля,  содержащий
оператор EXPORT  для  каждой экспортируемой функции DLL.  Утилита
IMPLIB создает для DLL библиотеку импорта.  IMPLIBW также создает
для DLL  библиотеку  импорта,  но  является прикладной программой
Windows.

    Утилита IMPDEF: администратор файлов определения модуля
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита IMPDEF  используется  с IMPLIB для того,  чтобы дать
возможность настроить библиотеку импорта для необходимой комплек-
тации заданной прикладной программы.

           Замечание: Библиотека импорта используется для предос-
      тавления доступа к функциям DLL.

     Синтаксис вызова утилиты IMPDEF:

      IMPDEF имя_приемника.DEF имя_источника.DLL

     При этом из файла "имя_источника.DLL" создается файл опреде-
ления модуля с именем "имя_приемника.DEF". Файл определения моду-
ля будет выглядеть следующим образом:

     LIBRARY      имя_файла

     DESCRIPTION  'Описание'

     EXPORTS
                  имя_экспортируемой_функции         @номер
                  ...
                  имя_экспортируемой_функции         @номер

где "имя_файла"  является именем корневого файла DLL,  'Описание'
является значением утверждения DESCRIPTON,  если DLL была предва-
рительно скомпонована с файлом определения модуля,  который вклю-
чает утверждение DESCRIPTION,  "имя_экспортируемой_функции" явля-
ются именами экспортных функций,  а "номера" являются порядковыми
значениями (целыми) этих функций.

                        Классы в DLL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Данная утилита удобна для DLL,  использующей классы C++,  по
двум соображениям.  Во-первых, если вы используете ключевое слово
_exрort  при определении класса,  экспортируются все невстроенные
функции-элементы и элементы статических данных для  этого класса.
Удобнее создать файл определения модуля с помощью IMPDEF, так как
в нем будут перечислены все экспортируемые функции, включая функ-
ции-элементы и элементы статических данных.

     Поскольку имена  данных  функций являются "скорректированны-
ми", процесс перечисления всех имен функций в секции EXPORTS фай-
ла  определения  модуля  для создания библиотеки импорта из файла
определения модуля является очень утомительным. Если для создания
файла определения модуля вы используете утилиту IMPDEF, она будет
включать порядковое значение для каждой  экспортируемой  функции,
так  же  как  и исходное имя в комментариях,  следующих за точкой
входа функции,  если экспортируемое имя является "скорректирован-
ным". Так,  например, файл определения модуля, созданный утилитой
IMPDEF для DLL,  которая использует классы C++,  будет  выглядеть
примерно следующим образом:

      LIBRARY       имя_файла

      DESCRIPTION   'Описание'

      EXPORTS

      скоррект_имя_экпорт_функции  @номер ;  имя_экспорт_функции
        ...
      скоррект_имя_экпорт_функции  @номер ;  имя_экспорт_функции

где "имя_файла" является корневым именем DLL, 'Описание' является
значением утверждения DESCRIPTION,  если DLL была  предварительно
скомпонована  с  файлом определения модулей,  который включал ут-
верждение DESCRIPTION, "скоррект_имя_экпорт_функции" представляет
собой скорректированное имя, "номера" являются порядковыми значе-
ниями (целыми) функций,  а "имя_экпорт_функции"  задает  исходное
имя функции.

                       Функции в DLL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита IMPDEF создает редактируемый исходный  файл, который
перечисляет все экспортные функции в DLL.  Вы можете отредактиро-
вать этот файл .DEF так, чтобы он содержал только те функции, ко-
торые вы хотите сделать доступными для нужной прикладной програм-
мы, а затем выполнить IMPLIB для отредактированного файла .DEF. В
результате получается библиотека импорта, которая содержит инфор-
мацию импорта для заданного подмножества  экспортируемых  функций
DLL.

     Например, пусть  вы  определяете DLL,  которая предоставляет
функции для  использования  различными  прикладными  программами.
Каждая экспортируемая функция в DLL определяется с помощью опера-
тора _exрort.  Теперь,  если все прикладные программы  используют
все  экспортируемые  функции  DLL,  вы можете просто использовать
IMPLIB для создания одной библиотеки импорта для DLL и поставлять
эту библиотеку импорта с DLL. Библиотека импорта может быть ском-
понована с любыми прикладными программами, исключая таким образом
необходимость перечисления для каждой прикладной программы каждой
используемой ей функции DLL в секции IMPORT файла определения мо-
дуля.

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

     Для создания библиотеки импорта,  которая удовлетворяет этим
условиям, выполните IMPDEF для откомпилированной и скомпонованной
DLL. Утилита IMPDEF создаст файл определения модуля,  который со-
держит в секции EXPORT перечисление всех  экспортируемых  функций
DLL. Вы можете редактировать этот файл определения модуля, удаляя
компоненты секции EXPORTS для тех функций,  которые вы не  хотите
включать в библиотеку импорта.  После того, как вы удалите ненуж-
ные экспортируемые функции,  выполните утилиту IMPLIB  для  файла
определения модуля. Результатом будет библиотека импорта, которая
содержит информацию импорта только для экспортных функций,  пере-
численных в секции EXPORTS файла определения модуля.

             Утилита IMPLIB: библиотекарь импорта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита IMPLIB создает библиотеку импорта, которая может за-
мещать  часть или всю секции IMPORTS файла определения модуля для
прикладной программы Windows.

     Если модуль использует функции из DLL,  у вас есть два  пути
указать это компоновщику:

     *  Вы можете добавить секцию IMPORTS в файл определения  мо-
        дуля и  перечислить каждую функцию из DLL,  которую будет
        использовать модуль.

     *  Или вы можете включить библиотеку импорта для DLL,  когда
        компонуете модуль.

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

     Если вы создали прикладную программу для Windows,  то вы уже
использовали  как  минимум  одну библиотеку импорта,  IMPORT.LIB.
IMPORT.LIB  является  библиотекой  импорта  для  DLL  с   именами
USER.EXE, GDI.EXE и KERNEL.EXE для WINDOWS.  (IMPORT.LIB компону-
ется  автоматически,  когда  вы создаете прикладную программу для
Windows в интегрированной интерактивной среде;  если вы использо-
вали  для  создания  прикладной  программы только интегрированную
среду, то вы могли ее при этом и не заметить.)

           Примечание: Об использовании для  настройки библиотеки
      импорта  на конкретную прикладную программу утилит IMPDEF и
      IMPLIB рассказывалось выше.

     Библиотека импорта перечисляет некоторые или все экспортиру-
емые  функции для одной или более DLL.  IMPLIB создает библиотеку
импорта прямо из DLL или файлов определения модуля для  DLL  (или
из их комбинации).

     Для создания библиотеки импорта для DLL наберите:

     IMPLIB параметры имя_библ [файлы_опред... ] библ_DDL...]

где "параметры"  является необязательным списком одного или более
параметров IMPLIB,  "имя_библ" (обязательное) является именем но-
вой библиотеки импорта,  "файлы_опред" является списком из одного
или более существующих файлов определения  модуля,  а  "библ_DLL"
является списком из одного или более существующих DLL.  Вы должны
задать как минимум одну DLL или файл определения модуля.

           Примечание: Библиотека DLL может также иметь  расшире-
      ние .EXE или .DRV, а не обязательно .DLL.

               Таблица 1.1 Параметры утилиты IMPLIB
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Параметр                     Действие                         і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і /i                           Указывает IMPLIB, что WEP (проце-і
і                              дуру  выхода  Windows,  требуемуюі
і                              для окончания DLL) нужно  игнори-і
і                              ровать. Используйте   этот  пара-і
і                              метр,  если  в  командной  строкеі
і                              IMPLIB  вы  вы  задаете несколькоі
і                              DLL.                             і
і                                                               і
і Управление предупреждениями:                                  і
і /t                           Сжатые предупреждения.           і
і /v                           Развернутые предупреждения.      і
і /w                           Не выдавать предупреждения.      і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

          Примечание: Перед параметрами IMPLIB можно использовать
      либо  косую черту,  либо дефис,  но параметры должны указы-
      ваться в нижнем регистре.

                  Повторное создание IMPORT.LIB
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Когда фирма Microsoft выпустит новую версию Windows, возмож-
но вам нужно будет заменить текущую версию IMPORT.LIB  на  новую.
Лучше всего сделать это самостоятельно.

     Следующая командная    строка    создает    текущую   версию
IMPORT.LIB:

    IMPLIB /I IMPORT.LIB GDI.EXE KERNEL.EXE USER.EXE KEYBOARD.DRV
             SOUND.DRV WIN87EM.DLL

           Примечание: Введите эту команду на одной строке в сис-
      темном каталоге (SYSTEM) Windows.

     Если Windows будет использовать еще  какие-нибудь  DLL,  эти
новые библиотеки DLL нужно указать в командной строке.

Утилита IMPLIBW: администратор библиотек импорта для Windows
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

           Примечание: Подробнее  об  библиотеках  импорта  и DLL
      рассказывается выше.

                Выбор библиотеки импорта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Чтобы создать  с помощью утилиты IMPLIBW библиотеку импорта,
нужно дважды щелкнуть кнопкой "мыши" на пиктограмме  IMPLIBW. При
этом появится   пустое   окно.   Выбор   команды   FileіCreate...
(ФайліСоздание) приведет к выводу  диалогового  окна  со  списком
всех библиотек DLL в текущем каталоге.  Здесь, как обычно, вы мо-
жете перемещаться между каталогами,  дважды нажимая кнопку "мыши"
на именах каталогов в окне списка.

     Выбор библиотеки импорта из DLL

     Когда вы  выбираете  библиотеку  импорта  из DLL и нажимаете
кнопку "мыши" на команде Create (Создание) (или просто дважды на-
жимаете кнопку на имени файла DLL),  утилита IMPLIBW будет созда-
вать библиотеку импорта расширением .LIB, базовое имя которой бу-
дет совпадать с именем выбранной библиотекой DLL.

     IMPLIBW не позволяет создавать одну  библиотеку  импорта  из
нескольких  DLL или файлов определения модуля.  В диалоговом окне
File Select (Выбор файла) в управляющем элементе File edit вы мо-
жете набрать несколько имен файлов. Когда для формировании библи-
отеки импорта вы выбираете командную кнопку OK, IMPLIBW будет ис-
пользовать  весь экспорт из каждого определения перечисленных мо-
дулей или DLL. Заметим, что вы можете с помощью блока списка фай-
лов выбрать только один файл. Если вым требуется задать несколько
имен файлов, их нужно ввести.

     Выбор библиотеки импорта из файла определений

     Если для  DLL  у вас имеется файл определения модуля (.DEF),
то его можно использовать вместо самой библиотеки DLL для  созда-
ния библиотеки импорта.

     Вместо выбора DLL наберите имя файла .DEF в управляющем бло-
ке редактора и дважды щелкните кнопкой "мыши" на  команде Create.
Утилита IMPLIBW  будет создавать библиотеку импорта с расширением
.LIB и именем, совпадающим с именем выбранного файла .DEF.

                 Создание библиотеки импорта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если при  проверке  утилитой  IMPLIBW библиотеки DLL и файла
определений модуля не было ошибок, то выводится окно с сообщением
"No Warnings"  ("Предупреждений нет").  Значит все в порядке.  Вы
создали новую библиотеку импорта,  которую можно включить в  про-
ект.
           Примечание: Возможные  сообщения  об  ошибках  утилиты
      IMPLIBW можно найти в Приложении A.

         Глава 2. Утилита MAKE: администратор программ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита MAKE  фирмы Borland,  которая была создана на основе
программы ОС UNIX с тем же самым именем,  помогает вам  создавать
выполняемую версию программы на основе самых последних версий ис-
ходных файлов.  Многие программы состоят из  значительного  числа
исходных файлов, каждый из которых, возможно, должен пропускаться
через препроцессоры, ассемблеры, компиляторы и другие утилиты пе-
ред тем,  как он будет объединяться с остальной частью программы.
Если вы забудете перекомпилировать какой-либо модуль, который был
модифицирован, или модуль, который зависит от какого-либо другого
модифицированного исходного текста,  то это может привести к раз-
рушительным логическим ошибкам.  С другой стороны, перекомпиляция
всех исходных файлов лишь для того, чтобы обезопасить себя, может
привести к слишком большим затратам времени.

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

           Приложение: О том, как создавать формирующие файлы для
      прикладных программ Windows,  рассказывается в Главе 8 "Ру-
      ководства программиста"

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

                  Как работает утилита MAKE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита MAKE создает самую последнюю версию вашей программы,
выполняя при этом следующие задачи:

     - Считывает специальный файл (называемый файлом описания или
       файлом сборки),  который был предварительно  вами  создан.
       Этот файл указывает утилите MAKE,  какие объектные файлы и
       библиотечные файлы должны быть скомпонованы для того, что-
       бы создать выполняемый файл,  а также указывает, какие ис-
       ходные файлы и файлы заголовков должны компилироваться для
       создания каждого объектного файла.

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

     - Вызывает компилятор для перекомпиляции исходного файла.

     - После того,  как были проверены все зависимости  объектных
       файлов,  дата  и  время  создания каждого объектного файла
       проверяется по отношению к дате и времени создания  выпол-
       няемого файла.

     - Если  какой-либо из объектных файлов оказывается более но-
       вым по сравнению с выполняемым  файлом,  утилита  вызывает
       компоновщик для его перекомпоновки.

     Утилита MAKE полностью полагается на маркер времени, который
DOS присваивает каждому файлу.  Это означает,  что для нормальной
работы  утилиты MAKE необходимо корректно устанавливать системные
дату и время. Если вы работаете на компьютере AT или PS/2, убеди-
тесь в том, что аккумуляторная батарея находится в исправном сос-
тоянии.  Наличие на компьютере "подсевших" батарей может привести
к  некорректности показаний даты и времени системного таймера,  и
работа утилиты MAKE окажется неверной.

           Примечание: Оригинальные машины IBM PC и большая часть
     совместимых  машин  не  поставлялись со встроенными таймером
     или календарем.  Если используемая вами система  попадает  в
     эту категорию, и вы не добавили системный таймер, то необхо-
     димо обеспечивать корректную установку системных  времени  и
     даты (с помощью команд DATE и TIME в DOS) при каждом запуске
     машины.

                      Запуск утилиты MAKE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Существует две  версии утилиты MAKE:  версия для защищенного
режима MAKE.EXE и версия для реального режима MAKER.EXE. Работают
они идентично. Единственное отличие состоит в том, что версия для
защищенного режима может обрабатывать большие  формирующие файлы.
Когда мы говорим об утилите MAKE, это относится к обеим версиям.

     Для использования  утилиты  MAKE  необходимо  ввести команду
make в строке приглашения DOS. При запуске утилита MAKE ищет файл
со  специальным  именем MAKEFILE (формирующий файл утилиты MAKE).
Если MAKE не обнаруживает файл с именем  MAKEFILE,  то  она  ищет
файл с именем MAKEFILE.MAK;  если она не может обнаружить ни ука-
занный файл,  ни файл с именем BUILTINS.MAK (который  описывается
ниже), она прекращает работу с выдачей сообщения об ошибке.

     Что нужно  сделать,  если вы хотите использовать файл с име-
нем,  отличным от MAKEFILE или  MAKEFILE.MAK?  Необходимо  задать
утилите MAKE параметр -f, например:

     make -fmyfile.mak

     Ниже приводится синтаксис вызова команды MAKE:

     make [параметр...][результат...]

     Здесь "параметр"  является параметром утилиты MAKE (они опи-
сываются далее), а "результат" представляет собой имя результиру-
ющего файла, который должен быть создан.

     Ниже описываются синтаксические правила вызова утилиты MAKE:

     - За словом make должен следовать пробел, а затем список па-
       раметров утилиты make.

     - Каждый параметр утилиты MAKE должен отделяться от соседних
       параметров пробелом. Параметры могут располагаться в любой
       последовательности;  может быть введено произвольное число
       этих  параметров  (ограничением  является  длина командной
       строки).  Все параметры,  которые не задают строку (напри-
       мер,  -s или -a) могут завершаться необязательным символом
       - или +.  При помощи этих символов указывается  выключение
       (-) или включение (+) данного параметра.

     - За списком параметров утилиты MAKE следует пробел, а затем
       необязательный список результирующих файлов.

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

           Примечание: Утилита  MAKE прекращает выполнение,  если
      какая-либо из выполняемых ею команд прекращает работу из-за
      нажатия комбинации клавиш Ctrl-Break.  Таким образом, нажа-
      тие комбинации клавиш Ctrl-Break приводит как к прекращению
      выполнения  текущей  программы,  так  и к завершению работы
      утилиты MAKE.

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

               Параметры командной строки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Далее приводится полный перечень параметров командной строки
утилиты MAKE.  Заметьте, что имеет значение регистр букв (верхний
или нижний); параметр -d не является допустимой заменой параметру
-D. Кроме того, для указания параметров можно задавать либо косую
черту (/), либо дефис (-).

               Таблица 2.1 Параметры утилиты MAKE
ЪДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПараметр    і  Действие                                        і
ГДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і-? или -h   іВыдает  информационное   сообщение.   Отображаютсяі
і            істандартные параметры,  за которыми  следует  знакі
і            іплюс.                                             і
і            і                                                  і
і-a          іОсуществляет проверку  зависимостей для  объектныхі
і            іфайлов.                                           і
і            і                                                  і
і-B          іОсуществляет полную перекомпиляцию всех  результи-і
і            ірующих файлов вне зависимости от дат создания фай-і
і            ілов.                                              і
і            і                                                  і
і-Dидентиф   іОпределяет названный идентификатор как строку, со-і
і            істоящую из единственного символа 1 (единица).     і
і            і                                                  і
і-Dидент=стр іОпределяет   названный  идентификатор  "иден"  какі
і            істроку "стр",  стоящую после знака равенства.  Этаі
і            істрока не может содержать ни пробелов,  ни  знакові
і            ітабуляции.                                        і
і            і                                                  і
і-fимя_файла іИспользует  "имя_файла"  в  качестве  формирующегоі
і            іфайла для утилиты MAKE. Если "имяфайла" не сущест-і
і            івует и не задано расширение имени файла, то утили-і
і            іта MAKE пытается найти файл FILENAME.MAK.         і
і            і                                                  і
і-i          іНе проверяет (игнорирует) код выхода всех выполня-і
і            іемых программ.  Продолжает  выполнение вне зависи-і
і            імости от кода выхода.  Это  эквивалентно  внесениюі
і            ізнака '-' перед всеми командами в формирующем фай-і
і            іле утилиты MAKE (описывается ниже).               і
і            і                                                  і
і-Iкаталог   іОсуществляет  поиск  файлов  включения в указанномі
і            ікаталоге (а также в текущем каталоге).            і
і            і                                                  і
і-K          іСохраняет (не  стирает) временные файлы, созданныеі
і            іутилитой MAKE.  Все временные файлы  имеют  форматі
і            іMAKEnnnn.$$$,  где   nnnn   лежит  в  диапазоне оті
і            і0000 до 9999.  Дополнительная информация о времен-і
і            іных файлах приводится в этой главе ниже.          і
і            і                                                  і
і-m          іВыводит дату и время для  каждого  обрабатываемогоі
і            іутилитой MAKE файла.                              і
і            і                                                  і
і-n          іОтображает команды,  но не выполняет их в действи-і
і            ітельности. Это оказывается  полезным  для  отладкиі
і            іформирующего файла для утилиты MAKE.              і
і            і                                                  і
і-p          іВыводит перед выполнением формирующего  файла  всеі
і            імакроопределения и неявные правила.               і
і            і                                                  і
і-r          іИгнорирует правила (если они имеются), заданные  ві
і            іфайле BULTINS.MAK.                                і
і            і                                                  і
і-s          іНе отображает команды перед их выполнением. Обычноі
і            іутилита MAKE отображает те команды, которые должныі
і            ібыть выполнены.                                   і
і            і                                                  і
і-S          іВыгружает утилиту  MAKE из  памяти при  выполненииі
і            ікоманд. Это  существенно  уменьшает  использованиеі
і            іпамяти утилитой MAKE, позволяя компилировать оченьі
і            ібольшие по размерам модули.                       і
і            і                                                  і
і-Uидентиф   іОтменяет все  заданные ранее  описания  названногоі
і            іидентификатора.                                   і
і            і                                                  і
і-W          іЗаносит в  файл MAKE.EXE  заданные в настоящий мо-і
і            імент нестроковые параметры (типа -s или -a).      і
АДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                    Файл BUILTINS.MAK
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Вы быстро обнаружите,  что существуют макрокоманды и правила
утилиты MAKE,  которые требуется использовать снова и снова.  Су-
ществует три способа их обработки:

     - Во-первых, вы можете заносить их в каждый создаваемый вами
       формирующий файл для утилиты MAKE;

     - Во-вторых,  вы можете занести все эти элементы в один файл
       и воспользоваться директивой !include в каждом создаваемом
       вами формирующем файле  утилиты  MAKE.  (Другие  директивы
       описываются далее в этой главе.);

     - В-третьих,  вы  можете  занести  все  эти  элементы в файл
       BUILTINS.MAK.

     Каждый раз,  когда вы запускаете утилиту MAKE, она ищет файл
с именем BUILTINS.MAK.  Однако, наличие файла BUILTINS.MAK не яв-
ляется обязательным. Если MAKE обнаруживает файл BUILTINS.MAK, то
сначала она интерпретирует этот файл.  Если утилита MAKE не может
обнаружить файл BUILTINS.MAK,  то она переходит непосредственно к
интерпретации файла MAKEFILE (или того формирующего файла утилиты
MAKE, который был вами задан с помощью параметра -f).

     Утилита MAKE сначала ищет файл BUILTINS.MAK в текущем  ката-
логе.  Если  он  отсутствует,  и вы работаете под управлением DOS
версии 3.0 или старше, то MAKE осуществляет поиск в том каталоге,
откуда была вызвана сама утилита MAKE.  Вам следует заносить файл
BUILTINS.MAK в тот же каталог, где находится файл MAKE.EXE.

     Утилита MAKE всегда осуществляет  поиск  формирующего  файла
только  в текущем каталоге.  Этот файл содержит правила для конк-
ретной создаваемой выполняемой программы.  Как файл BUILTINS.MAK,
так и формирующий файл подчиняются одинаковым синтаксическим пра-
вилам.

     Поиск файлов, задаваемых с помощью директивы !include, также
осуществляется  в текущем каталоге.  Если вы используете параметр
-I (файлы включения),  то она будет также выполнять поиск в ката-
логе, заданном с помощью параметра -I.

         Простой пример использования утилиты MAKE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В качестве  первого примера использования утилиты MAKE обра-
тимся к случаю,  который не связан с программированием. Предполо-
жим,  что  вы пишете книгу,  и предпочитаете хранить каждую главу
этой "рукописи" в отдельном файле. (Давайте в целях этого примера
предположим,  что ваша книга достаточно коротка: она содержит три
главы,  содержащиеся в файлах CHAP1.MSS,  CHAP2.MSS и CHAP3.MSS).
Для создания текущего проекта этой книги вы пропускаете каждую из
глав через программу форматирования с именем  FORM.EXE,  а  затем
пользуетесь командой COPY операционной системы DOS,  чтобы свести
результаты  форматирования в один файл,  содержащий ваш черновик,
например:

 CHAP1.MSS ННН>  FORM.EXE ННН>  CHAP1.TXT ї
                                          і
 CHAP2.MSS ННН>  FORM.EXE ННН>  CHAP2.TXT ЖНН> COPY ННН> Book.TXT
                                          і
 CHAP3.MSS ННН>  FORM.EXE ННН>  CHAP3.TXT Щ

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

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

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

     FORM CHAP1.MSS
     FORM CHAP2.MSS
     FORM CHAP3.MSS
     COPY /A CHAP1.TXT+CHAP2.TXT+CHAP3.TXT BOOK.TXT

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

     В такой  ситуации  на помощь может прийти утилита MAKE.  Вам
необходимо лишь создать файл (обычно с именем MAKEFILE), содержа-
щий указания для утилиты MAKE, от каких файлов зависит файл BOOK.
TXT,  и как их обрабатывать.  Этот файл будет содержать  правила,
которые объясняют, как создать файл BOOK.TXT при изменении каких-
либо файлов, от которых он зависит.

     В данном  примере  первым правилом в вашем формирующем файле
может быть следующее правило:

     book.txt: chaр1.txt chaр2.txt chaр3.txt
                  coрy /a chaр1.txt+chaр2.txt+chaр3.txt book.txt

     Что означают эти строки? Первая строка (начинающаяся с book.
txt:)  сообщает,  что  файл  BOOK.TXT зависит от форматированного
текста каждой из трех глав. Если какой-либо из файлов, от которых
зависит файл BOOK.TXT,  является более новым по сравнению с самим
файлом BOOK.TXT,  то утилита MAKE должна  будет  реконструировать
BOOK.TXT,  выполняя команду COPY,  которая находится на следующей
строке.

     Однако, этим все не исчерпывается. Каждый из файлов-глав за-
висит  от файла-манускрипта (рукописи) (файла с расширением имени
.MSS). Если  один из файлов CHAP?.TXT оказывается более старым по
сравнению с соответствующим файлом .MSS,  то необходимо  повторно
обработать файл .MSS. Таким образом, к формирующему файлу необхо-
димо добавить следующие строки:

     chaр1.txt: chaр1.mss
                form chaр1.mss

     chaр2.txt: chaр2.mss
                form chaр2.mss

     chaр3.txt: chaр3.mss
                form chaр3.mss

     Каждое из этих правил показывает,  как отформатировать (если
это  окажется необходимым) одну из глав оригинального файла руко-
писи.

     Утилита MAKE "понимает", что перед обновлением данного файла
она должна обновлять файлы, от которых зависит данный файл. Таким
образом,  если вы изменяете файл CHAP3.MSS, утилита MAKE оказыва-
ется достаточно "интеллектуальной", чтобы переформатировать главу
3 до того, как она приступит к объединению файлов .TXT для созда-
ния BOOK.TXT.

     Мы можем добавить к этому простому примеру одно дополнитель-
ное усовершенствование. Эти три правила почти ничем не отличаются
- в действительности они идентичны за исключением последнего сим-
вола в каждом из имен файлов. И, очевидно, что когда вы приступа-
ете к созданию новой главы,  очень легко можно забыть о необходи-
мости добавления нового правила.  Чтобы разрешить  эту  проблему,
утилита MAKE позволяет вам создавать так называемое "неявное пра-
вило",  которое показывает, как создавать один тип файла на осно-
вании другого, используя расширения имен файлов. В этом случае вы
можете заменить три правила для глав на одно неявное правило:

     .mss.txt:
          form $*.mss

     Фактически, данное  правило утверждает следующее:  "Если вам
необходимо сделать файл из файла .mss, чтобы поддерживать текущее
состояние информации,  то вот перечень необходимых действий". (Вы
по прежнему должны корректировать первое правило - то, при помощи
которого  создается  файл book.txt - чтобы утилита MAKE знала бы,
как сцеплять новые главы в результирующий файл. Данное правило, а
также другие последующие правила, используют макрокоманды. Описа-
ние макрокоманд приводится ниже.)

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

          Создание формирующих файлов утилиты MAKE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Создание программы  из набора программных файлов, включаемых
файлов, файлов заголовков, объектных файлов и так далее во многом
походит на только что рассмотренный пример обработки текстов. Ос-
новное отличие заключается в том, что вместо форматировщика текс-
та и команды COPY системы DOS используемые вами на разных стадиях
обработки команды будут вызывать препроцессоры,  компиляторы, ас-
семблеры и компоновщики. Давайте подробнее проанализируем процесс
создания формирующих файлов (или,  как их  еще  называют,  файлов
сборки) - тех файлов,  которые указывают программе MAKE,  как вы-
полнять обработку.

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

     Формирующий файл  можно  создать с помощью любого текстового
редактора,  который поддерживает формат ASCII, например, встроен-
ного редактора    интегрированной   среды,   редакторов   Sрrint,
MicroStar или SideKick.  Все правила, описания и директивы завер-
шаются концом строки. Если строка является слишком длинной, то вы
можете продолжить ее на следующей  строке,  поместив  на  текущей
строке в качестве последнего символа обратную косую черту (\).

     Для разделения соседних идентификаторов (например, при зада-
нии  последовательностей)  и для задания структурного отступа ко-
манд внутри правила следует  пользоваться  пробельными  символами
(пробелами и знаками табуляции).

              Компоненты формирующего файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Создание формирующего файла как правило аналогично написанию
программы, так как он содержит описания, команды и директивы. Да-
лее перечислены конструкции, которые допустимы в формирующем фай-
ле:

     * комментарии;

     * явные правила;

     * неявные правила;

     * макроопределения;

     * директивы:

          - директивы включения файлов;
          - директивы условного выполнения;
          - директивы обнаружения ошибок;
          - директивы отмены макроопределений.

     Рассмотрим подробно каждую из этих категорий.

                        Комментарии
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Комментарии начинаются с символа диеза (#); оставшуюся часть
строки, следующую за символом #, утилита MAKE игнорирует. Коммен-
тарии могут размещаться в  любом  месте  и  начинаться  с  любого
столбца.

     Обратная косая черта (\) не продолжает комментарий на следу-
ющей строке; вместо этого, на каждой последующей строке нужно ис-
пользовать  символ #.  Фактически,  в строке с комментарием вы не
можете использовать символ (\) в  качестве  символа  продолжения.
Если обратная косая черта предшествует знаку #, то она не являет-
ся больше последним символом в строке; если она следует за знаком
#, то является частью комментария.

     Ниже  приведены   некоторые  примеры  комментариев  в  файле
MAKEFILE:

# Файл описания для создаваемой книги

# Этот файл обновляет файл BOOK.TXT всякий раз, когда
# изменяется один из файлов .MSS

# Явно задаваемое правило для создания
# файла BOOK.TXT из шести глав. Обратите внимание на наличие
# строк продолжения

book.txt: chaр1.txt chaр2.txt chaр3.txt\
          chaр4.txt chaр5.txt chaр6.txt
          coрy /a chaр1.txt+chaр2.txt+chaр3.txt chaр4.txt+\
                  chaр5.txt+chaр6.txt book.txt

# Неявное правило для форматирования отдельных глав
.mss.txt:
     form $*.mss

           Примечание: Описание явных и неявных правил приводится
      после описания команд.

          Списки команд для явных и неявных правил
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Как явные,  так и неявные правила (описываемые  ниже)  могут
содержать  списки команд.  В данном разделе описывается,  как эти
команды обрабатываются программой MAKE.

     Команды в списке команд подчиняются следующим синтаксическим
правилам:

     [префикс...]тело_команды

     Каждая команда  в списке команд состоит из (необязательного)
списка префиксов, за которым следует тело единственной команды.

                         Префиксы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Префиксы, допустимые  в команде,  модифицирует интерпретацию
этих команд утилитой MAKE. Префиксом является либо символ @, либо
дефис (-), за которым непосредственно следует какое-либо число.

                Таблица 2.2 Префиксы утилиты MAKE
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПрефикс    і Его действие                                      і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і@          і Указывает утилите  MAKE, что  не  нужно отображатьі
і           і команды перед их выполнением.  Отображение не осу-і
і           і ществляется даже в том случае,  если  в  команднойі
і           і строке  утилиты MAKE не задается параметр -s. Этоті
і           і префикс применяется только к тем  командам,  переді
і           і которыми он указывается.                          і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і-num       і Оказывает влияние  на то, как утилита MAKE  интер-і
і           і претирует коды выхода.  Если  задается  какое-либоі
і           і число num,  то утилита MAKE  прекращает  обработкуі
і           і только  в  том случае,  если полученный код выходаі
і           і превышает заданное число.  В приведенном ниже при-і
і           і мере  утилита  MAKE прекращает работу только в томі
і           і случае, если код выхода превышает 4:              і
і           і                                                   і
і           і -4myрrog samрle.x                                 і
і           і                                                   і
і           і Если префикс -num не задается,  а код выхода явля-і
і           і ется ненулевым,  то утилита MAKE прекращает работуі
і           і и удаляет текущий результирующий файл.            і
і           і                                                   і
і           і Примечание: Коды выхода являются значениями, кото-і
і           і рые  возвращаются  выполняемыми  командами (внутриі
і           і программы).                                       і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і-          і Если задается  дефис, но не задается никакого чис-і
і           і ла, то  утилита MAKE совсем не будет проверять коді
і           і выхода.  Независимо от кода выхода выполнение ути-і
і           і литы MAKE будет продолжено.                       і
і           і                                                   і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                   Тело команды и операторы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Тело команды интерпретируется точно так, как если бы она бы-
ла введена в качестве командной строки в вызове  командного  про-
цессора COMMAND.COM за исключением того,  что символы конвейерной
обработки (|) не поддерживаются.

     В дополнение к операторам переназначения <,  > и >>, утилита
MAKE добавляет операции << и &&.  Эти операции для создания пода-
ваемых на вход команды данных создают в оперативном порядке файл.
Операция << создает временный файл и  переназначает  поток  стан-
дартного ввода команды таким образом, что он поступает из создан-
ного файла.  Если у вас имеется программа, которая допускает ввод
данных из потока stdin, то команда:

     MYPROG <
     #include "dcl.h"

     void myрrog() {}

     Если теперь  вы  вызовете утилиту MAKE,  задав следующую ко-
мандную строку:

    make -a myрrog.obj

то она  осуществит  проверку  даты  и  времени   создания   файла
MYPROG.C, а также файлов stdio.h и dcl.h.

                    Неявные правила
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита MAKE  позволяет  наряду  с явными правилами задавать
неявные правила. Неявные правила представляют собой обобщение яв-
ных правил;  они применяются ко всем файлам,  которые имеют соот-
ветствующие расширения имен файлов.

     Ниже приводится пример, который иллюстрирует отношение между
двумя правилами. Рассмотрим явное правило из предыдущего примера.
Данное правило является типичным,  поскольку оно  следует  общему
принципу:  объектный  файл  (с расширением имени .OBJ) зависит от
файла с тем же основным именем и расширением .C и создается путем
выполнения программы BCC.  Фактически,  можно создать формирующий
файл для утилиты MAKE,  который будет  содержать  несколько  (или
несколько  десятков) явных правил,  соответствующих одному и тому
же формату.

     Переписывая явное правило в виде неявного правила, вы можете
убрать все явные правила,  которые подчиняются одинаковому форма-
ту. Неявное правило будет иметь следующий вид:

     .c.obj:
        BCC -c $<

     Это правило означает следующее: "Любой файл с расширением .C
может  быть оттранслирован в файл с тем же основным именем и рас-
ширением .OBJ с  помощью  следующей  последовательности  команд".
Создание файла .OBJ происходит с помощью второй строки этого пра-
вила, где $< означает имя файла с расширением, присущим исходному
файлу  (.C).  (Символ  $< представляет макрокоманду особого вида.
Объяснение  макрокоманд  приводится далее.  Макрокоманда  $<  при
каждом  выполнении команды будет заменена полным именем соответс-
твующего исходного файла .C).

           Примечание: Идентификатор $< представляет собой специ-
      альную макрокоманду.  Макрокоманды обсуждаются ниже. Макро-
      команда $< при каждом выполнении команды  будет  заменяться
      полными именем соответствующего исходного файла .С.

     Ниже приводится синтаксис неявного правила:

   [{исходный_каталог}].исх_расшир.[{целевой_каталог}]цел_расшир:
          [команда]
          ...

     Как и ранее,  использование команды является необязательным.
Если  команда  используется,  то перед ней должны стоять один или
несколько символов пробелов.

     "Исх_расшир" (расширение  имени файла,  которое должно начи-
наться точкой в столбце 1) представляет  собой  расширение  имени
исходного файла;  то есть,  оно относится к любому файлу, который
имеет следующий формат:

     имя_файла.исх_расшир

     Аналогично, "цел_расшир" относится к файлу, который удовлет-
воряет спецификации:

     имя_файла.цел_расшир

     Здесь "имя_файла" является одинаковым для обоих файлов. Дру-
гими словами,  данное неявное правило заменяет все явные правила,
которые соответствуют следующему формату:

     имя_файла.исх_расшир:имя_файла.цел_расшир
       [команда]
     ...

для любого имени файла.

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

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

     Предположим, например,  что у вас имеется  формирующий  файл
утилиты MAKE (с именем MAKEFILE),  который имеет следующее содер-
жимое:

     c.obj:
       BCC -c $<

     Если у вас имеется  написанная  на  Си  программа  с  именем
RATIO.C, которую вы хотите скомпилировать в файл RATIO.OBJ, то вы
можете воспользоваться командой:

     make ratio.obj

     Утилита MAKE  будет  рассматривать файл RATIO.OBJ в качестве
результирующего файла. Поскольку явное правило для создания файла
RATIO.OBJ не существует, утилита MAKE применяет неявное правило и
генерирует следующую команду:

     BCC -c ratio.c

которая, естественно,  выполняет компиляцию  для  создания  файла
RATIO.OBJ.

     Утилита MAKE использует неявные правила и в том случае, ког-
да ей задаются явные правила, не сопровождающиеся никакими коман-
дами.  Предположим, что в начале файла описания вы задали следую-
щее неявное правило:

     .c.obj:
        BCC -c $<

     Если это правило задано, вы можете удалить команду из приве-
денного ниже явного правила:

     myрrog.obj: myрrog.c include\stdio.h
                 BCC -c myрrog.c

     Процесс обработки будет прежним.

     Если вы используете систему Borland C++ и разрешаете утилите
MAKE выполнять автоматическую проверку  зависимостей,  вы  можете
удалить все явно заданные зависимости,  в которых объектные файлы
указываются в качестве результирующих. Если задана автоматическая
проверка зависимостей,  и используются неявные правила, то предс-
тавленный в начале раздела по явным правилам пример с тремя  пра-
вилами превращается в следующий:

     c.obj:
       BCC -c $<

     рrog.exe: myрrog.obj рrog2.obj
               tlink lib\c0s myрrog рrog2, рrog, ,lib\cs

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

           Примечание: При  использовании параметра совместимости
      -N поиск выполняется в обратном направлении - от конца фор-
      мирующего файла к его началу.

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

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

                         Макрокоманды
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Часто вы обнаруживаете, что в файле описания вы снова и сно-
ва используете определенные команды,  имена файлов или параметры.
Например, если вы создаете программу на Cи,  в которой  использу-
ется средняя модель памяти,  то во всех вызовах команды BCC будет
использоваться  параметр  -mm,  который  означает  компиляцию   с
использованием средней модели памяти.  Однако,  предположим,  что
возникла необходимость перейти к большой модели памяти. Вы можете
просмотреть весь  формирующий файл и заменить все случаи употреб-
ления параметра -mm на параметр -ml. Альтернативный путь заключа-
ется в том, чтобы описать макрокоманду.

     Макрокомандой называется некоторое имя, которое представляет
собой строку символов. Макроопределение задает имя макрокоманды и
расширяющий ее текст; когда впоследствии утилита MAKE обнаружива-
ет имя этой макрокоманды, она заменяет это имя на текст макрорас-
ширения.

     Предположим, что вы задали в начале формирующего файла  сле-
дующую макрокоманду:

     MODEL = m

     Данная строка определяет макрокоманду MODEL,  которая теперь
становится эквивалентной строке m. Используя эту макрокоманду, вы
можете  записывать каждую команду вызова компилятора Си следующим
образом:

     BCC -c -m$(MODEL) myрrog.c

     Когда вы запускаете утилиту  MAKE,  каждая  макрокоманда  (в
данном случае $(MODEL)) будет заменяться раскрывающим его текстом
(в данном случае m). В действительности будет выполняться следую-
щая команда:

     BCC -c -mm myрrog.c

     Теперь смена  модели  памяти будет происходить без затрудне-
ний. Если вы замените первую строку на:

     MODEL = l

то вы модифицируете все команды таким образом, чтобы теперь будет
использоваться большая модель памяти. В действительности, если вы
совсем выбросите первую строку,  то при  каждом  запуске  утилиты
MAKE используемую модель памяти можно задавать с помощью парамет-
ра командной строки -D (описать):

     make -DMODEL = l

     Данная командная строка указывает утилите  MAKE,  что  слово
MODEL  нужно интерпретировать как имя макрокоманды с текстом мак-
рорасширения l.

                   Определение макрокоманд
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Макроопределение имеет следующую форму:

     имя_макрокоманды = текст_макрорасширения

     Здесь "имя_макрокоманды" представляет имя данной макрокоман-
ды. "Имя_макрокоманды" должно являться строкой из букв и цифр, не
содержащей символов пробела,  хотя пробелы между "именем_макроко-
мандЫ" и знаком равенства (=)  допустимы. "Текст_макрорасширения"
представляет собой произвольную строку,  содержащую буквы, цифры,
символы пробела и знаки пунктуации. Эта строка завершается симво-
лом перехода на новую строку.

     Если "имя_макрокоманды"  уже  было  определено ранее (либо с
помощью макроопределения в формирующем файле,  либо с помощью па-
раметра -D командной строки утилиты MAKE), то новое описание мак-
рокоманды заменяет старое.

     При задании макрокоманд регистр букв учитывается;  то  есть,
model, Model и MODEL определяют разные макрокоманды.

               Использование макрокоманд
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При вызове макрокоманды в формирующем  файле  должен  соблю-
даться следующий формат:

     $(имя_макрокоманды)

     Круглые скобки  должны использоваться во всех случаях вызова
макрокоманд,  даже в том случае, если имя макрокоманда состоит из
единственной буквы (за исключением предопределенных макрокоманд).
Данная конструкция -  $(имя_макрокоманды)  -  называется  вызовом
макрокоманда.

     Когда утилита MAKE обнаруживает вызов макрокоманды,  она за-
меняет ее на текст,  раскрывающий макрокоманду (текст макрорасши-
рения). Если текст макрорасширения не определен, то MAKE заменяет
ее пустой (нулевой) строкой.

   Использование в качестве макрокоманд переменных среды
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если вы вызываете макрокоманду, для которой "имя_макрокоман-
ды" еще не определено в формирующем файле или в командной строке,
утилита MAKE  будет пытаться найти "имя_макрокоманды",  как пере-
менную операционной среды DOS.  Если MAKE находит ее в операцион-
ной среде,  то  текстом макрорасширения будет значение этой пере-
менной операционной среды.

     Если не был задан параметр -e, то макрокоманды, определенные
в формирующем файле или в командной строке,  переопределяют пере-
менные операционной среды с тем же именем.

               Подстановки с помощью макрокоманд
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Используя специальный формат вызова макрокоманды,  вы можете
вызвать макрокоманду,  изменив ее текст. Вместо стандартной формы
вызова используйте следующую:

     $(имя_макрокоманды:текст_1=текст_2)

     При использовании такой формы вызова каждое вхождение в мак-
рокоманду "текста_1" будет заменяться "текстом_2".  "Имя_макроко-
манды'" может быть одной из предопределенных макрокоманд. Это по-
лезно использовать,  если   вы   предпочитаете   использовать   в
макрокоманде один список файлов.В приведенном ниже примере макро-
команда SOURCE содержит список файлов C++, от которых зависит це-
левой файл.  Командная  строка TLINK изменяет все расширения .CPP
на соответствующие расширения .OBJ объектных файлов  и  компонует
их.

     SOURCE = f1.cpp f2.cpp f3.cpp

     myapp.exe: $(SOURCE)
        bcc -c $(SOURCE)
        tlink c0s $(SOURCE:.cpp=.obj),myapp,,cs

           Примечание: Между :  и = не нужно включать лишних про-
      белов.  Если после двоеточия указывается пробел, MAKE будет
      пытаться найти строку, включающую предшествующий пробел.

                     Особые ситуации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

                  Макрокоманда в макрокоманде

      Макрокоманда не может вызываться в левой части ("имя_макро-
команды")  макроопределения.  Макрокоманды могут использоваться в
правой части ("текст_макрорасширения"),  но их раскрытие не будет
осуществляться  до  тех пор,  пока описанный макрокоманд не будет
вызван.  Другими словами, когда осуществляется раскрытие макрооп-
ределения,  будет также осуществляться  расширение  всех макроко-
манд, вложенных в раскрывающий текст.

                     Макрокоманда в правилах

     Вызов макрокоманд в строках правил  раскрывается немедленно.

                    Макрокоманды в директивах

     Вызовы макрокоманд в директивах !if и !elif раскрываются не-
медленно. Если вызываемая в директивах !if или !elif макрокоманда
в данный момент не определена,  то она расширяется в  значение  0
(ложно).

                     Макрокоманды в командах

     Вызовы макрокоманд  в  командах  раскрываются при выполнении
команд.

               Предопределенные макрокоманды
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита MAKE  содержит в себе несколько специальных встроен-
ных макрокоманд:  $d, $*, $<, $:, $. и $&. Первая из них осущест-
вляет  проверку  на существование макрокоманды с заданным именем.
Он используется в директивах !if и !elif.  Остальные представляют
собой  макрокоманды  имен файлов,  используемые в явных и неявных
правилах.  В дополнение к этому, в качестве макрокоманд автомати-
чески загружаются строки установленной к настоящему моменту среды
DOS (строки,  которые можно просматривать и задавать в DOS с  по-
мощью команды SET). Наконец, в MAKE определяются несколько макро-
команд, показанных в Таблице 2.3.

    Таблица 2.3 Предопределенные макрокоманды утилиты MAKE
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і__MSDOS__  і   Имеет значение 1, если MAKE выполняется в DOS.  і
і           і                                                   і
і__MAKE__   і   Номер версии MAKE в шестнадцатиричном виде (для і
і           і   данное версии "Ox0360").                        і
і           і                                                   і
іMAKE       і   Имя выполняемого  файла  MAKE ( обычно MAKE или і
і           і   MAKER.                                          і
і           і                                                   і
іMAKEFLAG   і   Все параметры, используемые в командной строке  і
і           і   утилиты MAKE.                                   і
і           і                                                   і
іMAKEDIR    і   Каталог, из которого запущена утилита MAKE.     і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

              Таблица 2.4 Макрокоманды утилиты MAKE
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іМакрокоман-і Действие                                          і
іда         і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і$d         і Макрокоманда проверки макроопределения.           і
і           і                                                   і
і$*         і Макрокоманда  основного имени файла с именем марш-і
і           і рута.                                             і
і           і                                                   і
і$<         і Макрокоманда  полного имени файла с именем маршру-і
і           і та.                                               і
і           і                                                   і
і$:         і Макрокоманда только имени маршрута.               і
і           і                                                   і
і$.         і Макрокоманда полного имени файла без имени маршру-і
і           і та.                                               і
і           і                                                   і
і$&         і Макрокоманда основного имени файла без имени марш-і
і           і рута.                                             і
і           і                                                   і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

           Макрокоманда проверки макроопределения ($d)

     Макрокоманда проверки макроопределения ($d)  раскрывается  в
1,  если указанное макроопределение задано,  или в 0, если оно не
задано.  Содержимое текста макрорасширения не имеет значения. Эту
специальную  макрокоманду  можно использовать только в директивах
!if и !elif.

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

         !if !$d(MODEL)           # Если макрокоманда MODEL не
         MODEL =m                 # задана, определить ее
         !endif                   # как m (MEDIUM)

     Если затем  вы вызовете  утилиту MAKE  с заданием командной
строки:

         make -DMODEL=l

то макрокоманд MODEL расширяется в строку l.  Однако, если вы вы-
зовете утилиту MAKE саму по себе:

         make

то макрокоманда  MODEL будет определена как m (ваша "стандартная"
модель памяти).

                   Макрокоманды имен файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Аналогичным образом  работают  различные  макрокоманды  имен
файлов.  При расширении они дают некоторую разновидность  полного
имени маршрута создаваемого файла.

             Макрокоманда основного имени файла ($*)

     Макрокоманду основного имени файла ($*) можно использовать в
командах для явного или неявного правила.  Эта макрокоманда  ($*)
расширяется  в  имя создаваемого файла (исключая расширение имени
файла), например:

     Имя файла A:\P\TESTFILE.C
     Макрокоманда $* расширяется в A:\P\TESTFILE

     Например, вы можете модифицировать следующее  явное правило:

     рrog.exe: myрrog.obj рrog2.obj
           tlink lib\c0s myрrog рrog2, рrog, , lib\cs

чтобы оно приняло следующий вид:

     рrog.exe: myрrog.obj рrog2.obj
           tlink lib\c0s myрrog рrog2, $*, , lib\cs

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

     Например, неявное правило может выглядеть следующим образом:

     c.obj:
         BCC -c $*

              Макрокоманда полного имени файла ($<)

     Макрокоманд полного  имени  файла  ($<) также используется в
командах для явных или неявных правил.  В явном правиле  макроко-
манд  $<  раскрывается в полное результирующее имя файла (включая
расширение имени файла), например:

     Имя файла A:\P\TESTFILE.C
     Макрокоманда $< расширяется в A:\P\TESTFILE.C

     Например, представленное ниже правило:

     mylib.obj: mylib.c
                coрy $< \oldobjs
                BCC -c $*

перед компиляцией  файла  файла MYLIB.C копирует файл MYLIB.OBJ в
каталог \OLDOBJS.

     В неявном правиле макрокоманда $< превращается в  имя файла,
плюс расширение исходного файла. Например, неявное правило:

     .c.obj:
           BCC -c $*.c

приводит в точности к тому же результате, что и правило:

     .c.obj:
           BCC -c $<.c

поскольку расширением имени результирующего файла должно быть .C.

             Макрокоманда только имени маршрута ($:)

     Эта макрокоманда  расширяется  в  имя маршрута (но без имени
файла), например:

     Имя файла A:\P\TESTFILE.C
     Макрокоманда $: расширяется в A:\P\

       Макрокоманда полного имени файла с расширением ($.)

     Эта макрокоманда расширяется  в имя файла с расширением,  но
без имени маршрута:

     Имя файла A:\P\TESTFILE.C
     Макрокоманда $. расширяется в TESTFILE.C

               Макрокоманда только имени файла ($&)

     Эта макрокоманда  расширяется в имя файла без имени маршрута
или расширения имени файла, например:

     Имя файла A:\P\TESTFILE.C
     Макрокоманда $& расширяется в TESTFILE

       Полное имя целевого файла с макрокомандой маршрута ($@)

     Эта макрокоманда расширяется в полное имя целевого  файла  с
именем маршрута и расширения имени файла, например:

     Имя файла A:\P\TESTFILE.C
     Макрокоманда $@ расширяется в A:\P\TESTFILE.C

     Макрокоманда $@ аналогична макрокоманде $<, но $@ расширяет-
ся в полное имя как в явных,  так и в неявных правилах (в имя це-
левого файла в явных правилах и в имя файла зависимостей в  неяв-
ном правиле).
            Макрокоманда всех зависимых файлов ($**)

     Макрокоманда всех  зависимых  файлов  ($**)  в явном правиле
расширяется во все имена файлов,  зависящих  от  целевого  файла.
Например, в  следующем явном правиле $** будет заменяться именами
файлов myprog.obj и prog2.obj, которые зависят от prog.exe:

     prog.exe: myprog.obj prog2.obj
         tlink lib\c0-s $**, $*, , lib\cs

      Макрокоманда всех "устаревших" зависимых файлов ($?)

     В явном правиле данная макрокоманда расширяется во все имена
"устаревших" файлов,  зависящих от целевого файла,  которые будут
содержать полное  имя файла и расширения.  "Устаревшие" зависимые
файлы - это файлы, которые были модифицированы со времени послед-
него создания целевого файла.  Таким образом, в следующем примере
явного правила макрокоманда $? будет заменяться именами f1.cpp и/
или f2.cpp, в зависимости от даты изменения файла:

     mylib.lib: f1.cpp f2.cpp
        bcc -c $?
        &tlib mylib -+(?:.cpp=.obj)

     Заметим, что использование префикса & позволяет утилите MAKE
повторять команду для каждого зависимого файла с  устаревшей  да-
той.

                  Модификаторы макрокоманд
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     $(макрокоманда[D і F і B і R])

где "макрокоманда"  -  одна из предопределенных макрокоманд имени
файла, а R,  B, D и F - модификаторы. Заметим, что поскольку мак-
рокоманда теперь  имеет  длину более  одного символа,  необходимы
круглые скобки.  Каждый из  модификаторов описывается в следующей
таблице. В    примерах    предполагается,   что   $<   возвращает
C:\OBJS\BOB.OBJ.

        Таблица 2.5 Модификаторы макрокоманд утилиты MAKE
ЪДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДї
і Модификатор і Какую часть имени файла     і Пример            і
і             і он определяет               і                   і
ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДґ
і    D        і Диск и каталог.             і $( 5
          какие-либо правила
      !else
           другие правила
      <конец файла>

     Еще один способ определения  макрокоманды предоставляет  ди-
ректива   !ifdef.   Директива   !ifdef   MACRO  эквивалентна  !if
$d(MACRO).  Это верно  также  для  директивы  !ifndef:  директива
!ifdef MACRO эквивалентна !if $d(MACRO).

   Выражения, допустимые в директивах условного выполнения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В директивах !if и !elif возможно задание выражений; они ис-
пользуют синтаксис,  присущий языку Cи. Выражение вычисляется как
обычное 32-битовое целое со знаком.

     Вы можете вводить числа  как  десятичные,  восьмеричные  или
шестнадцатеричные константы.  Если  вы знаете язык Си,  то вы уже
знаете, как нужно задавать константы утилите MAKE: форматы одина-
ковы.  Если вы программируете на ассемблере или на Турбо Паскале,
то рекомендуем вам внимательно проанализировать приведенные  ниже
примеры. Ниже приводятся допустимые для утилиты MAKE константы:

4536           # десятичная константа

0677           # восьмеричная константа (различается по начально-
               му нулю)

0x23aF         # шестнадцатеричная  константа (различается по на-
               чальной последовательности 0x)

     В выражении может использоваться любой из представленных ни-
же знаков операций:

                Таблица 2.7 Операторы утилиты MAKE
ЪДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іОператорі    Операция                                          і
ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і        і Символы унарных операций:                            і
і        і                                                      і
і-       і    унарный минус                                     і
і        і                                                      і
і~       і    побитовое дополнение (инверсия всех битов)        і
і        і                                                      і
і!       і    логическое отрицание  NOT (0, если операнд ненуле-і
і        і    вой, 1 - в противном случае)                      і
і        і                                                      і
і        і Символы бинарных операций:                           і
і        і                                                      і
і+       і    сложение                                          і
і        і                                                      і
і-       і    вычитание                                         і
і        і                                                      і
і*       і    умножение                                         і
і        і                                                      і
і/       і    деление                                           і
і        і                                                      і
і%       і    остаток                                           і
і        і                                                      і
і>>      і    сдвиг вправо                                      і
і        і                                                      і
і<<      і    сдвиг влево                                       і
і        і                                                      і
і&       і    поразрядное И (AND)                               і
і        і                                                      і
і|       і    поразрядное ИЛИ (OR)                              і
і        і                                                      і
і^       і    поразрядное исключающее ИЛИ (XOR)                 і
і        і                                                      і
і&&      і    логическое И (AND)                                і
і        і                                                      і
і||      і    логическое ИЛИ (OR)                               і
і        і                                                      і
і>       і    больше чем                                        і
і        і                                                      і
і"       і    меньше чем                                        і
і        і                                                      і
і>=      і    больше либо равно                                 і
і        і                                                      і
і"=      і    меньше или равно                                  і
і        і                                                      і
і==      і    равенство                                         і
і        і                                                      і
і!=      і    неравенство                                       і
і        і Символ тернарной операции:                           і
і        і                                                      і
і?:      і    Операнд перед  знаком ? рассматривается как тесто-і
і        і    вый.                                              і
АДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Символы операций имеют тот же самый приоритет, что и в языке
Си.  Для  группирование  операндов в выражении можно использовать
круглые скобки.  В отличие от языка Си утилита MAKE может сравни-
вать строки с помощью обычных операций ==,  !=,  <,  >,  >= и =>.
Числовые (например,  + или *) операции со  строками  использовать
нельзя.

     Строковые выражения могут содержать пробелы,  но в этом слу-
чае их нужно заключать в кавычки:

     Model = "Medium model"
     .
     .
     .
     !if $(Model) == "Medium model"
       CFLAG = -mm
     !elif $(Model) == "Large model"
       CFLAG = -m1
     !endif

     Вы можете вызвать макрокоманды в выражении;  будет распозна-
ваться специальная макрокоманда $d().  После того,  как произошло
расширение всех макрокоманд, синтаксис выражения должен соответс-
твовать установленным требованиям.

               Директива Error (Ошибка)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Директива выдачи сообщения об ошибке (!error) указывает ути-
лите MAKE,  что нужно прервать выполнение и отобразить диагности-
ческое  сообщение  о неисправимой ошибке,  содержащее текст после
директивы !error. Данная директива имеет формат:

     !error произвольный_текст

     Данная директива предназначена для включения в директивы ус-
ловного выполнения,  чтобы заданное пользователем условие опреде-
ления ошибки могло бы прервать выполнение утилиты MAKE. Например,
вы можете вставить перед первым явным правилом следующий код:

     !if !$d(MODEL)
     # если MODEL не определена
     !error MODEL не определена
     !endif
     Если при  подходе к данной точке директива MODEL еще не была
определена, то  утилита MAKE прекращает выполнение с выдачей сле-
дующего сообщения об ошибке:

     Fatal makefile 4: Error directive: MODEL не определена

           Директива отмены макроопределения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Директива отмены макроопределения (!undef) указывает на  не-
обходимость отмены любого определения для заданного макрокоманда.
Если в настоящий момент данная макрокоманда не определен, то дан-
ная  директива  действовать  не будет.  Директива имеет следующий
синтаксис:

     !undef имя_макрокоманды

              Параметр совместимости -N
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр командной  строки  -N  увеличивает  совместимость с
утилитой фирмы Microsoft NMAKE. Его следует использовать только в
том случае,  если вам требуется построить проект с использованием
формирующих файлов, созданных для утилиты NMAKE. Предпочтительнее
запускать утилиту MAKE без параметра -N,  так как данный параметр
вносит в утилиту MAKE некоторые трудноуловимые отличия:

     - $$ расширяется в один символ $, а $ расширяется в "пусто".

     - Символ каре (^) приводит к литеральной обработке последую-
       щего символа,  если это специальный символ. Например, мак-
       рокоманда:

         TEST = this is ^
         a test

       приведет к тому,  что TEST будет расширяться в this is \na
       test, где \n - это символ языка Си перевода на новую стро-
       ку. Это особенно полезно, когда вам нужно закончить строку
       символом продолжения строки:

         SOURCEDIR = C:\BOB\OBJ^\

     - Если за символом каре следует обычный символ  (не  имеющий
       специального значения), то символ каре игнорируется.

     - Макрокоманда $d не будет специально определяемой текстовой
       макрокомандой. Используйте вместо нее директивы  !ifdef  и
       !ifndef.

     - Предопределенные макрокоманды, которые возвращают маршрут,
       не будут заканчиваться обратной  косой  чертой.  Например,
       без  параметра  -N  переключатель  $(іC0F   модуль инициализации для выполняемых программ DOS,
C0WіC0D  выполняемых  программ для DOS, написанных для дру-
               гих компиляторов,  прикладных программ для Windows
               или DLL (необходимо выбрать один из них) с моделя-
               ми памяти t (только для DOS),  s,  c,  m,  l или h
               (только для DOS).

IMPORT         библиотека импорта  Windows;  библиотека,  которая
               предоставляет доступ    к    встроенным   функциям
               Windows.

OVERLAY        библиотека администратора оверлеев; необходима то-
               лько для программ с оверлейной структурой (не сов-
               местимо с Windows).

CWx            библиотека поддержки для выполняемых  программ для
               Windows с моделями памяти s, c, m, l или h.

MATHx          математическая библиотека для моделей памяти s, c,
               m, l или h.

EMUіFP87       библиотеки математики с плавающей  точкой (необхо-
               димо выбрать одну из них.

Cx             библиотека  поддержки для модели памяти s, c, m, l
               или h.

                    Код инициализации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Модули инициализации имеют имена C0x.OBJ, C0Wx.OBJ или C0Dx.
OBJ (для прикладных программ для DOS,  Windows и DLL Windows, со-
ответственно),  где x представляет единственную букву,  соответс-
твующую  модели памяти:  t (только для DOS),  s,  c,  m,  l или h
(только для DOS).

     Модули C0Fx.OBJ  поставляются  для совместимости с исходными
файлами,  предназначенными для компиляторов других  фирм.  Модули
C0Fx.OBJ заменяют модули C0x.OBJ;  они компонуются только с прик-
ладными программами для DOS,  но не с прикладными программами для
Windows  и DLL.  Эти модули инициализации изменяют модель памяти,
так что сегмент стека находится в сегменте данных.  В случае  ис-
пользования параметра командной строки -Fs или -Fm, соответствую-
щие модули C0Fx.OBJ будут использоваться автоматически.

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

     Кроме того,  имя модуля  инициализации должно  указываться в
качестве первого  имени объектного файла в списке. Модуль инициа-
лизации устанавливает  порядок расположения в программе различных
сегментов. Если этот модуль задается не первым, то порядок распо-
ложения сегментов в памяти может оказаться неверным, что приводит
к некоторым скрытым ошибкам в программе.

     Проверьте, что  в командной строке утилиты TLINK явно задано
имя файла .EXE. В противном случае, программа получит имя C0x.EXE
- то есть, не то имя, которое предполагалось вами.

                         Библиотеки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Очень важным является порядок  расположения  имен  объектных
файлов и файлов библиотек. Первым в списке объектных файлов всег-
да должен следовать модуль стартового кода Borland  C++ (C0x.OBJ,
C0Fx.OBJ,  C0Wx.OBJ или C0Dx.OBJ).  Тогда список файлов библиотек
должен содержать в указанном порядке следующее:

     - ваши собственные библиотеки (если таковые имеются);

     - если вы хотите,  чтобы  ваша  программа  имела  оверлейную
       структуру  (программа  только для DOS),  вы должны указать
       при  компоновке  библиотеку  OVERLAY.LIB;  эта  библиотека
       должна предшествовать библиотеке Cx.LIB.

     - библиотеку FP87.LIB или EMU.LIB (которая необходима только
       для DOS), за которой следует библиотека MATHx.LIB (которая
       необходима для DOS и для Windows)

     - CWINx.LIB, если вы хотите выполнять программу в Windows

     - библиотеку  Cx.LIB  (файл стандартной библиотеки поддержки
       системы Borland C++).

       Математические библиотеки следует компоновать перед библи-
       отекой исполняющей системы.

     Если вы хотите создать для Windows прикладную программу  или
DLL, то  для предоставления доступа к встроенным функциям Windows
необходимо прикомпоновать библиотеку IMPORT.LIB. IMPORT.LIB может
включаться  в любое месте списка.  Если вы используете какие-либо
графические функции системы Borland C++,  то нужно прикомпоновать
файл  GRAPHICS.LIB.  Графическая библиотека не зависит от моделей
памяти, но предназначена только для DOS (не для Windows).
     Если в вашей программе используются операции над  числами  с
плавающей точкой, то в команде компоновки нужно указать математи-
ческую библиотеку (MATHx.LIB).  Для прикладных программ  для  DOS
(но  не для прикладных программ для Windows и DLL) вам необходимо
включить  одну  из  библиотек  математики  с   плавающей   точкой
(FP87.LIB  или  EMU.LIB).  Две  библиотеки математики с плавающей
точкой, имеющиеся в системе Borland C++, не зависят от используе-
мой в программе модели памяти.

     - Если  вы  хотите включить логику эмуляции плавающей точки,
       то нужно использовать библиотеку EMU.LIB.  В  этом  случае
       ваша программа будет работать вне зависимости от наличия в
       ней математического сопроцессора 80x87).

     - Если вы знаете,  что программа всегда будет выполняться на
       машине с математическим сопроцессором,  то задание библио-
       теки FP87.LIB приведет к созданию более компактной и более
       быстрой программы.

     Математические библиотеки имеют имя MATHx.LIB,  где x предс-
тавляет собой единственную  букву,  соответствующую  используемой
модели памяти:  s,  c,  m,  l, h (крохотная и малая модели памяти
совместно используют библиотеку MATHS.LIB).

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

     Всегда нужно указывать ту библиотеку поддержки языка Си, ко-
торая соответствует используемой в программе модели памяти.  Биб-
лиотеки поддержки языка Си имеют общее имя Cx.LIB, где, как и вы-
ше, x представляет единственную букву, соответствующую модели па-
мяти. Для выполняемых файлов DOS и Windows нужно использовать од-
ну и ту же библиотеку поддержки языка Си.
           Примечание: Если  вы  не  собираетесь использовать все
      шесть моделей памяти,  можно хранить файлы библиотек только
      для тех моделей памяти, которые используются реально.

     Ниже приводится  перечень файлов библиотек,  необходимых для
каждой из моделей памяти (вам может также потребоваться библиоте-
ка FP87.LIB или EMU.LIB для DOS и IMPORT.LIB для Windows):

     Таблица 4.2 Файлы .OBJ и .LIB прикладных программ для DOS
ЪДДДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДї
іМодель      іОбычный   іЭмуляционный іМатематическаяіБиблиотекаі
і            істартовый істартовый    ібиблиотека    іподдержки і
і            імодуль    імодуль       і              і          і
ГДДДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДґ
іКрохотная   іC0T.OBJ   іC0FT.OBJ     іMATHS.LIB     іCS.LIB    і
іМалая       іC0S.OBJ   іC0FS.OBJ     іMATHS.LIB     іCS.LIB    і
іКомпактная  іC0C.OBJ   іC0FC.OBJ     іMATHC.LIB     іCC.LIB    і
іСредняя     іC0M.OBJ   іC0FM.OBJ     іMATHM.LIB     іCM.LIB    і
іБольшая     іC0L.OBJ   іC0FL.OBJ     іMATHL.LIB     іCL.LIB    і
іОгромная    іC0H.OBJ   іC0FH.OBJ     іMATHH.LIB     іCH.LIB    і
АДДДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДЩ

 Таблица 4.3 Файлы .OBJ и .LIB прикладных  программ для Windows
ЪДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДї
іМодель     іСтартовый  іБиблиотека   іМатематическаяіБиблиотекаі
і           імодуль для іподдержки    ібиблиотека    іподдержки і
і           іприкладных іWindows      і              і          і
і           іпрограмм   і             і              і          і
ГДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДґ
іМалая      іC0WS.OBJ   іC0WINC.OBJ   іMATHS.LIB     іCS.LIB    і
іКомпактная іC0WC.OBJ   іC0WINC.OBJ   іMATHC.LIB     іCC.LIB    і
іСредняя    іC0WM.OBJ   іC0WINL.OBJ   іMATHM.LIB     іCM.LIB    і
іБольшая    іC0WL.OBJ   іC0WINL.OBJ   іMATHL.LIB     іCL.LIB    і
АДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДЩ

           Примечание: Заметим,  что крохотная и малая модели ис-
      пользуют одни и те же библиотеки,  но имеют различные стар-
      товые файлы (файлы инициализации) C0T.OBJ и C0S.OBJ.

           Таблица 4.4 Файлы .OBJ и .LIB библиотек DLL
ЪДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДї
іМодель     іСтартовый  іБиблиотека   іМатематическаяіБиблиотекаі
і           імодуль для іподдержки    ібиблиотека    іподдержки і
і           іDLL        іWindows      і              і          і
ГДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДґ
іМалая      іC0DS.OBJ   іC0WINC.OBJ   іMATHS.LIB     іCS.LIB    і
і           і           і             і              і          і
іКомпактная іC0DC.OBJ   іC0WINC.OBJ   іMATHC.LIB     іCC.LIB    і
і           і           і             і              і          і
іСредняя    іC0DM.OBJ   іC0WINL.OBJ   іMATHM.LIB     іCM.LIB    і
і           і           і             і              і          і
іБольшая    іC0DL.OBJ   іC0WINL.OBJ   іMATHL.LIB     іCL.LIB    і
АДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДЩ

           Примечание: Более подробная информация по  DDL  приво-
      дится  в  Главе 8 "Построение прикладной программы Windows"
      "Руководства программиста".

        Использование утилиты TLINK с программой BCC
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В качестве интерфейса с TLINK можно также использовать прог-
рамму BCC, автономный компилятор системы Borland C++, который бу-
дет вызывать TLINK с заданием компоновщику  соответствующих  имен
файла стартового кода, библиотек и имени выполняемой программы.

           Примечание: Дополнительная  информация  по компилятору
     командных строк приводится в Главе 4,  "Руководства програм-
     миста" "Компилятор, работающий в режиме командной строки".

     Для этого  в  командной строке компилятора BCC нужно указать
имена файлов с указанием расширений .OBJ и .LIB.  Если, например,
будет задана командная строка BCC:

     BCC -mx mainfile.obj sub1.obj mylib.lib

то компилятор BCC вызовет утилиту TLINK с заданием ей имен файлов
C0x.OBJ, EMU.LIB, MATHx.LIB и Cx.LIB (модуль инициализации, стан-
дартная  библиотека  эмуляции  сопроцессора 8087,  математическая
библиотека и библиотека поддержки для модели памяти  x).  Утилита
TLINK   скомпонует  эти  файлы  с  вашими  собственными  модулями
MAINFILE.OBJ и SUB1.OBJ,  а также вашей  собственной  библиотекой
MYLIB.LIB.

     Для компиляции  и  компоновки программ Windows укажите в ко-
мандной строке компилятора один из параметров -W (наряду с други-
ми  параметрами).  Компилятор  позаботится о компоновке C0Wx.OBJ,
CWx.LIB и IMPORT.LIB.

     Когда BCC вызывает TLINK,  по умолчанию она использует пара-
метр /c (компоновка с различием регистра букв).  Этот принимаемый
по умолчанию параметр можно переопределить, задав -l -c.

                Параметры компоновщика TLINK
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметры компоновщика TLINK могут  располагаться  в  произ-
вольном  месте  командной строки.  Эти параметры состоят из косой
черты (/),  дефиса (-) или символа ключа DOS, за которыми следует
символ  параметра.  (По  умолчанию,  в качестве символа ключа DOS
используется /. Его можно переопределить с помощью прерывания INT
21H.)

     Если вы хотите задать несколько параметров, то наличие между
ними пробелов необязательно (/m/c означает то же самое,  что и /m
/c) и они могут  располагаться  в  произвольном  месте  командной
строки. Описания параметров приводятся ниже.

             Файл конфигурации утилиты TLINK
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Версия TLINK,  работающая с командной строкой,  ищет файл  с
именем  TLINK.CFG  сначала в текущем каталоге или в каталоге,  из
которого она загружалась (DOS 3.0 и более поздние версии).

     Файл конфигурации компоновщика  TLINK.CFG  является  обычным
текстовым файлом,  содержащим список допустимых параметров TLINK.
В отличие от файла отклика,  файл TLINK.CFG не может  перечислять
имена файлов для компоновки.

     Например, следующий файл TLINK.CFG:

     /Lc:\BORLANDC\lib;c:\winaррs\lib
     //v /s
     /Tw

указывает TLINK,  что нужно искать библиотеки в указанных катало-
гах,  включать,  создавать  детальную карту сегментов и создавать
программу для Windows.

      Параметр /3 (32-битовый код для процессора 80386)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр /3 должен использоваться в случае,  когда один  или
несколько  компонуемых  объектных  модулей были созданы с помощью
ассемблера TASM или совместимого с ним, и содержат 32-битовый код
для  процессора  80386.  Данный  параметр увеличивает потребности
TLINK в памяти и замедляет процесс  компоновки,  поэтому  пользо-
ваться им следует только в случае необходимости.

             Параметр /A (выравнивание сегментов)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     /A=nnnn

где nnnn  является числом,  представляющим коэффициент выравнива-
ния. nnnn должно быть степенью двойки. Например, /A=16 указывает,
что сегменты должны выравниваться по границе параграфа.

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

           Параметр /c (Различие регистров букв)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр /c указывает,  что TLINK должна  различать  регистр
букв в глобальных и внешних символах.

     Параметр /C (различие регистров букв в секции экспорта)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     По умолчанию TLINK рассматривает секции  EXPORTS  и  IMPORTS
файла  определения  модуля  как нечувствительные к регистру букв.
Параметр /C или /C+ включают режим различия регистров, а /C- вык-
лючает этот режим.

           Параметр /d (дублируемые идентификаторы)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Предположим, что у вас имеется две библиотеки: одна из них с
именем   SUPPORT.LIB,   а   другая,   дополнительная,   с  именем
DEBUGSUP.LIB.  Предположим также, что библиотека DEBUGSUP.LIB со-
держит  дубликаты некоторых функций из библиотеки SUPPORT.LIB (но
дублирующие подпрограммы в библиотеке DEBUGSUP.LIB несколько  от-
личаются от них в функциональном отношении,  скажем, являются от-
ладочными   версиями   этих   подпрограмм).    Если    библиотека
DEBUGSUP.LIB указывается в командной строке компоновки первой, то
прикомпоновываются отладочные версии подпрограмм,  а не  подпрог-
раммы, находящиеся в библиотеке SUPPORT.LIB.

     Если вы не используете данное средство,  или  не  уверены  в
том,  какие подпрограммы дублируются, то в командной строке можно
задать параметр /d.  Компоновщик TLINK  будет  выдавать  перечень
всех идентификаторов,  дублирующихся в библиотеках,  даже  в  том
случае, если  указанные идентификаторы в программе не используют-
ся.

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

     Дистрибутивные библиотеки Borland C++, задаваемые в командах
компоновки, дублируемых идентификаторов не содержат. Поэтому, хо-
тя  библиотеки EMU.LIB и FP87.LIB (или CS.LIB и CL.LIB) очевидным
образом содержат дублирующиеся идентификаторы,  их совместное ис-
пользование в одной компоновке неправомерно.  Например, в библио-
теках EMU.LIB,  MATHS.LIB и  CS.LIB  дублирующих  идентификаторов
нет.

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

             Параметр /e (расширенный словарь)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все файлы  библиотек,  поставляемые с Borland C++,  содержат
расширенный словарь с информацией, которая позволяет компоновщику
TLINK  убыстрять  компоновку  с  этими  библиотеками.  Добавление
расширенного словаря к другим библиотечным файлам может  осущест-
вляться  с  помощью параметра /E,  задаваемого в командной строке
TLIB.  (см.  раздел,  посвященный  TLIB).  Параметр  /e  отменяет
использование этого словаря.

     Компоновка с библиотеками,  содержащими расширенный словарь,
осуществляется быстрее. Однако, если для компоновки программ тре-
буется несколько больше памяти по сравнению с той,  которая оста-
ется при использовании расширенного словаря,  то  может  потребо-
ваться параметр /e.

     Если вы не используете параметр /e, то TLINK будет игнориро-
вать всю  отладочную информацию, содержащуюся в библиотеке, кото-
рая имеет расширенный словарь.

     Параметр /i (неинициализированные завершающие сегменты)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                Параметр /l (номера строк)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр /l  создает  в  файле .MAP раздел для номеров строк
исходного кода.  Для того,  чтобы воспользоваться этим  разделом,
нужно создавать файлы .OBJ путем компиляции с параметром -y (Line
numbers...  On) или -v (Debug information).  Если  вы  указываете
TLINK,  что файл карты отображения создавать не нужно (при помощи
параметра /x), то данный параметр действовать не будет.

            Параметр /L (маршрут поиска библиотек)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр /L  позволяет задавать список каталогов,  в которых
TLINK будет искать библиотеки, если не задан явный маршрут. Перед
тем,  как искать библиотеки в каталогах,  заданных параметром /L,
TLINK ищет их в текущем каталоге. Например,

  TLINK /Lc:\BORLANDC\lib;c:\mylibs sрlash logo,,,utils .\logolib

     В случае данной командной строке TLINK сначала будет  искать
UTILS.LIB  в  текущем  каталоге,  потом  в  C:\BORLANDC\LIB  и  в
C:|MYLIB.  Так как .\LOGOLIB явно задает текущий каталог,  то для
нахождения LOGOLIB.LIB TLINK не осуществляет поиск,  заданный па-
раметром /L.

     По заданным  маршрутам поиска библиотек TLINK также ищет мо-
дули инициализации Си или C++ (C0x.OBJ, C0Wx.OBJ, C0Dx.OBJ).

         Параметры /m, /s, /x (параметры карты памяти)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Если вы хотите создать более полную карту,  то использование
параметра /m добавит к файлу карты отображения список  глобальных
символов,  отсортированных как в алфавитном порядке,  так и в по-
рядке возрастания адресов.  Данный вид карты отображения  полезен
при отладке.  Многие отладчики могут использовать список глобаль-
ных символов,  который позволяет во время  отладки  обращаться  к
символьным адресам.

     Параметр /s  создает файл карты отображения с указанием сег-
ментов,  глобальных символов и адреса начала программы (точно так
же,  как  это делает параметр /m),  но добавляет к нему подробную
карту сегментов.  На Рис.  4.1 приводится пример подробной  карты
сегментов.

     Для каждого сегмента в каждом модуле данная карта включает в
себя длину в байтах,  класс,  имя сегмента, группу, модуль и поле
атрибутов ACBP.

     Если один сегмент появляется в  нескольких  модулях,  каждый
модуль будет представлен отдельной строкой (например, SYMB.C). За
исключением поля,  ACBP информация в подробной карте сегментов не
нуждается в пояснении.

Адрес  Длина    Класс Сегмент  Имя  Группа  Модуль  Выравнивание/
   і      і       і     і       і     і      і     комбинирование
   і      і       і     і       і     і      і          і
   v      v       v     v       v     v      v          v
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іAddress Length Class Segment  Name Grouр    Module   Alignment/і
і       (Bytes)                                       Combining і
і                                                               і
і0000:0000 0E58 C=CODE S=SYMB_TEXT  G=(none) M=SYMB.C  ACBP=28  і
і00E5:000B 2735 C=CODE S=QUAL_TEXT  G=(none) M=QUAL.C  ACBP=28  і
і0359:0000 002B C=CODE S=SCOPY_TEXT G=(none) M=SCOPY   ACBP=28  і
і035B:000B 003A C=CODE S=LRSH_TEXT  G=(none) M=LRSH    ACBP=20  і
і035F:0005 0083 C=CODE S=PADA_TEXT  G=(none) M=PADA    ACBP=20  і
і0367:0008 005B C=CODE S=PADD_TEXT  G=(none) M=PADD    ACBP=20  і
і036D:0003 0025 C=CODE S=PSBP_TEXT  G=(none) M=PSBP    ACBP=20  і
і036F:0008 05CE C=CODE S=BRK_TEXT   G=(none) M=BRK     ACBP=28  і
і03CC:0006 066F C=CODE S=FLOAT_TEXT G=(none) M=FLOAT   ACBP=20  і
і0433:0006 000B C=DATA S=DATA       G=DGROUP M=SYMC.C  ACBP=48  і
і0433:0012 00D3 C=DATA S=DATA       G=DGROUP M=QUAL.C  ACBP=48  і
і0433:00E6 000E C=DTAE S=DATA       G=DGROUP M=BRK     ACBP=48  і
і0442:0004 0004 C=BSS  S=BSSB       G=DGROUP M=SYMB.C  ACBP=48  і
і0442:0008 0002 C=BSS  S=BSSB       G=DGROUP M=QUAL.C  ACBP=48  і
і0442:000A 000E C=BSS  S=BSS        G=DGROUP M=BRK     ACBP=48  і
і                                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Рис.4.1 Подробная карта сегментов

     Поле ACBP   содержит   в   себе   атрибуты   выравнивания  A
(alignment), сочетания C (combination) и большой величины B (big)
в  виде  набора  из  четырех  битовых полей,  определяемых фирмой
Intel. Компоновщик TLINK использует только три поля - поля A, C и
B.  Значение  поля  ACBP  отображается  в карте шестнадцатеричным
числом:  для образования значения поля ACBP  представленные  ниже
значения полей должны быть сложены с помощью поразрядной операции
"ИЛИ".

ЪДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПоле        і Значение          і      Описание                і
ГДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іПоле  A (вы-і 00                і Абсолютный сегмент           і
іравнивание) і                   і                              і
і            і 20                і Сегмент  с  выравниванием  поі
і            і                   і байтам                       і
і            і                   і                              і
і            і 40                і Сегмент  с  выравниванием  поі
і            і                   і словам                       і
і            і                   і                              і
і            і 60                і Сегмент  с  выравниванием  поі
і            і                   і параграфу                    і
і            і                   і                              і
і            і 80                і Сегмент  с  выравниванием  поі
і            і                   і странице                     і
і            і                   і                              і
і            і A0                і Неименованный фрагмент памя- і
і            і                   і ти с абсолютным адресом      і
і            і                   і                              і
іПоле C (со- і 00                і Не может быть объединен      і
ічетание)    і                   і                              і
і            і 08                і Сегмент,  объединяющий   гло-і
і            і                   і бальные идентификаторы       і
і            і                   і                              і
іПоле  B     і 00                і Сегмент меньше 64К           і
і(большой)   і                   і                              і
і            і 02                і Сегмент в точности равен 64К і
АДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Если с помощью параметра /s задается создание подробной кар-
ты,  то список глобальных символов (если он существует), содержит
глобальные идентификаторы,  помеченные маркером "idle" ("пусто"),
если к этому идентификатору нет никаких обращений (ссылок).  Нап-
ример, следующий фрагмент из раздела  глобальных  идентификаторов
файла  карты  отображения указывает,  что в скомпонованном коде к
идентификаторам Symbol1 и Symbol3 нет никаких обращений:

     0C7F:031E    idle   Symbol1
     0000:3EA2           Symbol2
     0C7F:0320    idle   Symbol3

        Параметр /n (игнорировать стандартные библиотеки)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                    Параметр /o (оверлеи)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр /o указывает,  что компоновать код во всех  модулях
или библиотеках, заданных после этого параметра, нужно с создани-
ем оверлейной структуры. Этот параметр действует до тех пор, пока
в  командной  строке  не будет обнаружена очередная запятая (явно
или неявно заданная) или параметр /o-. (Дополнительная информация
по  оверлейной  структуре  приводится в главе 9,  "Управление па-
мятью", в "Руководстве программиста".)

     За параметром /o может следовать имя класса сегмента;  в ре-
зультате все сегменты этого класса будут оверлейными.  Если такое
имя не задается, то все сегменты классов, имена которых оканчива-
ются  на  CODE,  будут  сделаны  оверлейными.  Может  быть задано
несколько параметров /o,  тем самым  оверлейная  структура  может
быть  задана  сегментам  нескольких  классов;  все  параметры  /o
действуют до тех пор,  пока не будет обнаружена очередная запятая
или не будет встречен параметр /o-.

     Синтаксическая форма /o#xx, где xx представляет шестнадцате-
ричное число из двух цифр,  переопределяет номер прерывания овер-
леев, который по умолчанию равен 3FH.

     Ниже приводится  несколько  примеров использования параметра
/o:

          Таблица 4.5 Параметры оверлеев утилиты TLINK
ЪДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПараметр  і Результат                                          і
ГДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і/o        і Делать все  сегменты  кода  оверлейными,  пока  не і
і          і встретится очередная запятая или параметр /o-.     і
і          і                                                    і
і/o-       і Прекратить формирование оверлейной структуры.      і
і          і                                                    і
і/oOVY     і Делать оверлейными  сегменты класса  OVY, пока  не і
і          і встретится очередная запятая или параметр /o-.     і
і          і                                                    і
і/oCODE    і Делать оверлейными сегменты класса CODE или класса і
і/oOVLY    і OVLY, пока не встретится очередная запятая или па- і
і          і раметр /o-.                                        і
і/o#F0     і Использовать для оверлеев вектор прерывания 0F0H.  і
АДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Если вы задаете параметр /o в файле отклика, то он будет ав-
томатически отменен перед обработкой библиотек.  Если  вы  хотите
сделать оверлейной библиотеку,  то необходимо задать еще один па-
раметр /o непосредственно  перед  всеми  библиотеками  или  непо-
средственно перед  той  библиотекой,  которую  вы  хотите сделать
оверлейной.
     Вы не можете использовать параметр  /o  с  любым  параметром
/Tw;  прикладные  программы для Windows не могут иметь оверлейной
структуры.  Однако, для достижения почти такого же результата для
Windows, нужно использовать отбрасываемые сегменты кода.

            Параметр /P (упаковывать сегменты кода)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Когда параметр /P используется при компоновке утилитой TLINK
выполняемых  файлов  для Windows,  TLINK комбинирует в один физи-
ческий сегмент столько сегментов кода, сколько возможно. Упаковка
сегментов кода никогда не создает сегменты, превышающие этот пре-
дел; если нужно, TLINK начинает новый сегмент.

     Стандартный предел  упаковки сегментов кода равен 8 192 бай-
там (8К). Для того, чтобы изменить его, нужно использовать

          /P=n

где n  задает число байтов в диапазоне от 1 до 65 536.  Возможно,
что при усиленном режиме 386 вы захотите иметь предел кратным 4К.

     Хотя оптимальный размер сегмента в усиленном режиме 386  ра-
вен 4К,  стандартный размер упаковки сегментов кода равен 8К. Так
как типичный сегмент кода вероятно имеет размеры  от  4К  до  8К,
размер упаковки  8К  возможно будет производить более эффективную
упаковку.

     Так как для каждого используемого сегмента в системе имеются
некоторые накладные расходы, упаковка сегментов кода, обычно уве-
личивает эффективность за счет уменьшения числа используемых сег-
ментов.  Параметр /P включает упаковку; по умолчанию она выключе-
на.  /P- выключает упаковку сегментов кода (используется, если вы
включаете  упаковку в файле конфигурации и хотите подавить ее для
конкретной компоновки).

          Параметр /t (.COM файл крохотной модели)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     Если вы компилируете файл  с использованием крохотной модели
памяти  и компонуете его с заданием данного параметра,  то вместо
обычного файла  .EXE TLINK создаст файл .COM.  Кроме того,  когда
компоновка производится  с  заданием  параметра  /t,  стандартным
расширением  имени  для  выполняемого  файла  является расширение
.COM. Это действует также, как и параметр /Tdc. Ни /t, ни /Tdc не
совместимы с параметрами для Windows (/Tw).

     Файл .COM  не может превышать по размеру 64 Кбайт,  не может
содержать относительных корректировок сегментов, сегмент стека, и
должен иметь начальный адрес, равный 0:100H. Если для выполняемо-
го файла задается расширение,  отличное от .COM (например, .BIN),
то начальный адрес может быть равен либо 0:0, либо 0:100H.

     TLINK не  может  генерировать  отладочную   информацию   для
файла .COM. Если вам нужно отладить программу, создайте и отладь-
те ее как файл .EXE,  а затем перекомпонуйте в файл .COM. Если же
у вас есть Турбо отладчик,  то  вы  можете  использовать  утилиту
TDSTRIP с параметром -c; по которому из файла .EXE создается файл
.COM.

           Параметры /Td и /Tw (параметры результата)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Эти параметры называются параметрами результата. Используйте
их (с c, e или d) для создания файлов .COM, .EXE или .DLL.

     - /Td создает файл .EXE для DOS.
     - /Tdc создает файл .COM для DOS.
     - /Tde создает файл .EXE для DOS.

     - /Tw указывает TLINK,  что нужно создавать выполняемый файл
        для Windows. Этот параметр не требуется, если вы включае-
        те  файл  определения  модуля  с   утверждением   EXETYPE
        Windows.  С параметром /Tw или без него, если в файле оп-
        ределений модуля имеется утверждение NAME,  TLINK создает
        прикладную программу (.EXE); если в файле определения мо-
        дуля имеется утверждение LIBRARY, TLINK создает DLL.

        Если файл определения модуля в компоновку не  включается,
        то для создания файл .EXEа для Windows нужно задать пара-
        метр /Tw или /Twe а для создания DLL для Windows -  пара-
        метр /Twd.

        Ни один  из  параметров  /Tw не совместим с параметром /o
        (оверлеи).

     -  /Twe создает файл .EXEы для Windows. Параметр /Twe подав-
        ляет утверждение  LIBRARY в файле определения модуля (ко-
        торое обычно указывает TLINK, что нужно создавать DLL).

     -  /Twd создает DLL для Windows. Параметр /Twd подавляет ут-
        верждение NAME в файле определения модуля (которое обычно
        указывает TLINK, что нужно создавать файл .EXE).

             Параметр /v (отладочная информация)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр /v  указывает  TLINK, что  в выполняемый файл нужно
включить отладочную информацию. Если данный параметр появляется в
произвольном месте командной строки, то отладочная информация бу-
дет включена для всех модулей, которые ее содержат. Для селектив-
ной отмены и задания включения отладочной информации в конкретные
модули вы можете воспользоваться параметрами /v- и /v+. Например,
следующая команда:

     tlink mod1 /v+ mod2 mod3 /v- mod4

включает отладочную информацию для модулей mod2 и mod3, но не для
модулей mod1 и mod4.

     Компоновщик TLINK не может генерировать отладочную  информа-
цию для файла .COM. Если вам нужно отладить программу, создайте и
отладьте ее как файл .EXE,  а затем перекомпонуйте как файл .COM.
Если же у вас есть Турбо отладчик, то вы можете использовать ути-
литу TDSTRIP с параметром -c; по которому из файла .EXE создается
файл .COM.

               Параметр /ye (дополнительная память)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Данный параметр определяет,  как компоновщик TLINK будет ис-
пользовать дополнительную (exрanded) память для буферизации ввода
-вывода. Если при считывании объектных файлов с диска или при за-
писи на  диск выполняемого файла утилите TLINK требуется дополни-
тельная память для активных структур данных,  то она  будет  либо
удалять буферы,  либо сбрасывать их в дополнительную память (сво-
пинг).

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

     Возможности TLINK благодаря свопингу не возрастают,  улучша-
ется лишь его производительность. По умолчанию разрешается откач-
ка в отображаемую память, а откачка в расширенную память запреща-
ется.  Если откачка разрешена,  но не существует соответствующего
типа памяти, в которую должна выполняться свопинг, он не произво-
дится.

     Данный параметр имеет несколько форм, представленных ниже:

/ye или /ye+  разрешить свопинг  в дополнительную память (исполь-
              зуется по умолчанию).

/ye-          запретить свопинг в дополнительную память.

               Параметр /yx (расширенная память)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Данный параметр определяет,  как компоновщик TLINK будет ис-
пользовать расширенную (extended)  память  для  буферизации  вво-
да-вывода.  По умолчанию TLINK использует до 8 мегабайт расширен-
ной памяти.  Данный параметр имеет несколько форм, представленных
ниже, с помощью которых вы можете изменить характер использования
компоновщиком расширенной памяти:

/yx+           разрешить свопинг в расширенную память.

/yxN           использовать до N килобайт расширенной памяти.

                  Файл определения модуля
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

    Файл определения модуля предоставляет компоновщику информацию
о содержании  и  системных  потребностях  прикладных программ для
Windows. Более конкретно, это

     *  имена прикладной программы  или  библиотеки  динамических
        связей (DLL).

     *  идентификация типа прикладной программы как программы для
        Windows или OS/2.

     *  перечисление импортируемых и экспортируемых функций.

     * описание атрибутов сегментов кода и данных;  позволяет вам
        задавать атрибуты для  дополнительных  сегментов  кода  и
        данных.

     * размеры динамически распределяемой области и стека.

     *  предоставляет "заглушку" (модуль программы) для DOS.

     Заметим, что утилита IMPLIB может использовать файл  опреде-
ления модуля для создания библиотеки импорта.  Утилита IMPDEF мо-
жет создавать файл определения модуля  для  использования  его  с
IMPLIB.

             Стандартный файл определения модуля
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Файл определения  модуля не является строго обязательным для
создания  выполняемой  программы  для  Windows  с  использованием
Borland C++.

     Если файл определения модуля не задан, по умолчанию принима-
ется следующее:

     CODE        PRELOAD MOVEABLE DISCARDABLE
     DATA        PRELOAD MOVEABLE MULTIPLE  (для  прикладных про-
                 грамм) или PRELOAD MOVEABLE SINGLE (для DLL)
     HEAPSIZE    4096
     STACKSIZE   5120

     Для замены утверждения EXETYPE компоновщик Borland C++ может
определять вид выполняемой программы, которую вы хотите создать с
помощью IDE или компилятора командной строки.

     Вы можете включать  библиотеку  импорта  для  замены  секции
IMPORTS определения модуля.

     Для того,  чтобы не нужно было использовать секцию  EXPORTS,
вы  можете  использовать  ключевое  слово  _exрort в определениях
функций экспорта  в вашей исходной программе на языке Си или C++.
Заметим,  однако,  что если  для  экспорта  функции  используется
_exрort,  то функция будет экспортироваться по имени, а не по пе-
речислению (перечисление обычно более эффективно).

     Если вы хотите изменить стандартные атрибуты,  вам необходим
файл определения модуля.

                         Пример
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Ниже приводится определение модуля из примера WHELLO,  кото-
рый обсуждался   в   главе  8  "Построение  прикладной  программы
Windows" "Руководства программиста":

     NAME         WHELLO
     DESCRIPTION  'C++ Windows Hello World'
     EXETYPE      WINDOWS
     CODE         MOVEABLE
     DATA         MOVEABLE MULTIPLE
     HEAPSIZE     1024
     STACKSIZE    5120
     EXPORTS      MainWindowProc

     Теперь рассмотрим утверждения этого файла отдельно:

     *  NAME  задает  имя прикладной программы.  Если вместо при-
        кладной программы вы хотите создать DDL,  то вместо этого
        утверждения надо использовать утверждение LIBRARY. Каждый
        файл определения модуля должен содержать либо утверждение
        NAME,  либо утверждение LIBRARY. Заданное имя должно сов-
        падать с именем выполняемого файла.

     *  DESCRIPTION позволяет задавать строку,  описывающую  вашу
        прикладную программу или библиотеку.

     *  EXETYPE может иметь значение или WINDOWS, или OS2. В этой
        версии Borland C++ поддерживается только WINDOWS.

     *  CODE определяет стандартные атрибуты сегментов кода.  Па-
        раметр MOVEABLE подразумевает, что сегмент кода во время
        выполнения может перемещаться в памяти.

     *  DATA определяет стандартные  атрибуты  сегментов  данных.
        MOVEABLE подразумевает, что во время выполнения они могут
        перемещаться в   памяти.   Windows   позволяет  выполнять
        несколько экземпляров прикладных  программ  одновременно.
        Для обеспечения этого параметр MULTIPLE обеспечивает каж-
        дому экземпляру  прикладной  программы  свой  собственный
        сегмент данных.

     *  HEAPSIZE задает размер локальной динамически распределяе-
        мой области памяти прикладной программы.

     *  STACKSIZE задает размер локального стека прикладной прог-
        раммы. Утверждение  STACKSIZE  для создания стека для DLL
        использовать нельзя.

     *  EXPORTS  перечисляет  те  функции   прикладной  программы
        WHELLO, которые   будут  вызываться  другими  прикладными
        программами или Windows. Функции, предназначенные для вы-
        зова  другими  модулями,  называются  обратными вызовами,
        функциями обратного вызова или функциями экспорта.

     *  Для того, чтобы помочь вам избежать необходимости  созда-
        ния длинных секций EXPORTS,  в Borland C++ имеется ключе-
        вое слово _exрort.  Функции с ключевыми  словами  _exрort
        будут идентифицироваться компоновщиком и вводиться в таб-
        лицу  экспорта  для  модуля.  Если  во  время  компиляции
        использовался  параметр Smart Callbacks (Эффективные
        обратные  вызовы)  (/WS  в  командной  строке   BCC   или
        команде OрtionіComрilerіEntry/Exit     ПараметрыіКомпиля-
        торіКод входа/выхода)  CodeіWindows Smart Callbacks),  то
        перечисление  функций  обратного  вызова  в   утверждении
        EXPORTS  или  обозначение  их  ключевым словом _exрort не
        требуется. Borland C++ компилирует их так, чтобы они мог-
        ли быть функциями обратного вызова.

     Данная прикладная программа не содержит утверждения IMPORTS,
так как функции,  вызываемые ей из других модулей, являются функ-
циями из  интерфейса  прикладных  программ Windows (Windows API);
эти функции импортируются посредством  автоматического  включения
библиотеки импорта IMPORT.LIB. Если прикладная программа нуждает-
ся в вызове других внешних функций,  то эти функции  должны  быть
перечислены  в утверждении IMPORTS или включены с помощью библио-
теки импорта.

     Данная прикладная  программа  не  включает утверждение STUB.
Для прикладных программ Windows Borland C++ использует встроенную
заглушку,  которая просто контролирует,  была ли прикладная прог-
рамма загружена под Windows, а если нет, то прекращает выполнение
прикладной   программы   с  сообщением  о  запуска  необходимости
Windows. Если вы захотите написать и включить собственную заглуш-
ку, задайте ее имя в утверждении STUB.

                   Справочник описания модулей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Этот раздел содержит описание каждого  утверждения  в  файле
определения модуля.

                         CODE (код)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение CODE  определяет  стандартные атрибуты сегментов
кода. Сегменты кода могут иметь любое имя, но должны принадлежать
классам сегментов,  имена которых оканчиваются на CODE. Например,
корректными именами классов сегментов являются CODE и MYCODE. Ут-
верждение имеет синтаксис

     CODE [FIXED і MOVEABLE]
       [DISCARDABLE і NONDISCARDABLE]
       [PRELOAD і LOADONCALL]

     FIXED означает, что сегмент занимает фиксированное положение
в памяти; MOVEABLE означает, что сегмент может перемещаться.

     DISCARDABLE означает,  что сегмент может отбрасываться, если
он   больше   не   нужен.   DISCARDABLE  подразумевает  MOVEABLE.
NONDISCARDABLE означает, что сегмент не может отбрасываться.

     PRELOAD означает, что сегмент загружается при первой загруз-
ке модуля;  LOADONCALL означает,  что сегмент загружается,  когда
вызывается код,  находящийся в этом сегменте. Компилятор ресурсов
и  загрузчик  Windows устанавливают сегмент кода,  содержащий на-
чальную точку входа в программу, в значение PRELOAD независимо от
содержания файла определения модуля.

     Стандартными атрибутами для сегмента кода являются:

     - FIXED;

     - NONDISCARDABLE;

     - LOADONCALL.

                       DATA (данные)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение DATA  определяет  стандартные атрибуты сегментов
данных.

     Утверждение имеет синтаксис

     DATA [NONE і SINGLE і MULTIPLE] [FIXED і MOVEABLE]

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

     SINGLE означает, что единственный сегмент данных разделяется
между  всеми экземплярами модуля.  MULTIPLE означает,  что каждый
экземпляр прикладной программы имеет сегмент.  SINGLE допускается
только для библиотек;  MULTIPLE допускается только для прикладных
программ.

     FIXED означает, что сегмент занимает фиксированное положение
в памяти; MOVEABLE означает, что сегмент может перемещаться.

     Стандартными атрибутами для сегментов  данных  в  прикладных
программах являются  FIXED  MULTIPLE.  Для библиотек стандартными
атрибутами являются FIXED SINGLE.

     Сегмент автоматических данных это сегмент,  группой которого
является DGROUP. Этот физический сегмент также содержит локальные
"кучу" и стек (см. утверждения HEAPSIZE и STACKSIZE файла опреде-
ления модуля). Компилятор ресурсов и загрузчик Windows устанавли-
вают  сегмент автоматических данных в значение PRELOAD независимо
от содержания файла определения модуля.

                 DESCRIPTION (описание)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение DESCRIPTION  вставляет текст в модуль прикладной
программы. Утверждение DESCRIPTION обычно используется для встав-
ки автора, даты или информации о копировании. Оно является необя-
зательным параметром. Утверждение имеет синтаксис

     DESCRIPTION '<текст>'

где <текст> является строкой ASCII, разделенной одинарными кавыч-
ками.

               EXETYPE (тип выполняемого файла)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение EXETYPE   задает   стандартный   тип   заголовка
(Windows или OS/2) выполняемого файла (.EXE).  Вы  данной  версии
Borland  C++ можно задавать только значение WINDOWS.  Утверждение
имеет синтаксис

     EXETYPE WINDOWS

               EXPORTS (экспортируемые функции)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение EXPORTS определяет имена и атрибуты экспортируе-
мых функций.  Ключевое слово EXPORTS отмечает начало определений.
После  него  может  следовать  любое число определений экспортов,
каждое в отдельной строке. Утверждение имеет синтаксис:

     EXPORTS
       <имя_эксп> [номер] [RESIDENTNAME] [NODATA] [параметр]

где "имя_эксп" задает строку ASCII,  которая определяет экспорти-
руемый идентификатор. Она имеет следующую форму:

     имя_точки_входа=[внутр_имя]

где "внутр_имя" является именем,  используемым внутри  прикладной
программы для ссылки на эту точку входа.  "Имя_точки_входа" явля-
ется именем,  приведенным в таблице точек входа выполняемого фай-
ла, и может быть "видимо" извне.

     "Номер" определяет значение перечисления функции.  Оно имеет
следующую форму:

     @номер

где "номер" является целым значением, которое определяет значение
перечисления функции.

     Когда модуль  прикладной  программы  или модуль DLL вызывает
функцию, экспортируемую из DLL, вызывающий модуль может ссылаться
на функцию по имени или по значению перечисления.  С точки зрения
скорости,  ссылка на функцию по перечислению является более быст-
рой,  так как сравнения строк не требуют определения местоположе-
ния функции. С точки зрения распределения памяти, экспортирование
функции  по  перечислению (с точки зрения DLL этой функции) и им-
портирование/вызов функции по перечислению (с точки зрения модуля
вызова) являются более эффективными. Когда функция экспортируется
по перечислению,  имя располагается в нерезидентной таблице имен,
а когда по имени, то в резидентной таблице имен. Резидентная таб-
лица имен для модуля является резидентной в  памяти  всякий  раз,
когда  модуль  загружен;  с  нерезидентной таблицей имен этого не
происходит.

     Параметр RESIDENTNAME позволяет указывать,  что имя  функции
должно  быть  всегда резидентным.  Это используется только тогда,
когда производится экспортирование по перечислению (когда имя  не
будет резидентным по умолчанию).

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

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

     HEAPSIZE (размер динамически распределяемой области")
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     HEAPSIZE байты

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

     Стандартный (используемые по умолчанию)  размер  динамически
распределяемой области памяти равен нулю.  Минимальный размер ра-
вен  256  байтам.  Общая  сумма  сегмента  автоматических  данных
(DGROUP),  локальной  динамически распределяемой области памяти и
стека не должна превышать 65536 байт.

              IMPORTS (импортируемые функции)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение IMPORTS определяет имена и атрибуты функций, им-
портируемых из библиотеки динамических связей.  Вместо перечисле-
ния функций DLL в утверждении IMPORTS,  вы можете или задать биб-
лиотеку  импорта  для  DLL в командной строке TLINK или - в IDE -
включить библиотеку импорта для DLL в проект.

     Ключевое слово  IMPORTS указывает начало определений.  После
него может идти любое число определений импорта, каждое в отдель-
ной строке. Утверждение имеет синтаксис

     IMPORTS [внутр_имя=]имя_модуля>.<точка_входа>

где "внутр_имя"  является строкой ASCII,  определяющей уникальное
имя, которое будет использоваться прикладной программой для вызо-
ва функции.

     Поле "имя_модуля" задает один или несколько символов ASCII в
верхнем регистре, которые определяют имя выполняемого модуля, со-
держащего  функцию.  Имя  модуля должно быть согласовано с именем
исполнимого файла.  Например,  файл SAMPLE.DLL имеет  имя  модуля
SAMPLE.

     Поле "точка_входа"  задает импортируемую функцию.  Она может
быть строкой ASCII,  которая именует функцию,  или целым, которое
задает значение перечисления функции.

                  LIBRARY (библиотека)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение LIBRARY определяет имя модуля DLL.  Файл опреде-
ления  модуля  может  содержать или утверждение NAME для указания
прикладной программы или утверждение LIBRARY для указания DLL, но
не оба утверждения сразу.

     Подобно имени модуля прикладной программы, имя модуля библи-
отеки должно соответствовать имени выполняемого файла.  Например,
библиотека  MYLIB.DLL  имеет имя модуля MYLIB.  Утверждение имеет
синтаксис

     LIBRARY имя_библиотеки

где "имя_библиотеки" задает строку ASCII,  которая определяет имя
модуля библиотеки.

     Начальный адрес  модуля  библиотеки  определяется  объектным
файлом библиотеки; он является внутренне определенной функцией.

     Поле "имя_библиотеки" не является  обязательным.  Если  этот
параметр не включен,  то в качестве его значения TLINK использует
часть имени выполняемого файла (то есть, имя с отброшенным расши-
рением).

     Если файл  определения  модуля  не  включает  ни утверждения
NAME,  ни утверждения LIBRARY,  TLINK использует утверждение NAME
без параметра "имя_модуля".

                        NAME (имя)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение NAME определяет имя выполняемого модуля приклад-
ной программы.  Имя модуля идентифицирует модуль, который экспор-
тирует функции. Утверждение имеет синтаксис:

     NAME имя_модуля

где  "имя_модуля" задает один  или  несколько  символов  ASCII  в
верхнем регистре, которые определяют имя выполняемого модуля. Имя
модуля должно соответствовать имени выполняемого файла. Например,
прикладная  программа  с  выполняемым файлом SAMPLE.EXE имеет имя
модуля "SAMPLE".

     Параметр "имя_модуля" не является обязательным.  Если  пара-
метр не включен, TLINK считает, что имя модуля соответствует име-
ни выполняемого файла.  Например, если вы не задали имя модуля, а
выполняемый файл имеет имя MYAPP.EXE,  то TLINK считает,  что мо-
дуль имеет имя "MYAPP".

     Если файл определения  модуля  не  включает  ни  утверждения
NAME,  ни утверждения LIBRARY,  TLINK использует утверждение NAME
без параметра "имя_модуля".

                      SEGMENTS (сегменты)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение SEGMENTS  определяет атрибуты добавочных сегмен-
тов кода и данных. Утверждение имеет синтаксис:

     SEGMENTS
       имя_сегмента [CLASS 'имя_класса'] [<мин_распр>]
       [FIXED і MOVEABLE] [DISCARDABLE і NONDISCARDABLE]
       [SHARED і NONSHARED] [PRELOAD і LOADONCALL]

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

     Поле "имя_класса"  является  необязательным ключевым словом,
задающим имя класса для указанного сегмента.  Если не задано  имя
класса, то TLINK использует стандартное имя класса CODE.

     Поле "мин_распр"  является  необязательным  целым значением,
задающим минимальный размер распределения  для  сегмента.  Обычно
TLINK это значение игнорирует.

     FIXED означает, что сегмент занимает фиксированное положение
в памяти; MOVEABLE означает, что сегмент может перемещаться.

     DISCARDABLE означает,  что сегмент может отбрасываться, если
он больше не нужен. NONDISCARDABLE означает, что сегмент отбрасы-
ваться отбрасываться не может.

     PRELOAD означает,  что   сегмент   загружается   сразу   же;
LOADONCALL означает,  что сегмент загружается,  когда к нему про-
исходит обращение или осуществляется доступ.  Компилятор ресурсов
может переопределить  параметр  LOADONCALL  и  загружать сегменты
предварительно.

    Стандартными атрибутами для дополнительных сегментов являются
атрибуты,  описанные для сегментов CODE и DATA (в зависимости  от
типа дополнительного сегмента).

                 STACKSIZE (размер стека)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение STACKSIZE  определяет число байт,  требуемых для
локального стека прикладной программы.  Прикладная программа  ис-
пользует  локальный стек всякий раз,  когда делает вызов функции.
Для библиотек динамических связей утверждение STACKSIZE использо-
вать нельзя. Утверждение имеет синтаксис

     STACKSIZE байты

где  "байты" является  целым  значением,  задающим размер стека в
байтах.

     Если прикладная программа не делает вызовов  функций,  стан-
дартный размер стека равен нулю. Если прикладная программа делает
вызовы функций, минимальный размер стека равен 5120 байт (если вы
задали меньший размер, он автоматически изменится на 5120). Общий
объем  памяти,   занимаемой   сегментом   автоматических   данных
(DGROUP),  локальной  динамически распределяемой области памяти и
стеком не должен превышать 65536 байт.

                     STUB (заглушка)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утверждение STUB присоединяет выполняемый файл DOS, заданный
с помощью поля "имя_файла", в начало модуля. Если пользователь не
загрузил Windows, то выполняемая заглушка должна выдавать предуп-
реждающее сообщение и прекращать выполнение программы.

     Если в утверждении STUB не указана никакая другая  заглушка,
Borland  C++  добавляет  в начало прикладной программы встроенную
заглушку. Поэтому, утверждение STUB не нужно использовать для то-
го,  чтобы просто включить WINSTUB.EXE, так как компоновщик будет
делать это для вас автоматически.

     Утверждение имеет синтаксис:

     STUB "имя_файла"

где "имя_файла" задает имя выполняемого файла DOS,  который будет
присоединен к модулю. Имя должно иметь формат файла DOS.

     Если файл  с именем "имя_файла" не находится в текущем ката-
логе,  TLINK ищет файл в каталогах,  заданных с помощью пользова-
тельской переменной среды PATH.

           Глава 5. Использование утилиты WinSight
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Вы можете настроить WinSight, чтобы отслеживать сообщения:

     - по окну;

     - по классу окна;

     - по типу сообщения;

     - по комбинации всего, указанного выше.

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

                        Начало работы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

             Действия "мыши" и клавиатуры         Таблица 5.1
ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДї
іЖелаемое действие іКнопка "мыши" іКлавиатура    і   Меню       і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іВыбор элемента    іЛевая кнопка  іСтрелка вверх і              і
і                  і              іили вниз      і              і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іПеремещение поло- і              іCtrl+стрелка  і              і
ісы подсветки (вы- і              івверх или     і              і
іделения)          і              іCtrl+стрелка  і              і
і                  і              івниз          і              і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іПереключение      іCtrl+левая    іПробел        і              і
іподсвеченного     ікнопка        і              і              і
іэлемента          і              і              і              і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іВывод подробной   іДвойное на-   іEnter         іSpyіOpen      і
іинформации по     іжатие левой   і              іDetail        і
іэлементу          ікнопки "мыши" і              і              і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іРасширение дере-  і              і+             іTreeіExpand   і
іва окон           і              і              іone level     і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іРасширение вет-   іПравая кнопка і*             іTreeіExpand   і
іви                іна <+>        і              іbranch        і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
і"Сжатие" дерева   іЛевая кнопка  і-             іTreeіCollapse і
іокон              іна <->        і              іbranch        і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іПолное расшире-   і              іCtrl+*        іTreeіExpand   і
іние дерева        і              і              іAll           і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іАктивизация       і              іTab или F6    і              і
іследующей об-     і              і              і              і
іласти             і              і              і              і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДґ
іАктивизация пре-  і              іShift-Tab или і              і
ідыдущей области   і              іShift-F6      і              і
АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДДДДДЩ

                           Выход
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Когда вы закончите работу с утилитой WinSight,  можете выйти
из нее с помощью команды SpyіExit.

                Выбор отображаемого элемента
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для трассировки сообщений вы можете выбрать выбрать  различ-
ные отображаемые элементы и характер информации.

                        Выбор области
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В основном окне утилиты WinSight может выводиться три облас-
ти: область дерева окон, область списка классов и область трасси-
ровки сообщений.  Вы можете задать вывод одной из  этих  областей
или всех областей.  Утилита WinSight будет автоматически распола-
гать эти области в основном окне,  но при желании вы можете наст-
роить их размер.

     - Область дерева окон показывает иерархию окон в оперативной
       области.  При запуске WinSight она отображается по умолча-
       нию.

     - Область списка классов показывает все зарегистрированные в
       данный момент классы окон.

     - В области трассировки сообщений выводится информация о со-
       общениях,  получаемых выбранными окнами или классами окон.

     В любой  момент вы можете с помощью меню View (Просмотр) уб-
рать или вывести эти области. Когда вы убираете область с экрана,
ее информация и выбранные элементы не теряются.

                   Упорядочивание областей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Когда в основном окне у вас выводится два или более окон, вы
можете  расположить  их  в виде стека (одно за другим) или в виде
массива (одно рядом с другим).  Данные конфигурации переключаются
с  помощью команды меню View Split Vertical (Вертикальное разбие-
ние) и Split Horizontal (Горизонтальное разбиение).

               Получение подробной информации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В области  дерева  окон и в области списка классов вы можете
получить более подробную информацию о выбранном окне  или классе.
Выбор  команды  Open Detail (Вывод подробной информации) меню Spy
(Наблюдение) приведет к выводу подробной информации  о  выбранных
окнах или классах,  в зависимости от того, какая область является
активной.

                  Подробная информация о классе

     Двойное нажатие кнопки "мыши" или нажатие клавиши  Enter  на
элементе  области  списка  классов  приводит  к выводу окна Class
Detail (Подробная информация о классе), в котором показана полная
информация о данном классе окна.

                  Подробная информация об окне

     Двойное нажатие  кнопки  "мыши" или нажатие клавиши Enter на
элементе дерева окон приводит к выводу окна Window  Detail  (Под-
робная  информация об окне),  в котором кроме информации о классе
окна показана полная информация об окне.

                  Использование дерева окон
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В области  дерева окон выводится схема иерархии всех сущест-
вующих окон.  Эту схему вы можете использовать несколькими спосо-
бами:

     - для определения того, что окно действительно присутствует;

     - чтобы увидеть состояние окон, включая скрытые окна;

     - чтобы увидеть, какие окна получают сообщения;

     - чтобы выбрать окна,  для которых вы хотите выполнять трас-
       сировку сообщений.

     После каждой записи в дереве окон выводится  небольшой ромб.
Пустой ромб означает, что окно имеет дочернее окно (окна). Символ
+ в ромбе указывает, что окно имеет дочерние окна, но они скрыты.
Символ - в ромбе означает,  что дочерние окна данного окна в дан-
ный момент отображаются.

                      Упрощение дерева
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В области дерева окон вы можете выводить или убирать списки
порожденных окон.

                     Вывод порожденных окон

     Чтобы вывести дочернее окно  данного  окна,  нажмите  кнопку
"мыши",  позиционировавшись на следующем за окном ромбе, или наж-
мите +.  При этом выводятся все порожденные  окна  данного  окна.
Чтобы увидеть все уровни порожденных окон (дочерние окна,  дочер-
ние окна этих окон и т.д.), щелкните правой кнопкой "мыши".

     Примечание: Заметим,  что символ + в ромбе изменяется на  -.
Это показывает, что дочерние окна данного окна выведены.

                 Отмена вывода порожденных окон

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

           Примечание: Заметим,  что  символ - в ромбе изменяется
      при этом снова на символ +,  показывая,  что дочерние  окна
      скрыты.

                         Поиск окна
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     В любом случае режим Find Window (Поиск окна) задается путем
выбора команды SpyіFind Window (НаблюдениеіПоиск окна).  В данном
режиме,  когда "мышь" попадает на границы окна, вокруг окна появ-
ляется жирная рамка,  и окно в области дерева окон становится вы-
деленным.

           Примечание: Когда  вы находитесь в режиме Find Window,
      все другие прикладных программы приостанавливаются.

     Либо, находясь в режиме поиска окна,  вы  можете  с  помощью
"мыши"  или клавиш управления курсором выбрать окно в области де-
рева окон,  и утилита WinSight изобразит жирную рамку вокруг выб-
ранного окна (или окон).

                   Выход из режима поиска окна

     После того,  как вы нашли нужное окно, можно выйти из режима
поиска окна,  нажав кнопку "мыши" или клавиши Esc или Enter.  При
этом рамка будет удалена с экрана,  а окно останется выделенным в
дереве окон.

                    Наблюдение за окнами
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После выбора окна из дерева окон с помощью команды Messagesі
Selected Windows (СообщенияіВыбранные окна) вы  можете  выполнить
трассировку  сообщений, приходящих в это окно. Изменение выбора в
дереве окна немедленно сменит окно, для которого должны трассиро-
ваться сообщения.

     С помощью  команды MessagesіAll Windows (СообщенияіВсе окна)
вы можете также выбрать наблюдение за всеми окнами, независимо от
того,  что  выбрано в области списка классов или в области дерева
окон.

     Выбор команды MessagesіSelected Windows (СообщенияіВыбранные
окна)  или  WindowsіAll  Windows  (ОкнаіВсе окна),  когда область
трассировки сообщений является скрытой, приводит в выводу области
трассировки сообщений.

     Выбор команды  MessagesіTrace (СообщенияіТрассировка) запре-
щает трассировку сообщений, не убирая с экрана область трассиров-
ки сообщений.

                      Работа с классами
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Иногда вместо выбора для  трассировки  сообщений  конкретных
окон  желательно  просматривать  сообщения для всего класса окон.
Утилита WinSight позволяет сделать это с помощью  области  списка
классов.

     Термин "класс" в WinSight означает  имя  класса,  с  которым
класс окна зарегистрирован в Windows, а не класс C++ используемый
в ObjectWindows.

            Использование области списка классов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                   Наблюдение за классами
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     После выбора  класса  в области списка классов вы можете ис-
пользовать команду MessagesіSelected Classes (СообщенияіВыбранные
классы)  для трассировки только тех сообщений,  которые поступают
для конкретного класса.  Если область трассировки сообщений явля-
ется  скрытой,  то  при  выборе команды MessagesіSelected Classes
(СообщенияіВыбранные классы) она выводится на экран. Заметим, что
трассировка сообщений для класса позволяет вам видеть все сообще-
ния, передаваемые окнам этого класса, включая сообщения создания,
которые в противном случае не будут доступны.

     Изменение выбора  в списке классов при трассировке сообщений
немедленно изменяет класс, для которого трассируются сообщения.

                    Переключение режимов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита WinSight позволяет вам разрешать или запрещать неко-
торые ее возможности.

                   Выключение трассировки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Трассировка сообщений   отключается   при   выборе   команды
MessagesіTrace Off  (СообщенияіВыключение  трассировки).  Область
трассировки сообщений остается видимой на экране,  а  трассировка
возобновляется, когда вы выбираете одну из команд меню трассиров-
ки сообщений:  Selected  Classes  (Выделенные  классы),  Selected
Windows (Выбранные окна) или All Windows (Все окна).

               Приостановка обновление экрана
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Команда  Stop!  строки основного меню отключает все обновле-
ния в реальном времени, выполняемые WinSight. Обычно для областей
поддерживается текущее состояние при регистрации классов,  созда-
нии и  уничтожении  окон  и поступлении сообщений.  Выбор команды
Stop! приостанавливает все эти изменения и изменяет  команду меню
на Start!. Выбор команды Start! возобновляет нормальную работу.

     Использование команды Stop!  имеет две основных  цели:  дает
вам  возможность изучить конкретную ситуацию и устраняет непроиз-
водительные затраты на постоянное  самообновление  изображения  в
WinSioght.

                Выбор трассируемых сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита WinSight  предоставляет вам несколько способов огра-
ничения трассировки  сообщений.  Просмотр сообщений для  конкрет-
ного окна  и класса окна описывается в разделе "Наблюдение за ок-
ном" и в разделе "Наблюдение за классом".

     Независимо от того,  за какими окнами вы  наблюдаете,  можно
задавать конкретный  тип  сообщений,  которые вы хотите трассиро-
вать. Это делается  с  помощью  диалогового  окна  Message  Trace
Options (Параметры  трассировки сообщений),  которое выводится по
команде MessagesіOptions... (СообщенияіПараметры).

                    Фильтрация сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     По умолчанию WinSight трассирует все сообщения.  Если вы от-
меняете выбор блок All Messages (Все сообщения),  то можете после
этого выбрать любую из 10 подгрупп сообщений.  Эти подгруппы опи-
сываются с таблицах 5.2 - 5.10. Выбор параметра All Messages зап-
рещает отдельные подгруппы и будет трассировать все сообщения.

               Параметры трассировки сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Две других  полезных  возможности  предоставляет  диалоговое
окно Message Trace Options (Параметры трассировки сообщений), од-
на из которых позволяет задать формат области трассировки сообще-
ний, а другая - зарегистрировать трассируемые сообщения в файле.

               Форматирование параметров сообщения

     Обычно в области Message Trace (Трассировка сообщений) пара-
метры каждого сообщения и возвращаемые значения интерпретируются,
для вывода в более читаемом формате. Это можно запретить, отменив
параметр "Interpret Values" ("Интерпретация значений") в диалого-
вом окне Message Trace Options (Параметры трассировки сообщения).

     Обычно область Message Trace выводит информацию о параметрах
и возвращаемом значении  в  десятичном  формате.  Иногда  удобнее
просматривать эти  детали  сообщения в шестнадцатиричном формате.
Для этого вы можете  разрешить  шестнадцатиричную  интерпретацию,
выбрав параметр "Hex Values" ("Шестнадцатиричные значения) в диа-
логовом окне  Message Trace Options.

               Регистрация трассируемых сообщений

     Информация о трассируемых сообщениях поступает обычно только
в область   трассировки   сообщений.  Выбрав  в  диалоговом  окне
Messages Trace Options параметр Log  File  (Файл  регистрации)  и
введя имя файла,  вы можете помещать протокол трассировки сообще-
ний в файл регистрации.  Если файл уже существует,  то  сообщения
присоединяются к концу файла.  Чтобы остановить регистрацию трас-
сируемых сообщений в файле, отмените параметр Log File.

     Чтобы передать регистрируемые сообщения на принтер или  дру-
гое устройство, введите вместо имени файла имя устройства. Напри-
мер, если набрать PRN, то протокол регистрации будет передаваться
в порт принтера.

                       Сообщения от "мыши"            Таблица 5.2
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_HSCROLL                      WM_MOUSEACTIVATE           і
і    WM_LBUTTONDCLICK                WM_MOUSEMOVE               і
і    WM_LBUTTONDOWN                  WM_RBUTTONDBLCLK           і
і    WM_LBUTTONUP                    WM_RBUTTONDOWN             і
і    WM_MBUTTONDCLICK                WM_RBUTTONUP               і
і    WM_MBUTTONDOWN                  WM_SETCURSOR               і
і    WM_MBUTTONUP                    WM_VSCROLL                 і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                       Сообщения Windows              Таблица 5.3
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_ACTIVATE                     WM_KILLFOCUS               і
і    WM_ACTIVATEAPP                  WM_MOVE                    і
і    WM_CANCELMODE                   WM_PAINT                   і
і    WM_CLOSE                        WM_PAINTICON               і
і    WM_CREATE                       WM_QUERYDRAGICON           і
і    WM_CTLCOLOR                     WM_QUERYENDSESSION         і
і    WM_DESTROY                      WM_QUERYNEWPALETTE         і
і    WM_ENABLE                       WM_QUERYOPEN               і
і    WM_ENDSESSION                   WM_QUIT                    і
і    WM_ERASEBKGND                   WM_SETFOCUS                і
і    WM_GETDLGCODE                   WM_SETFONT                 і
і    WM_GETMINMAXINFO                WM_SETREDRAW               і
і    WM_GETTEXT                      WM_SETTEXT                 і
і    WM_GETTEXTLENGTH                WM_SHOWWINDOW              і
і    WM_ICONERASEBKGND               WM_SIZE                    і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                       Сообщения ввода                Таблица 5.4
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_CHAR                         WM_MENUSELECT              і
і    WM_CHARTOITEM                   WM_PARENTNOTIFY            і
і    WM_COMMAND                      WM_SYSCHAR                 і
і    WM_DEADCHAR                     WM_SYSDEADCHAR             і
і    WM_KEYDOWN                      WM_SYSKEYDOWN              і
і    WM_KEYLAST                      WM_SYSKEYUP                і
і    WM_KEYUP                        WM_TIMER                   і
і    WM_MENUCHAR                     WM_VKEYTOITM               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                    Системные сообщения               Таблица 5.5
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_COMPACTING                   WM_QUEUESYNC               і
і    WM_DEVMODECHANGE                WM_SPOOLERSTATUS           і
і    WM_ENTERIDLE                    WM_SYSCOLORCHANGE          і
і    WM_FONTCHANGE                   WM_SYSCOMMAND              і
і    WM_NULL                         WM_TIMECHANGE              і
і    WM_PALETTECHANGED               WM_WININICHANGE            і
і    WM_PALETTEISCHANGING                                       і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                     Сообщения инициализации          Таблица 5.6
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_INITDIALOG                   WM_INITMENUPOPUP           і
і    WM_INITMENU                                                і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            Сообщения буфера вырезанного изображения  Таблица 5.7
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_ASKCBFORMATNAME              WM_PASTE                   і
і    WM_CHANGECBCHAIN                WM_PAINTCLIPBOARD          і
і    WM_CLEAR                        WM_RENDERALLFORMATS        і
і    WM_CUT                          WM_RENDERFORMAT            і
і    WM_COPY                         WM_SIZECLIPBOARD           і
і    WM_DESTROYCLIPBOARD             WM_UNDO                    і
і    WM_DRAWCLIPBOARD                WM_VSCROLLCLIPBOARD        і
і    WM_HSCROLLCLIPBOARD                                        і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                        Сообщения DDE                 Таблица 5.8
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_DDE_ACK                      WM_DDE_POKE                і
і    WM_DDE_ADVICE                   WM_DDE_REQUEST             і
і    WM_DDE_DATA                     WM_DDE_TERMINATE           і
і    WM_DDE_EXECUTE                  WM_DDE_UNADVISE            і
і    WM_DDE_INITIATE                                            і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                 Непользовательские сообщения         Таблица 5.9
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    WM_NCACTIVATE                   WM_NCLBUTTONUP             і
і    WM_NCCREATE                     WM_NCMBUTTONDOWN           і
і    WM_NCCALCSIZE                   WM_NCMBUTTONUP             і
і    WM_NCDESTROY                    WM_NCMOUSEMOVE             і
і    WM_NCDESTROY                    WM_NCMMOUSEMOVE            і
і    WM_NCHITTEST                    WM_NCPAINT                 і
і    WM_NCLBUTTONDBLCLK              WM_NCRBUTTONDBLCLK         і
і    WM_NCLBUTTONDOWN                WM_NCRBUTTONDOWN           і
і    WM_NCMBUTTONDBLCLK              WM_NCRBUTTONUP             і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                     Управляющие сообщения           Таблица 5.10
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    BM_GETCHECK                     CB_DIR                     і
і    BM_SETCHECK                     CB_GETCOUNT                і
і    BM_GETSTATE                     CB_GETCURSEL               і
і    BM_SETSTYLE                     CB_GETLBTEXT               і
і                                    CB_GETLBTEXTLEN            і
і    BN_CLICKED                      CB_INSERTSTRING            і
і    BN_PAINT                        CB_RESETCONTENT            і
і    BN_HILITE                       CB_FINDSTRING              і
і    BN_UNHILITE                     CB_SELECTSTRING            і
і    BN_DISABLE                      CB_SETCURSEL               і
і    BN_DOUBLECLICKED                CB_SHOWDROPDOWN            і
і                                    CB_GETITEMDATA             і
і    CB_GETEDITSEL                   CB_SETITEMDATA             і
і    CB_LIMITTEXT                    CB_GETDROPPEDCONTROLRECT   і
і    CB_SETEDITSEL                   CB_MSGMAX                  і
і    CB_ADDSTRING                                               і
і    CB_DELETESTRING                 CBN_SELCHANGE              і
і                                    CBN_DBLCLK                 і
і                                                               і
і    CBN_SETFOCUS                    EN_CHANGE                  і
і    CBN_KILLFOCUS                   EN_UPDATE                  і
і    CBN_EDITCHANGE                  EN_ERRSPACE                і
і    CBN_EDITUPDATE                  EN_MAXTEXT                 і
і    CBN_DROPDOWN                    EN_HSCROLL                 і
і                                    EN_VSCROLL                 і
і    DM_GETDEFID                                                і
і    DM_SETDEFID                     LB_ADDSTRING               і
і                                    LB_INSERTSTRING            і
і    EM_GETSEL                       LB_DELETESTRING            і
і    EM_SETSEL                       LB_RESETCONTENT            і
і    EM_GETRECT                      LB_SETSEL                  і
і    EM_SETRECT                      LB_SETCURSEL               і
і    EM_SETRECTNP                    LB_GETSEL                  і
і    EM_SCROLL                       LB_GETCURSEL               і
і    EM_LINESCROLL                   LB_GETTEXT                 і
і    EM_GETMODIFY                    LB_GETTEXTLEN              і
і    EM_SETMODIFY                    LB_GETCOUNT                і
і    EM_GETLINECOUNT                 LB_SELECTSTRING            і
і    EM_LINEINDEX                    LB_DIR                     і
і    EM_SETHANDLE                    LB_GETTOPINDEX             і
і    EM_GETHANDLE                    LB_FINDSTRING              і
і    EM_GETTHUMB                     LB_GETSELCOUNT             і
і    EM_LINELENGTH                   LB_GETSELITEMS             і
і    EM_REPLACESEL                   LB_SETTABSTOPS             і
і    EM_SETFONT                      LB_GETHORIZONTALEXTENT     і
і    EM_GETLINE                      LB_SETHORIZONTALEXTENT     і
і    EM_LIMITTEXT                    LB_SETTOPINDEX             і
і    EM_CANUNDO                      LB_GETITEMRECT             і
і    EM_UNDO                         LB_SETITEMDATA             і
і    EM_FMTLINES                     LB_SELITEMRANGE            і
і    EM_LINEFROMCHAR                 LB_MSGMAX                  і
і    EM_SETWORDBREAK                                            і
і    EM_SETTABSTOPS                  LBN_SELCHANGE              і
і    EM_SETPASSWORDCHAR              LBN_DBLCLK                 і
і    EM_EMPTYUNDOBUFFER              LBN_SELCANCEL              і
і    EM_MSGMAX                       LBN_SETFOCUS               і
і                                    LBN_KILLFOCUS              і
і    EN_SETFOCUS                                                і
і    EN_KILLFOCUS                                               і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                       Прочие сообщения              Таблица 5.11
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    wm_alttabactive                 wm_dropobject              і
і    wm_begingrad                    wm_entermenuloop           і
і    WM_COMPARITEM                   wm_entersizemove           і
і    wm_convertrequest               wm_exitmenuloop            і
і    wm_convertresult                wm_exitsizemove            і
і    WM_DELETEITEM                   wm_filesyschange           і
і    em_dragloop                     WM_GETFONT                 і
і    wm_dragmove                     wm_isactiveicon            і
і    wm_dragselect                   wm_lbtrackpoint            і
і    WM_DRAWITEM                     WM_DMOACTIVATE             і
і                                                               і
і    WM_MDICASCADE                   WM_NEXTDLGCTL              і
і    WM_MDICREATE                    wm_nextmenu                і
і    WM_MDIDESTROY                   wm_querydropobject         і
і    WM_MDIGETACTIVE                 wm_queryparkison           і
і    WM_MDIICONARRANGE               wm_setvisible              і
і    WM_MDIMAXIMIZE                  wm_systemerror             і
і    WM_MDINEXT                      wm_syncpaint               і
і    WM_MDIRESTORE                   wm_syntask                 і
і    WM_MDISETMENU                   wm_systimer                і
і    WM_MDITILE                      wm_testing                 і
і    WM_MEASUREITEM                                             і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                    Окна утилиты Winsight
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В данном разделе описываются различные окна и  области окон,
которые обеспечивает WinSight.

                   Область списка классов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В этой области выводятся все зарегистрированные классы окон.

     Формат вывода:

     Класс (Модуль) Функции Стили

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

     "Класс" - это имя класса.  Некоторые предопределенные классы
Windows имеют числовые номера.  Например, в качестве имени класса
всплывающего меню используется число 32768. Для таких классов по-
казывается как номер,  так и имя, например, #32768:PopupMenu. Од-
нако фактическое имя класса состоит только из  числа.  В  формате
MAKEINTRESOURCE используется также идентификатор ресурса.

     "Модуль" - это имя выполняемого модуля (.EXE или .DLL),  ко-
торый зарегистрировал класс.

     "Функция" - это функции класса окна.

     "Стили" представляют собой стили CS_ класса. Их имена совпа-
дают с определениями CS_ в файле windows.h,  но CS_ удаляется,  и
имя указывается ст различным регистром символов.

                     Область дерева окон
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Формат вывода:

     Дерево Описатель {Класс} Модуль Позиция "Заголовок"

     Линии слева показывают структуру дерева.  С помощью этих ли-
ний каждое  окно соединяется с его предком,  "братскими" окнами и
потомками. Линии рисуются таким же образом,  как в администраторе
файлов. Ромб после каждого окна показывает,  имеет ли окно дочер-
ние окна.  Если он пустой, то дочерних окон нет. Если он содержит
символ +,  то дочерние окна имеются,  но они не показаны. Если он
содержит символ -,  то имеются дочерние окна,  и они  выведены  в
древовидной схеме  (видим  по  крайней мере один уровень дочерних
окон, другие уровни могут быть скрыты).

     "Описатель" - это описатель окна, возвращаемый CreateWindow.

     "Класс" - это имя класса окна,  описанного в области  списка
классов.

     "Модуль" - это имя выполняемого модуля (.EXE или .DLL),  ко-
торый создал окно.  Строго говоря,  это имя  модуля,  являющегося
владельцем сегмента  данных,  переданного  как параметр hInstance
функции CreateWindow.

     "Позиция" может либо не указываться,  если окно скрыто, либо
это (x_Begin,y_Begin)-(x_End,y_End),  если окно является видимым.
Для окон верхнего уровня это координаты экрана.  Для  порожденных
окон это  координаты  в  области пользователя родительского окна,
которое используется в CreateWindow для создания порожденного ок-
на.

     "Заголовок" -  это  заголовок  окна или текст,  возвращаемый
функцией GetWindowText или сообщением WM_GETTEXT.  Если заголовок
- это нулевая строка, то кавычки опускаются.

                Область трассировки сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Формат вывода:

     Описатель ["Заголовок" і {Класс}] Сообщение Статус

     "Описатель" - это описатель окна, получающего сообщение.

     "Заголовок" - это заголовок окна. Если заголовок - это нуле-
вая строка, то вместо него выводится имя класса (в фигурных скоб-
ках).

     "Сообщение" -  это  имя  сообщения,  определенное  в   файле
WINDOWS.H. Существуют также неописанные сообщения Windows,  пока-
занные символами в нижнем регистре.  Номера неизвестных сообщений
(определенных пользователем) показываются как WM_USER+OxXXXX, ес-
ли они больше или равны WM_USER,  или WM_OxXXXX, если  они меньше
WM_USER. Номера       зарегистрированных       сообщений      (из
RegisterWindowsMessage) показываются вместе с их зарегистрирован-
ными именами в одиночных кавычках.

     "Статус" представляет собой следующее:

     - Значение Dispatched показывает, что сообщение получено че-
       рез DispatchMessage.

     - Значение Sent [from XXXX] показывает, что сообщение приме-
       няется через SendMessage. Если оно посылалось через другое
       окно, то from XXXX показывает описатель окна. Если оно по-
       сылалось  из того же окна,  что и принимает сообщение,  то
       указывается fromself. Если сообщение поступает от Windows,
       то часть from... опускается.

     - Return   показывает,  что  сообщение  было  принято  через
       SendMessage и теперь возвращается.

     - Дополнительная информация,  относящаяся к каждому  сообще-
       нию.  В  случае возвращаемого сообщения здесь показывается
       это значение (в числовой форме или с более конкретной  ин-
       формацией по сообщению, например, WM_GETTEXT. Для посылае-
       мых и диспетчеризуемых сообщений здесь показывается  пара-
       метры  сообщения.  WinSight интерпретирует параметры таким
       образом,  чтобы получилась читаемая форма.  Для сообщений,
       имеющих  связанные  с  ними  структуры  данных  (например,
       WM_CREATE) она перехватывает эти структуры и включает их в
       вывод.

           Глава 6. Компилятор ресурсов Windows RC
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     Большинство программ Windows легко использовать, так как они
обеспечивают стандартный  интерфейс с  пользователем.   Например,
большинство программ Windows, позволяющие вам реализовать команды
программы и изменять  курсоры,  что  позволяет  указателю  "мыши"
представлять большой  набор инструментальных  средств,  таких как
стрелки или кисти.

     Меню и курсоры представляют два  примера  ресурсов  программ
Windows. Ресурсы  -  это данные,  записываемые в выполняемый файл
программы (.EXE) отдельно от обычных ее данных. Ресурсы определя-
ются и задаются вне кода программы, а затем добавляются к скомпи-
лированному коду программы  для создания выполняемого файла прог-
раммы.

     Чаще всего  создавать  и  использовать  вы  будете следующие
ресурсы:
     - меню;
     - диалоговые блоки;
     - пиктограммы;
     - курсоры;
     - акселераторы клавиатуры;
     - битовые карты;
     - символьные строки.

                      Создание ресурсов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Независимо от того, какой подход вы используете, обычно соз-
дается файл ресурса (.RES) для каждой прикладной программы.  Дан-
ный файл ресурсов содержит двоичную информацию для всех меню, ди-
алогов, битовых  образов  и  других  ресурсов,   используемых   в
прикладной программе.

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

          Добавление ресурсов к выполняемому файлу
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     После того,  как ваши ресурсы будут записаны в файл в двоич-
ном формате (.RES),  их нужно добавить к выполняемому файлу прог-
раммы (.EXE). В результате получится файл, содержащий выполняемый
код прикладной программы вместе с ресурсами.

     Добавить ресурсы к выполняемому файлу можно двумя способами:

     - С помощью редактора ресурсов скопировать ресурсы  из файла
       .RES в уже скомпилированный файл программы (.EXE).

     - Использовать компилятор ресурсов RC для копирования ресур-
       сов из файла .RES в уже  скомпилированный  файл  программы
       (.EXE).

 Компиляция ресурсов из интегрированной интерактивной среды
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Из интегрированной  среды  компилятор ресурсов можно вызвать
при построении проекта Windows с помощью  администратора проекта.
Включение любого  файла  .RC  (файла ресурса) в проект приводит к
тому, что Borland C++ будет вызывать для компиляции  его в  файла
.RES компилятор  ресурсов RC.  Затем,  после того как компоновщик
TLINK скомпонует прикладную программу или библиотеку DLL проекта,
компилятор ресурсов помечает и привязывает к нему ресурсы.

           Компиляция ресурсов из командной строки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Файлы ресурсов,  которые требуется использовать в прикладной
программе Windows, можно скомпилировать с помощью командной стро-
ки компилятора ресурсов.  Когда вы  будете  готовы  к  построению
прикладной программы,  можно использовать компилятор ресурсов для
привязки файла .RES к файлу .EXE или .DLL.

      Компиляция ресурсов с помощью формирующего файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В формирующем  файле добавьте к списку файлов в явном прави-
ле, которое управляет  построением  конечного  файла  .EXE,  файл
.RES. В  этом  правиле  добавьте также команду вызова компилятора
ресурсов для вызова  компилятора  ресурсов  с  корректным  файлом
.RES. Вы  можете также добавить правило вызова компилятора ресур-
сов для "старого" файла. RES.

               Синтаксис компилятора ресурсов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Синтаксис командной  строки  для вызова компилятора ресурсов
имеет следующий вид:

     RC [параметр] файл_ресурсов [файл_модуля]

           Примечание: Описание параметров  компилятора  ресурсов
      содержится в Таблице 6.1.

     Например, для  компиляции файла WHELLO.RC и добавления его к
файлу WHELLO.EXE можно задать следующую командную строку:

     rc whello

     Эта простейшая форма работает только в том случае, если файл
ресурса и  выполняемый файл имеет одно и то же имя.  Если бы файл
WHELLO.RC назывался бы WHELLORS.RC, то нужно дать команду:

     rc whellors whello

     Чтобы скомпилировать только файл ресурсов  WHELLO.RC  (и  не
добавлять результирующий файл WHELLO.RES к файлу WHELLO.EXE), ис-
пользуйте параметр -R, например:

     rc -r whello

     Вы получите файл WHELLO.RES.  Чтобы  добавить  WHELLO.RES  к
WHELLO.EXE, наберите:

     rc whello.res

     Чтобы отметить модуль,  как совместимый с Windows, но не до-
бавлять к нему ресурсы, просто вызовите компилятор ресурсов, ука-
зав имя  модуля  (заметим,  что имя файла должно иметь расширение
.EXE, .DLL или .DRV). Например:

     rc whello.exe

     Параметры компилятора ресурсов описываются в следующей  таб-
лице. Отметим,  что компилятор ресурсов не различает регистр сим-
волов (-e эквивалентно -E). Кроме того, параметры, не воспринима-
ющие аргументов,   можно   скомбинировать  (допустимо,  например,
-krp):

                 Параметры компилятора ресурсов       Таблица 6.1
ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і   Параметр     і Что он делает                                і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   -?           і Выводит справочную информацию по  компиляторуі
і                і ресурсов (эквивалентен -H).                  і
і                і                                              і
і   -d идентиф   і Определяет  для  препроцессора  идентификаторі
і                і "идентиф".                                   і
і                і                                              і
і   -e           і Изменяет  ячейку глобальной памяти DLL, пере-і
і                і мещая за границу банка EMS.                  і
і                і                                              і
і   -fe имя_файлаі Переименовывает файл .EXE в "имя_файла".     і
і                і                                              і
і   -fo имя_файлаі Переименовывает файл .RES в "имя_файла".     і
і                і                                              і
і   -h           і Выводит справочную информацию по  компиляторуі
і                і ресурсов (эквивалентен -?).                  і
і                і                                              і
і   -i маршрут   і После поиска включаемых файлов и  файлов  ре-і
і                і сурсов, RC выполняет поиск файлов в каталоге,і
і                і заданном параметром "маршрут". См. также опи-і
і                і сание параметра -x.                          і
і                і                                              і
і   -k           і Выключает оптимизацию загрузки для всех  сег-і
і                і ментов и ресурсов.  (Обычно компилятор ресур-і
і                і сов  выполняет  предварительную загрузку всехі
і                і сегментов данных,  неотбрасываемых  сегментові
і                і кода  и  сегмента кода с точками входа,  дажеі
і                і если эти сегменты не отмечены,  как PRELOAD ві
і                і файле определения модуля.  Кроме того, компи-і
і                і лятор ресурсов обычно загружает все предвари-і
і                і тельно  загружаемые  сегменты  в  выполняемыйі
і                і файл в непрерывную область.)                 і
і                і                                              і
і   -l           і Информирует Windows, что прикладная программаі
і                і использует дополнительную память в соответст-і
і                і вии со спецификацией LIM 3.2                 і
і                і                                              і
і   -lim32       і Эквивалентно параметру -l.                   і
і                і                                              і
і   -m           і Присваивает каждый экземпляр  задачи  различ-і
і                і ному банку EMS, если  расширенная  память поді
і                і Windows конфигурирована под EMS 4.0.         і
і                і                                              і
і   -multinst    і Эквивалентен параметру -m.                   і
і                і                                              і
і   -p           і Делает DLL локальной для одного или более эк-і
і                і земпляров  прикладной  программы,  что  можеті
і                і дать выигрыш в производительности.           і
і                і                                              і
і   -r           і Компилирует файл .RC в файл .RES, но  не  до-і
і                і бавляет его к файлу .EXE.                    і
і                і                                              і
і   -t           і Создает прикладную программу, которая  должнаі
і                і выполняться только в стандартном режиме или ві
і                і улучшенном режиме процессора 386.            і
і                і                                              і
і   -v           і Выводит все сообщения, возникающие в процессеі
і                і работы компилятора (развернутый вывод).      і
і                і                                              і
і   -x           і Исключает поиск в каталогах,  указанных в пе-і
і                і ременной операционной среды INCLUDE. См. так-і
і                і же описание параметра -i.                    і
АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

          Глава 7. HC: Компилятор справочников Help
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     В данной главе рассмотрены следующие вопросы:

     - Создание и обеспечение интерактивной документации Help.

     - Планирование системы Help.

     - Создание тематических файлов Help.

     - Построение справочного файла Help.

     - Примеры  справочника Help и сообщения компилятора об ошиб-
       ках.

     Данная глава предполагает,  что вы знакомы с системой  инте-
рактивной документации Help, принятой в Microsoft Windows. В раз-
делах приводятся фрагменты демонстрационных  программ, написанных
на  языках  Cи  и Паскаль.  Полный текст этих программ имеется на
дискетах дистрибутива.  Если вы не знакомы с системой интерактив-
ной документации, используемой в Windows, выберите время и позна-
комьтесь с ней, запустив примеры.

оздание системы интерактивной документации Help: цикл разработки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Создание интерактивной документации для прикладных  программ
Windows включает следующие основные шаги:

      1. Сбор информации для статей справочника Help.

      2. Планирование  интерактивной  документации.  Соображения,
         которыми  следует руководствоваться при планировании ин-
         терактивной документации,  изложены в Главе 2, "Планиро-
         вание системы Help".

      3. Ввод текста словарных статей (тем справочника Help).

      4. Вставка в текстовые файлы управляющих кодов. Управляющие
         коды определяют  порядок  передвижения  пользователя  по
         справочнику Help.  Примеры управляющих кодов приведены в
         разделе "Система интерактивной документации с точки зре-
         ния  ее разработчика".  Полное описание всех управляющих
         кодов дано в Главе 3, "Создание файла статей".

      5. Создание файла описания проекта.  Файл описания  проекта
         содержит информацию, необходимую для построения двоично-
         го справочного файла. Файл описания проекта рассмотрен в
         Главе 4,  "Построение справочного файла системы интерак-
         тивной документации".

     6. Построение файла ресурсов Help.  Фал ресурсов Help -  это
        скомпилированная версия файлов статей,  написанных разра-
        ботчиком Справочный файл системы интерактивной документа-
        ции строится в результате компиляции текстовых информаци-
        онных  файлов,  созданных  разработчиком  системы   Help.
        Операция  компиляции  подробно рассмотрена в данной главе
        ниже в разделе, "Построение справочного файла системы ин-
        терактивной документации".

     7. Тестирование и отладка системы интерактивной документации
        Help.

     8. Разработка или модификация  исходного  текста  прикладной
        программы  с целью обеспечения доступа к системе интерак-
        тивной документации, используемой в Windows.

истема интерактивной документации с точки зрения пользователя
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Пользователь воспринимает систему интерактивной документации
Help как часть соответствующей прикладной  программы.  Справочная
информация  отображается в виде текста и графики виде в специаль-
ном окне с заголовком "Help"  (Справочник),  размещаемом  впереди
окна прикладной программы.  На Рис. 7.1 показано окно Help, кото-
рое выводится, когда пользователь запрашивает справочную информа-
цию с копированием текста в Helpex.

     На этом окне системы интерактивной документации Help отобра-
жается раздел справочника,  называемый статьей (topic), в котором
кратко поясняется способ выполнения определенной операции. Первое
предложение в тексте,  отображаемом на Рис. 7.1, содержит опреде-
ляемый термин - слово "clipboard".  Если указать графическим кур-
сором на определяемый термин (последний помечается подчеркиванием
пунктирной линией) и нажать кнопку "мыши",  то на экране появится
всплывающее прямоугольное окно,  содержащее  определение  данного
термина. При отпускании кнопки "мыши" это окно исчезает.

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі             Help Example Hepl - HELPLEX.HLP            іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і File       Edit       Bookmark       Help                     і
іЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДґ
іі ЪДДДї   і o       і         і         і   ЪДї   іІІІІІІІІІІІІі
іі іA_ і   іo  o     і   <<    і   >>    і   іOі   іІІІІІІІІІІІІі
іі АДДДЩ   і o  o    і         і         і    ~\   іІІІІІІІІІІІІі
іі Index   і Back    і Browse  і Browse  і Browse  іІІІІІІІІІІІІі
іАДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДВДґ
і Copying Text                                                і^і
і                                                             ГДґ
і                                                             іІі
і Эта статья поясняет, как копировать текст в/из              і±і
і б у ф е р а  в ы р е з а н н о г о  и з о б р а ж е н и я   і±і
і (clipboard). Данная статья связана с ключевыми словами      і±і
і "сopy" и "clipboard".                                       і±і
і                                                             і±і
і                                                             і±і
і                                                             ГДґ
і                                                             іvі
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДЕДґ
і<іІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±і>і і
АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДЩ

     Рис. 7.1  Окно  "Help" при работе демонстрационной программы
HELPEX

     Текст статьи может содержать перекрестные ссылки  на  другие
статьи, которые информационно связаны с данной статьей. Для крат-
кости будем называть перекрестные ссылки просто  ссылками. Ссылки
помечаются в тексте подчеркиванием сплошной линией.  Если указать
графическим курсором на ссылку и нажать кнопку "мыши",  то содер-
жимое  окна  системы интерактивной документации изменится:  в нем
отобразится содержимое статьи,  на которую указывает  активизиро-
ванная ссылка. На Рис. 7.1 показано пояснение определения термина
"clipboard".

истема интерактивной документации с точки зрения ее разработчика
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     С точки зрения разработчика,  система интерактивной докумен-
тации Help - это  группа  информационных  файлов.  Информационный
файл представляет из себя обычный текстовый файл, в котором кроме
текстовой информации содержатся управляющие  коды.  На  Рис.  7.2
изображен исходный текст статьи,  отображаемой в окне системы ин-
терактивной документации на Рис. 7.1.

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі             Microsoft Word - HELPEX.RTF                іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і - File Edit View Insert Format Utilities Macro Window    Help і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і      ЪДДДДДДїЪДї     ЪДДїЪДї     ЪДїЪДїЪДї  ЪДїЪДїЪДїЪДїЪДї   і
іFont: іHelv  ііvі Pts:і10ііvі     і#ііLііxі  іvіі.ііDіі+іі*і   і
і      АДДДДДДЩАДЩ     АДДЩАДЩ     АДЩАДЩАДЩ  АДЩАДЩАДЩАДЩАДЩ   і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДґ
і clipboardterm_clipboard                                     і^і
і                                                             ГДґ
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґІі
і #S+KCopying Text                                            і±і
і                                                             і±і
і Эта статья поясняет, как копировать текст из э л е м е н т аі±і
і б у ф е р а  в ы р е з а н н о г о  и з о б р а ж е н и я   і±і
і (clipboarditem_clipboard). Данная статья  связана с         і±і
і ключевыми словами "сopy" и "clipboard".                     і±і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ±і
і #S+KDeleting Text                                           і±і
і                                                             і±і
і Эта статья поясняет, как удалять текст из  э л е м е н т а  і±і
і б у ф е р а  в ы р е з а н н о г о  и з о б р а ж е н и я   і±і
і (clipboarditem_clipboard). Данная статья  связана с         і±і
і ключевыми словами "сopy" и "clipboard".                     і±і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ±і
і #S+Exiting                                                  і±і
і                                                             і±і
і Данная статья поясняет, как выйти из HelpEx.                і±і
і                                                             і±і
і                                                             іvі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДґ
і±Pg 7±±Sec 1±±±±±±±±7/60±±±±±At±±±±Ln±±±±±Col 1±±±±±±±±±±±±±±±±і
АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Рис. 7.2 Информационный файл

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

истема интерактивной документации с точки зрения программиста
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     С точки зрения программиста,  система интерактивной докумен-
тации Help - это  независимая  прикладная  программа,  с  которой
пользователь работает как со всякой другой прикладной программой.
Чтобы активизировать систему интерактивной  документации Windows,
программист вставляет в исходный текст прикладной программы обра-
щение к процедуре WinHelp.  В эту процедуру в качестве одного  из
параметров  передается идентификатор статьи,  текст которой будет
отображаться в окне системы интерактивной документации  после  ее
запуска.

           Примечание: Интерфейс прикладной программы с  системой
      интерактивной   документации  Windows  (API  -  Application
      Programming Interface) подробно описан в разделе  "Построе-
      ние справочного файла системы интерактивной документации".

           Планирование интерактивной документации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     - Построение плана.

     - Определение структуры информационных файлов.

     - Визуальное отображение статей справочника Help.

                      Построение плана
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     - Предполагаемая аудитория пользователей,  которые будут ра-
       ботать с вашей прикладной программой;

     - Содержание статей справочника Help.

     - Структура статей.

     - Использование контекстно-зависимой справки.

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

                    Определение аудитории
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     С этой  точки зрения всех пользователей можно условно разде-
лить на четыре группы:

           Группы пользователей прикладной программы  Таблица 7.1
ЪДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іПользователи і Подготовленность                                і
ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Новички     і Пользователи, совершенно не знакомые с ЭВМ.     і
і             і                                                 і
ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Новички в   і Пользователи, имеющие  некоторый  опыт работы наі
і вашей       і ЭВМ, однако не знакомые с работой в  области,  кі
і области     і которой  относится ваша прикладная программ. Такі
і             і при построении справочной системы  для программыі
і             і "электронная  таблица"  следует  учитывать,  чтоі
і             і пользователь этой категории мог  работать раньшеі
і             і только с текстовыми процессорами.               і
і             і                                                 і
ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Обычный     і Пользователь, имеющий представление  об области,і
і пользовательі к которой относится ваша прикладная программа.  і
і             і                                                 і
ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Профессионалі Пользователь, который глубоко знаком с областью,і
і (эксперт)   і к которой  относится  документируемая прикладнаяі
і             і программа.                                      і
і             і                                                 і
АДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

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

              Планирование содержания документации

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

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

     Не существует универсальных рекомендаций,  полностью опреде-
ляющих содержание справочной информации. Если интерактивная доку-
ментация Help  предназначается  пользователям  всех перечисленных
категорий,  в ней следует документировать команды, процедуры, ис-
пользуемые термины,  возможности,  функции и прочие аспекты вашей
прикладной программы. Если же справочник Help создается в расчете
на  профессионального  пользователя,  то  часть перечисленных тем
(например,  инструкции по выполнению определенных процедур) можно
опустить. В процессе решения вопроса о тематическом составе спра-
вочной системы ориентиром должна служить предполагаемая аудитория
потенциальных пользователей.

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

                Планирование структуры статей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В большинстве информационных систем Helpс статьи справочного
руководства образуют иерархическую  структуру.  На  самом  высшем
уровне  такой иерархической системы находится оглавление справоч-
ника,  его алфавитный указатель либо и то и другое.  В оглавлении
перечисляются  названия  статей либо категорий статей,  доступных
пользователю для просмотра.

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

                    ЪДДДДДДДДДДДї
                    і Индексный і
                    і указатель і
                    АДДДДДВДДДДДЩ
                          і
      ЪДДДДДДДДДДДДДДДДВДДБДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДї
      і                і             і             і          і
      v                v             v             v          і
ЪДДДДДДДДДДДї    ЪДДДДДДДДДДДї ЪДДДДДДДДДДДї ЪДДДДДДДДДДДДї   і
і  Команды  і  ЪДґ Глоссарий і і Как рабо- і і Клавиатура і   і
і           і  і і           і і тать с ...і і            і   і
АДДДДДВДДДДДЩ  і АДДДДДДДДДДДЩ АДДДДДВДДДДДЩ АДДДДДДДДДДДДЩ   і
      і        і                     АДДДДДДї             ЪДДДЩ
      v        АДї                          v             v
   ЪДДДДДДДДДДДї і  ЪДДДДДДДДДДДї      ЪДДДДДДДДДДДї ЪДДДДДДДДДї
ЪДДґ   Индекс  і ГД>і  Статья   і  ЪДДДі  Статья   і і  "Мышь" і
і  і   команд  і і  і           і  і   і           і і         і
і  АДДДДДДДДДДДЩ і  АДДДДДДДДДДДЩ  і   АДДДДДДДДДДДЩ АДДДДДДДДДЩ
і  ЪДДДДДДДДДДДї і  ЪДДДДДДДДДДДї  і   ЪДДДДДДДДДДДї
ГД>ґ Глоссарий і ГД>і  Статья   і  ГД> і  Статья   і
і  і           і і  і           і  і   і           і
і  АДДДДДДДДДДДЩ і  АДДДДДДДДДДДЩ  і   АДДДДДДДДДДДЩ
і  ЪДДДДДДДДДДДї і  ЪДДДДДДДДДДДї  і   ЪДДДДДДДДДДДї
ГД>ґ Глоссарий і ГД>і  Статья   і  ГД> і  Статья   і
і  і           і і  і           і  і   і           і
і  АДДДДДДДДДДДЩ і  АДДДДДДДДДДДЩ  і   АДДДДДДДДДДДЩ
і  ЪДДДДДДДДДДДї і  ЪДДДДДДДДДДДї  і   ЪДДДДДДДДДДДї
ГД>ґ Глоссарий і АД>і  Статья   і  АД> і  Статья   і
і  і           і    і           і      і           і
і  АДДДДДДДДДДДЩ    АДДДДДДДДДДДЩ      АДДДДДДДДДДДЩ
і
і  ЪДДДДДДДДДДДї
АД>ґ Глоссарий і
   і           і
   АДДДДДіДДДДДЩ
         і
         АДДД продолжение тем

        Рис.2.1. Пример иерархической справочной системы

     Так в индексном указателе (оглавлении)  справочника  демонс-
трационной программы HELPEX содержатся названия категорий статей.
С каждым таким названием связано вторичное оглавление,  в котором
перечислены названия статей соответствующей категории.

     Переход пользователя   от  оглавления  к  тексту  конкретной
статьи соответствует переходу от общего к частному.

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

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

           Примечание: Дополнительные сведения о поиске по ключе-
      вому слову можно ниже.

     Помимо организации статей в иерархическую структуру, их мож-
но упорядочить в логическую последовательность (порядок этой пос-
ледовательности определяется аудиторией пользователей). Такую ло-
гическую последовательность обычно  называют  "последовательность
просмотра". Использование последовательностей просмотра позволяет
читать справочную информацию в определенном порядке. Для передви-
жения  по  этой  последовательности  предназначена кнопка команды
"Browse" (Просмотр).  Данная возможность особенно полезна для тех
пользователей, которые предпочитают изучать информационно связан-
ные пункты справочника  совместно  (например,  статьи  содержащие
описания команд из меню "File").

           Примечание: Дополнительные  сведения  о последователь-
     ностях просмотра можно ниже.

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

                Контекстно-зависимая справка
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Система интерактивной документации Windows Helpе поддержива-
ет контекстно-зависимые справки. Если контекстно-зависимые справ-
ки создаются согласованно с исходным текстом прикладной  програм-
мы,  то  их  использование предоставляет следующие дополнительные
возможности:  при работе с меню пользователь  может  использовать
клавишу  F1  для  получения справки о текущем пункте меню,  кроме
этого пользователь может получить справочную информацию об  опре-
деленной команде или каком-либо другом элементе,  отображаемом на
экране,  набрав комбинацию клавиш Shift+F1,  указав на  требуемый
элемент графическим курсором и нажав кнопку "мыши".

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

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

           Примечание: Детальное  описание  правил создания файла
      описания проекта можно найти ниже.

     Контекстные номера,  назначенные  в  файле  описания проекта
Help,  должны соответствовать контекстным  номерам,  передаваемым
прикладной  программой системе интерактивной документации Windows
с целью отображения на экране справочной информации по определен-
ной теме.

           Примечание: Дополнительная информация о процедуре наз-
     начения контекстных номеров содержится ниже.

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

           Примечание: Дополнительная информация о контекстно-за-
      висимой справке и контекстных строках содержится ниже.

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

           Примечание: Дополнительные сведения о трассировке  ин-
      формационных  файлов  можно  найти ниже в разделе "Создание
      файла трассировки".

         Определение структуры информационных файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Хотя интерактивная  документация  Helpу различных прикладных
программ имеет различное содержание и ей соответствует разное ко-
личество информационных файлов, однако структура комплекса инфор-
мационных файлов всегда одинакова. Информационные файлы разделены
на секции,  называемые статьями (topics). Статьи в информационном
файле отделяются друг от  друга  знаком  "конец  страницы"  (page
break). При  построении справочного файла Help компилятор перено-
сит в него информацию,  содержащуюся в  отдельных  информационных
файлах.  Информация, хранящаяся в справочном файле отображается в
окне системы интерактивной документации Windows Help  по  запросу
пользователя.

          Файлы Help, подготовленные для операции построения
                                   і
     ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДБДДДВДДВДДВДДДДДДДДДДДї
     і                  і              і  і  і           і
     v                  v              v  v  v           v
ЪДДДДДДДДДДДДДї  ЪДДДДДДДДДДДДДї   Другие файлы   ЪДДДДДДДДДДДДДї
і Файл, под-  і  і Файл, под-  і   Word           і Файл, под-  і
і готовленный і  і готовленный і                  і готовленный і
і в редакторе і  і в редакторе і                  і в редакторе і
і Word        і  і Word        і                  і Word        і
і             і  і             і                  і             і
і Страница 1  і  і Страница 1  і                  і Страница 1  і
ГДДДДДДДДДДДДДґ  ГДДДДДДДДДДДДДґ                  ГДДДДДДДДДДДДДґ
і      ^      і  і      ^      і                  і      ^      і
і      і      і  і      і      і                  і      і      і
і      і      і  і      і      і                  і      і      і
і      і      і  і      v      і                  і      і      і
і      і      і  ГДДДДДДДДДДДДДґ                  і      і      і
і      і      і  і             і                  і      і      і
і      і      і  і             і                  і      і      і
і      і      і  і Страница 1  і                  і      і      і
і      і      і  АДДДДДДДДДДДДДЩ                  і      і      і
і      v      і                                   і      і      і
ГДДДДДДДДДДДДДґ                                   і      v      і
і             і                                   ГДДДДДДДДДДДДДґ
і             і                                   і             і
і Страница 1  і                                   і             і
АДДДДДДДДДДДДДЩ                                   і Страница 1  і
                                                  АДДДДДДДДДДДДДЩ

    Рис. 7.4 Общая структура комплекса информационных файлов Help

ыбор структуры файлов Help для конкретной прикладной программе
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

   ФАЙЛ СТАТЬИ                         ФАЙЛ СТАТЬИ
   (оглавление)                        (содержание)
 ЪДДДДДДДДДДДДДДДДДДДДДДДДї      ЪДДДДДДДДДДДДДДДДДДДДДї
 і Элемент оглавления 1 ДДЕДДДДД>іЭЛЕМЕНТ ОГЛАВЛЕНИЯ 1 і
 і Элемент оглавления 1 ДДЕДДДї  іЭлемент содержания 1ДЕДДДДДДДДї
 і Элемент оглавления 1 ДДЕДї і  іЭлемент содержания 2ДЕДДДДДДї і
 і                        і і і  іЭлемент содержания 3ДЕДДДДї і і
 і Конец файла            і і і  іЭлемент содержания 4ДЕДДї і і і
 АДДДДДДДДДДДДДДДДДДДДДДДДЩ і і  і                     і  і і і і
                            і і  і  Конец              і  і і і і
                            і і  і страницу            і  і і і і
                            і і  ГДДДДДДДДДДДДДДДДДДДДДґ  і і і і
                            і АД>іЭЛЕМЕНТ ОГЛАВЛЕНИЯ 2 і  і і і і
                            і    іЭлемент содержания 5 і  і і і і
                            і    іЭлемент содержания 6 і  і і і і
                            і    іЭлемент содержания 7 і  і і і і
                            і    і                     і  і і і і
                            і    і  Конец              і  і і і і
                            і    і страницы            і  і і і і
                            і    ГДДДДДДДДДДДДДДДДДДДДДґ  і і і і
                            АДДД>іЭЛЕМЕНТ ОГЛАВЛЕНИЯ 3 і  і і і і
                                 іЭлемент содержания 8 і  і і і і
                                 іЭлемент содержания 9 і  і і і і
                                 іЭлемент содержания 10і  і і і і
                                 іЭлемент содержания 11і  і і і і
                                 іЭлемент содержания 12і  і і і і
                                 іЭлемент содержания 13і  і і і і
                                 і                     і  і і і і
                                 і                     і  і і і і
                                 і Коней файла         і  і і і і
                                 АДДДДДДДДДДДДДДДДДДДДДЩ

  Информационные файлы ДДї                                і і і і
                         v                                і і і і
     ФАЙЛ СТАТЬИ ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і і і
(справочные темы)і ФАЙЛ СТАТЬИ     ЪДДДДДДДДДДДДДДДДДДДДДДДДЩ і і
   ЪДДДДДДДДДДї  і(справочные темы)іФАЙЛ СТАТЬИ  ЪДДДДДДДДДДДДЩ і
ЪДДґСТАТЬЯ 1  і  іЪДДДДДДДДДДї  ЪДДЩ(справ.темы) і ФАЙЛ СТАТЬИ  і
і  і       <ДДЕДДЩіСТАТЬЯ 7  і  і ЪДДДДДДДДДДї ЪДЩ ЪДДДДДДДДДДї і
і  і          і   і       <ДДЕДДЩ іСТАТЬЯ 12ДЕДЕДї іСТАТЬЯ 18 і і
і  і          і   і          і    і       <ДДЕДЩ і і          і і
і  і Конец    і   і          і    і          і   і і      <ДДДЕДЩ
і  і страницы і   і Конец    і    і          і   і і          і
і  ГДДДДДДДДДДґ   і страницы і    і Конец    і ЪДЩ і Конец    і
і  іСТАТЬЯ 2  і   ГДДДДДДДДДДґ    і страницы і і   і страницы і
і  і          і   іСТАТЬЯ 8  і    ГДДДДДДДДДДґ і   ГДДДДДДДДДДґ
і  і          і   і          і    іСТАТЬЯ 13 і і   іСТАТЬЯ 19 і
і  і          і   і          і ЪДДЕДДД>      і і   і          і
і  і Конец    і   і          і і  і          і і   і          і
і  і страницы і   і Конец    і і  і          і і   і          і
і  ГДДДДДДДДДДґ   і страницы і і  і Конец    і і   і Конец    і
і  іСТАТЬЯ 3  і   ГДДДДДДДДДДґ і  і страницы і і   і страницы і
і  і          і   іСТАТЬЯ 9  і і  ГДДДДДДДДДДґ і   ГДДДДДДДДДДґ
АДДЕДДД>      і   і          і і  іСТАТЬЯ 14 і і ЪДЕДСТАТЬЯ 20і
   і          і ЪДЕДДД>  <ДДДЕДЩ  і          і і і і          і
   і Конец    і і і          і    і          і і і і          і
   і страницы і і і Конец    і    і          і і і і          і
   ГДДДДДДДДДДґ і і страницы і    і Конец    і і і і Конец    і
   іСТАТЬЯ 4  і і ГДДДДДДДДДДґ    і страницы і і і і страницы і
   і          і і іСТАТЬЯ 10 і    ГДДДДДДДДДДґ і і ГДДДДДДДДДДґ
   і Конец    і і і          і    іСТАТЬЯ 15 і і і іСТАТЬЯ 21ДЕДї
   і страницы і і і Конец    і    і          і і і і          і і
   ГДДДДДДДДДДґ і і страницы і    і Конец    і і і і Конец    і і
   іСТАТЬЯ 5 ДЕДЩ ГДДДДДДДДДДґ    і страницы і і і і страницы і і
   і          і   іСТАТЬЯ 11 і    ГДДДДДДДДДДґ і і ГДДДДДДДДДДґ і
   і          і   і          і    іСТАТЬЯ 16 і і і іСТАТЬЯ 22 і і
   і          і ЪДЕДДД>      і    і          і і і і          і і
   і          і і і          і    і     <ДДДДЕДЕДЩ і      <ДДДЕДЩ
   і Конец    і і і Конец    і    і          і і   і          і
   і страницы і і і файла    і    і          і і   і          і
   ГДДДДДДДДДДґ і АДДДДДДДДДДЩ    і Конец    і і   і Конец    і
   іСТАТЬЯ 5 ДЕДЩ                 і страницы і і   і страницы і
   і          і                   ГДДДДДДДДДДґ і   ГДДДДДДДДДДґ
   і Конец    і                   іСТАТЬЯ 17 і і   іСТАТЬЯ 23 і
   і файла    і                   і          і АДДДЕДДД>      і
   АДДДДДДДДДДЩ                   і Конец    і     і Конец    і
                                  і файла    і     і файла    і
                                  АДДДДДДДДДДЩ     АДДДДДДДДДДЩ
     Рис. 7.5 Структура справочного файла Help,  показывающая ги-
перссылки

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

     На Рис.  7.5 приведен пример информационной структуры  спра-
вочной системы Help.  С целью упрощения диаграммы и более нагляд-
ного представления связей между статьями (ссылок) количество ста-
тей и информационных файлов ограничено. Ссылки из одной статьи на
другую обозначены на диаграмме стрелками.  Данный рисунок не ста-
вит  целью  продемонстрировать  оптимальное  число информационных
файлов. Кроме того, на нем не показано связывание статей в инфор-
мационных файлах в последовательности просмотра.

              Проектирование статей справочника
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Визуальное представление информации в окне системы  интерак-
тивной  документации  Windows Help зависит,  главным образом,  от
компоновки соответствующей статьи справочника. В системе интерак-
тивной документации Windows Help для наглядного представления ин-
формации можно использовать текст с различными атрибутами и  гра-
фические изображения.

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

                        Схема текста
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Язык             і Пишите документацию на языке,  понятном ау-і
і                  і дитории пользователей,  для которых эта до-і
і                  і кументация  предназначается.  Использованиеі
і                  і слишком сложного языка может вызвать неудо-і
і                  і вольствие пользователя,  поскольку ему при-і
і                  і дется заучивать большое  число  определенийі
і                  і для незнакомых терминов и понятий.         і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Объем текста     і Используйте краткий текст. Исследования по-і
і                  і казали, что чтение текста, отображаемого наі
і                  і экране,  происходит  со  скоростью  на  30%і
і                  і меньшей скорости чтения  печатного  текста.і
і                  і Чтобы  помочь  пользователю  компенсироватьі
і                  і потерю в скорости чтения, следует использо-і
і                  і вать краткий, лаконичный текст.            і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Размер параграфа і Используйте параграфы  небольшого  размера.і
і                  і При чтении текста с экрана,  его содержаниеі
і                  і труднее воспринимается  пользователем,  чемі
і                  і при  чтении печатного текста. Использованиеі
і                  і коротких  параграфов  поможет  решить   этуі
і                  і проблему.                                  і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Пустые строки    і Используйте пустые  строки  для  визуальнойі
і                  і группировки  информации.   Вставка   пустыхі
і                  і строк  делает  текст  на экране более чита-і
і                  і бельным.  Широко используйте это  средство,і
і                  і однако  не забывайте о том что размер блокаі
і                  і информации на экране ограничен. При наличииі
і                  і пустых строк экран кажется пользователю бо-і
і                  і лее информативным. Так если фактическое от-і
і                  і ношение количества пустых строк к количест-і
і                  і ву  строк  с  текстом   равно   50:50,   тоі
і                  і пользователю  будет  казаться,  что имеетсяі
і                  і отношение 40:60.                           і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Выделение        і Разумно используйте  технику  выделения.  Ві
і                  і системе интерактивной  документации Windowsі
і                  і имеется  большой набор средств, позволяющихі
і                  і визуально  выделить  определенный  фрагменті
і                  і информации: разнообразные шрифты, цвет и т.і
і                  і д.  Использование всего нескольких  средстві
і                  і визуального  выделения ускоряет поиск поль-і
і                  і зователем требующейся ему  информации.  Ис-і
і                  і пользование  видеоэффектов в избыточных ко-і
і                  і личествах снижает эффективность представле-і
і                  і ния информации и утомляет пользователя. Ис-і
і                  і пользуйте одновременно не более одного-двухі
і                  і разных шрифтов,  как это принято в печатнойі
і                  і документации.                              і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Графические изо- і Используйте графику для дополнительного по-і
і бражения и пик-  і яснения графических элементов.  Система ин-і
і тограммы         і терактивной  документации Windows поддержи-і
і                  і вает  растровые  графические   изображения.і
і                  і Используйте  графику  для пояснения функцийі
і                  і пиктограмм и прочих  графических  элементові
і                  і окна  прикладной  программы.  Помните,  чтоі
і                  і графическое изображение  привлекает большееі
і                  і внимание  пользователя,  чем окружающий егоі
і                  і текст.  Обрежьте изображение так, чтобы оноі
і                  і не  содержало посторонней,  отвлекающей ин-і
і                  і формации.  Если вы уверены что все потенци-і
і                  і альные  пользователи вашей прикладной прог-і
і                  і раммы имеют цветные видеомониторы,  исполь-і
і                  і зуйте только цветную графику. Как и при ор-і
і                  і ганизации контекстно-зависимой справки, ис-і
і                  і пользование графических  изображений приво-і
і                  і дит к дополнительным  затратам  времени  наі
і                  і фазе разработки. Время затрачивается на ак-і
і                  і куратное вырисовывание информативного  гра-і
і                  і фического изображения.                     і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Единый стиль     і Старайтесь выдерживать единый стиль.  Поль-і
і                  і зователь подсознательно ожидает однотипногоі
і                  і визуального стиля  представления информацииі
і                  і независимо  от ее содержания. Использованиеі
і                  і единообразных заголовков,  способов выделе-і
і                  і ния  информации,  шрифтов  и  единообразноеі
і                  і расположение текста является важнейшим фак-і
і                  і тором эффективности    справочной   системыі
і                  і Help.                                      і
АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

      Использование различных типов и размеров шрифтов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

     В стандартный комплект поставки Windows входят следующие ви-
ды шрифтов:

                         Шрифты Windows               Таблица 7.3
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Шрифт                         Размеры                         і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Courier (Курьер)              10, 12, 15 пунктов              і
і Helv (Гельветика)             8, 10, 12, 14, 18, 24 пункта    і
і Modern (Модерн)                                               і
і Roman (Роман)                                                 і
і Script (Рукописный)                                           і
і Symbol (Символы)              8, 10, 12, 14, 18, 24 пункта    і
і Tms Roman (Таймс Роман)       8, 10, 12, 14, 18, 24 пункта    і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Поскольку система  Help  интерактивной  документации Windows
позволяет  использовать  любой  шрифт  из  числа  определенных  в
Windows,  используя шрифт Symbol,  можно включать в состав текста
статьи специальные символы, например изображение стрелки.

               Вставка графических изображений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Система интерактивной  документации  Windows  Help позволяет
включать в состав справочной информации  графические изображения.
Графическое изображение может помещаться и, соответственно, отоб-
ражаться в любом месте страницы. Рядом с графическим изображением
может помещаться текст.

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

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

           Примечание: Дополнительную информацию о порядке встав-
      ки  в текст статей графических изображений можно найти ниже
      в разделе "Вставка графических изображений".

     О повышении наглядности представления информации см.:

     1. Bradford,  Annet Noris.  "Conceptual Differences  Between
        the   Display   Screen   and   Printed  Page."  Technical
        Communication (Third Quarter 1984): 13-16. ("Концептуаль-
        ное отличие печатной информации от информации, отображае-
        мой на экране дисплея.")

     2. Galitz,  Wilbert O.  Handbook of Screen Format Design. 3d
        ed.  Wellesley,  MA: QED Information Science, Inc., 1989.
        ("Справочник по дизайну в области  отображения информации
        на экране дисплея.")

     3. Houghton,   Raymond  C.,  Jr.  "Online  Help  Systems:  A
        Conspectus."  Communications  of  the  ACM  27  (February
        1984):  126-133.  ("Системы  интерактивной  документации:
        Конспект.")

     4. Queipo Larry.  "User Expectations of Online Information."
        IEEE   Transactions  on  Professional  Communications  PC
        29(December 1986):  11-15.  ("Что ожидает пользователь от
        интерактивно отображаемой информации.")

             Создание информационного файла Help
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

     В данной главе рассмотрены следующие вопросы:

     - Выбор редактора.

     - Структурирование информационного файла Help.

     - Кодирование информационного файла Help.

     - Сопровождение информационных файлов Help.

                       Выбор редактора
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для ввода текста информационного файла  необходим  текстовый
редактор,  который  поддерживает работу с файлами в формате "RTF"
(Reach Text Format - Расширенный Текстовый  Формат)  и  позволяет
создавать сноски, а также использовать подчеркнутый и перечеркну-
тый (либо подчеркнутый двойной линией) текст,  служащий признаком
управляющих кодов.  Управляющие коды описаны в разделе "Кодирова-
ние информационного файла Help".

           Структурирование информационного файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     - Отдельные статьи отделены  друг  от  друга  принудительным
       концом страницы (hard page break).

     - Каждой статье, доступ к которой осуществляется путем пере-
       хода по  ссылке  (гиперссылка),  присваивается  уникальный
       идентификатор, называемый контекстной строкой.

     - Каждая статья может иметь заголовок.

     - Каждая  статья  может иметь список связанных с ней ключевы
       слов.

     - Каждая статья может иметь индикатор признака включения.

     - Каждой статье может назначаться номер в последовательности
       просмотра.

              Кодирование информационного файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Используемые в Help управляющие коды предназначены для  сле-
дующего:

                      Управляющие коды Help           Таблица 7.4
ЪДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Управляющий код   і Назначение                                і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Сноска *          і Признак включения.  Код  используется  дляі
і                   і определения  признака,  который  указываеті
і                   і статьи, включаемые компилятором в справоч-і
і                   і ный файл только при выполнении  определен-і
і                   і ного условия (условная компиляция).  Приз-і
і                   і нак включения  -  необязательный  элемент,і
і                   і однако если он используется,  то соответс-і
і                   і твующий управляющий код должен быть первымі
і                   і среди  прочих управляющих кодов, связанныхі
і                   і с данной статьей.                         і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Символ #          і Контекстная строка.  Код  используется дляі
і                   і определения уникальной контекстной строки,і
і                   і однозначно идентифицирующей данную статью.і
і                   і Поскольку возможность перехода на  опреде-і
і                   і ленную  статью по ссылке предполагает, чтоі
і                   і статье присвоена  определенная контекстнаяі
і                   і строка,  доступ  к статье,  у которой кон-і
і                   і текстная строка не указана,  возможен лишьі
і                   і через  поиск по ключевому слову либо черезі
і                   і последовательность просмотра.             і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Сноска $          і Заголовок. Код используется для  определе-і
і                   і ния заголовка статьи.  Использование заго-і
і                   і ловка не является обязательным.           і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Сноска K          і Ключевое слово. Код используется для опре-і
і                   і деления ключевого слова, которое может ис-і
і                   і пользоваться для поиска данной статьи. Ис-і
і                   і пользование  ключевых  слов  не   являетсяі
і                   і обязательным.                             і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Сноска +          і Номер в последовательности просмотра.  Коді
і                   і используется для определения номера в пос-і
і                   і ледовательности просмотра, которая опреде-і
і                   і ляет порядок просмотра пользователем груп-і
і                   і пы статей. Использование последовательнос-і
і                   і тей просмотра  не  является  обязательным.і
і                   і Если вы не будете создавать последователь-і
і                   і ностей просмотра, то окно системы интерак-і
і                   і тивной  документации Windows все равно бу-і
і                   і дет  содержать  кнопку  команды   "Browse"і
і                   і (Просмотр), однако она окажется заблокиро-і
і                   і ванной.                                   і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Штриховой текст   і Перекрестная ссылка.  Код используется дляі
і или текст, под-   і определения  перехода  по ссылке на другуюі
і черкнутый двойной і статью.                                   і
і чертой            і                                           і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Подчеркнутый тексті Определяемый термин.  Означает,  что   приі
і                   і указании   графическим  курсором  на  этоті
і                   і текст и нажатии кнопки "мыши" (либо клави-і
і                   і ши  Enter)  появляется всплывающий прямоу-і
і                   і гольный блок, который при отпускании кноп-і
і                   і ки исчезает.  Блок может содержать опреде-і
і                   і ление термина или пояснение  фразы,  подс-і
і                   і казку  по  поводу  выполнения  процедуры иі
і                   і т.д.                                      і
і                   і                                           і
ГДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Скрытый текст     і Контекстная  строка  перекрестной  ссылки.і
і                   і Определяет контекстную  строку статьи,  наі
і                   і которую будет выполнен переход, если поль-і
і                   і зователь  выберет  текст,  непосредственноі
і                   і предшествующий скрытому тексту.           і
і                   і                                           і
АДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

               Назначение признаков включения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Признаки включения  вставляются  в текст в виде сносок,  при
этом в качестве  знака  сноски  используется  символ  "*".  Когда
статье  сопоставлен признак включения,  то соответствующая статья
включается либо не включается в состав справочного файла в  зави-
симости  от содержимого раздела [BuildTags] файла описания проек-
та,  а также в зависимости  от  условий,  указываемых  параметром
BUILD.

           Примечание: Описание параметра BUILD,  а также раздела
      [BuildTags] файла описания проекта содержится ниже в разде-
      ле "Построение справочного файла системы интерактивной  до-
      кументации".

     Чтобы сопоставить  определенной  статье  признак  включения,
нужно сделать следующее:

     1. Поместите курсор в начало первой строки статьи, так чтобы
        он оказался впереди всех  прочих  сносок,  созданных  для
        этой статьи.

     2. Создайте сноску со знаком сноски "*".  Обратите внимание,
        что рядом с началом первой  строки  появился  надстрочный
        символ "*" (звездочка).

     3. В качестве текста сноски укажите имя признака включения.

     Обратите внимание  на  то,  чтобы между знаком "*" и текстом
сноски находилось не более одного пробела.

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

     * AppVersion1; AppVersion2; Test_Build

     Имя признака сноски эквивалентно установки признака в истин-
ное значение при сравнении со значением,  заданным в файле проек-
та.  Компилятор предполагает, что другие признаки сносок для дан-
ной статьи имеют ложное значение.

     Компилятор принимает решение о том, включать или не включать
данную статью в справочный файл следующим образом:  в  логическом
выражении,  определяемом параметром BUILD,  вместо всех признаков
включения,  сопоставленных данной статье,  подставляется значение
"ИСТИНА".  Вместо всех остальных признаков подставляется значение
"ЛОЖЬ".  Если в результате такой подстановки логическое выражение
принимает значение "ИСТИНА",  то данная статья включается в спра-
вочный файл Help, а если - "ЛОЖЬ", то не включается. Следует пом-
нить,  что все имена используемых признаков включения должны быть
описаны в секции [BuildTags] в файле описания  проекта независимо
от того, что часть из них может быть описана в условном выражении
параметра BUILD.

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

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

                Назначение контекстных строк
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

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

          Примечание: Процедура  определения  перехода  по ссылке
     описана в разделе "Организация перекрестных ссылок".  Об ор-
     ганизации  последовательности  просмотра  можно  прочитать в
     разделе "Организация последовательности просмотра". О сопос-
     тавлении статье списка ключевых слов читайте в разделе "Наз-
     начение ключевых слов".

     Чтобы сопоставить определенной статье Help контекстную стро-
ку, сделайте следующее:

     1. Поместите курсор слева от первой строки статьи.

     2. Создайте сноску со знаком сноски "#".  Обратите внимание,
        что рядом с началом первой  строки  появился  надстрочный
        символ "#".

     3. В качестве текста сноски укажите контекстную строку.

     Обратите внимание  на  то,  чтобы между знаком "#" и текстом
строки находилось не более одного пробела.

     Строчные буквы в контекстной строке считаются эквивалентными
соответствующим прописным.

     Контекстная строка может включать буквы (A-Z),  цифры (0-9),
а также символы "точка" (.) и "подчерк" (_). Ниже приведен пример
текста сноски,  определяющей контекстную строку для статьи с наз-
ванием "Opening an Existing Text  File"  (Открытие  существующего
текстового файла):

     # OpenExistingTextFile

     Хотя максимально допустимая длина контекстной строки состав-
ляет 255  символов,  использование  слишком  длинных  контекстных
строк  практического значения не имеет.  Используйте короткие ос-
мысленные контекстные строки,  поскольку ввод таких строк в текс-
товый файл наиболее прост.

                    Назначение заголовков
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Заголовки статей имеют следующее назначение:

     - Они появляются в меню "Bookmark" (Закладка).
     - Они появляются в блоке перечня "Topics  Found"  (Найденные
       статьи) после поиска по ключевому слову (статьи, у которых
       заголовок отсутствует,  отображаются в этом списке в  виде
       ">>Untitled Topic<<" - Статья без заголовка).

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

     Чтобы сопоставить определенной статье заголовок,  нужно сде-
лать следующее:

     1. Поместите курсор слева от первой строки статьи.

     2. Создайте сноску со знаком сноски "$".  Обратите внимание,
        что рядом с началом первой  строки  появился  надстрочный
        символ "$" (знак доллара).

     3. В качестве текста сноски укажите требуемый заголовок. Об-
        ратите внимание на то,  чтобы между знаком "$" и  текстом
        заголовка находилось не более одного пробела.

     Ниже приведен  пример текста сноски,  определяющей заголовок
для некоторой статьи:

     $ Help Keys

     При назначении заголовков следует помнить о следующих  огра-
ничениях:
                   Ограничения заголовков Help        Таблица 7.5
ЪДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і     Элемент   і  Ограничения                                  і
ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Символы       і Заголовок не  может содержать более 128 симво-і
і               і лов. В случае, если заголовок длиннее 128 сим-і
і               і волов, то избыточные символы компилятором Helpі
і               і отбрасываются.  Система интерактивной докумен-і
і               і тации  Windows после поиска по ключевому словуі
і               і отображает заголовки найденных статей в  соот-і
і               і ветствующем блоке перечня.                    і
ГДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Форматированиеі Форматирование текста сносок, определяющих за-і
і               і головки, невозможно.                          і
АДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                  Назначение ключевых слов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Система интерактивной документации  Windows  Help  позволяет
произвести  поиск  определенной  статьи  по  сопоставленным  этой
статье ключевым словам.  Когда при поиске пользователь  указывает
ключевое слово,  ищутся все статьи,  которые содержат это слово в
списке сопоставленных им ключевых слов.  После завершения поиска,
в  блоке  перечня на панели диалога "Search" (Поиск) отображается
список заголовков найденных статей.  Поскольку поиск по ключевому
слову обычно является наиболее быстрым способом доступа к требуе-
мой информации,  имеет смысл сопоставить ключевые слова большинс-
тву статей справочника Help.

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

     Чтобы сопоставить определенной статье ключевое слово:

      1. Поместите курсор слева от первой строки статьи.

      2. Создайте  сноску со знаком сноски "K" (прописная латинс-
         кая буква K).  Обратите внимание,  что рядом  с  началом
         первой строки появился надстрочный символ "K".

      3. В качестве текста сноски укажите требуемое ключевое сло-
         во (слова).

     Обратите внимание на то,  чтобы между знаком  "K"  и  первым
ключевым словом находилось не более одного пробела.

     Если статье сопоставляется несколько ключевых слов, они раз-
деляются знаком "точка с запятой" (;).

     Ниже приведен пример текста сноски, определяющей для некото-
рой статьи список ключевых слов:

K open;opening;text file;ASCII;existing;text only;documents;

     Всякий раз,  когда  при  поиске пользователь будет указывать
одно из указанных выше ключевых слов,  заголовок  соответствующей
статьи  будет  появляться в блоке перечня панели диалога "Search"
(Поиск).  Одно и то же ключевое слово может быть  назначено  нес-
кольким различным статьям.

     При назначении ключевых слов следует помнить о следующих ог-
раничениях:

                 Ограничения ключевых слов Help       Таблица 7.6
ЪДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і   Элемент          і Ограничения                              і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Символы          і Ключевые слова могут включать в себя сим-і
і                    і волы из набора ANSI,  в том числе символыі
і                    і с номерами, большими 127. Максимально до-і
і                    і пустимое  число символов в ключевом словеі
і                    і равно 255. Ключевое слово может содержатьі
і                    і пробелы, что позволяет использовать в ка-і
і                    і честве ключевых слов осмысленные фразы.  і
і                    і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Фразы            і Если при поиске в качестве ключевого сло-і
і                    і ва  указана некоторая фраза (т.е.  группаі
і                    і слов,  разделенных пробелами),  то  поискі
і                    і ведется по каждому из слов этой фразы.   і
і                    і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Форматирование   і Форматирование текста сносок,  определяю-і
і                    і щих ключевые слова, невозможно.          і
і                    і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Строчные и       і Строчные буквы  считаются  эквивалентнымиі
і   прописные буквы  і соответствующим прописным.               і
і                    і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   Пунктуация       і В тексте ключевых слов можно использоватьі
і                    і любые знаки пунктуации, кроме точки с за-і
і                    і пятой.                                   і
і                    і                                          і
АДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

         Создание множественных таблиц ключевых слов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Создание дополнительной таблицы ключевых слов  включает  два
этапа.  Во-первых,  в раздел [Options] (Параметры) файла описания
проекта следует включить параметр  MULTIKEY.  Назначение  данного
параметра описано в разделе "Множественные таблицы ключевых слов:
параметр Multikey (Множественные ключи)".

     Во-вторых, следует создать соответствующие статьи и надлежа-
щим образом их пометить. Сноски, используемые для назначения клю-
чевых слов из альтернативной таблицы,  создаются точно также, как
и сноски,  обозначающие стандартные ключевые слова.  Однако в ка-
честве знаков таких сносок используется не "K",  а символ, указы-
ваемый опцией MULTIKEY.  В настоящей версии системы интерактивной
документации  Windows,  использование  в  качестве  знака  сноски
строчной буквы не эквивалентно использования соответствующей про-
писной буквы.  Так что при создании сносок,  назначающих ключевые
слова из альтернативной таблицы, необходимо следить за тем, чтобы
знаки таких сносок набирались в одном и том же регистре (как пра-
вило,  верхнем). Необходимо также следить за тем, чтобы различным
статьям соответствовали различные ключевые слова.  Это связано  с
тем,  что  при поиске статьи по ключевому слову из альтернативной
таблицы система интерактивной документации Windows не высвечивает
список всех найденных статей,  а вместо этого отображает содержи-
мое первой найденной статьи.  Если вы хотите, чтобы статьи с клю-
чевыми  словами  из альтернативной таблицы были доступны и из ос-
новной таблицы ключевых слов,  следует создать  для  этих  статей
ссылки со знаком ссылки "K" и указать в качестве текста этих ссы-
лок соответствующие ключевые слова.

     После выполнения указанных  действий  прикладная  программа,
для которой разрабатывается интерактивная документация Help,  мо-
жет выдавать запрос на поиск статьи  по  определенному  ключевому
слову,  находящемуся в определенной таблице ключевых слов. Сорти-
ровка ключевых слов производится безотносительно их принадлежнос-
ти к той или иной таблице, т.е. весь набор ключевых слов сортиру-
ется как единое целое.  О том, какая именно информация передается
прикладной  программой системе интерактивной документации Windows
при запросе на доступ к определенной статье  через альтернативную
таблицу  ключевых слов читайте в разделе "Доступ к дополнительным
таблицам ключевых слов".

           Назначение порядковых номеров просмотра
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Кнопки команд "Browse >>" (Просмотр вперед)  и  "Browse  <<"
(Просмотр назад), расположенные на линейке пиктограмм окна систе-
мы интерактивной документации Windows Help, позволяют пользовате-
лю передвигаться по последовательности связанных по  смыслу  ста-
тей.  При  этом  порядок,  в котором пользователь переходит одной
статьи на другую,  называется последовательностью просмотра. Пос-
ледовательность просмотра определяется порядковыми номерами прос-
мотра, устанавливаемыми разработчиком Help.

     Для объединения группы статей в последовательность просмотра
разработчику Help необходимо:

     1. Выбрать  статьи,  которые будут объединяться в группу,  и
        определить порядок в котором они  должны просматриваться.
        В  системе интерактивной документации Windows Help допус-
        тимо использование множественных  несвязанных  последова-
        тельностей просмотра.

     2. Ввести соответствующие управляющие коды, используемые для
        реализации последовательности просмотра.

     Замечание: В  данной версии системы интерактивной документа-
ции Windows Help передвижение  по  последовательностям  просмотра
осуществляется  при помощи двух кнопок команд "Browse",  располо-
женных в верхней части окна справочной системы  Help.  В  будущих
версиях  данные  кнопки команд будут появляться в окне справочной
системы Help динамически:  если окажется,  что в  используемом  в
данный   момент   справочном   файле  имеются  последовательности
просмотра указанного выше типа,  то кнопки  команд  будут  видны,
если нет - то нет.

          Организация последовательности просмотра
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

SampleApp Commands
 File Menu (Меню "Файл") - commands:005
  New Command (Команда "Создать") - file_menu:005
  Open Command (Команда "Открыть") - file_menu:010
  Save Command (Команда "Сохранить") - file_menu:015
  Save As Command (Команда "Сохранить в виде") - file_menu:020
  Print Command (Команда "Печать") - file_menu:025
  Printer Setup Command (Команда "Принтер") - file_menu:030
  Exit Command (Команда "Выход") - file_menu:035
 Edit Menu (Меню "Редактирование") - commands:010
  Undo Command (Команда "Отменить") - edit_menu:005
  Cut Command (Команда "Вырезать") - edit_menu:010
  Copy Command (Команда "Копировать") - edit_menu:015
  Paste Command (Команда "Вклеить") - edit_menu:020
  Clear Command (Команда "Стереть") - edit_menu:025
  Select All Command (Команда "Выбрать все") - edit_menu:030
  Word Wrap Command (Команда "Перенос слов") - edit_menu:035
  Font Face Command (Команда "Тип шрифта") - edit_menu:040
  Point Size Command (Команда "Размер шрифта") - edit_menu:045
 Search Menu (Меню "Поиск") - commands:015
  Find Command (Команда "Искать") - search_menu:005
  Find Next Command ("Искать следующий") - search_menu:010
  Previous Command (Команда "Предыдущий") - search_menu:015
 Window Menu (Меню "Окно") - commands:020
  Title Command (Команда "Заголовок") - window_menu:005
  Cascade Command (Команда "Каскад") - window_menu:010
  Arrange Icons Command ("Упорядочить") - window_menu:015
  Close All Command (Команда "Закрыть все") - window_menu:020
  Document Names Command ("Имена документов") - window_menu:025

     В каждой строке содержится имя последовательности просмотра,
за которым через двоеточие указывается порядковый номер  просмот-
ра.  Указание  имени последовательности не является обязательным.
Все статьи,  у которых  указан  только  номер  последовательности
просмотра, а имя последовательности не указано (см. пример ниже),
помещаются в специальную последовательность просмотра  без имени,
например:

     Window Menu - 120

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

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

     Буквенная и цифровая части порядкового номера могут состоять
из нескольких символов,  при этом нужно следить за тем,  чтобы их
длины у всех порядковых номеров по всем информационным файлам бы-
ли одинаковы. Если Вы используете порядковые номера, которые сос-
тоят  только из цифр,  удостоверьтесь,  что все порядковые номера
содержат одинаковое число цифр. В противном случае порядок после-
довательности просмотра может оказаться не таким,  как он задумы-
вался разработчиком.  Так число 100 больше  99,  однако  если  их
сравнивать не как числа, а как символьные строки, то окажется что
99 больше чем 100 (поскольку номер символа "9" больше номера сим-
вола "1").  Чтобы в указанном примере получить правильный порядок
последовательности просмотра, необходимо в порядковый номер прос-
мотра "99" добавить третью цифру: "099".

          Кодирование последовательности просмотра
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     1. Поместите курсор слева от первой строки статьи.

     2. Создайте сноску со знаком сноски "+".  Обратите внимание,
        что рядом с началом первой  строки  появился  надстрочный
        символ "+" (знак плюс).

     3. В качестве текста сноски укажите  имя  последовательности
        просмотра и порядковый номер статьи в этой последователь-
        ности.

     Ниже приведен пример текста сноски,  определяющей порядковый
номер просмотра для статьи "Edit Menu" из примера, приводившегося
выше:

     + command:010

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

               Организация перекрестных ссылок
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Перекрестные ссылки,  или  как  их  еще называют переходы по
ссылке - это специальные слова или фразы с  управляющими  кодами,
используемые для связывания данной статьи с другими статьями. Хо-
тя при создании информационного файла ссылки  отображаются  пере-
черкнутым либо подчеркнутым двойной чертой текстом,  в окне спра-
вочной системы для изображения ссылок  используется  подчеркнутый
текст. Кроме этого на ПЭВМ с цветным монитором текст ссылок выде-
ляется еще и цветом. В частности, перечеркнутый текст (подчеркну-
тый двойной чертой,  если используется редактор Word for Windows)
"New Command"  будет  отображаться  в окне справочной системы как
подчеркнутый текст зеленого цвета.

      Для определения перекрестной ссылки:

     1. Поместите курсор в позицию,  в  которой  будет  вставлена
        ссылка.

     2. Установите  в  редакторе  атрибут  текста "перечеркнутый"
        (strikethrough) или "подчеркнутый двойной чертой" (double
        -underline).

     3. Введите текст ссылки.

     4. Отмените  выбор атрибута "перечеркнутый" и установите ат-
        рибут "скрытый" (hidden).

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

     При кодировании  переходов  по  ссылке следует иметь в виду,
что:

     - Между текстом с атрибутом "скрытый" и перечеркнутым  (под-
       черкнутым двойной чертой) текстом не должно быть пробелов.

     - Кодированные пробелы перед либо после ссылки недопустимы.

     - Знаки начала параграфа должны вводиться как обычный текст.

                    Определения терминов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Большинство информационных файлов содержат  слова  и  фразы,
которые  требуют дальнейшего пояснения.  Чтобы получить требуемое
определение пользователь помечает соответствующее слово и пока он
удерживает  в нажатом положении кнопку "мыши" либо клавишу Enter,
это определение отображается в прямоугольном  блоке  внутри  окна
справочной системы  Help.  Разработчик интерактивной документации
решает какие из используемых терминов требуют определения с  уче-
том  того,  каков  уровень подготовки потенциальных пользователей
документируемой прикладной программы и какие  из  терминов  могут
оказаться им знакомыми.

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

     Создание определяемого термина предполагает:

     - Создание  статьи,  содержащей  описание  данного  термина.
       Статье,  содержащей  описание термина,  обязательно должна
       быть cопоставлена контекстная строка.  О  назначении  кон-
       текстных  строк написано в разделе "Назначение контекстных
       строк".

     - Определение для каждого вхождения соответствующего термина
       перекрестной ссылки на эту статью.

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

                Создание определения термина
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Статьи, содержащие определения терминов,  можно организовать
по-разному.  Так можно поместить каждую такую статью в тот инфор-
мационный файл,  который содержит определяемый ей термин. А можно
все статьи с определениями терминов собрать в один информационный
файл и предоставить  пользователю  возможность  непосредственного
доступа  к его содержимому.  Последний вариант используется в де-
монстрационной программе HELPEX,  где все  имеющиеся  определения
собраны в информационный файл TERMS.RTF.  Размещение статей с оп-
ределениями в одном информационном файле  позволяет  организовать
глоссарий и упрощает изменение текста определений.

              Кодирование определяемых терминов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     1. Поместите курсор в позицию,  где  предполагается  вставка
        определяемого термина.

     2. Установите  в  редакторе  атрибут  текста  "подчеркнутый"
        (underline).

     3. Введите термин.

     4. Отмените выбор атрибута "подчеркнутый" и установите атри-
        бут "скрытый" (hidden).

     5. Введите контекстную строку, соответствующую статье, кото-
        рая содержит определение данного термина.

               Вставка графических изображений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Растровые графические  изображения  можно  вставлять в текст
статей двумя способами.  Если используемый вами текстовый процес-
сор поддерживает непосредственную вставку в текст документа бито-
вых изображений в формате Windows 2.1  либо  Windows  3.0,  можно
вставить соответствующее изображения прямо в текст статьи. Другой
способ состоит в том, что каждое битовое изображение помещается в
отдельный файл,  а в соответствующем месте статьи указывается имя
этого файла.  Второй способ вставки в текст  статьи  графического
изображения  называется вставкой битовых изображений по ссылке. В
следующих разделах поясняется порядок вставки графических изобра-
жений непосредственно и по ссылке.

                Создание битовых изображений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Для создания битовых изображений  можно  использовать  любую
графическую программу.  Единственное, что при этом требуется, это
чтобы окончательное изображение могло  быть  отображено  в  среде
Windows. Если это условие выполнено, то соответствующее изображе-
ние может быть скопировано во временный буфер для  обмена данными
(Clipboard -  буфер  вырезанного  изображения) и затем передано в
какой-либо графический редактор, например Paint. Используя графи-
ческий  редактор  можно  модифицировать либо подчистить имеющееся
изображение по мере необходимости.

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

     После завершения формирования битового изображения его можно
записать  в  отдельный файл либо через временный буфер для обмена
данными (Clipboard) передать непосредственно в текстовый  процес-
сор.  Перед записью изображения в файл не забудьте указать размер
сохраняемого изображения.  Размер указывается с  таким  расчетом,
чтобы записать только ту часть изображения,  которая должна отоб-
ражаться в окне справочной системы.  Чем компактнее будет изобра-
жение,  тем  ближе  к нему удастся разместить текст.  Изображение
должно записываться в формате "Windows .BMP", а при необходимости
преобразовываться в этот формат.

     Битовые изображения  следует создавать в том же видеорежиме,
в котором предполагается отображать текст в окне справочной  сис-
темы. Если текст справочника будет отображаться в другом видеоре-
жиме, то пропорции битового изображения, а также само изображение
могут искажаться.

ставка графических изображений средствами текстового процессора
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Простейший способ точной  вставки  графики  в  текст  статьи
справочника Help - это использование текстового процессора с гра-
фическими возможностями.  Редактор Microsoft Word для Windows до-
пускает  непосредственную  передачу графических изображений через
временный буфер для обмена данными.  При этом для вставки  графи-
ческого изображения  в  соответствующее  место текста статьи Help
достаточно выполнить команду "Paste"  (Вклеить).  При  наличии  в
тексте графического изображения, текст может располагаться строго
под ним либо вдоль одной из его вертикальных границ. При сохране-
нии  информационного  файла в формате ".RTF" туда же записывается
преобразованное надлежащим образом битовое изображение, что обес-
печивает его автоматическое включение при компиляции в справочный
файл.

            Вставка битовых изображений по ссылке
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     {bmc имя_файла.bmp}
     {bml имя_файла.bmp}
     {bmr имя_файла.bmp}

     Замечание. В  перечисленных  командах  не  следует указывать
полное имя (с префиксом) файла битового  изображения.  Если  этот
файл не содержится в каталоге, который при построении справочного
файла Help считается каталогом, используемым по умолчанию, то его
полное  имя  следует указать в разделе [Bitmaps] в файле описания
проекта.

     Команда "bmc" расшифровывается как bitmap  character (символ
"битовое изображение"). Это означает, что соответствующее битовое
изображение трактуется как обычный символ, помещенный в соответс-
твующей позиции строки текста статьи Help.  Текст в соответствую-
щей строке может находиться как слева,  так и справа от изображе-
ния.  При  этом  размер интервала между строками определяется как
обычно, т.е. из всех символов строки (включая и битовое изображе-
ние) выбирается символ с максимальной высотой,  которая и опреде-
ляет величину интервала. По этой причине не рекомендуется исполь-
зовать в параграфах,  содержащих битовые изображения, отрицатель-
ный интервал между строками, поскольку это может привести к нало-
жению битового изображения на находящийся над ним текст.  При ис-
пользовании для ссылки на графическое изображение  команды  "bmc"
автоматический  перенос текста вокруг этого изображения не произ-
водится.  Графическое изображение и следующий за ним текст вырав-
ниваются в вертикальном направлении по базовой линии.

     Аргумент "bml" определяет битовое изображение, выравниваемое
по левой границе текста.  При этом выполняется автоматический пе-
ренос  текста  вдоль  правой  границы этого изображения.  Команда
"bmr" указывает,  что битовое изображение буде  выравниваться  по
правому  полю текста,  а текст будет располагаться слева от него.
Имена файлов с битовыми изображениями,  указываемые в этих коман-
дах,  должны совпадать с именами файлов,  содержащимися в разделе
[Bitmaps] файла описания проекта.  Содержимое  раздела  [Bitmaps]
описано  в разделе "Построение справочного файла системы интерак-
тивной документации Help".

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

     На Рис. 7.6 изображены три варианта размещения битовых изоб-
ражений внутри текста справочной статьи.

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі             Help Example Hepl - HELPLEX.HLP            іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і File       Edit       Bookmark       Help                     і
іЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДґ
іі ЪДДДї   і o       і         і         і   ЪДї   іІІІІІІІІІІІІі
іі іA_ і   іo  o     і   <<    і   >>    і   іOі   іІІІІІІІІІІІІі
іі АДДДЩ   і o  o    і         і         і    ~\   іІІІІІІІІІІІІі
іі Index   і Back    і Browse  і Browse  і Browse  іІІІІІІІІІІІІі
іАДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДВДґ
і Bimaps by reference                                   ЪДї   і^і
і                                                       і^і   ГДґ
і Графическое изображение можно поместить в предложение АДЩ,  іІі
і как любой другой символ. Для открытия всплывающего окна с   і±і
і более подробной информацией щелкните кнопкой "мыши" на      і±і
і кнопке максимизации графического изображения.               і±і
і                                                             і±і
і Microsoft  Вы можете также разместить графические изображе- і±і
і ________   ния по левой границе окна Help. Текст будет ав-  і±і
і      W     томатически размещаться вдоль левого края.       і±і
і WiriWord                                                    і±і
і                                                          ~  і±і
і Либо графическое изображение можно разместить по правой ЪДї і±і
і границе, и текст будет автоматически размещаться вдоль  і-і і±і
і левой границы.                                          і±і ГДґ
і                                                         АДЩ іvі
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДЕДґ
і<іІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±і>і і
АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДЩ

     Рис. 7.6 Статья Help,  описывающая  размещение  графического
изображения по ссылке

             Сопровождение информационных файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

                Отслеживание файлов и статей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Поддержка таблицы  текущего  состояния информационных файлов
(отслеживание) необходима по следующим причинам:

     - Для уверенности,  что на фазе построения справочного файла
       Help  ни  одна  из информационных статей не будет ошибочно
       опущена.

     - Для уверенности,  что разным статьям присвоены разные кон-
       текстные строки.

     - Для перекрестной проверки порядка и состава последователь-
       ностей просмотра (как общей, так и предметно-ориентирован-
       ных).

     - Для отслеживания сопоставляемых статьям заголовков и спис-
       ков ключевых слов.

     - Чтобы предоставить всем участникам  проекта  информацию  о
       том,  в  каком именно информационном файле Help содержится
       та или иная статья.

    - Для отслеживания всех изменений в файлах и текущем  состоя-
      нии.

   - Для  отслеживания любого другого аспекта процесса разработки
     интерактивной документации[  Help,  кажущегося  разработчику
     существенным.

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

                 Создание файла отслеживания
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Таким образом, отслеживание информационных файлов в процессе
разработки интерактивной документации весьма важно. Средство, ис-
пользуемое для отслеживания (трассировки),  выбирается по  вашему
усмотрению.  Так  можно хранить таблицу текущего состояния в виде
текстового файла ASCII,  в электронной таблице Quattro Pro или  в
каком-либо другом подходящем формате.

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

     Ниже приведены примеры текстового файла отслеживания  (трас-
сировки) и файла отслеживания в виде электронной таблицы, иллюст-
рирующие возможные способы представления в файле отслеживания ин-
формации о  состоянии статей справочника Help.  В соответствующих
файлах отслеживания содержатся строки с описаниями  статей  спра-
вочника,  доступ  к которым осуществляется через меню Help (Спра-
вочник) либо посредством контекстной справки.  Обычно все статьи,
доступные через меню Help,  доступны и через контекстную справку.
Контекстные номера этих статей,  указанные в столбце "Cоntext ID"
(Контекстный идентификатор), могут использоваться как контекстно-
зависимой справкой так и пунктами меню Help. Обратите внимание на
то, что некоторым статьям соответствует более одного контекстного
номера.  Это позволяет ссылаться на эту статью при выборе пользо-
вателем различных элементов экрана.

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

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
       1            2                        3
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
     Ctx.String    Title                  Browse Seq.
     hlpidx_id_mp  Multipad Help Index
     mc_cmd_mp     Multipad Commands      commands:0001
     fm_cmd_mp     File Menu              commands:0004

     nc_cmd_mp     New Command            commands:0008

     oc_cmp_mp     Open Command           commands:0012

     sac_cmd_mp    Save Command           commands:0016

     sasc_cmd_mp   Save As Command        commands:0020

     ptc_cmd_mp    Print Command          commands:0024

     psc_cmd_mp    Print Setup Command    commands:0028

     ec_cmd_mp     Exit Command           commands:0032

     em_cmd_mp     Edit Menu              commands:0036

     uc_cmd_mp     Undo Command           commands:0040

     ctc_cmd_mp    Cut Command            commands:0044

     cyc_cmd_mp    Copy Command           commands:0048

     pec_cmd_mp    Paste Command          commands:0052

     crc_cmd_mp    Clear Command          commands:0056

     salc_cmd_mp   Select All Command     commands:0060

     wwc_cmd_mp    Word Wrap Command      commands:0064

     tfc_cmd_mp    Type Face Command      commands:0068

     ptsc_cmd_mp   Point Size Command     commands:0072
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
                                                      Продолжение
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
  4                                   5       6       7       8
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Key Words                         Ctx.No Filename Modified Status
                                   OxFFFF helpex.idx 5/16/89 Done
commands; menus                    Ox1000 helpex.cmd 5/16/89 Done
commands; menus; files;            Ox1001 helpex.cmd 5/16/89 Done
documents;
commands; new files;               Ox1002 helpex.cmd 5/16/89 Done
new documents
commands;file; open;               Ox1003 helpex.cmd 5/16/89 Test
documents read only;
commands; files                    Ox1004 helpex.cmd 5/16/89 Done
commands; file; save as; save;
documents; files                   Ox1005 helpex.cmd 5/16/89 Done
commands; file; print;
documents; files;                  Ox1006 helpex.cmd 5/16/89 Done
commands; file; printer setup;
print                              Ox1007 helpex.cmd 5/16/89 Debug
commands; file; exit; exiting;
close; closing; quit; quiting;     Ox1008 helpex.cmd 5/16/89 Done
commands; menus; editing;
documents                          Ox1009 helpex.cmd 5/16/89 Done
commands; edit; editing; undo;
typing                             Ox100A helpex.cmd 5/16/89 Done
commands; editing; edit; out;
outing; text; Clipboard;           Ox100B helpex.cmd 5/16/89 Done
commands; edit; editing; copy;
copying; text; Clipboard           Ox100C helpex.cmd 5/16/89 Done
commands; edit; editing; paste;
insert; inserting; text; Clipboard Ox100D helpex.cmd 5/16/89 Done
commands; edit; editing; clear;
tex                                Ox100E helpex.cmd 5/16/89 Done
commands; edit; editing; select all;
select; selecting; text            Ox100F helpex.cmd 5/16/89 Done
commands; edit; editing; word wrap;
wrapping; text; format             Ox1010 helpex.cmd 5/16/89 Done
commands; edit; editing; type face;
font; text; format;                Ox1011 helpex.cmd 5/16/89 Test
commands; edit; editing; point size;
text; format                       Ox1012 helpex.cmd 5/16/89 Test
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Рис.7.7 Пример файла отслеживания

1 -  контекстная  строка,  2 - заголовок,  3 - порядковый номер в
последовательности просмотра, 4 - ключевые слова, 5 - контекстный
номер, 6 - имя файла, 7 - дата модификации, 8 - состояние

ЪДДДВДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДї
і   і     A      і         B            і         C             і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 1 іCtx.String  і Title                і Browse Seq.           і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 2 іhlpidx_id_mpі Multipad Help Index  і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 3 іmc_cmd_mp   і Multipad Commands    і commands:0001         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 4 іfm_cmd_mp   і File Menu            і commands:0004         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 5 і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 6 іnc_cmd_mp   і New Command          і commands:0008         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 7 і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 8 іoc_cmp_mp   і Open Command         і commands:0012         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 9 і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 10іsac_cmd_mp  і Save Command         і commands:0016         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 11і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 12іsasc_cmd_mp і Save As Command      і commands:0020         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 13і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 14іptc_cmd_mp  і Print Command        і commands:0024         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 15і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 16іpsc_cmd_mp  і Print Setup Command  і commands:0028         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 17і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 18іec_cmd_mp   і Exit Command         і commands:0032         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 19і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 20іem_cmd_mp   і Edit Menu            і commands:0036         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 21і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 22іuc_cmd_mp   і Undo Command         і commands:0040         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 23і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 24іctc_cmd_mp  і Cut Command          і commands:0044         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 25і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 26іcyc_cmd_mp  і Copy Command         і commands:0048         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 27і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 28іpec_cmd_mp  і Paste Command        і commands:0052         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 29і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 30іcrc_cmd_mp  і Clear Command        і commands:0056         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 31і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 32іsalc_cmd_mp і Select All Command   і commands:0060         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 33і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 34іwwc_cmd_mp  і Word Wrap Command    і commands:0064         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 35і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 36іtfc_cmd_mp  і Type Face Command    і commands:0068         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 37і            і                      і                       і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 38іptsc_cmd_mp і Point Size Command   і commands:0072         і
ГДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДґ
і 39і            і                      і                       і
АДДДБДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДЩ

                                                      Продолжение
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДВДДДДДДДДДДВДДДДДДДВДДДДДї
і             D                 і   E  і    F     і   G   і  H  і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іKey Words                      іCtx.NoіFilename  іModif. іStat.і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
і                               іOxFFFFіhelpex.idxі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; menus                іOx1000іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; menus; files;        іOx1001іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іdocuments;                     і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; new files;           іOx1002іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іnew documents                  і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands;file; open;           іOx1003іhelpex.cmdі5/16/89іTest і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іdocuments read only;           і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; files                іOx1004іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; file; save as; save; і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іdocuments; files               іOx1005іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; file; print;         і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іdocuments; files;              іOx1006іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; file; printer setup; і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іprint                          іOx1007іhelpex.cmdі5/16/89іDebugі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; file; exit; exiting; і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іclose; closing; quit; quiting; іOx1008іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; menus; editing;      і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іdocuments                      іOx1009іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; undo; і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іtyping                         іOx100Aіhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; editing; edit; out;  і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іouting; text; Clipboard;       іOx100Bіhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; copy; і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcopying; text; Clipboard       іOx100Cіhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; paste;і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іinsert; inserting; text;Clipbo-іOx100Dіhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іard;commands;edit;editing;clearі      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іtext                           іOx100Eіhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; selectі      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іall select; selecting; text    іOx100Fіhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; word  і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іwrap; wrapping; text; format   іOx1010іhelpex.cmdі5/16/89іDone і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; type  і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іface; font; text; format;      іOx1011іhelpex.cmdі5/16/89іTest і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іcommands; edit; editing; point і      і          і       і     і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДЕДДДДДДДДДДЕДДДДДДДЕДДДДДґ
іsize text; format              іOx1012іhelpex.cmdі5/16/89іTest і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДЩ

     Рис.7.8 Пример файла отслеживания в виде электронной таблицы

A -  контекстная  строка,  B - заголовок,  C - порядковый номер в
последовательности просмотра, D - ключевые слова, E - контекстный
номер,  F - имя файла,  G - дата модификации,  H - состояние

остроение справочного файла системы интерактивной документации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     В файле описания проекта Help вы указываете имена информаци-
онных файлов,  из которых будет строиться справочный файл.  Кроме
того,  в файле описания проекта содержатся данные о  соответствии
между статьями и контекстными номерами (в случае,  если использу-
ется контекстно-зависимая справка).

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

     В данной главе рассмотрены следующие вопросы:

     - Создание файла описания проекта Help.

     - Компиляция справочного файла Help.

     - Доступ  к системе интерактивной документации Help из прик-
       ладной программы пользователя.

               Создание файла описания проекта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В файле  описания проекта Help определяется порядок построе-
ния справочного файла Help из созданных ранее информационных фай-
лов с помощью компилятора справочника HC. В состав файла описания
проекта Help могут входить до шести информационных разделов, име-
ющих следующее назначение:

               Разделы файла описания проекта Help    Таблица 7.7
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і[Files]    іВ данном разделе указывается список имен информаци-і
і           іонных файлов,  включаемых в состав справочного фай-і
і           іла.  Наличие в файле описания проекта этого разделаі
і           іявляется обязательным.                             і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і[Options]  іВ данном разделе указывается:                      і
і           і                                                   і
і           і- указывается уровень сообщений об ошибках;        і
і           і                                                   і
і           і- определяются статьи,  которые будут включаться  ві
і           і  состав справочного файла Help;                   і
і           і                                                   і
і           і- указывается  название каталога,  который содержиті
і           і  требуемые для построения файлы;                  і
і           і                                                   і
і           і- указывается название статьи,  содержащей оглавле-і
і           і  ние справочника Help.                            і
і           і                                                   і
і           іДанный раздел  не  является  обязательным  и  можеті
і           іопускаться.                                        і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і[BuildTags]іВ данном разделе перечислены допустимые имена приз-і
і           інаков  включения.  Данный раздел не является обяза-і
і           ітельным и может опускаться.                        і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і[Alias]    іДанный раздел используется для назначения  одной  иі
і           ітой  же статье нескольких контекстных строк. Данныйі
і           іраздел не является обязательным и может опускаться.і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і[Map]      іВ данном разделе контекстным строкам сопоставляютсяі
і           іконтекстные номера.  Данный раздел не является обя-і
і           ізательным и может опускаться.                      і
і           і                                                   і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і[Bitmaps]  іВ данном разделе указываются имена  файлов  битовыхі
і           іизображений,  включаемых в справочный файл.  Данныйі
і           іраздел не является обязательным и может опускаться.і
і           і                                                   і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Для создания  файла описания проекта Help можно использовать
любой текстовый редактор.  Файл описания проекта имеет расширение
имени ".HPJ" (от "Help ProJect").  Если в командной строке компи-
лятора справочников HC имя файла указывается без расширения  име-
ни,  то  компилятор  ищет  файл  с указанным именем и расширением
".HPJ".  Справочный файл имеет расширение ".HLP" и имя, совпадаю-
щее с именем соответствующего файла описания проекта ".HPJ".

     Разделы файла  описания проекта могут располагаться в произ-
вольном порядке при одном исключении: раздел [Alias], если он су-
ществует, должен предшествовать разделу [Map].

     Названия разделов  помещаются в квадратные скобки. Синтаксис
названия раздела имеет вид:

     [название_раздела]

     В файл описания проекта можно включать комментарии.  Призна-
ком  комментария служит символ "точка с запятой" (;).  Компилятор
игнорирует весь текст,  начиная с признака комментария и до конца
текущей строки.

               Указание информационных файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     В приводимом ниже примере показан формат раздела [Files]:

     [FILES]
     HELPE.RTF  ; Основные статьи справочника прикладной
                ; программы HelpEx
     TERMS.RTF  ; Определения терминов прикладной программы
                ; HelpEx

     Используя название  каталога,  определяемое параметром ROOT,
компилятор находит перечисленные в  этом  разделе  информационные
файлы и обрабатывает их. Использование параметра ROOT рассмотрено
в разделе с названием "Указание каталога по  умолчанию:  параметр
Root (Корневой каталог)".

     Список используемых информационных файлов можно определить и
при помощи принятой в  языке  Си  директивы  #include.  Директива
#include имеет следующий синтаксис:

     #include <имя_файла>

     Имя файла  должно  быть  взято в треугольные скобки.  Символ
"#" должен находиться в первой позиции строки.  В поле  "имя_фай-
ла" указывается полное имя файла. Если файл находится в каталоге,
название которого указано в параметре ROOT,  то название каталога
в имени файла можно опустить.  В противном случае указывается аб-
солютное имя,  т.е. имя, содержащее названия каталогов и логичес-
кого диска.

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

     [Files]
     #include 

                Указание признаков включения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если некоторым из статей, содержащимся в информационных фай-
лах,  были присвоены признаки включения, то в разделе [BuildTags]
файла описания проекта необходимо перечислить все допустимые име-
на этих признаков  применительно  к  настоящему  проекту.  Раздел
[BuildTags] не является обязательным и может опускаться.

     В приводимом ниже примере показан формат раздела [BuildTags]
демонстрационного файла описания проекта:

     [BUILDTAGS]
     WINENV     ; Статьи, включаемые в окончательный вариант
                ; справочника Help
     DEBUGBUILD ; Статьи, включаемые в справочник Help на
                ; стадии отладки
     TESTBUILD  ; Статьи, включаемые в мини-справочник для
                ; тестирования

     В разделе [BuildTags] можно указывать до 30  имен  признаков
включения. Строчные буквы в имени признака эквивалентны соответс-
твующим прописным. Наличие пробелов в имени признака включения не
допускается.  В данном разделе имя каждого признака указывается в
отдельной строке. Если после имени признака включения указано что
-либо не являющееся комментарием,  то компилятор выдаст сообщение
об ошибке.

     Порядок кодирования  признаков  включения  в  информационных
файлах рассмотрен в разделе "Назначение признаков включения".

                     Указание параметров
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В разделе [Options] файла описания проекта  можно установить
значения следующих параметров:

                         Параметры Help              Таблица 7.8
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Параметр  і             Значение                             і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іBUILD      іЭтот параметр определяет условие включения в спра-і
і           і вочный файл статей, которым сопоставлены признакиі
і           і включения.                                       і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іCOMPRESS   і Этот параметр включает либо отменяет сжатие (упа-і
і           і ковку) информации в справочном файле.            і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іFORCEFONT  і Этот параметр  подавляет использование несколькихі
і           і шрифтов при  отображении  справочной  информации,і
і           і заменяя их одним.                                і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іINDEX      і Этот параметр указывает контекст строки  оглавле-і
і           і ния справочника Help.                            і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іMAPFONTSIZEі Этот  параметр  определяет  отображение  заданныхі
і           і размеров шрифтов в другие размеры.               і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іMULTIKEY   і Данный параметр определяет отображение  альтерна-і
і           і тивных ключевых слов для информационных файлов.  і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іROOT       і Этот параметр указывает каталог,  использующийся і
і           і для построения справочного файла Help.           і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іTITLE      і Этот параметр определяет  заголовок, отображаемыйі
і           і на  линейке  заголовка окна системы интерактивнойі
і           і документации Windows.                            і
і           і                                                  і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іWARNING    і Этот параметр   указывает  уровень  сообщений  обі
і           і ошибках.                                         і
і           і                                                  і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Перечисленные параметры могут располагаться  внутри  раздела
[Options]  в  произвольном порядке.  Раздел [Options] не является
обязательным и может опускаться.

     Далее следует подробное описание всех перечисленных парамет-
ров.

                Уровень сообщений об ошибках
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     WARNING=уровень

     Аргумент "уровень" может принимать следующие значения:

                      Уровни предупреждений          Таблицы 7.2
ЪДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Уровень   і             Выдаваемая информация                і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   1       і На экран выводятся сообщения  только  о  наиболееі
і           і серьезных ошибках.                               і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   2       і Уровень умеренного количества сообщений.         і
ГДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і   3       і На экран  выводятся  все сообщения.  Это значениеі
і           і присваивается параметру "уровень"  по  умолчания,і
і           і т.е. тогда когда параметр WARNING явно не указан.і
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     В приводимом  ниже  примере  устанавливается умеренное коли-
чество сообщений об ошибках:

     [OPTIONS]
     WARNINGS=2

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

     HC HELPEX >> errors.out

           Примечание: Операционная система MS-DOS позволяет про-
      дублировать на  принтере  информацию,  выводимую  на  экран
      дисплея. Для этого перед запуском компилятора наберите ком-
      бинацию клавиш Ctrl+PrtSc.  Чтобы  прекратить  дублирование
      информации на принтер наберите эту же комбинацию еще раз.

                  Условие включения статей
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если в информационных файлах имеются статьи,  которым сопос-
тавлены  признаки включения,  параметр BUILD указывает,  какие из
этих статей должны быть включены в справочный файл. Если статьи с
признаками  включения в информационных файлах отсутствуют,  пара-
метр BUILD в разделе [Options] следует опустить.

     Замечание. Имена всех используемых признаков включения долж-
ны быть перечислены в разделе [BuildTags] независимо от того вхо-
дит ли имя признака в логическое выражение параметра BUILD.

           Примечание: Назначение статьям в информационных файлах
      признаков включения рассмотрено в разделе "Назначение приз-
      наков включения".

     Параметр BUILD имеет следующий синтаксис:

     BUILD=выражение

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

                 Старшинство признаков включения     Таблица 7.10
ЪДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Лексема     і Описание                                        і
ГДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і  <признак>  і имя признака включения                          і
і             і                                                 і
і  ()         і скобки                                          і
і             і                                                 і
і  ~          і операция логического отрицания                  і
і             і                                                 і
і  &          і операция "логическое И"                         і
і             і                                                 і
і  |          і операция "логическое ИЛИ"                       і
АДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     В частности, если определенным статьям в информационных фай-
лах сопоставлены признаки включения с именами WINENV, APP1 и TEST
_BUILD,  можно включить в раздел [Options]  следующие  логические
выражения:

                   Примеры выражений включения       Таблица 7.11
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Лексема      Описание            і                            і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і BUILD=WINENV                     і В справочный  файл  попадуті
і                                  і только те  статьи,  которымі
і                                  і сопоставлен признак WINENV.і
і                                  і                            і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і BUILD=WINENV & APP1              і В справочный  файл  попадуті
і                                  і только те  статьи,  которымі
і                                  і одновременно   сопоставленыі
і                                  і два   признака    включенияі
і                                  і WINENV и APP1.             і
і                                  і                            і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і BUILD=WINENV | APP1              і В справочный  файл  попадуті
і                                  і только  те статьи,  которымі
і                                  і сопоставлен один из призна-і
і                                  і ков  включения  WINENV  илиі
і                                  і APP1.                      і
і                                  і                            і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і BUILD=(WINENV|APP1) & TEST_BUILD)і В справочный  файл  попадуті
і                                  і только те  статьи,  которымі
і                                  і сопоставлен один из призна-і
і                                  і ков включения  WINENV   илиі
і                                  і APP1, а также признак TEST_і
і                                  і BUILD.                     і
і                                  і                            і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і BUILD=~APP1                      і В справочный  файл  попадуті
і                                  і только те статьи, у которыхі
і                                  і среди   сопоставленных   имі
і                                  і признаков включения признакі
і                                  і с  именем APP1 отсутствует.і
і                                  і                            і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

        Указание каталога, используемого по умолчанию
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Данный параметр указывает название главного каталога  проек-
та.  Главный каталог проекта - это каталог, используемый по умол-
чанию компилятором системы интерактивной  документации  Help  для
Windows для поиска информационных файлов,  файлов битовых изобра-
жений и прочих файлов, необходимых при компиляции.

     Параметр ROOT имеет следующий синтаксис:

     ROOT=название_каталога

     В следующем примере в  качестве  главного  каталога  проекта
указывается каталог с именем "\BUILD\TEST",  находящийся на диске
D:

     [OPTIONS]
     ROOT=D:\BUILD\TEST

     Имена всех  файлов,  содержащиеся  в  файле описания проекта
можно указывать относительно главного каталога проекта, определя-
емого  параметром  ROOT.  Так в приводимом ниже фрагменте раздела
[Files] имя файла указывается относительно главного каталога про-
екта:

     TOPICS\FILE.RTF

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

     D:\HELPTEST\TESTFILE.RTF

     Если в файле описания проекта Help параметр ROOT не  опреде-
лен,  то считается, что все имена файлов указаны относительно те-
кущего каталога.

                 Оглавление справочника Help
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     При помощи  параметра  INDEX  указывается контекстная строка
статьи,  содержащей оглавление интерактивной  документации.  Пос-
кольку в окне системы интерактивной документации Help для Windows
имеется специальная кнопка команды Index (Оглавление)  для  мгно-
венного  перехода  из любого места справочника на его оглавление,
по-видимому, нет необходимости в организации доступа к оглавлению
справочника методом  перехода  по ссылке из текста какой-либо его
статьи.  Пользователь осуществляет доступ к  главному  оглавлению
справочника либо из меню Help соответствующей прикладной програм-
мы,  либо при помощи кнопки команды Index,  расположенной в  окне
справочной системы.

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

     Параметр INDEX имеет следующий синтаксис:

     INDEX=контекстная_строка

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

     [OPTIONS]
     INDEX=main_index

           Примечание: Назначение статьям в информационных файлах
      контекстных строк рассмотрено в  разделе  "Назначение  кон-
      текстных строк".

                 Заголовок справочника Help
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Параметр TITLE позволяет указать заголовок справочника Help.
Заголовок справочника  Help  отображается на линейке окна системы
интерактивной документации Windows.  При отображении к заголовку,
указанному  в  параметре  TITLE,  автоматически добавляется слово
Help и имя справочного файла.

     Параметр TITLE имеет следующий синтаксис:

     TITLE=заголовок_справочника

     Заголовок может содержать не более 32 символов.  Если  пара-
метр TITLE в файле описания проекта Help опущен,  то в строке за-
головка окна справочной системы отображается  слово  Help  и  имя
справочного файла.  Поскольку слово Help автоматически подставля-
ется в заголовок компилятором,  то для избежания  тавтологии  это
слово  не  рекомендуется включать в текст заголовка,  указываемый
параметром TITLE.

                   Преобразование шрифтов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Параметр FORCEFONT имеет следующий синтаксис:

     FORCEFONT=название_шрифта

     В правой части указывается название шрифта из числа тех, ко-
торые определены в Windows.

     В стандартный комплект поставки  Windows  входят  ряд  видов
шрифтов, описанных в начале главы.

     Название шрифта следует указывать точно так, как оно отобра-
жается в блоке перечня в диалоговом окне Fonts (Шрифты),  выводи-
мом  на экран прикладной программой Control Panel (Пульт управле-
ния).  Длина названия шрифта не может превышать 20 символов. Если
вы укажете некорректное название шрифта,  то компилятор выдаст на
экран сообщение об ошибке и продолжит компиляцию, использую стан-
дартный шрифт гарнитуры Гельветика (Helv).

          Примечание. Название шрифта, указываемое в отслеживании
      и  FORCEFONTS  не может содержать пробелов. По этой причине
      шрифт Tms Rmn в этом отслеживании указать нельзя.

                  Изменение размеров шрифта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Параметр MAPFONTSIZE имеет следующий синтаксис:

     MAPFONTSIZE=m[-n]:p

     Параметр m указывает исходный размер шрифта,  а параметр p -
размер,  на который его требуется заменить при генерации справоч-
ного файла.  Все шрифты в информационном файле, имеющие размер m,
будут перемасштабированы в новый размер p.  Дополнительный  пара-
метр  n позволяет одновременно изменить группу исходных размеров.
Если этот параметр указан, то в размер p будут перемасштабированы
все  шрифты,  размеры которых лежат в диапазоне от m до n включи-
тельно.   Ниже   приведен   пример   использования   отслеживания
MAPFONTSIZE:

     MAPFONTSIZE=12-24:16 ; Отобразить размеры шрифтов
                          ; с 12 по 24 в 16
     MAPFONTSIZE=8:12     ; Отобразить все шрифты с размером
                          ; 8 в размер 12

     Обратите внимание на то,  что  в  отдельной  строке  раздела
[Options] с оператором MAPFONTSIZE можно перемасштабировать толь-
ко один размер или диапазон размеров.  Если в файле описания про-
екта имеется несколько операторов MAPFONTSIZE, то исходные разме-
ры  или  диапазоны  размеров,  указываемые   в   последовательных
операторах, не должны перекрываться. Так при обработке следующего
фрагмента файла описания проекта компилятор выдаст на экран сооб-
щение об ошибке во второй строке этого фрагмента:

     MAPFONTSIZE=12-24:16 MAPFONTSIZE=14:20

     Поскольку размер 14,  перемасштабируемый  вторым  оператором
MAPFONTSIZE в размер 20, был только что переведен предыдущем опе-
ратором MAPFONTSIZE в размер 16,  то второй оператор  MAPFONTSIZE
будет компилятором проигнорирован.  В разделе [Options] может со-
держаться не более пяти срок с отслеживанием MAPFONTSIZE.

             Множественные таблицы ключевых слов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Параметр MULTIKEY имеет следующий синтаксис:

     MULTIKEY=знак_сноски

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

     MULTIKEY=L

     Замечание. Для  обозначения  знака сноски,  используемой для
назначения статьям ключевых слов,  следует ограничиться символами
одного регистра (как правило,  верхнего). В предыдущем примере, в
альтернативную таблицу ключевых слов  будут  включены  только  те
ключевые  слова,  которые сопоставлены статьям посредством сноски
со знаком L,  тогда как ключевые слова,  назначенные сносками  со
знаком l, в эту таблицу включаться не будут.

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

                       Упаковка файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Параметр COMPRESS имеет следующий синтаксис:

     COMPRESS=TRUE | FALSE

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

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

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

          Указание альтернативных контекстных строк
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Раздел файла описания проекта [Alias]  позволяет сопоставить
одной  или  нескольким  контекстным строкам статей альтернативные
имена.  Поскольку статьям в информационных файлах  сопоставляются
уникальные  контекстные  строки,  т.е.  одна  и та же контекстная
строка не может быть сопоставлена более чем одной  статье, раздел
[Alias]  упрощает  удаление  и объединение справочных статей,  не
требуя интенсивных изменений содержимого  информационных  файлов.
Раздел [Alias] не является обязательным и может опускаться.

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

     Раздел [Alias] состоит из текстовых строк следующего  форма-
та:

     контекстная_строка=альтернативное_имя

     В данном  выражении параметр "альтернативное_имя" обозначает
альтернативное имя, присваиваемое контекстной строке "контекстная
_строка",  идентифицирующей определенную статью. Правила, опреде-
ляющие формат альтернативного имени точно те же, что и у контекс-
тной строки.  В частности, альтернативное имя может содержать лю-
бые буквы (A-Z),  цифры (0-9),  точку (.)  и  подчерк  (_).  Ниже
приведен пример использования раздела [Alias]:

     [ALIAS]
     sm_key=key_shrtcuts
     cc_key=key_shrtcuts
     st_key=key_shrtcuts ; объединены в статью о
                         ; клавишах-активаторах
     clskey=us_dlog_bxs
     maakey=us_dlog_bxs  ; описаны в статьe об окнах диалога
     chk_key=dlogprts
     drp_key=dlogprts
     lst_key=dlogprts
     opt_key=dlogprts
     tbx_key=dlogprts    ; описаны в подразделах статьи об окнах
                         ; диалога
     frmttxt=edittxt
     wrpttxt=edittxt
     selttxt=edittxt     ; описаны в статье о редактировании
                         ; текста

     Замечание. Альтернативные  имена,  определяемые  в   разделе
[Alias],  могут использоваться в разделе файла описания проекта с
именем [Map].  В этом случае  в  файле  описания  проекта  раздел
[Alias] должен предшествовать разделу [Map].

               Назначение контекстных номеров
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Если в создаваемой интерактивной документации Help поддержи-
вается контекстно-зависимая справка, раздел файла описания проек-
та с именем [Map] позволяет установить соответствие между  назна-
ченными   в   информационных  файлах  контекстными  строками  или
определенными в разделе [Alias] альтернативными  именами  и  кон-
текстными номерами.  Контекстный номер - это число,  передаваемое
прикладной программой системе интерактивной  документации Windows
с целью отображения на экране справочной информации по определен-
ной теме. Раздел [Map] не является обязательным и может опускать-
ся.

     В разделе [Map] вы можете:

     - Указывать  контекстные номера в десятичном либо шестнадца-
       тиричном представлении, используя формат ввода чисел, при-
       нятый в языке программирования Cи.

     - Присвоить  контекстной  строке  либо альтернативному имени
       определенный контекстный номер (только один). Присваивание
       одного  и  того  же  контекстного номера нескольким разным
       контекстным строкам приведет к выводу на  экран  сообщения
       об ошибке.

     - Контекстный номер может отделяться от соответствующей кон-
       текстной  строки отступом произвольного размера, состоящим
       из пробелов либо символов табуляции.

     Для включения  в  этот раздел внешних файлов можно использо-
вать директиву "#include",  принятую в языке Cи.  Помимо этого, в
данный раздел можно непосредственно включать файлы внешних описа-
ний в формате языка Cи (напомним,  что такие файлы имеют расшире-
ние  имени .H и называются в включаемыми файлами).  Файлы внешних
описаний, включаемые в раздел [Map], не должны содержать иных ди-
ректив кроме #define и могут включать комментарии в формате языка
Cи. Ниже приводится пример отдельной строки такого файла:

     #define context_string context_number /* комментарий */

     В приводимом ниже примере показаны возможные форматы  содер-
жимого разделе [Map]:

     [MAP]
     (1)
     Edit_Window   0x0001
     Control_Menu  0x0002
     Maximize_Icon 0x0003
     Minimize_Icon 0x0004
     Split_Bar     0x0005
     Scroll_Bar    0x0006
     Title_Bar     0x0007
     Window_Border 0x0008
     (2)
     dcmb_scr 30; Пиктограмма системного меню документа
     dmxi_scr 31; Пиктограмма команды "Maximize" окна документа
     dmni_scr 32; Пиктограмма команды "Minimize" окна документа
     dri_scr  33; Пиктограмма команды "Restore" окна документа
     dtbZ_scr 34; Линейка заголовка окна документа
     (3)
     #define vscroll   0x010A /* Полоса вертикальной прокрутки */
     #define hscroll   0x010E /* Полоса горизонтальной
                                 прокрутки */
     #define scrollthm 0x0111 /* Указатель на полосе прокрутки */
     #define upscroll  0x0112 /* Кнопка прокрутки вверх*/
     #define dnscroll  0x0113 /* Кнопка прокрутки вниз*/
     (4)
     #include 

     В приводимом выше примере:

     (1) Определяется шесть контекстных номеров в шестнадцатирич-
         ном виде.

     (2) Определяется пять контекстных номеров в десятичном виде.

     (3) Файл внешних описания в формате языка Cи непосредственно
         включается в текст файла описания проекта.

     (4) Файл  внешних  описаний  в формате языка Cи включается в
         файл описания проекта посредством директивы #include.

     Если  контекстные номера  определяются посредством директивы
#define и  все  такие определения собраны в одном файле,  который
включается посредством директивы #include  как  в  файл  описания
проекта  так и в файл с исходным текстом прикладной программы, то
изменение контекстных номеров программистом при  модификации  ис-
ходного  текста  прикладной  программы будет автоматически учиты-
ваться при последующей генерации справочного  файла  компилятором
системы интерактивной документации Windows.

     Контекстные строки, перечисляемые в разделе [Map], могут оп-
ределяться как в информационных файлах так и в разделе файла опи-
сания проекта с именем [Alias] (в виде альтернативных имен). Если
контекстная строка,  используемая в разделе [Map],  не определена
ни в одном из информационных файлов,  а также не назначена в виде
альтернативного имени в разделе [ALias],  то компилятор выдаст на
экран предупреждающее сообщение.

     Замечание. Если  в  файле  описания  проекта  имеется раздел
[Alias], то он должен предшествовать разделу [Map].

           Примечание: Дополнительные сведения о контекстно-зави-
      симой  справке  содержатся  в разделе "Контекстно-зависимая
      справка".

            Вставка битовых изображений по ссылке
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     [BITMAPS]
     DUMP01.BMP
     DUMP02.BMP
     DUMP03.BMP
     C:\PROJECT\HELP\BITMAPS\DUMP04.BMP

     Замечание. При отыскании компилятором файлов,  имена которых
перечислены в разделе [Bitmaps],  используются те же  соглашения,
что и при поиске файлов, перечисленных в разделе [Files].

                Компиляция справочного файла
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Перед началом построения справочного файла Help следует  ус-
тановить местонахождение ряда файлов,  необходимых для генерации:

     - Программный  файл  компилятора  справочников HC.EXE.  Этот
       файл должен находиться в таком каталоге,  из которого  его
       запуск допустим, т.е. в одном из каталогов, определенных в
       переменной DOS PATH,  в текущем каталоге, либо в каталоге,
       имя которого непосредственно указывается при запуске, нап-
       ример:

          C:\BIN\HC HELPEX.HPJ

     - Файл описания проекта с расширением имени .HPJ.  Файл опи-
       сания  проекта  должен находиться либо в текущем каталоге,
       либо в каталоге, явно указываемом при запуске компилятора,
       например:

         C:\BIN\HC D:\MYPROJ\HELPEX.HPJ

     - Информационные файлы,  перечисленные в файле описания про-
       екта и имеющие формат .RTF. Информационные файлы могут на-
       ходиться в текущем каталоге,  в подкаталоге текущего ката-
       лога явно указанном в разделе  [Files]  либо  в  каталоге,
       определяемом  отслеживанием ROOT  в  файле описания проек-
       та.

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

     - Файлы  битовых  изображений,  имена  которых перечислены в
       разделе [Bitmaps].

     Файлы, включаемые директивой #include, можно также поместить
в главный каталог проекта,  либо указать в отслеживании ROOT наз-
вание содержащего их каталога. Компилятор справочников ищет соот-
ветствующие файлы только в тех каталогах, которые указаны в файле
описания проекта. Описание отслеживания ROOT можно найти в разде-
ле "Указание каталога по умолчанию".

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

  Работа с компилятором системы интерактивной документации
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Запуск компилятора    системы   интерактивной   документации
Windows производится из DOS командой HC. Параметры в соответству-
ющей командной строке отсутствуют,  поскольку все они указываются
в файле описания проекта Help.

     Командная строка компилятора имеет следующий синтаксис:

     HC имя_файла.HPJ

     После запуска компилятора на экран последовательно выводятся
символы "." для индикации успешного продвижения процесса компиля-
ции.  По мере обнаружения ошибок, компилятор выводит на экран со-
ответствующие  сообщения.  После завершения процесса компиляции в
текущем каталоге создается справочный файл  с  расширением  имени
.HPJ и происходит возврат в DOS. Построенный справочный файл име-
ет то же имя, что и файл описания проекта (.HPJ).

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

 Доступ к системе Help из прикладной программы пользователя
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Группа разработки должна запрограммировать в исходном тексте
прикладной программы обращение к системе интерактивной документа-
ции Help для Windows с целью доступа к информации, содержащейся в
справочном файле.  Система интерактивной документации  Windows  -
это  независимая прикладная программа.  Вы можете послать Windows
запрос на ее активизацию с целью отображения на экране справочной
информации по определенной теме, указав при этом какая именно ин-
формация необходима. С точки зрения пользователя система интерак-
тивной  документации  Windows  выглядит  как часть той прикладной
программы, о которой пользователь запрашивает справочную информа-
цию (т.е. Вашей прикладной программы), при этом справочная систе-
ма Help обладает всеми свойствами  обычной  прикладной  программы
Windows.

             Вызов WinHelp из прикладной программы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Прикладная программа активизирует монитор  системы  интерак-
тивной документации Windows посредством вызова процедуры WinHelp.

     Возвращаемое значение  и формальные параметры указанной про-
цедурой описываются следующей формой:

     BOOL WinHelp(hWnd,lpHelpFile,wCommand,dwData)

            Примечание. Исходные  тексты  демонстрационных  прог-
      рамм, написанных на языках Cи и Паскаль, находятся на дист-
      рибутивных дискетах.

     Параметр hWnd идентифицирует окно прикладной программы,  вы-
дающей  запрос  на активизацию системы интерактивной документации
Windows.  Этот идентификатор  используется  монитором  справочной
системы  Help  для  отслеживания  использующих справочную систему
прикладных программ.

     Параметр lpHelpFile указывает на имя справочного файла,  со-
держащего требуемую информацию (при необходимости имя файла может
указываться с префиксом, т.е. с названием каталога).

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

                        Значение wCommand             Таблица 7.1
ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    Значение      і           Смысл                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_CONTEXT     і Отобразить на  экране  определенную  статьюі
і                  і справочника Help, идентифицируемую контекс-і
і                  і тным номером.                              і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_HELPONHELP  і Отобразить на экране оглавление справочникаі
і                  і по использованию системы интерактивной  до-і
і                  і кументации Windows.                        і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_INDEX       і Отобразить на  экране  главное   оглавлениеі
і                  і справочника прикладной программы.          і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_KEY         і Отобразить на  экране  статью  справочника,і
і                  і идентифицируемую определенным ключевым сло-і
і                  і вом.                                       і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_MULTIKEY    і Отобразить на  экране  статью  справочника,і
і                  і идентифицируемую определенным ключевым сло-і
і                  і вом   из  альтернативной  таблицы  ключевыхі
і                  і слов.                                      і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_QUIT        і Завершить работу  со  справочной  системой.і
і                  і Если при этом окажется, что другие приклад-і
і                  і ные программы в данный момент не работают сі
і                  і системой     интерактивной     документацииі
і                  і Windows, то Windows удалит монитор справоч-і
і                  і ной системы (прикладную  программу WinHelp)і
і                  і из памяти ПЭВМ.                            і
і                  і                                            і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і HELP_SETINDEX    і Устанавливает указанную статью  в  качествеі
і                  і оглавления  и  отображает  ее содержимое наі
і                  і экране.                                    і
і                  і                                            і
АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Параметр dwData идентифицирует справочную статью, запрашива-
емую прикладной программой.  Формат этого  параметра  зависит  от
фактического значения параметра wCommand,  передаваемого в проце-
дуру WinHelp. Ниже описывается формат параметра dwParam в зависи-
мости от значения параметра wCommand:
                         Форматы wdData              Таблица 7.13
ЪДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і    Значение    і           Параметр wdData                    і
і    wCommand    і                                              і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_CONTEXT    і Двойное (long) целое без  знака, определяющееі
і                і контекстный  номер  требуемой  статьи.  Вызові
і                і процедуры   WinHelp   с    wCommand    равнымі
і                і HELP_CONTEXT и dwData равным -1L эквивалентноі
і                і вызову WinHelp с параметром  wCommand  равнымі
і                і HELP_INDEX.                                  і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_HELPONHELP і Параметр игнорируется.                       і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_INDEX      і Параметр игнорируется.                       і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_KEY        і Длинный указатель на строку,  содержащую клю-і
і                і чевое слово, связанное с требуемой статьей.  і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_MULTIKEY   і Длинный указатель    на    структуру     типаі
і                і MULITIHELP  (декларация типа MULTIHELP содер-і
і                і жится в файле внешних описаний  WINDOWS.H). Ві
і                і полях  данной  структуры указаны знак сноски,і
і                і используемый для  обозначения  альтернативнойі
і                і таблицы ключевых слов и ключевое слово.      і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_QUIT       і Параметр игнорируется.                       і
ГДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іHELP_SETINDEX   і Двойное (long) целое без  знака, определяющееі
і                і контекстный номер требуемой статьи.          і
АДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Поскольку при  обращении к процедуре WinHelp вы можете иден-
тифицировать требуемую статью как контекстным номером так и  пос-
редством соответствующего ключевого слова,  вам доступны два спо-
соба поиска информации в справочном файле Help: контекстный и те-
матический.

     Замечание. Чтобы обеспечить в каждый момент времени коррект-
ность установки оглавления справочника Help, следует после каждо-
го обращения к процедуре WinHelp с  параметром  wCommand,  равным
HELP_CONTEXT,   повторять   вызов  этой  процедуры  с  параметром
wCommand,  равным HELP_SET_INDEX,  и dwData,  равным контекстному
номеру соответствующей статьи с оглавлением. После выполнения ко-
манды HELP_SETINDEX использование команды HELP_INDEX запрещено.

           Получение контекстно-зависимой справки
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Активизация контекстно-зависимой   справки  Help  необходима
тогда,  когда пользователю требуется получить справочную информа-
цию о назначении определенного элемента окна прикладной программы
либо о назначении определенного элемента окна диалога.  Так, нап-
ример,  пользователь может активизировать меню File (Файл), выде-
лить  при  помощи  клавиш управления курсором в этом меню команду
Open (Открыть) и нажать клавишу F1 с целью  получения  информации
об этой команде.

     Реализация некоторых видов контекстно-зависимой справки тре-
бует профессиональной техники программирования.  В демонстрацион-
ной программе HELPEX продемонстрированы два возможных подхода. Их
подробному рассмотрению посвящены следующие разделы.

            Обработка комбинации клавиш Shift+F1
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     С целью реализации режима  контекстной  справки,  прикладная
программа  WinHelp  в  ответ  на нажатие клавиш Shift+F1 изменяет
форму графического курсора, обращаясь к процедуре SetCursor. Если
раньше  курсор  имел вид наклоненной стрелки,  то теперь он имеет
вид стрелки, на которую наложен знак вопроса.

     case WM_KEYDOWN:
      if (wParam == VK_F1) {

     /* Если нажаты клавиши Shift-F1,  переходим в режим контекс-
        тной справки и устанавливаем соответствующую форму графи-
        ческого курсора */

     if (GetKeyState(VK_SHIFT)<0) {
      bHelp = TRUE;
      SetCursor(hHelpCursor);
      return (DefWindowProc(hWnd, message, wParam, lParam));
     }

     /* Если клавиша F1 была нажата без клавиши Shift, отображаем
        на экране главное оглавление справочника */

     else {
       WinHelp(hWnd,szHelpFileName,HELP_INDEX,0L);
      }
     }

     else if (wParam == VK_ESCAPE && bHelp) {

     /* В режиме контекстной справки нажата клавиша Esc:  прекра-
        щаем работу в этом режиме */

      bHelp = FALSE;
      SetCursor((HCURSOR)GetClassWord(hWnd,GCW_HCURSOR));
     }

     break;

     До тех пор пока пользователь находится в  режиме контекстной
справки (т.е.  пока он не нажмет кнопку "мыши" либо клавишу Esc),
менеджер окна прикладной программы HELPEX отвечает  на  сообщения
Windows WM_SETCURSOR установкой соответствующей формы графическо-
го курсора (стрелка с наложенным на нее знаком вопроса).

     case WM_SETCURSOR:

     /* При работе в режиме контекстной справки в ответ на каждое
        сообщение  WM_SETCURSOR  необходимо  переопределять форму
        графического курсора.  В противном случае Windows устано-
        вит графический курсор сопоставленный зарегистрированному
        прикладной программой классу окон. */

     if (bHelp) {
      SetCursor(hHelpCursor);
      break;
     }
     return (DefWindowProc(hWnd, message, wParam, lParam));
     break;

    case WM_INITMENU:
     if (bHelp) {
      SetCursor(hHelpCursor);
     }
     return (TRUE);

     Если при работе в режиме  контекстной  справки  пользователь
нажимает  кнопку  "мыши",  прикладная  программа  HELPEX получает
сообщение WM_NCLBUTTONDOWN (если в момент нажатия  кнопки  графи-
ческий курсор находился в служебной области окна).  Исследуя зна-
чение параметра wParam,  передаваемого вместе с сообщением, можно
определить на какой именно элемент окна указал пользователь, най-
ти соответствующий контекстный номер и передать его  в  процедуру
WinHelp:

     case WM_NCLBUTTONDOWN:

     /* Если работа  происходит  в  режиме  контекстной  справки,
        отобразим  на экране информацию о выбранном элементе слу-
        жебной области окна. */

      if (bHelp) {
       dwHelpContextId =
       (wParam == HTCAPTION)     ? (DWORD) HELPID_TITLE_BAR     :
       (wParam == HTREDUCE)      ? (DWORD) HELPID_MINIMIZE_ICON :
       (wParam == HTZOOM)        ? (DWORD) HELPID_MAXIMIZE_ICON :
       (wParam == HTSYSMENU)     ? (DWORD) HELPID_SYSTEM_MENU   :
       (wParam == HTBOTTOM)      ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTBOTTOMLEFT)  ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTBOTTOMRIGHT) ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTTOP)         ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTLEFT)        ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTRIGHT)       ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTTOPLEFT)     ? (DWORD) HELPID_SIZING_BORDER :
       (wParam == HTTOPRIGHT)    ? (DWORD) HELPID_SIZING_BORDER :
                                   (DWORD) 0L;

       if (!((BOOL)dwHelpContextId))
        return (DefWindowProc(hWnd, message, wParam, lParam));

       bHelp = FALSE;
       WinHelp(hWnd,szHelpFileName,HELP_CONTEXT,dwHelpContextId);
       break;
      }

      return (DefWindowProc(hWnd, message, wParam, lParam));

                Обработка нажатия клавиши F1
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Программная поддержка  контекстной справки для меню реализу-
ется в исходном тексте прикладной программы сравнительно  просто.
Если  меню активно,  в нем выделен определенный пункт и пользова-
тель нажимает клавишу F1, то Windows посылает прикладной програм-
ме  сообщение  WM_ENTERIDLE.  Это  сообщение  говорит о том,  что
система переходит в состояние ожидания по причине того, что поль-
зователь  пытался  активизировать пункт меню нажатием клавиши F1,
которая для этой цели не предназначена. После получения сообщения
WM_ENTERIDLE  во время ожидания Windows вы можете исследовать те-
кущее состояние клавиатуры.

     Если при этом окажется,  что клавиша F1 находится в  нажатом
состоянии, вы можете программно эмулировать нажатие пользователем
клавиши Enter,  передав Windows сообщение WM_KEYDOWN с параметром
wParam,  равным VK_RETURN.  В данном случае, однако, требуется не
выполнение команды,  связанной с выбранным пунктом меню,  а вывод
на  экран справочной информации об этой команде.  По этой причине
вы устанавливаете соответствующий флаг признака (bHelp=TRUE)  и в
момент  получения сообщения WM_COMMAND проверяете сброшен ли этот
флаг либо установлен.  Если флаг сброшен,  вы выполняете команду,
связанную с пунктом меню.  В противном случае, вы выводите на эк-
ран описание выбранной команды.

     Реализацию контекстной справки Help  для  меню  иллюстрирует
следующий пример:

     case WM_ENTERIDLE:
      if ((wParam == MSGF_MENU) && (GetKeyState(VK_F1) & 0x8000))
      {
       bHelp = TRUE;
       PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0L);
      }
      break;

     case WM_COMMAND:

      /* Была ли клавиша F1 нажата при работе с меню или мы нахо-
      димся в режиме контекстной справки (Shift+F1)? */

      if (bHelp) {
       dwHelpContextId =
       (wParam == IDM_NEW)    ? (DWORD) HELPID_FILE_NEW     :
       (wParam == IDM_OPEN)   ? (DWORD) HELPID_FILE_OPEN    :
       (wParam == IDM_SAVE)   ? (DWORD) HELPID_FILE_SAVE    :
       (wParam == IDM_SAVEAS) ? (DWORD) HELPID_FILE_SAVE_AS :
       (wParam == IDM_PRINT)  ? (DWORD) HELPID_FILE_PRINT   :
       (wParam == IDM_EXIT)   ? (DWORD) HELPID_FILE_EXIT    :
       (wParam == IDM_UNDO)   ? (DWORD) HELPID_EDIT_UNDO    :
       (wParam == IDM_CUT)    ? (DWORD) HELPID_EDIT_CUT     :
       (wParam == IDM_CLEAR)  ? (DWORD) HELPID_EDIT_CLEAR   :
       (wParam == IDM_COPY)   ? (DWORD) HELPID_EDIT_COPY    :
       (wParam == IDM_PASTE)  ? (DWORD) HELPID_EDIT_PASTE   :
                                (DWORD) 0L;

       if (!dwHelpContextId) {
        MessageBox( hWnd,
       "Для пунктов меню HELP справочная информация отсутствует",
       "Help Example", MB_OK);
        return (DefWindowProc(hWnd, message, wParam, lParam));
       }

       bHelp = FALSE;
       WinHelp(hWnd,szHelpFileName,HELP_CONTEXT,dwHelpContextId);
       break;
      }

     Распознавание нажатия  клавиши F1 в процессе работы с окнами
диалога реализуется несколько сложнее.  С этой  целью  необходимо
запрограммировать фильтр сообщений у активизировать его, обратив-
шись  к  процедуре SetWindowsHook с  отслеживанием  WH_MSGFILTER.
Фильтр сообщений должен выделять сообщения WM_KEYUP и WM_KEYDOWN,
связанные с  клавишей VK_F1,  адресованные менеджеру окна диалога
(в этом случае Windows передает в фильтр сообщений  служебный код
MSGF_DIALOGBOX).  Исследуя передаваемую фильтру структуру, описы-
вающую соответствующее сообщение,  Вы можете определить требуемый
контекст справки:  окно диалога и его элемент, о назначении кото-
рого желает узнать пользователь. Следует обратить внимание на то,
что  непосредственно  из  фильтра  сообщений  вызывать  процедуру
WinHelp не рекомендуется. Вместо этого следует из процедуры-филь-
тра  послать  прикладной  программе  пользовательское сообщение с
запросом об активизации справочной системы при первой  возможнос-
ти.

оступ к справочной информации при помощи меню Help (Справочник)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     В частности,  если   интерактивная   документация   содержит
статью, описывающую порядок использования клавиатуры при работе с
прикладной программой,  то в меню Help (Справочник) этой приклад-
ной  программы следует включить пункт Keyboard (Клавиатура).  При
последующей активизации этого пункта меню пользователем, приклад-
ная программа должна обращаться к процедуре WinHelp с запросом на
доступ к соответствующей справочной статье:

     case IDM_HELP_KEYBOARD:
      WinHelp(hWnd,lpHelpFile,HELP_KEY,(LPSTR)"keyboard");
      break;

       Доступ к дополнительным таблицам ключевых слов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Ваша прикладная программа может использовать команды и поня-
тия,  похожие на команды и понятия другой  прикладной  программы,
однако  полностью не совпадающие с ними.  Процедура WinHelp может
осуществить поиск требуемой статьи по заданному ключевому слову с
учетом  соответствия между ключевыми словами и статьями,  опреде-
ленному в альтернативной таблице  ключевых  слов.  Функциональная
реализация  возможности использования множественных таблиц ключе-
вых слов производится посредством обращения к процедуре WinHelp с
параметром wCommand, равным HELP_MULTIKEY.

     Знак сноски,  идентифицирующий альтернативную таблицу ключе-
вых слов, а также само ключевое слово или ключевая фраза указыва-
ются в полях информационной структуры MULTIKEYHELP.  Указатель на
эту структуру  передается  в  процедуру  WInHelp  через  параметр
dwData.  Структура  MULTIKEYSTRUCT  определена  в  файле описаний
WINDOWS.H в следующем виде:

     typedef struct tagMULTIKEYHELP
       {
         WORD    mkSize;
         BYTE    mkKeylist;
         BYTE    szKeyphrase[1];
       } MULTIKEYHELP;

     Ниже приводится  описание полей этой информационной структу-
ры.

        Формат структуры MULTIKEYHELP     Таблица 7.14
ЪДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і   Параметр   і                 Формат                        і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і mkSize       і Размер структуры. Размер включает длину ключе-і
і              і вого слова (фразы) и длину знака сноски  (рав-і
і              і ную 1),  идентифицирующего альтернативную таб-і
і              і лицу.                                         і
і              і                                               і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і mkKeylist    і Символ, идентифицирующий  используемую для по-і
і              і иска альтернативную таблицу ключевых слов.    і
і              і                                               і
ГДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і szKeyphrase  і Символьная строка ASCIIZ, содержащая требуемоеі
і              і ключевое  слово  или  ключевую  фразу.  Строкаі
і              і ASCIIZ это символьная строка,  у которой в ка-і
і              і честве признака конца строки используется сим-і
і              і вол NULL.                                     і
АДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     В приводимом ниже примере показана реализация  поиска статьи
по  ключевому слову "frame" (рамка) с использованием альтернатив-
ной таблицы, обозначаемой символом L:

     MULTIKEYHELP mk;
     char szKeyword[] = "frame";
     mk.mkSize = sizeof(MULTIKEYHELP) + (WORD)lstrlen(szKeyWord);
     mk.mkKeylist = "L";
     mk.mkKeyword = szKeyword;
     WinHelp(hWnd, lpHelpFile, HELP_MULTIKEY, (LPSTR)&mk);

              Завершение работы со справочником
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Система интерактивной документации Help - это  общий ресурс,
коллективно  используемый  всеми прикладными программами Windows.
Вместе с этим,  поскольку справочная система является независимой
программой, пользователь может выполнять ее как всякую другую ПП.
По этой причине, контроль над ней со стороны прикладной программы
пользователя ограничен.  И хотя прикладная программа не может не-
посредственно завершить работу монитора справочной системы,  уда-
лив  его  из  памяти ПЭВМ,  однако она имеет возможность сообщить
ему,  что прекращает использование справочной системы.  Так перед
закрытием своего главного окна прикладная программа, использующая
справочную систему,  обязана проинформировать монитор  справочной
системы  об  окончании  своей  работы путем обращения к процедуре
WinHelp с параметром wCommand, равным HELP_QUIT:

     case WM_DESTROY:
      WinHelp(hWnd, lpHelpFile, HELP_QUIT, NULL);

     Если в  процессе выполнения прикладной программы было произ-
ведено обращение к процедуре WinHelp, то перед завершением ее ра-
боты  (до выхода из главной процедуры WinMain) необходимо вызвать
эту же процедуру (WinHelp) с командой HELP_QUIT (обычно это дела-
ется  при получении менеджером главного окна прикладной программы
сообщения WM_DESTROY).

     Если прикладная программа использует одновременно  несколько
справочных файлов,  необходимо вызвать процедуру WInHelp с коман-
дой HELP_QUIT для каждого используемого файла.

     Если прикладная программа или программный модуль (динамичес-
кая  библиотека)  осуществляли  работу со справочной системой и в
определенный момент необходимо деактивировать (удалить) экземпляр
монитора, связанный с прикладной программой или программным моду-
лем,  следует использовать для этой цели  обращение  к  процедуре
WinHelp с параметром wCommand, равным HELP_QUIT.

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

     Выйти из прикладной программы Help в Windows  невозможно  до
тех  пор,  пока все прикладные программы обращавшиеся хотя бы од-
нажды к процедуре WinHelp,  вновь не обратятся к ней  с  командой
HELP_QUIT. Если  какая-либо  из  программ  этого  не сделает,  то
прикладная программа Help будет работать до тех пор, пока не за-
вершит работу запрошенный справочник Help.

                Примеры информационных файлов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі             Microsoft Word - HELPEX.RTF                іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і - File Edit View Insert Format Utilities Macro Window    Help і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і      ЪДДДДДДїЪДї     ЪДДїЪДї     ЪДїЪДїЪДї  ЪДїЪДїЪДїЪДїЪДї   і
іFont: іTms Rmііvі Pts:і10ііvі     і#ііLііxі  іvіі.ііDіі+іі*і   і
і      АДДДДДДЩАДЩ     АДДЩАДЩ     АДЩАДЩАДЩ  АДЩАДЩАДЩАДЩАДЩ   і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДґ
і #S+Edit Menu                                                і^і
і                                                             ГДґ
і Меню Edit включает в себя команды, которые позволяют вам    іІі
і перемещать текст в буфер вырезанного изображения и из него, і±і
і удалять текст и отменять предыдущую операцию редактирования.і±і
і                                                             і±і
і Для более подробной информации выберите имя команды меню    і±і
і Edit.                                                       і±і
і і ClearHELPID_EDIT_CLEAR  Удаляет текст без перемещения в   і±і
і і                         буфер.                            і±і
і і CopyHELPID_EDIT_COPY    Копирует текст в буфер Clipboard. і±і
і і CutHELPID_EDIT_CUT      Удаляет текст и помещает его в    і±і
і і                         буфер вырезанного изображения     і±і
і і                         Clipboard.                        і±і
і і PasteHEPLID_EDIT_PASTE  Перемещает текст из буфера в окно і±і
і і                         редактирования.                   і±і
і і UndoHELPID_EDIT_UNDO    Отменяет предыдущую операцию.     ГДґ
і                                                             іvі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДґ
і # menu_edit                                                 і^і
і $ Edit Menu                                                 ГДґ
і + commands:010                                              іІі
і # menu_file                                                 і±і
і $ File Menu                                                 ГДґ
і + commands:020                                              іvі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДґ
і±±±±±±±Sec 1±±±±±±±±±±±±±±±±±At±±±±Ln±±±±±Col 1±±±±±±±±±±±±±±±±і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Рис. 7.9 Создание информационного файла в редакторе Word для
Windows

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі             Help Example Hepl - HELPLEX.HLP            іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і File       Edit       Bookmark       Help                     і
іЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДґ
іі ЪДДДї   і o       і         і         і   ЪДї   іІІІІІІІІІІІІі
іі іA_ і   іo  o     і   <<    і   >>    і   іOі   іІІІІІІІІІІІІі
іі АДДДЩ   і o  o    і         і         і    ~\   іІІІІІІІІІІІІі
іі Index   і Back    і Browse  і Browse  і Browse  іІІІІІІІІІІІІі
іАДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДВДґ
і Edit Menu                                                   і^і
і                                                             ГДґ
і Меню Edit включает в себя команды, которые позволяют вам    іІі
і перемещать текст в буфер вырезанного изображения и из него, і±і
і удалять текст и отменять предыдущую операцию редактирования.і±і
і                                                             і±і
і Для более подробной информации выберите имя команды меню    і±і
і Edit.                                                       і±і
і                                                             і±і
і Clear      Копирует текст без перемещения в буфер,          і±і
і Copy       Копирует текст в буфер Clipboard.                і±і
і Cut        Удаляет текст и помещает его в буфер вырезанного і±і
і            изображения Clipboard.                           і±і
і Paste      Перемещает текст из буфера в окно редактирования.ГДґ
і Undo       Отменяет предыдущую операцию.                    іvі
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДЕДґ
і<іІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±і>і і
АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДЩ

     Рис. 7.10  Вид соответствующей статьи при отображении в окне
справочной системы Help

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі     Microsoft Word - \BORLAND\EXAMPLES\HELPEX.RTF      іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і - File Edit View Insert Format Utilities Macro Window    Help і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і      ЪДДДДДДїЪДї     ЪДДїЪДї     ЪДїЪДїЪДї  ЪДїЪДїЪДїЪДїЪДї   і
іFont: іTms Rmііvі Pts:і10ііvі     і#ііLііxі  іvіі.ііDіі+іі*і   і
і      АДДДДДДЩАДЩ     АДДЩАДЩ     АДЩАДЩАДЩ  АДЩАДЩАДЩАДЩАДЩ   і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДґ
і #S+Bitmaps by Reference                                     і^і
і                                                             ГДґ
і Битовые изображения можно помещать в предложения            іІі
і [bmc max2icon.bmp]BITMAP_CODEC, как любой другой символ.    і±і
і Для открытия всплывающего окна с более подробной информациейі±і
і щелкните кнопкой "мыши" на кнопке максимизации размера.     і±і
і                                                             і±і
і [bmc winword.bmp]Вы можете также размещать битовые          і±і
і изображения на левой или правой границе окна Help. Текст    і±і
і будет автоматически размещаться вдоль правого края битового і±і
і графического изображения.                                   і±і
і                                                             і±і
і [bmr mouse.bmp]Либо вы можете разместить битовое изображениеі±і
і у правого края окна, а текст будет автоматически            і±і
і располагаться вдоль левого края.                            і±і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ±і
і # Кодировкой данного битового изображения является:         і±і
і text...[bmc codec.bmp]text...                               і±і
і                                                             і±і
і Примечание: В данное версии Help нельзя кодировать битовые  і±і
і изображения bml или bmr, как оперативные точки.             ГДґ
і                                                             іvі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДґ
і # BITMAPS_REF                                               і^і
і $ Битовые изображения по ссылке                             ГДґ
і +bitmap;:0005                                               іІі
і # BIMAP_CODEC                                               і±і
і $ Визуально размещаемые битовые изображения.                ГДґ
і + bitmap:0010                                               іvі
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДґ
і±±±±±±±Sec 1±±±±±±±±±±±±±±±±±At±±±±Ln±±±±±Col 1±±±±±±±±±±±±±±±±і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

     Рис. 7.11 Ссылка на битовое изображение в тексте статьи

ЪДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДВДї
іДДі             Help Example Hepl - HELPLEX.HLP            іvі^і
ГДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДґ
і File       Edit       Bookmark       Help                     і
іЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДґ
іі ЪДДДї   і o       і         і         і   ЪДї   іІІІІІІІІІІІІі
іі іA_ і   іo  o     і   <<    і   >>    і   іOі   іІІІІІІІІІІІІі
іі АДДДЩ   і o  o    і         і         і    ~\   іІІІІІІІІІІІІі
іі Index   і Back    і Browse  і Browse  і Browse  іІІІІІІІІІІІІі
іАДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДВДґ
і Bimaps by reference                              ЪДї        і^і
і                                                  і^і        ГДґ
і Битовое изображение можно поместить в предложениеАДЩ,       іІі
і как любой другой символ. Для открытия всплывающего окна с   і±і
і более подробной информацией щелкните кнопкой "мыши" на      і±і
і кнопке максимизации битового изображения.                   і±і
і                                                             і±і
і Microsoft  Вы можете также разместить битовое изображение   і±і
і ________   по левой границе окна Help. Текст будет          і±і
і      W     автоматически размещаться вдоль левого края.     і±і
і WiriWord                                                    і±і
і                                                          ~  і±і
і Либо графическое изображение можно разместить по правой ЪДї і±і
і границе, и текст будет автоматически размещаться вдоль  і-і і±і
і левой границы.                                          і±і ГДґ
і                                                         АДЩ іvі
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДЕДґ
і<іІ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±і>і і
АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДБДЩ

     Рис. 7.12  Статья Help,  описывающая размещение графического
изображения по ссылке

                Файл описания проекта Helpex
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Ниже приводится  текст файла описания проекта для демонстра-
ционной программы HELPEX:

      [OPTIONS]
      ROOT=c:\help
      INDEX=main_index
      TITLE=Help Example
      COMPRESS=true

      [FILES]
      helpe.rtf   ; общие статьи
      terms.rtf   ; определения терминов

      [MAP]
      #define main_index 0xFFFF
      #define HELPID_EDIT_CLEAR 100
      #define HELPID_EDIT_COPY 101
      #define HELPID_EDIT_CUT 102
      #define HELPID_EDIT_PASTE 103
      #define HELPID_EDIT_UNDO 104
      #define HELPID_FILE_EXIT 200
      #define HELPID_FILE_NEW 201
      #define HELPID_FILE_OPEN 202
      #define HELPID_FILE_PRINT 203
      #define HELPID_FILE_SAVE 204
      #define HELPID_FILE_SAVE_AS 205
      #define HELPID_EDIT_WINDOW 300
      #define HELPID_MAXIMIZE_ICON 301
      #define HELPID_MINIMIZE_ICON 302
      #define HELPID_SYSTEM_MENU 305
      #define HELPID_TITLE_BAR 306
      #define HELPID_SIZING_BORDER 307

ение
Приложение A. Сообщения об ошибках...............................2
Типы сообщений...................................................3
Сообщения об ошибках этапа компиляции............................3
Сообщения сервера DPMI...........................................5
Сообщения компилятора Help об ошибках............................5
Сообщения об ошибках утилиты MAKE................................7
Сообщения об ошибках этапа выполнения............................7
Сообщения об ошибках утилиты TLIB................................8
Сообщения об ошибках утилиты TLINK...............................9
Пояснения к сообщениям об ошибках...............................10
- A -...........................................................12
- B -...........................................................18
- C -...........................................................24
- D -...........................................................40
- E -...........................................................48
- F -...........................................................52
- G -...........................................................59
- H -...........................................................61
- I -...........................................................61
- L -...........................................................73
- M -...........................................................74
- N -...........................................................82
- O -...........................................................89
- P -...........................................................95
- R -..........................................................105
- S -..........................................................118
- T -..........................................................124
- U -..........................................................134
- V -..........................................................142
- W -..........................................................143

               Приложение A. Сообщения об ошибках
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     В Borland C++ имеется две категории ошибок: ошибки этапа вы-
полнения,  ошибки сервера DPMI,  ошибки этапа компиляции,  ошибки
компилятора справочников Help,  ошибки TLIB и ошибки  TLINK.  Эти
ошибки поясняются в данном приложении.  Сообщения об ошибках, вы-
водимые системой интерфейса с пользователем,  поясняются в файлах
документации на дистрибутивных дисках.

     Сначала указывается тип сообщения (например, сообщение этапа
компиляции или сообщение утилиты Help).  В большинстве  пояснений
указывается возможная причина ошибки, как можно от нее избавиться
или приводится предупреждающее сообщение.

     Сообщения об  ошибках  перечислены в алфавитном порядке,  по
старшинству символов ASCII;  обычно первыми идут сообщения, начи-
нающиеся символами (равенство,  запятая, фигурная скобка и т.д.).

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

     Например, если у вас имеется функция С++ goforit,  то факти-
чески вы можете получить сообщение об ошибке:

     goforit must be declared with no arguments

     Для того, чтобы найти описание данного сообщения в этой гла-
ве, искать следует сообщение:

     функция must be declared with no arguments

в начале  списка сообщений об ошибках.  Сообщение упорядочивается
по алфавиту по слову "must".

     Если же  некоторая  переменная  включается в текст сообщения
позже (например,  "Address of overloaded function функция doesn't
match типу"),  то такое сообщение можно найти по алфавиту, в дан-
ном случае на букву A.

                     Типы сообщений
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

         Сообщения об ошибках этапа компиляции
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Диагностические сообщения компилятора Borland C++ разбивают-
ся на три класса:  фатальные ошибки, нефатальные ошибки и предуп-
реждения.

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

     Нефатальные ошибки  указывают  на  синтаксические  ошибки  в
программе, ошибки командной строки или ошибки, вызванные ситуаци-
ями на диске или в памяти. Компилятор завершает текущую фазу ком-
пиляции и прекращает работу.  На каждой фазе компиляции  (препро-
цессорная обработка, синтаксический анализ, оптимизация и генера-
ция кода) компилятор пытается найти максимально  возможное  число
ошибок.

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

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

           Примечание: Номера строк не являются точными.

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

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

             Переменные сообщений этапа компиляции    Таблица A.1
ЪДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
іОбобщенное имя в  і Фактическое имя или значение               і
іданном руководствеі выводимое на экран                         і
ГДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іаргумент          і Аргумент командной строки или иной аргументі
ікласс             і Имя класса                                 і
іимя_файла         і Имя файла (с расширением или без)          і
іфункция           і Имя функции                                і
ігруппа            і Имя группы                                 і
іидентификатор     і Идентификатор (имя переменной или другой)  і
іязык              і Название языка программирования            і
іэлемент           і Имя элемента данных или функции-элемента   і
ісообщение         і Строка сообщения                           і
імодуль            і Имя модуля                                 і
ічисло             і Фактическое число                          і
іпараметр          і Параметр командной строки или другой       і
і                  і параметр                                   і
ісегмент           і Имя сегмента                               і
іспецификатор      і Спецификатор типа                          і
іимя_идентификатораі Идентификатор                              і
ітип               і Иимя типа                                  і
іXXXXh             і 4-значное шестнадцатиричное число,         і
і                  і за которым следует h                       і
АДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

                  Сообщения сервера DPMI
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Все ошибки сервера (обслуживающей программы)  интерфейса DOS
защищенного режима (DPMI), кроме одной, вызываются условиями, вы-
ходящими за рамки программ Borland. Если программа не может опре-
делить тип вашей ЭВМ,  то в сообщении вам предлагается решение. В
противном случае имеются проблемы в конфигурации  вашей  системы,
на дисках, или в самой аппаратуре. Обычно вы будете получать одно
из общих сообщений,  но если ваш диск поврежден, или вы получаете
неописанное сообщение, обратитесь к службе технического сопровож-
дения.

     Все сообщения об ошибках являются фатальными.  Они не содер-
жат переменных и не являются предупреждениями.

              Сообщения компилятора Help об ошибках
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     Error P1025: line...7 of filename.HPJ : Section heading
     sectionname unrecognized.

     Warning P1039: line...38 of filename.HPJ : [BUILDTAGS]
     section missed.

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

     Error R2025 : File environment error.

     Warning R2501 : Using old-key phrase table.

     Если это возможно,  компилятор сообщает номер  статьи  и/или
имя информационного файла,  где обнаружена ошибка.  Номер статьи,
сообщаемый компилятором, представляет собой ее порядковый номер в
файле .RTF (первая,  вторая и т.д.). Эти номера могут совпадать с
номером страницы,  показываемым текстовым процессором,  в зависи-
мости от того, какую длину гипотетической страницы (в строках) вы
установили. Напомним,  что статьи в информационных файлах отделя-
ются  знаком "конец страницы",  хотя в справочной системе понятие
"страница" не используется.

     Сообщения, начинающиеся со слова Error (Ошибка) соответству-
ют серьезным (фатальным) ошибкам. Сообщения о таких ошибках выво-
дятся на экран всегда и при их возникновении построение  справоч-
ного  файла  не производится.  Сообщения,  начинающиеся с Warning
(Предупреждение),  связаны с менее серьезными ошибками. При нали-
чии  ошибок  только второго типа,  процесс компиляции проходит до
конца и создается соответствующий справочный файл,  который может
быть  использован  в  рамках  системы  интерактивной документации
Windows. Однако при этом справочник Help может функционировать не
совсем так,  как задумывалось разработчиком. Количество предупре-
дительных сообщений, выводимых компилятором на экран, может регу-
лироваться пользователем.

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

                    Переменные сообщений Help         Таблица A.2
ЪДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і     Что вы видите  і    Что видно на экране                   і
і     в руководстве  і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і имя_контекста      і Псевдоним строки контекста.              і
і                    і                                          і
і строка_контекста   і Строка контекста.                        і
і                    і                                          і
і имя_файла          і Имя файла (с расширением или без).       і
і                    і                                          і
і имя_шрифта         і Имя шрифта.                              і
і                    і                                          і
і имя_параметра      і Имя параметра.                           і
і                    і                                          і
і имя_раздела        і Заголовок раздела.                       і
і                    і                                          і
і имя_признака       і Признак сноски.                          і
і                    і                                          і
і имя_статьи         і Имя статьи.                              і
АДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

              Сообщения об ошибках утилиты MAKE
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Сообщения об ошибках утилиты MAKE разбиваются на два класса:
ошибки и фатальные ошибки:

     - Ошибки указывают на наличие  каких-то  синтаксических  или
       семантических ошибок в исходном формирующем файле.

     - Фатальные  ошибки прекращают обработку формирующих файлов.
       Вы должны выполнить соответствующие действия и  перезапус-
       тить MAKE.

     В сообщениях,  перечисленных  в данном разделе,  встречаются
следующие имена и значения.  Когда вы получаете сообщение, то со-
ответствующее имя или значение подставляется.

                    Переменные сообщений MAKE         Таблица A.3
ЪДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і     Что вы видите  і    Что видно на экране                   і
і     в руководстве  і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і                    і                                          і
і    Аргументы       і Аргументы (командной строки и др.).      і
і                    і                                          і
і    Выражение       і Выражение.                               і
і                    і                                          і
і    Имя_файла       і Имя файла (с расширением или без).       і
і                    і                                          і
і    Номер_строки    і Номер строки.                            і
і                    і                                          і
і    Сообщение       і Строки сообщения.                        і
і                    і                                          і
і    Цель            і Приемник.                                і
АДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

           Сообщения об ошибках этапа выполнения
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Количество ошибок  этапа  выполнения в Borland C++ невелико.
Эти ошибки могут обнаруживаться в уже откомпилированной и  выпол-
няющейся программе.

           Сообщения об ошибках утилиты TLIB
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Утилита TLIB  может  выводить сообщения об ошибках и предуп-
реждающие сообщения.

     В сообщениях,  перечисленных  в данном разделе,  встречаются
следующие имена и значения.  Когда вы получаете сообщение, то со-
ответствующее имя или значение подставляется.

                    Переменные сообщений LIB          Таблица A.4
ЪДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і     Что вы видите  і    Что видно на экране                   і
і     в руководстве  і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і                    і                                          і
і    Имя_файла       і Имя файла (с расширением или без).       і
і                    і                                          і
і    Функция         і Имя функции.                             і
і                    і                                          і
і    Длина           і Фактическое число.                       і
і                    і                                          і
і    Модуль          і Имя модуля.                              і
і                    і                                          і
і    Число           і Фактическое число.                       і
і                    і                                          і
і    Маршрут         і Имя маршрута.                            і
і                    і                                          і
і    Причина         і Причина вывода предупреждения.           і
і                    і                                          і
і    Размер          і Фактическое число.                       і
і                    і                                          і
і    Тип             і Имя типа.                                і
АДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

           Сообщения об ошибках утилиты TLINK
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

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

     - Фатальные ошибки приводят к немедленной остановке програм-
       мы TLINK. Файл .EXE удаляется.

     - Нефатальная ошибка не приводят к удалению файла  .EXE  или
       .MAP. В интегрированной среде эти  ошибки интерпретируются
       как фатальные,

     - Предупреждения  просто  указывают на условия,  которые вам
       возможно захочется исправить.  При этом файла .EXE и  .MAP
       создаются.

     В сообщениях,  перечисленных  в данном разделе,  встречаются
следующие имена и значения.  Когда вы получаете сообщение, то со-
ответствующее имя или значение подставляется.

                    Переменные сообщений TLINK        Таблица A.5
ЪДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і     Что вы видите  і    Что видно на экране                   і
і     в руководстве  і                                          і
ГДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і                    і                                          і
і    Имя_файла       і Имя файла (с расширением или без).       і
і                    і                                          і
і    Код_ошибки      і Номер кода ошибки для внутренних ошибок. і
і                    і                                          і
і    Группа          і Имя группы.                              і
і                    і                                          і
і    Модуль          і Имя модуля.                              і
і                    і                                          і
і    Номер_строки    і Номер строки в файле.                    і
і                    і                                          і
і    Сегмент         і Имя сегмента.                            і
і                    і                                          і
і    Идентификатор   і Имя идентификатора.                      і
і                    і                                          і
і    ХХХХh           і 4-значное 16-тиричное число, за которым  і
і                    і следует h.                               і
АДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

             Пояснения к сообщениям об ошибках
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

     Фатальная ошибка утилиты MAKE:

     ')' missing in macro invocation in command команда
Фатальная ошибка утилиты MAKE

     (в вызове макрокоманды в команде команда пропущена ')')

     В вызове макрокоманды требуется левая скобка.

     ) expected
Сообщение об ошибке этапа компиляции

     Сообщение об ошибке этапа компиляции

     (требуется ))

     В конце списка параметров ожидается правая круглая скобка.

     ( expected
Сообщение об ошибке этапа компиляции

     (требуется ()

     Перед списком параметров ожидается левая круглая скобка.

     , expected
Сообщение об ошибке этапа компиляции

     (требуется ,)

     В списке объявлений,  инициализации или параметров ожидается
запятая.

     : expected alter private/protected/publlc
Сообщение об ошибке этапа компиляции

     (требуется : после private/protected/public)

     При использовании     резервированных     слов      private/
protected/public  для  того,  чтобы начать соответствующий раздел
класса С++, за ними должно следовать двоеточие.

     < expected
Сообщение об ошибке этапа компиляции

     (требуется <)

     За < не следует ключевое  слово  template.  Каждое  описание
шаблона должно включать в себя формальные параметры шаблона, зак-
люченные в <>, за которыми непосредственно следует ключевое слово
template.

     @ seen, expecten a response-files name
Ошибка TLIB

     (обнаружено @, предполагается имя командного файла файла)

     Непосредственно после @ не задан командный файл утилиты.

    { expected
Сообщение об ошибке этапа компиляции

    (требуется {)

     В качестве начала блока или  инициализации  ожидается  левая
фигурная скобка.

     } expected
Сообщение об ошибке этапа компиляции

     (требуется })

     В конце  блока  или  инициализации ожидается правая фигурная
скобка.

     32-record encountered
Фатальная ошибка утилиты TLINK

     (обнаружена 32-разрядная запись)

     Обнаружен объектный   файл,   содержащий  32-битовые  записи
80386, а параметр /3 не используется.

     286/287 instructions not enabled
Cообщение об ошибке этапа компиляции

     (Команды 286/287 не разрешены)

     Чтобы разрешить использование  команд  286/287,  используйте
параметр командной  строки компилятора -2 или параметр 80286 диа-
логового окна OptionsіCompilerіCode Generation  (ПараметрыіКомпи-
ляторіГенерация кода). Учтите, что полученный при этом код не мо-
жет использоваться на машинах с процессорами 8086 или 8088.

                            - A -

     A20 line already enabled, so test is meaningless
Ошибка DPMIINST

     (строка A20 уже разрешена, поэтому проверка не имеет смысла)

     DPMINST генерирует данное сообщение,  когда вы запускаете ее
для нахождения и добавления в ядро базы данных информации о вашей
машине. Если вам выводится последовательность этих  сообщений, то
выполните исходную загрузку (с первоначальными файлами CONFIG.SYS
и AUTOEXEC.BAT).  См.  сообщение:  Machine not in  database  (run
DPMIINST).

     Abnormal program termination
Сообщение об ошибке этапа выполнения

     (аварийное завершение программы)

     Данное сообщение может выводиться, если для выполнения прог-
раммы не может быть выделено достаточного количества памяти.  Бо-
лее подробно оно рассматривается  в  конце  раздела,  касающегося
ошибок операций с плавающей точкой.  Вызов abort также приводит к
появлению данного сообщения.

     Access can only be changed to public or protected
Сообщение об ошибке этапа компиляции

     (тип доступа  может  быть  изменен  только  на  public   или
     protected)

     Производный класс  С++  может  модифицировать  права доступа
члена базового класса, но только на public или protected. Элемент
базового класса нельзя сделать private.

     added file имя_файла does not begin correctly, ignored
Предупреждение утилиты TLIB

    (некорректно начинается добавляемый файл  имя_файла,  поэтому
    он игнорируется)

     Библиотекарь определил,  что форма добавляемого к объектному
файлу модуля  некорректна,  поэтому он не пытается добавить его к
библиотеке. Библиотека тем не менее создается.

     Address of overloaded function функция doesn't match тип
Сообщение об ошибке этапа компиляции

     (адрес переопределяемой функции не соответствует типу)

     Переменной или  параметру присваивается адрес переопределяе-
мой функции (или выполняется инициализация переменной с использо-
ванием данного адреса),  а тип переменной или параметра не совпа-
дает с типом переопределяемой функции с заданным именем.

     модуль is already in LIB, not changed
Предупреждение утилиты TLIB

     (модуль уже находится в библиотеке и не изменятся)

     Для библиотеки была пыпытка выполнить действие +.  но объект
с таким  именем уже есть в библиотеке.  Если требуется обновление
модуля, то действием должно быть +-.  Библиотека не модифицирует-
ся.

     Ambiquity between функция_1 and функция_2
Сообщение об ошибке этапа компиляции

     (неоднозначность между функцией_1 и функцией_2)

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

     Ambiguous member name имя
Сообщение об ошибке этапа компиляции

     (неоднозначное имя элемента)

     Элемент структуры имя,  используемый во встроенном ассембле-
ре,  должен быть уникален. Если определяется более одной структу-
ры,  то все определения должны соответствовать типу и смещению  в
структурах.  В  данном случае элемент с указанным именем является
неоднозначным. Используйте синтаксис: (struc xxx).yyy.

     Ambiguous operators need parentheses
Предупреждение этапа компиляции

     (неоднозначные операции требуют круглых скобок)

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

     Application load & execute error 0001
Фатальная ошибка командной строки

     (ошибка загрузки и выполнения прикладной программы)

     Не хватает расширенной памяти для загрузки средств командной
строки защищенного режима.

     Application load & execute error FFE0
Фатальная ошибка командной строки

     Не хватает расширенной памяти для загрузки средств командной
строки защищенного режима.

     Array allocated using new may not have an initializer
Сообщение об ошибке этапа компиляции

     (в выделении  массива с помощью new может отсутствовать ини-
     циализатор)

     При инициализации вектора (массива) классов  вы  должны  ис-
пользовать конструктор без аргументов. Это называется конструкто-
ром, используемым по умолчанию,  что означает,  что вы можете при
инициализации такого вектора не указывать аргументы.

     Array bounds missing ]
Сообщение об ошибке этапа компиляции

     (в задании границ массива отсутствует ])

     В исходном файле в  объявлении  границ  массива  отсутствует
закрывающая квадратная скобка.

     Array must have at least one element
Сообщение об ошибке этапа компиляции

     (массив должен иметь хотя бы один элемент)

     Язык Си стандарта ANSI и С++ требуют,  чтобы массив  опреде-
лялся  хотя  бы с одним элементом (объекты нулевого размера недо-
пустимы).  Существует старый программистский прием,  состоящий  в
том,  чтобы объявить элемент структуры типа массива нулевого раз-
мера, а уже затем при помощи функции malloc  распределить  факти-
чески  требуемую  память.  Этот прием по-прежнему можно использо-
вать, но теперь вы обязаны объявлять массив, как имеющий (как ми-
нимум) один элемент.  Разумеется, объявления (в противоположность
определениям) массивов неизвестного размера допустимы.

     Например:

     char ray[]      /* определение массива неизвестного размера
                        недопустимо */
     char ray[0]     /* определение массива нулевого размера
                        недопустимо */
     extern char ray(); /* объявление с незаданным размером -
                           допустимо */

     Array of references is not allowed
Сообщение об ошибке этапа компиляции

     (массив ссылок недопустим)

     Массив ссылок недопустим,  поскольку указатели на ссылки не-
допустимы, а имена массивов встраиваются в указатели.

     Array size for 'delete' ignored
Предупреждение этапа компиляции

     (размер массива для 'delete' игнорируется)

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

     Array size too lange
Сообщение об ошибке этапа компиляции

     (размер массива слишком велик)

     Объявленный массив превышает 64К.

     Array variable идентификатор is near
Предупреждение этапа компиляции

     (переменная-массив идентификатор является ближней)

     При использовании  параметров  командной  строки -Ff или -Fm
или команды интегрированной среды  OptionsіCompilerіAdvanced Code
Generation...іFar Data Treshhold глобальные переменные, превышаю-
щие пороговый размер, автоматически делаются компилятором дальни-
ми  (far).  Однако,  если  переменная является инициализированным
массивом с незаданным размером, то его общий размер в момент при-
нятия решения о том, сделать ли его ближним или дальним, неизвес-
тен,  и компилятор делает его ближним.  Если число  заданных  для
массива  инициализаторов вызывает превышение общим размером пере-
менной порогового значения размера данных,  то компилятор  выдает
это предупреждение. Если тот факт, что компилятор сделал перемен-
ную ближней,  вызывает проблемы (например, компоновщик сообщает о
переполнении  группы из-за слишком большого числа глобальных дан-
ных),  вы должны явно сделать переменную дальней, поместив ключе-
вое слово far непосредственно слева от имени переменной в ее объ-
явлении.

     Assembler statement too long
Сообщение об ошибке этапа компиляции

     (слишком длинный ассемблерный оператор)

     Операторы встроенного ассемблера не могут превышать по длине
480 байт.

     Assigning тип to перечислимый_тип
Предупреждение этапа компиляции

     (присваивание типа перечислимому типу)

     Присваивание целочисленного значения типу enum. Это является
ошибкой в C++, но выдаваемое сообщение имеет уровень предупрежде-
ния, и программа может заработать.

     Assignment to this is obsolete,  use X::operator new instead
Сообщение об ошибке этапа компиляции

     (такое присваивание  устарело,   используйте   вместо   него
     X::operator new)

     В старых версиях С++ единственный способ управления  распре-
делением класса объектов заключался в присваивании параметру this
внутри конструктора.  Теперь это отменено,  поскольку  существует
более эффективный, надежный и более общий способ, состоящий в оп-
ределении функции-элемента operator new.

     Attempt to export non-public symbol идентификатор
Предупреждение утилиты TLINK

     (попытка экспорта идентификатора, не являющегося общедоступ-
     ным)

     Имя идентификатора  было указано в разделе EXPORTS файла оп-
ределения модуля,  но идентификатор с данным именем не  найден  в
компонуемых модулях,  как  общедоступный.  Это может быть вызвано
опечаткой в имени или тем,  что не определена процедура  с  таким
именем.
                            - A -

     Attempt to grant or reduce access to идентификатор
Сообщение об ошибке этапа компиляции

     (попытка предоставить или ограничить доступ к  идентификато-
     ру)

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

     Attempting to return a reference to a local object
Сообщение об ошибке этапа компиляции

     (попытка вернуть ссылку на локальный объект)

     В функции, возвращающей ссылочный тип, вы попытались вернуть
ссылку на временный объект (возможно, в качестве результата вызо-
ва  конструктора  или функции).  Поскольку при возврате из вызова
временный объект исчезнет, то ссылка на него недопустима.

     Attempting to return a reference to local name идентификатор
Сообщение об ошибке этапа компиляции

     (попытка вернуть ссылку на локальное имя идентификатор)

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

     Automatic data segment exceeds 64K
Предупреждение утилиты TLINK

     (динамический локальный сегмент данных превышает 64К)

     Общее пространство,  занимаемое физическим сегментом DGROUP,
локальной динамически распределяемой областью памяти  и сегментом
стека, превышает  64К.  Задайте  в операторах в файле определения
модуля HEAPSIZE и STACKSIZE меньшие значения,  или увеличьте раз-
мер ближних  данных  в  DGROUP.  Размеры  компонентов сегментов в
DGROUP показаны в файле карты памяти.  Чтобы определить,  сколько
занимает каждый  модуль  в DGROUP,  полезно использовать параметр
командной строки TLINK /s.

                            - B -

     Bad call of intristic function
Сообщение об ошибке этапа компиляции

     (неверный вызов неявной функции)

     Вы использовали  данную неявную функцию без определения про-
тотипа,  или указали для данной функции не тот прототип,  который
ожидается компилятором.

      Bad character in parameters
Фатальная ошибка утилиты TLINK

     (неверный символ в параметрах)

     В командной  строке  или в командном файле обнаружен один из
следующих символов:

     " * < = > ? [ ] |

либо любой управляющий символ, отличный от горизонтальной табуля-
ции, перевода строки, возврата каретки или Ctrl-Z.

     Bad define directive syntax
Сообщение об ошибке этапа компиляции

     (неверный синтаксис директивы определения)

     Макроопределения начинается или заканчивается  операцией ##,
или содержит операцию #, за которой следует имя макроаргумента.

     bad enviroment params
Фатальная ошибка сервера DPMI

     (неверные параметры операционной среды)

     Значение переменной операционной среды DPMIMEM имеет  непра-
вильный синтаксис.

     Bad file name format in include directive
Сообщение об ошибке этапа компиляции

     (неправильный формат имени файла в директиве включения)

     Имена включаемых  файлов  должны   заключаться   в   кавычки
("имя_файла.h") или в угловые скобки (<имя_файла.h>).  Перед име-
нем файла отсутствовала открывающая кавычка или  угловая  скобка.
Если использовалась макрокоманда,  то результирующий текст расши-
рения неверен, т.е., он не взят в кавычки.

     Bad file name format in include statement
Сообщение об ошибке утилиты MAKE

     (в операторе  включения задан неправильный формат имени фай-
     ла)

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

     Bad file name format in inline directive
Сообщение об ошибке этапа компиляции

     (неправильный формат имени файла в директиве inline)

     Имена включаемых  файлов  должны   заключаться   в   кавычки
("имя_файла.h") или в угловые скобки (<имя_файла.h>).  Перед име-
нем файла отсутствовала открывающая кавычка или  угловая  скобка.
Если использовалась макрокоманда,  то результирующий текст расши-
рения неверен, т.е., он не взят в кавычки.

     bad GCD type in GRPDEF, extended dictionary aborted
     bad GRPDEF type encountered, extended dictionary aborted
Предупреждение утилиты TLIB

     (неверный тип GCS в DRPDEF, расширенный словарь отброшен)

     Библиотекарь при создании расширенного словаря обнаружил не-
допустимую запись в определении группы (GRPDEF) в объектном моду-
ле. Единственным типом записи GRPDEF, который поддерживает библи-
отекарь и компоновщик,  является  индексный  тип  сегмента.  Если
обнаружен другой  тип  GRPDEF,  то библиотекарь не сможет создать
расширенный словарь. Возможно, объектный модуль, создаваемый про-
дуктами, отличными от Borland,  содержат записи GRPDEF других ти-
пов. К этому предупреждению  может  также  приводить  запорченный
объектный модуль.

     Bad header in input LIB
Cообщение об ошибке утилиты TLIB

     (неверный заголовок во входной библиотеке)

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

     Bad ifdef directive syntax
Сообщение об ошибке этапа компиляции

     (неверный синтаксис директивы ifdef)

     Директива #ifdef должна содержать в  теле  директивы  единс-
твенный идентификатор (и ничего более).

     Bad macro output translator
Сообщение об ошибке утилиты MAKE

     (неверная трансляция выходной макрокоманды)

     Неверен синтаксис подстановки внутри макрокоманд. Например:

     $(MODEL:=s)  или  $(MODEL:)  или  $(MODEL:s)

     Bad object file record in library file имя_файла  in  module
     модуль near file offset 0xxxxxxxx
     Bad object file record in module имя_файла near  module file
     offset 0xxxxxxxx
Фатальная ошибка утилиты TLINK

     (неверная запись  объектного файла в библиотечном файле имя_
     файла в модуле модуль с ближним смещением 0xxxxxxxx)

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

     bad OMF record type тип encountered in module модуль
Сообщение об ошибке утилиты TLIB

     (в модуле обнаружен неверный тип записи OMF)

     Библиотекарь при чтении объектного файла  обнаружил неверную
запись OMF (формат объектного модуля).  Библиотекарь уже считал и
проверил записи-заголовки модуля модуль,поэтому обычно это указы-
вает, что объектный модуль запорчен, и его следует восстановить.

     Bad syntax for pure function definition
Сообщение об ошибке этапа компиляции

     (неверный синтаксис определения "чистой" функции)

     "Чистые" (без побочных эффектов) виртуальные функции задают-
ся добавлением в определение символов "=0".  Вы написали что-либо
похожее, но не совпадающее с требуемым в точности.

     Bad undef directive syntax
Сообщение об ошибке этапа компиляции

     (неверный синтаксис директивы undef)

     Директива #undef  должна содержать в качестве тела директивы
единственный идентификатор (и ничего более).

     Bad undef statement syntax
Сообщение об ошибке утилиты MAKE

     (ошибка в синтаксисе оператора "разопределения")

     Оператор !undef должен содержать один идентификатор и ничего
больше, как тело оператора.

     Bad version number in parameter block
Фатальная ошибка утилиты TLINK

     (неверный номер версии в блоке параметров)

     Эта ошибка указывает не внутреннее несоответствие в интегри-
рованной среде.  Если  она возникает,  выйдите из интегрированной
среды и перезапустите ее.  При работе с автономной версией данная
ошибка не возникает.

     Base class класс contains dinamically dispatchable functions
Сообщение об ошибке этапа компиляции

     (базовый класс содержит динамически диспетчеризируемые функ-
     ции)

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

     Base class класс is inaccessible because also in класс
Предупреждение этапа компиляции

     (базовый класс недоступен в указанном классе)

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

     Base class класс is included more than once
Сообщение об ошибке этапа компиляции

     (базовый класс класс включен более одного раза)

     Класс С++  может  быть  производным  от любого числа базовых
классов,  но непосредственно от одного и того же класса он  может
быть производным только один раз.

     Base class класс is initialized more than once
Сообщение об ошибке этапа компиляции

     (базовый класс класс инициализируется более одного раза)

     В конструкторе класса С++ список инициализации, следующий за
заголовком  конструктора,  включает указанный базовый класс более
одного раза.

     Base initialization without a class name is now obsolete
Сообщение об ошибке этапа компиляции

     (инициализация базового класса без имени класса является ус-
     таревшей)

     Ранние версии С++ для инициализации базового класса позволя-
ли  помещать  за заголовком конструктора просто список параметров
конструктора базового класса.  Теперь рекомендуется включать  имя
базового класса.

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

     Старая запись:

     derived::derived(int i) : (i, 10) { ... }

     Новая запись:

     derived::derived(int i) : base(i, 10) { ... }

     Bit field cannot be static
Сообщение об ошибке этапа компиляции

     (Битовое поле не может быть статическим)

     Только обычные данные-элементы классов С++ могут быть объяв-
лены как static, но не битовые поля.

     Bit field too large
Сообщение об ошибке этапа компиляции

     (битовое поле слишком велико)

     Это ошибка может возникать, когда вы указываете битовое поле
длиной более 16 бит.

     Bit field must be signed or unsigned int
Сообщение об ошибке этапа компиляции

     (битовые поля должны иметь тип signed или unsigned int)

     Битовое поле  должно  быть  объявлено  с целочисленным типом
signed или unsigned. В языке Си стандарта ANSI битовые поля могут
быть  только signed или unsigned int (но,  например,  не сhar или
long).

     Bit field must be signed or unsigned int
Предупреждение этапа компиляции

     (битовые поля должны иметь тип signed или unsigned int)

     В Си стандарта ANSI битовые поля не могут иметь тип char или
unsigned char.  Однако,  если компиляция не выполняется в строгом
режиме ANSI, компилятор будет допускать такую конструкцию, но от-
мечать ее данным предупреждением.

     Bit fields must contain at least one bit
Сообщение об ошибке этапа компиляции

     (битовые поля должны содержать как минимум один бит)

     Вы не можете объявить именованное битовое поле длиной 0 (или
менее 0) бит.  Можно объявить битовое поле нулевой длины без име-
ни,  по соглашению используемое для принудительной установки  вы-
равнивания  битового поля по границе байта (или по границе слова,
если выбран параметр выравнивания -a).

     Bit field must have integral type
Сообщение об ошибке этапа компиляции

     (битовые поля должны иметь целый тип)

     В С++ битовые поля, включая перечисления, должны иметь целый
тип; это включает в себя перечисления.

     Body already defined for this function функция
Сообщение об ошибке этапа компиляции

     (тело функции функция уже определено)

     Тело функции  с этим же именем и типом уже встречалось выше.
Тело функции может входить в программу только один раз.

     Both return and return with a value
Предупреждение этапа компиляции

     (одновременно присутствуют  операторы  return и return с за-
     данным значением)

     Текущая функция  содержит операторы return с заданным значе-
нием возврата и без значения возврата одновременно.  В Си это до-
пустимо, но практически всегда является ошибкой. Вероятно, опера-
тор return просто был опущен в конце функции.

                            - C -

     Call of non-function
Сообщение об ошибке этапа компиляции

     (вызов не функции)

     Вызываемое имя не было объявлено  как  функция.  Эта  ошибка
обычно возникает при неправильном объявлении или опечатке в имени
функции.

     Call to function функция with no prototype
Предупреждение этапа компиляции

     (вызов функции функция без прототипа)

     Это сообщение выдается в тех случаях,  когда разрешено сооб-
щение "Prototype required" ("Требуется прототип"), и вы вызываете
функцию  функция  без  первоначального  задания  прототипа этой
функции.

     Cannot access an inactive scope
Сообщение об ошибке этапа компиляции

     (нельзя обратиться к неактивной области действия)

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

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

     Cannot add or substract relocatable symbols
Сообщение об ошибке этапа компиляции

     (сложение или  вычитание переместимых идентификаторов невоз-
     можно)

     Единственная арифметическая  операция,  которая может выпол-
няться с переместимым именем идентификатора в качестве ассемблер-
ного операнда - это сложение или вычитание с константой. Перемен-
ные, процедуры,  функции и метки являются переместимыми идентифи-
каторами. Если Var - это переменная,  а Const - это константа, то
команды:

     MOV AX,Const+Const
и
     MOV AX,Var+Const

допустимы, а команда MOV AX AX,Var+Var недопустима.
     Cannot allocate a reference
Сообщение об ошибке этапа компиляции

     (нельзя выделить ссылку)

     Предпринята попытка создать ссылку с помощью  операции  new.
Это не допускается,  поскольку ссылки не являются объектами, поэ-
тому их нельзя распределить с помощью new.

     идентификатор cannot be declared in an anonymous union
Сообщение об ошибке этапа компиляции

     (идентификатор нельзя описать в анонимном объединении)

     Компилято обнаружил описание функции-элемента или  статичес-
кий элемент анонимного объединения. Такие оъединения могут содер-
жать только данные-элемент.

     функция_1 cannot be distinguished from функция_2
Сообщение об ошибке этапа компиляции

     (функция_1 не может отличаться от функции_2)

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

     Cannot call near class member function  with  a  pointer  of
     type тип
Сообщение об ошибке этапа компиляции

     (невозможно вызвать функцию-элемент ближнего класса с указа-
     телем указанного типа)

     Функции-элементы  ближних  классов (классы являются ближними
по умолчанию в моделях памяти TINY,  SMALL и MEDIUM) нельзя вызы-
вать с  помощью указателей элементов типа FAR или HUGE. (Заметим,
что это применимо также к вызовам элементов  с  помощью  указате-
лей.) Либо измените указатель на ближний,  либо опишите класс как
дальний.

     Cannot cast from тип_1 to тип_2
Сообщение об ошибке этапа компиляции

     (Приведение типа между типом_1 и типом_2 невозможно)

     Приведение типа  тип_1  к  типу тип_2 здесь запрещено.  В Си
указатель может быть приведен к целому типу или  к  другому  типу
указателя.  Целочисленный тип может быть приведен к любому целому
типу, типу с плавающей точкой и указателю. Тип с плавающей точкой
может  быть  приведен  к целому типу или другому типу с плавающей
точкой.  Структуры и массивы не позволяют выполнение для них при-
ведений типа. Невозможны также приведения для типа void.

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

     Cannot convert тип_1 to тип_2
Сообщение об ошибке этапа компиляции

     (невозможно преобразовать тип_1 в тип_2)

     Присваивание, инициализация или выражение требует выполнение
заданного преобразования типа,  но данное преобразование недопус-
тимо.

     Cannot create a varlable for abstract class класс
Сообщение об ошибке этапа компиляции

     (Создание переменной для абстрактного класса класс невозмож-
     но)

     Абстрактные классы с "чистыми" виртуальными функциями не мо-
гут использоваться  непосредственно,  допускается  лишь  создание
производных (порожденных) от них классов.

     Cannot define a pointer or reference to a reference
Сообщение об ошибке этапа компиляции

     (Определение указателя или ссылки на ссылку невозможно)

     Указатель на ссылку или ссылку на ссылку не допускается.

     Cannot find класс::класс (класс&) to copy a vector
Сообщение об ошибке этапа компиляции

     (Не найден класс::класс (класс&) для копирования вектора)

     Если класс  С++  класс_1  содержит  вектор  (массив)  класса
класс_2 и вы хотите сконструировать объект типа класс_1 из друго-
го   объекта   типа   класс_1,   то   должен   быть   конструктор
класс_2::класс_2 (класс_2&) такой,  чтобы могли быть сконструиро-
ваны элементы вектора.  Данный конструктор принимает только  один
параметр (являющийся ссылкой на его класс) и называется конструк-
тором ссылки.

     Обычно компилятор создает конструктор ссылки  автоматически.
Однако,  если вы определили конструктор для класса класс_2, имею-
щего параметр типа класс_2,  и дополнительные параметры со значе-
ниями по умолчанию, то данный конструктор ссылки не может сущест-
вовать и не может быть создан компилятором. (Вследствие того, что
класс_2::класс_2  (класс_2&) и класс_2::класс_2 (класс_2&,  int =
1) не различаются компилятором). Вы обязаны переопределить данный
конструктор таким образом,  чтобы не все параметры имели значения
по умолчанию.  Затем вы можете определить конструктор ссылки  или
позволить компилятору создать собственный.

     Cannot find класс::операция= (класс&) to copy a vector
Сообщение об ошибке этапа компиляции

     (Не найден класс::операция=(класс&)для копирования вектора)

     Когда в  С++  класс  класс_1 содержит вектор (массив) класса
класс_2,  и вы хотите скопировать класс типа класс_1,  где должна
быть операция присваивания класс::операция=(класс&),  для копиро-
вания данного вектора. Обычно компилятор подставляет такую опера-
цию  автоматически.  Однако,  если  вы  для  класса_2 определяете
operator=,  но не ту,  которая воспринимает параметр типа класс&,
то  компилятор  не будет подставлять ее автоматически - вы должны
указать ее сами.

     Cannot find  default конструктор to initialize array element
     of type класс
Сообщение об ошибке этапа компиляции

     (для инициализации элемента массива  типа  класс  невозможно
     найти используемый по умолчанию конструктор)

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

     Cannot find default конструктор  to  initialize  base  class
     класс
Сообщение об ошибке этапа компиляции

     (для инициализации  базового  класса  класс невозможно найти
     используемый по умолчанию конструктор)

     Когда в С++ строится производный класс класс_2,  должен быть
построен каждый базовы класс класс_1.  Если конструктор для клас-
са_2 не задает конструктор  для  класса_1  (как  часть  заголовка
класса_2),  то должен существовать конструктор класс_1::класс_1()
для базового класса. Данный конструктор без параметров называется
используемым  по  умолчанию конструктором.  Если вы не определили
используемый по умолчанию конструктор,  компилятор будет подстав-
лять используемый по умолчанию конструктор автоматически. Если вы
определили конструктор, его нужно указать явно.

     Cannot find default конструктор to initialize member иденти-
     фикатор
Сообщение об ошибке этапа компиляции

     (для инициализации элемента идентификатор  невозможно  найти
     используемый по умолчанию конструктор)

     Если класс С++ класс_2 содержит элемент класса класс_2, и вы
хотите построить объект типа класс_1,  но не из  другого  объекта
типа     класс_1,     то     требуется    наличия    конструктора
класс_2::класс_2(),  благодаря чему может  быть  построен  данный
элемент.  Данный конструктор без параметров называется используе-
мым по умолчанию конструктором.  Если вы не определили используе-
мый по умолчанию конструктор для класса класс_2, компилятор будет
подставлять используемый по умолчанию конструктор  автоматически.
Если вы определили конструктор, его нужно указать явно.

     Cannot generate COM file: data below initial CS:IP defined
Фатальная ошибка утилиты TLINK

     (файл COM сгенерировать невозможно,  определены данные  ниже
     первоначального значения CS:IP)

     Данная ошибка  является  результатом  попытки  сгенерировать
данные или код ниже стартового адреса файла  .COM  (обычно  100).
Убедитесь, что  начальный  адрес устанавливается в значение 100 с
помощью инструкции ORG 100H.  Для программ,  написанных на  языке
высокого уровня,  такая ошибка возникать не должна. Если она воз-
никает, убедитесь,  что компонуется корректный  объектный  модуль
инициализации (C0x).

     Cannot generate   COM  file:  invalid  initial  entry  point
     address
Фатальная ошибка утилиты TLINK

     (файл COM сгенерировать невозможно: неверный адрес начальной
     точки входа)

     Вы использовали параметра /Tdc или /t,  но  начальный  адрес
программы не равен 100H, что требуется для файлов .COM.

     Cannot generate COM file: program exceeds 64K
Фатальная ошибка утилиты TLINK

     (файл COM сгенерировать невозможно: программа  превышает  по
     размеру 64К)

     Вы использовали параметр /Tdc или /t,  но общий размер прог-
раммы превышает предел формата .COM.

     Cannot generate COM file: segment-relocatable items present
Фатальная ошибка утилиты TLINK

     (невозможно сгенерировать файл COM: присутствуют относитель-
     ные перемещаемые записи)

     Вы использовали параметр /Tdc или /t,  но программа содержит
относительные  коррекрировки  сегмента,  которые не допускаются в
файлах .COM.

     Cannot generate COM file: stack segment present
Фатальная ошибка утилиты TLINK

     (невозможно сгенерировать  файл  COM:  присутствуют  сегмент
     стека)

     Вы использовали параметр /Tdc или /t,  но программа содержит
сегмент стека, что не допускается для файлов .COM.

     Cannot generate функция from template function шаблон
Сообщение об ошибке этапа компиляции

     (из указанного шаблона невозможно сгенерировать данную функ-
     цию)

     Обнаружен вызов шаблона функции,  но соответствующую шаблону
функцию нельзя сгенерировать из данного шаблона.

     Cannot have a near member in a far class
Сообщение об ошибке этапа компиляции

     (элемент near в классе far недопустим)

     Все элементы класса С++ far должны быть дальними (far). Дан-
ный элемент должен принадлежать классу, объявленному (или имеюще-
му по умолчанию) атрибут near.

     Cannot have a non-inline function in a local class
     Cannot have a static data in a local class
Сообщение об ошибке этапа компиляции

     (в локальном классе встроенная функция или статические  дан-
     ные не допускаются)

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

     Cannot have multiple paths for implicit rule
Сообщение об ошибке утилиты MAKE

     (для неявных правил не допускается несколько маршрутов)

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

     {path1;path2}.c.obj:      # недопустимо
     {path}.c.obj              # допустимо

     Cannot have paths for target
Сообщение об ошибке утилиты MAKE

     (для целевого файла не допускается несколько маршрутов)

     Списки множественных маршрутов допустимы только для  зависи-
мых файлов и явном правиле, например:

     {path1;path2}.c.obj:      # недопустимо
     {path}.c.obj              # допустимо

     Cannot initialize a class member here
Сообщение об ошибке этапа компиляции

     (инициализация элемента класса здесь невозможна)

     Отдельные элементы структур, объединений и классов С++ могут
не иметь инициализаторов. Структура или объединение могут инициа-
лизироваться как единое целое при помощи инициализаторов в фигур-
ных скобках.  Класс С++ можно инициализировать только при  помощи
конструктора.

     Cannot initialize тип_1 with тип_2
Сообщение об ошибке этапа компиляции

     (тип_1 не может быть инициализирован типом_2)

     Вы пытаетесь  инициализировать  объект  типа тип_1 значением
типа тип_2,  что недопустимо.  Правила инициализации те же, что и
для присваивания.

     Cannot modify a const object
Сообщение об ошибке этапа компиляции

     (модификация объекта-константы невозможна)

     Недопустимая операция с  объектом,  объявленным  константой,
например, попытка присваивания такому объекту.

     Cannot overload 'main'
Сообщение об ошибке этапа компиляции

     (переопределение функции 'main' невозможно)

     Функция main - это единственная функция,  переопределить ко-
торую нельзя.

     функция cannot return a value
Сообщение об ошибке этапа компиляции

     (функция не может возвращать значение)

     Это сообщение  выдается,  если функция с типом возврата void
содержит оператор return, возвращающий некоторое значение, напри-
мер, int.

     идентификатор cannot start an argument declaration
Сообщение об ошибке этапа компиляции
     (указанный идентификатор не может начинать описание аргумен-
     та)

     В начале аргумента в описателе функции найден неопределенный
идентификатор. Это часто вызывается опечатками в имени или описа-
нии  типа  или  пропуском  (ошибка обычно возникает при включении
файла заголовка).

     Cannot use tiny or huge model with Windows
Сообщение об ошибке этапа компиляции

     (модели памяти tiny или huge в Windows неприменимы)

     Смысл ясен  из названия.  Используйте модели small,  medium,
compact или large.

     cannot write GRPDEF list, extended dictionary aborted
Сообщение об ошибке утилиты TLIB

     (список GRPDEF записать невозможно, расширенный словарь отб-
     рошен)

     Библиотекарь не может записать в конец  библиотечного  файла
расширенный словарь.  Обычно это указывает на недостаток места на
диске.

     can't grow LE/LIDATA record buffer
Сообщение об ошибке утилиты TLIB

     (невозможно увеличение записи буфера LE/LIDATA)

     Ошибка командной строки. См. сообщение out of memory reading
LE/LIDATA record from object buffer.

     Case bypassed initialization of local variable
Сообщение об ошибке этапа компиляции

     (конструкция case обошла инициализацию локальной переменной)

     В С++  недопустимо любым способом обходить инициализацию ло-
                            - D -

     Debug into switch ignored for .COM files
Предупреждение утилиты TLINK

     (параметр отладочной  информации для файлов .COM игнорирует-
     ся)

     Borland C++ не включает отладочную информацию в  файлы .COM.
См. описание параметра /v.

     Debug information in module модуль will be ignored
Предупреждение утилиты TLINK

     (информация для  отладки в модуле модуль будет игнорировать-
     ся)

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

     Declaration does not specify a tag or an identifier
Сообщение об ошибке этапа компиляции*

     (описание не определяет идентификацтор или признак)

     Это описание  ничего не описывает.  Это может быть структура
или объединение без признака,  либо переменная  в  описании.  С++
требует, чтобы что-то описывалось.

     Declaration is not allowed here
Сообщение об ошибке этапа компиляции

     (объявление здесь недопустимо)

     Объявления не  могут использоваться в управляющих операторах
для операторов while, for, do. if или switch.

     Declaration missing ;
Сообщение об ошибке этапа компиляции

     (в объявлении отсутствует ;)

     В исходном  файле  содержится  объявление поля структуры или
объединения, в котором отсутствует точка с запятой (;).

     Declaration syntax error
Сообщение об ошибке этапа компиляции

     (синтаксическая ошибка в объявлении)

     Исходный файл содержит объявление, в котором отсутствует не-
который символ имя или наоборот имеются лишние.

     Declaration terminated incorrectiy
Сообщение об ошибке этапа компиляции

     (неправильное окончание объявления)

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

     Declaration was expected
Сообщение об ошибке этапа компиляции

     (требуется объявление)

     Требуется, но  не найдено объявление.  Это обычно бывает при
отсутствии разделителя,  например, запятой, точки с запятой, пра-
вой круглой скобки или правой квадратной скобки.

     Declare operator delete (void*) or (void*, size_t)
Сообщение об ошибке этапа компиляции

     (описание операции delete (void*) или (void*, size_t))

     Описание операции delete с единственным параметром void* или
со вторым параметром типа size_t. Если вы используете вторую вер-
сию, то  она  будет  использоваться  для ссылки на первую версию.
Глобальная операция delete может описываться только в форме с од-
ним параметром.

     Declare type тип ptior to use in prototype
Предупреждение этапа компиляции

     (описание типа тип перед использованием в прототипе)

     Когда прототип функции ссылается на не описанный  ранее  тип
структуры, то  описание  в прототипе не эквивалентно описанию вне
прототипа. Например:

     int func(struct S *ps)
     struct s{ /* ... */ }

     Так как  в  области  действия прототипа для функции func нет
структуры s, типом параметра ps будет указатель на неопределенную
структуру s  и  не  эквивалентен описываемой позднее структуре s.
Далее это приведет к  предупреждениям  и  сообщениям  об  ошибках
из-за несовместимых типов, что было бы весьма непонятным без дан-
ного предупреждения.  Чтобы исправить ошибку, вы можете поместить
описание структуры s перед прототипом,  который на нее ссылается,
или добавить перед любым прототипом,  который ссылается на струк-
туру s, неполное описание типа struct s;. Если параметром функции
является struct,  а не указатель на struct,  то неполное описание
недостаточно. Тогда  вы должны поместить описание структуры перед
прототипом.

     идентификатор is assigned a value that is never used
Предупреждение этапа компиляции

     (идентификатору присвоено значение, нигде не используемое)

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

     Default argument value redeclared for parameter параметр
Сообщение об ошибке этапа компиляции:

     (для параметра заново описано используемое по умолчанию зна-
     чение аргумента параметр)

     Когда описанный параметр функции С++ имеет  используемое  по
умолчанию значение,  данное значение нельзя изменить, описать за-
ново или пропустить в другом описании той же функции.

     Default expression may not use local variable
Сообщение об ошибке этапа компиляции

     (используемое по  умолчанию  значение  не может использовать
     локальную переменную)

     В используемых по умолчанию аргументах выражения не допуска-
ется использование локальных переменных или других параметров.

     Default outside of switch
Сообщение об ошибке этапа компиляции

     (оператор default вне оператора switch)

     Компилятор обнаружил ключевое слово  default  вне  оператора
switch. Обычно это вызывается пропущенной фигурной скобкой.

     Default value missing
Сообщение об ошибке этапа компиляции

     (пропущено используемое по умолчанию значение)

     Если в функции С++  объявляется  параметр  со  значением  по
умолчанию,  все  последующие параметры также должны иметь умолча-
ния.  В данном объявлении за параметром со значением по умолчанию
следует параметр без умолчания.

     Default value missing following parameter параметр
Сообщение об ошибке этапа компиляции

     (после параметра пропущено используемое по умолчанию  значе-
     ние)

     Все параметры  после  первого  параметра  с  используемым по
умолчанию значением также должны иметь заданные по умолчанию зна-
чения.

     Define directive needs an identifier
Сообщение об ошибке этапа компиляции

     (директиве define необходим идентификатор)

     Первый непробельный символ после #define должен быть иденти-
фикатором.  Компилятор  встретил  на этом месте какие-либо другие
символы.

     symbol defined in module модуль is duplicated in module  мо-
     дуль
Ошибка или предупреждение утилиты TLINK

     (идентификатор, определенный в модуле модуль,  дублируется в
     модуле модуль)

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

     Delete array size missing ]
Сообщение об ошибке этапа компиляции

     (в спецификаторе массива пропущена ])

     В спецификаторе массива в операции даты пропущена скобка ].

     Destructor cannot be declared const or volatile
Сообщение об ошибке этапа компиляции

     (деструктор не может описываться как const или volatile)

     Деструктор описан как const и/или volatile,  а это не допус-
кается.

     Destructor cannot have a return type specification
Сообщение об ошибке этапа компиляции

     (деструктор не может иметь спецификации типа возврата)

     Деструкторы С++ не имеют типа возврата,  и вы не можете объ-
явить тип или значение возврата.

     Destructor for класс is not accessible
Сообщение об ошибке этапа компиляции

     (деструктор для класса недоступен)

     Деструктор для   данного  класса  имеет  тип  protected  или
private и недоступен из данной точки для разрушения  класса. Если
деструктор класса является частным (private), класс не может быть
разрушен и потому не может никогда быть использован. Это наверня-
ка  ошибка.  Защищенный  деструктор  (protected) допускает доступ
только из производных классов.  Это полезно для того,  чтобы пре-
дотвратить  создание  базовых классов,  обеспечив создание из них
производных классов.

     Destructor for класс required in conditional expression
Сообщение об ошибке этапа компиляции

     (в условном выражении потребовался деструктор класса класс)

     Если компилятор должен создать временную локальную  перемен-
ную  в  условном  выражении,  здесь неудобно вызывать деструктор,
поскольку переменная может оказаться как  инициализированной, так
и неинициализированной.  Временная  переменная  может создаваться
явно в виде имя_класса(значение_1,значение_2), либо неявно, неко-
торыми другими кодами программы.  Измените код,  чтобы избавиться
от этого временного значения.

     Destructor name must match the class name
Сообщение об ошибке этапа компиляции

     (имя деструктора должно соответствовать имени класса)

     В классах  С++ объявление деструктора класса вводится симво-
лом тильда (~). Имя деструктора должно совпадать с именем класса.
В вашем исходном файле ~ предшествует какому-то другому имени.

     Divide error
Сообщение об ошибке этапа выполнения

     (ошибка деления)

     Вы пытаетесь разделить целое значение на 0, например:

     int n = 0;
     n = 2 / n;

     Вы можете перехватить эту ошибку с помощью сигнальной  функ-
ции. В  противном  случае  Borland C++ вызывает функцию abort,  и
программа завершает работу.

     Division by zero
Сообщение об ошибке этапа компиляции

     (деление на ноль)

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

     Division by zero
Предупреждение этапа компиляции

     (деление на ноль)

     Выражение с делением или получением остатка имеет в качестве
делителя литеральный ноль.

     Сообщение об ошибке утилиты MAKE:

     Division by zero
Сообщение об ошибке утилиты MAKE

     (деление на ноль)

     Деление или  остаток в операторе !if имеет нулевой делитель.

     do statement must have while
Сообщение об ошибке этапа компиляции

     (оператор do должен иметь while)

     В исходном файле встретился оператор do без соответствующего
ограничивающего ключевого слова while.

     имя_файла does not exist - don't know how to make it
Фатальная ошибка утилиты MAKE

     (файл не существует - неизвестно, как его сформировать)

     В последовательности построения указано  имя несуществующего
файла, и  неизвестно  правило,  которое позволило бы сформировать
имя файла.

     DOS error, ax = число
Фатальная ошибка утилиты TLINK

     (ошибка DOS, ax = число)

     Это происходит, если DOS возвращает непредвиденную ошибку. В
результирующем коде ошибки выводится значение  регистра  ax.  Это
может говорить об ошибке DOS или внутренней ошибке TLINK.  Единс-
твенными вызовами DOS, при который TLINK может приводить к данной
ошибке, являются read, write, seek и close.

     do-whlle statement missing (
Сообщение об ошибке этапа компиляции

     (в операторе do-while отсутствует ()

     В операторе do компилятор не  нашел  после  ключевого  слова
while левой круглой скобки.

     Сообщение об ошибке этапа компиляции:

     do-whlle statement missing )
     (в операторе do-while отсутствует ))

     В операторе do компилятор не нашел после условного выражения
правой круглой скобки.

     do-whlle statement missing ;
Сообщение об ошибке этапа компиляции

     (в операторе do-while отсутствует ;)

     В условном выражении оператора do компилятор не  нашел точки
с запятой после правой круглой скобки.

     Dublicate case
Сообщение об ошибке этапа компиляции:

     (повторение case)

     Каждое ключевое слово case  оператора  switch  должно  иметь
уникальное значение выражения-константы.

     имя_файла(номер_строки): Duplicate external name in exports
Предупреждение утилиты TLINK

     (имя_файла(номер_строки): в  операторе  export   дублируется
     внешнее имя)

     Две экспортируемые  функции,  перечисленные в секции EXPORTS
файла определения модуля определяют то же внешнее имя. Например:

     EXPORTS
        AnyProc1=MyProc
        AnyProc2=MyProc

     имя_файла(номер_строки): Duplicate internal name in imports
Предупреждение утилиты TLINK

     (имя_файла(номер_строки): в  операторе  import   дублируется
     внутреннее имя)

     Две экспортируемые функции,  перечисленные в секции  IMPORTS
файла определения модуля определяют то же внутреннее имя.  Напри-
мер:

     IMPORTS
        AnyProc=MyMod1.MyProc1
        AnyProc=MyMod2.MyProc2

или

     IMPORTS
        MyMod1.MyProc
        MyMod2.MyProc

     Duplicate ordinal number in exports
Предупреждение утилиты TLINK

     (в операторах export дублируется порядковое значение)

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

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

                            - E -

     Enum syntax error
Сообщение об ошибке этапа компиляции

     (синтаксическая ошибка в enum)

     Объявление enum не содержит  правильно  оформленного  списка
идентификаторов.

     error changing file buffer size
Сообщение об ошибке утилиты TLIB

     (ошибка изменения размера буфера файла)

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

     Error directive: сообщение
Фатальная ошибка этапа компиляции

     (директива error: сообщение)

     Данное сообщение появляется при обработке  директивы  #error
из исходного файла. Текст этой директивы выводится в сообщении.

     Error directive: сообщение
Фатальная ошибка утилиты MAKE

     (директива error: сообщение)

     Данное сообщение появляется при обработке утилитой MAKE  ди-
рективы #error из исходного файла. Текст этой директивы выводится
в сообщении.

     error opening имя_файла
Сообщение об ошибке утилиты TLIB

     (ошибка открытия указанного файла)

     Утилита TLIB по каким-то причинам не может открыть указанный
файл.

     error opening имя_файла for output
Сообщение об ошибке утилиты TLIB

     (ошибка открытия файла для вывода)

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

     error renaming имя_файла to имя_файла
Сообщение об ошибке утилиты TLIB

     (ошибка переименования файла)

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

     Error writing output file
Сообщение об ошибке этапа компиляции

     (ошибка при записи выходного файла)

     Ошибка DOS при попытке Borland C++ вывести файл  .OBJ,  .EXE
или временный  файл.  Проверьте  параметр командной строки -n или
установку  меню  OptionsіDirectiriesіOutput  directory  (Парамет-
рыіКаталогиіКаталог  вывода) интегрированной среды  (правильно ли
задан каталог для вывода).  Убедитесь также,  что на диске доста-
точно места.

     Expression expected
Сообщение об ошибке этапа компиляции

     (требуется выражение)

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

     Expression of scalar type expected
Сообщение об ошибке этапа компиляции

     (ожидается выражение скалярного типа)

     Унарные операции отрицания (!), увеличения (++) и уменьшения
(--) требуют  выражений  скалярного  типа.  Допустимыми  являются
только типы char,  short,  int, long, enum,  float, double и long
double и типы указателей.

     Expression syntax
Сообщение об ошибке этапа компиляции

     (синтаксис выражения)

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

     Expression syntax error in !if statement
Сообщение об ошибке утилиты MAKE

     (синтаксическая ошибка выражения в операторе !if)

     Выражение в операторе !if имеет неправильный вид: оно содер-
жит  неравное количество открывающих и закрывающих скобок, лишний
или пропущенный оператор или пропущенную или лишнюю константу.

     причина - extended dictionary not created
Предупреждение утилиты TLIB

     (расширенный словарь не создан)

     Утилита TLIB не могут сформировать расширенный словарь из-за
причины, указанной в сообщении.

     extern variable cannot be initialized
Сообщение об ошибке этапа компиляции

     (переменная extern не может быть инициализирована)

     Класс памяти extern применительно к переменной означает, что
переменная здесь объявляется,  но не определяется - распределение
памяти для нее не происходит.  Следовательно, инициализация пере-
менной в объявлении невозможна.

     Extra argument in template class name шаблон
Сообщение об ошибке этапа компиляции

     (лишний аргумент в шаблоне имени класса)

     Шаблон имени класса задает слишком много фактических  значе-
ний для его формальных параметров.

     Extra parameter in call
Сообщение об ошибке этапа компиляции

     (Лишние параметры в вызове)

     Вызов функции через указатель, определенный в прототипе, со-
держит слишком много аргументов.

     Extra parameter in call to функция
Сообщение об ошибке этапа компиляции

     (Лишние параметры в вызове функции)

     Вызов названной функции (которая была определена с  прототи-
пом) содержит слишком много аргументов.

                            - F -

     Failed to locate DPMI server (MPMI16BI.OVL)
Фатальная ошибка командной строки:

     (не найден сервер DPMI)

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

     Failed to locate protected mode loader (DMPILOAD.EXE)
Фатальная ошибка командной строки:

     (не найден загрузчик защищенного режима)

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

     File must contain at least one external declaration
Сообщение об ошибке этапа компиляции

     (файл должен содержать хотя бы одно объявление external)

     Данная единица компиляции было логически пустой и не  содер-
жала никаких объявлений.  Язык Си стандарта ANSI и  С++  требуют,
чтобы в единице компиляции находились какие-нибудь переменные.

     File name too long
Сообщение об ошибке этапа компиляции

     (слишком длинное имя файла)

     Имя файла  в директиве #include было слишком длинным для об-
работки его  компилятором.  Имена файлов в DOS не могут превышать
79 символов.

     File name too long
Сообщение об ошибке этапа компиляции

     (имя файла имеет слишком большую длину)

     Имя файла,  заданное в  директиве  !include,  имеет  слишком
большую длину для обработки ее обслуживающей  программой  МAKE  -
512 байт (размер внутреннего буфера).

     имя_файла file not found
Предупреждение утилиты TLIB

     (указанный файл не найден)

     Библиотекарь, работающий в режиме командной строки, пытается
добавить несуществующий объект, но библиотека создана.

     имя_файла file not found
Сообщение об ошибке утилиты TLIB

     (указанный файл не найден)

     Интегрированная интерактивная среда создает библиотеку, уда-
ляя сначала существующую библиотеку,  а затем выполняя перестрой-
ку. Если какой-либо объект не существует, то библиотека считается
неполной, и возникает данная ошибка.  Если  интегрированная среда
сообщает, что библиотека не существует,  то при компиляции исход-
ного модуля могли быть ошибки. Выполнение команд CompileіMake или
CompileіBuild должно помочь избавиться от ошибки, или определить,
где существует ошибка.

     имя_файла(имя_строки): File read error
Фатальная ошибка утилиты TLINK

     (ошибка чтения файла)

     При чтении программой TLINK файла определения модуля возник-
ла ошибка DOS. Это обычно указывает не преждевременный конец фай-
ла.

     Fixup overflow at сегмент:ххххh,  target =  сегмент:xxxh  in
     module модуль
     Fixup overflow at сегмент:ххххh,  target = идентификатор  in
     module модуль
 ообщение об ошибке утилиты TLINK

     (переполнение корректировок в указанном сегменте и модуле)

     Любое из этих сообщений указывает на некорректную  ссылку  в
объектном коде  (которую  TLINK  должен  скорректировать во время
компоновки) на код или данные.

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

     В программе  на  языке Ассемблера переполнение корректировок
часто возникает,  если вы описываете внешнюю переменную в опреде-
лении сегмента,  но  данная переменная на самом деле существует в
другом сегменте.

     Если данный  метод  не  позволяет  идентифицировать  причину
ошибки, или  вы программируете на языке высокого уровня, отличном
от Borland C++, то эта ошибка может вызываться другими причинами.
Даже в  Borland  C++ данная ошибка может генерироваться,  если вы
используете сегменты и имена групп,  отличные от используемых для
данной модели памяти по умолчанию.

     Floating point error: Divide by 0
Сообщение об ошибке этапа выполнения

     (ошибка операции с плавающей точкой: деление на 0)

     Данная фатальная  ошибка являются следствием операции с пла-
вающей точкой, для которой результат не определен. "Деление на 0"
означает,  что результат равен в точности +INF или -INF (плюс или
минус неопределенность), например для операции 1.0/0.0.

     Floating point error: Domain
Сообщение об ошибке этапа выполнения

     (ошибка операции с плавающей точкой:  выход из области опре-
     деления)

     Данная фатальная ошибка являются следствием операции с  пла-
вающей точкой,  для которой результат не определен. "Выход из об-
ласти определения" означает,  что  результат  равен  NAN  (not  a
number - не число), например для 0.0/0.0.

     Floating point error: Overflow
Сообщение об ошибке этапа выполнения

     (ошибка операции с плавающей точкой: переполнение)

     Данная фатальная ошибка являются следствием операции с  пла-
вающей точкой, для которой результат не определен. "Переполнение"
означает,  что результат равен +INF (неопределенность)  или  -INF
при  полной  потере  точности,  например  в  случае  присваивания
1e20*1e20 переменной типа double.

     Floating point error: Partial loss of precision
Сообщение об ошибке этапа выполнения

     (ошибка операции  с плавающей точкой:  частичная потеря точ-
     ности)

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

     Floating point error: Underflow
Сообщение об ошибке этапа выполнения

     (ошибка операции с плавающей точкой: потеря значимости)

     Эта особая ситуация по умолчанию маскируется, и сообщения об
ошибках не выдаются.  Потеря значимости преобразуется в ноль. От-
менить маску можно, вызвав _control87.

     Floating point error: Stack fault
Сообщение об ошибке этапа выполнения

     (ошибка операции с плавающей точкой: сбой в стеке)

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

     Этой ошибки  можно избежать,  маскируя особые ситуации таким
образом,  чтобы они не появлялись,  либо перехватывая их функцией
signal.  См.  подробное  описание  функций  _control87 и signal в
"Справочнике по библиотеке".

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

     Abnormal program termination

и вызывает функцию _exit(3). См. подробные описания функций abort
и _exit.

     For statement missing (
Сообщение об ошибке этапа компиляции

     (в операторе for отсутствует ()

     В операторе for компилятор не  нашел  левой  круглой  скобки
после ключевого слова for.

     For statement missing )
Сообщение об ошибке этапа компиляции

     (в операторе for отсутствует ))

     В операторе for компилятор не нашел после управляющего выра-
жения правой круглой скобки.

     For statement missing ;
Сообщение об ошибке этапа компиляции

     (в операторе for отсутствует ;)

     В операторе for компилятор не нашел точки  с  запятой  после
одного из выражений.

     Friend must be functions or classes
Сообщение об ошибке этапа компиляции

     ("друзья" должны быть функциями или классами)

     Дружественной в C++ может быть класс или другая функция.

     Function call missing )
Сообщение об ошибке этапа компиляции

     (в вызове функции отсутствует ))

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

     Function calls not supported
Сообщение об ошибке этапа компиляции

     (вызовы функции не поддерживаются)

     При вычислении  выражения  интегрированным отладчиком вызовы
функций (включая функции неявного  преобразования,  конструкторы,
деструкторы, переопределенные операции и встраиваемые функции) не
поддерживается.

           Примечание: Данное сообщение выводится отладчиком  ин-
      тегрированной среды.

     Function defined inline after use as extern
Сообщение об ошибке этапа компиляции

     (функция определена   как   встраиваемая   после  объявления
     extern)

     Функцию после того, как она была уже была использована нель-
зя определить как встраиваемую (inline).  Или переставьте опреде-
ление inline выше в тексте, или удалите его совсем.

     Function definition cannot be a typedef'ed declaration
Сообщение об ошибке этапа компиляции

     (определение функции не может быть объявлением typedef)

     В Си стандарта ANSI тело функции не может определяться с по-
мощью typedef с функцией Type.

     Function функция cannot be static
Сообщение об ошибке этапа компиляции

     (функция функция не может быть статической)

     Только обычные  функции-элементы и операции new и delete мо-
гут быть объявлены статическими (static).  Конструкторы, деструк-
торы и прочие операции статическими быть не могут.

     Function функция should have a prototype
Сообщение об ошибке этапа компиляции

     (функция функция должна иметь прототип)

     При вызове функции в области действия отсутствовал ее прото-
тип.

     В Си int foo();  не является прототипом, а int foo(int); яв-
ляется,  также как и int foo(void);.  В С++ int  foo();  является
прототипом, также как и int foo(void);. В Си прототипы рекоменду-
ется иметь для всех функций.  В С++ прототипы  для  всех  функций
обязательны.  Во  всех случаях,  определение функции (заголовок и
тело функции) служит как прототип,  если стоит перед любым другим
упоминанием функции.

     Function should return a value
Предупреждение этапа компиляции

     (функция должна возвращать значение)

     Данная функция была описана (возможно неявно) как возвращаю-
щая значение.  Был обнаружен оператор  return  без  возвращаемого
значения или конец функции без операторе return. Возвращайте зна-
чение или описывайте функцию как void.

     Function should return a value
Сообщение об ошибке этапа компиляции

     (функция должна возвращать значение)

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

     Functions функция_1 and функция_2 both use the same dispatch
     number
Сообщение об ошибке этапа компиляции

     (обе функции используют один номер диспетчеризации)

     Ошибка диспетчеризуемой виртуальной таблицы (DDVT).

     Functions containing  local  destructors  are  not  expanded
     inline in function функция
Предупреждение этапа компиляции

     (функции, содержащие локальные  деструкторы  не  могут  быть
     встраиваемыми функциями)

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

     Functions containing резервируемое_слово  are  not  expanded
     inline
Предуреждение этапа компиляции

     (функции, содержащие  резервируемое_слово  не   могут   быть
     подставляемыми)

     Функции, содержащие  резервируемые  слова  do,  for,  while,
goto, switch, break, continue и case, не могут быть подставляемы-
ми, даже при наличии задания их как inline. Функция может исполь-
зоваться,  но будет рассматриваться как обычная  статическая  (не
глобальная) функция.  Копия этой функции будет находиться в любой
единице компиляции, где она вызывается.

     Functions may not be part of a struct or union
Сообщение об ошибке этапа компиляции

     (функции не могут быть частью структуры или объединения)

     Данное поле  структуры  или  объединения Си было объявлено с
типом функции,  а не указателя функции.  Функции в качестве полей
разрешены только в С++.

                            - G -

     General error
Фатальная ошибка утилиты TLINK
     (общая ошибка)

     TLINK выводит  максимум информации о том,  что происходит во
время неизвестной фатальной ошибки.

     General error in library file  имя_файла  in  module  модуль
     near module file offsef Oxyyyyyyyy
Фатальная ошибка утилиты TLINK

     (общая ошибка в библиотечном файла в модуле модуль, смещение
     Oxyyyyyyyy)

     TLINK выводит  максимум информации о том,  что происходит во
время неизвестной фатальной ошибки.

     General error  in  module  модуль  near  module  file offsef
     Oxyyyyyyyy
Фатальная ошибка утилиты TLINK

     (общая ошибка в модуле модуль, смещение Oxyyyyyyyy)

     TLINK выводит  максимум информации о том,  что происходит во
время неизвестной фатальной ошибки.

     Global anonimous union not static
Сообщение об ошибке этапа компиляции

     (глобальное анонимное объединение не является статическим)

     В С++ глобальное анонимное объединение на уровне файла долж-
но быть статическим (static).

     Goto bypassed initialization of local variable
Сообщение об ошибке этапа компиляции

     (конструкция goto обошла инициализацию локальной переменной)

     В С++ недопустимо любым способом обходить инициализацию  ло-
кальной переменной. В данном случае в конструкции goto управление
передается за точку инициализации локальной переменной.

     Goto statement missing label
Сообщение об ошибке этапа компиляции

     (отсутствует метка в операторе goto)

     За ключевым словом goto должен следовать идентификатор.

     Group группа exceeds 64К
Фатальная ошибка утилиты TLINK

     (группа группа превышает 64К)

     При комбинировании сегментов размер группы превысил 64К.

     Group overflowed maximum size: группа
Сообщение об ошибке этапа компиляции

     Общий размер сегментов в группе (например,  DGROUP) превысил
64.

     Group группа_1 overlaps group группа_2
Предупреждение утилиты TLINK

     (группа_1 перекрывает группу_2)

     Это означает,  что TLINK обнаружил вложенные группы.  Данное
предупреждение возникает  только  при  использовании оверлеев или
при компоновке программ Windows.

                            - H -

     спецификатор has already been included
Сообщение об ошибке этапа компиляции

     (спецификатор уже был включен)

     Данный спецификатор типа встречается в объявлении более  од-
ного раза. Удалите или измените один из них.

     Hexadecimal value  contains more than 3 digits
Предупреждение этапа компиляции

     (шестнадцатиричное значение содержит более 3 цифр)

     В старых версиях Си шестнадцатиричная управляющая последова-
тельность могла иметь не более трех  цифр.  Новый  стандарт  ANSI
допускает любое число цифр,  лишь бы значение помещалось в  байт.
Это сообщение выдается,  когда шестнадцатиричная управляющая пос-
ледовательность имеет много ведущих нулей  (например, "\x00045").
Старые версии Си интерпретировали бы данную строку иначе.

     функция_1 hides virtual function функция_2
Предупреждение этапа компиляции

     (функция_1 скрывает виртуальную функцию_2)

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

                            - I -

     Identifier expected
Сообщение об ошибке этапа компиляции

     (требуется идентификатор)

     Здесь ожидался идентификатор, но не был найден. В Си это мо-
жет случиться в списке параметров старого заголовка функции, пос-
ле резервируемых  слов  struct  или union при отсутствии фигурных
скобок, а также при отсутствии имени поля структуры или объедине-
ния  (за  исключением  битовых полей нулевой длины).  В С++ после
двойного двоеточия (::) и после резервируемого слова operator при
отсутствии символа операции идентификатор также требуется в спис-
ке базовых классов, производным от которых является данный.

     Identifier идентификатор cannot have a type qualifier
Сообщение об ошибке этапа компиляции:

     (идентификатор идентификатор не может иметь квалификатор ти-
     па)

     Квалификатор С++ класс::идентификатор здесь неприменим. Ква-
лификатор  не  разрешен для имен typedef,  объявлений функций (за
исключением определения на уровне файла) или локальных переменных
и параметров функций,  либо для элементов класса,  за исключением
использования как квалификатора собственного имени класса  (избы-
точно, но допустимо).

     If statement missing (
Сообщение об ошибке этапа компиляции

     (в операторе if отсутствует ()

     В операторе if компилятор не нашел левой (открывающей) круг-
лой скобки после ключевого слова if.

     If statement missing )
Сообщение об ошибке этапа компиляции

     (В операторе if отсутствует ))

     В операторе if  компилятор  не  нашел  правой  (закрывающей)
круглой скобки после выражения проверки.

     If statement too long
Сообщение об ошибке утилиты MAKE

     (слишком длинный оператор if)

     Оператор if превышает 4096 символов.

     Ifdef statement too long
Сообщение об ошибке утилиты MAKE

     (слишком длинный оператор ifdef)

     Оператор ifdef превышает 4096 символов.

     Ifndef statement too long
Сообщение об ошибке утилиты MAKE

     (слишком длинный оператор ifndef)

     Оператор ifndef превышает 4096 символов.

     ignored модуль, path is too long
Предупреждение утилиты TLIB

     (модуль игнорируется, слишком длинный маршрут)

     Маршрут к заданному файлу .obj или .lib превышает 64  симво-
ла. Максимальный маршрут в TLIB не может превышать 64 символа.

     Illegal character in constant expression выражение
Сообщение об ошибке утилиты MAKE

     (неверный символ в константном выражении)

     Обслуживающая программа МAKE  обнаружила  некоторый  символ,
недопустимый для выражения-константы. Если этим символом является
буква,  то это определяет (вероятно) идентификатор,  где  имеется
синтаксическая ошибка.

     Illegal group definition: группа in module модуль
Фатальная ошибка утилиты TLINK

     (недопустимое определения группы в модуле)

     Данная ошибка  вызывается  неверно  сформированной   записью
GRPDEF в файле .OBJ.  Это может вызываться "самодельными" файлами
.OBJ или ошибкой трансляторе,  использованном для генерации файла
.OBJ. Если  это  происходит  в файле,  скомпилированном в Borland
C++, перекомпилируйте файл.  При сохранении ошибки  обратитесь  к
фирме Borland.

     Illegal initialization
Сообщение об ошибке этапа компиляции

     (недопустимая инициализация)

     Инициализация может выполняться либо выражением  типа  конс-
танты,  либо адресом глобальной extern или static переменной плюс
или минус константа.

     Illegal octal digit
Сообщение об ошибке этапа компиляции

     (недопустимая восьмиричная цифра)

     Компилятор встретил  восьмеричную константу с недопустимой в
восьмеричных числах цифрой (8 или 9).

     Illegal octal digit
Сообщение об ошибке утилиты MAKE или ошибка этапа компиляции

     (неверная восьмеричная цифра)

     Обнаруженная восьмеричная  константа содержит цифру 8 или 9.

     Illegal parameter to __emit__
Сообщение об ошибке этапа компиляции

     (недопустимый параметр __emit__)

     Вы указали аргумент emit, который не является константой или
адресом.

     Illegal pointer substraction
Сообщение об ошибке этапа компиляции

     (недопустимое вычитание указателя)

     Выдается при попытке вычитания указателя из не указателя.

     Illegal structure operation
Сообщение об ошибке этапа компиляции

     (недопустимая операция со структурой)

     Структуры могут использоваться только в операциях точки (.),
получения адреса  (&)  или присваивания (=),  либо передаваться в
функции и из функций в качестве параметров.  Компилятор  встретил
структуру, используемую с какой-либо другой операцией.

     Illegal to take address of bit field
Сообщение об ошибке этапа компиляции

     (недопустимо получать адрес битового поля)

     Недопустимо получать адрес битового поля,  хотя получать ад-
рес любых других полей можно.

     Illegal use of floating point
Сообщение об ошибке этапа компиляции

     (недопустимое использование плавающей точки)

     Операнды с плавающей точкой недопустимы в  операциях сдвига,
поразрядных булевских операциях,  обращения по ссылке (*) и неко-
торых других операциях.  Компилятор в качестве операнда одной  из
этих операций обнаружил число с плавающей точкой.

     Illegal use of member pointer
Сообщение об ошибке этапа компиляции

     (недопустимое использование указателя-элемента)

     Указатели на классы могут использоваться операциями присваи-
вания, сравнения обращения по ссылке (*), ->*, ?:, && и ||. В ис-
ходном файле обнаружен указатель-элемент с какой-либо другой опе-
рацией.

     Illegal use of pointer
Сообщение об ошибке этапа компиляции

     (недопустимое использование указателя)

     Указатели могут использоваться операциями сложения,  вычита-
ния, присваивания,  обращения по ссылке (*) и стрелки (->). В ис-
ходном файле обнаружен указатель с какой-либо другой операцией.

     Ill-formed pragma
Предупреждение этапа компиляции

     (неправильно оформленная директива pragma)

     Директива pragma не соответствует ни одной из ожидаемых ком-
пилятором директив этого рода.

     Implicit conversion of тип_1 to тип_2 not allowed
Сообщение об ошибке этапа компиляции

     (неявное преобразование типа_1 к типу_2 не допускается)

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

     Imported reference from a VIRDEF to идентификатор
Сообщение об ошибке утилиты TLINK

     (импортируемая ссылка на идентификатор из VIRDEF)

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

     Improper use of a typedef идентификатор
Сообщение об ошибке этапа компиляции

     (неправильное использования typedef идентификатор)

     В исходном файле имя идентификатора  typedef  встретилось  в
выражении на месте переменной. Проверьте объявление этого имени и
возможные опечатки.

     имя_файла(номер_строки): Incompatible attribute
Фатальная ошибка утилиты TLINK

     (несовместимый атрибут)

     Компоновщик TLINK обнаружил в операторе CODE или DATA несов-
местимый атрибут сегмента.  Например, PRELOAD и LOADONCALL однов-
ременно не могут быть атрибутами одного и того же сегмента.

     Incompatible type conversion
Сообщение об ошибке этапа компиляции

     (Несовместимое преобразование типа)

     Требуемое приведение типа невозможно.

     Incorrect command-line argument: XXX
Сообщение о фатальной ошибке утилиты MAKE

     (Неверный аргумент в командной строке: ХХХ)

     Данная ошибка появляется,  если обслуживающая программа МAKE
выполняется с неверным аргументом в командной строке.

     Incorrect command-line option: параметр
Сообщение об ошибке этапа компиляции

     (Неправильный параметр командной строки: параметр)

     Компилятор не  распознает  параметр командной строки как до-
пустимый параметр.

     Incorrect configuration file option: параметр
Сообщение об ошибке этапа компиляции

     (Неправильный параметр файла конфигурации: параметр)

     Компилятор не распознает параметр файла конфигурации как до-
пустимый параметр. Проверьте наличие предшествующего дефиса (-).

     Incorrect number format
Сообщение об ошибке этапа компиляции

     (Неправильный формат числа)

     Компилятор обнаружил  в  шестнадцатиричном  числе десятичную
точку.

     Incorrect use of default
Сообщение об ошибке этапа компиляции

     (Неправильное использование слова default)

     Компилятор не нашел после ключевого слова default двоеточия.

     Initializing enumeration type with тип
Предупреждение этапа компиляции

     (инициализация перечислимого типа указанным типом)

     Вы пытаетесь инициализировать переменную enum  другим типом.
Например:

     enum count { zero, one, two  } x = 2;

что приведет к данному предупреждению, поскольку 2 имеет тип int,
а не enum count. При присваивании или инициализации типов enum на
практике вместо литерального целочисленного значения при програм-
мировании лучше использовать идентификатор enum.

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

     Inline assembly not allowed in inline and template function
Сообщение об ошибке этапа компиляции

     (встроенное ассемблирование во встраиваемой функции и  функ-
     ции-шаблоне запрещено)

     Компилятор не  может  обрабатывать операторы встроенного ас-
семблирования внутри встраиваемых (inline) функций С++ или шабло-
нов. Ассемблерные  операторы можно оформить в макрокоманду,  либо
вы можете убрать класс памяти inline, или можно убрать встроенные
ассемблерные коды.

     Int and string types compared
Сообщение об ошибке утилиты MAKE

     (сравниваются строковый и целый типы)

     В выражении !if или !elseif вы пытаетесь  сравнить  целочис-
ленный операнд со строковым.

     Internal linker error код_ошибки
Фатальная ошибка утилиты TLINK

     (внутренняя ошибка компоновщика)

     Ошибка во внутренней логике TLINK.  На практике такая ошибка
возникать не должна,  но приведена здесь для полноты в случае ге-
нерации общей ошибки.  Если ошибка сохраняется,  запишите код ош-
ибки и свяжитесь с Borland.

     Invalid combination of opcode and operands
Сообщение об ошибке этапа компиляции

     (Неверная комбинация кода операции и операндов)

     Ассемблерный код операции не принимает данную комбинацию опе-
рандов. Возможные причины:

     - Слишком  много  или мало операндов для данного кода опера-
       ции, например INC AX,BX или MOV AX.

     - Число операндов верное,  но их типы не соответствуют  коду
       операции, например DEC 1, MOV AX,CL или MOV 1,AX.

     Invalid entry at xxxxh
Предупреждение утилиты TLINK

     (недопустимая запись по адресу xxxxh)

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

     Invalid entry point offset
Сообщение об ошибке утилиты TLINK

     Данное сообщение  выводится  только при компоновке модулей с
32-битовыми записями.  Это означает, что смещение начальной точки
входы программы превышает предел DOS в 32К.

     Invalid indirection
Сообщение об ошибке этапа компиляции

     (Недопустимое обращение по ссылке)

     Операция обращения по ссылке (*) требует в качестве операнда
непустого (не void) указателя.

     Invalid limit specified for code segment packing
Фатальная ошибка утилиты TLINK

     (для упаковки сегмента кода задано недопустимое ограничение)

     Данная ошибка происходит,  если вы использовали  параметр /P
или команду  интегрированной  среды  OptionsіLinkerі...Pack  code
segments и задаете предельное значение размера,  выходящее за до-
пустимый диапазон. Чтобы значение было допустимым, оно должно ле-
жать в пределах от 1 до 65536 байт (по умолчанию 8192).

     Invalid macro argument separator
Сообщение об ошибке этапа компиляции

     (Недопустимый разделитель аргументов макрокоманды)

     В определении макрокоманды аргументы должны разделяться  за-
пятыми. Компилятор встретил после последнего имени аргумента дру-
гой символ разделителя.

     Invalid page size value igored
Предупреждение утилиты TLIB

     (недопустимое значение размера страницы игнорируется)

     Задано недопустимое значение размера страницы.  Размер стра-
ницы должен  быть  степенью числа 2 и не может быть меньше 16 или
больше 32768.

     Invalid pointer addition
Сообщение об ошибке этапа компиляции

     (Недопустимое сложение указателей)

     В исходном  файле встретилась попытка сложения двух указате-
лей.

     Invalid register combination (e.g. [BP+BX])
Сообщение об ошибке этапа компиляции

     (Неверная комбинация регистров (например, [BP+BX]))

     Допустимыми комбинациями  индексных регистров являются [BX],
[BP],  [SI],  [DI],  [BX+SI],  [BX+DI], [BP+SI] и [BP+DI]. Другие
комбинации   индексных   регистров  (например,  [AX],  [BP+BX]  и
[SI+DX]) недопустимы.

     Локальные переменные (переменные, объявленные в процедурах и
функциях)  обычно выделяются в стеке и доступны через регистр BP.
Ассемблер автоматически прибавляет [BP] при ссылках к таким пере-
менным, поэтому даже хотя конструкция типа Local[BX] (где Local -
это локальная переменная) кажется верной,  это не так,  поскольку
последний операнд на самом деле станет равным Local[BP+ BX].

     Invalid segment definition in module модуль
Фатальная ошибка утилиты TLINK

     (недопустимое определение сегмента в указанном модуле)

     Компилятором создан неверный объектный файл. Если это проис-
ходит в файле, созданном Borland C++, перекомпилируйте файл. Если
ошибка остается, свяжитесь с Borland.

     Invalid size specified for segment aligment
Сообщение об ошибке утилиты TLINK

     (для выравнивания сегментов задан недопустимый размер)

     Данная ошибка возникает, если  в команде  OptionsіLinker...і
Segment alignment (или в параметре /A)  задано недопустимое  зна-
чение. Указанное значение должно быть целочисленным произведением
двойки и не превышать 64К.  Обычно используются значения  16  или
512. Данная ошибка возникает при компоновке для Windows.

     Invalid template argument list
Сообщение об ошибке этапа компиляции

     (недопустимый список аргументов шаблона)

     В описании шаблона за ключевым словом template должен следо-
вать список формальных аргументов,  заключенных в угловые  скобки
(<>). Найден недопустимый список аргументов шаблона.

     Invalid template qualified name шаблон::имя
Сообщение об ошибке этапа компиляции

     (недопустимое уточненное имя шаблона)

     При определении элемента шаблона класса фактические аргумен-
ты имени   шаблона класса,  которые  указываются в левом операнде
операции ::,  должны соответствовать формальным аргументам класса
шаблона, например:

     template  class X
     {
        VOID F();
     };

     template  void X::f() {}

     Следующее недопустимо:

     template  void X::f() {}

     Invalid use of dot
Сообщение об ошибке этапа компиляции

     (Недопустимое использование точки)

     За операцией  "точка"  (.)  должен непосредственно следовать
операнд.

     Invalid use of template шаблон
Сообщение об ошибке этапа компиляции

     (недопустимое использование шаблона)

     Вне определения  шаблона  не допускается использование имени
шаблона класса без указания фактических параметров.  Например, вы
можете использовать vector, но не vector.

     Irreducible expression tree
Фатальная ошибка этапа компиляции

     (неупрощаемое дерево выражения)

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

     базовый_класс is indirect virtual base class of класс
Сообщение об ошибке этапа компиляции

     (базовый_класс  является  недопустимым  виртуальным  базовым
     классом для класса класс)

     Невозможно создать указатель на элемент С++ заданного вирту-
ального класса.  Была  попытка  создания такого указателя (непос-
редственно или через приведение).  См.  описание параметра -Vv  в
"Руководстве пользователя".

     идентификатор is assigned a value that is never user
Предупреждение этапа компиляции

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

     идентификатор is declared as both external and static
Предупреждение этапа компиляции

     (идентификатор объявлен сразу как external и static)

     Данный идентификатор появился в объявлении,  неявно или явно
обозначающем его как global или external,  и кроме того, в объяв-
лении,  обозначающем его как static. Идентификатор в таком случае
считается static.  Проверьте все описания данного идентификатора.

     идентификатор is duplicated in module модуль
Предупреждение или ошибка утилиты TLINK

     (идентификатор дублируется в модуле модуль)

     Имеется конфликт  между  двумя  идентификаторами (общими или
общедоступными), определенными в одном модуле. Если оба они обна-
ружены в файле .OBJ,  то возникает ошибка. Если TLINK находит та-
кие идентификаторы в библиотеке,  то выводится предупреждение.  В
последнем случае компоновщик использует первое определение.

     конструктор is not a base class of класс
Сообщение об ошибке этапа компиляции

     (конструктор не относится к базовому классу класс)

     Конструктор класса  С++  класс  пытается вызвать конструктор
базового класса конструктор,  либо вы  пытаетесь  изменить  права
доступа  класс::конструктор.  Конструктор не относится к базовому
классу класс. Проверьте объявления.

     идентификатор is not a member of struct
Сообщение об ошибке этапа компиляции

     (идентификатор не является элементом структуры)

     Вы пытаетесь сослаться  на  идентификатор,  как  на  элемент
структуры,  в  то  время  как он не является элементом структуры.
Проверьте объявления.

     идентификатор is  not  a non-static data member and can't be
     initialized here
Сообщение об ошибке этапа компиляции

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

     идентификатор is not a parameter
Сообщение об ошибке этапа компиляции

     (идентификатор не является параметром)

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

     идентификатор is not a public base class of тип_класса
Сообщение об ошибке этапа компиляции

     Правый операнд операции .*, ->* или ::operator не был указа-
телем на  элемент  класса,  который  идентичен (или неоднозначен)
доступному базовому классу типа операнда в левой части.

     элемент is not accessible
Сообщение об ошибке этапа компиляции

     (элемент недоступен)

     Вы пытаетесь сослаться на элемент класса С++,  который имеет
атрибут доступа private или  protected  и  недоступен  из  данной
функции.  Это иногда случается при попытке вызова доступной пере-
определенной функции-элемента (или конструктора),  когда заданные
при  этом  аргументы совпадают с аргументами недоступной функции.
Перед проверкой доступности всегда выполняется проверка  разреше-
ния переопределения.  Если проблема именно в этом,  то для выбора
желаемой доступной функции попытайтесь явно выполнить  приведение
типа для одного или более параметров.

                            - L -

     Last parameter of операция must have type int
Сообщение об ошибке этапа компиляции

     (последний параметр операции должен иметь тип int)

     При описании постфиксных операций operator++  или operator--
последний параметр должен описываться с типом int.

     library contains  COMDEF  recors  -  extended dictionary not
     created
Предупреждение утилиты TLIB

     (библиотека содержит  записи COMDEF - расширенный словарь не
     создается)

     Объектная запись,  добавляемая к  словарю,  содержит  запись
COMDEF. Это несовместимо с параметром расширенного словаря.

     library too large, please restart with /P размер
Сообщение об ошибке утилиты TLIB

     (библиотека слишком велика,  перезапустите с  параметром  /P
     размер)

     Создаваемая библиотека  не  может  быть  построена с текущим
размером страницы библиотеки.  Вы можете задать размер библиотеки
с параметром командной строки /P, описанном в Главе 3 "Турбо биб-
лиотекарь TLIB"  "Руководства  по  утилитам  и   инструментальным
средствам". В  интегрированной  среде  размер страницы библиотеки
можно установить с помощью диалогового окна OptionsіLibraruian.

     library too large, please restart with page size размер
Сообщение об ошибке утилиты TLIB

     (библиотека слишком велика, перезапустите с размером страни-
     цы размер)

     Создаваемая библиотека  не  может  быть  построена с текущим
размером страницы библиотеки.  Вы можете задать размер библиотеки
с параметром командной строки /P, описанном в Главе 3 "Турбо биб-
лиотекарь TLIB"  "Руководства  по  утилитам  и   инструментальным
средствам". В  интегрированной  среде  размер страницы библиотеки
можно установить с помощью диалогового окна OptionsіLibraruian.

     Limit of 254 segments for new executable file exceeded
Фатальная ошибка утилиты TLINK

     (для нового  выполняемого  файла превышено ограничение в 254
     сегмента)

     Новый формат выполняемого файла допускает только 254 сегмен-
та. Проверьте карту памяти. Обычно проблему вызывает одна из двух
ситуаций. Если в прикладной  программе используется модель LARGE,
размер упаковки сегмента кода может быть так мал, что присутству-
ет слишком много сегментов кода.  Здесь может  помочь  увеличение
размера упаковки сегмента с помощью параметра /P.

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

     Linkage specification not allowed
Сообщение об ошибке этапа компиляции

     (cпецификация компоновки не разрешается)

     Спецификации типа компоновки, например extern "C", допустимы
только  на уровне файла.  Перенесите данное объявление функции на
уровень файла.

     Linker stack overflow
Фатальная ошибка утилиты TLINK

     (переполнение стека компоновщика)

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

     Lvalue required
Сообщение об ошибке этапа компиляции

     (требуется именующее значение)

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

                            - M -

     Machine not in database (run DPMIINST)
Фатальная ошибка сервера DPMI:

     (компьютер не занесен в базу данных, запустите DPMIINST)

     Сервер интерфейса DOS защищенного  режима  (DPMI)  выполняет
поиск в ядре базы данных и не может найти информацию о вашем ком-
пьютере. Запустите DPMIINST (если  потребуется,  несколько  раз),
чтобы обновить  базу данных.  DPMIINST также генерирует файл .DB,
который вы можете послать фирме Borland. См. также сообщение: A20
line already enabled, so test is meaningless.

     Macro argument syntax error
Сообщение об ошибке этапа компиляции

     (синтаксическая ошибка в аргументе макрокоманды)

     Аргумент в  определении макрокоманды должен являться иденти-
фикатором. Компилятор встретил некоторый символ, который не может
являться частью идентификатора, там, где ожидался аргумент.

     Macro expansion too long
Сообщение об ошибке этапа компиляции

     (слишком длинное макрорасширение)

     Размер макрорасширения не может превышать 4096 символов.

     Macro expansion too long
Сообщение об ошибке утилиты MAKE

     (макрорасширение слишком велико)

     Макроопределение не может расширяться  более,  чем  на  4096
знаков.  Такая ошибка часто появляется, если осуществляется регу-
лярное  макрорасширение.  Макроопределение  не  может   правильно
расширять самое себя.

     Macro substitute text строка is too long
Фатальная ошибка утилиты MAKE

     (строка текста макроподстановки слишком велика)

      Текстовая строка макроподстановки переполняет внутренний бу-
фер MAKE размером 512 байт.

     Macro replace text строка is too long
Фатальная ошибка утилиты MAKE

     (строка текста замены слишком велика)

     Текстовая строка замены переполняет  внутренний  буфер  MAKE
размером 512 байт.

     main must have a return type of int
Сообщение об ошибке этапа компиляции

     (функция main должна иметь тип возврата int)

     К функции main предъявляются специальные требования. Одно из
них состоит в том,  что она не может иметь тип возврата иной, не-
жели int.

     Matching base  class  function  for  функция  has  different
     dispatch number
Сообщение об ошибке этапа компиляции

     (соответствующая функция базового класса для  функции  имеет
     другой номер диспетчеризации)

     Если в производном классе  описывается  виртуальная  динами-
ческая функция (DDVT), то соответствующая функция базового класса
должна иметь тот же  номер  диспетчеризации,  что  и  производная
функция.

     Matching base class function for функция is not dynamic
Сообщение об ошибке этапа компиляции

     (соответствующая функция  базового класса для функции не яв-
     ляется динамической)

     Если в производном классе  описывается  виртуальная  динами-
ческая функция (DDVT), то соответствующая функция базового класса
должна также быть динамической.

     Maximum precision used for member pointer type тип
Предупреждение этапа компиляции

     (для указателя-элемента  типа  тип используется максимальная
     точность)

     Если при  описании  типа указателя-элемента его класс описан
не полностью,  и использован параметр -Vmd, компилятор должен ис-
пользовать наиболее  общее (и наименее эффективное) представление
для данного типа указателя-элемента. Это может привести не только
к генерации  менее  эффективного кода (и к получению большего чем
нужно элемента-указателя),  но привести также к проблемам с  раз-
дельной компиляцией. См. описание параметра -Vm в Главе 4 "Компи-
лятор, работающий в режиме командной строки" в "Руководстве поль-
зователя".

     Member function must be called or its address taked
Сообщение об ошибке этапа компиляции

     (должна вызываться функция-элемент или получаться ее адрес)

     Когда в  выражении  используется  функция-элемент,  то   она
должна либо  вызываться,  либо  нужно получать ее адрес с помощью
операции &.  В этом случае функция-элемент используется  в  недо-
пустимом контексте.

     Member identifier expected
Сообщение об ошибке этапа компиляции

     (требуется идентификатор элемента)

     Здесь предполагается имя элемента или структуры С++,  но оно
не найдено.  Правая  часть  операции  точки (.)  или стрелки (->)
должна быть именем элемента структуры или  класса,  указанного  в
левой части операции.

     Member is ambiguous: элемент_1 and элемент_2
Сообщение об ошибке этапа компиляции

     (неоднозначность элементов)

     Вы должны уточнить ссылку на элемент с помощью соответствую-
щего базового класса.  В классе С++ класс элемент  элемент  может
встречаться более чем в одном базовом классе, и не было уточнено,
что это означает. Это применяется только при множественном насле-
довании, когда имя элемента в каждом базовом классе не "скрывает-
ся" элементом с тем же именем в производном  классе  по  тому  же
маршруту.  Правила языка С++ требуют, чтобы эта проверка не неод-
нозначность  выполнялась  перед  проверкой   полномочий   доступа
(private,  protected, public). Таким образом, можно получить дан-
ное сообщение, хотя доступен только один элемент (или ни одного).

     Member элемент cannot be used without an object
Сообщение об ошибке этапа компиляции

     (элемент элемент нельзя использовать без объекта)

     Это означает,  что пользователь записал класс::элемент,  где
элемент - это обычный (не статический) элемент, и класс, связыва-
емый с данным элементом, отсутствует. Например, допустима запись:
объект.класс::элемент, но не класс::элемент.

     Member элемент has the same name as its class
Сообщение об ошибке этапа компиляции:

     (элемент имеет то же имя, что и его класс)

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

     Member элемент is initialized more than once
Сообщение об ошибке этапа компиляции

     (элемент инициализируется более одного раза)

     В конструкторе класса С++,  списке инициализации,  следующем
за заголовком  конструктора,  одно  и  то же имя элемента указано
несколько раз.

     Member pointer requires on right side of .* or ->*
Сообщение об ошибке этапа компиляции

     (в правой части .* или ->* требуется указатель элемента)

     Правая часть  операций С++ .* или ->* должна описываться как
указатель на элемент класса,  задаваемый левой частью операции. В
данном случае правая часть не является указателем элемента.

     Memory full listing truncated!
Предупреждение утилиты TLIB

     (полный листинг памяти усечен)

     Библиотекарь исчерпал память  при  создании  файла  листинга
библиотеки. Файл будет создан, но он будет неполным.

     Memory reference expected
Сообщение об ошибке этапа компиляции

     (требуется ссылка на память)

     Ассемблерный операнд  не является ссылкой на память, которая
требуется в данном месте.  Скорее всего,  вы забыли заключить ин-
дексный регистр в квадратные скобки, например, MOV AX,BX+SI вмес-
то MOV AX,[BX+SI].

     Misplaced break
Сообщение об ошибке этапа компиляции

     (неправильно расположен break)

     Компилятор обнаружил оператор break вне конструкции операто-
ра switch или цикла.

     Misplaced continue
Сообщение об ошибке этапа компиляции

     (неправильно расположен оператор continue)

     Компилятор обнаружил  оператор continue вне конструкции цик-
ла.

     Misplaced decimal point
Сообщение об ошибке этапа компиляции

     (неправильно расположенная десятичная точка)

     Компилятор обнаружил  десятичную  точку в показателе степени
константы с плавающей точкой.

     Misplaced elif directive
Сообщение об ошибке этапа компиляции

     (неправильно расположенная директива elif)

     Компилятор обнаружил  директиву #elif без соответствующей ей
директивы #if, #ifdef или #ifndef.

     Misplaced elif statement
Сообщение об ошибке утилиты MAKE

     (Оператор elif находится не на месте)

     Директива !elif  обнаружена без соответствующей ей директивы
!if.

     Misplaced else
Сообщение об ошибке этапа компиляции

     (Неправильно расположен оператор else)

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

     Misplaced else directive
Сообщение об ошибке этапа компиляции

     (Неправильно расположенная директива else)

     Компилятор встретил директиву #else без  соответствующей  ей
директивы #if, #ifdef или #ifndef.

     Misplaced else statement
Сообщение об ошибке утилиты MAKE

     (Неверно помещен оператор else)

     Обнаружена директива !else без соответствующей  ей директивы
!if.

     Misplaced endif directive
Сообщение об ошибке этапа компиляции

     (Неправильно расположенная директива endif)

     Компилятор встретил директиву #endif без  соответствующей ей
директивы #if, #ifdef или #ifndef.

     Misplaced endif statement
Сообщение об ошибке утилиты MAKE

     (Неверно помещен оператор endif)

     Была обнаружена  директива !endif без соответствующей ей ди-
рективы !if.

     имя_файла(номер_строки): Missing internal name
Фатальная ошибка утилиты TLINK

     (пропущено внутреннее имя)

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

     <внутреннее_имя>=<имя_модуля>.<порядковое_значение>

     Mixing pointers to signed and unsigned char
Предупреждение этапа компиляции

     (Смешанное использование указателей  на  signed  и  unsigned
     char)

     Вы преобразовали  указатель  на char в указатель на unsigned
char,  либо наоборот без явного приведения типов. (Строго говоря,
это допустимо,  но на процессоре 8086 часто приводит к  ошибочным
результатам).

     Multiple base classes require explicit class names
Сообщение об ошибке этапа компиляции

     (Множественные базовые классы требуют явных имен классов)

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

     Multiple declaration for идентификатор
Сообщение об ошибке этапа компиляции

     (Множественное объявление идентификатора)

     Идентификатор объявлен более одного раза,  что  недопустимо.
Это  может произойти в случае противоречивых объявлений, например
int a; double a;, в случае, когда функция объявлена двумя разными
способами, либо при повторении некоторого объявления, не являюще-
гося функцией extern или простой переменной.

     идентификатор must be a member function
Сообщение об ошибке этапа компиляции:

     (идентификатор должен быть функцией-элементом)

     Большинство функций-операций  С++  может являться элементами
классов или обычными функциями,  не входящими в класс, однако не-
которые  из  них  обязательно должны быть элементами класса.  Это
функции operator =,  operator ->, operator() и преобразования ти-
пов. Данная функция не является функцией-элементом, но должна яв-
ляться таковой.

     идентификатор must be a member function or have  a parameter
     of class type
Сообщение об ошибке этапа компиляции

     (идентификатор должен  быть функцией-элементом или иметь ар-
     гумент типа класса)

     Большинство функций-операций  С++  должно  иметь неявный или
явный аргумент типа класса. Данная функция-операция была объявле-
на вне класса и не имеет явного аргумента типа класса.

     идентификатор must be a previously defined class or struct
Сообщение об ошибке этапа компиляции

     (идентификатор должен  быть  ранее  объявленным  классом или
     структурой)

     Вы пытаетесь объявить идентификатор как базовый класс, тогда
как он либо не является классом,  либо не был еще полностью опре-
делен. Исправьте имя или реорганизуйте объявления.

     идентификатор must be a previoustly defined enumeration tag
Сообщение об ошибке этапа компиляции

     (идентификатор должен быть ранее определенным тегом (призна-
     ком) перечислимого типа)

     Данное объявление  пытается обратиться к идентификатору, как
к тегу типа enum, тогда как он не был объявлен в качестве таково-
го. Исправьте имя или реорганизуйте объявления.

     функция must be declared with no parameters
Сообщение об ошибке этапа компиляции

     (функция должна описываться без аргументов)

     Данная функция-операция С++ была неправильно объявлена с ар-
гументами.

     операция must be declared with one or no parameters
Сообщение об ошибке этапа компиляции

     (операция должна  быть  объявлена с одним параметром или без
     них)

     Когда operator++  или  operator--  описывается,  как   функ-
ция-элемент, она  должна  описываться,  как не имеющая параметров
(например, префиксная версия операции) или с одним параметром ти-
па int (постфиксная версия).

     операция must be declared with one or two parameters
Сообщение об ошибке этапа компиляции

     (операция должна быть объявлена с одним или двумя аргумента-
     ми)

     Когда operator++  или  operator--  описывается,  как   функ-
ция, не являющаяся элементом,  она должна описываться с одним па-
раметром (например,  префиксная  версия  операции)  или  с  двумя
параметрами (постфиксная версия).

     функция must be declared with one parameter
Сообщение об ошибке этапа компиляции

     (функция должна описываться с одним аргументом)

     Данная функция-операция С++ была неправильно объявлена с бо-
лее чем одним аргументом.

     Must take address of a memory location
Сообщение об ошибке этапа компиляции

     (Необходимо получение адреса ячейки памяти)

     Ваш исходный  файл использовал операцию получения адреса (&)
в выражении,  которое не может выполнять адресацию памяти, напри-
мер, в случае регистровой переменной.

                            - N -

     Need an identifier to declare
Сообщение об ошибке этапа компиляции

     (Для объявления требуется идентификатор)

     В данном  контексте  для  завершения  объявления  требовался
идентификатор.  Причиной этого сообщения мог  стать  typedef  без
имени или лишняя точка с запятой на уровне файла. В С++ это могло
быть имя класса,  неправильно использованное в  качестве  другого
рода идентификатора.

     'new' and 'delete' not supported
Сообщение об ошибке отладчика интегрированной среды

     ('new' и 'delete' не поддерживаются)

     При вычислении выражения интегрированным отладчиком операции
new и delete не поддерживаются.

     New executable header overflowed 64K
Фатальная ошибка утилиты TLINK

     (новый заголовок выполняемого файла превышает 64К)

     Размер всех  компонентов нового заголовка выполняемого файла
прикладной программы Windows превышает 64К. Обычно это вызывается
слишком большой таблицей RESIDENTNAME. Если ваша прикладная прог-
рамма экспортирует много функций, попробуйте экспортировать боль-
шее число функций по порядковому значению, а не по имени.

     No : following ?
Сообщение об ошибке этапа компиляции

     (Нет : после ?)

     Операции вопросительный знак (?) и двоеточие  (:)  не  соот-
ветствуют  друг другу в данном выражении.  Возможно,  отсутствует
двоеточие, либо неправильно вложена или отсутствует круглая скоб-
ка.

     No automatic data segment
Предупреждение TLINK

     (нет локального динамического сегмента данных)

     Не найдена группа с именем DGROUP.  Поскольку DGROUP опреде-
ляют файлы   инициализации   Borland  C++,  данная  ошибка  будет
возникать, если вы не выполняете компоновку с файлом  инициализа-
ции, и  ваша  программа не определяет DGROUP.  Windows использует
DGRUOP для того,  чтобы найти локальный сегмент  данных.  Если  в
файле определения  модуля  не  задано DATA NONE,  группа DGROUP в
прикладных программах Windows (но не в DLL)  является  обязатель-
ной.

     No base class to initialize
Сообщение об ошибке этапа компиляции

     (отсутствует базовый класс для инициализации)

     Конструктор класса С++ пытается неявно  вызвать  конструктор
базового  класса,  тогда  как этот класс был объявлен без базовых
классов. Проверьте объявления.

     No closing quote
Сообщение об ошибке утилиты MAKE

     (нет закрывающей кавычки)

     В строковом выражении !if или !elif нет закрывающей кавычки.

     No declaration for function функция
Предупреждение этапа компиляции

     (отсутствует объявление функции)

     Это сообщение  выдается  при  попытке  вызова функции без ее
предварительного объявления. В Си можно объявить функцию без про-
тотипа,  например "int func();".  В С++ каждое объявление функции
является также ее  прототипом;  приведенный  пример  эквивалентен
"int  func(void);".  Объявление может быть записано как в класси-
ческом, так и в современном (с прототипом) стиле.

     No file name ending
Сообщение об ошибке утилиты MAKE

     (не закончено имя файла)

     Имя файла в операторе включения !include не содержит  закры-
вающей кавычки или угловой скобки.

     No file names given
Сообщение об ошибке этапа компиляции

     (ре заданы имена файлов)

     Командная строка  компилятора  Borland  C++ режима командной
строки (BCC) не содержит имен файлов.  Вы обязаны задать имя  ис-
ходного файла.

     No macro before =
Сообщение об ошибке утилиты MAKE

     (перед = нет макрокоманды)

     Перед тем,  как присваивать ему значение,  вы должны опреде-
лить имя макрокоманды.

     No match found for wildcard выражение
Сообщение об ошибке утилиты MAKE

     (соответствия трафарету выражение не найдено)

     Нет файлов, соответствующих трафарету выражение, которые мо-
жет найти MAKE. Например, если вы запишете:

     prog.exe: *.obj

MAKE будет выводить сообщение об ошибке,  если файлов с указанным
расширением (OBJ) в текущем каталоге нет.

     No module definition file specified: using defaults
Предупреждение утилиты TLINK

     (не задан файл определения модуля:  используются значения по
     умолчанию)

     Компоновщик TLINK  вызывался  с одним из параметров Windows,
но файл определения модуля не задан.  О файле определения модулей
см. выше в одной из глав данного руководства.

     No program starting address defined
Предупреждение утилиты TLINK

     (не задан стартовый адрес программы)

     Это предупреждение означает,  что ни в одном модуле не задан
начальный стартовый адрес программы.  Обычно это происходит из-за
того, что вы забываете выполнить компоновку с модулем инициализа-
ции C0x.OBJ.  При компоновке с динамически компонуемыми библиоте-
ками (DLL.) Windows такое предупреждение выводиться не должно.

     No stack
Предупреждение утилиты TLINK

     (нет стека)

     Такое предупреждение  выводится,  если ни в одном из модулей
или объектных файлов и библиотек,  включаемых в программу, не оп-
ределяется сегмент  стека.  Для  модели памяти TINY в Borland C++
(или для любой программы,  которая будет преобразовываться в фор-
мат .COM)  это  нормальное сообщение.  Для других программ (кроме
DLL) это указывает на ошибку.

     Если данное сообщение генерируется в программе Borland C++ с
моделью памяти,  отличной от TINY,  убедитесь, что вы используете
корректные объектные файлы инициализации C0x.

     No stub fox fixup at сегмент:xxxxh in module модуль
Предупреждение утилиты TLINK

     (нет "заглушки" для корректировок в сегменте сегмент:xxxxh в
     модуле модуль)

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

     No terminator specified for in-line file operator
Фатальная ошибка утилиты MAKE

     (для встроенной файловой операции не задано завершения)

     Формирующий файл содержит операции командной строки  &&  или
<<, начинающие встроенный файл, но файл не завершается.

     No type information
Сообщение об ошибке этапа компиляции

     (нет информации о типе)

     Отладчик не имеет информации о типе данной  переменной.  Мо-
дуль  был  скомпилирован  при выключенном отладчике,  либо другим
компилятором или Ассемблером.  (Данное сообщение выводится только
отладчиком интегрированной среды.)

     Non-const function функция called for const object
Предупреждение этапа компиляции

     (функция, не имеющая  типа  константы,  вызвана  для  объек-
     та-константы)

     Функция-элемент, не имеющая типа константы (const),  вызвана
для объекта типа константы.  Это ошибка,  но выдается только пре-
дупреждение, и программа получает шанс заработать.

     Nonportable pointer comparison
Предупреждение этапа компиляции

     (немобильное сравнение указателей)

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

     Nonportable pointer conversion
Сообщение об ошибке этапа компиляции

     (немобильное преобразование указателя)

     Ненулевое целочисленное  значение  используется в контексте,
где ожидается указатель или целое значение;  размеры указателя  и
целого  значения  одинаковы.  Если вы действительно намереваетесь
использовать данное преобразование,  следует выполнить явное при-
ведение типов.

     Nonportable pointer conversion
Предупреждение этапа компиляции

     (немобильное преобразование указателя)

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

     Nontype template argument must be of scalar type
Сообщение об ошибке этапа компиляции

     (нетипизованный аргумент шаблона должен иметь скалярный тип)

     Нетипизованный формальный аргумент шаблона должен иметь ска-
лярный тип. Он не может быть целым типом,  перечислением или ука-
зателем.

     Non-virtual function функция declared pure
Сообщение об ошибке этапа компиляции

     (невиртуальная функция объявлена "чистой")

     "Чистыми" (pure) могут объявляться только виртуальные  функ-
ции, поскольку производные классы должны иметь возможность их пе-
реопределения.

     Non-volatile function called for volatile object
Предупреждение этапа компиляции:

     (для объекта типа  volatile  вызвана  функция,  отличная  от
     volatile)

     В С++  функция-элемент  класса была вызвана для объекта типа
volatile,  а сама функция после заголовка не была  объявлена  как
"volatile". Для  объекта  volatile  могут  использоваться  только
функции volatile.

     Not a valid expression format type
Сообщение об ошибке этапа компиляции

     (недопустимый тип формата выражения)

     Недопустимый спецификатор формата после выражения в окне вы-
числений или наблюдения.  Допустимым спецификатором формата явля-
ется необязательное число повторений,  за которым следует  символ
формата (c,  d, f[n], h, x, m, p, r или s).

           Примачение: Данное сообщение выводится только отладчи-
      ком интегрированной среды.

     Not an allowed type
Сообщение об ошибке этапа компиляции

     (неразрешенный тип)

     В вашем  исходном файле содержится объявление некоторого не-
разрешенного типа;  например,  функции,  возвращающую функцию или
массив.

     Not enough memory
Фатальная ошибка утилиты MAKE

     (недостаточно памяти)

     Данная ошибка появляется, если вся рабочая память исчерпана.
Вы должны попытаться осуществить то же на вычислительной машине с
большой памятью.  Если на вашей вычислительной машине имеется уже
640К, то упростите исходный файл.

     Not enough memory
Фатальная ошибка утилиты TLINK

     (недостаточно памяти)

     Для работы   компоновщика  не  хватает  памяти.  Попытайтесь
уменьшить  объем моделируемого в оперативной памяти диска или ак-
тивного дискового  буфера.  Затем снова запустите TLINK.  Если вы
работаете в реальном  режиме,  попробуйте  использовать  параметр
MAKE -S, удалив резидентные задачи и сетевые драйверы. При работе
в защищенном режиме MAKE попробуйте уменьшить размер виртуального
диска или активного дискового буфера.

     Not enough memory for command line buffer
Сообщение об ошибке утилиты TLIB

     (не хватает памяти для буфера командной строки)

     Данная ошибка происходит,  когда TLIB исчерпывает  доступную
память.

     not enough memory for PM init
Фатальная ошибка сервера DPMI

     (не хватает памяти для инициализации PM)

     Для инициализации защищенного режима серверу DPMI не хватает
доступной расширенной памяти.

     модуль not found in library
Предупреждение утилиты TLIB

     (не найден модуль в библиотеке)

     При попытке выполнить для библиотеки операцию  '-'  или  '*'
указанный объект в библиотеке отсутствует.

     Null pointer assignment
Сообщение об ошибке этапа выполнения

     (присваивание пустому указателю)

     При выходе  из  программы  с  моделью  памяти  small (малая)
или medium (средняя) выполняется проверка, чтобы определить, были
ли изменены значения двух первых байт в сегменте данных  програм-
мы. Эти байты никогда не должны изменяться работающей программой.
Если же они были изменены,  то выдается сообщение  "Null  pointer
asignment",  говорящее  о том,  что (вероятно) некоторое значение
было записано в неинициализированный указатель.  Во  всех  прочих
отношениях  программа  может  работать  правильно.  Однако данная
ошибка является серьезной ошибкой,  и ей следует заняться  немед-
ленно.  Если  вы не сможете исправить неинициализированный указа-
тель,  это  приведет  к  непредсказуемому  поведению   компьютера
(вплоть  до  его  "блокирования"  в  случае  моделей памяти large
(большая),  compact (компактная) и huge (сверхбольшая)). Для отс-
леживания  таких  ошибок  может служить интегрированный отладчик,
входящий в диалоговую среду разработки.

     Numeric constant too large
Сообщение об ошибке этапа компиляции

     (числовая константа слишком велика)

     Строковые и символьные управляющие последовательности больше
шестнадцатиричного \xFF или восьмеричного \377 сгенерированы быть
не могут.  Двухбайтовые символьные константы могут задаваться при
помощи второй обратной косой черты.  Например, \x0D\x0A представ-
ляет собой двухбайтовую константу.  Числовой литерал после управ-
ляющей последовательности следует разбить:

     printf("\x0D" "12345");

     Тем самым будет выведен возврат каретки и затем 12345.

                            - O -

     object module имя_файла is invalid
Сообщение об ошибке утилиты TLIB

     (недопустимый объектный модуль)

     Библиотекарь не может распознать запись заголовка объектного
модуля, добавляемого к библиотеке,  и предполагает, что это недо-
пустимый модуль.

     Objects of type тип cannot be initialized with {}
Сообщение об ошибке этапа компиляции:

     (объект указанного типа не должен инициализироваться  с  по-
     мощью {})

     Обычные структуры Си могут инициализироваться набором значе-
ний,  заключенных в фигурные скобки. Классы С++ могут инициализи-
роваться  с помощью конструкторов (если класс имеет конструкторы,
локальных элементов, функций или базовых классов, которые являют-
ся виртуальными.

     Only < must return a pointer or a class
Сообщение об ошибке этапа компиляции

     (operator -> должна возвращать указатель или класс)

     Функция С++ операция operator-> должна  быть  объявлена  как
возвращающая класс или указатель на класс (или структуру или объ-
единение).  В любом случае это должно быть нечто  такое,  к  чему
применима операция ->.

     Operator delete must return void
Сообщение об ошибке этапа компиляции

     (Операция delete должна возвращать void)

     Переопределенная операция С++ operator delete была объявлена
иначе.

     Operator must be declared as function
Сообщение об ошибке этапа компиляции

     (операция должна описываться как функция)

     Переопределяемая операция была описана с типом,  отличным от
типа функции.

     Operator new must have an initial parameter of type size_t
Сообщение об ошибке этапа компиляции

     (операция new  должна  иметь  параметр  инициализации   типа
     size_t)

     Операция new может объявляться с произвольным  числом  пара-
метров,  но обязательно должна иметь хотя бы один параметр, в ко-
тором будет находиться размер распределяемой памяти.

     Operator new must return an object of type void *
Сообщение об ошибке этапа компиляции

     (операция new должна возвращать объект типа void *)

     Переопределенная операция С++ operator  new  была  объявлена
иначе.

     Out of memory
Фатальная ошибка этапа компиляции

     (недостаточно памяти)

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

     Out of memory
Сообщение об ошибке утилиты TLIB

     (недостаточно памяти)

     По каким-то  причинам утилита TLIB или Borland C++ исчерпали
при построении библиотеки доступную память.  Во  всех  конкретных
случаях выводятся также детальное сообщение,  а "Out of memory" -
это общая ситуация нехватки памяти в разных ситуациях. При работе
в Windows, чтобы освободить память, закройте одну или более прик-
ладных программ.

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

     Out of memory
Сообщение об ошибке утилиты TLINK

     (недостаточно памяти)

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

     out of memory creating extended dictionary
Сообщение об ошибке утилиты TLIB

     (не хватает памяти при создании расширенного словаря)

     Библиотекарь исчерпал  память при создании расширенного сло-
варя библиотеки. Библиотека будет создана, но не будет иметь рас-
ширенного словаря.

     out of memory reading LE/LIDATA record from object module
Сообщение об ошибке утилиты TLIB

     (не хватает памяти при чтении записи LE/LIDATA из объектного
     файла)

     Библиотекарь пытается  прочитать запись данных из объектного
модуля, но не может получить достаточно большой блок памяти. Если
добавляемый блок содержит большой сегмент или сегменты данных, то
возможно добавление этого модуля перед другими  модулями позволит
решить проблему.  Добавив модуль первым, вы получите дополнитель-
ную память для записи общедоступных переменных и  списка модулей,
добавляемых далее.

     Out of space allocating per module debug struct
Сообщение об ошибке утилиты TLIB

     (нет памяти при выделении структуры для модулей)

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

     Output device is full
Сообщение об ошибке утилиты TLIB

     (устройство вывода переполнено)

     Устройство вывода переполнено (обычно нет места на диске).

     Overlays generated and overlay manager included
Предупреждение утилиты TLINK

     (сгенерированы оверлеи и включен оверлейный менеджер)

     Это предупреждение  выводится,  если  оверлеи создаются,  но
идентификатор __OVRTRAP__ не определен ни в  одном  из  объектных
модулей или компонуемых библиотек. Этот идентификатор определяет-
ся стандартной оверлейной библиотекой OVERLAY.LIB.

     Overlays ignored in new executable image
Предупреждение утилиты TLINK

     (в новом выполняемом файле оверлеи игнорируются)

     Это происходит,  если  вы  пытаетесь  скомпоновать программу
Windows с параметром /o.  Выполняемая программа Windows не  может
быть оверлейной,  хотя  аналогичного эффекта можно добиться с по-
мощью сегментов кода типа DISCARDABLE.

     Overlays only  supported  in  medium,  large and huge memory
     models
Сообщение об ошибке этапа компиляции

     (оверлеи допустимы только для моделей памяти medium, large и
     huge)

     Как объяснялось  в Главе 6 "Управление памятью" "Руководства
программиста",  оверлеи допустимы только в программах с  моделями
памяти medium, large и huge).

     Overload is now unnecessary and obsolete
Предупреждение этапа компиляции

     (слово overload теперь не нужно и устарело)

     В старых  версиях  С++ для обозначения имен переопределенных
функций служило зарезервированное слово overload.  Теперь С++ ис-
пользует схему "безопасной с точки зрения типа компоновки", когда
любая функция считается переопределенной,  если не указано проти-
воположное. Использование слова overload не требуется.

     Overloadable operator expected
Сообщение об ошибке этапа компиляции

     (ожидается переопределяемая операция)

     Почти все операции С++ могут быть переопределены. Единствен-
ными исключениями являются операции выбора  поля  (.),  точка  со
звездочкой  (.*),  двойное  двоеточие  (::)  и условное выражение
(?:).  Операции препроцессора # и ## не являются операциями языка
С или С++ и потому переопределяться не могут.  Прочие знаки пунк-
туации,  не входящие в число операций, например, точка с запятой,
разумеется, также не могут быть переопределены.

        Overloaded имя_функции ambiguous in this context
Сообщение об ошибке этапа компиляции

     (имя переопределяемой функции в данном контексте неоднознач-
     но)

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

     Overloaded function resolution not supported
Сообщение об ошибке этапа компиляции

     (разрешение переопределенной функции не поддерживается)

     При вычислении выражения интегрированным отладчиком разреше-
ние переопределенных функций или операций не поддерживается, даже
для приема адреса.

           Примечание: Данное сообщение выводится только отладчи-
      ком интегрированной среды.

     Overloaded prefix  'oparator  операция'  used  as  a postfix
     operator
Предупреждение этапа компиляции

     (переопределенный префикс  'operator  операция' используется
     как постфиксная операция)

     В последней спецификации  С++  теперь  можно  переопределить
префиксную и постфиксную версию операций ++ и --. Чтобы можно бы-
ло компилировать  старый  код,  когда  переопределенной  является
только  префиксная  операция,  но  она используется в постфиксном
контексте,  Borland C++ использует префиксную операцию и  выводит
данное предупреждение.

                            - P -

     P1001 Unable to read имя_файла
Ошибка, возникающие при обработке файла описания проекта Help

     (чтение файла имя_файла невозможно)

     Файл, указанный в файле описания проекта, не читается. Ошиб-
ка возникает в ответ на ошибку DOS при чтении файла.

     P1003 Invalid path specified in Root option
Ошибка, возникающие при обработке файла описания проекта Help

     (название каталога,  указанное в параметре Root,  недопусти-
     мо)

     Указанный в  параметре ROOT каталог отсутствует.  Компиляция
продолжается,  при этом в качестве главного каталога проекта  ис-
пользуется текущий каталог.

     P1005 Path and filename exceed limit of 79 characters
Ошибка, возникающие при обработке файла описания проекта Help
     (длина полного имени файла превышает 79 символов)

    Абсолютное имя файла либо имя,  построенное в результате сое-
динения названия главного каталога проекта и относительного имени
оказалось  длиннее 79 символов - максимально возможной длине име-
ни,  принятой в DOS. Соответствующий файл не обрабатывается (про-
пускается).

     P1007 Root path exceeds maximum limit of 66 characters
Ошибка, возникающие при обработке файла описания проекта Help

     (длина названия главного каталога превышает 66 символов)

     Длина названия каталога, указанного в параметре ROOT, превы-
шает предельное значение, принятое в DOS (66 символов). Указанное
название  игнорируется и в качестве главного каталога проекта вы-
бирается текущий каталог.

     P1009 [FILES] section missed
Ошибка, возникающие при обработке файла описания проекта Help

     (отсутствует раздел [FILES])

     В файле описания  проекта  отсутствует  обязательный  раздел
[FILES]. Компиляция завершается аварийно.

     P1011 Option название_параметра previously defined
Ошибка, возникающие при обработке файла описания проекта Help

     (параметр название_параметра уже установлен)

     Значение указанного параметра уже установлено ранее. Попытка
переопределить параметр игнорируется и компиляция продолжается.

     P1013 Project file extension cannot be .HLP
Ошибка, возникающие при обработке файла описания проекта Help

     (файл описания проекта не может иметь расширение имени .HLP)

     Компилятор не может работать с файлом описания проекта, име-
ющим расширение имени ".HLP". Обычно, файлы описания проекта име-
ют расширение имени ".HPJ".

     P1015 Unexpected end-of-file
Ошибка, возникающие при обработке файла описания проекта Help

     (непредвиденный конец файла)

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

     P1017 Parameter exceeds maximum length of 128 characters
Ошибка, возникающие при обработке файла описания проекта Help

     (длина параметра  превышает максимально допустимое значение,
     равное 128)

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

     P1021 Context number already used in [MAP] section
Ошибка, возникающие при обработке файла описания проекта Help

     (контекстный номер уже использован в разделе [MAP])

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

     P1023 Include statements nested too deeply
Ошибка, возникающие при обработке файла описания проекта Help

     (уровень вложенности директивы include слишком велик)

     Уровень вложенности директивы #include,  содержащейся в ука-
занной  строке,  превышает предельно допустимое значение,  равное
пяти.

     P1025 Section heading название_раздела unrecognized
Ошибка, возникающие при обработке файла описания проекта Help

     (название раздела название_раздела некорректно)

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

     P1027 Bracket missing from section heading название_раздела
Ошибка, возникающие при обработке файла описания проекта Help

     (в названии  раздела  название_раздела  пропущена квадратная
     скобка)

     В названии указанного раздела опущена закрывающаяся квадрат-
ная  скобка.  Вставьте  недостающую квадратную скобку и повторите
компиляцию.

     P1029 Section heading missing
Ошибка, возникающие при обработке файла описания проекта Help

     (опущен заголовок раздела)

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

     P1030 Section название_раздела previously defined
Ошибка, возникающие при обработке файла описания проекта Help

     (раздел название_раздела был определен ранее)

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

     P1031 Maximum number of build tags exceeded
Ошибка, возникающие при обработке файла описания проекта Help

     (превышено максимально возможное число признаков включения)

     Максимально допустимое  число используемых признаков включе-
ния равно 30. Избыточные признаки игнорируются.

     P1033 Duplicate build tag in [BUILDTAGS] section
Ошибка, возникающие при обработке файла описания проекта Help

     (в разделе [BUILDTAGS] обнаружены признаки-дубликаты)

     Имя одного и того же признака включения  описано  в  разделе
[BUILDTAGS] несколько раз.

     P1035 Build tag length exceeds maximum
     (длина имени признака включения превышает предельно допусти-
     мое значение)

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

     P1037 Build tag имя_признака contains invalid characters*
Ошибка, возникающие при обработке файла описания проекта Help

     (имя признака включения имя_признака  содержит  недопустимые
     символы)

     Имя признака включения должно состоять из алфавитно-цифровых
символов и символа подчеркивания (_). Строка игнорируется.

     P1039 [BUILDTAGS] section missing
Ошибка, возникающие при обработке файла описания проекта Help

     (отсутствует раздел [BUILDTAGS])

     В файле  описания  проекта  указан параметр BUILD с условием
включения статей, а раздел [BUILDTAGS] отсутствует. Условие игно-
рируется, в справочный файл включаются все имеющиеся статьи.

     P1043 Too many tags in Build expression
Ошибка, возникающие при обработке файла описания проекта Help

     (в логическом  выражении параметра BUILD содержится избыточ-
     ное число признаков включения)

     В логическое выражение, определяемое параметром BUILD, может
входить  не более 20 признаков включения.  Соответствующая строка
игнорируется.

     P1045 [ALIAS] section found after [MAP]
Ошибка, возникающие при обработке файла описания проекта Help

     (раздел [ALIAS] находится после раздела [MAP])

     Если в файле описания проекта имеется раздел [ALIAS],  то он
должен предшествовать разделу [MAP]. В противном случае, содержи-
мое раздела [ALIAS] игнорируется.

     P1047 Context string строка already assigned an alias
Ошибка, возникающие при обработке файла описания проекта Help

     (контекстной строке строка уже присвоено альтернативное имя)

     Переопределение альтернативного имени (сначала a=b,  а затем
a=c) невозможно.  (Контекстная строка  может  иметь  единственное
альтернативное имя).

     Указанной контекстной строке уже сопоставлено альтернативное
имя в разделе [ALIAS].  Попытка  переопределения  альтернативного
имени игнорируется.

     P1049 Alias string aliasname already assigned
Ошибка, возникающие при обработке файла описания проекта Help

     (альтернативное имя уже использовано)

     Альтернативное имя  нельзя  присвоить  альтернативному имени
(сначала a=b, а затем b=c).

     Одно и то же альтернативное имя нельзя  использовать дважды.

     P1051 Context string строка cannot be used as alias string
Ошибка, возникающие при обработке файла описания проекта Help

     (использование контекстной строки строка в качестве  альтер-
     нативного имени невозможно)

     Присваивание сначала a=b, а затем c=a невозможно.

     Контекстная строка,  которой сопоставлено альтернативное имя
не может использоваться в качестве альтернативного имени для дру-
гой контекстной строки.

     P1053 Maximum number of font ranges exceeded
Ошибка, возникающие при обработке файла описания проекта Help

     (превышено максимально возможное число диапазонов шрифтов)

     Допустимо одновременное  использование  не  более  5  команд
MAPFONTSIZE. Избыточные команды игнорируются.

     P1055 Current font range overlaps previouly defined range
Ошибка, возникающие при обработке файла описания проекта Help

     (указанные диапазоны шрифтов перекрываются)

     В двух командах MAPFONTSIZE указаны  перекрывающие диапазоны
размеров  шрифтов.  Измените указанные диапазоны либо удалите ко-
манду,  из-за  которой  происходит  перекрытие.  Вторая   команда
MAPFONTSIZE  из двух с перекрывающимся диапазонами игнорируется и
соответствующее перемасштабирование не производится.

     P1056 Unrecognized font name in Forcefont option
Ошибка, возникающие при обработке файла описания проекта Help

     (в параметре FORCEFONT указан несуществующий шрифт)

     В параметре FORCEFONT указано название шрифта,  неизвестного
компилятору.  Указанное название игнорируется, компилятор исполь-
зует шрифт гарнитуры Гельветика (Helvitica).

     P1057 Font name is too long
Ошибка, возникающие при обработке файла описания проекта Help

     (шрифт имеет слишком длинное название)

     Длина название шрифта не может превышать 20  символов.  Ука-
занное название игнорируется.

     P1059 Invalid multiple-key syntax
Ошибка, возникающие при обработке файла описания проекта Help

     (синтаксическая ошибка в параметре MULTIKEY)

     Параметр MULTIKEY определен некорректно. Синтаксис этого па-
раметра описан в разделе "Построение  справочного  файла  системы
интерактивной документации".

     P1061 Character already used
Ошибка, возникающие при обработке файла описания проекта Help

     (символ уже используется)

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

     P1063 Characters 'K' and 'k' cannot be used
Ошибка, возникающие при обработке файла описания проекта Help

     (использование символов 'K' и 'k' запрещено)

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

     P1065 Maximum number of keyword tables exceeded
Ошибка, возникающие при обработке файла описания проекта Help

     (используется слишком много таблиц ключевых слов)

     Превышено максимально  допустимое количество таблиц ключевых
слов, равное 5. Используйте меньшее число таблиц. Избыточные таб-
лицы игнорируются.

     P1067 Equal sign missing
Ошибка, возникающие при обработке файла описания проекта Help

     (опущен знак равенства)

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

     P1069 Context string missing
Ошибка, возникающие при обработке файла описания проекта Help

     (опущена контекстная строка)

     В указанной строке слева от знака равенства некорректно опу-
щен контекстный идентификатор (строка).

     P1071 Incomplete line in название_раздела section
     (некорректная строка в разделе название_раздела)

     Указанная строка  содержит  некорректную информацию.  Строка
игнорируется.

     P1073 Unrecognized option in [OPTIONS] section
Ошибка, возникающие при обработке файла описания проекта Help

     (в разделе [OPTIONS] указан неверный параметр)

     В разделе [OPTIONS] указан параметр, незнакомый компилятору.
Соответствующая строка игнорируется.

     P1075 Invalid build expression
Ошибка, возникающие при обработке файла описания проекта Help

     (неверное условие включения)

     Логическое выражение параметра BUILD, содержащееся в указан-
ной строке, содержит логические либо синтаксические ошибки.

     P1077 Warning level must be 1, 2 or 3
Ошибка, возникающие при обработке файла описания проекта Help

     (уровень сообщений должен быть равен 1, 2 или 3)

     Уровень сообщений,  указываемый  параметром WARNING,  должен
принимать одно из значений 1, 2 или 3. По умолчанию дается наибо-
лее развернутая информация об ошибках (уровень 3).

     P1079 Invalid compression option
Ошибка, возникающие при обработке файла описания проекта Help

     (ошибка в параметре COMPRESS)

     В параметре  параметре  COMPRESS  может  указываться одно из
двух значений TRUE или FALSE.  Компиляция продолжается в  обычном
режиме (без сжатия).

     P1081 Invalid title string
Ошибка, возникающие при обработке файла описания проекта Help

     (неверный заголовок)

     В параметре  TITLE  указана  либо  пустая строка либо строка
длиннее 32 символов. Избыточные символы игнорируются.

     P1083 Invalid context identification number
Ошибка, возникающие при обработке файла описания проекта Help

     (контекстный номер недопустим)

     Контекстный номер, содержащийся в указанной строке, содержит
недопустимые символы (либо отсутствует вообще).

     P1085 Unrecognized text
Ошибка, возникающие при обработке файла описания проекта Help

     (ошибочный текст)

     Ошибочный текст,  следующий в указанной строке за корректным
текстом, игнорируется.

     P1086 Invalid font range syntax
Ошибка, возникающие при обработке файла описания проекта Help

     (диапазон размеров шрифта указан неверно)

     Определение диапазона размеров шрифтов,  содержащееся в ука-
занной строке,  содержит синтаксическую ошибку.  Указанная строка
игнорируется. Проверьте синтаксис параметра MAPFONTSIZE.

     P1089 Unrecognized sort ordering
Ошибка, возникающие при обработке файла описания проекта Help

     (порядок сортировки некорректен)

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

     Parameter names are used only with a function body
Сообщение об ошибке этапа компиляции

     (имена параметров используются только в теле функции)

     При объявлении функции (без  определения  тела  функции)  вы
должны  использовать  либо  пустые круглые скобки,  либо прототип
функции. Список имен параметров не разрешен.

     Примеры объявлений:

     int func();             /* объявление без прототипа -
                                допустимо */
     int func(int, int);     /* объявление с прототипом -
                                допустимо */
     int func(int i, int j); /* имена параметров
                                в прототипе - допустимы */
     int func(i, j);         /* только имена параметров -
                                не допускается */

     Parameter число missing name
Сообщение об ошибке этапа компиляции

     (в параметре пропущено имя)

     В заголовке  определения  функции  данный  параметр  состоит
только из спецификатора типа число без имени параметра.  В Си это
не  допускается (в С++ это допустимо,  не невозможно сослаться на
такой параметр в функции).

     Parameter параметр is never used
Сообщение об ошибке этапа компиляции

     (параметр не используется)

     Указанный параметр,  объявленный в функции, нигде не исполь-
зуется в теле функции. Это может быть, а может и не быть ошибкой,
и часто является следствием описки в параметре.  Это предупрежде-
ние появляется также,  если в теле функции данный параметр  пере-
объявлен как динамическая локальная (automatic) переменная. Пара-
метр маскируется локальной динамической переменной и не использу-
ется.

     маршрут - path is too long
Сообщение об ошибке утилиты TLIB

     (слишком длинный маршрут)

     Данная ошибка возникает,  когда длина маршрута библиотечного
файла или модуля превышает 64 символа.

     Pointer required on left side of -> or ->*
Сообщение об ошибке этапа компиляции

     (в левой части -> или ->* требуется указатель)

     В левой  части операции -> или ->* недопустимо ничего, кроме
указателя.

     Possible use of идентификатор before definition
Предупреждение этапа компиляции

     (возможное использование идентификатора до определения)

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

     Possibly incorrent assignment
Предупреждение этапа компиляции

     (возможно некорректное присваивание)

     Данное предупреждение генерируется, когда компилятор обнару-
живает операцию присваивания в основном операторе условного выра-
жения (то есть в части оператора if, while, do-while). Чаше всего
это  происходит  из-за опечатки в операции присваивания.  Если вы
хотите подавить данное предупреждение,  заключите присваивание  в
скобки и сравните все с нулем явным образом, то есть:

     if (a = b) ...

следует переписать в виде:

     if ((a = b) !=0) ...

     Program entry point may not reside in an overlay
Сообщение об ошибке утилиты TLINK

     (точка входа программы не может находится в оверлее)

     Хотя оверлейной может быть почти любая  программа, начальный
стартовый адрес  программы не должен находиться в оверлее. Обычно
эта ошибка означает,  что вы пытаетесь сделать оверлейным  модуль
инициализации C0x.OBJ, задав, например, перед модулем инициализа-
ции параметр /o.

     public идентификатор in module модуль_1 clashes  with  prior
     module модуль_2
Сообщение об ошибке утилиты TLIB

     (имеется конфликт между общедоступным идентификатором в  мо-
     дуле_1 и предыдущим модулем модуль_2)

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

     public идентификатор  in module имя_файла clashes with prior
     module
Сообщение об ошибке утилиты TLIB

     (имеется конфликт между  общедоступным  идентификатором  в
     имени_файла и предыдущим модулем модуль)

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

                            - R -

     R2001 Unable to open bitmap file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (невозможно открыть файл битового изображения имя_файла)

     Указанный файл битового изображения не читается. Ошибка воз-
никает в ответ на ошибку DOS при чтении файла.

     R2003 Unable to include bitmap file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (невозможно включить файл битового изображения имя_файла)

     Указанный файл битового изображения отсутствует либо не  чи-
тается.  Ошибка  возникает в ответ на ошибку DOS при чтении файла
либо при исчерпании свободной памяти.

     R2005 Disk full
Ошибка, возникающая при обработке информационных файлов Help

     (на диске нет места)

     Запись справочного файла на диск невозможна.  Освободите  на
диске необходимый объем дискового пространства.

     R2009 Cannot use reserved DOS device name for file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (использование в  качестве  имени_файла зарезервированного в
     DOS названия файла устройства невозможно)

     Файл не может иметь имя COM1, LPT2, PRN и т.д. Назовите файл
другим именем.

     R2013 Output file имя_файла already exists as a directory
Ошибка, возникающая при обработке информационных файлов Help

     (существует каталог с именем, совпадающим с именем выходного
     файла имя_файла)

     В главном каталоге проекта имеется подкаталог,  имя которого
совпадает с именем справочного файла. Переместите этот подкаталог
в другое место либо переименуйте его.

     R2015 Output file имя_файла already exists as read-only
Ошибка, возникающая  при обработке информационных файлов Help

     (выходной файл имя_файла существует и защищен от записи)

     Указанный файл не может быть  записан  поверх  существующего
файла  с таким же именем,  поскольку последний защищен от записи.
Измените название файла описания проекта либо уберите у существу-
ющего файла атрибут "read-only" (только-чтение).

     R2017 Path for file имя_файла exceeds limit of 79 characters
Ошибка, возникающая при обработке информационных файлов Help

     (длина полного имени файла превышает 79 символов)

     Абсолютное имя файла либо имя, построенное в результате сое-
динения названия главного каталога проекта и относительного имени
оказалось  длиннее 79 символов - максимально возможной длине име-
ни,  принятой в DOS. Соответствующий файл не обрабатывается (про-
пускается).

     R2019 Cannot open file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (не могу открыть файл имя_файла)

     Указанный файл  не  читается.  Ошибка  возникает  в ответ на
ошибку DOS при чтении файла.

     R2021 Cannot find file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (не нахожу файл имя_файла)

     Указанный файл отсутствует либо не читается. Ошибка возника-
ет  в  ответ  на  ошибку DOS при чтении файла либо при исчерпании
свободной памяти.

     R2023 Not enough memory to build Help file
Ошибка, возникающая при обработке информационных файлов Help

     (для построения справочного файла не хватает памяти)

     Для высвобождения памяти следует удалить из нее не  нужные в
данный  момент  прикладные программы,  драйверы устройств и рези-
дентные утилиты.

     R2025 File environment error
Ошибка, возникающая  при обработке информационных файлов Help

     (ошибка файловой системы)

     Для продолжения компиляции не хватает  наличия  доступных  в
DOS   дескрипторов   (описателей)   файлов.   Увеличьте  в  файле
CONFIG.SYS значения в строках FILES= и BUFFERS=  и  перезагрузите
ПЭВМ.

     R2027 Build tag name имя_признака not defined in [BUILDTAGS]
     section of project file
Ошибка, возникающая при обработке информационных файлов Help

     (oписание признака   включения   имя_признака   в    разделе
     [BUILDTAGS] файла описания проекта отсутствует)

     Указанный признак  включения присвоен статье,  но его имя не
указано в файле описания проекта. Указанный признак игнорируется.

     R2033 Context string in Map section not defined to any topic
Ошибка, возникающая при обработке информационных файлов Help

     (контекстная строка, указанная в разделе [MAP], не сопостав-
     лена никакой статье)

     В файле описания проекта указана одна или несколько контекс-
тных строк, которым не сопоставлено ни одной статьи.

     Ошибка, возникающая  при  обработке  информационных   файлов
Help:

     R2035 Build expression missing from project file
Ошибка, возникающая при обработке информационных файлов Help

     (в файле описания проекта не указано условие включения)

     Статьям сопоставлены признаки включения, однако условное вы-
ражения,  определяемое  отслеживания  параметром BUILD=,  в файле
описания отсутствует.  Компилятор включает в справочный файл  все
имеющиеся статьи.

     R2037 File  имя_файла  cannot  be  created,  due to previous
     error(s)
Ошибка, возникающая при обработке информационных файлов Help

     (из-за ошибок,  обнаруженных ранее, создание файла имя_файла
     невозможно)

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

     R2039 Unrecognized table formatting in topic номер_статьи of
     file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статья номер_статьи в файле имя_файла содержит таблицу)

     Компоновка информации в таблицу в данной  версии компилятора
не поддерживается.  По возможности переформатируйте соответствую-
щий фрагмент статьи как линейный текст.

     R2041 Jump   контекстная_строка   unresolved  in  topic  но-
     мер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статья номер_статьи в файле имя_файла содержит неопределен-
     ную ссылку контекстная_строка)

     Указанная статья содержит ссылку на  несуществующую  статью.
Проверьте контекстную строку на отсутствие опечаток,  а также вы-
полнение условие включения для статьи, объявленной отсутствующей.

     R2043 Hotspot text cannot spread over paragraph
Ошибка, возникающая при обработке информационных файлов Help

     (текст ссылки не может пересекать границу параграфа)

     Текст ссылки пересекает границу параграфа. Удалите код нача-
ла нового параграфа.

     R2045 Maximum number of  tab  stops  reached  in  topic  но-
     мер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статья номер_статьи в файле имя_файла  содержит  избыточное
     число позиций табулятора)

     В указанной  статье  превышено  максимально допустимое число
позиций табулятора, равное 32. Начиная с 32, используются позиции
табулятора, принятые по умолчанию.

     R2047 File имя_файла not created
Ошибка, возникающая при обработке информационных файлов Help

     (файл имя_файла не создан)

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

     R2049 Context string text is too long in  topic номер_статьи
     of file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи в файле имя_файла  сопоставлена слишком
     длинная контекстная строка)

     Длина текста  контекстной строки не должна превышать 64 сим-
волов. Строка игнорируется.

     R2051 File имя_файла is not a valid RTF topic file
Ошибка, возникающая при обработке информационных файлов Help

     (файл имя_файла не является корректным информационным файлом
     в формате RTF)

     Указанный файл  не является файлом в формате RTF. Проверьте,
в этом ли формате вы записывали указанный файл при работе в текс-
товом процессоре.

     R2053 Font название_шрифта is not in RTF font table
Ошибка, возникающая при обработке информационных файлов Help

     (шрифт название_шрифта  не содержится в таблице шрифтов RTF)

     В тексте  статьи используется шрифт,  который не определен в
заголовке файла RTF.  Компилятор использует системный шрифт, при-
нятый по умолчанию.

     R2055 File имя_файла not a usable RTF topic file
Ошибка, возникающая при обработке информационных файлов Help

     (работа с файлом имя_файла как с файлом RTF невозможна)

     Указанный файл  содержит  корректный для формата RTF заголо-
вок, однако содержимое файла не в формате RTF либо испорчено.

     Ошибка, возникающая  при  обработке  информационных   файлов
Help:

     R2057 Unrecognized  graphic  format in topic номер_статьи on
     file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статья номер_статьи  в  файле имя_файла ссылается на графи-
     ческое изображение, записанное в неизвестном формате)

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

     R2059 Context string identifier already defined in topic но-
     мер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи  в  файле  имя_файла контекстная строка
     уже присвоена)

     У указанной статьи имеется две сноски со знаком #. Сноска со
знаком "#" используется для назначения статье идентифицирующей ее
контекстной строки. Компилятор использует контекстную строку, оп-
ределяемую первой сноской со знаком #.

     R2061 Context string контекстная_строка already used in file
     имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (контекстная строка контекстная_строка  уже  использована  в
     файле имя_файла)

     Указанная контекстная  строка была сопоставлена ранее другой
статье. Компилятор игнорирует определение контекстной строки, со-
ответственно вторая статья оказывается без идентификатора.

     R2063 Invalid  context-string  identifier  for   topic   но-
     мер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи в файле имя_файла назначена  некоррект-
     ная контекстная строка)

     Контекстная строка  содержит  символы,  не являющая алфавит-
но-цифровыми,  либо  является  пустой.  Некорректная  контекстная
строка игнорируется,  соответствующая статья остается без иденти-
фикатора.

     R2065 Context string defined for index topic is unresolved
Ошибка, возникающая при обработке информационных файлов Help

     (контекстная строка, указанная в качестве идентификатора ог-
     лавления, не сопоставлена никакой статье)

     Статья указанная  в файле описания проекта в качестве оглав-
ления не найдена.  В качестве  оглавления  компилятор  использует
первую встретившуюся статью.

     R2067 Footnote text too long in topic номер_статьи  on  file
     имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статья номер_статьи в файле  имя_файла  содержит  сноску  с
     текстом избыточной длины)

     Длина текста сноски не может превышать 1000 символов. Сноска
игнорируется.

     R2069 Build  tag  footnote  not  at  beginning  of topic но-
     мер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (в статье  номер_статьи,  содержащейся  в  файле  имя_файла,
     сноска признака включения не является первой сноской)

     Указанная статья содержит ссылку, определяющую признак вклю-
чения,  однако  знак  этой  ссылки  не  является  первым символом
статьи. Статье не назначается признак включения.

     R2071 Foonote text missed in topic номер_статьи on file имя_
     файла
Ошибка, возникающая при обработке информационных файлов Help

     (статья номер_статьи в файле имя_файла содержит пустую снос-
     ку)

     Указанная статья содержит сноску без текста.

     R2073 Keyword  string  is null in topic номер_статьи on file
     имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи  в  файле имя_файла сопоставлено пустое
     ключевое слово)

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

     R2075 Keyword string is too long in  topic  номер_статьи  on
     file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи в файле имя_файла  сопоставлено слишком
     длинное ключевое слово)

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

     R2077 Keyword(s) defined without title in topic номер_статьи
     on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

      (статье номер_статьи в файле имя_файла сопоставлено  ключе-
     вое слово, а заголовок не сопоставлен)

     Указанной статье  назначены ключевые слова и при этом не со-
поставлен заголовок. При поиске по ключевому слову статья без за-
головка  отображается  в  соответствующем  блоке  перечня  в виде
Untitled topic<<.

     R2079 Browse  sequence  string is null in topic номер_статьи
     on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи в файле имя_файла  сопоставлена  пустая
     строка последовательности просмотра)

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

     R2081 Browse  sequence  string  is  too  long  in  topic но-
     мер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи  в  файле имя_файла сопоставлен слишком
     длинный идентификатор последовательности просмотра)

     Указанная статья имеет сноску,  используемую для  назначения
порядкового  номера в последовательности просмотра,  длина текста
которой превышает  предельно  допустимое  значение,  равное  128.
Сноска игнорируется.

     R2083 Missing sequence number in topic номер_статьи  on file
     имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (у статьи номер_статьи в файле имя_файла опущен номер в пос-
     ледовательности просмотра)

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

     R2085 Sequence number already defined in  topic номер_статьи
     on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи в файле имя_файла сопоставлено два  по-
     рядковых номера в последовательности просмотра)

     Указанной статье  уже сопоставлен номер в последовательности
просмотра. Второе определение номера игнорируется.

     R2087 Build tag too long
Ошибка, возникающая при обработке информационных файлов Help

     (длина имени признака включения слишком велика)

     Длина имени  признака  включения,  сопоставленного указанной
статье, превышает предельно допустимое значение, равное 32. Приз-
нак включения игнорируется.

     R2089 Title  string  null  in  topic  номер_статьи  on  file
     имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи  в  файле  имя_файла сопоставлен пустой
     заголовок)

     Указанная статья имеет сноску,  используемую для  назначения
заголовка,  однако  она  не  содержит никакого текста.  Заголовок
статье не назначается.

     R2091 Title too long in topic номер_статьи on file имя_файла
Ошибка, возникающая при обработке информационных файлов Help

     (статье номер_статьи в файле имя_файла  сопоставлен  слишком
                            - S -

     Segment aliognment factor too small
Фатальная ошибка утилиты TLINK

     (коэффициент выравнивания сегментов слишком мал)

     Данная ошибка возникает,  если коэффициент выравнивания сег-
ментов (заданный  с  помощью  команды   OptionsіLinkerі...Segment
Alignment или параметром /A) слишком мал,  чтобы представлять ад-
реса сегментов файла в файле .EXE. Данная ошибка происходит толь-
ко при выполнении компоновки для Windows.  См. описание параметра
/A.

     Segment сегмент exceeds 64K
Фатальная ошибка утилиты TLINK

     (сегмент превышает 64К)

     Данная ошибка возникает,  если определено слишком много дан-
ных для данного сегмента кода или  данных,  когда  утилита  TLINK
комбинирует сегменты с одним именем из разных исходных файлов.

     Segment сегмент is in two groups: группа_1 and группа_2
Предупреждение утилиты TLINK

     (указанный сегмент содержится в двух группах)

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

     Segment too large for segment table
Фатальная ошибка утилиты TLINK

     (сегмент слишком велик для таблицы сегментов)

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

     Side effects are not allowed
Сообщение об ошибке этапа компиляции

     (Побочные эффекты не разрешены)

     В окне наблюдения (Watch) побочные эффекты,  такие как прис-
ваивания, ++ или --, не разрешены. Общая ошибка состоит в исполь-
зовании  x=y (недопустимо) вместо x==y при проверке равенства x и
y.
           Примечание: Данное  сообщение  используется только от-
      ладчиком интегрированной среды.

     Size of идентификатор unknown or zero
Сообщение об ошибке этапа компиляции

     (Размер идентификатора неизвестен или нулевой)

     Данный идентификатор  использоваться в контексте,  где нужен
размер. Без размера могут быть  объявлены  только  признак  (тег)
структуры  (структура  еще  не  определена),  либо массив extern.
Ссылки на такие элементы (например, операцией sizeof) или обраще-
ние  к ним через указатель к этому типу запрещены.  Реорганизуйте
объявление таким образом, чтобы размер данного идентификатора был
известен.

     sizeof may not be applied to a bit field
Сообщение об ошибке этапа компиляции

     (операция sizeof неприменима к битовому полю)

     Операция sizeof  возвращает размер объекта данных в байтах и
неприменима к битовым полям.

     sizeof may not be applied to a function
Сообщение об ошибке этапа компиляции

     (операция sizeof неприменима к функции)

     Операция sizeof  применима только к объектам данных,  а не к
функциям. Можно запросить размер указателя функции.

     Size of the type is unknown or zero
Сообщение об ошибке этапа компиляции

     (размер типа неизвестен или нулевой)

     Данный тип использовался в контексте,  где необходим размер.
Например,  тег структуры может быть только объявлен (а  структура
еще не определена).  Тогда некоторые ссылки к ней (например, опе-
рацией sizeof) или обращение к ней через  указатель  недопустимы.
Реорганизуйте объявления данного типа таким образом, чтобы размер
этого типа был доступен.

     идентификатор specifies multiple or duplicate access
Сообщение об ошибке этапа компиляции

     (идентификатор задает многократный или дублирующийся доступ)

     Базовый класс должен описываться как public или  private, но
не то и другое одновременно. Спецификатор доступа не должен зада-
ваться для базового класса более одного раза.

     Stack overflow
Сообщение об ошибке этапа выполнения

     (переполнение стека)

     По умолчанию  размер  стека  для  программ Borland C++ равен
4096 байт.  Для большинства  программ  этого  достаточно,  однако
программы  с рекурсивными функциями или большими объемами локаль-
ных данных могут  переполнить  стек.  Данное  сообщение  выдается
только в том случае,  когда включено средство контроля стека. При
получении этого сообщения вы можете перейти к большей модели  па-
мяти,  увеличить размер стека, либо уменьшить использование стека
вашей программой.  Информацию о том,  как изменить размер стека с
помощью глобальной переменной _stklen, см. в Главе 3, "Глобальные
переменные" в "Справочнике по библиотеке".  Для уменьшения  коли-
чества используемых  функцией  локальных  данных  можно поступить
так,  как показано в приводимом ниже примере.  Переменная  buffer
объявлена  как static и потому,  в отличие от list,  не расходует
стек.

     void anyfunction( void )
        {
        static int buffer[ 2000 ]; /* размещается в сегменте
                                      данных */
        int list[ 2000 ];          /* размещается в стеке */
        }

     Объявление локальных  переменных как static имеет два недос-
татка.

     1. Теперь такая переменная занимает место,  отводимое обычно
        глобальным переменным и динамически распределяемой облас-
        ти. (Чтобы заплатить Павлу,  приходится  грабить  Петра).
        Однако этот недостаток не самый главный.

     2. Функция не может более являться реентерабельной.  Это оз-
        начает, что если функция должна вызываться рекурсивно или
        асинхронно,  и при этом важно, чтобы каждый вызов функции
        работал со своей собственной копией переменной,  то такая
        переменная не может быть статической.  Это связано с тем,
        что при каждом вызове функции данная переменная будет за-
        нимать ту же самую область памяти,  вместо того, чтобы ей
        распределялась всякий раз новая. Также возникает проблема
        с разделением доступа к переменной, если функция содержит
        вызов самой себя (рекурсивно),  либо  должна  выполняться
        одновременно  сама с собой (асинхронно).  Для большинства
        программ DOS это не проблема. Если вы не пишете рекурсив-
        ных  функций  и не работаете в мультизадачном режиме,  то
        вам не о чем беспокоиться. В противном случае приведенные
        выше объяснения помогут вам разобраться, что к чему.

     Stack size is less then 1400h. It has been reset to 1400h.
Предупреждение утилиты TLINK

     (размер стека меньше 1400h, установлен размер 1400h)

     Windows 3.0 требует, чтобы размер стека прикладной программы
должен быть не менее 1400h.  Если сегмент локальных  динамических
данных (ADS)  меньше  1400h,  это  приводит к переполнению ADS во
время загрузки, но не во время компоновки. Чтобы избежать этого в
прикладной программе  Windows,  TLINK принудительно устанавливает
размер стека в 1400h.

     Statement missing ;
Сообщение об ошибке этапа компиляции

     (в операторе отсутствует ;)

     Компилятор встретил  выражение  с оператором без завершающей
точки с запятой.

     Storage class класс памяти not allowed for a field
Сообщение об ошибке этапа компиляции

     (класс памяти не разрешен для поля)

     В Си  в объявлении поля задание класса памяти недопустимо. В
С++ поле может быть typedef, поле данных может быть static, а по-
ле функции может быть inline. Ничего другого быть не может.

     String type not allowed with this operand
Сообщение об ошибке утилиты MAKE

     (строковый тип в данном операторе недопустим)

     Вы пытаетесь использовать операнд,  который  не  допускается
для сравнения строковых типов.  Допускаются операнды:  ==, !=, <,
>, <= и >=.

     Structure passed by value
Предупреждение этапа компиляции

     (структура передана по значению)

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

     Structure required on left side of . or .*
Сообщение об ошибке этапа компиляции

     (в левой части операции . или .* требуется структура)

     При вычислении левой части операции .  или .*  должна  полу-
чаться структура. В данном случае это не так.

     Structure size too large
Сообщение об ошибке этапа компиляции

     (слишком большой размер структуры)

     В исходном файле объявлена структура размером более 64К.

     Stub program esceeds 64K
Фатальная ошибка утилиты TLINK

     (размер программы-заглушки превышает 64К)

     Данная ошибка возникает,  если заглушка DOS,  написанная для
прикладной программы Windows, превышает 64К. Заглушки определяют-
ся с помощью оператора STUB файла определения модуля.  TLINK под-
держивает только программы-заглушки, не превышающие 64К.

     Style of  function  definition is now obsolete
Предупреждение этапа компиляции

     (этот вид определения функции устарел)

     В С++ старый стиль определения функции запрещен:

     int func(p1, p2) int p1, p2; { /* ... */ }

     Он также не допускается и многими другими компиляторами С++.

     Subscripting missing ]
Сообщение об ошибке этапа компиляции

     (В индексе отсутствует ])

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

     Superfluous & with function
Предупреждение этапа компиляции

     (избыточная операция & с функцией)

     Операция адресации (&) с именем функции не  требуется; любая
подобная операция отвергается.

     Suspicious pointer convercion
Предупреждение этапа компиляции

     (подозрительное преобразование указателя)

     Компилятор встретил некоторое преобразование указателя,  ко-
торое изменило тип,  на который он указывает. Если это преобразо-
вание вам нужно,  то для подавления данного  предупреждения  вос-
пользуйтесь явным приведением типа.

     Switch selection expression must be of integral type
Сообщение об ошибке этапа компиляции

     (выражение выбора в операторе switch должно быть целого  ти-
     па)

     Задаваемое в  круглых  скобках  выражение  выбора  оператора
switch должно давать значение  целого  типа  (char,  short,  int,
long,  enum).  Для того, чтобы выполнить данное требование, можно
воспользоваться явным приведением типов.

     Switch statement missing (
Сообщение об ошибке этапа компиляции

     (в операторе switch отсутствует ()

     В операторе switch компилятор не смог обнаружить левой круг-
лой скобки после ключевого слова switch.

     Switch statement missing )
Сообщение об ошибке этапа компиляции

     (в операторе switch отсутствует ))

     В операторе  switch  компилятор  после выражения проверки не
смог обнаружить левой круглой скобки.

     имя_файла(номер_строки): Syntax error
Фатальная ошибка утилиты TLINK

     (синтаксическая ошибка)

     Компоновщик обнаружил  в  файле определения модуля синтакси-
ческую ошибку.  Место ошибки указывается именем файла  и  номером
строки.

                            - T -

     Table limit exceeded
Фатальная ошибка утилиты TLINK

     (превышен размер таблицы)

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

     Template argument must be a constant expression
Сообщение об ошибке этапа компиляции

     (аргумент шаблона должен быть выражением-константой)

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

     Template class nesting too deep: 'class'
Сообщение об ошибке этапа компиляции

     (слишком глубокая вложенность шаблона класса)

     Компилятор накладывает  определенные  ограничения на уровень
вложенности шаблонов классов,  который можно обойти обычно только
через рекурсивную зависимость шаблонов класса. Когда предел такой
вложенности превышен,  компилятор  выводит  данное  сообщение  об
ошибке для всех вложенных шаблонов классов,  что обычно позволяет
легко выявить место рекурсии.  Это всегда  следует  за  фатальной
ошибкой Out of memory (Нет памяти).

     Например, рассмотрим следующий набор шаблонов классов:

     template class A
     {
        friend class  B;
     };

     template class B
     {
        friend class  A;
     };

     A  x;

     Что приведет к выводу следующих сообщений:

     Error: Template class nesting too deep: 'B'
     Error: Template class nesting too deep: 'B'
     Error: Template class nesting too deep: 'B'
     Error: Template class nesting too deep: 'B'
     Error: Template class nesting too deep: 'B'
     Error: Template class nesting too deep: 'B'
     Fatal: Out of memory

     Template function argument аргумент not used in argument
Сообщение об ошибке этапа компиляции

     (аргумент шаблона функции не используется в аргументе)

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

     Template functions may only have type-arguments
Сообщение об ошибке этапа компиляции

     (в шаблонах функций могут быть только аргументы-типы)

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

     Templates can only be declared at file level
Сообщение об ошибке этапа компиляции

     (шаблоны могут описываться только на уровне файла)

     Объявление в описании шаблона должно задавать тип класса или
функцию.

     См. следующее сообщение.

     Temporary used to initialize идентификатор
Предупреждение этапа компиляции

     (Для инициализации  идентификатора  использовалась временная
     переменная)

     См. следующее сообщение.

     Temporary used for parameter номер in call to функция
Предупреждение этапа компиляции

     (При вызове  функции для параметра номер использовалась вре-
     менная переменная)

     См. следующее сообщение.

     Temporary used for parameter параметр in call to функция
Предупреждение этапа компиляции

     (При вызове  функции  для  параметра параметр использовалась
     временная переменная)

     См. следующее сообщение.

     Temporary used for parameter номер
Предупреждение этапа компиляции

     (Для параметра номер использовалась временная переменная)

     См. следующее сообщение.

     Temporary used for parameter параметр
Предупреждение этапа компиляции

     (Для параметра параметр использовалась временная переменная)

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

     Например, функция f требует ссылку на int,  а  c  имеет  тип
char:

     f(int&);
     char c;
     f(c);

     Вместо вызова f с адресом c компилятор генерирует код, экви-
валентный следующему исходному коду С++:

     int X = c, f(X);

     Terminated by user
Фатальная ошибка утилиты TLINK

     (прервано пользователем)

     Вы прервали работу компоновщика.

     The combinations '+*' or '*+' not allowed
Сообщение об ошибке утилиты TLIB

     (комбинации '+*' или '*+' не допускаются)

     Не допускается добавлять и извлекать модуль из библиотеки за
одно действие. Возможно требуется действие '+-'.

     The constructor конструктор is not allowed here
Сообщение об ошибке этапа компиляции

     (конструктор здесь недопустим)

     Конструкторы вида X::(X) недопустимы.  Правильный способ за-
писи конструктора: X::(const X&)

     The value for идентификатор is not within the  range  of  an
     int
Сообщение об ошибке этапа компиляции

     (значение идентификатора не укладывается в диапазон допусти-
     мых значений для типа int)

     Все перечислимые  типы должны иметь значения,  которые могут
быть представлены целым.  Вы попытались присвоить значение, лежа-
щее вне диапазона допустимых значений для целого.  Если вам нужна
константа с данным значением, используйте тип const.

     'this' can only be used within a member function
Сообщение об ошибке этапа компиляции

     ('this' можно использовать только в функции-элементе)

     В С++ this - это зарезервированное слово,  которое можно ис-
пользовать только в пределах функций-элементов класса.

     This initialization is only partly bracketed
Предупреждение этапа компиляции

     (данная инициализация заключена в скобки только частично)

     Результат выбора   команды  интегрированной  среды  Optionsі
CompilerіMessages...іANSI violations.

     Initialization is only partly bracketed
Предупреждение этапа компиляции

     (данная инициализация заключена в скобки только частично)

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

     Too few arguments in template class name шаблон
Сообщение об ошибке этапа компиляции

     (слишком мало аргументов в шаблоне класса)

     В имени  шаблона класса пропущены фактические значения неко-
торых формальных параметров.

     Too few parameters in call
Сообщение об ошибке этапа компиляции

     (слишком мало параметров в вызове)

     Вызов функции  с  прототипом (через указатель) имеет слишком
мало аргументов.  Прототипы требуют точного задания всех парамет-
ров.

     Too few parameters in call to функция
Сообщение об ошибке этапа компиляции

     (слишком мало параметров в вызове функции)

     Вызов названной функции (объявленной с использованием прото-
типа) имеет слишком мало аргументов.

     Too many decimal points
Сообщение об ошибке этапа компиляции

     (слишком много десятичных точек)

     Компилятор встретил константу с плавающей точкой,  в которой
находится более одной десятичной точки.

     Too many default cases
Сообщение об ошибке этапа компиляции

     (слишком много операторов default)

     Компилятор встретил более одного оператора default  в  одной
конструкции switch.

     Too many error or warning messages
Сообщение об ошибке этапа компиляции

     (слишком много сообщений об ошибке или предупреждений)

     Компилятор может зарегистрировать до 255 ошибок или  предуп-
реждений, а потом остановит свою работу.

     Too many error or warning messages
Сообщение об ошибке утилиты TLINK

     (слишком много ошибок или предупреждений)

     Число выводимых компилятором сообщений ограничивается  опре-
деленным пределом.  Данное сообщение показывает,  что компоновщик
достиг этого предела.

     Too many exponents
Сообщение об ошибке этапа компиляции

     (слишком много показателей степени)

     Компилятор встретил в константе с плавающей точкой более од-
ного показателя степени.

     Too many initializers
Сообщение об ошибке этапа компиляции

     (слишком много инициализаторов)

     Компилятор встретил больше инициализаторов, чем это допуска-
ется инициализируемым объявлением.

     Too many storage classes in declaration
Сообщение об ошибке этапа компиляции

     (в объявлении слишком много классов памяти)

     В объявлении  должно указываться не больше одного класса па-
мяти.

     Too many suffixes in .SUFFIXES list
Сообщение об ошибке утилиты MAKE

     (слишком много суффиксов в списке .SUFFIXES)

     В списке суффиксов вы превысили максимально допустимое огра-
ничение - 255.

     Too many types in declaration
Сообщение об ошибке этапа компиляции

     (в объявлении слишком много типов)

     Объявление может содержать не более одного из следующих  ба-
зовых типов:  char,  int,  float, double, struct, union, enum или
typedef-имя.

     Too much global data defined in file
Сообщение об ошибке этапа компиляции

     (в файле объявлено слишком много глобальных данных)

     Сумма объявленных  глобальных  данных  превысила  по размеру
64К.  Проверьте объявления массивов,  которые могут быть причиной
выхода за пределы памяти. Либо реорганизуйте программу, либо, ес-
ли все объявления вам нужны, используйте переменные far.

     Trying to derive a far class from a huge base база
Сообщение об ошибке этапа компиляции

     (попытка объявить класс far,  производный от базового класса
     huge)

     Если класс  объявлен  (или имеет по умолчанию) тип huge,  то
все классы, производные от него, также должны быть huge.

     Trying to derive a far class from a near base база
Сообщение об ошибке этапа компиляции

     (Попытка объявить класс far,  производный от базового класса
     near)

     Если класс  объявлен  (или имеет по умолчанию) тип near,  то
все классы, производные от него, также должны быть near.

     Trying to derive a near class from a far base база
Сообщение об ошибке этапа компиляции

     (попытка объявить производный класс near от  базового класса
     far)

     Если класс объявлен (или имеет по умолчанию) тип far, то все
классы, производные от него, также должны быть far.

     Trying to derive a huge class from a near base база
Сообщение об ошибке этапа компиляции

     (попытка объявить производный класс huge от  базового класса
     near)

     Если класс объявлен (или имеет по умолчанию)  тип  near,  то
все классы, производные от него, также должны быть near.

     Trying to derive a near class from the huge base база
Сообщение об ошибке этапа компиляции:

     (попытка объявить производный класс near от  базового класса
     huge)

     Если класс  объявлен  (или имеет по умолчанию) тип huge,  то
все классы, производные от него, также должны быть huge.

     Two consecutive dots
Сообщение об ошибке этапа компиляции

     (две последовательно расположенные точки)

     Поскольку многоточие состоит из трех точек (...), а десятич-
ная точка и операция выбора элемента используют только одну точку
(.), то две последовательные точки в программе на языке Си  недо-
пустимы.

     Two operands must evaluate to the same type
Сообщение об ошибке этапа компиляции

     (два операнда должны давать при вычислении  один  и  тот  же
     тип)

     Типы выражений по обеим сторонам двоеточия в условной опера-
ции (?:) должны быть одинаковыми,  за исключением тех, что позво-
ляют  взаимные  преобразования типа - char в int,  float в double
или void* в конкретный указатель. В данном выражении с обеих сто-
рон операции содержатся различные, не преобразуемые автоматически
типы.  Это может быть либо ошибкой,  либо вам нужно просто выпол-
нить приведение типов участвующих в выражении операндов.

     Примечание относительно сообщений Type mismatch:  При компи-
ляции программ в С++ перед следующими сообщениями всегда выводит-
ся другое сообщение, поясняющее точную причину несоответствия ти-
пов. Обычно это "Cannot convert 'тип_1' to 'тип_2'. Но могут быть
и другие причины.

     Type mismatch in default argument value
Сообщение об ошибке этапа компиляции

     (несоответствие типа  в  используемом  по умолчанию значении
     параметра)

     См. следующее сообщение.

     Type mismatch in default value for parameter параметр
Сообщение об ошибке этапа компиляции

     (несоответствие типа  в  используемом  по умолчанию значении
     параметра параметр)

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

     Type mismatch in parameter номер
Сообщение об ошибке этапа компиляции

     (несоответствие типа в параметре номер)

     Вызванная через указатель функция была объявлена с  прототи-
пом; данный  же  параметр  с  указанным  номером (отсчитывая сле-
ва-направо от 1) не может преобразоваться к объявленному типу па-
раметра.

     Type mismatch in parameter номер in call to функция
Сообщение об ошибке этапа компиляции:

     (несоответствие типа параметра номер в вызове функции)

     В вашем исходном файле объявлена указанная функция с  прото-
типом,  а  данный  параметр  с указанным номером (отсчитывая сле-
ва-направо от 1) не может быть преобразован к  объявленному  типу
параметра.

     Type mismatch in parameter параметр
Сообщение об ошибке этапа компиляции

     (несоответствие типа в параметре параметр)

     Вызванная через указатель функция была объявлена с  прототи-
пом; указанный же параметр не может быть преобразован к объявлен-
ному типу параметра. См. выше сообщения о несоответствии типов.

     Type mismatch in parameter параметр in call to функция
Сообщение об ошибке этапа компиляции

     (несоответствие типа параметра в вызове функции функция)

     В вашем  исходном файле объявлена указанная функция с прото-
типом, а указанный параметр нельзя преобразовать  к  объявленному
типу параметра. См. сообщение Type mismatch in parameter параметр.

     Type mismatch  in  parameter параметр in template class name
     шаблон
Сообщение об ошибке этапа компиляции

     (несоответствие типа в параметре в имени шаблона класса)

     См. следующее сообщение.

     Type mismatch in parameter число in template class name шаб-
     лон
Сообщение об ошибке этапа компиляции

     (несоответствие типа в параметре в имени шаблона класса)

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

     Type mismatch in redeclaration of идентификатор
Сообщение об ошибке этапа компиляции

     (несоответствие типа в переобъявлении идентификатора)

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

     Type name expected
Сообщение об ошибке этапа компиляции

     (требуется имя типа)

     Произошла одна из следующих ошибок:

     - в  описании  файлового  уровня или поля структуры не задан
       класс памяти и имя типа;

     - в описании typedef не указан тип для имени;

     - в описании деструктора класса С++ имя  деструктора не  яв-
       ляется именем  типа (это должно быть то же имя,  что и имя
       класса);

     - при указании имени базового класса  С++  имя  не  является
       именем базового класса.

     Type qualifier идентификатор must be a struct or class name
Сообщение об ошибке этапа компиляции

     (квалификатор идентификатор  типа должен быть структурой или
     именем класса)

     Квалификатор С++ в конструкторе  квалификатор::идентификатор
не является именем структуры или класса.

                            - U -

     Unable to create output file имя_файла
Фатальная ошибка этапа компиляции

     (невозможно создать выходной файл)

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

     Unable to create torboc.$ln
Сообщение об ошибке этапа компиляции

     (невозможно создать файл torboc.$ln)

     Компилятор не может создать временный файл  TURBOC.$LN,  так
как не может получить доступ к диску, или диск переполнен.

     Unable to execute command
Фатальная ошибка утилиты MAKE

     (нет возможности выполнить команду)

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

     Unable to execute command команда
Сообщение об ошибке этапа компиляции

     (нет возможности выполнить команду команда)

     Невозможно найти TLINK или TASM, возможно диск запорчен.

     Unable to open file имя_файла
Фатальная ошибка утилиты TLINK или ошибка утилиты TLIB

     (нет возможности открыть файл имя_файла)

     Это происходит,  если указанный файл не существует или задан
неверно.

     Unable to open имя_файла
Фатальная ошибка утилиты TLINK или ошибка утилиты TLIB

     (нет возможности открыть файл имя_файла)

     Это происходит,  если указанный файл не существует или задан
неверно.

     unable to open имя_файла for output
Сообщение об ошибке утилиты TLIB

     (невозможно открыть файл имя_файла для вывода)

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

     Unable to open include file имя_файла
Сообщение об ошибке этапа компиляции

     (нет возможности открыть включаемый файл имя_файла)

     Названный файл компилятором не найден.  Это могло  произойти
из-за того,  что  включаемый  файл по директива #include включает
самого себя или вы не установили в CONFIG.SYS  FILES  (попробуйте
FILES=20). Проверьте, существует ли найденный файл.

     Unable to open include file имя_файла
Сообщение об ошибке утилиты MAKE

     (нет возможности открыть включаемый файл имя_файла)

     Названный файл не найден.  Это могло произойти  из-за  того,
что включаемый  файл  включает самого себя или вы не установили в
CONFIG.SYS FILES (попробуйте FILES=20).  Проверьте, существует ли
найденный файл.

     Unable to open input file имя_файла
Сообщение об ошибке этапа компиляции

     (невозможно открыть входной файл имя_файла)

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

     unable to open 'dpmimem.dll'
Фатальная ошибка командной строки

     (невозможно открыть файл 'dpmimem.dll')

     Убедитесь, что файла DNMPMIMEM.DLL присутствует по указанно-
му маршруту в том же каталоге,  что и командный файл средства за-
щищенного режима, который вы пытаетесь использовать.

     Unable to open makefile
Сообщение об ошибке утилиты MAKE

     (Нет возможности открыть формирующий файл)

     Данное сообщение  выдается,  когда каталог не содержит файла
MAKEFILE.

     Unable to redirect input or output
Сообщение об ошибке утилиты MAKE

     (невозможно перенаправить ввод или вывод)

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

     unable to rename имя_файла in имя_файла
Сообщение об ошибке утилиты TLIB

     (невозможно переименовать файл имя_файла в имя_файла)

     Утилита TLIB  строит библиотеку во временном файле,  а затем
переименовывает временный файл в целевой библиотечный  файл. Если
данная ошибка вызывается недостатком места на диске, то это будет
отмечено.

     Undefined label идентификатор
Сообщение об ошибке этапа компиляции

     (неопределенная метка)

     Указанная метка  присутствует в операторе goto в функции, но
определения метки нет.

     Undefined structure идентификатор
Предупреждение этапа компиляции

     (неопределенная структура)

     Указанная структура  используется в исходно файле (возможно,
в указателе на структуру),  но не имеет  определения  в  исходном
файле. Обычно это вызывается опечаткой в имени структуры или про-
пущенным описанием.

     Undefined structure структура
Сообщение об ошибке этапа компиляции

     (неопределенная структура)

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

     Undefined symbol идентификатор
Сообщение об ошибке этапа компиляции:

     (неопределенный идентификатор)

     Указанный идентификатор  не имеет описания.  Это может вызы-
ваться опечаткой в данном месте или в  точке  описания.  Причиной
может быть также ошибка в идентификаторе.

     Undefined symbol идентификатор in module модуль
Сообщение об ошибке утилиты TLINK

     (неопределенный идентификатор в модуле модуль)

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

     Обычно эта  ошибка выводится компоновщиком TLINK для Borland
C++, если он не соответствует в точности  описаниям  типа  pascal
или  cdecl  в других исходных файлах,  или если вы пропустили имя
необходимого вашей программе файла .OBJ. Если вы компонуете моду-
ли С++ с модулями Си, возможно вы забыли указать внешние описания
в extern "C" {...}.  Возможно в идентификаторах буквы  указаны  в
разных регистрах. См. параметры /C и /c.

     Unexpected }
Сообщение об ошибке этапа компиляции

     (непредвиденная скобка })

     Там, где она не требуется,  обнаружена лишняя фигурная скоб-
ка. Проверьте пропущенную скобку {.

     Unexpected char X in command line
Сообщение об ошибке утилиты TLIB

     (непредвиденный символ X в командной строке)

     Утилита TLIB обнаружила при анализе командной строки синтак-
сическую ошибку.

     Unexpected end of file
Сообщение об ошибке утилиты MAKE

     (неправильное окончание файла)

     Достигнут конец формирующего файла,  а временный  встроенный
файл не закрыт.

     Unexpected end of file in comment started on номер_строки
Сообщение об ошибке этапа компиляции

     (неправильное окончание файла в комментарии  на  строке  но-
     мер_строки)

     Исходный файл заканчивается в комментарии.  Обычно это вызы-
вается отсутствием завершения комментария (*/).

     Unexpected end of file in conditional started on line номер_
     строки
Сообщение об ошибке утилиты MAKE или ошибка этапа компиляции

     (Неправильное окончание файла в условном операторе на строке
     номер_строки)

     Исходный файл закончился перед тем,  как обслуживающая прог-
 рамма МAKE (или компилятор) обнаружила !endif.  Директива !endif
была или пропущена, или в ней имелась синтаксическая ошибка.

     union cannot be a base type
Сообщение об ошибке этапа компиляции

     (объединение не может быть базовым типом)

     Объединение не может использоваться в качестве базового типа
для класса другого типа.

     union cannot have a base type
Сообщение об ошибке этапа компиляции

     (объединение не может иметь базовый тип)

     Объединение не может быть производным из других классов.

     Union member элемент is of type class with constructor
Сообщение об ошибке этапа компиляции

     (элемент объединения имеет тип класса с конструктором)

     См. ниже.

     Union member элемент is of type class with destructor
Сообщение об ошибке этапа компиляции

     (элемент объединения имеет тип класса с деструктором)

     См. ниже.

     Union member элемент is of type class with operator=
Сообщение об ошибке этапа компиляции

     (элемент объединения имеет тип класса с operator=)

     Объединение не  может содержать элементы типа класса с опре-
деленными пользователем   конструкторами,    деструкторами    или
operator=.

     unions cannot have virtual member functions
Сообщение об ошибке этапа компиляции

    (объединения не могут содержать виртуальные функции-элементы)

     Unknown assembler instruction
Предупреждение этапа компиляции

     (неизвестная инструкция Ассемблера)

     Компилятор обнаружил оператор встроенного Ассемблера с недо-
пустимым кодом. Проверьте правильность кода операции. Данное пре-
дупреждение по умолчанию выключено.

           Примечание: См. Главу 12 "BASM и встроенный Ассемблер"
      в "Руководстве программиста",  где о кодах операции расска-
      зывается более подробно.

     unknown command line switch X ignored
Сообщение об ошибке утилиты TLIB

     (недопустимый параметр командной строки игнорируется)

     В командной  строке или файла отклика обнаружена косая черта
(/), за которой не следует один из допустимых параметров.

     Unknown language, must be C or C++
Сообщение об ошибке этапа компиляции

     (недопустимый язык, должен быть Си или С++)

     В конструкции C++:

     extern "name" type func { /* ... */ };

     Именем, указанным  в  кавычках,  должно  быть "C" или "C++".
Имена других языков не распознаются.  Например, вы можете описать
внешнюю функцию Паскаля без переименования компилятора, например:

     extern "C" int pascal func { /* ... */ };

     Функция С++  (возможно  переопределяемая) должна описываться
как Pascal,  что допускает обычное переименование компилятора  (и
переопределение):

     extern int pascal func { /* ... */ };

     Unknown option
Фатальная ошибка утилиты TLINK

     (неизвестный параметр)

     В командной строке или в файле отклика  обнаружен  символ  /
или -,  либо символ параметра DOS,  за которым не следует ни один
из допустимых параметров. Возможно вы указали параметр в неверном
регистре.

     Unknown preprocessor directive: идентификатор
Сообщение об ошибке этапа компиляции

     (неизвестная директива препроцессора)

     Компилятор обнаружил в начале строки символ #,  но последую-
щее имя не является допустимым именем директивы, либо неправильно
сформирована остальная часть директивы.

     Unknown preprocessor statement
Сообщение об ошибке утилиты MAKE

     (неизвестный оператор препроцессора)

     В начале строки обнаружен символ !,  но следующим далее име-
нем не является имя error,  undef,  if,  elif,  include, else или
endif.

     Unreachable code
Предупреждение этапа компиляции

     (недостижимый код)

     За break, continue, goto или return не следует метка или ко-
нец цикла  либо функции.  Компилятор проверяет циклы while,  do и
for на анализ константы (условия) и  пытается  распознать  циклы,
которые не проходятся целиком.

     Undeterminated string or character constant
Сообщение об ошибке этапа компиляции

     (незавершенная строка или символьная константа)

     Компилятор не обнаружил  закрывающую  кавычку  после  начала
строки или символьной константы.

     Use of . or -> to call функции
Сообщение об ошибке этапа компиляции:

     (использование для вызова функции . или ->)

     Вы пытаетесь вызвать функцию-элемент, не задавая объект.

     Use of . or -> to call элемент, or & to take its address
Сообщение об ошибке этапа компиляции:

     (использование для  вызова элемента .  или -> или операции &
     для получения его адреса)

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

     Use :: to take the address of a member function
Сообщение об ошибке этапа компиляции

     (для получения адреса функции-элемента используйте ::)

     Если f - это функция-элемент класса с, вы можете получить ее
адрес с помощью синтаксиса &c::f.  Обратите внимание на использо-
вание имени  типа класса,  а не имени объекта,  и на операцию ::,
отделяющую имя класса от имени функции.  (Указатели  функций-эле-
ментов не являются подлинными типами указателей,  и они не ссыла-
ются на конкретных элемент класса.)

     use /e with TLINK to obtain debug information from library
Сообщение об ошибке утилиты TLIB

     (используйте параметр компоновщика /e для получения отладоч-
     ной информации из библиотеки)

     Библиотека была построена с расширенным словарем и включени-
ем отладочной информации. TLINK не будет извлекать отладочную ин-
формацию, если он выполняет компоновку с  использованием  расши-
ренного словаря,   поэтому,   чтобы   получить   при   построении
выполняемого файла отладочную информацию из библиотеки, компонов-
щику нужно  сообщить с помощью параметра /e,  что нужно игнориро-
вать расширенный словарь.

     Замечание: Компоновщик интегрированной среды не поддерживает
расширенный словарь,  следовательно в интегрированной среде пара-
метры менять не нужно.

     Use of : and :: dependent for target цель
Сообщение об ошибке утилиты MAKE

     (использование зависимости :: и : для целевого файла)

     Вы пытаетесь  использовать  целевой  файл в одиночном и мно-
жественном блоке описания (с помощью операций : и ::). Например:

     filea: fileb
     filea:: filec

     Use qualified name to access nested type тип
Предупреждение этапа компиляции

     (использование уточненного имени для  доступа  к  вложенному
     типу)

     В старых  версиях Си и С++ определения typedef и имена приз-
наков. описанные внутри классов, были  непосредственно доступны в
глобальной области  действия.  В последних спецификациях С++ этим
именам, если они должны использоваться вне  области  действия  их
класса, должен предшествовать  квалификатор  class::квалификатор.
Чтобы можно было компилировать старый код,  когда такое имя опре-
деляется в отдельном классе,  Borland C++ допускает использование
без class:: и выводит данное предупреждение.

     User break
Сообщение об ошибке утилиты TLINK или ошибка этапа компиляции

     (прерывание пользователя)

     При компиляции или компоновке в интегрированной среде вы на-
жали клавиши Ctrl-Break, прервав процесс. (Это не ошибка, а прос-
то подтверждение.)

                            - V -

     v86 task without vcpi
Фатальная ошибка сервера DPMI

     (задача v86 без vcpi)

     Выполняется другая прикладная задача, не позволяя обслужива-
ющей программе  DPMI  переключиться  в защищенный режим.  Удалите
мешающую прикладную программу (например,  администратор оператив-
ной области или отладчик), затем перезагрузитесь.

     Value of type void is not allowed
Сообщение об ошибке этапа компиляции

     (значение типа void не допускается)

     Значение типа void на самом деле вовсе не является значением
и, таким образом,  не может появляться в контексте, где требуются
фактические значения. Такой контекст включает в себя правую часть
присваивания, аргумент функции,  и управляющие выражения операто-
ров if, for или while.

     Variable переменная has been optimized
Сообщение об ошибке этапа компиляции

     (переменная оптимизирована)

     Вы пытаетесь  проверить переменную,  посмотреть ее значение,
или обратиться другим образом к переменной,  которую удалил опти-
мизатор. Данной  переменной никогда не присваивается значение,  и
она не имеет адреса в стеке.

     Variable идентификатор is initialized more than once
Сообщение об ошибке этапа компиляции

     (переменная инициализируется несколько раз)

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

     'virtual' can be used with member function
Сообщение об ошибке этапа компиляции

     ('virtual' можно использовать с функцией-элементом)

     Элемент данных  описан  со  спецификатором  virtual.  Только
функции элементы могут описываться как виртуальные.

     Virtual function функция conflict with base class база
Сообщение об ошибке этапа компиляции

     (виртуальная функция противоречит базовому классу)

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

     virtual specified more than once
Сообщение об ошибке этапа компиляции

     (virtual задается несколько раз)

     Зарезервированное слово virtual С++ может встречаться только
в описании функции-элемента.

     void & is not a valid type
Сообщение об ошибке этапа компиляции

     (void не является допустимым типом)

     Ссылка всегда ссылается на объект,  но объект не может иметь
тип void. Таким образом, тип void здесь не допускается.

     Void functions may not return a value
Предупреждение этапа компиляции

     (функции void не могут возвращать значение)

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

                            - W -

     функция was priviously declared with the language язык
Сообщение об ошибке этапа компиляции

     (функция ранее была описана с языком язык)

     Для данной  функции  в операторе extern может использоваться
один язык. В разных частях одного модуля эта функция была описана
с разными языками.

     While statement missing (
Сообщение об ошибке этапа компиляции

     (в операторе while пропущена скобка ()

     В операторе while после ключевого слова while  компилятор не
нашел левую скобку.

     While statement missing )
Сообщение об ошибке этапа компиляции:

     (в операторе while пропущена скобка ))

     В операторе while после ключевого слова while  компилятор не
нашел правую скобку.

     Write failed, disk full?
Фатальная ошибка утилиты TLINK

     (сбой записи, диск переполнен?)

     Данная ситуация возникает, когда TLINK не записывает на диск
все записи, которые он пытается записать.Почти наверняка это выз-
вано переполнением диска.

     Wrong number of arguments in call macro макрокоманда
Сообщение об ошибке этапа компиляции:

     (неверное число аргументов в вызове макрокоманды)

     В вашем  исходном  файле имеется макрокоманда с некорректным
числом аргументов.



Яндекс цитирования