Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: PCRaster Integration 4 : * Purpose: PCRaster driver support functions. 5 : * Author: Kor de Jong, Oliver Schmitz 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) PCRaster owners 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdal_frmts.h" 14 : #include "gdalplugindriverproxy.h" 15 : 16 : #include "pcrasterdrivercore.h" 17 : 18 : /* value for first 27 bytes of MAIN_HEADER.signature */ 19 : #ifndef CSF_SIG 20 : #define CSF_SIG "RUU CROSS SYSTEM MAP FORMAT" 21 : #define CSF_SIZE_SIG (sizeof(CSF_SIG) - 1) 22 : #endif 23 : 24 : /************************************************************************/ 25 : /* PCRasterDriverIdentify() */ 26 : /************************************************************************/ 27 : 28 63946 : int PCRasterDriverIdentify(GDALOpenInfo *poOpenInfo) 29 : 30 : { 31 70513 : return (poOpenInfo->fpL && 32 70208 : poOpenInfo->nHeaderBytes >= static_cast<int>(CSF_SIZE_SIG) && 33 6262 : strncmp(reinterpret_cast<char *>(poOpenInfo->pabyHeader), CSF_SIG, 34 63946 : CSF_SIZE_SIG) == 0); 35 : } 36 : 37 : #undef CSF_SIG 38 : #undef CSF_SIZE_SIG 39 : 40 : /************************************************************************/ 41 : /* PCRasterDriverSetCommonMetadata() */ 42 : /************************************************************************/ 43 : 44 1785 : void PCRasterDriverSetCommonMetadata(GDALDriver *poDriver) 45 : { 46 1785 : poDriver->SetDescription(DRIVER_NAME); 47 1785 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 48 : 49 1785 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "PCRaster Raster File"); 50 1785 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES, "Byte Int32 Float32"); 51 1785 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, 52 1785 : "drivers/raster/pcraster.html"); 53 1785 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "map"); 54 : 55 1785 : poDriver->pfnIdentify = PCRasterDriverIdentify; 56 1785 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 57 1785 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 58 1785 : poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES"); 59 1785 : } 60 : 61 : /************************************************************************/ 62 : /* DeclareDeferredPCRasterPlugin() */ 63 : /************************************************************************/ 64 : 65 : #ifdef PLUGIN_FILENAME 66 2058 : void DeclareDeferredPCRasterPlugin() 67 : { 68 2058 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 69 : { 70 283 : return; 71 : } 72 1775 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 73 : #ifdef PLUGIN_INSTALLATION_MESSAGE 74 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 75 : PLUGIN_INSTALLATION_MESSAGE); 76 : #endif 77 1775 : PCRasterDriverSetCommonMetadata(poDriver); 78 1775 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 79 : } 80 : #endif