home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 52
/
Amiga_Dream_52.iso
/
Linux
/
Divers
/
bomb.tar.gz
/
bomb.tar
/
bomb
/
cmap.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-04-25
|
2KB
|
102 lines
/*
screen hacks
Copyright (C) 1992 Scott Draves <spot@cs.cmu.edu>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include "defs.h"
#include "cmap.h"
int ncmaps;
int the_cmaps[maxcmaps][256][3];
int
next_contrasting_color(int c, int i, int d)
{
int nchecked = 0;
int j = i;
int dd;
int max_i = 0;
int max = 0;
while (nchecked++ < 250) {
int t;
j = (j+1)%256;
t = (the_cmaps[c][i][0] - the_cmaps[c][j][0]);
dd = t * t;
t = (the_cmaps[c][i][1] - the_cmaps[c][j][1]);
dd += t * t;
t = (the_cmaps[c][i][2] - the_cmaps[c][j][2]);
dd += t * t;
if (dd > max) {
max_i = j;
max = dd;
}
if (dd >= d)
return j;
}
return max_i;
}
void
init_cmaps()
{
FILE *in;
char tag[10];
char buf[1000];
ncmaps = 0;
if (getenv("quick"))
goto quick;
sprintf(buf, "%scmap-data", DATA_DIR);
in = fopen(buf, "r");
if (NULL == in) {
message("in is NULL");
}
while (1 == fscanf(in, " ( %s9", tag)) {
int i;
if (!strcmp(tag, "comment")) {
while (')' != fgetc(in));
} else if (!strcmp(tag, "cmap")) {
for (i = 0; i < 256; i++) {
int *entry = &the_cmaps[ncmaps][i][0];
fscanf(in, " ( %d %d %d )", entry, entry+1, entry+2);
}
fscanf(in, " )");
ncmaps++;
if (ncmaps == maxcmaps) {
fprintf(stderr, "maxcmaps=%d exceeded, truncating\n", maxcmaps);
return;
}
} else
fprintf(stderr, "bad tag: %s\n", tag);
}
quick:
if (0 == ncmaps) {
int i;
fprintf(stderr, "no cmaps found, using graymap\n");
for (i = 0; i < 256; i++) {
the_cmaps[0][i][0] = i;
the_cmaps[0][i][1] = i;
the_cmaps[0][i][2] = i;
}
ncmaps = 1;
}
}