chiark / gitweb /
Create readable text `.bas' for each tokenized BASIC `,ffb' file.
[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