
// Copyright (C) 2010 - DIGITEO - Michael Baudin
//
// This file must be used under the terms of the GNU LGPL license.

function errmsg = Checkdims ( funname , var , varname , ivar , matdims )
  // Generates an error if the variable has not the required size.
  //
  // Calling Sequence
  //   errmsg = Checkdims ( funname , var , varname , ivar , matdims )
  //
  // Parameters
  //   funname : a 1 x 1 matrix of strings, the name of the calling function.
  //   var : a 1 x 1 matrix of valid Scilab data type, the variable
  //   varname : a 1 x 1 matrix of string, the name of the variable
  //   ivar : a 1 x 1 matrix of floating point integers, the index of the input argument in the calling sequence
  //   matdims : 1 x 2 matrix of floating point integers, the number of rows, columns for the variable #ivar
  //   errmsg : a 1 x 1 matrix of strings, the error message. If there was no error, the error message is the empty matrix.
  //
  // Description
  // This function is designed to be used to design functions where 
  // the input argument has a known shape.
  // This function cannot be use when var is a function, or more
  // generally, for any input argument for which the size function
  // does not work.
  //   Last update : 05/08/2010.
  //
  // Examples
  // // The function takes a 2 x 3 matrix of doubles.
  // function y = myfunction ( x )
  //   Checkdims ( "myfunction" , x , "x" , 1 , [2 3] )
  //   y = x
  // endfunction
  // // Calling sequences which work
  // y = myfunction ( ones(2,3) )
  // y = myfunction ( zeros(2,3) )
  // // Calling sequences which generate an error
  // y = myfunction ( ones(1,3) )
  // y = myfunction ( zeros(2,4) )
  //
  // Authors
  //   Michael Baudin - 2010 - DIGITEO
  //

  [lhs,rhs]=argn()
  Checkrhs ( funname , rhs , 5 )
  Checklhs ( funname , lhs , [0 1] )

  errmsg = []
  if ( or ( size(var) <> matdims ) ) then
    strexp = strcat(string(matdims)," ")
    strcomp = strcat(string(size(var))," ")
    errmsg = msprintf(gettext("%s: Expected size [%s] for input argument %s at input #%d, but got [%s] instead."), funname, strexp, varname , ivar , strcomp );
    error(errmsg)
  end
endfunction
