; ; colourtran.s ; ; ColourTrans interface ; ; © 1994-1998 Straylight ; ;----- Licensing note ------------------------------------------------------- ; ; This file is part of Straylight's Steel library. ; ; Steel is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2, or (at your option) ; any later version. ; ; Steel is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with Steel. If not, write to the Free Software Foundation, ; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ;----- Standard header ------------------------------------------------------ GET libs:header GET libs:swis ;----- Main code ------------------------------------------------------------ AREA |C$$Code|,CODE,READONLY ; --- colourtran_select_table --- ; ; On entry: a1 == source mode ; a2 == pointer to source palette ; a3 == destination mode ; a4 == pointer to destination palette ; [sp,#0] == pointer to buffer to fill with table ; [sp,#4] == flags word ; ; We don't support the transfer function, because it's not APCS. EXPORT colourtran_select_table colourtran_select_table MOV ip,sp STMFD sp!,{v1,v2,lr} CMP a1,#256 LDMGEIA ip,{v1,v2} LDRLT v1,[ip] SWI XColourTrans_SelectTable MOVVC a1,#0 LDMFD sp!,{v1,v2,pc}^ ; --- colourtran_select_GCOLtable --- ; ; On entry: a1 == source mode ; a2 == pointer to source palette ; a3 == destination mode ; a4 == pointer to destination palette ; [sp,#0] == pointer to buffer to fill in ; [sp,#4] == flags word EXPORT colourtran_select_GCOLtable colourtran_select_GCOLtable MOV ip,sp STMFD sp!,{v1,v2,lr} CMP a1,#256 LDMGEIA ip,{v1,v2} LDRLT v1,[ip] SWI XColourTrans_SelectGCOLTable MOVVC a1,#0 LDMFD sp!,{v1,v2,pc}^ ; --- colourtran_returnGCOL --- ; ; On entry: a1 == palette entry ; a2 == pointer to GCOL word to store EXPORT colourtran_returnGCOL colourtran_returnGCOL SWI XColourTrans_ReturnGCOL STRVC a1,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_setGCOL --- ; ; On entry: a1 == palette entry ; a2 == flags word ; a3 == GCOL action to set ; a4 == pointer to where to store the output EXPORT colourtran_setGCOL colourtran_setGCOL STMFD sp!,{a4,v1,lr} MOV v1,a3 MOV a4,a2 SWI XColourTrans_SetGCOL LDR a2,[sp],#4 STRVC a1,[a2] MOVVC a1,#0 LDMFD sp!,{v1,pc}^ ; --- colourtran_return_colournumber --- ; ; On entry: a1 == palette entry ; a2 == pointer to where to put the colour EXPORT colourtran_return_colournumber colourtran_return_colournumber SWI XColourTrans_ReturnColourNumber STRVC a1,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_return_GCOLformode --- ; ; On entry: a1 == palette entry ; a2 == destination mode number ; a3 == pointer to destination palette ; a4 == pointer to where to store the colour EXPORT colourtran_return_GCOLformode colourtran_return_GCOLformode SWI XColourTrans_ReturnGCOLForMode STRVC a1,[a4] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_return_colourformode --- ; ; On entry: a1 == palette entry to set ; a2 == destination mode number ; a3 == pointer to destination palette ; a4 == pointer to where to store the number EXPORT colourtran_return_colourformode colourtran_return_colourformode SWI XColourTrans_ReturnColourNumberForMode STRVC a1,[a4] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_return_OppGCOL --- ; ; On entry: a1 == palette entry ; a2 == pointer to where to store the GCOL EXPORT colourtran_return_OppGCOL colourtran_return_OppGCOL SWI XColourTrans_ReturnOppGCOL STRVC a1,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_setOppGCOL --- ; ; On entry: a1 == palette entry ; a2 == flags word ; a3 == GCOL action to set ; a4 == pointer to where to store the output EXPORT colourtran_setOppGCOL colourtran_setOppGCOL STMFD sp!,{a4,v1,lr} MOV v1,a3 MOV a4,a2 SWI XColourTrans_SetOppGCOL LDR a2,[sp],#4 STRVC a1,[a2] MOVVC a1,#0 LDMFD sp!,{v1,pc}^ ; --- colourtran_return_Oppcolournumber --- ; ; On entry: a1 == palette entry ; a2 == pointer to where to store the colour EXPORT colourtran_return_Oppcolournumber colourtran_return_Oppcolournumber SWI XColourTrans_ReturnOppColourNumber STRVC a1,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_return_OppGCOLformode --- ; ; On entry: a1 == a1 == palette entry ; a2 == destination mode number ; a3 == pointer to destination palette ; a4 == pointer to where to store the colour EXPORT colourtran_return_OppGCOLformode colourtran_return_OppGCOLformode SWI XColourTrans_ReturnOppGCOLForMode STRVC a1,[a4] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_return_Oppcolourformode --- ; ; On entry: a1 == palette entry to set ; a2 == destination mode number ; a3 == pointer to destination palette ; a4 == pointer to where to store the number EXPORT colourtran_return_Oppcolourformode colourtran_return_Oppcolourformode SWI XColourTrans_ReturnOppColourNumberForMode STRVC a1,[a4] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_GCOL_tocolournumber --- ; ; On entry: a1 == GCOL to convert ; a2 == pointer to where to put colour number EXPORT colourtran_GCOL_tocolournumber colourtran_GCOL_tocolournumber SWI XColourTrans_GCOLToColourNumber STRVC a1,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_colournumbertoGCOL --- ; ; On entry: a1 == colour number to convert ; a2 == pointer to where to put GCOL EXPORT colourtran_colournumbertoGCOL colourtran_colournumbertoGCOL SWI XColourTrans_ColourNumberToGCOL STRVC a1,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_returnfontcolours --- ; ; On entry: a1 == pointer to font handle ; a2 == pointer to background palette entry ; a3 == pointer to foreground palette entry ; a4 == pointer to amount of antialiasing to do ; ; Christ knows what all this is about. Well, I hope so, 'cos I haven't got ; a clue. For a start, ColourTrans_ReturnFontColours preserves R0, so ; passing the font handle through a pointer is really silly. For seconds, ; the output R1 and R2 values aren't palette entries at all. My verdict: ; someone at Acorn doesn't have a clue. But then again, what do you expect ; from SWI veneers written in C? EXPORT colourtran_returnfontcolours colourtran_returnfontcolours STMFD sp!,{a1-a4} LDR a1,[a1] LDR a2,[a2] LDR a3,[a3] LDR a4,[a4] SWI XColourTrans_ReturnFontColours LDR ip,[sp],#4 STRVC a1,[ip] LDR ip,[sp],#4 STRVC a2,[ip] LDR ip,[sp],#4 STRVC a3,[ip] LDR ip,[sp],#4 STRVC a4,[ip] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_setfontcolours --- ; ; On entry: The same braindead pointers as the last one EXPORT colourtran_setfontcolours colourtran_setfontcolours STMFD sp!,{a1-a4} LDR a1,[a1] LDR a2,[a2] LDR a3,[a3] LDR a4,[a4] SWI XColourTrans_SetFontColours LDR ip,[sp],#4 STRVC a1,[ip] LDR ip,[sp],#4 STRVC a2,[ip] LDR ip,[sp],#4 STRVC a3,[ip] LDR ip,[sp],#4 STRVC a4,[ip] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_invalidate_cache --- ; ; On entry: -- EXPORT colourtran_invalidate_cache colourtran_invalidate_cache SWI ColourTrans_InvalidateCache MOVVC a1,#0 MOVS pc,lr ; --- Omitted veneers --- ; ; Setting and reading calibration tables is not supported. Applications ; probably shouldn't be doing this sort of thing anyway. ; --- colourtran_convert_device_colour --- ; ; On entry: a1 == palette entry to convert ; a2 == pointer to where to store the standard colour EXPORT colourtran_convert_device_colour colourtran_convert_device_colour STR a2,[sp,#-4]! MOV a4,#0 MOV a2,a1 SWI XColourTrans_ConvertDeviceColour LDR a2,[sp],#4 STRVC a3,[a2] MOVVC a1,#0 MOVS pc,lr ; --- colourtran_convertRGBToCIE --- ; ; On entry: a1 == pointer to RGB block ; a2 == pointer to CIE block EXPORT colourtran_convertRGBToCIE colourtran_convertRGBToCIE STR a2,[sp,#-4]! LDMIA a1,{a1-a3} SWI XColourTrans_ConvertRGBToCIE LDR ip,[sp],#4 STMVCIA ip,{a1-a3} MOVVC a1,#0 MOVS pc,lr ; --- colourtran_convertCIEToRGB --- ; ; On entry: a1 == pointer to CIE block ; a2 == pointer to RGB block EXPORT colourtran_convertCIEToRGB colourtran_convertCIEToRGB STR a2,[sp,#-4]! LDMIA a1,{a1-a3} SWI XColourTrans_ConvertCIEToRGB LDR ip,[sp],#4 STMVCIA ip,{a1-a3} MOVVC a1,#0 MOVS pc,lr ; --- colourtran_convertRGBToHSV --- ; ; On entry: a1 == pointer to RGB block ; a2 == pointer to CIE block EXPORT colourtran_convertRGBToHSV colourtran_convertRGBToHSV STR a2,[sp,#-4]! LDMIA a1,{a1-a3} SWI XColourTrans_ConvertRGBToHSV LDR ip,[sp],#4 STMVCIA ip,{a1-a3} MOVVC a1,#0 MOVS pc,lr ; --- colourtran_convertHSVToRGB --- ; ; On entry: a1 == pointer to CIE block ; a2 == pointer to RGB block EXPORT colourtran_convertHSVToRGB colourtran_convertHSVToRGB STR a2,[sp,#-4]! LDMIA a1,{a1-a3} SWI XColourTrans_ConvertHSVToRGB LDR ip,[sp],#4 STMVCIA ip,{a1-a3} MOVVC a1,#0 MOVS pc,lr ; --- colourtran_convertRGBToCMYK --- ; ; On entry: a1 == pointer to RGB block ; a2 == pointer to CIE block EXPORT colourtran_convertRGBToCMYK colourtran_convertRGBToCMYK STR a2,[sp,#-4]! LDMIA a1,{a1-a3} SWI XColourTrans_ConvertRGBToCMYK LDR ip,[sp],#4 STMVCIA ip,{a1-a4} MOVVC a1,#0 MOVS pc,lr ; --- colourtran_convertCMYKToRGB --- ; ; On entry: a1 == pointer to CIE block ; a2 == pointer to RGB block EXPORT colourtran_convertCMYKToRGB colourtran_convertCMYKToRGB STR a2,[sp,#-4]! LDMIA a1,{a1-a4} SWI XColourTrans_ConvertCMYKToRGB LDR ip,[sp],#4 STMVCIA ip,{a1-a3} MOVVC a1,#0 MOVS pc,lr ;----- That's all, folks ---------------------------------------------------- END