Doxygen Source Code Documentation
whereami.c File Reference
#include "mrilib.h"#include "afni.h"#include <stdio.h>#include <stdlib.h>Go to the source code of this file.
Defines | |
| #define | MAIN |
| #define | MAX_FIND 9 |
| #define | WAMIRAD 7.5 |
| #define | WAMI_HEAD "+++++++ nearby Talairach Daemon structures +++++++\n" |
| #define | WAMI_TAIL |
| #define | zischar(ch) ( ( ((ch) >= 'A' && (ch) <= 'Z' ) || ((ch) >= 'a' && (ch) <= 'z' ) ) ? 1 : 0 ) |
Functions | |
| THD_3dim_dataset * | TT_retrieve_atlas (void) |
| THD_3dim_dataset * | TT_retrieve_atlas_big (void) |
| THD_3dim_dataset * | TT_retrieve_atlas_either (void) |
| int | TT_load_atlas (void) |
| void | TT_purge_atlas (void) |
| void | TT_purge_atlas_big (void) |
| char * | TT_whereami (float xx, float yy, float zz) |
| int | main (int argc, char **argv) |
Variables | |
| int | have_dseTT = -1 |
| THD_3dim_dataset * | dseTT = NULL |
| THD_3dim_dataset * | dseTT_big = NULL |
| MCW_cluster * | wamiclust = NULL |
Define Documentation
|
|
Definition at line 3 of file whereami.c. |
|
|
Definition at line 14 of file whereami.c. Referenced by TT_whereami(). |
|
|
|
|
|
Value: "\n******** Please use results with caution! ********" \ "\n******** Brain anatomy is quite variable! ********" \ "\n******** The database may contain errors! ********" |
|
|
Definition at line 15 of file whereami.c. Referenced by TT_whereami(). |
|
|
Definition at line 419 of file whereami.c. Referenced by main(). |
Function Documentation
|
||||||||||||
|
Definition at line 420 of file whereami.c. References a, argc, free, i, malloc, TT_whereami(), and zischar.
00421 {
00422 float x, y, z;
00423 char *string, *fstring;
00424 int output = 0;
00425 int first = 1, num = 0;
00426 int a;
00427 int iarg, dicom = 1, i, nakedarg, arglen;
00428
00429 dicom = 1;
00430 output = 0;
00431 iarg = 1 ; nakedarg = 0;
00432 while( iarg < argc ){
00433 arglen = strlen(argv[iarg]);
00434 if(argv[iarg][0] == '-' && arglen > 1 && zischar(argv[iarg][1])) {
00435 for (i=1;i<arglen; ++i) argv[iarg][i] = tolower(argv[iarg][i]);
00436 if (strcmp(argv[iarg],"-spm") == 0 || strcmp(argv[iarg],"-lpi") == 0) dicom = 0;
00437 else if (strcmp(argv[iarg],"-dicom") == 0 || strcmp(argv[iarg],"-rai") == 0) dicom = 1;
00438 else {
00439 fprintf(stderr,"** bad option %s\n", argv[iarg]);
00440 return 1;
00441 }
00442 } else {
00443 /* xyz format */
00444 if (nakedarg == 0) x = atof(argv[iarg]);
00445 else if (nakedarg == 1) y = atof(argv[iarg]);
00446 else if (nakedarg == 2) z = atof(argv[iarg]);
00447 else if (nakedarg == 3) output = atoi(argv[iarg]);
00448 ++nakedarg;
00449 }
00450 ++iarg;
00451 }
00452
00453
00454 if (nakedarg < 3) {
00455 printf("Usage: whereami [-lpi/-spm] x y z [output format]\n");
00456 printf("x y z coordinates are assumed to be in RAI or DICOM format\n");
00457 printf("unless you use -lpi or -spm to indicate otherwise.\n");
00458 printf("Output format: 0 - standard AFNI 'Where am I?' format [default]\n");
00459 printf(" 1 - Blank separated list\n");
00460 return 1;
00461 }
00462
00463 if (!dicom) {
00464 /* go from lpi to rai */
00465 x = -x;
00466 y = -y;
00467 }
00468
00469 string = TT_whereami(x,y,z);
00470 if (string == NULL ) { /* 30 Apr 2005 [rickr] */
00471 fprintf(stderr,"** whereami lookup failure: is TTatlas+tlrc/TTatlas.nii.gz available?\n");
00472 fprintf(stderr," (the TTatlas+tlrc or TTatlas.nii.gz dataset must be in your PATH)\n");
00473 return 1;
00474 }
00475
00476 if (output == 1) {
00477 fstring = malloc(sizeof(string));
00478 strncpy(fstring, "Focus point", 11);
00479 num = 11;
00480 for(a = 0; string[a] != '\0'; a++) {
00481 /* remove header info up to Focus point:
00482 remove newlines as you go; once you hit a *, stop */
00483 if ((string[a] != ':') && (first == 1)) {
00484 continue;
00485 }
00486 first = 0;
00487 if ((string[a] == ' ') && (string[a-1] == ' ')) {
00488 continue;
00489 }
00490 if ((string[a] == '*')) {
00491 fstring[num] = '\0';
00492 printf("%s\n", fstring);
00493 break;
00494 }
00495 if ((string[a] != '\n')) {
00496 if (string[a] == 'W') {
00497 fstring[num++] = '\t';
00498 }
00499 fstring[num++] = string[a];
00500 } else {
00501 fstring[num++] = ' ';
00502 }
00503 }
00504 free(fstring);
00505 } else {
00506 printf("%s\n", string);
00507 }
00508
00509 return 0;
00510 }
|
|
|
Definition at line 50 of file whereami.c. References AFMALL, ENTRY, free, getenv(), have_dseTT, my_getenv(), RETURN, THD_MAX_NAME, and THD_open_one_dataset(). Referenced by AFNI_ttatlas_query(), DRAW_make_widgets(), TT_retrieve_atlas(), TT_retrieve_atlas_big(), TT_retrieve_atlas_either(), and TT_whereami().
00051 {
00052 char *epath, *elocal, ename[THD_MAX_NAME], dname[THD_MAX_NAME], *eee ;
00053 int epos , ll , ii , id ;
00054
00055 ENTRY("TT_load_atlas") ;
00056
00057 if( have_dseTT >= 0 ) RETURN(have_dseTT) ; /* for later calls */
00058
00059 have_dseTT = 0 ; /* don't have it yet */
00060
00061 /*----- 20 Aug 2001: see if user specified alternate database -----*/
00062
00063 epath = my_getenv("AFNI_TTATLAS_DATASET") ;
00064 if( epath != NULL ){
00065 dseTT = THD_open_one_dataset( epath ) ; /* try to open it */
00066 if( dseTT != NULL ){ /* got it!!! */
00067 have_dseTT = 1; RETURN(1);
00068 }
00069 }
00070
00071 /*----- get path to search -----*/
00072
00073 epath = getenv("AFNI_PLUGINPATH") ;
00074 if( epath == NULL ) epath = getenv("AFNI_PLUGIN_PATH") ;
00075 if( epath == NULL ) epath = getenv("PATH") ;
00076 if( epath == NULL ) RETURN(0) ;
00077
00078 /*----- copy path list into local memory -----*/
00079
00080 ll = strlen(epath) ;
00081 elocal = AFMALL(char, sizeof(char) * (ll+2) ) ;
00082
00083 /*----- put a blank at the end -----*/
00084
00085 strcpy( elocal , epath ) ; elocal[ll] = ' ' ; elocal[ll+1] = '\0' ;
00086
00087 /*----- replace colons with blanks -----*/
00088
00089 for( ii=0 ; ii < ll ; ii++ )
00090 if( elocal[ii] == ':' ) elocal[ii] = ' ' ;
00091
00092 /*----- extract blank delimited strings;
00093 use as directory names to look for atlas -----*/
00094
00095 epos = 0 ;
00096
00097 do{
00098 ii = sscanf( elocal+epos , "%s%n" , ename , &id ); /* next substring */
00099 if( ii < 1 ) break ; /* none -> done */
00100
00101 epos += id ; /* char after last scanned */
00102
00103 ii = strlen(ename) ; /* make sure name has */
00104 if( ename[ii-1] != '/' ){ /* a trailing '/' on it */
00105 ename[ii] = '/' ; ename[ii+1] = '\0' ;
00106 }
00107 strcpy(dname,ename) ;
00108 strcat(dname,"TTatlas+tlrc") ; /* add dataset name */
00109
00110 dseTT = THD_open_one_dataset( dname ) ; /* try to open it */
00111
00112 if( dseTT != NULL ){ /* got it!!! */
00113 free(elocal); have_dseTT = 1; RETURN(1);
00114 }
00115
00116 strcpy(dname,ename) ; strcat(dname,"TTatlas.nii.gz") ;
00117 dseTT = THD_open_one_dataset( dname ) ;
00118 if( dseTT != NULL ){ free(elocal); have_dseTT = 1; RETURN(1); }
00119
00120 } while( epos < ll ) ; /* scan until 'epos' is after end of epath */
00121
00122 free(elocal) ; RETURN(0) ; /* got here -> didn't find it */
00123 }
|
|
|
Definition at line 129 of file whereami.c. References PURGE_DSET.
00130 {
00131 PURGE_DSET(dseTT) ; return ;
00132 }
|
|
|
Definition at line 134 of file whereami.c. References DSET_delete.
00135 {
00136 if( dseTT_big != NULL ){ DSET_delete(dseTT_big) ; dseTT_big = NULL ; }
00137 return ;
00138 }
|
|
|
Definition at line 20 of file whereami.c. References have_dseTT, and TT_load_atlas(). Referenced by AFNI_ttatlas_overlay(), RCREND_func_widgets(), RCREND_overlay_ttatlas(), REND_func_widgets(), and REND_overlay_ttatlas().
00021 {
00022 if( have_dseTT < 0 ) TT_load_atlas() ;
00023 return dseTT ; /* might be NULL */
00024 }
|
|
|
Definition at line 28 of file whereami.c. References DSET_unload, have_dseTT, THD_zeropad(), and TT_load_atlas().
00029 {
00030 if( dseTT_big != NULL ) return dseTT_big ;
00031 if( have_dseTT < 0 ) TT_load_atlas() ;
00032 if( dseTT == NULL ) return NULL ;
00033 dseTT_big = THD_zeropad( dseTT , 10,0,0,0,0,0 , "TTatlas_big" , 0 ) ;
00034 DSET_unload( dseTT ) ; /* probably won't need again */
00035 return dseTT_big ;
00036 }
|
|
|
Definition at line 40 of file whereami.c. References have_dseTT, and TT_load_atlas(). Referenced by DRAW_ttatlas_CB().
00041 {
00042 if( dseTT_big != NULL ) return dseTT_big ;
00043 if( dseTT != NULL ) return dseTT ;
00044 if( have_dseTT < 0 ) TT_load_atlas() ;
00045 return dseTT ;
00046 }
|
|
||||||||||||||||
|
Definition at line 149 of file whereami.c. References ADDTO_SARR, AFMALL, THD_string_array::ar, DESTROY_SARR, DSET_BRICK_ARRAY, DSET_load, DSET_NX, DSET_NY, DSET_NZ, ENTRY, MCW_cluster::i, INIT_SARR, MCW_cluster::j, MCW_cluster::k, LOAD_FVEC3, MCW_cluster::mag, MAX_FIND, MCW_build_mask(), MCW_sort_cluster(), TTO_point::name, THD_string_array::num, MCW_cluster::num_pt, nz, RETURN, swap, TTO_point::tdval, TEMP_FVEC3, THD_3dmm_to_3dind(), THD_tta_to_mni(), TT_load_atlas(), TTO_COUNT, TTO_list, UNLOAD_FVEC3, UNLOAD_IVEC3, and WAMIRAD. Referenced by AFNI_ttatlas_query(), and main().
00150 {
00151 int ii,kk , ix,jy,kz , nx,ny,nz,nxy , aa,bb,cc , ff,b2f,b4f,rff ;
00152 THD_ivec3 ijk ;
00153 byte *b2 , *b4 ;
00154 THD_string_array *sar ;
00155 char *b2lab , *b4lab ;
00156 char lbuf[256] , *rbuf ;
00157 int nfind, b2_find[MAX_FIND], b4_find[MAX_FIND], rr_find[MAX_FIND] ;
00158
00159 THD_3dim_dataset * dset ; /* 01 Aug 2001 */
00160
00161 ENTRY("TT_whereami") ;
00162
00163 /*-- setup stuff: load atlas dataset, prepare search mask --*/
00164
00165 if( dseTT == NULL ){
00166 ii = TT_load_atlas() ; if( ii == 0 ) RETURN(NULL) ;
00167 }
00168
00169 /* 01 Aug 2001: maybe use big dataset (so don't need both in memory) */
00170
00171 dset = (dseTT_big != NULL) ? dseTT_big : dseTT ;
00172
00173 #if 0
00174 if( dset == dseTT_big ) fprintf(stderr,"TT_whereami using dseTT_big\n") ;
00175 else fprintf(stderr,"TT_whereami using dseTT\n") ;
00176 #endif
00177
00178 DSET_load(dset) ;
00179 b2 = DSET_BRICK_ARRAY(dset,0) ; if( b2 == NULL ) RETURN(NULL) ;
00180 b4 = DSET_BRICK_ARRAY(dset,1) ; if( b4 == NULL ) RETURN(NULL) ;
00181
00182 if( wamiclust == NULL ){
00183 wamiclust = MCW_build_mask( 0,0,0 , 1.0,1.0,1.0 , WAMIRAD ) ;
00184 if( wamiclust == NULL ) RETURN(NULL) ; /* should not happen! */
00185
00186 for( ii=0 ; ii < wamiclust->num_pt ; ii++ ) /* load radius */
00187 wamiclust->mag[ii] = (int)rint(sqrt((double)(
00188 wamiclust->i[ii]*wamiclust->i[ii]
00189 +wamiclust->j[ii]*wamiclust->j[ii]
00190 +wamiclust->k[ii]*wamiclust->k[ii]))) ;
00191
00192 MCW_sort_cluster( wamiclust ) ; /* sort by radius */
00193 }
00194
00195 /*-- find locations near the given one that are in the Atlas --*/
00196
00197 ijk = THD_3dmm_to_3dind( dset , TEMP_FVEC3(xx,yy,zz) ) ; /* get indexes */
00198 UNLOAD_IVEC3(ijk,ix,jy,kz) ; /* from coords */
00199
00200 nx = DSET_NX(dset) ; /* size of TT atlas dataset axes */
00201 ny = DSET_NY(dset) ;
00202 nz = DSET_NZ(dset) ; nxy = nx*ny ;
00203
00204 nfind = 0 ;
00205
00206 /*-- check the exact input location --*/
00207
00208 kk = ix + jy*nx + kz*nxy ; /* index into brick arrays */
00209 if( b2[kk] != 0 || b4[kk] != 0 ){
00210 b2_find[0] = b2[kk] ;
00211 b4_find[0] = b4[kk] ;
00212 rr_find[0] = 0 ; nfind++ ;
00213 }
00214
00215 /*-- check locations near it --*/
00216
00217 for( ii=0 ; ii < wamiclust->num_pt ; ii++ ){
00218
00219 /* compute index of nearby location, skipping if outside atlas */
00220
00221 aa = ix + wamiclust->i[ii] ; if( aa < 0 || aa >= nx ) continue ;
00222 bb = jy + wamiclust->j[ii] ; if( bb < 0 || bb >= ny ) continue ;
00223 cc = kz + wamiclust->k[ii] ; if( cc < 0 || cc >= nz ) continue ;
00224
00225 kk = aa + bb*nx + cc*nxy ; /* index into bricks */
00226 b2f = b2[kk] ; b4f = b4[kk] ; /* TT structures markers there */
00227
00228 if( b2f == 0 && b4f == 0 ) continue ;
00229
00230 for( ff=0 ; ff < nfind ; ff++ ){ /* cast out */
00231 if( b2f == b2_find[ff] ) b2f = 0 ; /* duplicate labels */
00232 if( b4f == b4_find[ff] ) b4f = 0 ; /* we already found */
00233 }
00234 if( b2f == 0 && b4f == 0 ) continue ;
00235
00236 b2_find[nfind] = b2f ; /* save what we found */
00237 b4_find[nfind] = b4f ;
00238 rr_find[nfind] = (int) wamiclust->mag[ii] ;
00239 nfind++ ;
00240
00241 if( nfind == MAX_FIND ) break ; /* don't find TOO much */
00242 }
00243
00244 /*-- assemble output string(s) --*/
00245
00246 #define WAMI_HEAD "+++++++ nearby Talairach Daemon structures +++++++\n"
00247 #define WAMI_TAIL "\n******** Please use results with caution! ********" \
00248 "\n******** Brain anatomy is quite variable! ********" \
00249 "\n******** The database may contain errors! ********"
00250
00251 if( nfind == 0 ){
00252 char xlab[24], ylab[24] , zlab[24] ;
00253 THD_fvec3 tv , mv ;
00254 float mx,my,mz ;
00255 char mxlab[24], mylab[24] , mzlab[24] ;
00256
00257 sprintf(xlab,"%4.0f mm [%c]",-xx,(xx<0.0)?'R':'L') ;
00258 sprintf(ylab,"%4.0f mm [%c]",-yy,(yy<0.0)?'A':'P') ;
00259 sprintf(zlab,"%4.0f mm [%c]", zz,(zz<0.0)?'I':'S') ;
00260
00261 LOAD_FVEC3(tv,xx,yy,zz);
00262 mv = THD_tta_to_mni(tv); UNLOAD_FVEC3(mv,mx,my,mz);
00263 sprintf(mxlab,"%4.0f mm [%c]",mx,(mx>=0.0)?'R':'L') ;
00264 sprintf(mylab,"%4.0f mm [%c]",my,(my>=0.0)?'A':'P') ;
00265 sprintf(mzlab,"%4.0f mm [%c]",mz,(mz< 0.0)?'I':'S') ;
00266
00267 rbuf = AFMALL(char, 500) ;
00268 sprintf(rbuf,"%s\n"
00269 "Focus point=%s,%s,%s {T-T Atlas}\n"
00270 " =%s,%s,%s {MNI Brain}\n"
00271 "\n"
00272 "***** Not near any region stored in database *****\n" ,
00273 WAMI_HEAD , xlab,ylab,zlab , mxlab,mylab,mzlab ) ;
00274 RETURN(rbuf) ;
00275 }
00276
00277 /*-- bubble-sort what we found, by radius --*/
00278
00279 if( nfind > 1 ){ /* don't have to sort only 1 result */
00280 int swap, tmp ;
00281 do{
00282 swap=0 ;
00283 for( ii=1 ; ii < nfind ; ii++ ){
00284 if( rr_find[ii-1] > rr_find[ii] ){
00285 tmp = rr_find[ii-1]; rr_find[ii-1] = rr_find[ii]; rr_find[ii] = tmp;
00286 tmp = b2_find[ii-1]; b2_find[ii-1] = b2_find[ii]; b2_find[ii] = tmp;
00287 tmp = b4_find[ii-1]; b4_find[ii-1] = b4_find[ii]; b4_find[ii] = tmp;
00288 swap++ ;
00289 }
00290 }
00291 } while(swap) ;
00292 }
00293
00294 /*-- find anatomical label for each found marker, make result string --*/
00295
00296 INIT_SARR(sar) ; ADDTO_SARR(sar,WAMI_HEAD) ;
00297
00298 /* 04 Apr 2002: print coordinates (LPI) as well (the HH-PB addition) */
00299
00300 { char lbuf[128], xlab[24], ylab[24] , zlab[24] ;
00301 sprintf(xlab,"%4.0f mm [%c]",-xx,(xx<0.0)?'R':'L') ;
00302 sprintf(ylab,"%4.0f mm [%c]",-yy,(yy<0.0)?'A':'P') ;
00303 sprintf(zlab,"%4.0f mm [%c]", zz,(zz<0.0)?'I':'S') ;
00304 sprintf(lbuf,"Focus point=%s,%s,%s {T-T Atlas}",xlab,ylab,zlab) ;
00305 ADDTO_SARR(sar,lbuf) ;
00306 }
00307
00308 /* 29 Apr 2002: print MNI coords as well */
00309
00310 { THD_fvec3 tv , mv ;
00311 float mx,my,mz ;
00312 char mxlab[24], mylab[24] , mzlab[24] , lbuf[128] ;
00313 LOAD_FVEC3(tv,xx,yy,zz);
00314 mv = THD_tta_to_mni(tv); UNLOAD_FVEC3(mv,mx,my,mz);
00315 sprintf(mxlab,"%4.0f mm [%c]",mx,(mx>=0.0)?'R':'L') ;
00316 sprintf(mylab,"%4.0f mm [%c]",my,(my>=0.0)?'A':'P') ;
00317 sprintf(mzlab,"%4.0f mm [%c]",mz,(mz< 0.0)?'I':'S') ;
00318 sprintf(lbuf,"Focus point=%s,%s,%s {MNI Brain}\n",mxlab,mylab,mzlab) ;
00319 ADDTO_SARR(sar,lbuf) ;
00320 }
00321
00322 rff = -1 ; /* rff = radius of last found label */
00323
00324 for( ff=0 ; ff < nfind ; ff++ ){
00325 b2f = b2_find[ff] ; b4f = b4_find[ff] ; b2lab = NULL ; b4lab = NULL ;
00326
00327 if( b2f != 0 ){ /* find label */
00328 for( ii=0 ; ii < TTO_COUNT ; ii++ ) /* in AFNI's list */
00329 if( b2f == TTO_list[ii].tdval ) break ;
00330 if( ii < TTO_COUNT ) /* always true? */
00331 b2lab = TTO_list[ii].name ;
00332
00333 if( b2lab != NULL && xx < 0 && strstr(b2lab,"Left") != NULL ) /* maybe is Right */
00334 b2lab = TTO_list[ii+1].name ;
00335 }
00336
00337 if( b4f != 0 ){
00338 for( ii=0 ; ii < TTO_COUNT ; ii++ )
00339 if( b4f == TTO_list[ii].tdval ) break ;
00340 if( ii < TTO_COUNT )
00341 b4lab = TTO_list[ii].name ;
00342 if( b4lab != NULL && xx < 0 && strstr(b4lab,"Left") != NULL )
00343 b4lab = TTO_list[ii+1].name ;
00344 }
00345
00346 if( b2lab == NULL && b4lab == NULL ) continue ; /* no labels? */
00347
00348 /* make output label into lbuf */
00349
00350 lbuf[0] = '\0' ;
00351 if( b2lab != NULL ){
00352 if( rr_find[ff] != rff ){
00353 if( rr_find[ff] > 0 )
00354 sprintf( lbuf , "Within %d mm: %s" , rr_find[ff] , b2lab ) ;
00355 else
00356 sprintf( lbuf , "Focus point: %s" , b2lab ) ;
00357 } else {
00358 sprintf( lbuf , " %s" , b2lab ) ;
00359 }
00360
00361 for( kk=strlen(lbuf)-1 ; kk > 0 && lbuf[kk] == '.' ; kk-- )
00362 lbuf[kk] = '\0' ; /* trim trailing .'s */
00363 }
00364
00365 if( b4lab != NULL ){
00366 kk = strlen(lbuf) ;
00367 if( kk > 0 ){
00368 sprintf( lbuf+kk , " -AND- %s" , b4lab ) ;
00369 } else if( rr_find[ff] != rff ){
00370 if( rr_find[ff] > 0 )
00371 sprintf( lbuf , "Within %d mm: %s" , rr_find[ff] , b4lab ) ;
00372 else
00373 sprintf( lbuf , "Focus point: %s" , b4lab ) ;
00374 } else {
00375 sprintf( lbuf , " %s" , b4lab ) ;
00376 }
00377
00378 for( kk=strlen(lbuf)-1 ; kk > 0 && lbuf[kk] == '.' ; kk-- )
00379 lbuf[kk] = '\0' ;
00380 }
00381
00382 ADDTO_SARR(sar,lbuf) ; /* make a list of labels */
00383
00384 rff = rr_find[ff] ; /* save for next time around */
00385 }
00386
00387 /*- if didn't make any label, must produce something -*/
00388
00389 if( sar->num == 1 ){ /* shouldn't ever happen */
00390 sprintf(lbuf,"Found %d marked but unlabeled regions???\n",nfind) ;
00391 ADDTO_SARR(sar,lbuf) ;
00392 } else {
00393 ADDTO_SARR(sar,WAMI_TAIL) ; /* cautionary tail */
00394 }
00395
00396 /*- convert list of labels into one big multi-line string -*/
00397
00398 for( nfind=ii=0 ; ii < sar->num ; ii++ ) nfind += strlen(sar->ar[ii]) ;
00399 rbuf = AFMALL(char, nfind + 2*sar->num + 32 ) ; rbuf[0] = '\0' ;
00400 for( ii=0 ; ii < sar->num ; ii++ ){
00401 strcat(rbuf,sar->ar[ii]) ; strcat(rbuf,"\n") ;
00402 }
00403
00404 DESTROY_SARR(sar) ; RETURN(rbuf) ;
00405 }
|
Variable Documentation
|
|
Definition at line 11 of file whereami.c. |
|
|
Definition at line 12 of file whereami.c. |
|
|
Definition at line 10 of file whereami.c. Referenced by TT_load_atlas(), TT_retrieve_atlas(), TT_retrieve_atlas_big(), and TT_retrieve_atlas_either(). |
|
|
Definition at line 16 of file whereami.c. |