19 #include <grass/gis.h> 20 #include <grass/glocale.h> 23 #define DATE_FORMAT "%c" 27 static const char *file_name;
29 static double width, height;
36 double left, right, bot, top;
39 static const struct paper papers[] = {
41 {
"a4", 8.268, 11.693, 0.5, 0.5, 1.0, 1.0},
42 {
"a3", 11.693, 16.535, 0.5, 0.5, 1.0, 1.0},
43 {
"a2", 16.54, 23.39, 1.0, 1.0, 1.0, 1.0},
44 {
"a1", 23.39, 33.07, 1.0, 1.0, 1.0, 1.0},
45 {
"a0", 33.07, 46.77, 1.0, 1.0, 1.0, 1.0},
46 {
"us-legal", 8.5, 14.0, 1.0, 1.0, 1.0, 1.0},
47 {
"us-letter", 8.5, 11.0, 1.0, 1.0, 1.0, 1.0},
48 {
"us-tabloid", 11.0, 17.0, 1.0, 1.0, 1.0, 1.0},
49 {
NULL, 0, 0, 0, 0, 0, 0}
52 static void write_prolog(
void)
54 char prolog_file[GPATH_MAX];
57 time_t
t = time(
NULL);
60 strftime(date_str,
sizeof(date_str),
DATE_FORMAT, tm);
62 sprintf(prolog_file,
"%s/etc/psdriver.ps",
G_gisbase());
64 prolog_fp = fopen(prolog_file,
"r");
69 output(
"%%!PS-Adobe-3.0 EPSF-3.0\n");
71 output(
"%%!PS-Adobe-3.0\n");
73 output(
"%%%%LanguageLevel: %d\n", 3);
74 output(
"%%%%Creator: GRASS PS Driver\n");
75 output(
"%%%%Title: %s\n", file_name);
77 output(
"%%%%Orientation: %s\n", landscape ?
"Landscape" :
"Portrait");
78 output(
"%%%%BoundingBox: %d %d %d %d\n",
81 output(
"%%%%CreationDate: %s\n", date_str);
82 output(
"%%%%EndComments\n");
84 output(
"%%%%BeginProlog\n");
85 while (!feof(prolog_fp)) {
88 if (!fgets(buf,
sizeof(buf), prolog_fp))
100 output(
"%%%%BeginSetup\n");
105 output(
"90 rotate 0 1 -1 scale\n");
107 output(
"0 %.1f translate 1 -1 scale\n", height);
109 output(
"%.1f %.1f BEGIN\n", width, height);
112 output(
"%%%%Page: 1 1\n");
115 static double in2pt(
double x)
120 static void swap(
double *x,
double *y)
128 static void get_paper(
void)
130 const char *
name = getenv(
"GRASS_RENDER_PS_PAPER");
131 const struct paper *paper;
158 ps.
left = in2pt(paper->left);
159 ps.
right = in2pt(paper->width) - in2pt(paper->right);
160 ps.
bot = in2pt(paper->bot);
161 ps.
top = in2pt(paper->height) - in2pt(paper->top);
164 height = in2pt(paper->height) - in2pt(paper->top) - in2pt(paper->bot);
167 swap(&width, &height);
177 G_gisinit(
"PS driver");
179 p = getenv(
"GRASS_RENDER_FILE");
180 if (!p || strlen(p) == 0)
184 p = file_name + strlen(file_name) - 4;
187 p = getenv(
"GRASS_RENDER_TRUECOLOR");
190 p = getenv(
"GRASS_RENDER_PS_LANDSCAPE");
191 landscape = p && strcmp(p,
"TRUE") == 0;
193 p = getenv(
"GRASS_RENDER_PS_HEADER");
196 p = getenv(
"GRASS_RENDER_PS_TRAILER");
int G_strcasecmp(const char *x, const char *y)
String compare ignoring case (upper or lower)
const char * PS_Graph_get_file(void)
Get render file.
void G_verbose_message(const char *msg,...)
Print a message to stderr but only if module is in verbose mode.
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
void output(const char *fmt,...)
const char * G_whoami(void)
Gets user's name.
const char * G_gisbase(void)
Get full path name of the top level module directory.