28#include <grass/colors.h>
29#include <grass/glocale.h>
34static void map_file(
void)
40 fd = open(
png.file_name, O_RDWR);
45 png.handle = CreateFileMapping((HANDLE)_get_osfhandle(fd),
NULL,
46 PAGE_READWRITE, 0, size,
NULL);
49 ptr = MapViewOfFile(
png.handle, FILE_MAP_WRITE, 0, 0, size);
53 ptr = mmap(
NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (off_t)0);
54 if (ptr == MAP_FAILED)
83 unsigned int red, grn, blu;
88 G_gisinit(
"PNG driver");
90 p = getenv(
"GRASS_RENDER_FILE");
91 if (!p || strlen(p) == 0)
93 G_debug(1,
"png: GRASS_RENDER_FILE: %s", p);
97 p = getenv(
"GRASS_RENDER_TRUECOLOR");
98 png.true_color = !p || strcmp(p,
"FALSE") != 0;
101 png.true_color ? _(
"enabled") : _(
"disabled"));
103 p = getenv(
"GRASS_RENDER_FILE_MAPPED");
104 do_map = p && strcmp(p,
"TRUE") == 0;
107 char *ext =
png.file_name + strlen(
png.file_name) - 4;
113 p = getenv(
"GRASS_RENDER_FILE_READ");
114 do_read = p && strcmp(p,
"TRUE") == 0;
116 if (do_read && access(
png.file_name, 0) != 0)
123 png.clip_bot =
png.height;
125 png.clip_rite =
png.width;
127 p = getenv(
"GRASS_RENDER_TRANSPARENT");
128 png.has_alpha = p && strcmp(p,
"TRUE") == 0;
132 p = getenv(
"GRASS_RENDER_BACKGROUNDCOLOR");
134 (sscanf(p,
"%02x%02x%02x", &red, &grn, &blu) == 3 ||
140 if (strcmp(DEFAULT_FG_COLOR,
"white") == 0)
152 if (do_read && do_map)
156 png.grid = G_malloc(
png.width *
png.height *
sizeof(
unsigned int));
163 if (do_read && !
png.mapped)
166 if (do_map && !
png.mapped) {
181 return png.file_name;
void G_free(void *buf)
Free allocated memory.
int G_str_to_color(const char *str, int *red, int *grn, int *blu)
Parse color string and set red,green,blue.
unsigned int png_get_color(int r, int g, int b, int a)
void png_init_color_table(void)
int G_debug(int level, const char *msg,...)
Print debugging message.
void G_verbose_message(const char *msg,...)
Print a message to stderr but only if module is in verbose mode.
void PNG_Erase(void)
Erase screen.
int PNG_Graph_set(void)
Start up graphics processing.
const char * PNG_Graph_get_file(void)
Get render file.
GRASS png display driver - header file.
int G_strcasecmp(const char *x, const char *y)
String compare ignoring case (upper or lower)