#include #include "global.h" static int page = 0; static char *date = NULL; static int max(int,int); static int pbuf(char *buf) { fprintf (stdout,"|%-*.*s|", page_width-2, page_width-2, buf); newline(); return 0; } int header (int unit1, int unit2) { int i,k; char buf[1024]; char tbuf1[256], tbuf2[256]; char north[50], south[50]; char east[50], west[50]; char ns_res[50], ew_res[50]; int len1, len2; char *label; char *mask; char *maskinfo(); char *print_label(); nlines = page_length; if (date == NULL) date = G_date(); divider("+"); page++; if (page == 1 && with_headers) { lcr ("", "RASTER MAP CATEGORY REPORT", "", buf,page_width-2); pbuf(buf); sprintf (tbuf1, "LOCATION: %s", G_location()); if (with_headers && (page_length > 0)) sprintf (tbuf2, "Page %d", page); else *tbuf2 = 0; lcr (tbuf1, tbuf2, date, buf,page_width-2); pbuf(buf); divider("|"); G_format_northing (window.north, north, window.proj); G_format_easting (window.east, east, window.proj); G_format_northing (window.south, south, window.proj); G_format_easting (window.west, west, window.proj); G_format_resolution (window.ns_res, ns_res, window.proj); G_format_resolution (window.ew_res, ew_res, window.proj); len1 = max(strlen (north), strlen(south)); len1 = max(len1, strlen(ns_res)); len2 = max(strlen (east), strlen(west)); len2 = max(len2, strlen(ew_res)); sprintf (buf, "%-9s north: %*s east: %*s", "", len1, north, len2, east); pbuf(buf); sprintf (buf, "%-9s south: %*s west: %*s", "REGION", len1, south, len2, west); pbuf(buf); sprintf (buf, "%-9s res: %*s res: %*s", "", len1, ns_res, len2, ew_res); pbuf(buf); divider("|"); label = nlayers > 1 ? "MAPS:" : "MAP:" ; len1 = strlen (label)+1; mask = maskinfo(); label = "MASK:"; while (mask) { fprintf (stdout,"|%-*s", len1, label); label = ""; mask = print_label (mask, page_width-len1-2, 1, 0, ' '); fprintf (stdout,"|"); newline(); } divider("|"); /*if title is available, print it, otherwise, print (untitled). in either case, print later name immediately following */ label = nlayers > 1 ? "MAPS:" : "MAP:" ; for (i = 0; i < nlayers; i++) { char *title; title = G_get_cats_title (&(layers[i].labels)); if (title) G_strip (title); if (title == NULL || *title == 0) title = "(untitled)"; sprintf (buf, "%-*s%*s%s (%s in %s)", len1, label, i*2, "", title, layers[i].name, layers[i].mapset); pbuf(buf); label = ""; } divider("|"); } len1 = layers[0].clen+layers[0].nlen; for (k = 0; k < 2; k++) { if (k == 0) lcr ("", "Category Information", "", buf, len1); else { sprintf (tbuf1, "%*s|description", layers[0].nlen, "#"); lcr (tbuf1, "", "", buf, len1); } fprintf (stdout,"|%s ", buf); for (i = unit1; i <= unit2; i++) fprintf (stdout,"|%*s", unit[i].len,unit[i].label[k]); fprintf (stdout,"|"); newline(); } divider("|"); return 0; } int divider (char *edge) { int n; fprintf (stdout,"%s", edge); n = page_width - 2; while(--n >= 0) fprintf (stdout,"-"); fprintf (stdout,"%s", edge); newline(); return 0; } static int max(int a,int b) { return a>b?a:b; } int trailer (void) { divider("+"); while (nlines > 0) newline(); if (use_formfeed) fprintf (stdout,"\f"); return 0; } int newline (void) { fprintf (stdout,"\n"); nlines--; return 0; } int lcr (char *left, char *center, char *right, char *buf, int n) { int ll, lc, lr; ll = strlen (left); lc = strlen (center); lr = strlen (right); sprintf (buf, "%s%*s%s%*s%s", left, (n-lc)/2-ll, "", center, n-lr-lc-(n-lc)/2,"",right); return 0; }