c Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
c Copyright (C) 1985-2008 - INRIA - Carlos KLIMANN
c
c This file must be used under the terms of the CeCILL.
c This source file is licensed as described in the file COPYING, which
c you should have received as part of this distribution.  The terms
c are also available at
c http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
      subroutine dimin(lig1,col1,v1,d1,v2,d2,lig2,col2,ligr,colr,ierr)
c!but
c
c     Cette subroutine donne les dimensions (lignes, colonnes) de
c     la  matrice  qui resulte de l'insertion  d'une
c     matrice  de polynomes mat2 (ou strings) dans une autre mat1
c     d'apres deux vecteurs donnes.
c
c!parametres d'appel
c
c     call dimin(lig1,col1,v1,d1,v2,d2,lig2,col2,ligr,colr,ierr)
c
c     ou
c
c     lig1, col1: entiers, dimensions de mat1
c
c     v1: vecteur entier
c
c     d1: longueur du vecteur v1, s'il est positif doit etre egal
c         a lig2.
c
c     v2, d2: analogues aux anterieurs, si d2 est positif doit etre
c             egal a col2.
c
c     Note: si d1 (ou d2 ou les deux sont negatifs, ca signifie
c           qu'on prendra toutes les colonnes (ou lignes) de
c           mat1.
c
c     lig2, col2: analogues aux correspondents 1
c
c     ligr, colr: parametres de sortie, matrice r et
c     autres valeurs relationnes.
c
c     ierr: si 0 terminaison correcte,
c           si 1 un des vecteurs v1 ou v2 a une longueur nulle,
c           si 2 mauvaises dimensions de mat2
c
c
c!
      integer v1(*),v2(*)
      integer lig1,col1,d1,d2,lig2,col2,ligr,colr,ierr
      integer noo1,noo2
c
c     ========================================
c
c     cas ou l'un des deux vecteurs v1 ou v2 est
c     de dimension nulle
c
c     ========================================
c
      if (d1.eq.0.or.d2.eq.0)then
c     erreur pour un des vecteurs de dimensions nulles
      ierr=1
      return
      endif
c
c     ========================================
c
c     cas ou d1 ou d2 sont negatifs
c
c     ========================================
c
      if(d1.gt.0.and.d2.gt.0)goto 05
      if(d1.lt.0.and.d2.lt.0) then
      if(lig1.ne.lig2.or.col1.ne.col2) then
c     erreur pour mauvaises dimensions de mat2
      ierr=2
      return
      endif
      ligr=lig1
      colr=col1
      goto 999
      endif
c
c     ========================================
c
c     cas du premier vecteur a dimension negative
c
c     ========================================
c
      if(d1.lt.0) then
c     determination de noo2
      noo2=0
      do 06 i=1,d2
      if(v2(i).gt.noo2)noo2=v2(i)
06    continue
c     dimensions de r
      ligr=max(lig1,1)
      colr=max(col1,noo2)
      go to 999
      endif
c
c     ========================================
c
c     cas ou les dimensions du deuxieme vecteur sont negatives
c
c     ========================================
c
      if(d2.lt.0) then
c     determination de noo1
      noo1=0
      do 09 i=1,d1
      if(v1(i).gt.noo1)noo1=v1(i)
09    continue
c     dimensions de r
      ligr=max(lig1,noo1)
      colr=max(col1,1)
      goto 999
      endif
c
c     ========================================
c
c     cas general - ou les dimensions de deux vecteurs sont positives
c
c     ========================================
c
c     determination des dimensions correctes
05    if(d1.ne.lig2.or.d2.ne.col2)then
      ierr=2
      return
      endif
c     determination de noo1 et noo2
      noo1=0
      do 01 i=1,d1
      if(v1(i).gt.noo1)noo1=v1(i)
01    continue
      noo2=0
      do 02 i=1,d2
      if(v2(i).gt.noo2)noo2=v2(i)
02    continue
c     dimensions de r
      ligr=max(lig1,noo1)
      colr=max(col1,noo2)
999   ierr=0
      return
      end
