erroneous comparison of graphic handles
Serge Steer [Tue, 20 May 2008 08:58:47 +0000 (08:58 +0000)]
scilab/modules/core/Makefile.in
scilab/modules/core/src/c/comparehandles.c [new file with mode: 0644]
scilab/modules/core/src/fortran/hndlops.f

index a1abdd2..d0255fe 100644 (file)
@@ -145,7 +145,7 @@ am__objects_1 = libscicore_la-inffic.lo libscicore_la-cs2st.lo \
        libscicore_la-getdynamicdebuginfo.lo \
        libscicore_la-callDynamicGateway.lo \
        libscicore_la-gw_dynamic_generic.lo \
-       libscicore_la-dynamic_gateways.lo libscicore_la-readGateway.lo
+       libscicore_la-dynamic_gateways.lo libscicore_la-readGateway.lo  libscicore_la-comparehandles.lo
 am__objects_2 = algebre.lo clunit.lo getlin.lo allowptr.lo dldsp.lo \
        isany.lo hmcreate.lo nextj.lo functionsforbasout.lo \
        setgetmode.lo showstack.lo misops.lo iseye.lo chkvar.lo \
@@ -505,7 +505,9 @@ src/c/getdynamicdebuginfo.c \
 src/c/callDynamicGateway.c \
 src/c/gw_dynamic_generic.c \
 src/c/dynamic_gateways.c \
-src/c/readGateway.c
+src/c/readGateway.c \
+src/c/comparehandles.c
+
 
 CORE_FORTRAN_SOURCES = src/fortran/algebre.f \
 src/fortran/clunit.f \
@@ -1648,6 +1650,13 @@ libscicore_la-readGateway.lo: src/c/readGateway.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscicore_la_CFLAGS) $(CFLAGS) -c -o libscicore_la-readGateway.lo `test -f 'src/c/readGateway.c' || echo '$(srcdir)/'`src/c/readGateway.c
 
+libscicore_la-comparehandles.lo: src/c/comparehandles.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscicore_la_CFLAGS) $(CFLAGS) -MT libscicore_la-comparehandles.lo -MD -MP -MF $(DEPDIR)/libscicore_la-comparehandles.Tpo -c -o libscicore_la-comparehandles.lo `test -f 'src/c/comparehandles.c' || echo '$(srcdir)/'`src/c/comparehandles.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/libscicore_la-comparehandles.Tpo $(DEPDIR)/libscicore_la-comparehandles.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='src/c/comparehandles.c' object='libscicore_la-comparehandles.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscicore_la_CFLAGS) $(CFLAGS) -c -o libscicore_la-comparehandles.lo `test -f 'src/c/comparehandles.c' || echo '$(srcdir)/'`src/c/comparehandles.c
+
 libscicore_la-sci_stacksize.lo: sci_gateway/c/sci_stacksize.c
 @am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libscicore_la_CFLAGS) $(CFLAGS) -MT libscicore_la-sci_stacksize.lo -MD -MP -MF $(DEPDIR)/libscicore_la-sci_stacksize.Tpo -c -o libscicore_la-sci_stacksize.lo `test -f 'sci_gateway/c/sci_stacksize.c' || echo '$(srcdir)/'`sci_gateway/c/sci_stacksize.c
 @am__fastdepCC_TRUE@   mv -f $(DEPDIR)/libscicore_la-sci_stacksize.Tpo $(DEPDIR)/libscicore_la-sci_stacksize.Plo
diff --git a/scilab/modules/core/src/c/comparehandles.c b/scilab/modules/core/src/c/comparehandles.c
new file mode 100644 (file)
index 0000000..ffbda16
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) INRIA
+ * 
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at    
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+/*--------------------------------------------------------------------------*/
+#include "stack-c.h"
+/* used to test if two graphic handles are equal or not */
+int C2F(comparehandles)(long long *h1,long long *h2) 
+{
+  if (*h1 != *h2) return 0;
+  return 1;
+}
+
index ac40421..e7a91d6 100644 (file)
@@ -343,7 +343,7 @@ c     check and convert indices variable
          call error(21)
          return
       endif
- 79   if(mi.eq.0) then
+      if(mi.eq.0) then
 c     arg2([])
          il1=iadr(lstk(top))
          istk(il1)=1
@@ -432,7 +432,7 @@ c
       mn1=m1*n1
 c     
 c     arg3(arg1,arg2)
- 82   if(rhs.gt.3) then
+      if(rhs.gt.3) then
          call error(36)
          return
       endif
@@ -464,7 +464,7 @@ c     check and convert indices variables
          return
       endif
 c     
- 90   mn=mi*nj
+      mn=mi*nj
       if(mn.eq.0) then 
 c     .  arg1=[] or arg2=[] 
          il1=iadr(lstk(top))
@@ -615,7 +615,7 @@ c     .           arg3([])=[]  --> arg3
                endif
             endif
 c     .     arg3(arg1)=[] -->arg3(compl(arg1))
- 97         call indxgc(il1,mn3,ilr,mi,mx,lw)
+            call indxgc(il1,mn3,ilr,mi,mx,lw)
             if(err.gt.0) return
             l2=l3
             n2=n3
@@ -828,7 +828,7 @@ c
       top0=top
       lw=lstk(top+1)+1
 
- 01   il4=iadr(lstk(top))
+      il4=iadr(lstk(top))
       if(istk(il4).lt.0) il4=iadr(istk(il4+1))
       if(istk(il4).ne.9) then
          top=top0
@@ -961,6 +961,13 @@ c     .
 c     .           call extraction
                   goto 90
                endif
+            elseif(nj.eq.n4) then
+c               arg4(arg1,[])=[] --> arg4
+               call icopy(4,istk(il4),1,istk(ilrs),1)
+               l=sadr(ilrs+4)
+               call unsfdcopy(mn4,stk(l4),1,stk(l),1)
+               lstk(top+1)=l+mn4
+               return
             else
                call indxgc(il1,m4,ili,mi,mxi,lw)
                if(err.gt.0) return
@@ -975,6 +982,13 @@ c     .           arg4(1:m4,arg2)=[]
                   mn3=m3*n3
 c     .           call extraction
                   goto 90
+               elseif(mi.eq.m4) then
+c                 arg4([],arg2)=[] --> arg4
+                  call icopy(4,istk(il4),1,istk(ilrs),1)
+                  l=sadr(ilrs+4)
+                  call unsfdcopy(mn4,stk(l4),1,stk(l),1)
+                  lstk(top+1)=l+mn4
+                  return
                else
                   call error(15)
                   return
@@ -1143,10 +1157,7 @@ c     Copyright INRIA
       include 'stack.h'
 c     
       integer top0,op
-      double precision  e1,e2,e1r,e2r,e1i,e2i
-      integer less,great,equal
-
-      integer isanan
+      integer less,great,equal,cmp,comparehandles
       integer iadr,sadr
       data less/59/,great/60/,equal/50/
 c     
@@ -1269,11 +1280,11 @@ c     .  eye op b
             lstk(top+1)=sadr(il1+4)
             return
          endif
+         
          do 132 i=0,mn1-1
-            e1=stk(l1+i)
-            e2=stk(l2+i)
-            if((op.eq.equal.and.e1.eq.e2).or.
-     $           (op.eq.less+great.and. e1.ne.e2)) then
+            cmp=comparehandles(stk(l1+i),stk(l2+i))
+            if((op.eq.equal.and.cmp.eq.1).or.
+     $           (op.eq.less+great.and. cmp.eq.0)) then
                istk(il1+3+i)=1
             else
                istk(il1+3+i)=0