123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #include <string.h>
- #include <grass/raster.h>
- #include "global.h"
- static int page = 0;
- static const 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;
- 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("|");
- mask = maskinfo();
- label = "MASK:";
- len1 = strlen(label) + 1;
- 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:";
- len1 = strlen(label) + 1;
- for (i = 0; i < nlayers; i++) {
- char *title;
- title = Rast_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(const char *left, const char *center, const char *right, char *buf, int n)
- {
- int ll, lc, lr;
- int sc, sr;
- ll = strlen(left);
- lc = strlen(center);
- lr = strlen(right);
- sc = (n - lc) / 2 - ll;
- sr = n - lr - lc - (n - lc) / 2;
-
- sprintf(buf, "%s%*s%s%*s%s",
- left,
- sc > 0 ? sc : 0, "", center,
- sc > 0 ? sr : sr + sc , "", right);
- return 0;
- }
|