/*! \brief Close vector map \param Map vector map to be closed \return 0 on success \return non-zero on error */ int V1_close_nat(struct Map_info *Map) { struct Coor_info CInfo; G_debug(1, "V1_close_nat(): name = %s mapset= %s", Map->name, Map->mapset); if (!VECT_OPEN(Map)) return 1; if (Map->mode == GV_MODE_WRITE || Map->mode == GV_MODE_RW) { Vect_coor_info(Map, &CInfo); Map->head.size = CInfo.size; dig__write_head(Map); Vect__write_head(Map); Vect_write_dblinks(Map); } /* close coor file */ fclose(Map->dig_fp.file); dig_file_free(&(Map->dig_fp)); /* delete temporary map ? */ if (Map->temporary) { if (getenv("GRASS_VECTOR_TEMPORARY") == NULL) { G_debug(1, "V1_close_nat(): temporary map <%s> TO BE DELETED", Map->name); Vect__delete(Map->name, TRUE); } else { G_debug(1, "V1_close_nat(): temporary map <%s> IS NOT DELETED", Map->name); } } return 0; }
/** \brief Open/Create new vector map. \param Map pointer to vector map \param name map name \param with_z 2D or 3D (unused?) \return 0 success \return -1 error */ int V1_open_new_nat(struct Map_info *Map, const char *name, int with_z) { char buf[1000]; struct stat info; G_debug(1, "V1_open_new_nat(): name = %s", name); sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, name); /* Set the 'coor' file version */ Map->head.Version_Major = GV_COOR_VER_MAJOR; Map->head.Version_Minor = GV_COOR_VER_MINOR; Map->head.Back_Major = GV_COOR_EARLIEST_MAJOR; Map->head.Back_Minor = GV_COOR_EARLIEST_MINOR; /* TODO open better */ dig_file_init(&(Map->dig_fp)); Map->dig_fp.file = G_fopen_new(buf, GRASS_VECT_COOR_ELEMENT); if (Map->dig_fp.file == NULL) return (-1); fclose(Map->dig_fp.file); dig_file_init(&(Map->dig_fp)); Map->dig_fp.file = G_fopen_modify(buf, GRASS_VECT_COOR_ELEMENT); if (Map->dig_fp.file == NULL) return (-1); /* check to see if dig_plus file exists and if so, remove it */ G__file_name(name_buf, buf, GV_TOPO_ELEMENT, G_mapset()); if (stat(name_buf, &info) == 0) /* file exists? */ unlink(name_buf); G__file_name(name_buf, buf, GRASS_VECT_COOR_ELEMENT, G_mapset()); Map->head.size = 0; Map->head.head_size = GV_COOR_HEAD_SIZE; Vect__write_head(Map); /* set conversion matrices */ dig_init_portable(&(Map->head.port), dig__byte_order_out()); if (!(dig__write_head(Map))) return (-1); return 0; }
/*! \brief Write vector map header to map head file \param Map pointer to Map_info structure \return 0 */ int Vect_write_header(const struct Map_info *Map) { /* do some sanity checking here */ Vect__write_head(Map); return 0; }