This is in_cmap.c in view mode; [Download] [Up]
/*
* This software is copyrighted as noted below. It may be freely copied,
* modified, and redistributed, provided that the copyright notices are
* preserved on all copies.
*
* There is no warranty or other guarantee of fitness for this software,
* it is provided solely "as is". Bug reports or fixes may be sent
* to the author, who may or may not act on them as he desires.
*
* You may not include this software in a program or other software product
* without supplying the source, or without informing the end-user that the
* source is available for no extra charge.
*
* If you modify this software, you should include a notice giving the
* name of the person performing the modification, the date of modification,
* and the reason for such modification.
*/
/*
* in_cmap.c - Jack with the Input colormap from the rle files.
*
* Author: Martin R. Friedmann
* Dept of Electrical Engineering and Computer Science
* University of Michigan
* Date: Tue, April 12, 1990
* Copyright (c) 1990, University of Michigan
*/
#include "getx11.h"
/* uses global command line args (iflag, display_gamma) */
/* sets in_cmap, cmlen, ncmap and mono_color */
void get_dither_colors( img )
register image_information *img;
{
register int i, j;
/* Get some info out of the RLE header. */
img->ncmap = rle_dflt_hdr.ncmap;
{
char * v;
if ( (v = rle_getcom( "color_map_length", &rle_dflt_hdr )) != NULL )
img->cmlen = atoi( v );
else
img->cmlen = 1 << rle_dflt_hdr.cmaplen;
/* Protect against bogus information */
if ( img->cmlen < 0 )
img->cmlen = 0;
if ( img->cmlen > 256 )
img->cmlen = 256;
}
/* Input map, at least 3 channels */
if ( img->sep_colors ||
(img->img_channels == 1 && img->ncmap == 3 && img->cmlen) )
/* If using color map directly, apply display gamma, too. */
img->in_cmap = buildmap( &rle_dflt_hdr, 3, img->gamma,
display_gamma );
else
img->in_cmap = buildmap( &rle_dflt_hdr, 3, img->gamma, 1.0 );
for (i = 0; i < 3; i++ ) {
for (j = 0; j < 256; j++)
if ( img->in_cmap[i][j] != j )
break;
if (j < 256) break;
}
/* if i and j are maxed out, then in_cmap is the identity... */
if ( i == 3 && j == 256 )
img->in_cmap = NULL;
else
if ( debug_flag ) {
for (i = 0; i < 3; i++ ) {
fprintf(stderr, "Input image colormap channel %d:\n", i);
if ( i > 0 )
for ( j = 0; j < img->cmlen; j++ )
if (img->in_cmap[i-1][j] != img->in_cmap[i][j])
break;
if ( i > 0 && j == img->cmlen )
fprintf( stderr, "\tSame as channel %d\n", i - 1 );
else
for (j = 0; j < img->cmlen; j += 16) {
int k;
fprintf (stderr, "%3d: ", j );
for (k = 0; k < 16 ; k++ )
if ( j + k < img->cmlen )
fprintf(stderr, "%3d ", img->in_cmap[i][j+k]);
fprintf (stderr, "\n");
}
}
}
/* The mono_color flag means that a single input channel is being
* pseudocolored by a multi-channel colormap.
*/
img->mono_color = (img->img_channels == 1 && img->ncmap == 3 &&
img->in_cmap && img->cmlen);
/* make colormap monochrome... Whatahack! */
if ( img->mono_color && !img->color_dpy ) {
for (j = 0; j < 256; j++)
img->in_cmap[0][j] = (rle_pixel)
((30 * img->in_cmap[0][j] + 59 * img->in_cmap[1][j] +
11 * img->in_cmap[2][j]) / 100);
img->mono_color = False;
}
}
int eq_cmap( cm1, len1, cm2, len2 )
register rle_pixel **cm1, **cm2;
{
register int i, j;
if (cm1 && cm2) {
if ( len1 != len2 )
return 0;
for (i = 0; i < 3; i++ )
for (j = 0; j < 256; j++)
if ( cm1[i][j] != cm2[i][j] )
return 0;
} else
if (cm1 || cm2)
return 0;
return 1;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.