From d065b28c71a2243e03ee912336fcba1125f34e56 Mon Sep 17 00:00:00 2001
From: unknown <olivier.delaigue@ANPI1430.antony.irstea.priv>
Date: Fri, 11 Aug 2017 11:44:34 +0200
Subject: [PATCH] v1.0.9.16 new airGR.c file to register native routines #4623

---
 DESCRIPTION |  2 +-
 NAMESPACE   |  2 +-
 src/airGR.c | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 35 insertions(+), 2 deletions(-)
 create mode 100644 src/airGR.c

diff --git a/DESCRIPTION b/DESCRIPTION
index 1965624c..f7647491 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
 Package: airGR
 Type: Package
 Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.0.9.15
+Version: 1.0.9.16
 Date: 2017-07-12
 Authors@R: c(
   person("Laurent", "Coron", role = c("aut", "trl")),
diff --git a/NAMESPACE b/NAMESPACE
index b5a90741..d5fab141 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -1,7 +1,7 @@
 #####################################
 ##              Load DLL           ##
 #####################################
-useDynLib(airGR)
+useDynLib(airGR, .registration = TRUE)
 
 
 
diff --git a/src/airGR.c b/src/airGR.c
new file mode 100644
index 00000000..9c149457
--- /dev/null
+++ b/src/airGR.c
@@ -0,0 +1,33 @@
+#include <R_ext/RS.h>
+#include <stdlib.h> // for NULL
+#include <R_ext/Rdynload.h>
+
+/* FIXME: 
+   Check these declarations against the C/Fortran source code.
+*/
+
+/* .Fortran calls */
+extern void F77_NAME(frun_cemaneige)(int *, double *, double *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr1a)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr2m)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr4h)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr4j)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr5j)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+extern void F77_NAME(frun_gr6j)(int *, double *, double *, int *, double *, int *, double *, int *, int *, double *, double *);
+
+static const R_FortranMethodDef FortranEntries[] = {
+    {"frun_cemaneige", (DL_FUNC) &F77_NAME(frun_cemaneige), 13},
+    {"frun_gr1a",      (DL_FUNC) &F77_NAME(frun_gr1a),      11},
+    {"frun_gr2m",      (DL_FUNC) &F77_NAME(frun_gr2m),      11},
+    {"frun_gr4h",      (DL_FUNC) &F77_NAME(frun_gr4h),      11},
+    {"frun_gr4j",      (DL_FUNC) &F77_NAME(frun_gr4j),      11},
+    {"frun_gr5j",      (DL_FUNC) &F77_NAME(frun_gr5j),      11},
+    {"frun_gr6j",      (DL_FUNC) &F77_NAME(frun_gr6j),      11},
+    {NULL, NULL, 0}
+};
+
+void R_init_airGR(DllInfo *dll)
+{
+    R_registerRoutines(dll, NULL, NULL, FortranEntries, NULL);
+    R_useDynamicSymbols(dll, FALSE);
+}
-- 
GitLab