/* Function: map_info ** ** Author: Paul W. Carlson April 1992 */ #include "ps_info.h" #include "map_info.h" #include "local_proto.h" int map_info (void) { char buf[400]; char east[50], west[50], north[50], south[50]; double x, y, k, fontsize, dy, margin; static char *region = "REGION: "; /* get north, south, east and west strings */ G_format_northing(PS.w.north, north, PS.w.proj); G_format_northing(PS.w.south, south, PS.w.proj); G_format_easting( PS.w.east, east, PS.w.proj); G_format_easting( PS.w.west, west, PS.w.proj); /* set font */ fontsize = (double)m_info.fontsize; fprintf(PS.fp, "(%s) FN %.1f SF\n", m_info.font, fontsize); /* get text location */ dy = fontsize; if (m_info.x > 0.0) x = 72.0 * m_info.x; else x = PS.map_left; if (m_info.y > 0.0) y = 72.0 * (PS.page_height - m_info.y); else y = PS.min_y; margin = 0.2 * fontsize; if (x < PS.map_left + margin) x = PS.map_left + margin; /* get offset for text to line up */ fprintf(PS.fp, "%.1f (%s) SW pop add /sx XD\n", x, region); /* if map ifo is on map... */ if (y > PS.map_bot && y <= PS.map_top && x < PS.map_right) { fprintf(PS.fp, "/mg %.1f def\n", margin); /* get max. length of text */ fprintf(PS.fp, "(%s) SW pop /t1 XD\n", PS.scaletext); if (PS.grid) { k = 5.5; sprintf(buf, "%d %s", PS.grid, G_database_unit_name(PS.grid != 1)); fprintf(PS.fp, "(%s) SW pop /t2 XD\n", buf); fprintf(PS.fp, "t1 t2 lt {/t1 t2 def} if \n"); } else k = 4.5; fprintf(PS.fp, "(%s %s) SW pop /t3 XD\n", west, east); fprintf(PS.fp, "t1 t3 lt {/t1 t3 def} if \n"); fprintf(PS.fp, "/t1 t1 sx mg add add def\n"); /* draw the background box */ if(m_info.bgcolor != -999) { /* skip if "none" */ set_rgb_color(m_info.bgcolor); fprintf(PS.fp, "%.1f %.1f t1 %.1f B fill \n", x - margin, y - k * dy - margin, y); } /* draw the border, if set */ if(m_info.border != -1) { set_rgb_color(m_info.border); fprintf(PS.fp, "%.1f %.1f t1 %.1f B\n", x - margin, y - k * dy - margin, y); fprintf(PS.fp, "D\n"); } } /* set text color */ set_rgb_color(m_info.color); /* show map scale */ show_text(x, y - dy, "SCALE:"); fprintf(PS.fp, "(%s) sx %.1f MS\n", PS.scaletext, y - dy); y -= dy; /* show size of grid, if any */ if (PS.grid) { sprintf(buf, "%d %s", PS.grid, G_database_unit_name(PS.grid != 1)); show_text(x, y - dy, "GRID:"); fprintf(PS.fp, "(%s) sx %.1f MS\n", buf, y - dy); y -= dy; } /* show region */ dy = 2.5 * fontsize; y -= dy; sprintf(buf, "%s ", west); show_text(x, y, region); fprintf(PS.fp, "(%s) sx %.1f MS\n", buf, y); fprintf(PS.fp, "currentpoint pop "); fprintf(PS.fp, "(%s) SW pop D2 sub /xo XD\n", north); fprintf(PS.fp, "( %s) show\n", east); dy = fontsize; fprintf(PS.fp, "(%s) xo %.1f MS\n", north, y + dy); fprintf(PS.fp, "(%s) xo %.1f MS\n", south, y - dy); y -= dy; if (PS.min_y > y) PS.min_y = y; return 0; }