1 /*****************************************************************************
2    Major portions of this software are copyrighted by the Medical College
3    of Wisconsin, 1994-2000, and are released under the Gnu General Public
4    License, Version 2.  See the file README.Copyright for details.
5 ******************************************************************************/
6 
7 #include "mrilib.h"
8 #include "thd.h"
9 
10 /*----------------------------------------------------------------------
11    given a directory name, create datablocks from all entries possible.
12    return an array of datablock arrays
13 ------------------------------------------------------------------------*/
14 
THD_init_alldir_datablocks(char * dirname)15 RwcPointer_array * THD_init_alldir_datablocks( char * dirname )
16 {
17    RwcPointer_array     * super_array ;
18    THD_datablock_array * dblk_arr ;
19    THD_string_array    * flist , * rlist ;
20    char prefix[THD_MAX_NAME] ;
21    char * fname ;
22    int ifile ;
23 
24    /* initialize answer */
25 
26    INIT_XTARR( super_array ) ;
27 
28    /* get list of all regular files in the directory */
29 
30    flist = THD_get_all_filenames( dirname ) ;
31    if( flist == NULL || flist->num <= 0 ){
32       DESTROY_SARR(flist) ;
33       return super_array ;
34    }
35 
36    rlist = THD_extract_regular_files( flist ) ;
37    DESTROY_SARR(flist) ;
38    if( rlist == NULL || rlist->num <= 0 ){
39       DESTROY_SARR(rlist) ;
40       return super_array ;
41    }
42 
43    /* for each header/prefix combination
44       in the list, try to get all datablocks within */
45 
46    for( ifile=0 ; ifile < rlist->num ; ifile++ ){
47 
48       fname = rlist->ar[ifile] ;
49       if( fname == NULL ||
50           strstr(fname,DATASET_HEADER_SUFFIX) == NULL ) continue ;
51 
52       FILENAME_TO_PREFIX(fname,prefix) ;
53       if( strlen(prefix) == 0 ) continue ;
54 
55       dblk_arr = THD_init_prefix_datablocks( prefix , rlist ) ;
56 
57       if( dblk_arr != NULL && dblk_arr->num > 0 ){
58          ADDTO_XTARR(super_array,dblk_arr) ;       /* store in output */
59       } else {
60          FREE_DBARR(dblk_arr) ;                    /* throw it away */
61       }
62 
63    }
64 
65    /* done! */
66 
67    DESTROY_SARR(rlist) ;
68    return super_array ;
69 }
70