Revision: 76813
          http://sourceforge.net/p/brlcad/code/76813
Author:   starseeker
Date:     2020-08-17 02:56:07 +0000 (Mon, 17 Aug 2020)
Log Message:
-----------
See if collapsing ogr into its own lib helps... may be too big by itself

Modified Paths:
--------------
    brlcad/trunk/src/other/gdal/CMakeLists.txt
    brlcad/trunk/src/other/gdal/apps/CMakeLists.txt
    brlcad/trunk/src/other/gdal/frmts/grcdataset.cpp
    brlcad/trunk/src/other/gdal/frmts/grddataset.cpp
    brlcad/trunk/src/other/gdal/gcore/CMakeLists.txt
    brlcad/trunk/src/other/gdal/ogr/CMakeLists.txt
    brlcad/trunk/src/other/gdal/ogr/gml2ogrgeometry.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_geocoding.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_json_header.h
    brlcad/trunk/src/other/gdal.dist

Added Paths:
-----------
    brlcad/trunk/src/other/gdal/ogr/COPYING
    brlcad/trunk/src/other/gdal/ogr/README.txt
    brlcad/trunk/src/other/gdal/ogr/avc.h
    brlcad/trunk/src/other/gdal/ogr/avc_bin.c
    brlcad/trunk/src/other/gdal/ogr/avc_binwr.c
    brlcad/trunk/src/other/gdal/ogr/avc_e00gen.c
    brlcad/trunk/src/other/gdal/ogr/avc_e00parse.c
    brlcad/trunk/src/other/gdal/ogr/avc_e00read.c
    brlcad/trunk/src/other/gdal/ogr/avc_e00write.c
    brlcad/trunk/src/other/gdal/ogr/avc_mbyte.c
    brlcad/trunk/src/other/gdal/ogr/avc_mbyte.h
    brlcad/trunk/src/other/gdal/ogr/avc_misc.c
    brlcad/trunk/src/other/gdal/ogr/avc_rawbin.c
    brlcad/trunk/src/other/gdal/ogr/dbfopen.c
    brlcad/trunk/src/other/gdal/ogr/ddfrecordindex.cpp
    brlcad/trunk/src/other/gdal/ogr/dgnfloat.cpp
    brlcad/trunk/src/other/gdal/ogr/dgnhelp.cpp
    brlcad/trunk/src/other/gdal/ogr/dgnlib.h
    brlcad/trunk/src/other/gdal/ogr/dgnlibp.h
    brlcad/trunk/src/other/gdal/ogr/dgnopen.cpp
    brlcad/trunk/src/other/gdal/ogr/dgnread.cpp
    brlcad/trunk/src/other/gdal/ogr/dgnstroke.cpp
    brlcad/trunk/src/other/gdal/ogr/dgnwrite.cpp
    brlcad/trunk/src/other/gdal/ogr/dist/
    brlcad/trunk/src/other/gdal/ogr/filegdbindex.cpp
    brlcad/trunk/src/other/gdal/ogr/filegdbtable.cpp
    brlcad/trunk/src/other/gdal/ogr/filegdbtable.h
    brlcad/trunk/src/other/gdal/ogr/filegdbtable_priv.h
    brlcad/trunk/src/other/gdal/ogr/gdaldb2rasterband.cpp
    brlcad/trunk/src/other/gdal/ogr/geoconcept.c
    brlcad/trunk/src/other/gdal/ogr/geoconcept.h
    brlcad/trunk/src/other/gdal/ogr/geoconcept_syscoord.c
    brlcad/trunk/src/other/gdal/ogr/geoconcept_syscoord.h
    brlcad/trunk/src/other/gdal/ogr/gtm.cpp
    brlcad/trunk/src/other/gdal/ogr/gtm.h
    brlcad/trunk/src/other/gdal/ogr/gtmtracklayer.cpp
    brlcad/trunk/src/other/gdal/ogr/gtmwaypointlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/intronurbs.cpp
    brlcad/trunk/src/other/gdal/ogr/io_selafin.cpp
    brlcad/trunk/src/other/gdal/ogr/io_selafin.h
    brlcad/trunk/src/other/gdal/ogr/libjson/
    brlcad/trunk/src/other/gdal/ogr/ll_recio.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab.h
    brlcad/trunk/src/other/gdal/ogr/mitab_bounds.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_coordsys.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_datfile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_feature.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_feature_mif.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_geometry.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_geometry.h
    brlcad/trunk/src/other/gdal/ogr/mitab_idfile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_imapinfofile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_indfile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_mapcoordblock.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_mapfile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_mapheaderblock.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_mapindexblock.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_mapobjectblock.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_maptoolblock.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_middatafile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_miffile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_ogr_datasource.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_ogr_driver.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_ogr_driver.h
    brlcad/trunk/src/other/gdal/ogr/mitab_priv.h
    brlcad/trunk/src/other/gdal/ogr/mitab_rawbinblock.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_spatialref.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_tabfile.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_tabseamless.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_tabview.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_tooldef.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_utils.cpp
    brlcad/trunk/src/other/gdal/ogr/mitab_utils.h
    brlcad/trunk/src/other/gdal/ogr/ntf.h
    brlcad/trunk/src/other/gdal/ogr/ntf_codelist.cpp
    brlcad/trunk/src/other/gdal/ogr/ntf_estlayers.cpp
    brlcad/trunk/src/other/gdal/ogr/ntf_generic.cpp
    brlcad/trunk/src/other/gdal/ogr/ntf_raster.cpp
    brlcad/trunk/src/other/gdal/ogr/ntffilereader.cpp
    brlcad/trunk/src/other/gdal/ogr/ntfrecord.cpp
    brlcad/trunk/src/other/gdal/ogr/ntfstroke.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_aeronavfaa.h
    brlcad/trunk/src/other/gdal/ogr/ogr_arcgen.h
    brlcad/trunk/src/other/gdal/ogr/ogr_attrind.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_attrind.h
    brlcad/trunk/src/other/gdal/ogr/ogr_autocad_services.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_autocad_services.h
    brlcad/trunk/src/other/gdal/ogr/ogr_avc.h
    brlcad/trunk/src/other/gdal/ogr/ogr_bna.h
    brlcad/trunk/src/other/gdal/ogr/ogr_csv.h
    brlcad/trunk/src/other/gdal/ogr/ogr_db2.h
    brlcad/trunk/src/other/gdal/ogr/ogr_dgn.h
    brlcad/trunk/src/other/gdal/ogr/ogr_dxf.h
    brlcad/trunk/src/other/gdal/ogr/ogr_edigeo.h
    brlcad/trunk/src/other/gdal/ogr/ogr_gensql.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_gensql.h
    brlcad/trunk/src/other/gdal/ogr/ogr_geojson.h
    brlcad/trunk/src/other/gdal/ogr/ogr_gmt.h
    brlcad/trunk/src/other/gdal/ogr/ogr_gpsbabel.h
    brlcad/trunk/src/other/gdal/ogr/ogr_gtm.h
    brlcad/trunk/src/other/gdal/ogr/ogr_htf.h
    brlcad/trunk/src/other/gdal/ogr/ogr_idrisi.h
    brlcad/trunk/src/other/gdal/ogr/ogr_mem.h
    brlcad/trunk/src/other/gdal/ogr/ogr_miattrind.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_openair.h
    brlcad/trunk/src/other/gdal/ogr/ogr_openfilegdb.h
    brlcad/trunk/src/other/gdal/ogr/ogr_pds.h
    brlcad/trunk/src/other/gdal/ogr/ogr_pgdump.h
    brlcad/trunk/src/other/gdal/ogr/ogr_rec.h
    brlcad/trunk/src/other/gdal/ogr/ogr_s57.h
    brlcad/trunk/src/other/gdal/ogr/ogr_segukooa.h
    brlcad/trunk/src/other/gdal/ogr/ogr_segy.h
    brlcad/trunk/src/other/gdal/ogr/ogr_selafin.h
    brlcad/trunk/src/other/gdal/ogr/ogr_sua.h
    brlcad/trunk/src/other/gdal/ogr/ogr_sxf.h
    brlcad/trunk/src/other/gdal/ogr/ogr_tiger.h
    brlcad/trunk/src/other/gdal/ogr/ogr_vdv.h
    brlcad/trunk/src/other/gdal/ogr/ogr_vrt.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_apt_reader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_apt_reader.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_awy_reader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_awy_reader.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_fix_reader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_fix_reader.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_geo_utils.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_geo_utils.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_nav_reader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_nav_reader.h
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_reader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogr_xplane_reader.h
    brlcad/trunk/src/other/gdal/ogr/ograeronavfaadatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ograeronavfaadriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ograeronavfaalayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ograrcgendatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ograrcgendriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ograrcgenlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravcbindatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravcbindriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravcbinlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravcdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravce00datasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravce00driver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravce00layer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogravclayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrbnadatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrbnadriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrbnalayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrbnaparser.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrbnaparser.h
    brlcad/trunk/src/other/gdal/ogr/ogrcsvdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrcsvdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrcsvlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2cli.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2datasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2datasourcemd.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2driver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2geometryvalidator.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2layer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2selectlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdb2tablelayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdgndatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdgndriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdgnlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxf_blockmap.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxf_dimension.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxf_hatch.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxf_polyline_smooth.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxf_polyline_smooth.h
    brlcad/trunk/src/other/gdal/ogr/ogrdxfblockslayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxfblockswriterlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxfdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxfdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxflayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxfreader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxfwriterds.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrdxfwriterlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogredigeodatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogredigeodriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogredigeolayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogreditablelayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogreditablelayer.h
    brlcad/trunk/src/other/gdal/ogr/ogremulatedtransaction.cpp
    brlcad/trunk/src/other/gdal/ogr/ogremulatedtransaction.h
    brlcad/trunk/src/other/gdal/ogr/ogresrijsonreader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeoconceptdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeoconceptdatasource.h
    brlcad/trunk/src/other/gdal/ogr/ogrgeoconceptdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeoconceptdriver.h
    brlcad/trunk/src/other/gdal/ogr/ogrgeoconceptlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeoconceptlayer.h
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsondatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsondriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonreader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonreader.h
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonutils.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonutils.h
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonwritelayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonwriter.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgeojsonwriter.h
    brlcad/trunk/src/other/gdal/ogr/ogrgmtdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgmtdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgmtlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgpsbabeldatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgpsbabeldriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgpsbabelwritedatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgtmdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgtmdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrgtmlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrhtfdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrhtfdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrhtflayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogridrisidatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogridrisidriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogridrisilayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrlayerdecorator.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrlayerdecorator.h
    brlcad/trunk/src/other/gdal/ogr/ogrlayerpool.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrlayerpool.h
    brlcad/trunk/src/other/gdal/ogr/ogrmemdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrmemdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrmemlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrmutexeddatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrmutexeddatasource.h
    brlcad/trunk/src/other/gdal/ogr/ogrmutexedlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrmutexedlayer.h
    brlcad/trunk/src/other/gdal/ogr/ogrntfdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrntfdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrntffeatureclasslayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrntflayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrnulldriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenairdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenairdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenairlabellayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenairlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenfilegdbdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenfilegdbdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogropenfilegdblayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrpdsdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrpdsdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrpdslayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrpgdumpdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrpgdumpdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrpgdumplayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrrecdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrrecdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrreclayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrregisterall.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrs57datasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrs57driver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrs57layer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsegukooadatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsegukooadriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsegukooalayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsegydatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsegydriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsegylayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrselafindatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrselafindriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrselafinlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsf_frmts.h
    brlcad/trunk/src/other/gdal/ogr/ogrsfdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsfdriverregistrar.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrshape.h
    brlcad/trunk/src/other/gdal/ogr/ogrshapedatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrshapedriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrshapelayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsuadatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsuadriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsualayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsxfdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsxfdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrsxflayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrtigerdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrtigerdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrtigerlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrtopojsonreader.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrunionlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrunionlayer.h
    brlcad/trunk/src/other/gdal/ogr/ogrvdvdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrvrtdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrvrtdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrvrtlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrwarpedlayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrwarpedlayer.h
    brlcad/trunk/src/other/gdal/ogr/ogrwasp.h
    brlcad/trunk/src/other/gdal/ogr/ogrwaspdatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrwaspdriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrwasplayer.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrxplanedatasource.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrxplanedriver.cpp
    brlcad/trunk/src/other/gdal/ogr/ogrxplanelayer.cpp
    brlcad/trunk/src/other/gdal/ogr/org_sxf_defs.h
    brlcad/trunk/src/other/gdal/ogr/s57.h
    brlcad/trunk/src/other/gdal/ogr/s57classregistrar.cpp
    brlcad/trunk/src/other/gdal/ogr/s57featuredefns.cpp
    brlcad/trunk/src/other/gdal/ogr/s57filecollector.cpp
    brlcad/trunk/src/other/gdal/ogr/s57reader.cpp
    brlcad/trunk/src/other/gdal/ogr/s57tables.h
    brlcad/trunk/src/other/gdal/ogr/s57writer.cpp
    brlcad/trunk/src/other/gdal/ogr/sbnsearch.c
    brlcad/trunk/src/other/gdal/ogr/segukooa.txt
    brlcad/trunk/src/other/gdal/ogr/segy.txt
    brlcad/trunk/src/other/gdal/ogr/shape2ogr.cpp
    brlcad/trunk/src/other/gdal/ogr/shapefil.h
    brlcad/trunk/src/other/gdal/ogr/shp_vsi.c
    brlcad/trunk/src/other/gdal/ogr/shp_vsi.h
    brlcad/trunk/src/other/gdal/ogr/shpopen.c
    brlcad/trunk/src/other/gdal/ogr/shptree.c
    brlcad/trunk/src/other/gdal/ogr/tigeraltname.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerarealandmarks.cpp
    brlcad/trunk/src/other/gdal/ogr/tigercompletechain.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerentitynames.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerfeatureids.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerfilebase.cpp
    brlcad/trunk/src/other/gdal/ogr/tigeridhistory.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerkeyfeatures.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerlandmarks.cpp
    brlcad/trunk/src/other/gdal/ogr/tigeroverunder.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerpip.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerpoint.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerpolychainlink.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerpolygon.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerpolygoncorrections.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerpolygoneconomic.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerspatialmetadata.cpp
    brlcad/trunk/src/other/gdal/ogr/tigertlidrange.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerzerocellid.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerzipcodes.cpp
    brlcad/trunk/src/other/gdal/ogr/tigerzipplus4.cpp
    brlcad/trunk/src/other/gdal/ogr/web/

Removed Paths:
-------------
    brlcad/trunk/src/other/gdal/ogr/ogrsf_frmts/

Modified: brlcad/trunk/src/other/gdal/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/other/gdal/CMakeLists.txt  2020-08-17 02:10:56 UTC (rev 
76812)
+++ brlcad/trunk/src/other/gdal/CMakeLists.txt  2020-08-17 02:56:07 UTC (rev 
76813)
@@ -341,17 +341,9 @@
   $<TARGET_OBJECTS:gdal_mdreader_obj>
   $<TARGET_OBJECTS:gdal_gcore_obj>
   $<TARGET_OBJECTS:gdal_alg_obj>
-  $<TARGET_OBJECTS:libtiff_obj>
-  $<TARGET_OBJECTS:libgeotiff_obj>
-  $<TARGET_OBJECTS:json_obj>
-  $<TARGET_OBJECTS:gdal_ogr_obj>
   $<TARGET_OBJECTS:gdal_gnm_obj>
   $<TARGET_OBJECTS:gdal_apps_obj>
   )
-foreach(frmt ${OGR_FORMATS})
-  set(gdal_srcs ${gdal_srcs} $<TARGET_OBJECTS:ogr_frmt_${frmt}>)
-  set_target_properties(ogr_frmt_${frmt} PROPERTIES FOLDER "Third Party 
Libraries/GDAL")
-endforeach(frmt ${OGR_FORMATS})
 
 set(gdal_libs ${PROJ4_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} 
${CMAKE_THREAD_LIBS_INIT})
 set(lib_list M DL ICONV)
@@ -365,7 +357,7 @@
 endif(MSVC)
 
 add_library(gdal SHARED ${gdal_srcs})
-target_link_libraries(gdal gdal_frmts ${gdal_libs})
+target_link_libraries(gdal gdal_frmts gdal_ogr ${gdal_libs})
 install(TARGETS gdal
   RUNTIME DESTINATION ${BIN_DIR}
   LIBRARY DESTINATION ${LIB_DIR}

Modified: brlcad/trunk/src/other/gdal/apps/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/other/gdal/apps/CMakeLists.txt     2020-08-17 02:10:56 UTC 
(rev 76812)
+++ brlcad/trunk/src/other/gdal/apps/CMakeLists.txt     2020-08-17 02:56:07 UTC 
(rev 76813)
@@ -2,9 +2,8 @@
 include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}/../frmts
-       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/ogrsf_frmts/geojson/libjson
-       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/ogrsf_frmts/geojson
-       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/ogrsf_frmts/generic
+       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/libjson
+       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr
        )
 
 set(apps_srcs

Modified: brlcad/trunk/src/other/gdal/frmts/grcdataset.cpp
===================================================================
--- brlcad/trunk/src/other/gdal/frmts/grcdataset.cpp    2020-08-17 02:10:56 UTC 
(rev 76812)
+++ brlcad/trunk/src/other/gdal/frmts/grcdataset.cpp    2020-08-17 02:56:07 UTC 
(rev 76813)
@@ -30,13 +30,8 @@
 #include "gdal_frmts.h"
 #include "gdal_pam.h"
 #include "northwood.h"
+#include "../ogr/mitab.h"
 
-#ifdef MSVC
-#include "..\..\ogr\ogrsf_frmts\mitab\mitab.h"
-#else
-#include "../../ogr/ogrsf_frmts/mitab/mitab.h"
-#endif
-
 CPL_CVSID("$Id: grcdataset.cpp 38727 2017-05-31 17:50:31Z dmorissette $");
 
 /************************************************************************/

Modified: brlcad/trunk/src/other/gdal/frmts/grddataset.cpp
===================================================================
--- brlcad/trunk/src/other/gdal/frmts/grddataset.cpp    2020-08-17 02:10:56 UTC 
(rev 76812)
+++ brlcad/trunk/src/other/gdal/frmts/grddataset.cpp    2020-08-17 02:56:07 UTC 
(rev 76813)
@@ -34,13 +34,8 @@
 #include "gdal_frmts.h"
 #include "gdal_pam.h"
 #include "northwood.h"
+#include "../ogr/mitab.h"
 
-#ifdef MSVC
-#include "..\..\ogr\ogrsf_frmts\mitab\mitab.h"
-#else
-#include "../../ogr/ogrsf_frmts/mitab/mitab.h"
-#endif
-
 CPL_CVSID("$Id: grddataset.cpp 36501 2016-11-25 14:09:24Z rouault $");
 
 #define NODATA -1.e37f

Modified: brlcad/trunk/src/other/gdal/gcore/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/other/gdal/gcore/CMakeLists.txt    2020-08-17 02:10:56 UTC 
(rev 76812)
+++ brlcad/trunk/src/other/gdal/gcore/CMakeLists.txt    2020-08-17 02:56:07 UTC 
(rev 76813)
@@ -2,13 +2,11 @@
 
 include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}/../frmts
-       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/ogrsf_frmts/generic
+       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr
        ${CMAKE_CURRENT_SOURCE_DIR}/../gnm/gnm_frmts
-       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/ogrsf_frmts/geojson/libjson
-       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/ogrsf_frmts/geojson
+       ${CMAKE_CURRENT_SOURCE_DIR}/../ogr/libjson
 )
 
-
 set(gcore_srcs
        gdalopeninfo.cpp
        gdaldrivermanager.cpp

Modified: brlcad/trunk/src/other/gdal/ogr/CMakeLists.txt
===================================================================
--- brlcad/trunk/src/other/gdal/ogr/CMakeLists.txt      2020-08-17 02:10:56 UTC 
(rev 76812)
+++ brlcad/trunk/src/other/gdal/ogr/CMakeLists.txt      2020-08-17 02:56:07 UTC 
(rev 76813)
@@ -1,80 +1,297 @@
+add_subdirectory(libjson)
 
-add_subdirectory(ogrsf_frmts)
-
 include_directories(
-       ${CMAKE_CURRENT_SOURCE_DIR}
-       ${CMAKE_CURRENT_SOURCE_DIR}/ogrsf_frmts
-       ${CMAKE_CURRENT_SOURCE_DIR}/ogrsf_frmts/mem
-       ${CMAKE_CURRENT_SOURCE_DIR}/ogrsf_frmts/geojson
-       ${CMAKE_CURRENT_SOURCE_DIR}/ogrsf_frmts/geojson/libjson
-       )
+  ${CMAKE_CURRENT_SOURCE_DIR}
+  ${CMAKE_CURRENT_SOURCE_DIR}/../frmts
+  ${CMAKE_CURRENT_SOURCE_DIR}/libjson
+  )
 
+set(ogr_frmt_srcs
+  ograeronavfaadriver.cpp ograeronavfaadatasource.cpp ograeronavfaalayer.cpp
+  ograrcgendriver.cpp ograrcgendatasource.cpp ograrcgenlayer.cpp
+  avc_bin.c
+  avc_binwr.c
+  avc_e00gen.c
+  avc_e00parse.c
+  avc_e00write.c
+  avc_e00read.c
+  avc_mbyte.c
+  avc_misc.c
+  avc_rawbin.c
+  ogravcbindriver.cpp
+  ogravcbindatasource.cpp
+  ogravcbinlayer.cpp
+  ogravclayer.cpp
+  ogravcdatasource.cpp
+  ogravce00layer.cpp
+  ogravce00datasource.cpp
+  ogravce00driver.cpp
+  ogrbnadriver.cpp ogrbnadatasource.cpp ogrbnalayer.cpp ogrbnaparser.cpp
+  ogrcsvdriver.cpp ogrcsvdatasource.cpp ogrcsvlayer.cpp
+  ogrdgndriver.cpp
+  ogrdgndatasource.cpp
+  ogrdgnlayer.cpp
+  dgnopen.cpp
+  dgnread.cpp
+  dgnfloat.cpp
+  dgnhelp.cpp
+  dgnwrite.cpp
+  dgnstroke.cpp
+  ogrdxfdriver.cpp
+  ogrdxfdatasource.cpp
+  ogrdxflayer.cpp
+  ogrdxfreader.cpp
+  ogrdxf_blockmap.cpp
+  ogrdxf_dimension.cpp
+  ogrdxfwriterds.cpp
+  ogrdxfwriterlayer.cpp
+  intronurbs.cpp
+  ogrdxf_polyline_smooth.cpp
+  ogrdxfblockslayer.cpp
+  ogrdxfblockswriterlayer.cpp
+  ogrdxf_hatch.cpp
+  ogr_autocad_services.cpp
+  ogredigeodriver.cpp ogredigeodatasource.cpp ogredigeolayer.cpp
+  ogrsfdriverregistrar.cpp
+  ogrlayer.cpp
+  ogrdatasource.cpp
+  ogrsfdriver.cpp
+  ogrregisterall.cpp
+  ogr_gensql.cpp
+  ogr_attrind.cpp
+  ogr_miattrind.cpp
+  ogrlayerdecorator.cpp
+  ogrwarpedlayer.cpp
+  ogrunionlayer.cpp
+  ogrlayerpool.cpp
+  ogrmutexedlayer.cpp
+  ogrmutexeddatasource.cpp
+  ogremulatedtransaction.cpp
+  ogreditablelayer.cpp
+  geoconcept.c
+  geoconcept_syscoord.c
+  ogrgeoconceptdriver.cpp
+  ogrgeoconceptdatasource.cpp
+  ogrgeoconceptlayer.cpp
+  ogrgeojsondriver.cpp
+  ogrgeojsondatasource.cpp
+  ogrgeojsonlayer.cpp
+  ogrgeojsonwritelayer.cpp
+  ogrgeojsonutils.cpp
+  ogrgeojsonreader.cpp
+  ogrgeojsonwriter.cpp
+  ogresrijsonreader.cpp
+  ogrtopojsonreader.cpp
+  ogrgmtdriver.cpp ogrgmtdatasource.cpp ogrgmtlayer.cpp
+  ogrgpsbabeldriver.cpp ogrgpsbabeldatasource.cpp 
ogrgpsbabelwritedatasource.cpp
+  ogrgtmdriver.cpp
+  ogrgtmdatasource.cpp
+  ogrgtmlayer.cpp
+  gtm.cpp
+  gtmwaypointlayer.cpp
+  gtmtracklayer.cpp
+
+  ogrhtfdriver.cpp ogrhtfdatasource.cpp ogrhtflayer.cpp
+  ogridrisidriver.cpp ogridrisidatasource.cpp ogridrisilayer.cpp
+  ogrmemdriver.cpp ogrmemdatasource.cpp ogrmemlayer.cpp
+  mitab_rawbinblock.cpp
+  mitab_mapheaderblock.cpp
+  mitab_mapindexblock.cpp
+  mitab_mapobjectblock.cpp
+  mitab_mapcoordblock.cpp
+  mitab_feature.cpp
+  mitab_feature_mif.cpp
+  mitab_mapfile.cpp
+  mitab_idfile.cpp
+  mitab_datfile.cpp
+  mitab_tabfile.cpp
+  mitab_miffile.cpp
+  mitab_utils.cpp
+  mitab_imapinfofile.cpp
+  mitab_middatafile.cpp
+  mitab_bounds.cpp
+  mitab_maptoolblock.cpp
+  mitab_tooldef.cpp
+  mitab_coordsys.cpp
+  mitab_spatialref.cpp
+  mitab_ogr_driver.cpp
+  mitab_indfile.cpp
+  mitab_tabview.cpp
+  mitab_ogr_datasource.cpp
+  mitab_geometry.cpp
+  mitab_tabseamless.cpp
+  ntffilereader.cpp
+  ntfrecord.cpp
+  ogrntfdatasource.cpp
+  ogrntfdriver.cpp
+  ogrntflayer.cpp
+  ntf_estlayers.cpp
+  ogrntffeatureclasslayer.cpp
+  ntf_generic.cpp
+  ntf_raster.cpp
+  ntf_codelist.cpp
+  ntfstroke.cpp
+  ogropenairdriver.cpp
+  ogropenairdatasource.cpp
+  ogropenairlayer.cpp
+  ogropenairlabellayer.cpp
+  ogropenfilegdbdriver.cpp
+  ogropenfilegdbdatasource.cpp
+  ogropenfilegdblayer.cpp
+  filegdbtable.cpp
+  filegdbindex.cpp
+  ogrpdsdriver.cpp ogrpdsdatasource.cpp ogrpdslayer.cpp
+  ogrpgdumpdriver.cpp ogrpgdumpdatasource.cpp ogrpgdumplayer.cpp
+  ogrrecdriver.cpp ogrrecdatasource.cpp ogrreclayer.cpp ll_recio.cpp
+  ogrs57driver.cpp
+  ogrs57datasource.cpp
+  ogrs57layer.cpp
+  s57reader.cpp
+  s57writer.cpp
+  ddfrecordindex.cpp
+  s57classregistrar.cpp
+  s57filecollector.cpp
+  s57featuredefns.cpp
+  ogrsegukooadriver.cpp ogrsegukooadatasource.cpp ogrsegukooalayer.cpp
+  ogrsegydriver.cpp ogrsegydatasource.cpp ogrsegylayer.cpp
+  ogrselafindriver.cpp ogrselafindatasource.cpp ogrselafinlayer.cpp 
io_selafin.cpp
+  shape2ogr.cpp
+  shpopen.c
+  dbfopen.c
+  shptree.c
+  sbnsearch.c
+  shp_vsi.c
+  ogrshapedriver.cpp
+  ogrshapedatasource.cpp
+  ogrshapelayer.cpp
+  ogrsuadriver.cpp ogrsuadatasource.cpp ogrsualayer.cpp
+  ogrsxfdriver.cpp ogrsxfdatasource.cpp ogrsxflayer.cpp
+  ogrtigerdriver.cpp
+  ogrtigerdatasource.cpp
+  ogrtigerlayer.cpp
+  tigerfilebase.cpp
+  tigercompletechain.cpp
+  tigeraltname.cpp
+  tigerfeatureids.cpp
+  tigerzipcodes.cpp
+  tigerlandmarks.cpp
+  tigerarealandmarks.cpp
+  tigerkeyfeatures.cpp
+  tigerpolygon.cpp
+  tigerpolygoncorrections.cpp
+  tigerentitynames.cpp
+  tigerpolygoneconomic.cpp
+  tigeridhistory.cpp
+  tigerpolychainlink.cpp
+  tigerpip.cpp
+  tigerspatialmetadata.cpp
+  tigertlidrange.cpp
+  tigerzerocellid.cpp
+  tigeroverunder.cpp
+  tigerzipplus4.cpp
+  tigerpoint.cpp
+  ogrvdvdatasource.cpp
+  ogrvrtdatasource.cpp ogrvrtlayer.cpp ogrvrtdriver.cpp
+  ogrwaspdriver.cpp ogrwaspdatasource.cpp ogrwasplayer.cpp
+  ogrxplanedriver.cpp
+  ogrxplanedatasource.cpp
+  ogrxplanelayer.cpp
+  ogr_xplane_geo_utils.cpp
+  ogr_xplane_reader.cpp
+  ogr_xplane_apt_reader.cpp
+  ogr_xplane_nav_reader.cpp
+  ogr_xplane_fix_reader.cpp
+  ogr_xplane_awy_reader.cpp
+  )
+
 set(ogr_srcs
-       ogrgeometryfactory.cpp
-       ogrpoint.cpp
-       ogrcurve.cpp
-       ogrlinestring.cpp
-       ogrlinearring.cpp
-       ogrpolygon.cpp
-       ogrtriangle.cpp
-       ogrutils.cpp
-       ogrgeometry.cpp
-       ogrgeometrycollection.cpp
-       ogrmultipolygon.cpp
-       ogrsurface.cpp
-       ogrpolyhedralsurface.cpp
-       ogrtriangulatedsurface.cpp
-       ogrmultipoint.cpp
-       ogrmultilinestring.cpp
-       ogrcircularstring.cpp
-       ogrcompoundcurve.cpp
-       ogrcurvepolygon.cpp
-       ogrcurvecollection.cpp
-       ogrmulticurve.cpp
-       ogrmultisurface.cpp
-       ogr_api.cpp
-       ogrfeature.cpp
-       ogrfeaturedefn.cpp
-       ogrfeaturequery.cpp
-       ogrfeaturestyle.cpp
-       ogrfielddefn.cpp
-       ogrspatialreference.cpp
-       ogr_srsnode.cpp
-       ogr_srs_proj4.cpp
-       ogr_fromepsg.cpp
-       ogrct.cpp
-       ogr_opt.cpp
-       ogr_srs_esri.cpp
-       ogr_srs_pci.cpp
-       ogr_srs_usgs.cpp
-       ogr_srs_dict.cpp
-       ogr_srs_panorama.cpp
-       ogr_srs_ozi.cpp
-       ogr_srs_erm.cpp
-       swq.cpp
-       swq_expr_node.cpp
-       swq_parser.cpp
-       swq_select.cpp
-       swq_op_registrar.cpp
-       swq_op_general.cpp
-       ogr_srs_validate.cpp
-       ogr_srs_xml.cpp
-       ograssemblepolygon.cpp
-       ogr2gmlgeometry.cpp
-       gml2ogrgeometry.cpp
-       ogr_expat.cpp
-       ogrpgeogeometry.cpp
-       ogrgeomediageometry.cpp
-       ogr_geocoding.cpp
-       osr_cs_wkt.c
-       osr_cs_wkt_parser.c
-       ogrgeomfielddefn.cpp
-       ograpispy.cpp
-       ogr_xerces.cpp
-       )
+  ${ogr_frmt_srcs}
+  ogrgeometryfactory.cpp
+  ogrpoint.cpp
+  ogrcurve.cpp
+  ogrlinestring.cpp
+  ogrlinearring.cpp
+  ogrpolygon.cpp
+  ogrtriangle.cpp
+  ogrutils.cpp
+  ogrgeometry.cpp
+  ogrgeometrycollection.cpp
+  ogrmultipolygon.cpp
+  ogrsurface.cpp
+  ogrpolyhedralsurface.cpp
+  ogrtriangulatedsurface.cpp
+  ogrmultipoint.cpp
+  ogrmultilinestring.cpp
+  ogrcircularstring.cpp
+  ogrcompoundcurve.cpp
+  ogrcurvepolygon.cpp
+  ogrcurvecollection.cpp
+  ogrmulticurve.cpp
+  ogrmultisurface.cpp
+  ogr_api.cpp
+  ogrfeature.cpp
+  ogrfeaturedefn.cpp
+  ogrfeaturequery.cpp
+  ogrfeaturestyle.cpp
+  ogrfielddefn.cpp
+  ogrspatialreference.cpp
+  ogr_srsnode.cpp
+  ogr_srs_proj4.cpp
+  ogr_fromepsg.cpp
+  ogrct.cpp
+  ogr_opt.cpp
+  ogr_srs_esri.cpp
+  ogr_srs_pci.cpp
+  ogr_srs_usgs.cpp
+  ogr_srs_dict.cpp
+  ogr_srs_panorama.cpp
+  ogr_srs_ozi.cpp
+  ogr_srs_erm.cpp
+  swq.cpp
+  swq_expr_node.cpp
+  swq_parser.cpp
+  swq_select.cpp
+  swq_op_registrar.cpp
+  swq_op_general.cpp
+  ogr_srs_validate.cpp
+  ogr_srs_xml.cpp
+  ograssemblepolygon.cpp
+  ogr2gmlgeometry.cpp
+  gml2ogrgeometry.cpp
+  ogr_expat.cpp
+  ogrpgeogeometry.cpp
+  ogrgeomediageometry.cpp
+  ogr_geocoding.cpp
+  osr_cs_wkt.c
+  osr_cs_wkt_parser.c
+  ogrgeomfielddefn.cpp
+  ograpispy.cpp
+  ogr_xerces.cpp
+  )
 
+foreach(fmt ${OGR_FORMATS})
+  if(NOT "${fmt}" STREQUAL "generic")
+    string(TOUPPER "${fmt}" UFMT)
+    add_definitions(-D${UFMT}_ENABLED)
+  endif(NOT "${fmt}" STREQUAL "generic")
+endforeach(fmt ${OGR_FORMATS})
 add_definitions(-DHAVE_MITAB)
+add_definitions(-DMITAB_USE_OFTDATETIME)
+add_definitions(-DOGR)
+add_definitions(-DSAOffset=vsi_l_offset)
+add_definitions(-DUSE_CPL)
+add_definitions(-D_XOPEN_SOURCE=500)
 
-add_library(gdal_ogr_obj OBJECT ${ogr_srcs})
-set_target_properties(gdal_ogr_obj PROPERTIES FOLDER "Third Party 
Libraries/GDAL")
+add_library(gdal_ogr SHARED ${ogr_srcs} $<TARGET_OBJECTS:json_obj>)
+set_target_properties(gdal_ogr PROPERTIES FOLDER "Third Party Libraries/GDAL")
+install(TARGETS gdal_ogr
+  RUNTIME DESTINATION ${BIN_DIR}
+  LIBRARY DESTINATION ${LIB_DIR}
+  ARCHIVE DESTINATION ${LIB_DIR})
 
+# Local Variables:
+# tab-width: 8
+# mode: cmake
+# indent-tabs-mode: t
+# End:
+# ex: shiftwidth=2 tabstop=8

Copied: brlcad/trunk/src/other/gdal/ogr/COPYING (from rev 76812, 
brlcad/trunk/src/other/gdal/ogr/ogrsf_frmts/shape/COPYING)
===================================================================
--- brlcad/trunk/src/other/gdal/ogr/COPYING                             (rev 0)
+++ brlcad/trunk/src/other/gdal/ogr/COPYING     2020-08-17 02:56:07 UTC (rev 
76813)
@@ -0,0 +1,483 @@
+
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                    675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+                 GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+

Copied: brlcad/trunk/src/other/gdal/ogr/README.txt (from rev 76812, 
brlcad/trunk/src/other/gdal/ogr/ogrsf_frmts/ntf/README.txt)
===================================================================
--- brlcad/trunk/src/other/gdal/ogr/README.txt                          (rev 0)
+++ brlcad/trunk/src/other/gdal/ogr/README.txt  2020-08-17 02:56:07 UTC (rev 
76813)
@@ -0,0 +1,213 @@
+
+       NTF OGR Implementation Notes
+       ============================
+
+
+Products (and Layers) Supported
+-------------------------------
+
+Landline (and Landline Plus):
+       LANDLINE_POINT
+       LANDLINE_LINE
+       LANDLINE_NAME
+
+Panorama Contours:
+       PANORAMA_POINT
+       PANORAMA_CONTOUR
+
+       HEIGHT attribute holds elevation.
+
+Strategi:
+       STRATEGI_POINT
+       STRATEGI_LINE
+       STRATEGI_TEXT
+       STRATEGI_NODE
+
+Meridian:
+       MERIDIAN_POINT
+       MERIDIAN_LINE
+       MERIDIAN_TEXT
+       MERIDIAN_NODE
+
+Boundaryline:
+       BOUNDARYLINE_LINK
+       BOUNDARYLINE_POLY
+       BOUNDARYLINE_COLLECTIONS
+
+       The _POLY layer has links to links allowing true polygons to
+        be formed (otherwise the _POLY's only have a seed point for geometry.
+       The collections are collections of polygons (also without geometry
+       as read).  This is the only product from which polygons can be
+       constructed.
+
+Boundary Line 2000:
+       BL2000_LINK
+       BL2000_POLY
+       BL2000_COLLECTIONS
+
+       Similar to Boundaryline, but with different attributes, feature code
+       is largely unused, and the _POLY layer doesn't have a seed point.
+
+BaseData.GB:
+       BASEDATA_POINT
+       BASEDATA_LINE
+       BASEDATA_TEXT
+       BASEDATA_NODE
+
+OSCAR Asset/Traffic:
+       OSCAR_POINT
+       OSCAR_LINE
+       OSCAR_NODE
+
+OSCAR Network:
+       OSCAR_NETWORK_POINT
+       OSCAR_NETWORK_LINE
+       OSCAR_NETWORK_NODE
+
+Address Point:
+       ADDRESS_POINT
+
+Code Point:
+       CODE_POINT
+
+Code Point Plus:
+       CODE_POINT_PLUS
+
+The dataset as a whole will also have a FEATURE_CLASSES layer containing a
+pure table relating FEAT_CODE numbers with feature class names (FC_NAME).
+This applies to all products in the dataset.  A few layer types (such as
+the Code Point, and Address Point products) don't include feature classes.
+Some products use features classes that are not defined in the file, and
+so they will not appear in the FEATURE_CLASSES layer.
+
+
+Product Schemas
+---------------
+
+The approach taken in this reader is to treat one file, or a directory
+of files as a single dataset.  All files in the dataset are scanned on
+open.  For each particular product (listed above) a set of layers are
+created; however, these layers may be extracted from several files of the
+same product.
+
+The layers are based on a low level feature type in the NTF file, but will
+generally contain features of many different feature codes (FEAT_CODE
+attribute).  Different features within a given layer may have a variety of
+attributes in the file; however, the schema is established based on the
+union of all attributes possible within features of a particular type
+(i.e. POINT) of that product family (i.e. OSCAR Network).
+
+If an NTF product is read that doesn't match one of the known schema's
+it will go through a different generic handler which has only
+layers of type GENERIC_POINT and GENERIC_LINE.  The features only have
+a FEAT_CODE attribute.
+
+Details of what layers of what products have what attributes can be found
+in the NTFFileReader::EstablishLayers() method at the end of ntf_estlayers.cpp.
+This file also contains all the product specific translation code.
+
+
+Special Attributes
+------------------
+
+FEAT_CODE: General feature code integer, can be used to lookup a name in the
+           FEATURE_CLASSES layer/table.
+
+TEXT_ID/POINT_ID/LINE_ID/NAME_ID/COLL_ID/POLY_ID/GEOM_ID:
+          Unique identifier for a feature of the appropriate type.
+
+TILE_REF: All layers (except FEATURE_CLASSES) contain a TILE_REF attribute
+          which indicates which tile (file) the features came from.  Generally
+          speaking the id numbers are only unique within the tile and so
+          the TILE_REF can be used restrict id links within features from
+          the same file.
+
+FONT/TEXT_HT/DIG_POSTN/ORIENT:
+       Detailed information on the font, text height, digitizing position,
+        and orientation of text or name objects.  Review the OS product
+        manuals to understand the units, and meaning of these codes.
+
+GEOM_ID_OF_POINT:
+       For _NODE features this defines the POINT_ID of the point layer object
+        to which this node corresponds.  Generally speaking the nodes don't
+        carry a geometry of their own.  The node must be related to a point
+        to establish it's position.
+
+GEOM_ID_OF_LINK:
+       A _list_ of _LINK or _LINE features to end/start at a node.  Nodes,
+        and this field are generally only of value when establishing
+        connectivity of line features for network analysis.   Note that this
+        should be related to the target features GEOM_ID, not it's LINE_ID.
+
+        On the BOUNDARYLINE_POLY layer this attribute contains the GEOM_IDs
+        of the lines which form the edge of the polygon.
+
+POLY_ID:
+       A list of POLY_ID's from the BOUNDARYLINE_POLY layer associated with
+        a given collection in the BOUNDARYLINE_COLLECTIONS layer.
+
+
+Adding a New Product
+--------------------
+
+It is anticipated that over time the UK Ordnance Survey will define new
+product formats, and to get decent mileage out of them this library should
+be updated to support them.  While I will endeavor to do this myself, it
+seems prudent to define how it is done in case I am not available to do it,
+or am unwilling to do it on a timely basis.  To add a new product type the
+following steps are required:
+
+ o Add an NPC_ code for the product in ntf.h
+ o Add a case in NTFFileReader::Open() to translate the GetProduct() result
+   into the NPC_ code.
+ o Add a case in NTFFileReader::EstablishLayers() defining the layers found
+   on this product.
+ o Add translate functions for layers of this product.  Generally they can
+   be cloned from an existing translate function, and the attribute mapping
+   in the NTFReader::ApplyAttributeValues() call can be modified.
+
+Occasionally existing products will change slightly.  This may result in a
+slight change to the detection logic in NTFFileReader::Open() and changes
+in the list of user attributes associated with the layer.  If the differences
+are significant it may be necessary to define a whole new product family
+type (as is done for Code Point Plus vs. Code Point).
+
+Generic Products
+----------------
+
+In situations where a file is not identified as being part of an existing
+known product it will be treated generically.  In this case the entire dataset
+is scanned to establish what features have what attributes.  Because of this,
+opening a generic dataset can be much slower than opening a recognized dataset.
+Based on this scan a list of generic features (layers) are defined from the
+following set:
+
+ GENERIC_POINT
+ GENERIC_LINE
+ GENERIC_NAME
+ GENERIC_TEXT
+ GENERIC_POLY
+ GENERIC_NODE
+ GENERIC_COLLECTION
+
+Generic products are primarily handled by the ntf_generic.cpp module whereas
+specific products are handled in ntf_estlayers.cpp.
+
+Because some data products (OSNI datasets) not from the Ordnance Survey
+were found to have record groups in unusual orders compared to what the
+UK Ordnance Survey does, it was found necessary to cache all the records of
+level 3 and higher generic products, and construct record groups by id
+reference from within this cache rather than depending on convenient record
+orderings.  This is accomplished by the NTFFileReader "indexing" capability
+near the bottom of ntffilereader.cpp.  Because of this in memory indexing
+accessing generic datasets can be much more memory intensive than accessing
+known data products, though it isn't necessary for generic level 1 and 2
+products.
+
+It is possible to force a known product to be treated as generic by setting
+the FORCE_GENERIC option to "ON" using OGRNTFDataSource::SetOptionsList() as
+is demonstrated in ntfdump.cpp.
+
+
+
+

Copied: brlcad/trunk/src/other/gdal/ogr/avc.h (from rev 76812, 
brlcad/trunk/src/other/gdal/ogr/ogrsf_frmts/avc/avc.h)
===================================================================
--- brlcad/trunk/src/other/gdal/ogr/avc.h                               (rev 0)
+++ brlcad/trunk/src/other/gdal/ogr/avc.h       2020-08-17 02:56:07 UTC (rev 
76813)
@@ -0,0 +1,862 @@
+/**********************************************************************
+ * $Id: avc.h 35933 2016-10-25 16:46:26Z goatbar $
+ *
+ * Name:     avc.h
+ * Project:  Arc/Info Vector coverage (AVC) BIN<->E00 conversion library
+ * Language: ANSI C
+ * Purpose:  Header file containing all definitions for the library.
+ * Author:   Daniel Morissette, dmorisse...@dmsolutions.ca
+ *
+ **********************************************************************
+ * Copyright (c) 1999-2001, Daniel Morissette
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ **********************************************************************
+ *
+ * $Log: avc.h,v $
+ * Revision 1.25  2008/07/23 20:51:38  dmorissette
+ * Fixed GCC 4.1.x compile warnings related to use of char vs unsigned char
+ * (GDAL/OGR ticket http://trac.osgeo.org/gdal/ticket/2495)
+ *
+ * Revision 1.24  2006/08/17 20:09:45  dmorissette
+ * Update for 2.0.0 release
+ *
+ * Revision 1.23  2006/08/17 18:56:42  dmorissette
+ * Support for reading standalone info tables (just tables, no coverage
+ * data) by pointing AVCE00ReadOpen() to the info directory (bug 1549).
+ *
+ * Revision 1.22  2006/06/27 18:38:43  dmorissette
+ * Cleaned up E00 reading (bug 1497, patch from James F.)
+ *
+ * Revision 1.21  2006/06/16 11:48:11  daniel
+ * New functions to read E00 files directly as opposed to translating to
+ * binary coverage. Used in the implementation of E00 read support in OGR.
+ * Contributed by James E. Flemer. (bug 1497)
+ *
+ * Revision 1.20  2006/06/14 16:31:28  daniel
+ * Added support for AVCCoverPC2 type (bug 1491)
+ *
+ * Revision 1.19  2005/06/03 03:49:58  daniel
+ * Update email address, website url, and copyright dates
+ *
+ * Revision 1.18  2005/06/03 03:29:16  daniel
+ * Ready for 1.3.0 release
+ *
+ * Revision 1.17  2004/02/11 05:49:44  daniel
+ * Added support for deleted flag in arc.dir (bug 2332)
+ *
+ * Revision 1.16  2002/02/14 16:34:15  warmerda
+ * fixed prototype name for AVCBinReadNextPrj
+ *
+ * Revision 1.15  2002/02/13 20:35:24  warmerda
+ * added AVCBinReadObject
+ *
+ * Revision 1.14  2001/11/25 21:15:23  daniel
+ * Added hack (AVC_MAP_TYPE40_TO_DOUBLE) to map type 40 fields bigger than 8
+ * digits to double precision as we generate E00 output (bug599)
+ *
+ * Revision 1.13  2001/02/20 15:24:11  daniel
+ * Updated AVC_VERSION="1.2.0 (2000-10-17)"
+ *
+ * Revision 1.12  2000/09/26 21:38:44  daniel
+ * Updated AVC_VERSION
+ *
+ * Revision 1.11  2000/09/26 20:21:04  daniel
+ * Added AVCCoverPC write
+ *
+ * Revision 1.10  2000/09/22 19:45:20  daniel
+ * Switch to MIT-style license
+ *
+ * Revision 1.9  2000/05/29 15:31:30  daniel
+ * Added Japanese DBCS support
+ *
+ * Revision 1.8  2000/01/10 02:56:01  daniel
+ * Added read support for "weird" coverages
+ *
+ * Revision 1.7  1999/12/24 07:18:34  daniel
+ * Added PC Arc/Info coverages support
+ *
+ * Revision 1.6  1999/08/23 18:15:56  daniel
+ * Added AVCE00DeleteCoverage()
+ *
+ * Revision 1.5  1999/06/08 22:07:28  daniel
+ * Added AVCReadWrite in AVCAccess type
+ *
+ * Revision 1.4  1999/05/17 16:16:41  daniel
+ * Added RXP + TXT/TX6/TX7 write support
+ *
+ * Revision 1.3  1999/05/11 02:15:04  daniel
+ * Added coverage write support
+ *
+ * Revision 1.2  1999/02/25 03:39:39  daniel
+ * Added TXT, TX6/TX7, RXP and RPL support
+ *
+ * Revision 1.1  1999/01/29 16:29:24  daniel
+ * Initial revision
+ *
+ **********************************************************************/
+
+#ifndef AVC_H_INCLUDED_
+#define AVC_H_INCLUDED_
+
+#include "cpl_conv.h"
+#include "cpl_string.h"
+
+#ifdef GDAL_COMPILATION
+#include "shapefil.h"
+#else
+#include "dbfopen.h"
+#endif
+
+#include "avc_mbyte.h"
+
+CPL_C_START
+
+/*---------------------------------------------------------------------
+ * Current version of the AVCE00 library... always useful!
+ *--------------------------------------------------------------------*/
+#define AVC_VERSION "2.0.0 (2006-08-17)"
+
+/* Coverage precision
+ */
+#define AVC_DEFAULT_PREC   0
+#define AVC_SINGLE_PREC    1
+#define AVC_DOUBLE_PREC    2
+
+/* AVC_FORMAT_DBF_FLOAT used as nPrecision value only for AVCPrintRealValue()
+ */
+#define AVC_FORMAT_DBF_FLOAT  42
+
+/* Coverage file types
+ */
+typedef enum
+{
+    AVCFileUnknown = 0,
+    AVCFileARC,
+    AVCFilePAL,
+    AVCFileCNT,
+    AVCFileLAB,
+    AVCFilePRJ,
+    AVCFileTOL,
+    AVCFileLOG,
+    AVCFileTXT,  /* TXT and TX6 share the same binary format */
+    AVCFileTX6,
+    AVCFileRXP,
+    AVCFileRPL,  /* RPL is a PAL for a region */
+    AVCFileTABLE
+}AVCFileType;
+
+/* Read or Write access flag
+ */
+typedef enum
+{
+    AVCRead,
+    AVCWrite,
+    AVCReadWrite
+} AVCAccess;
+
+/* Coverage type: PC Arc/Info or Unix Arc/Info v7
+ */
+typedef enum
+{
+    AVCCoverTypeUnknown = 0,
+    AVCCoverV7,
+    AVCCoverPC,
+    AVCCoverPC2,   /* Unknown version... hybrid between V7 and PC !!! */
+    AVCCoverWeird, /* Unknown version... hybrid between V7 and PC !!! */
+    AVCCoverV7Tables /* Standalone tables, only an info directory     */
+} AVCCoverType;
+
+/* Enum for byte ordering
+ */
+typedef enum
+{
+    AVCBigEndian,    /* CPL_MSB, Motorola ordering */
+    AVCLittleEndian  /* CPL_LSB, Intel ordering */
+} AVCByteOrder;
+
+/* Macros to establish byte ordering for each coverage type
+ * The rule until now: all coverage types use big endian (Motorola ordering)
+ * except PC Arc/Info coverages variant 1 (AVCCoverPC).
+ */
+#define AVC_COVER_BYTE_ORDER(cover_type)  \
+   (((cover_type) == AVCCoverPC ) ? AVCLittleEndian : AVCBigEndian )
+
+/*=====================================================================
+                        Structures
+ =====================================================================*/
+
+/*---------------------------------------------------------------------
+ * Structures defining various Arc/Info objects types.
+ * These are shared by the Binary and the E00 functions.
+ *--------------------------------------------------------------------*/
+
+typedef struct AVCVertex_t
+{
+    double      x;      /* Even for single precision, we always         */
+    double      y;      /* use doubles for the vertices in memory.      */
+}AVCVertex;
+
+/*---------------------------------------------------------------------
+ * AVCArc: Information about an ARC
+ *--------------------------------------------------------------------*/
+typedef struct AVCArc_t
+{
+    GInt32      nArcId;
+    GInt32      nUserId;
+    GInt32      nFNode;
+    GInt32      nTNode;
+    GInt32      nLPoly;
+    GInt32      nRPoly;
+    GInt32      numVertices;
+    AVCVertex   *pasVertices;
+}AVCArc;
+
+/*---------------------------------------------------------------------
+ * AVCPal: A PAL (Polygon Arc List) references all the arcs that
+ *         constitute a polygon.
+ *--------------------------------------------------------------------*/
+typedef struct AVCPalArc_t
+{
+    GInt32      nArcId;
+    GInt32      nFNode;
+    GInt32      nAdjPoly;
+}AVCPalArc;
+
+typedef struct AVCPal_t
+{
+    GInt32      nPolyId;
+    AVCVertex   sMin;
+    AVCVertex   sMax;
+    GInt32      numArcs;
+    AVCPalArc   *pasArcs;
+}AVCPal;
+
+/*---------------------------------------------------------------------
+ * AVCCnt: Information about a CNT (polygon centroid)
+ *--------------------------------------------------------------------*/
+typedef struct AVCCnt_t
+{
+    GInt32      nPolyId;
+    AVCVertex   sCoord;
+    GInt32      numLabels;      /* 0 or 1 */
+    GInt32      *panLabelIds;
+}AVCCnt;
+
+/*---------------------------------------------------------------------
+ * AVCLab: Information about a LAB (polygon Label)
+ *--------------------------------------------------------------------*/
+typedef struct AVCLab_t
+{
+    GInt32      nValue;
+    GInt32      nPolyId;
+    AVCVertex   sCoord1;
+    AVCVertex   sCoord2;
+    AVCVertex   sCoord3;
+}AVCLab;
+
+/*---------------------------------------------------------------------
+ * AVCTol: Information about a TOL record (coverage tolerances)
+ *--------------------------------------------------------------------*/
+typedef struct AVCTol_t
+{
+    GInt32      nIndex;
+    GInt32      nFlag;
+    double      dValue;
+}AVCTol;
+
+/*---------------------------------------------------------------------
+ * AVCTxt: Information about a TXT/TX6/TX7 record (annotations)
+ *--------------------------------------------------------------------*/
+typedef struct AVCTxt_t
+{
+    GInt32      nTxtId;
+    GInt32      nUserId;
+    GInt32      nLevel;
+    float       f_1e2;  /* Always (float)-1e+20, even for double precision! */
+    GInt32      nSymbol;
+    GInt32      numVerticesLine;
+    GInt32      n28;    /* Unknown value at byte 28 */
+    GInt32      numChars;
+    GInt32      numVerticesArrow;
+
+    GInt16      anJust1[20];
+    GInt16      anJust2[20];
+
+    double      dHeight;
+    double      dV2;    /* ??? */
+    double      dV3;    /* ??? */
+
+    GByte       *pszText; /* Needs to be unsigned char for DBCS */
+
+    AVCVertex   *pasVertices;
+}AVCTxt;
+
+/*---------------------------------------------------------------------
+ * AVCRxp: Information about a RXP record (something related to regions...)
+ *--------------------------------------------------------------------*/
+typedef struct AVCRxp_t
+{
+    GInt32      n1;
+    GInt32      n2;
+}AVCRxp;
+
+/*---------------------------------------------------------------------
+ * AVCTableDef: Definition of an INFO table's structure.
+ *               This info is read from several files:
+ *                   info/arc.dir
+ *                   info/arc####.dat
+ *                   info/arc####.nit
+ *
+ *               And the data for the table itself is stored in a binary
+ *               file in the coverage directory.
+ *--------------------------------------------------------------------*/
+
+typedef struct AVCFieldInfo_t
+{
+    char        szName[17];
+    GInt16      nSize;
+    GInt16      v2;
+    GInt16      nOffset;
+    GInt16      v4;
+    GInt16      v5;
+    GInt16      nFmtWidth;
+    GInt16      nFmtPrec;
+    GInt16      nType1;
+    GInt16      nType2;
+    GInt16      v10;
+    GInt16      v11;
+    GInt16      v12;
+    GInt16      v13;
+    char        szAltName[17];
+    GInt16      nIndex;         /* >0 if valid, or -1 if field is deleted */
+}AVCFieldInfo;
+
+#define AVC_FT_DATE     10
+#define AVC_FT_CHAR     20
+#define AVC_FT_FIXINT   30
+#define AVC_FT_FIXNUM   40
+#define AVC_FT_BININT   50
+#define AVC_FT_BINFLOAT 60
+
+typedef struct AVCTableDef_t
+{
+    /* Stuff read from the arc.dir file
+     * (1 record, corresponding to this table, from the arc.dir file)
+     */
+    char        szTableName[33];
+    char        szInfoFile[9];
+    GInt16      numFields;
+    GInt16      nRecSize;
+    GInt32      numRecords;
+    char        szExternal[3];  /* "XX" or "  " */
+    GInt16      bDeletedFlag;   /* 1 if deleted, 0 if table is active */
+
+    /* Data file path read from the arc####.dat file
+     */
+    char        szDataFile[81];
+
+    /* Field information read from the arc####.nit file
+     */
+    AVCFieldInfo *pasFieldDef;
+} AVCTableDef;
+
+typedef struct AVCField_t
+{
+    GInt16      nInt16;
+    GInt32      nInt32;
+    float       fFloat;
+    double      dDouble;
+    GByte       *pszStr;
+} AVCField;
+
+/*---------------------------------------------------------------------
+ * Stuff related to buffered reading of raw binary files
+ *--------------------------------------------------------------------*/
+
+#define AVCRAWBIN_READBUFSIZE 1024
+
+typedef struct AVCRawBinFile_t
+{
+    FILE        *fp;
+    char        *pszFname;
+    AVCAccess   eAccess;
+    AVCByteOrder eByteOrder;
+    GByte       abyBuf[AVCRAWBIN_READBUFSIZE];
+    int         nOffset;        /* Location of current buffer in the file */
+    int         nCurSize;       /* Nbr of bytes currently loaded        */
+    int         nCurPos;        /* Next byte to read from abyBuf[]      */
+
+    int         nFileDataSize;  /* File Size as stated in the header */
+                                /* EOF=TRUE passed this point in file */
+                                /* Set to -1 if not specified. */
+
+    /* Handle on dataset's multibyte character encoding info. */
+    AVCDBCSInfo *psDBCSInfo;
+
+} AVCRawBinFile;
+
+/*---------------------------------------------------------------------
+ * Stuff related to reading and writing binary coverage files
+ *--------------------------------------------------------------------*/
+
+typedef struct AVCBinHeader_t
+{
+    GUInt32     nSignature;
+    GInt32      nPrecision;     /* <0 for double prec., >0 for single prec. */
+    GInt32      nRecordSize;    /* nbr of 2 byte words, 0 for var. length   */
+    GInt32      nLength;        /* Overall file length, in 2 byte words     */
+}AVCBinHeader;
+
+typedef struct AVCBinFile_t
+{
+    AVCRawBinFile *psRawBinFile;
+    char          *pszFilename;
+    AVCRawBinFile *psIndexFile;   /* Index file, Write mode only */
+
+    DBFHandle     hDBFFile;       /* Used for AVCCoverPC/PC2 DBF TABLES only */
+    int           nCurDBFRecord;  /* 0-based record index in DBF file */
+
+    AVCCoverType  eCoverType;
+    AVCFileType   eFileType;
+    int           nPrecision;     /* AVC_SINGLE/DOUBLE_PREC  */
+
+    union
+    {
+        AVCTableDef  *psTableDef;
+    }hdr;
+
+    /* cur.* : temp. storage used to read one record (ARC, PAL, ... or
+     *         Table record) from the file.
+     */
+    union
+    {
+        AVCArc       *psArc;
+        AVCPal       *psPal;
+        AVCCnt       *psCnt;
+        AVCLab       *psLab;
+        AVCTol       *psTol;
+        AVCTxt       *psTxt;
+        AVCRxp       *psRxp;
+        AVCField     *pasFields;
+        char         **papszPrj;
+    }cur;
+
+} AVCBinFile;
+
+/*---------------------------------------------------------------------
+ * Stuff related to the generation of E00
+ *--------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------
+ *                        AVCE00GenInfo structure
+ * This structure is used by the E00 generator functions to store
+ * their buffer and their current state in case they need to be
+ * called more than once for a given object type (i.e. ARC, PAL and IFO).
+ *--------------------------------------------------------------------*/
+
+typedef struct AVCE00GenInfo_t
+{
+    char        *pszBuf;
+    int         nBufSize;
+
+    int         nPrecision;     /* AVC_SINGLE/DOUBLE_PREC       */
+    int         iCurItem;
+    int         numItems;
+}AVCE00GenInfo;
+
+/*---------------------------------------------------------------------
+ * Stuff related to the parsing of E00
+ *--------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------
+ *                        AVCE00ParseInfo structure
+ * This structure is used by the E00 parser functions to store
+ * their buffer and their current state while parsing an object.
+ *--------------------------------------------------------------------*/
+
+typedef struct AVCE00ParseInfo_t
+{
+    AVCFileType eFileType;
+    int         nPrecision;     /* AVC_SINGLE/DOUBLE_PREC       */
+    int         iCurItem;
+    int         numItems;
+    int         nStartLineNum;
+    int         nCurLineNum;
+
+    int         nCurObjectId;
+    GBool       bForceEndOfSection;  /* For sections that don't have an */
+                                     /* explicit end-of-section line.   */
+    AVCFileType eSuperSectionType;/* For sections containing several files*/
+    char        *pszSectionHdrLine;  /* Used by supersection types      */
+
+    union
+    {
+        AVCTableDef  *psTableDef;
+    }hdr;
+    GBool       bTableHdrComplete;   /* FALSE until table header is */
+                                     /* finished parsing */
+    int         nTableE00RecLength;
+
+    /* cur.* : temp. storage used to store current object (ARC, PAL, ... or
+     *         Table record) from the file.
+     */
+    union
+    {
+        AVCArc       *psArc;
+        AVCPal       *psPal;
+        AVCCnt       *psCnt;
+        AVCLab       *psLab;
+        AVCTol       *psTol;
+        AVCTxt       *psTxt;
+        AVCRxp       *psRxp;
+        AVCField     *pasFields;
+        char         **papszPrj;
+    }cur;
+
+    char        *pszBuf;        /* Buffer used only for TABLEs  */
+    int         nBufSize;
+}AVCE00ParseInfo;
+
+/*---------------------------------------------------------------------
+ * Stuff related to the transparent binary -> E00 conversion
+ *--------------------------------------------------------------------*/
+typedef struct AVCE00Section_t
+{
+    AVCFileType eType;        /* File Type                      */
+    char        *pszName;     /* E00 section or Table Name      */
+    char        *pszFilename; /* Binary/E00 file filename       */
+    int         nLineNum;     /* E00 line number                */
+    int         nFeatureCount;
+}AVCE00Section;
+
+typedef struct AVCE00ReadInfo_t
+{
+    char        *pszCoverPath;
+    char        *pszInfoPath;
+    char        *pszCoverName;
+    AVCCoverType eCoverType;
+
+    /* pasSections is built when the coverage is opened and describes
+     * the skeleton of the E00 file.
+     */
+    AVCE00Section *pasSections;
+    int            numSections;
+
+    /* If bReadAllSections=TRUE then reading automatically continues to
+     * the next section when a section finishes. (This is the default)
+     * Otherwise, you can use AVCE00ReadGotoSection() to read one section
+     * at a time... this will set bReadAllSections=FALSE.
+     */
+    GBool         bReadAllSections;
+
+    /* Info about the file (or E00 section) currently being processed
+     */
+    int           iCurSection;
+    AVCBinFile    *hFile;
+
+    int           iCurStep;  /* AVC_GEN_* values, see below */
+    AVCE00GenInfo *hGenInfo;
+
+    /* Info related to multibyte character encoding
+     */
+    AVCDBCSInfo *psDBCSInfo;
+
+} *AVCE00ReadPtr;
+
+typedef struct AVCE00ReadInfoE00_t
+{
+    char        *pszCoverPath;
+    char        *pszCoverName;
+
+    AVCE00ParseInfo *hParseInfo;
+    AVCFileType  eCurFileType;
+
+    /* pasSections is built when the coverage is opened and describes
+     * the sections in the E00 file.
+     */
+    AVCE00Section *pasSections;
+    int            numSections;
+
+    /* If bReadAllSections=TRUE then reading automatically continues to
+     * the next section when a section finishes. (This is the default)
+     * Otherwise, you can use AVCE00ReadGotoSectionE00() to read one
+     * section at a time.
+     */
+    GBool         bReadAllSections;
+
+    /* File handle of the E00 file currently being processed
+     */
+    FILE          *hFile;
+
+} *AVCE00ReadE00Ptr;
+
+/* E00 generation steps... tells the AVCE00Read*() functions which
+ * parts of the given E00 file are currently being processed.
+ */
+#define AVC_GEN_NOTSTARTED      0
+#define AVC_GEN_DATA            1
+#define AVC_GEN_ENDSECTION      2
+#define AVC_GEN_TABLEHEADER     3
+#define AVC_GEN_TABLEDATA       4
+
+/*---------------------------------------------------------------------
+ * Stuff related to the transparent E00 -> binary conversion
+ *--------------------------------------------------------------------*/
+typedef struct AVCE00WriteInfo_t
+{
+    char        *pszCoverPath;
+    char        *pszInfoPath;
+    char        *pszCoverName;
+    AVCCoverType eCoverType;
+
+    /* Info about the file (or E00 section) currently being processed
+     */
+    AVCFileType  eCurFileType;
+    AVCBinFile  *hFile;
+
+    /* Requested precision for the new coverage... may differ from the
+     * precision of the E00 input lines.  (AVC_SINGLE_PREC or AVC_DOUBLE_PREC)
+     */
+    int          nPrecision;
+
+    AVCE00ParseInfo *hParseInfo;
+
+    /* Info related to multibyte character encoding
+     */
+    AVCDBCSInfo *psDBCSInfo;
+
+} *AVCE00WritePtr;
+
+/* Coverage generation steps... used to store the current state of the
+ * AVCE00WriteNextLine() function.
+ */
+#define AVC_WR_TOPLEVEL         0
+#define AVC_WR_READING_SECTION
+
+/*=====================================================================
+              Function prototypes (lower-level lib. functions)
+ =====================================================================*/
+
+/*---------------------------------------------------------------------
+ * Functions related to buffered reading of raw binary files (and writing)
+ *--------------------------------------------------------------------*/
+AVCRawBinFile *AVCRawBinOpen(const char *pszFname, const char *pszAccess,
+                             AVCByteOrder eFileByteOrder,
+                             AVCDBCSInfo *psDBCSInfo);
+void        AVCRawBinClose(AVCRawBinFile *psInfo);
+void        AVCRawBinFSeek(AVCRawBinFile *psInfo, int nOffset, int nFrom);
+GBool       AVCRawBinEOF(AVCRawBinFile *psInfo);
+void        AVCRawBinSetFileDataSize(AVCRawBinFile *psInfo, int nDataSize);
+
+void        AVCRawBinReadBytes(AVCRawBinFile *psInfo, int nBytesToRead,
+                               GByte *pBuf);
+GInt16      AVCRawBinReadInt16(AVCRawBinFile *psInfo);
+GInt32      AVCRawBinReadInt32(AVCRawBinFile *psInfo);
+float       AVCRawBinReadFloat(AVCRawBinFile *psInfo);
+double      AVCRawBinReadDouble(AVCRawBinFile *psInfo);
+void        AVCRawBinReadString(AVCRawBinFile *psFile, int nBytesToRead,
+                                GByte *pBuf);
+
+void        AVCRawBinWriteBytes(AVCRawBinFile *psFile, int nBytesToWrite,
+                                const GByte *pBuf);
+void        AVCRawBinWriteInt16(AVCRawBinFile *psFile, GInt16 n16Value);
+void        AVCRawBinWriteInt32(AVCRawBinFile *psFile, GInt32 n32Value);
+void        AVCRawBinWriteFloat(AVCRawBinFile *psFile, float fValue);
+void        AVCRawBinWriteDouble(AVCRawBinFile *psFile, double dValue);
+void        AVCRawBinWriteZeros(AVCRawBinFile *psFile, int nBytesToWrite);
+void        AVCRawBinWritePaddedString(AVCRawBinFile *psFile, int nFieldSize,
+                                       const GByte *pszString);
+
+/*---------------------------------------------------------------------
+ * Functions related to reading the binary coverage files
+ *--------------------------------------------------------------------*/
+
+AVCBinFile *AVCBinReadOpen(const char *pszPath, const char *pszName,
+                           AVCCoverType eCoverType, AVCFileType eType,
+                           AVCDBCSInfo *psDBCSInfo);
+void        AVCBinReadClose(AVCBinFile *psFile);
+
+int         AVCBinReadRewind(AVCBinFile *psFile);
+
+void       *AVCBinReadObject(AVCBinFile *psFile, int iObjIndex );
+void       *AVCBinReadNextObject(AVCBinFile *psFile);
+AVCArc     *AVCBinReadNextArc(AVCBinFile *psFile);
+AVCPal     *AVCBinReadNextPal(AVCBinFile *psFile);
+AVCCnt     *AVCBinReadNextCnt(AVCBinFile *psFile);
+AVCLab     *AVCBinReadNextLab(AVCBinFile *psFile);
+AVCTol     *AVCBinReadNextTol(AVCBinFile *psFile);
+AVCTxt     *AVCBinReadNextTxt(AVCBinFile *psFile);
+AVCRxp     *AVCBinReadNextRxp(AVCBinFile *psFile);
+AVCField   *AVCBinReadNextTableRec(AVCBinFile *psFile);
+char      **AVCBinReadNextPrj(AVCBinFile *psFile);
+
+char      **AVCBinReadListTables(const char *pszInfoPath,
+                                 const char *pszCoverName,
+                                 char ***ppapszArcDatFiles,
+                                 AVCCoverType eCoverType,
+                                 AVCDBCSInfo *psDBCSInfo);
+
+/*---------------------------------------------------------------------
+ * Functions related to writing the binary coverage files
+ *--------------------------------------------------------------------*/
+AVCBinFile *AVCBinWriteCreate(const char *pszPath, const char *pszName,
+                              AVCCoverType eCoverType,
+                              AVCFileType eType, int nPrecision,
+                              AVCDBCSInfo *psDBCSInfo);
+AVCBinFile *AVCBinWriteCreateTable(const char *pszInfoPath,
+                                   const char *pszCoverName,
+                                   AVCTableDef *psSrcTableDef,
+                                   AVCCoverType eCoverType,
+                                   int nPrecision, AVCDBCSInfo *psDBCSInfo);
+void        AVCBinWriteClose(AVCBinFile *psFile);
+
+int         AVCBinWriteHeader(AVCBinFile *psFile);
+int         AVCBinWriteObject(AVCBinFile *psFile, void *psObj);
+int         AVCBinWriteArc(AVCBinFile *psFile, AVCArc *psArc);
+int         AVCBinWritePal(AVCBinFile *psFile, AVCPal *psPal);
+int         AVCBinWriteCnt(AVCBinFile *psFile, AVCCnt *psCnt);
+int         AVCBinWriteLab(AVCBinFile *psFile, AVCLab *psLab);
+int         AVCBinWriteTol(AVCBinFile *psFile, AVCTol *psTol);
+int         AVCBinWritePrj(AVCBinFile *psFile, char **papszPrj);
+int         AVCBinWriteTxt(AVCBinFile *psFile, AVCTxt *psTxt);
+int         AVCBinWriteRxp(AVCBinFile *psFile, AVCRxp *psRxp);
+int         AVCBinWriteTableRec(AVCBinFile *psFile, AVCField *pasFields);
+
+/*---------------------------------------------------------------------
+ * Functions related to the generation of E00
+ *--------------------------------------------------------------------*/
+AVCE00GenInfo  *AVCE00GenInfoAlloc(int nCoverPrecision);
+void        AVCE00GenInfoFree(AVCE00GenInfo *psInfo);
+void        AVCE00GenReset(AVCE00GenInfo  *psInfo);
+
+const char *AVCE00GenStartSection(AVCE00GenInfo *psInfo, AVCFileType eType,
+                                  const char *pszFilename);
+const char *AVCE00GenEndSection(AVCE00GenInfo *psInfo, AVCFileType eType,
+                                GBool bCont);
+
+const char *AVCE00GenObject(AVCE00GenInfo *psInfo,
+                            AVCFileType eType, void *psObj, GBool bCont);
+const char *AVCE00GenArc(AVCE00GenInfo *psInfo, AVCArc *psArc, GBool bCont);
+const char *AVCE00GenPal(AVCE00GenInfo *psInfo, AVCPal *psPal, GBool bCont);
+const char *AVCE00GenCnt(AVCE00GenInfo *psInfo, AVCCnt *psCnt, GBool bCont);
+const char *AVCE00GenLab(AVCE00GenInfo *psInfo, AVCLab *psLab, GBool bCont);
+const char *AVCE00GenTol(AVCE00GenInfo *psInfo, AVCTol *psTol, GBool bCont);
+const char *AVCE00GenTxt(AVCE00GenInfo *psInfo, AVCTxt *psTxt, GBool bCont);
+const char *AVCE00GenTx6(AVCE00GenInfo *psInfo, AVCTxt *psTxt, GBool bCont);
+const char *AVCE00GenPrj(AVCE00GenInfo *psInfo, char **papszPrj, GBool bCont);
+const char *AVCE00GenRxp(AVCE00GenInfo *psInfo, AVCRxp *psRxp, GBool bCont);
+
+const char *AVCE00GenTableHdr(AVCE00GenInfo *psInfo, AVCTableDef *psDef,
+                              GBool bCont);
+const char *AVCE00GenTableRec(AVCE00GenInfo *psInfo, int numFields,
+                              AVCFieldInfo *pasDef, AVCField *pasFields,
+                              GBool bCont);
+
+/*---------------------------------------------------------------------
+ * Functions related to parsing E00 lines
+ *--------------------------------------------------------------------*/
+AVCE00ParseInfo  *AVCE00ParseInfoAlloc(void);
+void    AVCE00ParseInfoFree(AVCE00ParseInfo *psInfo);
+void    AVCE00ParseReset(AVCE00ParseInfo  *psInfo);
+
+AVCFileType AVCE00ParseSectionHeader(AVCE00ParseInfo  *psInfo,
+                                     const char *pszLine);
+GBool   AVCE00ParseSectionEnd(AVCE00ParseInfo  *psInfo, const char *pszLine,
+                              GBool bResetParseInfo);
+AVCFileType AVCE00ParseSuperSectionHeader(AVCE00ParseInfo  *psInfo,
+                                          const char *pszLine);
+GBool   AVCE00ParseSuperSectionEnd(AVCE00ParseInfo  *psInfo,
+                                   const char *pszLine );
+
+void    *AVCE00ParseNextLine(AVCE00ParseInfo  *psInfo, const char *pszLine);
+AVCArc  *AVCE00ParseNextArcLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCPal  *AVCE00ParseNextPalLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCCnt  *AVCE00ParseNextCntLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCLab  *AVCE00ParseNextLabLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCTol  *AVCE00ParseNextTolLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCTxt  *AVCE00ParseNextTxtLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCTxt  *AVCE00ParseNextTx6Line(AVCE00ParseInfo *psInfo, const char *pszLine);
+char   **AVCE00ParseNextPrjLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCRxp  *AVCE00ParseNextRxpLine(AVCE00ParseInfo *psInfo, const char *pszLine);
+AVCTableDef *AVCE00ParseNextTableDefLine(AVCE00ParseInfo *psInfo,
+                                         const char *pszLine);
+AVCField    *AVCE00ParseNextTableRecLine(AVCE00ParseInfo *psInfo,
+                                         const char *pszLine);
+
+/*---------------------------------------------------------------------
+ * Misc. functions shared by several parts of the lib.
+ *--------------------------------------------------------------------*/
+int _AVCE00ComputeRecSize(int numFields, AVCFieldInfo *pasDef,
+                          GBool bMapType40ToDouble);
+
+void _AVCDestroyTableFields(AVCTableDef *psTableDef, AVCField *pasFields);
+void _AVCDestroyTableDef(AVCTableDef *psTableDef);
+AVCTableDef *_AVCDupTableDef(AVCTableDef *psSrcDef);
+
+GBool AVCFileExists(const char *pszPath, const char *pszName);
+char *AVCAdjustCaseSensitiveFilename(char *pszFname);
+int  AVCPrintRealValue(char *pszBuf, size_t nBufLen, int nPrecision, 
AVCFileType eType,
+                       double dValue);
+
+/*=====================================================================
+              Function prototypes (THE PUBLIC ONES)
+ =====================================================================*/
+
+/*---------------------------------------------------------------------
+ * Functions to read E00
+ *--------------------------------------------------------------------*/
+AVCE00ReadE00Ptr AVCE00ReadOpenE00(const char *pszE00FileName);
+void             AVCE00ReadCloseE00(AVCE00ReadE00Ptr psRead);
+int              AVCE00ReadRewindE00(AVCE00ReadE00Ptr psRead);
+void            *AVCE00ReadNextObjectE00(AVCE00ReadE00Ptr psRead);
+
+AVCE00Section  *AVCE00ReadSectionsListE00(AVCE00ReadE00Ptr psRead, int 
*numSect);
+int             AVCE00ReadGotoSectionE00(AVCE00ReadE00Ptr psRead,
+                                         AVCE00Section *psSect,
+                                         GBool bContinue);
+
+/*---------------------------------------------------------------------
+ * Functions to make a binary coverage appear as E00
+ *--------------------------------------------------------------------*/
+
+AVCE00ReadPtr   AVCE00ReadOpen(const char *pszCoverPath);
+void            AVCE00ReadClose(AVCE00ReadPtr psInfo);
+const char     *AVCE00ReadNextLine(AVCE00ReadPtr psInfo);
+int             AVCE00ReadRewind(AVCE00ReadPtr psInfo);
+
+AVCE00Section  *AVCE00ReadSectionsList(AVCE00ReadPtr psInfo, int *numSect);
+int             AVCE00ReadGotoSection(AVCE00ReadPtr psInfo,
+                                      AVCE00Section *psSect,
+                                      GBool bContinue);
+
+/*---------------------------------------------------------------------
+ * Functions to write E00 lines to a binary coverage
+ *--------------------------------------------------------------------*/
+
+AVCE00WritePtr  AVCE00WriteOpen(const char *pszCoverPath,
+                                AVCCoverType eNewCoverType, int nPrecision);
+void            AVCE00WriteClose(AVCE00WritePtr psInfo);
+int             AVCE00WriteNextLine(AVCE00WritePtr psInfo,
+                                    const char *pszLine);
+int             AVCE00DeleteCoverage(const char *pszCoverPath);
+
+CPL_C_END
+
+#endif /* AVC_H_INCLUDED_ */

Copied: brlcad/trunk/src/other/gdal/ogr/avc_bin.c (from rev 76812, 
brlcad/trunk/src/other/gdal/ogr/ogrsf_frmts/avc/avc_bin.c)
===================================================================
--- brlcad/trunk/src/other/gdal/ogr/avc_bin.c                           (rev 0)
+++ brlcad/trunk/src/other/gdal/ogr/avc_bin.c   2020-08-17 02:56:07 UTC (rev 
76813)
@@ -0,0 +1,2658 @@
+/**********************************************************************
+ * $Id: avc_bin.c 36457 2016-11-23 00:18:37Z rouault $
+ *
+ * Name:     avc_bin.c
+ * Project:  Arc/Info vector coverage (AVC)  BIN->E00 conversion library
+ * Language: ANSI C
+ * Purpose:  Binary files access functions.
+ * Author:   Daniel Morissette, dmorisse...@dmsolutions.ca
+ *
+ **********************************************************************
+ * Copyright (c) 1999-2005, Daniel Morissette
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ **********************************************************************
+ *
+ * $Log: avc_bin.c,v $
+ * Revision 1.30  2008/07/23 20:51:38  dmorissette
+ * Fixed GCC 4.1.x compile warnings related to use of char vs unsigned char
+ * (GDAL/OGR ticket http://trac.osgeo.org/gdal/ticket/2495)
+ *
+ * Revision 1.29  2006/08/17 18:56:42  dmorissette
+ * Support for reading standalone info tables (just tables, no coverage
+ * data) by pointing AVCE00ReadOpen() to the info directory (bug 1549).
+ *
+ * Revision 1.28  2006/06/14 16:31:28  daniel
+ * Added support for AVCCoverPC2 type (bug 1491)
+ *
+ * Revision 1.27  2005/06/03 03:49:58  daniel
+ * Update email address, website url, and copyright dates
+ *
+ * Revision 1.26  2004/02/28 06:35:49  warmerda
+ * Fixed AVCBinReadObject() index support to use 'x' or 'X' for index
+ * depending on the case of the original name.
+ * Fixed so that PC Arc/Info coverages with the extra 256 byte header work
+ * properly when using indexes to read them.
+ *   http://bugzilla.remotesensing.org/show_bug.cgi?id=493
+ *
+ * Revision 1.25  2004/02/11 05:49:44  daniel
+ * Added support for deleted flag in arc.dir (bug 2332)
+ *
+ * Revision 1.24  2002/08/27 15:26:06  daniel
+ * Removed C++ style comments for IRIX compiler (GDAL bug 192)
+ *
+ * Revision 1.23  2002/04/16 20:04:24  daniel
+ * Use record size while reading ARC, PAL, CNT to skip junk bytes. (bug940)
+ *
+ * Revision 1.22  2002/03/18 19:03:37  daniel
+ * Fixed AVCBinReadObject() for PAL objects (bug 848)
+ *
+ * Revision 1.21  2002/02/14 22:54:13  warmerda
+ * added polygon and table support for random reading
+ *
+ * Revision 1.20  2002/02/13 20:35:24  warmerda
+ * added AVCBinReadObject
+ *
+ * Revision 1.19  2001/11/25 22:01:23  daniel
+ * Fixed order of args to AVCRawBinFSeek() in _AVCBinReadNextTableRec()
+ *
+ * Revision 1.18  2000/10/16 16:16:20  daniel
+ * Accept TXT files in AVCCoverWeird that use both PC or V7 TXT structure
+ *
+ * Revision 1.17  2000/09/26 20:21:04  daniel
+ * Added AVCCoverPC write
+ *
+ * Revision 1.16  2000/09/22 19:45:20  daniel
+ * Switch to MIT-style license
+ *
+ * Revision 1.15  2000/09/20 15:09:34  daniel
+ * Check for DAT/NIT fnames sometimes truncated to 8 chars in weird coverages
+ *
+ * Revision 1.14  2000/06/05 21:38:53  daniel
+ * Handle precision field > 1000 in cover file header as meaning double prec.
+ *
+ * Revision 1.13  2000/05/29 15:31:30  daniel
+ * Added Japanese DBCS support
+ *
+ * Revision 1.12  2000/02/14 17:22:36  daniel
+ * Check file signature (9993 or 9994) when reading header.
+ *
+ * Revision 1.11  2000/02/02 04:24:52  daniel
+ * Support double precision "weird" coverages
+ *
+ * Revision 1.10  2000/01/10 02:54:10  daniel
+ * Added read support for "weird" coverages
+ *
+ * Revision 1.9  2000/01/07 07:11:51  daniel
+ * Added support for reading PC Coverage TXT files
+ *
+ * Revision 1.8  1999/12/24 07:38:10  daniel
+ * Added missing DBFClose()
+ *
+ * Revision 1.7  1999/12/24 07:18:34  daniel
+ * Added PC Arc/Info coverages support
+ *
+ * Revision 1.6  1999/08/23 18:17:16  daniel
+ * Modified AVCBinReadListTables() to return INFO fnames for DeleteCoverage()
+ *
+ * Revision 1.5  1999/05/11 01:49:08  daniel
+ * Simple changes required by addition of coverage write support
+ *
+ * Revision 1.4  1999/03/03 18:42:53  daniel
+ * Fixed problem with INFO table headers (arc.dir) that sometimes contain an
+ * invalid number of records.
+ *
+ * Revision 1.3  1999/02/25 17:01:53  daniel
+ * Added support for 16 bit integers in INFO tables (type=50, size=2)
+ *
+ * Revision 1.2  1999/02/25 03:41:28  daniel
+ * Added TXT, TX6/TX7, RXP and RPL support
+ *
+ * Revision 1.1  1999/01/29 16:28:52  daniel
+ * Initial revision
+ *
+ **********************************************************************/
+
+#include "avc.h"
+
+#include <ctype.h>      /* for isspace() */
+
+
+/* Used by avc_binwr.c */
+extern int _AVCBinReadNextArcDir(AVCRawBinFile *psFile, AVCTableDef *psArcDir);
+
+/*=====================================================================
+ * Prototypes for some static functions
+ *====================================================================*/
+
+static AVCBinFile *_AVCBinReadOpenTable(const char *pszInfoPath,
+                                        const char *pszTableName,
+                                        AVCCoverType eCoverType,
+                                        AVCDBCSInfo *psDBCSInfo);
+static AVCBinFile *_AVCBinReadOpenDBFTable(const char *pszInfoPath,
+                                           const char *pszTableName);
+static AVCBinFile *_AVCBinReadOpenPrj(const char *pszPath,const char *pszName);
+
+static int _AVCBinReadNextTableRec(AVCRawBinFile *psFile, int nFields,
+                                   AVCFieldInfo *pasDef, AVCField *pasFields,
+                                   int nRecordSize);
+static int _AVCBinReadNextDBFTableRec(DBFHandle hDBFFile, int *piRecordIndex,
+                                      int nFields, AVCFieldInfo *pasDef,
+                                      AVCField *pasFields);
+
+/*=====================================================================
+ * Stuff related to reading the binary coverage files
+ *====================================================================*/
+
+/**********************************************************************
+ *                          AVCBinReadOpen()
+ *
+ * Open a coverage file for reading, read the file header if applicable,
+ * and initialize a temp. storage structure to be ready to read objects
+ * from the file.
+ *
+ * pszPath is the coverage (or info directory) path, terminated by
+ *         a '/' or a '\\'
+ * pszName is the name of the file to open relative to this directory.
+ *
+ * Note: For most file types except tables, passing pszPath="" and
+ * including the coverage path as part of pszName instead would work.
+ *
+ * Returns a valid AVCBinFile handle, or NULL if the file could
+ * not be opened.
+ *
+ * AVCBinClose() will eventually have to be called to release the
+ * resources used by the AVCBinFile structure.
+ **********************************************************************/
+AVCBinFile *AVCBinReadOpen(const char *pszPath, const char *pszName,
+                           AVCCoverType eCoverType, AVCFileType eFileType,
+                           AVCDBCSInfo *psDBCSInfo)
+{
+    AVCBinFile   *psFile;
+
+    /*-----------------------------------------------------------------
+     * The case of INFO tables is a bit more complicated...
+     * pass the control to a separate function.
+     *----------------------------------------------------------------*/
+    if (eFileType == AVCFileTABLE)
+    {
+        if (eCoverType == AVCCoverPC || eCoverType == AVCCoverPC2)
+            return _AVCBinReadOpenDBFTable(pszPath, pszName);
+        else
+            return _AVCBinReadOpenTable(pszPath, pszName,
+                                        eCoverType, psDBCSInfo);
+    }
+
+    /*-----------------------------------------------------------------
+     * PRJ files are text files... we won't use the AVCRawBin*()
+     * functions for them...
+     *----------------------------------------------------------------*/
+    if (eFileType == AVCFilePRJ)
+    {
+        return _AVCBinReadOpenPrj(pszPath, pszName);
+    }
+
+    /*-----------------------------------------------------------------
+     * All other file types share a very similar opening method.
+     *----------------------------------------------------------------*/
+    psFile = (AVCBinFile*)CPLCalloc(1, sizeof(AVCBinFile));
+
+    psFile->eFileType = eFileType;
+    psFile->eCoverType = eCoverType;
+
+    psFile->pszFilename = (char*)CPLMalloc(strlen(pszPath)+strlen(pszName)+1);
+    snprintf(psFile->pszFilename,
+             strlen(pszPath)+strlen(pszName)+1, "%s%s", pszPath, pszName);
+
+    AVCAdjustCaseSensitiveFilename(psFile->pszFilename);
+
+    psFile->psRawBinFile = AVCRawBinOpen(psFile->pszFilename, "r",
+                                         AVC_COVER_BYTE_ORDER(eCoverType),
+                                         psDBCSInfo);
+
+    if (psFile->psRawBinFile == NULL)
+    {
+        /* Failed to open file... just return NULL since an error message
+         * has already been issued by AVCRawBinOpen()
+         */
+        CPLFree(psFile->pszFilename);
+        CPLFree(psFile);
+        return NULL;
+    }
+
+    /*-----------------------------------------------------------------
+     * Read the header, and set the precision field if applicable
+     *----------------------------------------------------------------*/
+    if (AVCBinReadRewind(psFile) != 0)
+    {
+        CPLFree(psFile->pszFilename);
+        CPLFree(psFile);
+        return NULL;
+    }
+
+    /*-----------------------------------------------------------------
+     * Allocate a temp. structure to use to read objects from the file
+     * (Using Calloc() will automatically initialize the struct contents
+     *  to NULL... this is very important for ARCs and PALs)
+     *----------------------------------------------------------------*/
+    if (psFile->eFileType == AVCFileARC)
+    {
+        psFile->cur.psArc = (AVCArc*)CPLCalloc(1, sizeof(AVCArc));
+    }
+    else if (psFile->eFileType == AVCFilePAL ||
+             psFile->eFileType == AVCFileRPL )
+    {
+        psFile->cur.psPal = (AVCPal*)CPLCalloc(1, sizeof(AVCPal));
+    }
+    else if (psFile->eFileType == AVCFileCNT)
+    {
+        psFile->cur.psCnt = (AVCCnt*)CPLCalloc(1, sizeof(AVCCnt));
+    }
+    else if (psFile->eFileType == AVCFileLAB)
+    {
+        psFile->cur.psLab = (AVCLab*)CPLCalloc(1, sizeof(AVCLab));
+    }
+    else if (psFile->eFileType == AVCFileTOL)
+    {
+        psFile->cur.psTol = (AVCTol*)CPLCalloc(1, sizeof(AVCTol));
+    }
+    else if (psFile->eFileType == AVCFileTXT ||
+             psFile->eFileType == AVCFileTX6)
+    {
+        psFile->cur.psTxt = (AVCTxt*)CPLCalloc(1, sizeof(AVCTxt));
+    }
+    else if (psFile->eFileType == AVCFileRXP)
+    {
+        psFile->cur.psRxp = (AVCRxp*)CPLCalloc(1, sizeof(AVCRxp));
+    }
+    else
+    {
+        CPLError(CE_Failure, CPLE_IllegalArg,
+                 "%s: Unsupported file type or corrupted file.",
+                 psFile->pszFilename);
+        CPLFree(psFile->pszFilename);
+        CPLFree(psFile);
+        psFile = NULL;
+    }
+
+    return psFile;
+}
+
+/**********************************************************************
+ *                          AVCBinReadClose()
+ *
+ * Close a coverage file, and release all memory (object strcut., buffers,
+ * etc.) associated with this file.
+ **********************************************************************/
+void    AVCBinReadClose(AVCBinFile *psFile)
+{
+    AVCRawBinClose(psFile->psRawBinFile);
+    psFile->psRawBinFile = NULL;
+
+    CPLFree(psFile->pszFilename);
+    psFile->pszFilename = NULL;
+
+    if (psFile->hDBFFile)
+        DBFClose(psFile->hDBFFile);
+
+    if( psFile->psIndexFile != NULL )
+        AVCRawBinClose( psFile->psIndexFile );
+
+    if (psFile->eFileType == AVCFileARC)
+    {
+        if (psFile->cur.psArc)
+            CPLFree(psFile->cur.psArc->pasVertices);
+        CPLFree(psFile->cur.psArc);
+    }
+    else if (psFile->eFileType == AVCFilePAL ||
+             psFile->eFileType == AVCFileRPL )
+    {
+        if (psFile->cur.psPal)
+            CPLFree(psFile->cur.psPal->pasArcs);
+        CPLFree(psFile->cur.psPal);
+    }
+    else if (psFile->eFileType == AVCFileCNT)
+    {
+        if (psFile->cur.psCnt)
+            CPLFree(psFile->cur.psCnt->panLabelIds);
+        CPLFree(psFile->cur.psCnt);
+    }
+    else if (psFile->eFileType == AVCFileLAB)
+    {
+        CPLFree(psFile->cur.psLab);
+    }
+    else if (psFile->eFileType == AVCFileTOL)
+    {
+        CPLFree(psFile->cur.psTol);
+    }
+    else if (psFile->eFileType == AVCFilePRJ)
+    {
+        CSLDestroy(psFile->cur.papszPrj);
+    }
+    else if (psFile->eFileType == AVCFileTXT ||
+             psFile->eFileType == AVCFileTX6)
+    {
+        if (psFile->cur.psTxt)
+        {
+            CPLFree(psFile->cur.psTxt->pasVertices);
+            CPLFree(psFile->cur.psTxt->pszText);
+        }
+        CPLFree(psFile->cur.psTxt);
+    }
+    else if (psFile->eFileType == AVCFileRXP)
+    {
+        CPLFree(psFile->cur.psRxp);
+    }
+    else if (psFile->eFileType == AVCFileTABLE)
+    {
+        _AVCDestroyTableFields(psFile->hdr.psTableDef, psFile->cur.pasFields);
+        _AVCDestroyTableDef(psFile->hdr.psTableDef);
+    }
+    else
+    {
+        CPLError(CE_Failure, CPLE_IllegalArg,
+                 "Unsupported file type or invalid file handle!");
+    }
+
+    CPLFree(psFile);
+}
+
+/**********************************************************************
+ *                          _AVCBinReadHeader()
+ *
+ * (This function is for internal library use... external calls should
+ * go to AVCBinReadRewind() instead)
+ *
+ * Read the first 100 bytes header of the file and fill the AVCHeader
+ * structure.
+ *
+ * Returns 0 on success or -1 on error.
+ **********************************************************************/
+static
+int _AVCBinReadHeader(AVCRawBinFile *psFile, AVCBinHeader *psHeader,
+                      AVCCoverType eCoverType)
+{
+    int nStatus = 0;
+
+    /*-----------------------------------------------------------------
+     * For AVCCoverPC coverages (files without hte .adf extension),
+     * there is a first 256 bytes header that we just skip and that
+     * precedes the 100 bytes header block.
+     *
+     * In AVCCoverV7, we only have the 100 bytes header.
+     *----------------------------------------------------------------*/
+    if (eCoverType == AVCCoverPC)
+        AVCRawBinFSeek(psFile, 256, SEEK_SET);
+    else
+        AVCRawBinFSeek(psFile, 0, SEEK_SET);
+
+    psHeader->nSignature = AVCRawBinReadInt32(psFile);
+
+    if (AVCRawBinEOF(psFile))
+        nStatus = -1;
+
+    psHeader->nPrecision = AVCRawBinReadInt32(psFile);
+    psHeader->nRecordSize= AVCRawBinReadInt32(psFile);
+
+    /* Jump to 24th byte in header */
+    AVCRawBinFSeek(psFile, 12, SEEK_CUR);
+    psHeader->nLength    = AVCRawBinReadInt32(psFile);
+
+    /*-----------------------------------------------------------------
+     * File length, in words (16 bits)... pass the info to the RawBinFile
+     * to prevent it from trying to read junk bytes at the end of files...
+     * this problem happens specially with PC Arc/Info files.
+     *----------------------------------------------------------------*/
+    if (eCoverType == AVCCoverPC)
+        AVCRawBinSetFileDataSize(psFile, psHeader->nLength*2 + 256);
+    else
+        AVCRawBinSetFileDataSize(psFile, psHeader->nLength*2 );
+
+    /* Move the pointer at the end of the 100 bytes header
+     */
+    AVCRawBinFSeek(psFile, 72, SEEK_CUR);
+
+    return nStatus;
+}
+
+
+/**********************************************************************
+ *                          AVCBinReadRewind()
+ *
+ * Rewind the read pointer, and read/skip the header if necessary so
+ * that we are ready to read the data objects from the file after
+ * this call.
+ *
+ * Returns 0 on success, -1 on error, and -2 if file has an invalid
+ * signature and is possibly corrupted.
+ **********************************************************************/
+int AVCBinReadRewind(AVCBinFile *psFile)
+{
+    AVCBinHeader sHeader;
+    int          nStatus=0;
+
+    /*-----------------------------------------------------------------
+     * For AVCCoverPC coverages, there is a first 256 bytes header
+     * that we just skip and that precedes the 100 bytes header block.
+     *
+     * In AVCCoverV7, AVCCoverPC2 and AVCCoverWeird, we only find the
+     * 100 bytes header.
+     *
+     * Note: it is the call to _AVCBinReadHeader() that takes care
+     * of skipping the first 256 bytes header if necessary.
+     *----------------------------------------------------------------*/
+
+    AVCRawBinFSeek(psFile->psRawBinFile, 0, SEEK_SET);
+
+    if ( psFile->eFileType == AVCFileARC ||
+         psFile->eFileType == AVCFilePAL ||
+         psFile->eFileType == AVCFileRPL ||
+         psFile->eFileType == AVCFileCNT ||
+         psFile->eFileType == AVCFileLAB ||
+         psFile->eFileType == AVCFileTXT ||
+         psFile->eFileType == AVCFileTX6  )
+    {
+        nStatus = _AVCBinReadHeader(psFile->psRawBinFile, &sHeader,
+                                    psFile->eCoverType);
+
+        /* Store the precision information inside the file handle.
+         *
+         * Of course, there had to be an exception...
+         * At least PAL and TXT files in PC Arc/Info coverages sometimes
+         * have a negative precision flag even if they contain single
+         * precision data... why is that????  A PC Arc bug?
+         *
+         * 2000-06-05: Found a double-precision PAL file with a signature
+         *             of 1011 (should have been -11).  So we'll assume
+         *             that signature > 1000 also means double precision.
+         */
+        if ((sHeader.nPrecision < 0 || sHeader.nPrecision > 1000) &&
+            psFile->eCoverType != AVCCoverPC)
+            psFile->nPrecision = AVC_DOUBLE_PREC;
+        else
+            psFile->nPrecision = AVC_SINGLE_PREC;
+
+        /* Validate the signature value... this will allow us to detect
+         * corrupted files or files that do not belong in the coverage.
+         */
+        if (sHeader.nSignature != 9993 && sHeader.nSignature != 9994)
+        {
+            CPLError(CE_Warning, CPLE_AssertionFailed,
+                     "%s appears to have an invalid file header.",
+                     psFile->pszFilename);
+            return -2;
+        }
+
+        /* In Weird coverages, TXT files can be stored in the PC or the V7
+         * format.  Look at the 'precision' field in the header to tell which
+         * type we have.
+         *   Weird TXT in PC format: nPrecision = 16
+         *   Weird TXT in V7 format: nPrecision = +/-67
+         * Use AVCFileTXT for PC type, and AVCFileTX6 for V7 type.
+         */
+        if (psFile->eCoverType == AVCCoverWeird &&
+            psFile->eFileType == AVCFileTXT && ABS(sHeader.nPrecision) == 67)
+        {
+            /* TXT file will be processed as V7 TXT/TX6/TX7 */
+            psFile->eFileType = AVCFileTX6;
+        }
+    }
+    else if (psFile->eFileType == AVCFileTOL)
+    {
+        /*-------------------------------------------------------------
+         * For some reason, the tolerance files do not follow the
+         * general rules!
+         * Single precision "tol.adf" have no header
+         * Double precision "par.adf" have the usual 100 bytes header,
+         *  but the 3rd field, which usually defines the precision has
+         *  a positive value, even if the file is double precision!
+         *
+         * Also, we have a problem with PC Arc/Info TOL files since they
+         * do not contain the first 256 bytes header either... so we will
+         * just assume that double precision TOL files cannot exist in
+         * PC Arc/Info coverages... this should be OK.
+         *------------------------------------------------------------*/
+        int nSignature = 0;
+        nSignature = AVCRawBinReadInt32(psFile->psRawBinFile);
+
+        if (nSignature == 9993)
+        {
+            /* We have a double precision par.adf... read the 100 bytes
+             * header and set the precision information inside the file
+             * handle.
+             */

@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to