Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OGR 4 : * Purpose: OGRAVCE00Driver implementation (Arc/Info E00ary Coverages) 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_avc.h" 14 : 15 : /************************************************************************/ 16 : /* Identify() */ 17 : /************************************************************************/ 18 : 19 42756 : static int OGRAVCE00DriverIdentify(GDALOpenInfo *poOpenInfo) 20 : { 21 42756 : if (!EQUAL(CPLGetExtension(poOpenInfo->pszFilename), "E00")) 22 42748 : return FALSE; 23 : 24 8 : if (poOpenInfo->nHeaderBytes == 0) 25 0 : return FALSE; 26 : 27 8 : if (!(STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "EXP 0") || 28 2 : STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "EXP 1"))) 29 0 : return FALSE; 30 : 31 8 : if (strstr((const char *)poOpenInfo->pabyHeader, "GRD 2") != nullptr || 32 8 : strstr((const char *)poOpenInfo->pabyHeader, "GRD 3") != nullptr) 33 0 : return FALSE; 34 : 35 8 : return TRUE; 36 : } 37 : 38 : /************************************************************************/ 39 : /* Open() */ 40 : /************************************************************************/ 41 : 42 4 : static GDALDataset *OGRAVCE00DriverOpen(GDALOpenInfo *poOpenInfo) 43 : 44 : { 45 4 : if (!OGRAVCE00DriverIdentify(poOpenInfo)) 46 0 : return nullptr; 47 4 : if (poOpenInfo->eAccess == GA_Update) 48 0 : return nullptr; 49 : 50 4 : OGRAVCE00DataSource *poDSE00 = new OGRAVCE00DataSource(); 51 : 52 7 : if (poDSE00->Open(poOpenInfo->pszFilename, TRUE) && 53 3 : poDSE00->GetLayerCount() > 0) 54 : { 55 3 : return poDSE00; 56 : } 57 1 : delete poDSE00; 58 : 59 1 : return nullptr; 60 : } 61 : 62 : /************************************************************************/ 63 : /* RegisterOGRAVC() */ 64 : /************************************************************************/ 65 : 66 1595 : void RegisterOGRAVCE00() 67 : 68 : { 69 1595 : if (GDALGetDriverByName("AVCE00") != nullptr) 70 302 : return; 71 : 72 1293 : GDALDriver *poDriver = new GDALDriver(); 73 : 74 1293 : poDriver->SetDescription("AVCE00"); 75 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 76 1293 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 77 1293 : "Arc/Info E00 (ASCII) Coverage"); 78 1293 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "e00"); 79 1293 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/avce00.html"); 80 1293 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 81 1293 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); 82 : 83 1293 : poDriver->pfnIdentify = OGRAVCE00DriverIdentify; 84 1293 : poDriver->pfnOpen = OGRAVCE00DriverOpen; 85 : 86 1293 : GetGDALDriverManager()->RegisterDriver(poDriver); 87 : }