/*****************************************************************************
   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