User Tools

Site Tools


zxt:extension:00000000:0001

00000000:0001 - #IFEXT

Information

  • ID: 00000000:0001

Flags

Flag Set? (MUST/MAY/…) Description
parsing_must MUST NOT
reading_must MUST NOT
writing_must MUST NOT
playing_should MAY If any #IFEXT calls are used in Objects with the described caveat for optional support.
playing_must MAY If any #IFEXT calls are used in Objects.
editing_should MUST NOT

Field data

None.

Description

This extension adds an OOP command which faciliates run-time detection of extensions on both ZZT 3.2 and ZXT-compatible implementations. The command is #IFEXT owner_id selector_id …, where owner_id and selector_id are specified as 32-bit and 16-bit hexadecimal numbers, respectively. If the extension with a given owner_id and selector_id is currently active within the execution context, the rest of the line is treated as a command.

Keep in mind that to support #IFEXT as an optional extension, an :IFEXT label SHOULD be provided to handle the situation in which this extension is not present.

Example usage

Simple scenario

#ifext 00000000 0001 found
:found
Extensions found!
#end
:ifext
Extensions not found.
#end

Two touch codepaths

@Interactive
#ifext 00000000 0001 zap touch
:ifext
#end
:touch
I found nothing...
#end
:touch
I found IFEXT support!
#end

Two touch codepaths (#BIND workaround)

If the code above is bound, :TOUCH might end up being zapped multiple times. This code takes care of that:

@Interactive
#send init
#end
:init
#zap init
#ifext 00000000 0001 zap touch
:ifext
#end
:touch
I found nothing...
#end
:touch
I found IFEXT support!
#end

An alternative, more advanced technique is pre-setting the instruction pointer in an external editor.

Implementations

zxt/extension/00000000/0001.txt · Last modified: 2021/08/07 00:26 by asie