А это - мой вклад в решение наболевшей проблемы загрузки констант Windows, которые даже для небольшой программки требуются тоннами. Насколько я знаю, мои коллеги просто описывают их с помощью CONSTANT. Это не только утомительно, но и чревато лишними ошибками. Кроме того, все определения констант так и остаются потом в памяти, когда они там вовсе не нужны. Памяти сейчас у нас, конечно, много, но все равно жалко.
Мои константы грузятся в начале компиляции и выгружаются после ее окончания. Хранятся константы в двоичном файле специального формата, оптимизированном для быстрого поиска. Имеется два таких файла: windows.const, в который засунуты константы из kernel32.dll, user32.dll, gdi32.dll и commctrl.const. Константы регистронезависимы, чтобы ни у кого не возникало проблем, как правильно писать: Win_HangOnKeyDown или win_HangOnKeydown.
Загрузить список констант из файла, имя которого задано строкой a #. Загружать можно несколько файлов подряд, во время поиска они будут просматриваться по порядку, начиная с последнего загруженного.
Стандартные константы из windows.const грузятся при загрузке библиотеки.
REMOVE-ALL-CONSTANTS ( --)Удалить из памяти все загруженные списки констант.
FIND-CONSTANT (a # -- n true / false)Основное слово для поиска. Ищет константу, заданную строкой a # во всех загруженные списках констант, начиная с самого последнего, и возвращает числовое значение найденной константы и true; false - если константа не найдена.
W: ( ->bl; -- n)Выбрать следующее слово, найти его в списке констант и вернуть значение
(* ( ->"*)"; -- n)Выбрать все слова, пока не встретится *), найти их значения и объединить с помощью OR. Вся эта сложная конструкция должна размещаться на одной строке.