Расширение структур возможностью автосоздания дополнительных операций над элементами. Условно выражаясь, это методы доступа к элементам структуры.
На данный момент определены следующие методы:
- @ получить значение из элемента;
- ! присвоить значение элементу;
- I увеличить значение элемента на 1;
- D уменьшить значение элемента на 1;
- +! добавить число к значению элемента и сохранить;
- zero обнулить значение элемента;
- E выполнить код, хранящийся в элементе.
Не для каждого элемента будет скомпилирован тот или иной метод. Поскольку для некоторых элементов методы не определены, или не могут существовать вообще.
К примеру, если размер элемента не равен CELL ,то метод E будет проигнорирован.
Обозначение методов это обычные константы у которых установен соответсвующий бит. Все константы перечислены в словаре flags. Но чтобы не лазить каждый раз в этот словарь данная библиотека имеет свой NOTFOUND.
Поэтому для задания методов можно перечислить обозначающие их флаги через / (обратную косую черту). Эти флаги будут объединены в одно число операцией OR.
Пример синтаксиса: !/@/E
Библиотека предоставляет слова для определения своих методов (см. слово CREATE-M). Но у методов есть ограничение, методы должны быть примитивами, поскольку они все метятся флагом INLINE . Данное ограничение было сделано для возможности определения методов во временных словарях ради последующего сокрытия деталей и экономии памяти.
Чтобы создать элемент структуры вместе методами доступа к нему используйте слово --m
Это слово работает как и -- , но дополнительно принимает битовый перечень методов в качестве первого параметра.
Пример кода:
STRUCT: weapon
CELL !/@ --m NAME
1 !/@ --m NAME-LEN
2 !/@ --m AMMO-CODE
CELL !/@/E --m FIRE-FUN
CELL !/@/zero/I/D --m AMMO
STRUCT;
Вместе со смещениями будут скомпилированы:
NAME! NAME@ AMMO++ AMMO-- FIRE-FUN-EXEC FIRE-FUN! FIRE-FUN@ и проч.
После загрузки библиотеки необходимо добавить в контекст словарь STRUCT&METHODS