00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdlib.h>
00024 #include "G.h"
00025 #include <grass/gis.h>
00026 #include <grass/glocale.h>
00027
00028
00047 int G_get_window (struct Cell_head *window )
00048 {
00049 static int first = 1;
00050 static struct Cell_head dbwindow ;
00051 char *regvar;
00052
00053
00054 regvar = getenv("GRASS_REGION");
00055
00056 if ( regvar )
00057 {
00058 char **tokens, *delm = ";";
00059 char *err;
00060
00061 tokens = G_tokenize ( regvar, delm );
00062
00063 err = G__read_Cell_head_array ( tokens, window, 0);
00064
00065 G_free_tokens ( tokens );
00066
00067 if (err)
00068 {
00069 G_fatal_error (_("region for current mapset %s\nrun \"g.region\""), err);
00070 G_free (err);
00071 }
00072
00073 return 1;
00074 }
00075
00076 if (first)
00077 {
00078 char *wind, *err;
00079
00080 wind = getenv("WIND_OVERRIDE");
00081 if (wind)
00082 err = G__get_window (&dbwindow,"windows",wind,G_mapset());
00083 else
00084 err = G__get_window (&dbwindow,"","WIND",G_mapset());
00085
00086 if (err)
00087 {
00088 G_fatal_error (_("region for current mapset %s\nrun \"g.region\""), err);
00089 G_free (err);
00090 }
00091 }
00092
00093 first = 0;
00094 G_copy (window, &dbwindow, sizeof(dbwindow) ) ;
00095
00096 if (!G__.window_set)
00097 {
00098 G__.window_set = 1;
00099 G_copy(&G__.window, &dbwindow, sizeof(dbwindow) ) ;
00100 }
00101
00102 return 1;
00103 }
00104
00105
00118 int G_get_default_window ( struct Cell_head *window )
00119 {
00120 char *err;
00121
00122 if ((err = G__get_window (window,"","DEFAULT_WIND","PERMANENT")))
00123 {
00124 G_fatal_error (_("default region %s"), err);
00125 G_free (err);
00126 }
00127 return 1;
00128 }
00129
00130 char *G__get_window ( struct Cell_head *window,
00131 char *element, char *name, char *mapset)
00132 {
00133 FILE *fd ;
00134 char *err;
00135
00136 G_zero ((char *) window, sizeof (struct Cell_head));
00137
00138
00139 if (!(fd = G_fopen_old (element, name, mapset) ))
00140 {
00141
00142
00143
00144
00145
00146 return G_store (_("is not set"));
00147 }
00148
00149 err = G__read_Cell_head(fd, window, 0);
00150 fclose (fd);
00151
00152 if (err)
00153 {
00154 char msg[1024];
00155
00156 sprintf (msg, _("is invalid\n%s"), err);
00157 G_free (err);
00158 return G_store (msg);
00159 }
00160
00161 return NULL;
00162 }