Doxygen Source Code Documentation
thd_sarr.c File Reference
#include "mrilib.h"
#include "thd.h"
Go to the source code of this file.
Functions | |
int | SARR_find_string (THD_string_array *sar, char *str) |
int | SARR_find_substring (THD_string_array *sar, char *str) |
int | SARR_lookfor_string (THD_string_array *sar, char *str, int nstart) |
int | SARR_lookfor_substring (THD_string_array *sar, char *sub, int nstart) |
THD_string_array * | THD_get_all_filenames (char *dirname) |
THD_string_array * | THD_get_all_subdirs (int lev, char *dirname) |
THD_string_array * | THD_extract_regular_files (THD_string_array *star_in) |
THD_string_array * | THD_extract_directories (THD_string_array *star_in) |
THD_string_array * | THD_normalize_flist (THD_string_array *star_in) |
THD_string_array * | THD_get_wildcard_filenames (char *pat) |
Function Documentation
|
Definition at line 19 of file thd_sarr.c. References SARR_lookfor_string().
00020 { 00021 return SARR_lookfor_string( sar , str , 0 ) ; 00022 } |
|
Definition at line 24 of file thd_sarr.c. References SARR_lookfor_substring().
00025 { 00026 return SARR_lookfor_substring( sar , str , 0 ) ; 00027 } |
|
Definition at line 29 of file thd_sarr.c. References THD_string_array::ar, and THD_string_array::num. Referenced by SARR_find_string(), and THD_normalize_flist().
|
|
Definition at line 42 of file thd_sarr.c. References THD_string_array::ar, and THD_string_array::num. Referenced by SARR_find_substring(), and THD_init_prefix_datablocks().
|
|
Definition at line 236 of file thd_sarr.c. References ADDTO_SARR, THD_string_array::ar, DESTROY_SARR, INIT_SARR, THD_string_array::num, and THD_is_directory(). Referenced by THD_get_all_subdirs().
00237 { 00238 THD_string_array * star_out ; 00239 int ii ; 00240 00241 if( star_in == NULL || star_in->num <= 0 ) return NULL ; 00242 00243 INIT_SARR(star_out) ; 00244 00245 for( ii=0 ; ii < star_in->num ; ii++ ){ 00246 if( THD_is_directory(star_in->ar[ii]) ) 00247 ADDTO_SARR( star_out , star_in->ar[ii] ) ; 00248 } 00249 00250 if( star_out->num == 0 ) DESTROY_SARR(star_out) ; 00251 return star_out ; 00252 } |
|
must want deeper levels * Definition at line 213 of file thd_sarr.c. References ADDTO_SARR, THD_string_array::ar, DESTROY_SARR, INIT_SARR, THD_string_array::num, and THD_is_file(). Referenced by NLFIT_get_all_MODELs(), PLUG_get_all_plugins(), THD_get_all_executables(), THD_get_all_timeseries(), and THD_init_alldir_datablocks().
00214 { 00215 THD_string_array * star_out ; 00216 int ii ; 00217 00218 if( star_in == NULL || star_in->num <= 0 ) return NULL ; 00219 00220 INIT_SARR(star_out) ; 00221 00222 for( ii=0 ; ii < star_in->num ; ii++ ){ 00223 if( THD_is_file(star_in->ar[ii]) ) 00224 ADDTO_SARR( star_out , star_in->ar[ii] ) ; 00225 } 00226 00227 if( star_out->num == 0 ) DESTROY_SARR(star_out) ; 00228 return star_out ; 00229 } |
|
Definition at line 75 of file thd_sarr.c. References ADDTO_SARR, AFREALL, ENTRY, free, INIT_SARR, MCW_file_expand(), MCW_free_expand(), MCW_warn_expand(), myXtFree, RETURN, STATUS, THD_is_directory(), and XtMalloc. Referenced by NLFIT_get_all_MODELs(), PLUG_get_all_plugins(), THD_get_all_executables(), THD_get_all_subdirs(), THD_get_all_timeseries(), and THD_init_alldir_datablocks().
00076 { 00077 #ifndef DONT_USE_SCANDIR 00078 struct dirent ** dplist=NULL ; 00079 #endif 00080 int nfiles , dlen , ii , n_fname , max_fname ; 00081 THD_string_array * star ; 00082 char * total_dirname , * total_fname ; 00083 char ** gname=NULL ; 00084 00085 ENTRY("THD_get_all_filenames") ; 00086 00087 if( dirname == NULL || (dlen=strlen(dirname)) == 0 ) RETURN( NULL ); 00088 if( ! THD_is_directory(dirname) ) RETURN( NULL ); 00089 00090 total_dirname = (char*)XtMalloc( dlen+4 ) ; 00091 strcpy( total_dirname , dirname ) ; 00092 if( total_dirname[dlen-1] != '/' ){ 00093 total_dirname[dlen] = '/' ; /* add a slash */ 00094 total_dirname[++dlen] = '\0' ; 00095 } 00096 00097 #ifdef DONT_USE_SCANDIR 00098 total_dirname[dlen] = '*' ; /* add wildcard */ 00099 total_dirname[++dlen] = '\0' ; 00100 MCW_warn_expand(0) ; 00101 if(PRINT_TRACING){ 00102 char str[256]; sprintf(str,"MCW_file_expand(%s)",total_dirname); STATUS(str); 00103 } 00104 MCW_file_expand( 1, &total_dirname, &nfiles, &gname ) ; /* find files */ 00105 #else 00106 nfiles = scandir( dirname , 00107 &dplist , 00108 THD_select_dirent , 00109 alphasort ) ; 00110 #endif 00111 00112 if( nfiles < 1 ){ 00113 myXtFree( total_dirname ) ; 00114 #ifdef DONT_USE_SCANDIR 00115 if( gname != NULL ) free(gname) ; 00116 #else 00117 if( dplist != NULL ) free(dplist) ; 00118 #endif 00119 RETURN( NULL ); 00120 } 00121 00122 INIT_SARR( star ) ; 00123 00124 #ifndef DONT_USE_SCANDIR 00125 max_fname = dlen+64 ; 00126 total_fname = (char*)XtMalloc( max_fname ) ; 00127 #endif 00128 00129 for( ii=0 ; ii < nfiles ; ii++ ){ 00130 #ifdef DONT_USE_SCANDIR 00131 ADDTO_SARR( star , gname[ii] ) ; 00132 #else 00133 n_fname = dlen + strlen( dplist[ii]->d_name ) + 4 ; 00134 if( n_fname > max_fname ){ 00135 total_fname = AFREALL(total_fname, char, n_fname ) ; 00136 max_fname = n_fname ; 00137 } 00138 strcpy( total_fname , total_dirname ) ; 00139 strcat( total_fname , dplist[ii]->d_name ) ; 00140 ADDTO_SARR( star , total_fname ) ; 00141 free( dplist[ii] ) ; 00142 #endif 00143 } 00144 00145 myXtFree( total_dirname ) ; 00146 #ifdef DONT_USE_SCANDIR 00147 MCW_free_expand( nfiles , gname ) ; 00148 #else 00149 myXtFree( total_fname ) ; 00150 free( dplist ) ; 00151 #endif 00152 RETURN( star ); 00153 } |
|
Definition at line 160 of file thd_sarr.c. References ADDTO_SARR, THD_string_array::ar, DESTROY_SARR, INIT_SARR, myXtFree, THD_string_array::num, THD_extract_directories(), THD_get_all_filenames(), and XtMalloc. Referenced by AFNI_read_inputs().
00161 { 00162 int ii , jj , dlen ; 00163 THD_string_array * star , * flist , * dlist ; 00164 char * total_dirname ; 00165 00166 if( dirname == NULL || (dlen=strlen(dirname)) == 0 ) return NULL ; 00167 00168 total_dirname = (char*)XtMalloc( dlen+2 ) ; 00169 strcpy( total_dirname , dirname ) ; 00170 if( total_dirname[dlen-1] != '/' ){ 00171 total_dirname[dlen] = '/' ; 00172 total_dirname[++dlen] = '\0' ; 00173 } 00174 00175 INIT_SARR( star ) ; 00176 ADDTO_SARR( star , total_dirname ) ; 00177 00178 /** want only this level? **/ 00179 00180 if( lev <= 0 ) return star ; 00181 00182 /** must want deeper levels **/ 00183 00184 flist = THD_get_all_filenames( total_dirname ) ; 00185 myXtFree(total_dirname) ; 00186 00187 if( flist == NULL ) return star ; 00188 if( flist->num == 0 ){ DESTROY_SARR(flist) ; return star ; } 00189 00190 dlist = THD_extract_directories( flist ) ; 00191 DESTROY_SARR(flist) ; 00192 if( dlist == NULL ) return star ; 00193 if( dlist->num == 0 ){ DESTROY_SARR(dlist) ; return star ; } 00194 00195 for( ii=0 ; ii < dlist->num ; ii++ ){ 00196 flist = THD_get_all_subdirs( lev-1 , dlist->ar[ii] ) ; 00197 if( flist == NULL ) continue ; 00198 for( jj=0 ; jj < flist->num ; jj++ ){ 00199 ADDTO_SARR( star , flist->ar[jj] ) ; 00200 } 00201 DESTROY_SARR(flist) ; 00202 } 00203 00204 DESTROY_SARR(dlist) ; 00205 return star ; 00206 } |
|
Definition at line 321 of file thd_sarr.c. References ADDTO_SARR, free, INIT_SARR, MCW_file_expand(), MCW_free_expand(), MCW_warn_expand(), and pat. Referenced by THD_get_all_timeseries().
00322 { 00323 int nfiles , ii ; 00324 THD_string_array * star ; 00325 char ** gname=NULL ; 00326 00327 if( pat == NULL || strlen(pat) == 0 ) return NULL ; 00328 00329 MCW_warn_expand(0) ; 00330 MCW_file_expand( 1, &pat, &nfiles, &gname ) ; /* find files */ 00331 00332 if( nfiles < 1 ){ 00333 if( gname != NULL ) free(gname) ; 00334 return NULL ; 00335 } 00336 00337 INIT_SARR( star ) ; 00338 00339 for( ii=0 ; ii < nfiles ; ii++ ){ 00340 ADDTO_SARR( star , gname[ii] ) ; 00341 } 00342 00343 MCW_free_expand( nfiles , gname ) ; 00344 return star ; 00345 } |
|
Definition at line 260 of file thd_sarr.c. References ADDTO_SARR, AFNI_yesenv(), THD_string_array::ar, DESTROY_SARR, INIT_SARR, THD_string_array::num, REMOVEFROM_SARR, SARR_lookfor_string(), and THD_equiv_files(). Referenced by AFNI_read_inputs().
00261 { 00262 THD_string_array * star_out , * star_qqq ; 00263 static char rpath[2048] ; 00264 char * rp ; 00265 int ii , jj , nleft , skip_realpath=0 ; 00266 00267 if( star_in == NULL || star_in->num <= 0 ) return NULL ; 00268 00269 skip_realpath = AFNI_yesenv("AFNI_NOREALPATH") ; 00270 00271 INIT_SARR(star_out) ; 00272 00273 for( ii=0 ; ii < star_in->num ; ii++ ){ 00274 if( skip_realpath ) rp = star_in->ar[ii] ; 00275 else rp = realpath( star_in->ar[ii] , rpath ) ; 00276 00277 if( rp != NULL ) ADDTO_SARR( star_out , rp ) ; 00278 } 00279 00280 if( star_out->num == 0 ){ DESTROY_SARR(star_out) ; return NULL ; } 00281 00282 nleft = 0 ; 00283 for( ii=0 ; ii < star_out->num ; ii++ ){ 00284 rp = star_out->ar[ii] ; 00285 if( rp != NULL ){ 00286 nleft++ ; jj = ii ; 00287 while( jj >= 0 ){ 00288 jj = SARR_lookfor_string( star_out , rp , jj+1 ) ; 00289 if( jj >= 0 ) REMOVEFROM_SARR(star_out,jj) ; 00290 } 00291 00292 for( jj=ii+1 ; jj < star_out->num ; jj++ ){ 00293 if( THD_equiv_files(rp,star_out->ar[jj]) ) 00294 REMOVEFROM_SARR(star_out,jj) ; 00295 } 00296 } 00297 } 00298 00299 if( nleft == 0 ){ DESTROY_SARR(star_out) ; return NULL ; } 00300 00301 if( nleft == star_out->num ) return star_out ; 00302 00303 INIT_SARR(star_qqq) ; 00304 for( ii=0 ; ii < star_out->num ; ii++ ){ 00305 rp = star_out->ar[ii] ; 00306 if( rp != NULL ) ADDTO_SARR(star_qqq,rp) ; 00307 } 00308 00309 #if 0 00310 fprintf(stderr,"\nTHD_normalize_flist: in=%d out=%d qqq=%d\n", 00311 star_in->num , star_out->num , star_qqq->num ) ; 00312 #endif 00313 00314 DESTROY_SARR(star_out) ; return star_qqq ; 00315 } |