old load: normalize NaN to Signaling NaN 28/10928/2
Antoine ELIAS [Thu, 21 Mar 2013 12:54:42 +0000 (13:54 +0100)]
Change-Id: Iaeb47fb5bd1826a8074eb950b2115b3e31d9f900

scilab/modules/io/src/fortran/core_Import.def
scilab/modules/io/src/fortran/newsave.f

index c63de3b..bf836d5 100644 (file)
@@ -17,6 +17,8 @@ eqid_
 cremat_
 getendian_
 namstr_
+isanan_
+returnananfortran_
 ;
 ; explicit imports (COMMON) to fix warning LNK4049: locally defined symbol 
 ;
index 5cd5002..219c3ed 100644 (file)
@@ -756,10 +756,18 @@ c     Save a matrix of numbers
       integer fd
       character*3 fmti,fmtd
       integer sadr
+      
+      double precision dblNaN
+      
+      integer isanan
+      external isanan
+      
 c
       iadr(l)=l+l-1
       sadr(l)=(l/2)+1
 c
+      call returnananfortran(dblNaN)
+      
       fmti='il'//char(0)
       fmtd='dl'//char(0)
 
@@ -780,6 +788,14 @@ c     read matrix elements
       endif
       l=sadr(il+4)
       call mgetnc(fd,istk(il+4),mn,fmtd,ierr)
+      
+c     convert all NaN to Signaling NaN
+      do 10 i = 0, mn-1
+          if(isanan(stk(l+i)).eq.1) then
+              stk(l+i) = dblNaN
+          endif
+10    continue        
+      
 c      call mgetnc(fd,stk(l),mn,fmtd,ierr)
       n=iadr(l+mn)-il
 c      n=4+2*mn
@@ -819,10 +835,17 @@ c     Load a matrix of polynomials
       integer fd
       character*3 fmti,fmtd
       integer sadr
+      double precision dblNaN
+      
+      integer isanan
+      external isanan
+      
 c
       iadr(l)=l+l-1
       sadr(l)=(l/2)+1
 c
+      call returnananfortran(dblNaN)
+      
       fmti='il'//char(0)
       fmtd='dl'//char(0)
 
@@ -854,6 +877,14 @@ c     read polynomials coefficients
       endif
       l=sadr(il+9+mn)
       call mgetnc(fd,istk(iadr(l)),mn1,fmtd,ierr)
+      
+c     convert all NaN to Signaling NaN
+      do 10 i = 0, mn1-1
+          if(isanan(stk(l+i)).eq.1) then
+              stk(l+i) = dblNaN
+          endif
+10    continue        
+      
       n=iadr(l+mn1)-il
 c      n=9+mn+2*mn1
       return