FORTH_beginner, 21.09.2003 11:56:20:
Хоть и работает, но вот это до конца не могу переварить (как это присходит на низком уровне? ):
На самом деле, ядро Форта - самое простое среди всех языков
Никаких опережений по тексту, программа исполняется слово за словом. Каждое слово что-то меняет на стеке, что-то туда кладёт.
: FindWindowEx \ определить новое слово с указанным именем.
( p-win ch1-win $class $win — hwnd) \ просто комментарий, где рассказывается что делает слово
DROP \ снять число со стека. Просто удалить. Длина у $win нам не интересна
SWAP \ поменять местами два числа на вершне стека
DROP \ опять удалить. теперь это длина $class
SWAP \ опять меняем
ROT \ операция "прокрутки" Достём со стека 3-е число: a b c b c a
3 ROLL \ достаём 4-е число )отсчёт от "0": a b c d b c d a
FindWindowExA \ вызываем с получившимися данными в стеке WinAPI-функцию.
\ стот помнить, что C/C++ в стек запихивает параметры в обратном порядке. Сперва самый последний, в конце - первый. Просто для func(a,b,c,d...) компилятор сам запихнёт сперва d, потом c, ... потом a, а в Форте в таком порядке надо и самому помещать. Впрочем, можно определить слово, которое поменяет местами N чисел в стеке
; \ точка с запятой - завершает определение слова, начатое двоеточием.