Doxygen Source Code Documentation
NLfit_model.c File Reference
#include "NLfit_model.h"
Go to the source code of this file.
Defines | |
#define | EMPTY_STRING "\0" |
#define | NL_DEBUG 0 |
Functions | |
NLFIT_MODEL_array * | NLFIT_get_all_MODELs (char *dname) |
NLFIT_MODEL * | NLFIT_read_MODEL (char *fname) |
NLFIT_MODEL_array * | NLFIT_get_many_MODELs (void) |
Define Documentation
|
Definition at line 27 of file NLfit_model.c. |
|
Definition at line 28 of file NLfit_model.c. |
Function Documentation
|
Definition at line 37 of file NLfit_model.c. References ADDTO_MODEL_ARRAY, THD_string_array::ar, DESTROY_MODEL_ARRAY, DESTROY_SARR, DYNAMIC_suffix, INIT_MODEL_ARRAY, NLFIT_read_MODEL(), THD_string_array::num, NLFIT_MODEL_array::num, THD_extract_regular_files(), THD_get_all_filenames(), and THD_is_directory(). Referenced by NLFIT_get_many_MODELs().
00038 { 00039 THD_string_array * flist , * rlist ; 00040 int ir , ii ; 00041 char * fname , * suff ; 00042 NLFIT_MODEL_array * outar ; 00043 NLFIT_MODEL * model ; 00044 00045 /*----- sanity check and initialize -----*/ 00046 00047 if( dname == NULL || strlen(dname) == 0 ) return (NULL) ; 00048 if( ! THD_is_directory(dname) ) return (NULL) ; 00049 00050 INIT_MODEL_ARRAY( outar ) ; 00051 00052 if (NL_DEBUG) 00053 { 00054 char str[256] ; 00055 sprintf (str,"scanning directory %s \n",dname) ; 00056 printf (str) ; 00057 } 00058 00059 /*----- find all filenames -----*/ 00060 00061 flist = THD_get_all_filenames( dname ) ; 00062 if( flist == NULL || flist->num <= 0 ){ 00063 DESTROY_SARR(flist) ; 00064 DESTROY_MODEL_ARRAY(outar) ; 00065 return (NULL) ; 00066 } 00067 00068 rlist = THD_extract_regular_files( flist ) ; 00069 DESTROY_SARR(flist) ; 00070 if( rlist == NULL || rlist->num <= 0 ){ 00071 DESTROY_SARR(rlist) ; 00072 DESTROY_MODEL_ARRAY(outar) ; 00073 return (NULL) ; 00074 } 00075 00076 if (NL_DEBUG) 00077 { 00078 char str[256] ; 00079 sprintf(str,"%d files to scan \n",rlist->num) ; 00080 printf (str) ; 00081 } 00082 00083 00084 /*----- scan thru and find all filenames ending in DYNAMIC_suffix -----*/ 00085 00086 for( ir=0 ; ir < rlist->num ; ir++ ){ 00087 fname = rlist->ar[ir] ; if( fname == NULL ) continue ; 00088 if (strstr(fname, "model") == NULL) continue; 00089 00090 suff = strstr(fname,DYNAMIC_suffix) ; 00091 if( suff != NULL && strlen(suff) == strlen(DYNAMIC_suffix)){ 00092 model = NLFIT_read_MODEL( fname ) ; 00093 if( model != NULL ) ADDTO_MODEL_ARRAY( outar , model ) ; 00094 } 00095 } 00096 00097 if (NL_DEBUG) 00098 { 00099 char str[256] ; 00100 sprintf (str,"directory %s has %d MODELs \n",dname,outar->num) ; 00101 printf (str) ; 00102 } 00103 00104 00105 DESTROY_SARR(rlist) ; 00106 if( outar->num == 0 ) DESTROY_MODEL_ARRAY(outar) ; 00107 return (outar) ; 00108 } |
|
Definition at line 211 of file NLfit_model.c. References ADDTO_MODEL_ARRAY, ADDTO_SARR, THD_string_array::ar, DESTROY_MODEL_ARRAY, DESTROY_SARR, FREE_MODEL_ARRAY, INIT_MODEL_ARRAY, INIT_SARR, NLFIT_MODEL_array::modar, my_getenv(), myXtFree, NLFIT_get_all_MODELs(), THD_string_array::num, NLFIT_MODEL_array::num, THD_equiv_files(), THD_is_directory(), THD_MAX_NAME, and XtMalloc. Referenced by get_options(), and PLUGIN_init().
00212 { 00213 char * epath , * elocal , * eee ; 00214 char ename[THD_MAX_NAME] , efake[]="/usr/local/lib/afni:./" ; 00215 NLFIT_MODEL_array * outar , * tmpar ; 00216 int epos , ll , ii , id ; 00217 THD_string_array *qlist ; /* 02 Feb 2002 */ 00218 00219 /*----- sanity checks -----*/ 00220 00221 epath = my_getenv("AFNI_MODELPATH") ; /* get the path list to read from */ 00222 00223 if( epath == NULL ) 00224 epath = my_getenv("AFNI_PLUGINPATH") ; /* try another name? */ 00225 00226 if( epath == NULL ) 00227 epath = my_getenv("PATH") ; /* try another name? */ 00228 00229 if( epath == NULL ) epath = efake ; /* put in a fake path instead? */ 00230 00231 /*----- copy path list into local memory -----*/ 00232 00233 ll = strlen(epath) ; 00234 elocal = (char *) XtMalloc( sizeof(char) * (ll+2) ) ; 00235 00236 /*----- put a blank at the end -----*/ 00237 00238 strcpy( elocal , epath ) ; elocal[ll] = ' ' ; elocal[ll+1] = '\0' ; 00239 00240 /*----- replace colons with blanks -----*/ 00241 00242 for( ii=0 ; ii < ll ; ii++ ) 00243 if( elocal[ii] == ':' ) elocal[ii] = ' ' ; 00244 00245 if (NL_DEBUG) 00246 { 00247 printf ("paths to be searched for MODELs follow:") ; 00248 printf("%s\n",elocal) ; 00249 fflush(stdout) ; 00250 } 00251 00252 00253 INIT_SARR(qlist) ; /* 02 Feb 2002: list of searched directories */ 00254 00255 /*----- extract blank delimited strings; 00256 use as directory names to get libraries -----*/ 00257 00258 INIT_MODEL_ARRAY( outar ) ; 00259 epos = 0 ; 00260 00261 do{ 00262 ii = sscanf( elocal+epos , "%s%n" , ename , &id ) ; /* next substring */ 00263 if( ii < 1 || id < 1 ) break ; /* none --> end of work */ 00264 epos += id ; /* char after last scanned */ 00265 00266 if( !THD_is_directory(ename) ) continue ; /* 21 May 2002 - rcr */ 00267 00268 /* 02 Feb 2002: check if ename has already been checked */ 00269 00270 for( ii=0 ; ii < qlist->num ; ii++ ) 00271 if( THD_equiv_files(qlist->ar[ii],ename) ) break ; 00272 if( ii < qlist->num ) continue ; 00273 ADDTO_SARR(qlist,ename) ; 00274 00275 ii = strlen(ename) ; /* make sure name has */ 00276 if( ename[ii-1] != '/' ){ /* a trailing '/' on it */ 00277 ename[ii] = '/' ; ename[ii+1] = '\0' ; 00278 } 00279 00280 tmpar = NLFIT_get_all_MODELs( ename ) ; /* read this directory */ 00281 if( tmpar != NULL ){ 00282 for( ii=0 ; ii < tmpar->num ; ii++ ) /* move results to output */ 00283 ADDTO_MODEL_ARRAY( outar , tmpar->modar[ii] ) ; 00284 00285 FREE_MODEL_ARRAY(tmpar) ; /* toss temp array */ 00286 } 00287 } while( epos < ll ) ; /* scan until 'epos' is after end of epath */ 00288 00289 myXtFree(elocal) ; 00290 00291 if (NL_DEBUG) 00292 { 00293 char str[256] ; 00294 sprintf (str,"found %d MODELs \n",outar->num) ; 00295 printf (str) ; 00296 } 00297 00298 if( outar->num == 0 ) DESTROY_MODEL_ARRAY(outar) ; 00299 00300 DESTROY_SARR(qlist) ; /* 02 Feb 2002 */ 00301 return (outar) ; 00302 } |
|
Definition at line 116 of file NLfit_model.c. References DYNAMIC_CLOSE, DYNAMIC_ERROR_STRING, DYNAMIC_OPEN, DYNAMIC_SYMBOL, NLFIT_MODEL::interface, ISVALID_DYNAMIC_handle, MODEL_interface::label, NLFIT_MODEL::libhandle, NLFIT_MODEL::libinit_func, NLFIT_MODEL::libname, MAX_MODEL_NAME, MCW_strncpy, myXtFree, NLFIT_MODEL_TYPE, THD_is_file(), NLFIT_MODEL::type, vptr_func, and XtMalloc. Referenced by NLFIT_get_all_MODELs().
00117 { 00118 NLFIT_MODEL * model ; 00119 static int firsterr=1 ; 00120 00121 /*----- sanity checks -----*/ 00122 00123 if( fname == NULL || strlen(fname) == 0 ) return (NULL) ; 00124 if( ! THD_is_file(fname) ) return (NULL) ; 00125 00126 /*----- make space for new MODEL -----*/ 00127 00128 model = (NLFIT_MODEL *) XtMalloc( sizeof(NLFIT_MODEL) ) ; 00129 model->type = NLFIT_MODEL_TYPE ; 00130 00131 /*----- copy name into model structure -----*/ 00132 00133 MCW_strncpy( model->libname , fname , MAX_MODEL_NAME ) ; 00134 00135 /*----- open the library (we hope) -----*/ 00136 00137 DYNAMIC_OPEN( fname , model->libhandle ) ; 00138 if( ! ISVALID_DYNAMIC_handle( model->libhandle ) ){ 00139 char *er ; 00140 if( firsterr ){ fprintf(stderr,"\n"); firsterr=0; } 00141 fprintf (stderr,"failed to open library %s ",fname); 00142 er = (char *)DYNAMIC_ERROR_STRING ; 00143 if( er != NULL ) fprintf(stderr," -- %s\n",er) ; 00144 else fprintf(stderr,"\n") ; 00145 myXtFree(model) ; 00146 return (NULL) ; 00147 } 00148 00149 if (NL_DEBUG) 00150 { 00151 char str[256] ; 00152 sprintf (str,"opened library %s with handle %p \n" , 00153 fname,model->libhandle ) ; 00154 printf (str) ; 00155 } 00156 00157 00158 /*----- find the required symbols -----*/ 00159 /*..... 13 Sep 2001: add _ for Mac OS X [RWCox] .....*/ 00160 /*..... 30 Oct 2003: remove it for OS X 10.3 .....*/ 00161 00162 #ifndef NEED_UNDERSCORE 00163 DYNAMIC_SYMBOL(model->libhandle, "initialize_model" , 00164 model->libinit_func ); 00165 #else 00166 DYNAMIC_SYMBOL(model->libhandle, "_initialize_model" , 00167 model->libinit_func ); 00168 #endif 00169 00170 /*----- if symbols not found, complain and kill this MODEL -----*/ 00171 00172 if( model->libinit_func == (vptr_func *) NULL ){ 00173 char *er = (char *)DYNAMIC_ERROR_STRING ; 00174 if( firsterr ){ fprintf(stderr,"\n"); firsterr=0; } 00175 fprintf(stderr,"model %s lacks initialize_model() function\n",fname) ; 00176 if( er != NULL ) fprintf(stderr," -- %s\n",er) ; 00177 DYNAMIC_CLOSE( model->libhandle ) ; 00178 myXtFree(model) ; 00179 return (NULL) ; 00180 } 00181 00182 /*----- create interface(s) by calling initialization function -----*/ 00183 00184 model->interface = (MODEL_interface *) model->libinit_func() ; 00185 if( model->interface == NULL ) 00186 { 00187 DYNAMIC_CLOSE( model->libhandle ) ; 00188 myXtFree(model) ; 00189 return (NULL) ; 00190 } 00191 00192 if (NL_DEBUG) 00193 { 00194 char str[256] ; 00195 sprintf (str,"Interface created for %s model\n", 00196 model->interface->label) ; 00197 printf (str) ; 00198 } 00199 00200 /*----- done -----*/ 00201 00202 return (model) ; 00203 } |