/*--------------------------------------------------------------------------*/ int get_rect_arg(char *fname,int pos,rhs_opts opts[], double ** rect ) { int m,n,l,first_opt=FirstOpt(),kopt,i; if (pos < first_opt) { if (VarType(pos)) { GetRhsVar(pos,MATRIX_OF_DOUBLE_DATATYPE, &m, &n, &l); if (m * n != 4) { Scierror(999,"%s: Wrong size for input argument #%d: %d expected\n",fname,pos,4); return 0; } *rect = stk(l); for(i=0;i<4;i++) if(finite((*rect)[i]) == 0){ Scierror(999,"%s: Wrong values (Nan or Inf) for input argument: %d finite values expected\n",fname,4); return 0; } } else { /** global value can be modified **/ double zeros[4] = { 0.0, 0.0, 0.0, 0.0 } ; setDefRect( zeros ) ; *rect = getDefRect() ; } } else if ((kopt=FindOpt("rect",opts))) {/* named argument: rect=value */ GetRhsVar(kopt,MATRIX_OF_DOUBLE_DATATYPE, &m, &n, &l); if (m * n != 4) { Scierror(999,"%s: Wrong size for input argument #%d: %d expected\n",fname,kopt,4); return 0; } *rect = stk(l); for(i=0;i<4;i++) if(finite((*rect)[i]) == 0){ Scierror(999,"%s: Wrong values (Nan or Inf) for input argument: %d finite values expected\n",fname,4); return 0; } } else { /** global value can be modified **/ double zeros[4] = { 0.0, 0.0, 0.0, 0.0 } ; setDefRect( zeros ) ; *rect = getDefRect() ; } return 1; }
/*--------------------------------------------------------------------------*/ int get_rect_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], double ** rect) { int m, n, first_opt = FirstOpt(_pvCtx), kopt, i; if (pos < first_opt) { int* piAddr = 0; int iType = 0; double* pdblData = NULL; getVarAddressFromPosition(_pvCtx, pos, &piAddr); getVarType(_pvCtx, piAddr, &iType); if (iType) { getMatrixOfDouble(_pvCtx, piAddr, &m, &n, &pdblData); if (m * n != 4) { Scierror(999, "%s: Wrong size for input argument #%d: %d expected\n", fname, pos, 4); return 0; } *rect = pdblData; for (i = 0; i < 4; i++) { if (finite((*rect)[i]) == 0) { Scierror(999, "%s: Wrong values (Nan or Inf) for input argument: %d finite values expected\n", fname, 4); return 0; } } } else { /** global value can be modified **/ double zeros[4] = { 0.0, 0.0, 0.0, 0.0 }; setDefRect(zeros); *rect = getDefRect(); } } else if ((kopt = FindOpt(_pvCtx, "rect", opts)) >= 0) /* named argument: rect=value */ { double* pdblData = NULL; getMatrixOfDouble(_pvCtx, opts[kopt].piAddr, &m, &n, &pdblData); if (m * n != 4) { Scierror(999, "%s: Wrong size for input argument #%d: %d expected\n", fname, kopt, 4); return 0; } *rect = pdblData; for (i = 0; i < 4; i++) { if (finite((*rect)[i]) == 0) { Scierror(999, "%s: Wrong values (Nan or Inf) for input argument: %d finite values expected\n", fname, 4); return 0; } } } else { /** global value can be modified **/ double zeros[4] = { 0.0, 0.0, 0.0, 0.0 }; setDefRect(zeros); *rect = getDefRect(); } return 1; }