[comp.sys.apollo] Problems with setting the colour map in GPR

HEAP@bmc.uu.se (07/05/89)

Hi,

I am currently working on a GIFviewer for my apollo dn4000. I
don't know whether I am reinventing the wheel, and such a
program already exists, but still I am...

  Anyway: I have come so far that the picture is displayed alright,
but for the colours! As you can see from the code fragment I have
enclosed, I call gpr_$set_color_map in what I belive the correct way.

  The problem is that the image still is displayed in the default
colour map, and not in mine. I verified this by commenting the
gpr_$set_color_map call out. I get no errors from gpr_$set_color_map,
just wrong colour map.

  The call chain is something like this:

main -> init         (initializes gpr)
     -> readscreen   (loads global data)
     -> readimage -> initcolors -> color_entry
     -> gpr_$terminate

  Could somebody please tell me what I am doing wrong!

-- 
Karl-K|nig K|nigsson

(if you reply by mail, use the address below rather than the one in
the header - that one might cause the letter to go astray)
+----------------------------------------------------------------------+
|   Email: Koenig@tdb.uu.se  or  Syskoenig@kemist.uu.se   (se=sweden)  |
|   Tel  : +46 - (0)18 - 13 55 66 (home) or 18 29 78 (work)            |
+----------------------------------------------------------------------+
|"Why stop now, just when I'm hating it" -- Marvin the Paranoid Android|
+----------------------------------------------------------------------+

void init(mode)
gpr_$display_mode_t mode;
{
  .
  .      as in the c-examples in the gpr manual
  .
}

gpr_$color_t color_entry(red, green, blue)
short red, green, blue;
{
  return (red << 16) + (green << 8) + blue;
}

void initcolors(colormap, ncolors)

     unsigned char colormap[256][3];
     int ncolors;
{
  register i;
  static gpr_$pixel_value_t start_index = 0;
  gpr_$color_vector_t gpr_color_map;

  for (i=0; i < ncolors; i++)
    gpr_color_map[i] = color_entry(colormap[i][0],
				   colormap[i][1],
				   colormap[i][2]);
  gpr_$set_color_map(start_index, ncolors, gpr_color_map, status);
  check("setting color map");
}

void  main(argc,argv)
int argc;
char *argv[];
{
  .
  .
  init(gpr_$borrow);   /* initialize the GPR graphics package */
  .
  .
  readscreen();        /* load global screen data */
  .
  .
  readimage();         /* read and uncompress the current image */
  .
  .
  gpr_$terminate(false, status);
}
---------------------------------------------------------------------------