Acode minor directives supported by acdc 12.36
Terminology
All declared entities may be referenced by any synonyms (vocabulary ones
or not) assigned to them.
Value bearing entities are global variables, local variables, objects,
places, and texts.
A variable is either a global or a local variable.
A variable may hold either a value or a reference (pointer) to some
declared entity other than a local variable. The A-code kernel can tell
the difference between between values and references.
Automatic dereferencing of variables which point to some entity is
signalled by suffixing directive arguments in the below list by *.
Only one level of dereferencing is automatic.
A value is a literal number, a symbolic constant, or the value of a
value-bearing entity. NB references are also values and may be
manipulated as such, unless automatic de-referencing is indicated.
A vocabulary word is a verb or a name of an object or a location, which
can be used by the player.
Conditionals
Conditionals evaluate to true or false. If true, the immediately following
code block is executed. If false, execution skips the immediately
following code block.
- IFEQ X Y
- Both X and Y are values. True iff X == Y
- IFNE X Y
- Both X and Y are values. True iff X != Y
- IFLT X Y
- Both X and Y are values. True iff X < Y
- IFLE X Y
- Both X and Y are values. True iff X <= Y
- IFGT X Y
- Both X and Y are values. True iff X > Y
- IFGE X Y
- Both X and Y are values. True iff X >= Y
- IFAT X* [Y* ...]
- X (and Y etc...) is a location.
True iff the player is currently at any of the specified locations.
- IFHAVE X* [Y]
- X is an object. Y is optional and can be either a value or an object
flag. True iff the nominated object is carried by the player and (if
Y is specified) in the state indicated by Y, or has the Y flag set.
- IFHERE X* [Y]
- X is an object. Y is optional and can be either a value or an object
flag. True iff the nominated object is in the same location as the
player and (if Y is specified) in the state indicated by Y, or has
the Y flag set.
- IFNEAR X* [Y]
- X is an object. Y is optional and can be either a value or an object
flag. True iff the nominated object is carried by the player or is in
the same location as the player and (if Y is specified) in the state
indicated by Y, or has the Y flag set.
- IFLOC X* Y* [Z* ...]
- X is an object. Y (and Z etc...) is a place. True iff the nomonated
object is at any of the listed locations.
- IFIS X Y [Z ...]
- X is a local or global variable. Y, and any further optional arguments,
is a referrable entity (object, place, text or variable). True iff X is
a pointer to Y.
- IFINRANGE X Y Z
- All three arguments are values. True iff Y <= X <= Z
- IFKEY X* [Y* ...]
- X (and Y etc...) is a vocabulary word. True iff all of the specified
arguments occur in the player's command.NB: Due to the current
limitations of the A-code parser, any IFKEY directive with more than
two arguments will always return false.
- IFANY X* [Y* ...]
- X (and Y etc...) is a vocabulary word. True iff any of the specified
arguments occur in the player's command.
- IFFLAG X* [Y*]
- X is a flag bearing entity. Y is a flag. True iff the entity X has
the flag Y set. If the entity is of a kind without flags, the test
returns FALSE.
- IFHTML
- True iff the program is running in the HTTP server mode or the CGI mode.
- IFCGI
- True iff the program is running in the CGI mode.
- IFDOALL
- True iff the program is in the command loop processing the ALL psudo-
object.
- IFTYPED X
- X is a literal token. True iff the token matches a word actually
entered by the player in the command, with no abbreviation or typo
processing.
- CHANCE X*
- True with the probability of X%.
- QUERY X*
- X is a text, which is displayed to the player. True iff the player replies
with anything starting with y or Y. (NB: Cannot be used in the CGI mode!)
Conditional connectives
NB: tests which cannot affect the result, are
not evaluated.
- NOT
- negates the immediately following test.
- AND
- requires both the test so far and the subsequent tests to be true.
- OR
- requires the test so far and/or the subsequent tests to be true.
- XOR
- requires the test so far *or* the subsequent tests to be true (but
not both!)
Conditional block delimiters
- ELSE
- Head of code block to be executed if a conditional evaluates to false.
- FIN
- End of conditional (primary or alternative) or iterative code block.
- OTHERWISE
- End of an alternative code. Expects a conditional as the next statement.
- EOT
- Deprecated sysnonym of FIN.
Deprecated conditionals
These are equivalent to the indicated
directives, except that they can only have the primary code block
associated with them, which must be terminated by a major directive
(rather than by ELSE, OTHERWISE or FIN).
- KEYWORD use IFKEY instead
- HAVE use IFHAVE instead
- NEAR use IFNEAR instead
- HERE use IFHERE instead
- ATLOC use IFAT instead
- ANYOF use ifany instead
Iterative directives
- ITOBJ X [Y* ...]
- X is a variable. Y (etc...) is either a place or a flag. Causes the
immediately following code block (terminated by FIN) to be executed
repeatedly, with the variable X iterating (as a pointer) through all
objects matchine the specified criteria (or just all objects if no
criteria specified). If there are no matching objects, the code block
is skipped. NB: As far as the kernel is concerned, an object has a
unique location, even if it is tagged as schizoid.
- ITLOC (ITPLACE) X [Y* Z*]
- X is a variable. Y and Z are places. Causes the associated code block
to be executed repeatedly, with the variable X iterating through
all locations or (if Y and Z present) from location Y to location Z.
In its three argument form this directive is completely equivalent
to ITERATE with those three arguments.
- ITERATE X Y* Z*
- X is a variable. Y and Z are some entities or values. Causes the
associated code block (terminated by FIN) to be executed repeatedly,
with the variable X iterating through the indicated range.
- NEXT
- Skip the rest of the iteration black and proceed with the next iteration.
- BREAK
- Break out of the iteration block.
- EOI
- Deprecated end of iteration block. Use FIN instead.
Player command fiddling
- FAKEARG X* Y*
- X and Y are both vocabulary words (verb, place or object). If X is used
in the command being processed, pretend that the word Y was used
instead, but without altering the command itself
- FAKECOM X* Y*
- X and Y are both vocabulary words (verb, place or object). If X is used
in the command being processed, pretend that the word Y was used instead.
Unlike FAKEARG this directive also fiddles the text string of the command
to change it to the text string appropriate for Y.
- VERBATIM {ARG1|ARG2}
- Set ARG1 or ARG2 text to whatever corresponding string player
actually typed.
Program control
- LOCAL X
- Declares a local variable. All local declarations must come immediately
after the PROCEDURE major directive, before any executable code.
- CALL X* [Y ...]
- X is a verb a place (or place reference) or a procedure. Any optional
arguments (Y etc...) are passed by value as parameters of the called
-procedure.
- PROCEED
- Return from the current procedure (or jump to the next INIT or REPEAT
section if not in a procedure.)
- QUIT
- Restart processing of REPEAT sections from the beginning.
- STOP
- Exit the A-code program
Player movement
- GOTO X*
- X is a location or location reference. Relocates the player to
the indicated location. (Strictly speaking, a synonym of MOVE)
- MOVE [X ...] Y*
- X (etc...) is a vocabulary word.
Y is a place or a place reference. If no optional argument are given,
exactly equivalent to GOTO Y. If optional arguments given, player
is moved to Y only if any the the indicated vocabulary words are
present in the player's command.
- SMOVE [X ...] Y* Z*
- X (etc...) is a vocabulary word.
Y is a place or a place reference. Z is a text reference.
If no optional arguments are given, or of one of the optional
arguments is a vocabulaty word used in the player's command,
the player's location is changed to Y and the text Z is output.
NB: Could make Z* optional and fold all three of GOTO, MOVE and SMOVE into
one directive (MOVE) with GOTO and smove as deprecated synonyms.
Text generation
- SAY X* [Y*]
- X is a text, an object or a place. Y is a value. Outputs text X,
with the explicit qualifier Y.
- RESAY X* [Y*]
- Like SAY, but first zaps all text accumulated so far.
- QUIP X* [Y*]
- X is a text, an object or a place. Y is a value. Outputs text X,
with the explicit qualifier Y and then "quits", i.e. restarts
the REPEAT loop from the top.
- RESPOND X* [...] Y* [Z*]
- X (etc...) is a vocabulary word
(verb, object or place). Y is a text, an object or a place. Z is
a value. If any of the specified vocabulary words occur in the
player's command, outputs the text of Y, with the explicit qualifier Z
and then "quits", i.e. restarts the REPEAT loop from the top.
NB: QUIP really ought to be a synonym, with X being optional too.
- DESCRIBE X* [Y*]
- X is an object or a place. Y is a value. Outputs the most detailed
description of X, explicitly qualified by Y.
- VOCAB W X Y [Z]
- W is a verb a place or an object. X is a place, an object or zero.
Y is a flag or zero. Optional argument Z is a text. Used to construct
dynamic vocabulary listing. Outputs the main vocabulary word for W, or
a replacement text Z of present, iff the conditions specified by X and Y
are satisfied. If Y is zero, output is unconditional. Otherwise the flag
Y is tested for entity X, or if that is specified as 0, on the entity W
itself. NB Bad syntax. Maybe reimplement as W [Z] [X] [Y] ?
- APPEND X* [Y*]
- X is a text, an object or a place. Y is a value. Removes any
line feeds from the end of text generated so far, then outputs text X,
with the explicit qualifier Y.
- VALUE X* [Y*]
- Deprecated equivalent of SAY, which interpreted the placeholder # as
meaning the value of an entity,rather than as its associated primary word.
Use the $ placeholder and SAY instead.
Various stuff
- FLAG X Y
- X is a flaggable entity (a variable, a place or an object). Y is a flag.
Sets flag Y for entity X.
- UNFLAG
- X is a flaggabe entity. Y is a flag.
Clears flag Y for entity X.
- INPUT [X*]
- X is a text (optional replacement prompt). Outputs text X (if specified)
and obtains player's input.
- DEFAULT {X* [Y]|Y}
- X is a place. Y is an object flag. If player's command
specified a verb but not an object, use -- if uniquely identified --
the obejct specified by X and/or Y. If Y is present, the object must have
the the Y flag set. If X is present, the object must be at the location X.
If both X and Y are present, both conditions must apply. If no object
or multiple objects satisfy the criteria, do nothing. If a unique match
found, fake the relevant pert of the command as if the player nominated
that object. If no match is found, ARG2 is set to 0. If multiple
matches fuond ARG2 is set to AMBIGWORD.
- DOALL {X* [Y]|Y}
- X is a place, Y is an object flag.
Apply the verb of the player's command in repeated execution of the
whole REPEAT loop, iterating ARG2 (and faking the input word) through
objects according to the specified criteria. If Y is specified, the object
must have the flag Y set. If X is specified, the object must be in
location X.
- FLUSH
- Flush the remainder of the player command (in case it was a compound one)
and abort the DOALL loop if one is in progress.
- EXEC X* Y
- X is a constant or a variable. Y is a variable. Execute a special action
indicated by X, possibly returning some outcome value in the variable Y.
(See the separate list of special actions for the meanings of values of
X.)
- SVAR X Y
- X is a constant (4 or 5 for backward compatibility). Y is a variable.
If X is 4, returns local time hour in Y. If X is 5, returns local
time minute in Y. STYLE 1 legacy.
Arithmetic and pointers
- SET X Y
- X is a value bearing entity. Y is a value. Sets the value of X to Y.
- ADD X Y
- X is a value bearing entity. Y is a value. Increase the value of
X by Y.
- SUBTRACT X Y
- X is a value bearing entity. Y is a value. Reduces the value of
X by Y.
- MULTIPLY X Y
- X is a value bearing entity. Y is a value. Sets the value of X
to the product of the original value of X and Y.
- DIVIDE X Y
- X is a value bearing entity. Y is a value. Sets the value of X
to the result of integer division of X by Y.
- NEGATE X
- X is a value bearing entity. Negates the value of X.
- RANDOM X Y
- Sets the value of X to a random integer in the range 0 to Y-1.
- INTERSECT X Y
- X is a value bearing entity. Y is a value.
Sets the value of X to be a bitwise and of X and Y.
- CHOOSE X Y Z
- X is a value bearing entity. Y and Z are values.
Sets the value of X to a random number in the range Y to Z-1 (or Z?)
- RANDOMISE X Y
- X is a place, object or text. Y is a positive value. If N is the number of
all possible switch configurations in the text associated with X,
sets the value of X to a random number between Y and N-1. NB: Y must be
less than N.
- LDA X Y
- X is a variable. Y is a named entity. Sets X to be a pointer to Y.
- EVAL X Y
- X is a variable. Y is a variable pointing to a value bearing entity. Sets
X to the value of the entity pointed at by Y.
- DEPOSIT X Y
- X is a variable pointing to a value bearing entity. Y is a value.
Sets the value of the entity pointed at by X to Y.
- TIE X Y [...]
- X is a value holder other than a local variable. Y (etc...) is a text.
Makes the value of Y (etc...) to be a pointer to X.
Object location
- GET X*
- X is an object. Moves the object into player's
inventory. Equivalent to APPORT X INHAND.
- DROP X*
- X is an object. Moves the object from player's
inventory to his current location. Equivalent to APPORT X HERE.
- APPORT X* Y*
- X is an object. Y is a place or place reference.
Moves object X to place Y.
- LOCATE X, Y*
- X is a variable. Y is an object. Sets X to be a
pointer to the current location of Y.
Debugging
CHECKPOINT
Output text "Checkpoint: , line n"
DUMP
Dump the game state in a human readable format (requires the presence
of xreference listings generated by acdc). Experimental.
Save and restire directives
SAVE FILE
Perform EXEC 1
SAVE MEMORY
Perform memory save.
SAVE COMMAND
Perform EXEC 23
SAVE VALUE, X
X is a variable. Perform EXEC 6, X
RESTORE FILE
Perform EXEC 2
RESTORE MEMORY
Perform memory restore.
RESTORE COMMAND
Perform EXEC 24
RESTORE VALUE, X
X is a variable. Perform EXEC 7, X
DELETE
Perform EXEC 3. Not fully implemented yet
SAVEDLIST COUNT
Not fully implemented yet
SAVEDLIST SHOW
Not fully implemented yet
Undo stuff
Uses automatic variable UNDO.STATUS with automatic variable flags
UNDO.NONE, UNDO.OFF, UNDO.INFO, UNDO.TRIM, UNDO.BAD, UNDO.INV
- UNDO ARG2
- Undo the number of moves indicated by the text of ARG2. The number
is deemed to be 32767 if the text is ALL, otherwise 1, if the text is not a
number.
- REDO ARG2
- Undo the number of moves indicated by the text of ARG2. The number
is deemed to be 32767 if the text is ALL, otherwise 1, if the text is not a
number.
|