2 Copyright © 1995-2016, The AROS Development Team. All rights reserved.
5 Desc: Graphics function GetColorMap()
8 #include <exec/memory.h>
9 #include <exec/types.h>
10 #include <proto/exec.h>
11 #include <graphics/view.h>
12 #include "graphics_intern.h"
14 /*****************************************************************************
17 #include <proto/graphics.h>
19 AROS_LH1(struct ColorMap
*, GetColorMap
,
22 AROS_LHA(ULONG
, entries
, D0
),
25 struct GfxBase
*, GfxBase
, 95, Graphics
)
28 Allocates and initializes a ColorMap structure and passes back the
29 pointer. This enables you to do calls to SetRGB4() and LoadRGB4()
30 to load colors for a view port.
31 The ColorTable pointer in the ColorMap structure points to a hardware
32 specific colormap data structure which you should not interpret.
35 entries - the number of entries for the colormap
38 NULL - not enough memory could be allocated for the necessary
40 other - pointer to an initialized ColorMap structure that may be
41 stored into the ViewPort.ColorMap pointer.
50 FreeColorMap(), SetRGB4(), graphics/view.h
53 RGB Colortable with preference values is incomplete.
57 *****************************************************************************/
61 struct ColorMap
* NewCM
= (struct ColorMap
*)AllocMem(sizeof(struct ColorMap
),
62 MEMF_PUBLIC
|MEMF_CLEAR
);
66 /* ColorTable with some preference values; !!! incomplete */
67 const WORD RGBColorTable
[] = {0x0000,0x0f00,0x00f0,0x0ff0,
68 0x000f,0x0f0f,0x00ff,0x0fff}; /* !!!etc. */
72 /* go on if we got the memory for the ColorMap */
75 /* get memory for the ColorTable */
76 NewCM
-> ColorTable
= AllocMem(entries
* sizeof(UWORD
), MEMF_CLEAR
|MEMF_PUBLIC
);
78 /* get memory for LowColorBits */
79 NewCM
-> LowColorBits
= AllocMem(entries
* sizeof(UWORD
), MEMF_CLEAR
|MEMF_PUBLIC
);
81 ptr1
= NewCM
-> ColorTable
;
82 ptr2
= NewCM
-> LowColorBits
;
84 /* did we get all the memory we wanted? */
85 if ( (NULL
!= ptr1
) && (NULL
!= ptr2
) )
89 LONG
* L_RGBColorTable
= (LONG
*)&RGBColorTable
[0];
92 /* further init the GetColorMap structure */
93 NewCM
->Type
= COLORMAP_TYPE_V39
;
94 NewCM
->Count
= entries
;
95 NewCM
->SpriteResolution
= SPRITERESN_DEFAULT
;
96 NewCM
->SpriteResDefault
= SPRITERESN_ECS
;
97 NewCM
->AuxFlags
= CMAF_FULLPALETTE
;
100 /* FIXME: Shouldn't these be different? */
101 NewCM
->SpriteBase_Even
= 0x0001;
102 NewCM
->SpriteBase_Odd
= 0x0001;
104 NewCM
->Bp_1_base
= 0x0008;
107 /* Fill the ColorTable and the LowColorBits with the appropriate Data */
109 /* as we`re clever we`re doing some 32 bit copying with the 16 bit data */
110 for (i
= 0; i
< (entries
>> 1); i
++)
112 LONG ColorValue
= L_RGBColorTable
[i
];
113 *ptr1
++ = ColorValue
;
114 *ptr2
++ = ColorValue
;
116 /* is there one WORD left to copy? */
117 if (1 == (entries
& 1) )
119 WORD ColorValue
= RGBColorTable
[entries
-1];
120 *(WORD
*)ptr1
= ColorValue
;
121 *(WORD
*)ptr2
= ColorValue
;
126 else /* not enough memory for the tables */
128 if (NULL
!= NewCM
-> ColorTable
)
129 FreeMem(NewCM
-> ColorTable
, entries
* sizeof(UWORD
));
130 if (NULL
!= NewCM
-> LowColorBits
)
131 FreeMem(NewCM
-> LowColorBits
, entries
* sizeof(UWORD
));
133 FreeMem(NewCM
, sizeof(struct ColorMap
));
134 /* make return value invalid */
138 } /* if (NULL != NewCM) */