/src/gdal/ogr/ogrsf_frmts/avc/ogravce00driver.cpp
Line | Count | Source |
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 | | static int OGRAVCE00DriverIdentify(GDALOpenInfo *poOpenInfo) |
20 | 150k | { |
21 | 150k | if (!poOpenInfo->IsExtensionEqualToCI("E00")) |
22 | 94.7k | return FALSE; |
23 | | |
24 | 56.1k | if (poOpenInfo->nHeaderBytes == 0) |
25 | 9 | return FALSE; |
26 | | |
27 | 56.1k | if (!(STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "EXP 0") || |
28 | 56.1k | STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "EXP 1"))) |
29 | 83 | return FALSE; |
30 | | |
31 | 56.0k | if (strstr((const char *)poOpenInfo->pabyHeader, "GRD 2") != nullptr || |
32 | 56.0k | strstr((const char *)poOpenInfo->pabyHeader, "GRD 3") != nullptr) |
33 | 3 | return FALSE; |
34 | | |
35 | 56.0k | return TRUE; |
36 | 56.0k | } |
37 | | |
38 | | /************************************************************************/ |
39 | | /* Open() */ |
40 | | /************************************************************************/ |
41 | | |
42 | | static GDALDataset *OGRAVCE00DriverOpen(GDALOpenInfo *poOpenInfo) |
43 | | |
44 | 28.0k | { |
45 | 28.0k | if (!OGRAVCE00DriverIdentify(poOpenInfo)) |
46 | 0 | return nullptr; |
47 | 28.0k | if (poOpenInfo->eAccess == GA_Update) |
48 | 0 | return nullptr; |
49 | | |
50 | 28.0k | OGRAVCE00DataSource *poDSE00 = new OGRAVCE00DataSource(); |
51 | | |
52 | 28.0k | if (poDSE00->Open(poOpenInfo->pszFilename, TRUE) && |
53 | 25.8k | poDSE00->GetLayerCount() > 0) |
54 | 25.8k | { |
55 | 25.8k | return poDSE00; |
56 | 25.8k | } |
57 | 2.17k | delete poDSE00; |
58 | | |
59 | 2.17k | return nullptr; |
60 | 28.0k | } |
61 | | |
62 | | /************************************************************************/ |
63 | | /* RegisterOGRAVC() */ |
64 | | /************************************************************************/ |
65 | | |
66 | | void RegisterOGRAVCE00() |
67 | | |
68 | 24 | { |
69 | 24 | if (GDALGetDriverByName("AVCE00") != nullptr) |
70 | 0 | return; |
71 | | |
72 | 24 | GDALDriver *poDriver = new GDALDriver(); |
73 | | |
74 | 24 | poDriver->SetDescription("AVCE00"); |
75 | 24 | poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); |
76 | 24 | poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, |
77 | 24 | "Arc/Info E00 (ASCII) Coverage"); |
78 | 24 | poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "e00"); |
79 | 24 | poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/avce00.html"); |
80 | 24 | poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); |
81 | 24 | poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE"); |
82 | | |
83 | 24 | poDriver->pfnIdentify = OGRAVCE00DriverIdentify; |
84 | 24 | poDriver->pfnOpen = OGRAVCE00DriverOpen; |
85 | | |
86 | 24 | GetGDALDriverManager()->RegisterDriver(poDriver); |
87 | 24 | } |