2 Copyright © 1995-2007, 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, 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 a 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 !!!how much memory we need for that?? */
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
;
99 NewCM
->SpriteBase_Even
= 0x0010;
100 NewCM
->SpriteBase_Odd
= 0x0010;
101 NewCM
->Bp_1_base
= 0x0008;
104 /* Fill the ColorTable and the LowColorBits with the appropriate Data */
106 /* as we`re clever we`re doing some 32 bit copying with the 16 bit data */
107 for (i
= 0; i
< (entries
>> 1); i
++)
109 LONG ColorValue
= L_RGBColorTable
[i
];
110 *ptr1
++ = ColorValue
;
111 *ptr2
++ = ColorValue
;
113 /* is there one WORD left to copy? */
114 if (1 == (entries
& 1) )
116 WORD ColorValue
= RGBColorTable
[entries
-1];
117 *(WORD
*)ptr1
= ColorValue
;
118 *(WORD
*)ptr2
= ColorValue
;
123 else /* not enough memory for the tables */
125 if (NULL
!= NewCM
-> ColorTable
)
126 FreeMem(NewCM
-> ColorTable
, entries
* sizeof(UWORD
));
127 if (NULL
!= NewCM
-> LowColorBits
)
128 FreeMem(NewCM
-> LowColorBits
, entries
* sizeof(UWORD
));
130 FreeMem(NewCM
, sizeof(struct ColorMap
));
131 /* make return value invalid */
135 } /* if (NULL != NewCM) */