static int _real_cpx_objs_ok( QSP_ARG_DECL Data_Obj *real_dp,Data_Obj *cpx_dp, const char *funcname ) { if( ! IS_COMPLEX(cpx_dp) ){ sprintf(ERROR_STRING, "%s: %s must be complex",funcname,OBJ_NAME(cpx_dp)); WARN(ERROR_STRING); return FALSE; } if( ! IS_REAL(real_dp) ){ sprintf(ERROR_STRING, "%s: %s must be real",funcname,OBJ_NAME(real_dp)); WARN(ERROR_STRING); return FALSE; } if( ! FLOATING_OBJ( cpx_dp ) ){ sprintf(ERROR_STRING, "%s: precision must be float or double",funcname); WARN(ERROR_STRING); return FALSE; } if( !dp_same_mach_prec(cpx_dp,real_dp,funcname) ){ sprintf(ERROR_STRING, "%s: complex object (%s,%s) and target (%s,%s) must have same precision", funcname,OBJ_NAME(cpx_dp),OBJ_MACH_PREC_NAME(cpx_dp), OBJ_NAME(real_dp),OBJ_MACH_PREC_NAME(real_dp)); WARN(ERROR_STRING); return FALSE; } return TRUE; }
int prodimg(QSP_ARG_DECL Data_Obj *dpto,Data_Obj *rowobj,Data_Obj *colobj) /** make the product image */ { Vec_Obj_Args oa1, *oap=&oa1; if( OBJ_COLS(rowobj) != OBJ_COLS(dpto) ){ sprintf(DEFAULT_ERROR_STRING, "prodimg: row size mismatch, target %s (%d) and row %s (%d)", OBJ_NAME(dpto),OBJ_COLS(dpto),OBJ_NAME(rowobj), OBJ_COLS(rowobj)); NWARN(DEFAULT_ERROR_STRING); return(-1); } else if( OBJ_ROWS(colobj) != OBJ_ROWS(dpto) ){ sprintf(DEFAULT_ERROR_STRING, "prodimg: column size mismatch, target %s (%d) and column %s (%d)", OBJ_NAME(dpto),OBJ_ROWS(dpto),OBJ_NAME(colobj), OBJ_ROWS(colobj)); NWARN(DEFAULT_ERROR_STRING); return(-1); } else if( !same_pixel_type(QSP_ARG dpto,rowobj) ){ NWARN("type/precision mismatch"); return(-1); } else if( !same_pixel_type(QSP_ARG dpto,colobj) ){ NWARN("type precision mismatch"); return(-1); } #ifdef FOOBAR else if( ! FLOATING_OBJ(dpto) ){ NWARN("sorry, only float and double supported for prodimg"); return(-1); } else if( IS_COMPLEX(dpto) || IS_COMPLEX(colobj) || IS_COMPLEX(rowobj) ){ NWARN("Sorry, complex not supported"); return(-1); } #endif /* FOOBAR */ setvarg3(oap,dpto,rowobj,colobj); vmul(QSP_ARG oap); return(0); }