Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

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_arrayTHD_get_all_filenames (char *dirname)
THD_string_arrayTHD_get_all_subdirs (int lev, char *dirname)
THD_string_arrayTHD_extract_regular_files (THD_string_array *star_in)
THD_string_arrayTHD_extract_directories (THD_string_array *star_in)
THD_string_arrayTHD_normalize_flist (THD_string_array *star_in)
THD_string_arrayTHD_get_wildcard_filenames (char *pat)

Function Documentation

int SARR_find_string THD_string_array   sar,
char *    str
 

Definition at line 19 of file thd_sarr.c.

References SARR_lookfor_string().

00020 {
00021    return SARR_lookfor_string( sar , str , 0 ) ;
00022 }

int SARR_find_substring THD_string_array   sar,
char *    str
 

Definition at line 24 of file thd_sarr.c.

References SARR_lookfor_substring().

00025 {
00026    return SARR_lookfor_substring( sar , str , 0 ) ;
00027 }

int SARR_lookfor_string THD_string_array   sar,
char *    str,
int    nstart
 

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().

00030 {
00031    int ii ;
00032 
00033    if( sar == NULL || str == NULL ) return -1 ;
00034 
00035    for( ii=nstart ; ii < sar->num ; ii++ ){
00036       if( sar->ar[ii] != NULL && strcmp(sar->ar[ii],str) == 0 )
00037          return ii ;
00038    }
00039    return -1 ;
00040 }

int SARR_lookfor_substring THD_string_array   sar,
char *    sub,
int    nstart
 

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().

00043 {
00044    int ii ;
00045 
00046    if( sar == NULL || sub == NULL ) return -1 ;
00047 
00048    for( ii=nstart ; ii < sar->num ; ii++ ){
00049       if( sar->ar[ii] != NULL && strstr(sar->ar[ii],sub) != NULL )
00050          return ii ;
00051    }
00052    return -1 ;
00053 }

THD_string_array* THD_extract_directories THD_string_array   star_in
 

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 }

THD_string_array* THD_extract_regular_files THD_string_array   star_in
 

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 }

THD_string_array* THD_get_all_filenames char *    dirname
 

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 }

THD_string_array* THD_get_all_subdirs int    lev,
char *    dirname
 

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 }

THD_string_array* THD_get_wildcard_filenames char *    pat
 

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 }

THD_string_array* THD_normalize_flist THD_string_array   star_in
 

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 }
 

Powered by Plone

This site conforms to the following standards: