--- ray/src/rt/colortab.c 1993/05/05 10:18:47 2.4 +++ ray/src/rt/colortab.c 2004/03/30 16:13:01 2.9 @@ -1,9 +1,6 @@ -/* Copyright (c) 1992 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: colortab.c,v 2.9 2004/03/30 16:13:01 schorsch Exp $"; #endif - /* * colortab.c - allocate and control dynamic color table. * @@ -14,11 +11,18 @@ static char SCCSid[] = "$SunId$ LBL"; * histogram is cleared. This algorithm * performs only as well as the next drawing's color * distribution is correlated to the last. + * + * External symbols declared in drvier.h */ -#include "standard.h" +#include "copyright.h" +#include + +#include "standard.h" #include "color.h" +#include "driver.h" + /* histogram resolution */ #define NRED 24 #define NGRN 32 @@ -55,7 +59,8 @@ static unsigned short histo[NRED][NGRN][NBLU]; /* initial color cube boundary */ static int CLRCUBE[3][2] = {{0,NRED},{0,NGRN},{0,NBLU}}; -static int split(), cut(); +static int split(); +static void cut(); int @@ -68,9 +73,9 @@ int ncolors; return(0); /* free old tables */ if (clrtab != NULL) - free((char *)clrtab); + free((void *)clrtab); if (ctree != NULL) - free((char *)ctree); + free((void *)ctree); /* get new tables */ for (treesize = 1; treesize < ncolors; treesize <<= 1) ; @@ -82,18 +87,18 @@ int ncolors; /* partition color space */ cut(ctree, 0, CLRCUBE, 0, ncolors); /* clear histogram */ - bzero((char *)histo, sizeof(histo)); + memset((void *)histo, '\0', sizeof(histo)); /* return number of colors used */ return(ncolors); } -int -get_pixel(col, set_pixel) /* get pixel for color */ -COLOR col; -int (*set_pixel)(); +extern int +get_pixel( /* get pixel for color */ + COLOR col, + dr_newcolrf_t *newcolr +) { - extern char errmsg[]; int r, g, b; int cv[3]; register CNODE *tp; @@ -137,12 +142,13 @@ int (*set_pixel)(); h, r, g, b, clrtab[h].n); eputs(errmsg); #endif - (*set_pixel)(h, r, g, b); + (*newcolr)(h, r, g, b); } return(h); /* return pixel value */ } +void make_gmap(gam) /* make gamma correction map */ double gam; { @@ -155,15 +161,17 @@ double gam; } +void set_cmap(rmap, gmap, bmap) /* set custom color correction map */ BYTE *rmap, *gmap, *bmap; { - bcopy((char *)rmap, (char *)clrmap[RED], 256); - bcopy((char *)gmap, (char *)clrmap[GRN], 256); - bcopy((char *)bmap, (char *)clrmap[BLU], 256); + memcpy((void *)clrmap[RED], (void *)rmap, 256); + memcpy((void *)clrmap[GRN], (void *)gmap, 256); + memcpy((void *)clrmap[BLU], (void *)bmap, 256); } +void map_color(rgb, col) /* map a color to a byte triplet */ BYTE rgb[3]; COLOR col; @@ -174,7 +182,7 @@ COLOR col; } -static +static void cut(tree, level, box, c0, c1) /* partition color space */ register CNODE *tree; int level; @@ -189,7 +197,7 @@ int c0, c1; } /* split box */ *tree = split(box); - bcopy((char *)box, (char *)kb, sizeof(kb)); + memcpy((void *)kb, (void *)box, sizeof(kb)); /* do left (lesser) branch */ kb[prim(*tree)][1] = part(*tree); cut(tree+(1<>1);