revert between 56095 -> 55830 in arch
[AROS.git] / rom / graphics / getcolormap.c
blobbf674366a07950c0e031579bb3dc9b053c1cb262
1 /*
2 Copyright © 1995-2016, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Graphics function GetColorMap()
6 Lang: english
7 */
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 /*****************************************************************************
16 NAME */
17 #include <proto/graphics.h>
19 AROS_LH1(struct ColorMap *, GetColorMap,
21 /* SYNOPSIS */
22 AROS_LHA(ULONG, entries, D0),
24 /* LOCATION */
25 struct GfxBase *, GfxBase, 95, Graphics)
27 /* FUNCTION
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.
34 INPUTS
35 entries - the number of entries for the colormap
37 RESULT
38 NULL - not enough memory could be allocated for the necessary
39 data structures
40 other - pointer to an initialized ColorMap structure that may be
41 stored into the ViewPort.ColorMap pointer.
43 NOTES
45 EXAMPLE
47 BUGS
49 SEE ALSO
50 FreeColorMap(), SetRGB4(), graphics/view.h
52 INTERNALS
53 RGB Colortable with preference values is incomplete.
55 HISTORY
57 *****************************************************************************/
59 AROS_LIBFUNC_INIT
61 struct ColorMap * NewCM = (struct ColorMap *)AllocMem(sizeof(struct ColorMap),
62 MEMF_PUBLIC|MEMF_CLEAR);
63 UWORD * ptr1, * ptr2;
65 #if 0
66 /* ColorTable with some preference values; !!! incomplete */
67 const WORD RGBColorTable[] = {0x0000,0x0f00,0x00f0,0x0ff0,
68 0x000f,0x0f0f,0x00ff,0x0fff}; /* !!!etc. */
69 #endif
72 /* go on if we got the memory for the ColorMap */
73 if (NULL != NewCM)
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) )
87 #if 0
88 ULONG i;
89 LONG * L_RGBColorTable = (LONG *)&RGBColorTable[0];
90 #endif
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;
98 NewCM->VPModeID = -1;
100 /* FIXME: Shouldn't these be different? */
101 NewCM->SpriteBase_Even = 0x0001;
102 NewCM->SpriteBase_Odd = 0x0001;
104 NewCM->Bp_1_base = 0x0008;
106 #if 0
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;
123 #endif
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 */
135 NewCM = NULL;
138 } /* if (NULL != NewCM) */
140 return NewCM;
142 AROS_LIBFUNC_EXIT
144 } /* GetColorMap */