/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "mrilib.h"
/*---------------------------------------------------------------------
Routine to make a copy of a dataset, with data attached.
-----------------------------------------------------------------------*/
THD_3dim_dataset * EDIT_full_copy( THD_3dim_dataset *dset , char *new_prefix )
{
THD_3dim_dataset *new_dset ;
int ival , ityp , nbytes , nvals ;
void *new_brick , *old_brick ;
ENTRY("EDIT_full_copy") ;
/*-- sanity check --*/
if( ! ISVALID_3DIM_DATASET(dset) ) RETURN(NULL) ;
/*-- make the empty copy --*/
new_dset = EDIT_empty_copy( dset ) ; /* copy is set to MALLOC memory */
/*-- change its name? --*/
if( new_prefix != NULL )
EDIT_dset_items( new_dset ,
ADN_prefix , new_prefix ,
ADN_label1 , new_prefix ,
ADN_none ) ;
/*-- make brick(s) for this dataset --*/
THD_load_datablock( dset->dblk ) ; /* make sure old one is in memory */
nvals = DSET_NVALS(dset) ;
for( ival=0 ; ival < nvals ; ival++ ){
ityp = DSET_BRICK_TYPE(new_dset,ival) ; /* type of data */
nbytes = DSET_BRICK_BYTES(new_dset,ival) ; /* how much data */
new_brick = malloc( nbytes ) ; /* make room */
if( new_brick == NULL ){
THD_delete_3dim_dataset( new_dset , False ) ;
RETURN(NULL) ;
}
EDIT_substitute_brick( new_dset , ival , ityp , new_brick ) ;
/*-- copy data from old brick to new brick --*/
old_brick = DSET_BRICK_ARRAY(dset,ival) ;
if( old_brick == NULL ){
THD_delete_3dim_dataset( new_dset , False ) ;
RETURN(NULL) ;
}
memcpy( new_brick , old_brick , nbytes ) ;
}
RETURN( new_dset );
}
syntax highlighted by Code2HTML, v. 0.9.1