program ColorMapCheck;

uses Exec,AmigaDos,Graphics,Intuition,EasyTools;

type
	tWordArray = array[0..32000] of word;
	pWordArray = ^tWordArray;
	
var
	scr					: pScreen;
	cm					: pColorMap;
	i					: integer;
	highbits			: pWordArray;
	lowbits				: pWordArray;

	rgb					: array[1..3] of long;
	
	red,green,blue,
	r,g,b				: word;
	everythingok		: boolean;
begin
	if openintlib(39) then;
	if opengfxlib(39) then;
	
	Delay_(50*2);				(* Wait 2 seconds *)

	scr:=IntuitionBase^.ActiveScreen;
	cm:=scr^.ViewPort.ColorMap;

	highbits:=cm^.ColorTable;
	lowbits:=cm^.LowColorBits;
	
	everythingok:=TRUE;

	for i:=0 to cm^.Count-1 do
	begin
		GetRGB32(cm,i,1,@rgb);

		red:=rgb[1] SHR 24;
		green:=rgb[2] SHR 24;
		blue:=rgb[3] SHR 24;
		
		Write('Color ',i:3,' (',red:3,',',green:3,',',blue:3,') : ');

		r:=(highbits^[i] AND $F00) SHR 4;
		r:=r OR ((lowbits^[i] AND $F00) SHR 8);
		
		g:=(highbits^[i] AND $0F0);
		g:=g OR ((lowbits^[i] AND $0F0) SHR 4);
		
		b:=(highbits^[i] AND $00F) SHL 4;
		b:=b OR (lowbits^[i] AND $00F);
		
		if ((r=red) AND (g=green) AND (b=blue)) then
		begin
			Writeln('OK!');
		end else begin
			everythingok:=FALSE;
			Writeln('** WRONG **')
		end;
	end;
	Writeln;
	if everythingok then  Writeln('The whole Colormap is O.K. :)'#10);
end.
