/*****************************************************************************
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"
#undef DEBUG
static int THD_rename_dataset_files( char * , char * , int ) ;
int main( int argc , char * argv[] )
{
int nopt=1 , old_view , new_view , vbot,vtop ;
char * old_name , * new_name ;
char old_prefix[THD_MAX_PREFIX] , new_prefix[THD_MAX_PREFIX] ;
int ii , old_len , new_len ;
if( argc != 3 || strcmp(argv[1],"-help") == 0 ){
printf(
"Usage 1: 3drename old_prefix new_prefix\n"
" Will rename all datasets using the old_prefix to use the new_prefix;\n"
" 3drename fred ethel\n"
" will change fred+orig.HEAD to ethel+orig.HEAD\n"
" fred+orig.BRIK to ethel+orig.BRIK\n"
" fred+tlrc.HEAD to ethel+tlrc.HEAD\n"
" fred+tlrc.BRIK.gz to ethel+tlrc.BRIK.gz\n"
"\n"
"Usage 2: 3drename old_prefix+view new_prefix\n"
" Will rename only the dataset with the given view (orig, acpc, tlrc).\n"
) ;
exit(0) ;
}
machdep() ;
/* input arguments */
old_name = argv[nopt++] ; old_len = strlen(old_name) ;
new_name = argv[nopt++] ; new_len = strlen(new_name) ;
if( old_len < 1 || old_len > THD_MAX_PREFIX || !THD_filename_pure(old_name) ){
fprintf(stderr,"** Illegal old dataset name!\n") ; exit(1) ;
}
if( new_len < 1 || new_len > THD_MAX_PREFIX || !THD_filename_pure(new_name) ){
fprintf(stderr,"** Illegal new dataset name!\n") ; exit(1) ;
}
/* disallow operation on MINC or ANALYZE files */
if( STRING_HAS_SUFFIX(old_name,".mnc") ){
fprintf(stderr,"** Old dataset name can't be a MINC file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(new_name,".mnc") ){
fprintf(stderr,"** New dataset name can't be a MINC file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(old_name,".hdr") ){
fprintf(stderr,"** Old dataset name can't be an ANALYZE file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(new_name,".hdr") ){
fprintf(stderr,"** New dataset name can't be an ANALYZE file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(old_name,".svl") ){
fprintf(stderr,"** Old dataset name can't be an CTF-SAM file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(new_name,".svl") ){
fprintf(stderr,"** New dataset name can't be an CTF-SAM file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(old_name,".nii") || STRING_HAS_SUFFIX(old_name,".nii.gz") ){
fprintf(stderr,"** Old dataset name can't be a NIfTI-1 file!\n"); exit(1);
}
if( STRING_HAS_SUFFIX(new_name,".nii") || STRING_HAS_SUFFIX(old_name,".nii.gz") ){
fprintf(stderr,"** New dataset name can't be a NIfTI-1 file!\n"); exit(1);
}
/* check old_name for a +view suffix somewhere */
MCW_strncpy(old_prefix,old_name,THD_MAX_PREFIX) ;
if( strstr(old_name,"+") == NULL ){
old_view = ILLEGAL_TYPE ; /* no +view ==> do all views */
} else {
char * qq ;
for( qq=old_name+old_len ; *qq != '+' ; qq-- ) ; /* find last '+' */
qq++ ; /* point to view */
for( old_view=0 ; old_view <= LAST_VIEW_TYPE ; old_view++ )
if( strncmp(qq,VIEW_codestr[old_view],
strlen(VIEW_codestr[old_view])) == 0 ) break ;
if( old_view > LAST_VIEW_TYPE ){
old_view = ILLEGAL_TYPE ; /* the '+' is a fake! */
} else {
old_prefix[ (qq-old_name)-1 ] = '\0' ; /* truncate prefix */
}
}
#ifdef DEBUG
fprintf(stderr,"++ old_view = %d\n",old_view) ;
#endif
/* check new_name for a +view suffix, also */
MCW_strncpy(new_prefix,new_name,THD_MAX_PREFIX) ;
if( strstr(new_name,"+") == NULL ){
new_view = ILLEGAL_TYPE ; /* no +view */
} else {
char * qq ;
for( qq=new_name+new_len ; *qq != '+' ; qq-- ) ; /* find last '+' */
qq++ ; /* point to view */
for( new_view=0 ; new_view <= LAST_VIEW_TYPE ; new_view++ )
if( strncmp(qq,VIEW_codestr[new_view],
strlen(VIEW_codestr[new_view])) == 0 ) break ;
if( new_view > LAST_VIEW_TYPE ){
new_view = ILLEGAL_TYPE ; /* the '+' is a fake! */
} else {
new_prefix[ (qq-new_name)-1 ] = '\0' ; /* truncate prefix */
}
}
#ifdef DEBUG
fprintf(stderr,"++ new_view = %d\n",new_view) ;
#endif
/* of course, we don't actually use the +view suffix on the output */
if( new_view >= 0 ){
fprintf(stderr,"++ Warning: ignoring +%s on new_prefix.\n",
VIEW_codestr[new_view]) ;
new_view = ILLEGAL_TYPE ;
}
if( old_view >= 0 ){
vbot = vtop = old_view ;
} else {
vbot = 0 ; vtop = LAST_VIEW_TYPE ;
}
for( ii=vbot ; ii <= vtop ; ii++ )
(void) THD_rename_dataset_files( old_prefix , new_prefix , ii ) ;
exit(0) ;
}
/*------------------------------------------------------------------------*/
int THD_rename_dataset_files( char * old_prefix , char * new_prefix , int view )
{
char old_headname[THD_MAX_NAME] , old_brikname[THD_MAX_NAME] ;
char new_headname[THD_MAX_NAME] , new_brikname[THD_MAX_NAME] ;
char * old_bname=NULL ;
int brick_ccode , val ;
if( old_prefix == NULL || old_prefix[0] == '\0' ||
new_prefix == NULL || new_prefix[0] == '\0' ||
view < 0 || view > LAST_VIEW_TYPE ){
fprintf(stderr,"** THD_rename_dataset_files: illegal inputs!\n") ;
return 0 ;
}
#ifdef DEBUG
fprintf(stderr,"++ THD_rename_dataset_files: %s %s %d\n",old_prefix,new_prefix,view);
#endif
/*-- create the old .HEAD filename --*/
sprintf( old_headname , "%s+%s.%s" ,
old_prefix , VIEW_codestr[view] , DATASET_HEADER_SUFFIX ) ;
#ifdef DEBUG
fprintf(stderr,"++ THD_rename_dataset_files: old_headname=%s\n",old_headname) ;
#endif
if( !THD_is_file(old_headname) ){
fprintf(stderr,"** THD_rename_dataset_files: old header %s doesn't exist!\n",
old_headname) ;
return 0 ;
}
/*-- create the new .HEAD filename --*/
sprintf( new_headname , "%s+%s.%s" ,
new_prefix , VIEW_codestr[view] , DATASET_HEADER_SUFFIX ) ;
#ifdef DEBUG
fprintf(stderr,"++ THD_rename_dataset_files: new_headname=%s\n",new_headname) ;
#endif
if( THD_is_file(new_headname) ){
fprintf(stderr,"** THD_rename_dataset_files: new header %s already exists!\n",
new_headname) ;
return 0 ;
}
/*-- create the old .BRIK filename --*/
sprintf( old_brikname , "%s+%s.%s" ,
old_prefix , VIEW_codestr[view] , DATASET_BRICK_SUFFIX ) ;
#ifdef DEBUG
fprintf(stderr,"++ THD_rename_dataset_files: old_brikname=%s\n",old_brikname) ;
#endif
/*-- however, the .BRIK might have a compression suffix on it,
which affects both its old name and its new name --*/
brick_ccode = COMPRESS_filecode(old_brikname) ;
if( brick_ccode == COMPRESS_NOFILE ){
fprintf(stderr,"++ THD_rename_dataset_files: old brick %s doesn't exist.\n",
old_brikname) ;
new_brikname[0] = '\0' ; /* flag to do nothing */
} else {
old_bname = COMPRESS_filename( old_brikname ) ;
if( old_bname == NULL ){ /* should not happen */
fprintf(stderr,"** THD_rename_dataset_files: COMPRESS_filename fails!\n") ;
return 0 ;
}
sprintf( new_brikname , "%s+%s.%s" ,
new_prefix , VIEW_codestr[view] , DATASET_BRICK_SUFFIX ) ;
if( brick_ccode >= 0 )
strcat(new_brikname,COMPRESS_suffix[brick_ccode]) ;
#ifdef DEBUG
fprintf(stderr,"++ THD_rename_dataset_files: new_brikname=%s\n",new_brikname) ;
#endif
if( THD_is_file(new_brikname) ){
fprintf(stderr,"** THD_rename_dataset_files: new brick %s already exists!\n",
new_brikname) ;
if( old_bname != NULL ) free(old_bname) ;
return 0 ;
}
}
/*-- actually do the renaming --*/
fprintf(stderr,"++ THD_rename_dataset_files: rename %s -> %s\n",
old_headname,new_headname) ;
val = rename( old_headname , new_headname ) ;
if( val != 0 ){
perror("** THD_rename_dataset_files: rename() failed") ;
if( old_bname != NULL ) free(old_bname) ;
return 0 ;
}
if( new_brikname[0] != '\0' && old_bname != NULL ){
fprintf(stderr,"++ THD_rename_dataset_files: rename %s -> %s\n",
old_bname,new_brikname) ;
val = rename( old_bname , new_brikname ) ;
free(old_bname) ;
if( val != 0 ){
perror("** THD_rename_dataset_files: rename() failed") ;
return 0 ;
}
}
return 1 ;
}
syntax highlighted by Code2HTML, v. 0.9.1