Doxygen Source Code Documentation
thd_initdkptr.c File Reference
#include "mrilib.h"
#include "thd.h"
Go to the source code of this file.
Functions | |
void | THD_init_diskptr_names (THD_diskptr *dkptr, char *dirname, char *headname, char *prefixname, int view_type, Boolean do_datafiles) |
Function Documentation
|
Initialize the names inside a diskptr 29 Feb 2001: modified to take directory from prefixname as well as from dirname - RWCox. 12 May 2003: if prefixname starts with '/', then dirname will be ignored - RWCox. ----------------------------------------------------------------- Definition at line 18 of file thd_initdkptr.c. References THD_diskptr::brick_name, DATASET_BRICK_SUFFIX, DATASET_HEADER_SUFFIX, THD_diskptr::directory_name, ENTRY, THD_diskptr::filecode, FIRST_VIEW_TYPE, THD_diskptr::header_name, ISVALID_DISKPTR, LAST_VIEW_TYPE, MCW_strncpy, THD_diskptr::prefix, PREFIX_VIEW_TO_FILECODE, THD_MAX_NAME, THD_MAX_PREFIX, THD_MAX_VIEWCODE, and THD_diskptr::viewcode. Referenced by adwarp_follower_dataset(), AFNI_follower_dataset(), AFNI_init_warp(), duplicate_dataset(), EDIT_dset_items(), EDIT_empty_copy(), EDIT_empty_datablock(), main(), r_new_resam_dset(), THD_datablock_from_atr(), and THD_write_3dim_dataset().
00022 { 00023 int ii ; 00024 Boolean redo_filecode = False ; 00025 char dname[THD_MAX_NAME]="\0" , pname[THD_MAX_PREFIX]="\0" ; /* 29 Feb 2001 */ 00026 00027 ENTRY("THD_init_diskptr_names") ; 00028 00029 if( ! ISVALID_DISKPTR(dkptr) ) EXRETURN ; 00030 00031 /* 29 Feb 2001: put dirname and any directories in prefixname together */ 00032 00033 if( dirname != NULL && (ii=strlen(dirname)) > 0 ){ 00034 MCW_strncpy(dname,dirname,THD_MAX_NAME-2) ; 00035 if( dname[ii-1] != '/' ){ dname[ii] = '/'; dname[ii+1] = '\0'; } 00036 } 00037 00038 if( prefixname != NULL ){ 00039 if( strstr(prefixname,"/") != NULL ){ 00040 int lp = strlen(prefixname) , jj , ld ; 00041 for( ii=lp-1 ; ii >= 0 && prefixname[ii] != '/' ; ii-- ) ; /* find last '/' */ 00042 if( ii >= 0 ){ /* should always be true */ 00043 ld = strlen(dname) ; if( prefixname[0] == '/' ) ld = 0 ; 00044 memcpy(dname+ld,prefixname,ii+1) ; dname[ld+ii+1] = '\0' ; 00045 MCW_strncpy(pname,prefixname+ii+1,THD_MAX_PREFIX) ; 00046 } else { 00047 MCW_strncpy(pname,prefixname,THD_MAX_PREFIX) ; /* should never transpire */ 00048 } 00049 } else { 00050 MCW_strncpy(pname,prefixname,THD_MAX_PREFIX) ; 00051 } 00052 } 00053 00054 /*-- rewrite directory name? --*/ 00055 00056 if( (ii=strlen(dname)) > 0 ){ 00057 MCW_strncpy( dkptr->directory_name , dname , THD_MAX_NAME ) ; 00058 if( dkptr->directory_name[ii-1] != '/' ){ 00059 dkptr->directory_name[ii] = '/' ; 00060 dkptr->directory_name[ii+1] = '\0' ; 00061 } 00062 } 00063 00064 /*-- rewrite viewcode? --*/ 00065 00066 if( view_type >= FIRST_VIEW_TYPE && view_type <= LAST_VIEW_TYPE ){ 00067 MCW_strncpy( dkptr->viewcode , VIEW_codestr[view_type] , THD_MAX_VIEWCODE ) ; 00068 redo_filecode = True ; 00069 } 00070 00071 /*-- rewrite prefix? --*/ 00072 00073 if( strlen(pname) > 0 ){ 00074 MCW_strncpy( dkptr->prefix , pname , THD_MAX_PREFIX ) ; 00075 redo_filecode = True ; 00076 } 00077 00078 /*-- if either viewcode or prefix changed, alter filecode --*/ 00079 00080 if( redo_filecode ){ 00081 PREFIX_VIEW_TO_FILECODE( dkptr->prefix, dkptr->viewcode, dkptr->filecode ) ; 00082 } 00083 00084 /*-- rewrite header_name --*/ 00085 00086 if( headname != NULL && strlen(headname) > 0 ){ 00087 MCW_strncpy( dkptr->header_name , headname , THD_MAX_NAME ) ; 00088 } else { 00089 sprintf( dkptr->header_name , "%s%s.%s" , 00090 dkptr->directory_name,dkptr->filecode,DATASET_HEADER_SUFFIX ) ; 00091 } 00092 00093 /*-- if desired, create the datafile names as well --*/ 00094 00095 if( do_datafiles ){ 00096 00097 sprintf( dkptr->brick_name , "%s%s.%s", 00098 dkptr->directory_name,dkptr->filecode,DATASET_BRICK_SUFFIX ) ; 00099 00100 } 00101 EXRETURN ; 00102 } |