|
|
1.1 root 1: .NH
2: Built-in Functions
3: .PP
4: The following functions are built-in functions available to the
5: \s-2DDL\s+2
6: programmer. These functions are the heart of the
7: \s-2DDL\s+2
8: system and are
9: the means whereby the
10: \s-2DDL\s+2
11: routines manipulate all system data. Thus,
12: these functions completely describe the facilities of the
13: \s-2DDL\s+2
14: system.
15: .NH 2
16: Functions on objects
17: .IP "\fB$loc \fR" 8
18: ($loc \fIobj\fR) \(-> The container of \fIobj\fR.
19: .IP "\fB$cont \fR" 8
20: ($cont \fIobj\fR) \(-> First item contained in \fIobj\fR.
21: .IP "\fB$link \fR" 8
22: ($link \fIobj\fR) \(-> The next object in the same node as \fIobj\fR.
23: .IP "\fB$ldisc \fR" 8
24: ($ldisc \fIobj\fR) \(-> The routine ID for the long description of \fIobj\fR.
25: .IP "\fB$sdisc \fR" 8
26: ($sdisc \fIobj\fR) \(-> The routine ID for the short description of \fIobj\fR.
27: .IP "\fB$rtn \fR" 8
28: ($rtn \fIobj\fR) \(-> The ACTION routine for \fIobj\fR.
29: .IP "\fB$prop \fR" 8
30: ($prop \fIobj\fR \fIpropnum\fR) \(-> returns the value of the \fIpropnum\fR'th property
31: of \fIobj\fR.
32: .NH 2
33: Arithmetic Funcions
34: .IP "\fB$plus \fR" 8
35: ($plus \fIarg1\fR \fIarg2\fR) \(-> \fIarg1\fR+\fIarg2\fR
36: .IP "\fB$minus \fR" 8
37: ($minus \fIarg1\fR \fIarg2\fR) \(-> \fIarg1\fR-\fIarg2\fR
38: .IP "\fB$times \fR" 8
39: ($times \fIarg1\fR \fIarg2\fR) \(-> \fIarg1\fR*\fIarg2\fR
40: .IP "\fB$quotient \fR" 8
41: ($quotient \fInum den\fR) \(-> [\fInum\fR/\fIden\fR]
42: .IP "\fB$remainder \fR" 8
43: ($remainder \fInum den\fR) \(-> \fInum\fB mod \fIden\fR
44: .IP "\fB$rand \fR" 8
45: ($rand \fIarg\fR) \(-> Random integer between 1 and \fIarg\fR inclusive
46: .NH 2
47: Boolean Functions
48: .IP "\fB$and \fR" 8
49: ($and \fIa b\fR) \(-> \fIa\fB (bitwise AND) \fIb\fR
50: .IP "\fB$or \fR" 8
51: ($or \fIa b\fR) \(-> \fIa\fB (bitwise OR) \fIb\fR
52: .IP "\fB$not \fR" 8
53: ($not \fIx\fR) \(-> \s-2IF\s+2 \fIx\fR nonzero \s-2THEN\s+2 zero \s-2ELSE\s+2 one.
54: .IP "\fB$yorn \fR" 8
55: ($yorn) \(-> Waits for the Player to type a line of input. Returns
56: one if the Player types "yes" or "y" and zero otherwise.
57: .IP "\fB$pct \fR" 8
58: ($pct \fIprob\fR) \(-> Returns one, \fIprob\fR% of the time, zero otherwise.
59: .IP "\fB$eq \fR" 8
60: ($eq \fIarg1\fR \fIarg2\fR) \(-> 1 if \fIarg1\fR equals \fIarg2\fR, zero otherwise.
61: .IP "\fB$ne \fR" 8
62: ($ne \fIarg1\fR \fIarg2\fR) \(-> IF \fIarg1\fR ~= \fIarg2\fR THEN one ELSE zero.
63: .IP "\fB$lt \fR" 8
64: ($lt \fIarg1\fR \fIarg2\fR) \(-> 1 if \fIarg1\fR < \fIarg2\fR, zero otherwise.
65: .IP "\fB$gt \fR" 8
66: ($gt \fIarg1\fR \fIarg2\fR) \(-> 1 if \fIarg1\fR > \fIarg2\fR, zero otherwise.
67: .IP "\fB$le \fR" 8
68: ($le \fIarg1\fR \fIarg2\fR) \(-> 1 if \fIarg1\fR <= \fIarg2\fR, zero otherwise.
69: .IP "\fB$ge \fR" 8
70: ($ge \fIarg1\fR \fIarg2\fR) \(-> 1 if \fIarg1\fR >= \fIarg2\fR, zero otherwise.
71: .NH 2
72: Builtin Procedures (no return value)
73: .IP "\fB$setg \fR" 8
74: ($setg \fIglobalnumber value\fR) \(-> No return value. Sets the
75: contents of global #\fIglobalnumber\fR to \fIvalue\fR.
76: .IP "\fB$setp \fR" 8
77: ($setp \fIobj propnum value\fR) \(-> No return value. Sets the \fIpropnum\fR'th
78: property of \fIobj\fR to \fIvalue\fR. Note that properties 1-16 may only contain 0 or 1.
79: .IP "\fB$move \fR" 8
80: ($move \fIobj dest\fR) \(-> No return value. Causes \fIobj\fR to be placed
81: inside \fIdest\fR, and adjusts pointers accordingly. \fBDanger\fR: No checking is
82: performed to verify that $move is not being used to violate the tree structure
83: of the object list (eg ($move obj obj)).
84: Bad results are likely if this occurs.
85: .IP "\fB$say \fR" 8
86: ($say \fImsg\fR) \(-> No return value. Types \fImsg\fR.
87: .IP "\fB$name \fR" 8
88: ($name \fIobj\fR) \(-> No return value. Types the (5-letter) name of \fIobj\fR.
89: .IP "\fB$num \fR" 8
90: ($num \fIx\fR) \(-> No return value. Types the number \fIx\fR.
91: .IP "\fB$exit \fR" 8
92: ($exit \fIn\fR) \(-> Leave present routine. ($exit 1) causes the current
93: "turn" to be prematurely terminated and the next turn to be initiated
94: at the Demon phase. ($exit 0) returns to the driver to begin the next phase.
95: .IP "\fB$rtrn \fR" 8
96: ($rtrn \fIn\fR) \(-> Exits to the calling routine, returning value '\fIn\fR' TO
97: THE CALLING FUNCTION.
98: .IP "\fB$spec \fR" 8
99: ($spec \fIcode arg1 arg2 arg3 arg4\fR) \(-> Performs a special function as
100: follows:
101: .TS
102: center box;
103: c | c.
104: code function
105: =
106: 3 Terminate this run of DDL
107: _
108: 4 Save a game
109: _
110: 5 Restore a game
111: _
112: 7 Preserve unknown words in file \fIarg1\fR
113: .TE
114: .PP
115: Functions 4 and 5 prompt for a file name in which the saved game is
116: kept. Function 7 causes any unknown words encountered by the parser
117: to be preserved in a file for later perusal by the
118: \s-2DDL\s+2
119: programmer. It
120: would be used to learn about things players have tried unsuccessfully
121: that should be dealt with. The file must already exist, and must
122: be specified as a string.
123: .PP
124: ALL arguments must be specified, even if zero.
125: .NH 2
126: Global-value functions
127: .IP "\fB$glob \fR" 8
128: ($glob \fIn\fR) \(-> Value of global \fIn\fR. Equivalent to @\fIn\fR.
129: .IP "\fB$verb \fR" 8
130: ($verb) \(-> The ID of the verb returned by the parser (zero if none).
131: Typically used in comparisons, it is equivalent to @Verb.
132: .IP "\fB$dobj \fR" 8
133: ($dobj) \(-> The ID of the direct object returned by the parser
134: (zero if none). Equivalent to @Dobj.
135: .IP "\fB$iobj \fR" 8
136: ($dobj) \(-> The ID of the indirect object returned by the parser
137: (zero if none). Equivalent to @Iobj.
138: .NH 2
139: Transition Procedures
140: .IP "\fB$setv \fR" 8
141: ($setv \fIv1 v2 v3 v4 v5 v6 v7 v8 v9 v10\fR) \(-> sets the values in
142: the internal vector VECVERB to the values \fIv1\fR thru \fIv10\fR. These are
143: used by routines $hit and $miss.
144: .IP "\fB$hit \fR" 8
145: ($hit \fImover d1 d2 d3 d4 d5 d6 d7 d8 d9 d10\fR) \(-> No return value.
146: Compares ($verb) with the values in builtin vector VECVERB. When ($verb)
147: is found to match the nth entry in VECVERB, ($move \fImover d[n]\fR) is executed.
148: Note that \fImover\fR is what gets moved to d[n]; this argument is naturally
149: absent from $setv and $miss.
150: .IP "\fB$miss \fR" 8
151: ($miss \fIr1 r2 r3 r4 r5 r6 r7 r8 r9 r10\fR) \(-> no return value.
152: Compares ($verb) to VECVERB as $hit does. When a match to the nth
153: entry in VECVERB is found, routine \fIr\fR[n] is called. An attempt to
154: call routine 0 does nothing.
155: .NH 2
156: String Functions
157: .PP
158: There are two varieties of strings. Constant strings defined
159: by the DDL programmer are permanent, and have a numeric "value"
160: greater than zero (which is in fact a table index). Strings
161: typed by the Player as a direct object, and strings produced
162: by the functions $eqst and $read are temporary, have a numeric
163: "value" less than zero (which allows the programmer to determine
164: if the direct object is in fact a string), and are purged by
165: having their index values recycled at the beginning of every turn.
166: No more than 200 such strings may be generated on a given turn.
167: .IP "\fB$eqst\fR" 8
168: ($eqst \fIarg1 arg2\fR) \)-> 1 iff the strings specified by the
169: two \fIarg\fRs are equal, zero otherwise.
170: .IP "\fB$subs\fR" 8
171: ($subs \fIstr index length\fR) \)-> a string consisting of the
172: substring of \fIstr\fR, starting at character \fIindex\fR
173: (with an origin of Zero for the beginning of the string), for
174: the specified \fIlength\fR. A \fIlength\fR of zero causes
175: all the remaining characters starting at \fIindex\fR to be
176: taken.
177: .IP "\fB$leng\fR" 8
178: ($leng \fIstr\fR) \)-> The length of string \fIstr\fR.
179: .IP "\fB$read\fR" 8
180: ($read) \)-> Causes \s-2DDL\s+2 to pause and wait for input from
181: the Player. Returns the string the player typed, without the
182: trailing newline.
183: .NH 2
184: Demons and Fuses
185: .IP "\fB$sdem \fR" 8
186: ($sdem n) \(-> Activates routine n as a Demon, to be executed every
187: turn. At least one such Demon should exist, to Look at the Player's
188: current location, and to increment the turn counter
189: .IP "\fB$ddem \fR" 8
190: ($ddem n) \(-> Removes routine n from the active Demon list. For
191: example, ($ddem Kount) undoes the action of ($sdem Kount).
192: .IP "\fB$sfus \fR" 8
193: ($sfus rout n) \(-> Causes routine "rout" to be executed (one
194: time only) after n turns. Such a routine is called a Fuse.
195: .IP "\fB$dfus \fR" 8
196: ($dfus rout) \(-> Causes routine rout to be taken off the
197: pending fuse list.
198: .IP "\fB$itun \fR" 8
199: ($itun) \(-> Increments the turn counter. This is a builtin function
200: because fuses depend upon the turn counter. The
201: \s-2DDL\s+2
202: programmer has the
203: option to "slow time" by refraining from incrementing the turn counter.
204: .IP "\fB$gtun \fR" 8
205: ($gtun) \(-> Returns the current turn counter value.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.