get_window.c

Go to the documentation of this file.
00001 /*
00002  *************************************************************************
00003  * G_get_window (window)
00004  *     struct Cell_head *window
00005  *
00006  *      read the current mapset window
00007  *      dies if error
00008  *
00009  *************************************************************************
00010  * G_get_default_window (window)
00011  *     struct Cell_head *window
00012  *
00013  *      read the default window for the location
00014  *      dies if error
00015  *
00016  *************************************************************************
00017  * char *
00018  * G__get_window (window, element, name, mapset)
00019  *      read the window 'name' in 'element' in 'mapset'
00020  *      returns NULL if ok, error message if not
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     /* Optionaly read the region from enviroment variable */
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     /* Read from file */
00139     if (!(fd = G_fopen_old (element, name, mapset) ))
00140     {
00141 /*
00142 char path[1024];
00143 G__file_name (path,element,name,mapset);
00144 fprintf (stderr, "G__get_window(%s)\n",path);
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 }

Generated on Wed Dec 19 14:59:06 2007 for GRASS by  doxygen 1.5.4