Initial revision
[ssr] / StraySrc / Libraries / Steel / s / colourtran
1 ;
2 ; colourtran.s
3 ;
4 ; ColourTrans interface
5 ;
6 ; © 1994-1998 Straylight
7 ;
8
9 ;----- Licensing note -------------------------------------------------------
10 ;
11 ; This file is part of Straylight's Steel library.
12 ;
13 ; Steel is free software; you can redistribute it and/or modify
14 ; it under the terms of the GNU General Public License as published by
15 ; the Free Software Foundation; either version 2, or (at your option)
16 ; any later version.
17 ;
18 ; Steel is distributed in the hope that it will be useful,
19 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ; GNU General Public License for more details.
22 ;
23 ; You should have received a copy of the GNU General Public License
24 ; along with Steel. If not, write to the Free Software Foundation,
25 ; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
27 ;----- Standard header ------------------------------------------------------
28
29 GET libs:header
30 GET libs:swis
31
32 ;----- Main code ------------------------------------------------------------
33
34 AREA |C$$Code|,CODE,READONLY
35
36 ; --- colourtran_select_table ---
37 ;
38 ; On entry: a1 == source mode
39 ; a2 == pointer to source palette
40 ; a3 == destination mode
41 ; a4 == pointer to destination palette
42 ; [sp,#0] == pointer to buffer to fill with table
43 ; [sp,#4] == flags word
44 ;
45 ; We don't support the transfer function, because it's not APCS.
46
47 EXPORT colourtran_select_table
48 colourtran_select_table
49 MOV ip,sp
50 STMFD sp!,{v1,v2,lr}
51 CMP a1,#256
52 LDMGEIA ip,{v1,v2}
53 LDRLT v1,[ip]
54 SWI XColourTrans_SelectTable
55 MOVVC a1,#0
56 LDMFD sp!,{v1,v2,pc}^
57
58 ; --- colourtran_select_GCOLtable ---
59 ;
60 ; On entry: a1 == source mode
61 ; a2 == pointer to source palette
62 ; a3 == destination mode
63 ; a4 == pointer to destination palette
64 ; [sp,#0] == pointer to buffer to fill in
65 ; [sp,#4] == flags word
66
67 EXPORT colourtran_select_GCOLtable
68 colourtran_select_GCOLtable
69 MOV ip,sp
70 STMFD sp!,{v1,v2,lr}
71 CMP a1,#256
72 LDMGEIA ip,{v1,v2}
73 LDRLT v1,[ip]
74 SWI XColourTrans_SelectGCOLTable
75 MOVVC a1,#0
76 LDMFD sp!,{v1,v2,pc}^
77
78 ; --- colourtran_returnGCOL ---
79 ;
80 ; On entry: a1 == palette entry
81 ; a2 == pointer to GCOL word to store
82
83 EXPORT colourtran_returnGCOL
84 colourtran_returnGCOL
85 SWI XColourTrans_ReturnGCOL
86 STRVC a1,[a2]
87 MOVVC a1,#0
88 MOVS pc,lr
89
90 ; --- colourtran_setGCOL ---
91 ;
92 ; On entry: a1 == palette entry
93 ; a2 == flags word
94 ; a3 == GCOL action to set
95 ; a4 == pointer to where to store the output
96
97 EXPORT colourtran_setGCOL
98 colourtran_setGCOL
99 STMFD sp!,{a4,v1,lr}
100 MOV v1,a3
101 MOV a4,a2
102 SWI XColourTrans_SetGCOL
103 LDR a2,[sp],#4
104 STRVC a1,[a2]
105 MOVVC a1,#0
106 LDMFD sp!,{v1,pc}^
107
108 ; --- colourtran_return_colournumber ---
109 ;
110 ; On entry: a1 == palette entry
111 ; a2 == pointer to where to put the colour
112
113 EXPORT colourtran_return_colournumber
114 colourtran_return_colournumber
115 SWI XColourTrans_ReturnColourNumber
116 STRVC a1,[a2]
117 MOVVC a1,#0
118 MOVS pc,lr
119
120 ; --- colourtran_return_GCOLformode ---
121 ;
122 ; On entry: a1 == palette entry
123 ; a2 == destination mode number
124 ; a3 == pointer to destination palette
125 ; a4 == pointer to where to store the colour
126
127 EXPORT colourtran_return_GCOLformode
128 colourtran_return_GCOLformode
129 SWI XColourTrans_ReturnGCOLForMode
130 STRVC a1,[a4]
131 MOVVC a1,#0
132 MOVS pc,lr
133
134 ; --- colourtran_return_colourformode ---
135 ;
136 ; On entry: a1 == palette entry to set
137 ; a2 == destination mode number
138 ; a3 == pointer to destination palette
139 ; a4 == pointer to where to store the number
140
141 EXPORT colourtran_return_colourformode
142 colourtran_return_colourformode
143 SWI XColourTrans_ReturnColourNumberForMode
144 STRVC a1,[a4]
145 MOVVC a1,#0
146 MOVS pc,lr
147
148 ; --- colourtran_return_OppGCOL ---
149 ;
150 ; On entry: a1 == palette entry
151 ; a2 == pointer to where to store the GCOL
152
153 EXPORT colourtran_return_OppGCOL
154 colourtran_return_OppGCOL
155 SWI XColourTrans_ReturnOppGCOL
156 STRVC a1,[a2]
157 MOVVC a1,#0
158 MOVS pc,lr
159
160 ; --- colourtran_setOppGCOL ---
161 ;
162 ; On entry: a1 == palette entry
163 ; a2 == flags word
164 ; a3 == GCOL action to set
165 ; a4 == pointer to where to store the output
166
167 EXPORT colourtran_setOppGCOL
168 colourtran_setOppGCOL
169 STMFD sp!,{a4,v1,lr}
170 MOV v1,a3
171 MOV a4,a2
172 SWI XColourTrans_SetOppGCOL
173 LDR a2,[sp],#4
174 STRVC a1,[a2]
175 MOVVC a1,#0
176 LDMFD sp!,{v1,pc}^
177
178 ; --- colourtran_return_Oppcolournumber ---
179 ;
180 ; On entry: a1 == palette entry
181 ; a2 == pointer to where to store the colour
182
183 EXPORT colourtran_return_Oppcolournumber
184 colourtran_return_Oppcolournumber
185 SWI XColourTrans_ReturnOppColourNumber
186 STRVC a1,[a2]
187 MOVVC a1,#0
188 MOVS pc,lr
189
190 ; --- colourtran_return_OppGCOLformode ---
191 ;
192 ; On entry: a1 == a1 == palette entry
193 ; a2 == destination mode number
194 ; a3 == pointer to destination palette
195 ; a4 == pointer to where to store the colour
196
197 EXPORT colourtran_return_OppGCOLformode
198 colourtran_return_OppGCOLformode
199 SWI XColourTrans_ReturnOppGCOLForMode
200 STRVC a1,[a4]
201 MOVVC a1,#0
202 MOVS pc,lr
203
204 ; --- colourtran_return_Oppcolourformode ---
205 ;
206 ; On entry: a1 == palette entry to set
207 ; a2 == destination mode number
208 ; a3 == pointer to destination palette
209 ; a4 == pointer to where to store the number
210
211 EXPORT colourtran_return_Oppcolourformode
212 colourtran_return_Oppcolourformode
213 SWI XColourTrans_ReturnOppColourNumberForMode
214 STRVC a1,[a4]
215 MOVVC a1,#0
216 MOVS pc,lr
217
218 ; --- colourtran_GCOL_tocolournumber ---
219 ;
220 ; On entry: a1 == GCOL to convert
221 ; a2 == pointer to where to put colour number
222
223 EXPORT colourtran_GCOL_tocolournumber
224 colourtran_GCOL_tocolournumber
225 SWI XColourTrans_GCOLToColourNumber
226 STRVC a1,[a2]
227 MOVVC a1,#0
228 MOVS pc,lr
229
230 ; --- colourtran_colournumbertoGCOL ---
231 ;
232 ; On entry: a1 == colour number to convert
233 ; a2 == pointer to where to put GCOL
234
235 EXPORT colourtran_colournumbertoGCOL
236 colourtran_colournumbertoGCOL
237 SWI XColourTrans_ColourNumberToGCOL
238 STRVC a1,[a2]
239 MOVVC a1,#0
240 MOVS pc,lr
241
242 ; --- colourtran_returnfontcolours ---
243 ;
244 ; On entry: a1 == pointer to font handle
245 ; a2 == pointer to background palette entry
246 ; a3 == pointer to foreground palette entry
247 ; a4 == pointer to amount of antialiasing to do
248 ;
249 ; Christ knows what all this is about. Well, I hope so, 'cos I haven't got
250 ; a clue. For a start, ColourTrans_ReturnFontColours preserves R0, so
251 ; passing the font handle through a pointer is really silly. For seconds,
252 ; the output R1 and R2 values aren't palette entries at all. My verdict:
253 ; someone at Acorn doesn't have a clue. But then again, what do you expect
254 ; from SWI veneers written in C?
255
256 EXPORT colourtran_returnfontcolours
257 colourtran_returnfontcolours
258 STMFD sp!,{a1-a4}
259 LDR a1,[a1]
260 LDR a2,[a2]
261 LDR a3,[a3]
262 LDR a4,[a4]
263 SWI XColourTrans_ReturnFontColours
264 LDR ip,[sp],#4
265 STRVC a1,[ip]
266 LDR ip,[sp],#4
267 STRVC a2,[ip]
268 LDR ip,[sp],#4
269 STRVC a3,[ip]
270 LDR ip,[sp],#4
271 STRVC a4,[ip]
272 MOVVC a1,#0
273 MOVS pc,lr
274
275 ; --- colourtran_setfontcolours ---
276 ;
277 ; On entry: The same braindead pointers as the last one
278
279 EXPORT colourtran_setfontcolours
280 colourtran_setfontcolours
281 STMFD sp!,{a1-a4}
282 LDR a1,[a1]
283 LDR a2,[a2]
284 LDR a3,[a3]
285 LDR a4,[a4]
286 SWI XColourTrans_SetFontColours
287 LDR ip,[sp],#4
288 STRVC a1,[ip]
289 LDR ip,[sp],#4
290 STRVC a2,[ip]
291 LDR ip,[sp],#4
292 STRVC a3,[ip]
293 LDR ip,[sp],#4
294 STRVC a4,[ip]
295 MOVVC a1,#0
296 MOVS pc,lr
297
298 ; --- colourtran_invalidate_cache ---
299 ;
300 ; On entry: --
301
302 EXPORT colourtran_invalidate_cache
303 colourtran_invalidate_cache
304 SWI ColourTrans_InvalidateCache
305 MOVVC a1,#0
306 MOVS pc,lr
307
308 ; --- Omitted veneers ---
309 ;
310 ; Setting and reading calibration tables is not supported. Applications
311 ; probably shouldn't be doing this sort of thing anyway.
312
313 ; --- colourtran_convert_device_colour ---
314 ;
315 ; On entry: a1 == palette entry to convert
316 ; a2 == pointer to where to store the standard colour
317
318 EXPORT colourtran_convert_device_colour
319 colourtran_convert_device_colour
320 STR a2,[sp,#-4]!
321 MOV a4,#0
322 MOV a2,a1
323 SWI XColourTrans_ConvertDeviceColour
324 LDR a2,[sp],#4
325 STRVC a3,[a2]
326 MOVVC a1,#0
327 MOVS pc,lr
328
329 ; --- colourtran_convertRGBToCIE ---
330 ;
331 ; On entry: a1 == pointer to RGB block
332 ; a2 == pointer to CIE block
333
334 EXPORT colourtran_convertRGBToCIE
335 colourtran_convertRGBToCIE
336 STR a2,[sp,#-4]!
337 LDMIA a1,{a1-a3}
338 SWI XColourTrans_ConvertRGBToCIE
339 LDR ip,[sp],#4
340 STMVCIA ip,{a1-a3}
341 MOVVC a1,#0
342 MOVS pc,lr
343
344 ; --- colourtran_convertCIEToRGB ---
345 ;
346 ; On entry: a1 == pointer to CIE block
347 ; a2 == pointer to RGB block
348
349 EXPORT colourtran_convertCIEToRGB
350 colourtran_convertCIEToRGB
351 STR a2,[sp,#-4]!
352 LDMIA a1,{a1-a3}
353 SWI XColourTrans_ConvertCIEToRGB
354 LDR ip,[sp],#4
355 STMVCIA ip,{a1-a3}
356 MOVVC a1,#0
357 MOVS pc,lr
358
359 ; --- colourtran_convertRGBToHSV ---
360 ;
361 ; On entry: a1 == pointer to RGB block
362 ; a2 == pointer to CIE block
363
364 EXPORT colourtran_convertRGBToHSV
365 colourtran_convertRGBToHSV
366 STR a2,[sp,#-4]!
367 LDMIA a1,{a1-a3}
368 SWI XColourTrans_ConvertRGBToHSV
369 LDR ip,[sp],#4
370 STMVCIA ip,{a1-a3}
371 MOVVC a1,#0
372 MOVS pc,lr
373
374 ; --- colourtran_convertHSVToRGB ---
375 ;
376 ; On entry: a1 == pointer to CIE block
377 ; a2 == pointer to RGB block
378
379 EXPORT colourtran_convertHSVToRGB
380 colourtran_convertHSVToRGB
381 STR a2,[sp,#-4]!
382 LDMIA a1,{a1-a3}
383 SWI XColourTrans_ConvertHSVToRGB
384 LDR ip,[sp],#4
385 STMVCIA ip,{a1-a3}
386 MOVVC a1,#0
387 MOVS pc,lr
388
389 ; --- colourtran_convertRGBToCMYK ---
390 ;
391 ; On entry: a1 == pointer to RGB block
392 ; a2 == pointer to CIE block
393
394 EXPORT colourtran_convertRGBToCMYK
395 colourtran_convertRGBToCMYK
396 STR a2,[sp,#-4]!
397 LDMIA a1,{a1-a3}
398 SWI XColourTrans_ConvertRGBToCMYK
399 LDR ip,[sp],#4
400 STMVCIA ip,{a1-a4}
401 MOVVC a1,#0
402 MOVS pc,lr
403
404 ; --- colourtran_convertCMYKToRGB ---
405 ;
406 ; On entry: a1 == pointer to CIE block
407 ; a2 == pointer to RGB block
408
409 EXPORT colourtran_convertCMYKToRGB
410 colourtran_convertCMYKToRGB
411 STR a2,[sp,#-4]!
412 LDMIA a1,{a1-a4}
413 SWI XColourTrans_ConvertCMYKToRGB
414 LDR ip,[sp],#4
415 STMVCIA ip,{a1-a3}
416 MOVVC a1,#0
417 MOVS pc,lr
418
419 ;----- That's all, folks ----------------------------------------------------
420
421 END