00001
00017 #include <stdio.h>
00018 #include <unistd.h>
00019 #include <stdlib.h>
00020 #include <string.h>
00021 #include <sys/stat.h>
00022 #include <locale.h>
00023
00024 #include <grass/gis.h>
00025 #include "G.h"
00026 #include <grass/glocale.h>
00027
00028 struct G__ G__;
00029
00030 static int initialized = 0;
00031 static int gisinit(void);
00032
00033
00044 int G__gisinit(const char *version, const char *pgm)
00045 {
00046 char *mapset;
00047
00048 if (initialized)
00049 return 0;
00050
00051 G_set_program_name(pgm);
00052
00053 if (strcmp(version, GIS_H_VERSION) != 0)
00054 G_fatal_error(_("Incompatible library version for module"));
00055
00056
00057 G_location_path();
00058 switch (G__mapset_permissions(mapset = G_mapset())) {
00059 case 1:
00060 break;
00061 case 0:
00062 G_fatal_error(_("MAPSET %s - permission denied"), mapset);
00063 break;
00064 default:
00065 G_fatal_error(_("MAPSET %s not found"), mapset);
00066 break;
00067 }
00068
00069 gisinit();
00070
00071 return 0;
00072 }
00073
00074
00083 int G__no_gisinit(const char *version)
00084 {
00085 if (initialized)
00086 return 0;
00087
00088 if (strcmp(version, GIS_H_VERSION) != 0)
00089 G_fatal_error(_("Incompatible library version for module"));
00090
00091 gisinit();
00092
00093 return 0;
00094 }
00095
00096
00104 int G__check_gisinit(void)
00105 {
00106 if (initialized)
00107 return 1;
00108 G_warning(_("System not initialized. Programmer forgot to call G_gisinit()."));
00109 G_sleep(3);
00110 exit(EXIT_FAILURE);
00111 }
00112
00113
00114 static int gisinit(void)
00115 {
00116
00117 G__.window_set = 0;
00118
00119
00120 G__.want_histogram = 0;
00121
00122
00123 G__.compressed_buf_size = 0;
00124 G__.work_buf_size = 0;
00125 G__.null_buf_size = 0;
00126 G__.mask_buf_size = 0;
00127 G__.temp_buf_size = 0;
00128
00129 G__reallocate_mask_buf();
00130
00131
00132 G__.fp_type = FCELL_TYPE;
00133 G__.fp_nbytes = XDR_FLOAT_NBYTES;
00134
00135
00136 G__.auto_mask = -1;
00137
00138
00139 G__init_null_patterns();
00140
00141 initialized = 1;
00142
00143 setlocale(LC_NUMERIC, "C");
00144
00145 return 0;
00146 }