/****************************************************************************
* NCSA HDF *
* Software Development Group *
* National Center for Supercomputing Applications *
* University of Illinois at Urbana-Champaign *
* 605 E. Springfield, Champaign IL 61820 *
* *
* For conditions of distribution and use, see the accompanying *
* hdf/COPYING file. *
* *
****************************************************************************/
#include "hdiff.h"
#include "hdiff_list.h"
#include "hdiff_mattbl.h"
/*-------------------------------------------------------------------------
* Function: diff_vs
*
* Purpose: diff for VS
*
* Return: Number of differences found
*
* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu
*
* Date: August 26, 2003
*
*-------------------------------------------------------------------------
*/
int diff_vs( int32 file1_id,
int32 file2_id,
int32 ref1,
int32 ref2,
diff_opt_t * opt)
{
int32 vdata1_id, /* vdata identifier */
n_records1, /* number of records */
vdata1_size,
interlace1_mode,
vdata2_id, /* vdata identifier */
n_records2, /* number of records */
vdata2_size,
interlace2_mode;
char vdata1_name [VSNAMELENMAX];
char vdata1_class[VSNAMELENMAX];
char fieldname1_list[VSFIELDMAX*FIELDNAMELENMAX];
char vdata2_name [VSNAMELENMAX];
char vdata2_class[VSNAMELENMAX];
char fieldname2_list[VSFIELDMAX*FIELDNAMELENMAX];
int ret=0;
/*-------------------------------------------------------------------------
* object 1
*-------------------------------------------------------------------------
*/
if (Vstart (file1_id)==FAIL) {
printf("Error: Could not start VS interface in VS ref %d\n", ref1);
return FAIL;
}
if ((vdata1_id = VSattach (file1_id, ref1, "r")) == FAIL ){
printf( "Failed to attach VS ref %d\n", ref1);
return FAIL;
}
if (VSgetname (vdata1_id, vdata1_name) == FAIL ){
printf( "Failed to name for VS ref %d\n", ref1);
ret=-1;
goto out;
}
if (VSgetclass (vdata1_id, vdata1_class) == FAIL ){
printf( "Failed to name for VS ref %d\n", ref1);
ret=-1;
goto out;
}
if (VSinquire(vdata1_id, &n_records1, &interlace1_mode, fieldname1_list,
&vdata1_size, vdata1_name) == FAIL) {
printf( "Failed to get info for VS ref %d\n", ref1);
ret=-1;
goto out;
}
if (VFnfields(vdata1_id)== FAIL ){
printf( "Failed getting fields forVS ref %d\n", ref1);
ret=-1;
goto out;
}
/*-------------------------------------------------------------------------
* object 2
*-------------------------------------------------------------------------
*/
if (Vstart (file2_id)==FAIL) {
printf("Error: Could not start VS interface in VS ref %d\n", ref1);
return FAIL;
}
if ((vdata2_id = VSattach (file2_id, ref2, "r")) == FAIL ){
printf( "Failed to attach VS ref %d\n", ref2);
ret=-2;
goto out;
}
if (VSgetname (vdata2_id, vdata2_name) == FAIL ){
printf( "Failed to name for VS ref %d\n", ref2);
ret=-2;
goto out;
}
if (VSgetclass (vdata2_id, vdata2_class) == FAIL ){
printf( "Failed to name for VS ref %d\n", ref2);
ret=-2;
goto out;
}
if (VSinquire(vdata2_id, &n_records2, &interlace2_mode, fieldname2_list,
&vdata2_size, vdata2_name) == FAIL) {
printf( "Failed to get info for VS ref %d\n", ref2);
ret=-2;
goto out;
}
if (VFnfields(vdata2_id)== FAIL ){
printf( "Failed getting fields forVS ref %d\n", ref2);
ret=-2;
goto out;
}
/*-------------------------------------------------------------------------
* check for input VSs
*-------------------------------------------------------------------------
*/
if (opt->nuvars > 0) /* if specified vdata is selected */
{
int imatch = 0, j;
for (j = 0; j < opt->nuvars; j++)
{
if (strcmp(vdata1_name, opt->uvars[j]) == 0)
{
imatch = 1;
break;
}
}
if (imatch == 0)
{
goto out;
}
}
/*-------------------------------------------------------------------------
* Comparing
*-------------------------------------------------------------------------
*/
if (opt->verbose)
printf("Comparing <%s>\n",vdata1_name);
ret=vdata_cmp(vdata1_id,vdata2_id,vdata1_name,vdata1_class,opt->max_err_cnt);
out:
/* terminate access to the VSs */
if (VSdetach (vdata1_id)==FAIL) {
printf( "Failed to dettach VS ref %d\n", ref1);
}
if (VSdetach (vdata2_id)==FAIL) {
printf( "Failed to dettach VS ref %d\n", ref2);
}
return ret;
}
syntax highlighted by Code2HTML, v. 0.9.1