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 62681 : int PCRasterDriverIdentify(GDALOpenInfo *poOpenInfo) 29 : 30 : { 31 69191 : return (poOpenInfo->fpL && 32 68888 : poOpenInfo->nHeaderBytes >= static_cast<int>(CSF_SIZE_SIG) && 33 6207 : strncmp(reinterpret_cast<char *>(poOpenInfo->pabyHeader), CSF_SIG, 34 62681 : CSF_SIZE_SIG) == 0); 35 : } 36 : 37 : #undef CSF_SIG 38 : #undef CSF_SIZE_SIG 39 : 40 : /************************************************************************/ 41 : /* PCRasterDriverSetCommonMetadata() */ 42 : /************************************************************************/ 43 : 44 1760 : void PCRasterDriverSetCommonMetadata(GDALDriver *poDriver) 45 : { 46 1760 : poDriver->SetDescription(DRIVER_NAME); 47 1760 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 48 : 49 1760 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "PCRaster Raster File"); 50 1760 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES, "Byte Int32 Float32"); 51 1760 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, 52 1760 : "drivers/raster/pcraster.html"); 53 1760 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "map"); 54 : 55 1760 : poDriver->pfnIdentify = PCRasterDriverIdentify; 56 1760 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 57 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 58 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES"); 59 1760 : } 60 : 61 : /************************************************************************/ 62 : /* DeclareDeferredPCRasterPlugin() */ 63 : /************************************************************************/ 64 : 65 : #ifdef PLUGIN_FILENAME 66 2033 : void DeclareDeferredPCRasterPlugin() 67 : { 68 2033 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 69 : { 70 283 : return; 71 : } 72 1750 : 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 1750 : PCRasterDriverSetCommonMetadata(poDriver); 78 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 79 : } 80 : #endif