Initial revision
[ssr] / StraySrc / Libraries / Sapphire / sail / SAILInfo
CommitLineData
2ee739cc 1
2 The SAIL System
3 ~~~~~~~~~~~~~~~
4
5The name
6~~~~~~~~
7
8 SAIL stands for Straylight Application Interface Language. It's
9 Another Straylight Contrived Acronym (ASCA).
10
11The Concept
12~~~~~~~~~~~
13
14 To allow a nice script language in major Sapphire application. In
15 particualr is allows access to most of sapphire, making extensible
16 applications easy and powerful.
17
18SAIL API
19~~~~~~~~
20
21Requirements
22
23 Intialisation routine, done through normal Sapphire architecture
24
25Environments
26
27 A SAIL environment contains the following sorts of information:
28
29 * A parent environment, from which this one inherits. There is a
30 default environment provided by SAIL which interfaces to
31 important bits of Sapphire.
32
33 * The names and code for any CALLs which the environment supports.
34 We must ensure that we allow extension DLLs to add their own
35 CALLs into this structure somehow.
36
37 sail_createEnvironment
38
39 On entry: R0 == parent environment handle, or 0
40 R1 == address of CALL table
41
42 On exit: R0 == environment handle
43 May return an error
44
45 Use: Creates an environment
46
47 CALL table format
48
49 string name of this CALL
50 align
51 word address to call
52 ...
53 word 0
54
55 sail_addCalls
56
57 On entry: R0 == environment handle
58 R1 == address of new call table
59
60 On exit: May return an error (but probably not)
61
62 Use: Adds an extra CALL table to an environment. Useful
63 for extension DLLs.
64
65Initialising a script
66
67 Initialisation of a script requires the following information:
68
69 * An environment to attach the script to.
70
71 * A global variable pool which it can play with.
72
73 * How often to pre-empt the script while it's running.
74
75 * A flex block/filename containing the text.
76
77 After all the excitement of building data structures and tokenising
78 the script, you end up with a script handle.
79
80
81 sail_initScript
82
83 On entry: R0 == flex block handle of file
84 R1 == environment handle to attach script to
85 R2 == flex anchor of global variable pool
86 R3 == how often to pre-empt the script (-1 == don't)
87
88 On exit: R0 == script handle
89
90 Use: Tokenises the script, set up global labels etc.
91
92
93 sail_killScript
94
95 On entry: R0 == handle of the script
96
97 On exit: --
98
99 Use: Removes all the information associates with a given
100 script.
101
102Running a script
103
104 Given a script handle, we can start executing by:
105
106 * running a particular procedure
107
108 * starting from a line number
109
110 * evaluating an expression in the script's context
111
112 * where it is at the moment (if it was pre-empted)
113
114
115 sail_goto
116
117 On entry: R0 == handle of the script
118 R1 == name of label (may contain really strange
119 chars), or 0 for start
120
121 On exit: R1 == 0 if finished, else more to go
122
123 Use: Starts executing the script from the given label.
124
125 sail_contine
126
127 On entry: R0 == handle of the script
128
129 On exit: R1 == 0 if finished, else more to go
130
131 Use: Executes the script from its current position. This
132 is used for scripts which can be pre-empted.
133
134 sail_eval
135
136 On entry: R0 == handle of the script
137 R1 == pointer to string to evaluate
138
139 On exit: R1 == 0 if finished, else more to go
140
141 Use: Evaluates the given string.
142
143 sail_proc
144
145 On entry: R0 == handle of the script
146 R1 == pointer to parameter block
147
148 On exit: R1 == 0 if finished, else more to go
149
150 Use: Calls the given procedure by binding to arguments
151 in the block to the formal arguments of the
152 procedure definition.
153
154 The block looks like this:
155
156 Word Variable type
157 Data Variable data
158 ...
159 -1
160
161
162Variable handling
163~~~~~~~~~~~~~~~~~
164
165Global variables
166
167 Access to the global variable pool is done via the `@' symbol. All
168 label, procedure, function and variable names may be preficed by an
169 @, in which case the varible is looked up in the global pool.
170
171
172Useful routines
173
174
175 sail_createPool
176
177 On entry: --
178
179 On exit: R0 == handle of an empty variable pool
180 May return an error
181
182 Use: Creates a variable pool, so you can attach it as a
183 global variable pool to a script.
184
185 sail_findVar
186
187 On entry: R0 == script handle
188 R1 == name of variable
189 R2 == type of variable to find
190
191 On exit: CS if variable found, and
192 R1,R2 == lvalue of the variable
193 else CC
194
195 sail_createVar
196
197 On entry: R0 == script handle
198 R1 == name of variable
199 R2 == type of variable to create
200
201 On exit: R1,R2 == lvalue of variable
202
203
204 sail_load
205
206 On entry: R0 == script handle
207 R1,R2 == lvalue of variable
208
209 On exit: R3,R4 == rvalue of variable
210
211
212 sail_store
213
214 On entry: R0 == script handle
215 R1,R2 == lvalue of variable
216 R3,R4 == new rvalue to write
217
218 On exit: --
219
220 Note that we use appropriate floating point registers (i.e. F1
221 instead of R1 etc.) if the variables have floating point values.
222
223Important CALLs to have available
224~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
225
226 Sail_Expand
227 Sail_CallAddress
228
229
230Example button code
231~~~~~~~~~~~~~~~~~~~
232
233 CALL "Dbox_Create","myTemplate" TO myDbox%
234 CALL "Dbox_EventHandler",myDbox%,"myDboxHandler"
235 CALL "Dbox_Open",myDbox%
236 END
237
238 DEF PROCmyDboxHandler(reason%,args%)
239 CASE reason% OF
240 WHEN 4
241 CALL "Sail_Expand",args% TO ,buttons%
242 CALL "Dbox_Slab",4
243 ...
244 CALL "Dbox_Unslab"
245 ...
246 ENDCASE
247 ENDPROC
248
249
250The transmogrification of TermScript (nah!) into SAIL (whuppeeee!)
251~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
252
253 Use flex memory management
254 Allow for floatinng point variables
255 Add SAIL API
256 Do new global variable handling
257 No more RAM grabbing (use alloc)
258 Removal of Termite specific commands
259 New CALL syntax (slightly)
260 Enviroment handing
261 Error handling