Сказание о виртуальных словах. Я уже успел убедиться, как полезно бывает сделать какое-то слово виртуальным. В одном из приложений я ввел VECT FIX-IT, ко- торое выполнялось после того, как на стек попадал результат об- работки данных из порта. В FIX-IT можно было записывать указате- ли на: 1) . (просто точка). 2) DROP 3) H-STDOUT >R " PRN" 1+ OPEN TO H-STDOUT . CR H-STDOUT CLOSE R> TO H-STDOUT 4) TO MAX-ELEM TYPELIST (это вывод на экран списка данных) Насколько это оказалось удобнее! Тем не менее это всего лишь приложение. А что будет, если сделать парочку-другую слов ядра виртуальными? Ниже я привожу некоторые свои размышления по этому вопросу. Прежде всего, виртуальными ну просто обязаны быть NUMBER и LITERAL. О том, что это дает, см. float.f Конечно, если кому-то нравится получать 3 в ответ на 14 4 / . , то пожалуйста. Я, например, предпочитаю увидеть 3.5000000000Е0. Но это, вероятно, особых сомнений не вызывает. Сомнения вызовет следующее: (Далее следуют рассуждения, основанные на том, что работа происходит под управлением ДОС!!!) 1) Желательно было бы сделать виртуальным EMIT. Во-первых, вывод в файл, реализованный в СП-Форте, удобнее, но, с другой стороны, медленнее. Если же он будет виртуальным, то в особо от- ветственных случаях можно (прямо с клавиатуры) переключить EMIT на исполнение той версии слова, которая наиболее подходит к дан- ной ситуации. Если вывод идет только на экран - пусть работает вызов функции BIOS, если непонятно куда - пусть голова болит у MS-DOS. В конце концов, можно заставить выполнять и прямой вывод в видеопамять. Мыше виртуальный EMIT тоже не помешает. Мышиный драйвер имеет привычку восстанавливать экран, но восстанавливает его в то состояние, которое было при последнем перемещении мыши. Если же курсор поставить куда-нибудь справа от обычного курсора, а потом что-нибудь набрать так, чтобы один из символов оказался под мышой, то при перемещении мыши там будет восстановлено пус- тое место. Возможен следующий варварский метод решения этой проблемы: 1) Слово, которое показывает курсор мыши, устанавлива- ет новый EMIT, который выглядит следующим образом. : EMIT15 ( четырнадцать вариантов при виртуальном слове - это нормально ) HIDE-MOUSE EMIT3 SHOW-MOUSE ; То есть: спрятали мышь, вывели символ, показали мышь. Спря- тать и показать можно через INT 33 с AX=2 и AX=1. 2) Слово, которое убирает курсор мыши, восстанавливает заодно и "нормальный" EMIT. Наконец, принципиальный вопрос: зачем Форту обрабатывать события? Пусть события сами себя обрабатывают. Что для этого нужно, спрашиваете? Правильно - (дальше читайте, если только с нервами все в порядке) виртуальный EXPECT. Обычно он вызывает соответствующую функцию ДОС для чтения строки. При этом все мно- гообразие мышино-функционально-клавишного интерфейса не действу- ет и приходится исхитряться, чтобы куда-нибудь вставить проверку этих событий. А если будет виртуальный EXPECT, то его можно зас- тавить исполнять такую свою версию, которая, проверяя клавиши, заодно проверит и нажатие функциональных клавиш со всеми Shift, Ctrl, Alt, а также и нажатие мышки (см. выше - подключение мыши переопределяет не только EMIT, но и EXPECT, который теперь про- веряет не только функциональные клавиши, но и мышиные кнопки; если же мышь не показана - проверяются только клавиши). Нажатие же этих штуковин вызывает выполнение опять-таки виртуальных слов. Например ' LOAD-FILE TO И все. Нажатие CtrlF3 само вызовет слово, загружающее файл. А, скажем, нажатие левой кнопки мыши оставляет на стеке координаты места, где это произошло и тоже что-ниудь вызывает. Здесь можно попробовать реализовать и такую идею: 1) Есть меню. 2) Оно напечатано на экране. 3) Есть мышка. 4) Курсор мышки подводится к пункту меню и нажимается левая кнопка. 5) Это самое нажатие левой кнопки вызывает исполнение сло- ва, которое делает следующее. 1. Прямо из видеопамяти (режим у нас текстовый) читает символ. 2. Идет влево по строке до пробела или до левого края экрана. 3. Точно так же идет вправо. 4. Получили слово (чтением его из видеопамяти!!!!!!!!!) 5. Ищем его словаре. 6. Выполняем (оно может просто печатать "выпадающее ме- ню"). 7. Если требуются разные действия в зависимости от того, где произошел "щелчок", то у нас ведь на стеке были координаты - проверили их, и если строка нижняя (или верхняя, в общем, строка меню) - то делаем вышеизложенное, нет - еще чего-нибудь делаем. 8. В конце концов, есть ведь еще и атрибут, который тоже можно читать прямо из видеопамяти. Если, например, атрибут крас- ное на желтом (меню), то ищем слово, если желтое на синем (окно редактирования), то устанавливаем туда курсор. Вот такие у меня бывают мысли. 8.08.96. И.Е. Тарасов.