record.f
Работа с записями
Упрощенная работа с записями. Описанные поля ведут себя примерно как
переменные VALUE, то есть для доступа к ним не нужно слово @.
RECORD: ( ->bl; -- a off )
Начать описание новой записи. Имя записи станет константой, возвращающей
длину записи в байтах.
RECORDEX: ( ->bl; off1 -- a off2 )
Начинает описание новой записи, в которую в начале входит старая запись.
На стеке передается размер старой записи.
RECORD; ( a off -- )
Завершает описание записи.
RECORDEX; ( a off -- )
То же, что и RECORD;. Введено для удобства.
cell ( ->bl; off1 -- off2 )
Описывает поле длиной в ячейку. Синонимы DWORD,
HWND, INT, UINT, LPSTR, HICON введены
для удобства переделки заголовочных файлов С.
word ( ->bl; off1 -- off2 )
Описывает поле длиной в 16-разрядное слово. Синоним: _WORD.
byte ( ->bl; off1 -- off2 )
Описывает поле длиной в ячейку. Синоним: BYTE.
bytes ( ->bl; off1 n -- off2 )
Описывает поле-массив длиной в n байтов. Полученное поле будет
всегда возвращать свой адрес, независимо от предшествующих слов =>
и AT. Синоним: TCHAR.
POINT ( ->bl; off1 -- off2 )
Поле в 8 байтов. Для упрощения описания соответствующего типа Windows.
RECT ( ->bl; off1 -- off2 )
Поле в 16 байтов.
GUID ( ->bl; off1 -- off2 )
Поле в 16 байтов.
=> ( n -- )
Вызов следующего поля сработает как занесение значения в это поле.
AT ( -- )
Вызов следующего поля сработает как запрос на адрес этого поля.
RECORD: #osversioninfo
DWORD :vOSVersionInfoSize
DWORD :vMajorVersion
DWORD :vMinorVersion
DWORD :vBuildNumber
DWORD :vPlatformId
128 TCHAR :vCSDVersion
RECORD;
WINAPI: GetVersionExA KERNEL32.DLL
: OSver
#osversioninfo => HERE :vOSVersionInfoSize
HERE GetVersionExA .
HERE :vMajorVersion .
HERE :vMinorVersion .
HERE :vBuildNumber .
HERE :vPlatformId .
HERE :vCSDVersion ASCIIZ> TYPE
;
OSver