wincons.f  Загружаемые константы

А это - мой вклад в решение наболевшей проблемы загрузки констант Windows, которые даже для небольшой программки требуются тоннами. Насколько я знаю, мои коллеги просто описывают их с помощью CONSTANT. Это не только утомительно, но и чревато лишними ошибками. Кроме того, все определения констант так и остаются потом в памяти, когда они там вовсе не нужны. Памяти сейчас у нас, конечно, много, но все равно жалко.

Мои константы грузятся в начале компиляции и выгружаются после ее окончания. Хранятся константы в двоичном файле специального формата, оптимизированном для быстрого поиска. Имеется два таких файла: windows.const, в который засунуты константы из kernel32.dll, user32.dll, gdi32.dll и commctrl.const. Константы регистронезависимы, чтобы ни у кого не возникало проблем, как правильно писать: Win_HangOnKeyDown или win_HangOnKeydown.

Список слов

LOAD-CONSTANTS (a # --)

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

Стандартные константы из windows.const грузятся при загрузке библиотеки.

REMOVE-ALL-CONSTANTS ( --)

Удалить из памяти все загруженные списки констант.

FIND-CONSTANT (a # -- n true / false)

Основное слово для поиска. Ищет константу, заданную строкой a # во всех загруженные списках констант, начиная с самого последнего, и возвращает числовое значение найденной константы и true; false - если константа не найдена.

W: ( ->bl; -- n)

Выбрать следующее слово, найти его в списке констант и вернуть значение

(* ( ->"*)"; -- n)

Выбрать все слова, пока не встретится *), найти их значения и объединить с помощью OR. Вся эта сложная конструкция должна размещаться на одной строке.

Пример
S" wincons.f" INCLUDE
...
W: wm_Quit OF ... ENDOF
...
(* ws_Overlapped ws_SysMenu ws_Minimizebox ws_Vscroll ws_Caption *)