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  

plug_ttget.c File Reference

#include "afni.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <arpa/inet.h>

Go to the source code of this file.


Defines

#define CORONAL_NUM   38
#define SAGITTAL_NUM   18
#define AXIAL_NUM   27
#define TTAHOME   "http://128.231.212.175/TTA/"
#define SKIPCOM   {if(ch == '#') do{ch=ndata[++id];}while(id<nn-1 && ch != '\n');}
#define NUMSCAN(var)
#define NUM_ORIENT_STRINGS   4

Functions

char * TTget_URL (int code, float xx, float yy, float zz)
MRI_IMAGETTget_ppm (char *url)
char * xxx_name_to_inet (char *host)
char * self_to_inet (void)
int is_nih_host (void)
int can_get_testfile (void)
char * TTget_main (PLUGIN_interface *)
DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface * PLUGIN_init (int ncall)
void TTget_recv (int why, int np, int *ijk, void *junk)

Variables

float coronal_yy []
char * coronal_ff []
float sagittal_xx []
char * sagittal_ff []
float axial_zz []
char * axial_ff []
char * orient_strings [4] = { "None", "Axial", "Sagittal", "Coronal" }
int orient = 0
int recv_key = -1
Three_D_Viewold_im3d = NULL
char old_url [256] = "\0"
void * impop = NULL

Define Documentation

#define AXIAL_NUM   27
 

Definition at line 47 of file plug_ttget.c.

Referenced by TTget_URL().

#define CORONAL_NUM   38
 

Definition at line 9 of file plug_ttget.c.

Referenced by TTget_URL().

#define NUM_ORIENT_STRINGS   4
 

Definition at line 259 of file plug_ttget.c.

Referenced by PLUGIN_init(), and TTget_main().

#define NUMSCAN var   
 

Value:

{ SKIPCOM ;                                                                       \
     while( id<nn-1 && !isdigit(ch) ){ch = ndata[++id]; SKIPCOM; }                   \
     for( nch=0 ; id<nn-1 && isdigit(ch) ; nch++,ch=ndata[++id] ) {buf[nch] = ch ;}  \
     buf[nch]='\0';                                                                  \
     var = strtol( buf, NULL, 10 ) ; }

#define SAGITTAL_NUM   18
 

Definition at line 32 of file plug_ttget.c.

Referenced by TTget_URL().

#define SKIPCOM   {if(ch == '#') do{ch=ndata[++id];}while(id<nn-1 && ch != '\n');}
 

#define TTAHOME   "http://128.231.212.175/TTA/"
 

Definition at line 63 of file plug_ttget.c.

Referenced by can_get_testfile(), and TTget_URL().


Function Documentation

int can_get_testfile void    [static]
 

Definition at line 245 of file plug_ttget.c.

References free, getenv(), NI_read_URL(), and TTAHOME.

Referenced by PLUGIN_init().

00246 {
00247    char *ttahome, *ndata=NULL, url[256]; int nn ;
00248 
00249    ttahome = getenv("AFNI_TTAHOME"); if( ttahome == NULL ) ttahome = TTAHOME;
00250    strcpy(url,ttahome) ; strcat(url,"testfile") ;
00251    nn = NI_read_URL( url, (char **)&ndata ) ;
00252    if( nn <= 0 || ndata == NULL ) return 0 ;
00253    if( ndata != NULL ) free(ndata) ;
00254    return 1 ;
00255 }

int is_nih_host void    [static]
 

Definition at line 214 of file plug_ttget.c.

References self_to_inet().

Referenced by PLUGIN_init().

00215 {
00216    char *ipad = self_to_inet() ;
00217 
00218    if( ipad == NULL ) return 0 ;
00219 
00220    if( strstr(ipad,"128.231.") == ipad ) return 1 ;
00221    if( strstr(ipad,"137.187.") == ipad ) return 1 ;
00222 
00223 #if 1
00224    if( strstr(ipad,"130.14." ) == ipad ) return 1 ;
00225    if( strstr(ipad,"156.40." ) == ipad ) return 1 ;
00226    if( strstr(ipad,"165.112.") == ipad ) return 1 ;
00227    if( strstr(ipad,"157.98." ) == ipad ) return 1 ;
00228 #endif
00229 
00230 #if 1
00231    if( strstr(ipad,"129.43."      ) == ipad ) return 1 ;
00232    if( strstr(ipad,"199.249.158." ) == ipad ) return 1 ;
00233    if( strstr(ipad,"209.218.0."   ) == ipad ) return 1 ;
00234    if( strstr(ipad,"130.14."      ) == ipad ) return 1 ;
00235    if( strstr(ipad,"131.158.140." ) == ipad ) return 1 ;
00236    if( strstr(ipad,"150.148.11"   ) == ipad ) return 1 ;
00237    if( strstr(ipad,"150.148.21"   ) == ipad ) return 1 ;
00238 #endif
00239 
00240    return 0 ;
00241 }

DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface* PLUGIN_init int    ncall
 

Definition at line 270 of file plug_ttget.c.

References can_get_testfile(), is_nih_host(), NUM_ORIENT_STRINGS, orient, orient_strings, and TTget_main().

00271 {
00272    PLUGIN_interface * plint ;
00273 
00274 #if 1
00275    return NULL ;
00276 #endif
00277 
00278    if( ncall > 0 || !is_nih_host() || !can_get_testfile() ) return NULL ;
00279 
00280    plint = PLUTO_new_interface( "TT Atlas",
00281                                 "TT Atlas display",
00282                                 NULL,
00283                                 PLUGIN_CALL_VIA_MENU, TTget_main  ) ;
00284 
00285    PLUTO_add_option( plint, "Mode", "MODE", TRUE ) ;
00286 
00287    PLUTO_add_string( plint, "Orient", NUM_ORIENT_STRINGS, orient_strings, orient ) ;
00288 
00289    return plint ;
00290 }

char* self_to_inet void    [static]
 

Definition at line 204 of file plug_ttget.c.

References xxx_name_to_inet().

Referenced by is_nih_host().

00205 {
00206    char hname[1048]="localhost" ;
00207    static char *ipad=NULL ;
00208    if( ipad == NULL ){ gethostname(hname,1048); ipad = xxx_name_to_inet(hname); }
00209    return ipad ;
00210 }

char * TTget_main PLUGIN_interface *    [static]
 

Definition at line 302 of file plug_ttget.c.

References AFNI_receive_control(), AFNI_receive_init(), EVERYTHING_SHUTDOWN, IM3D_OPEN, NUM_ORIENT_STRINGS, old_url, orient, orient_strings, PLUTO_string_index(), RECEIVE_VIEWPOINT_MASK, recv_key, and TTget_recv().

Referenced by PLUGIN_init().

00303 {
00304    char *str ;
00305 
00306    PLUTO_next_option(plint) ;
00307    str    = PLUTO_get_string(plint) ;
00308    orient = PLUTO_string_index( str, NUM_ORIENT_STRINGS, orient_strings ) ;
00309 
00310    old_url[0] = '\0' ;
00311 
00312    if( plint->im3d != old_im3d || !IM3D_OPEN(plint->im3d) ){
00313      if( recv_key >= 0 ){
00314        AFNI_receive_control( old_im3d,recv_key,EVERYTHING_SHUTDOWN,NULL ) ;
00315        recv_key = -1 ;
00316      }
00317      old_im3d = plint->im3d ;
00318      if( !IM3D_OPEN(plint->im3d) )
00319        return "***************************************\n"
00320               "TTget_main: AFNI controller isn't open!\n"
00321               "***************************************"   ;
00322    }
00323 
00324    if( orient == 0 && recv_key >= 0 ){
00325      AFNI_receive_control( plint->im3d,recv_key,EVERYTHING_SHUTDOWN,NULL ) ;
00326      recv_key = -1 ;
00327    } else if( orient > 0 && recv_key < 0 ){
00328      recv_key = AFNI_receive_init( plint->im3d, RECEIVE_VIEWPOINT_MASK,
00329                                    TTget_recv, NULL , "TTget_recv"      ) ;
00330    }
00331 
00332    return NULL ;
00333 }

MRI_IMAGE* TTget_ppm char *    url [static]
 

Definition at line 123 of file plug_ttget.c.

References free, maxval, mri_new(), MRI_RGB_PTR, NI_read_URL(), and NUMSCAN.

Referenced by TTget_recv().

00124 {
00125    int ii,nn, ch,nch, nx,ny,maxval, id ;
00126    char buf[32] ;
00127    byte *ndata=NULL, *bar ;
00128    MRI_IMAGE *im ;
00129 
00130    nn = NI_read_URL( url, (char **)&ndata ) ;
00131 
00132    if( nn < 40960 || ndata == NULL || ndata[0] != 'P' || ndata[1] != '6' ){
00133       if( ndata != NULL ) free(ndata) ;
00134       return NULL ;
00135    }
00136 
00137    id = 2 ; ch = ndata[id] ;  /* start scan after "P6" */
00138 
00139 #define SKIPCOM                                                                      \
00140     {if(ch == '#') do{ch=ndata[++id];}while(id<nn-1 && ch != '\n');}
00141 
00142 #define NUMSCAN(var)                                                                 \
00143    { SKIPCOM ;                                                                       \
00144      while( id<nn-1 && !isdigit(ch) ){ch = ndata[++id]; SKIPCOM; }                   \
00145      for( nch=0 ; id<nn-1 && isdigit(ch) ; nch++,ch=ndata[++id] ) {buf[nch] = ch ;}  \
00146      buf[nch]='\0';                                                                  \
00147      var = strtol( buf, NULL, 10 ) ; }
00148 
00149     NUMSCAN(nx) ; if( nx <= 2 || id >= nn-1 ){ free(ndata); return NULL; }
00150     NUMSCAN(ny) ; if( ny <= 2 || id >= nn-1 ){ free(ndata); return NULL; }
00151     NUMSCAN(maxval);
00152     if( maxval <= 7 || maxval > 255 || id >= nn-1 ){ free(ndata); return NULL; }
00153 
00154     id++ ;
00155     if( nn-id < 3*nx*ny ){ free(ndata); return NULL; }
00156 
00157     im = mri_new( nx, ny, MRI_rgb ) ;
00158     bar = MRI_RGB_PTR(im) ;
00159     memcpy( bar, ndata+id, 3*nx*ny ) ;
00160     free(ndata) ;
00161 
00162     if( maxval < 255 ){
00163       float fac = 255.4/maxval ;
00164       for( ii=0 ; ii < 3*nx*ny ; ii++ ) bar[ii] = (byte)( bar[ii]*fac ) ;
00165     }
00166 
00167     return im ;
00168 }

void TTget_recv int    why,
int    np,
int *    ijk,
void *    junk
[static]
 

Definition at line 339 of file plug_ttget.c.

References IM3D_OPEN, impop, mri_free(), old_url, orient, PLUTO_popup_image(), RECEIVE_VIEWPOINT, TTget_ppm(), TTget_URL(), VIEW_TALAIRACH_TYPE, AFNI_view_info::view_type, Three_D_View::vinfo, AFNI_view_info::xi, AFNI_view_info::yj, and AFNI_view_info::zk.

Referenced by TTget_main().

00340 {
00341    if( orient == 0          ||
00342        !IM3D_OPEN(old_im3d) ||
00343        old_im3d->vinfo->view_type != VIEW_TALAIRACH_TYPE ) return ;
00344 
00345    switch( why ){
00346 
00347       case RECEIVE_VIEWPOINT:{ /*-- change of crosshair location --*/
00348         MRI_IMAGE *im ;
00349         char *url ;
00350 
00351         url = TTget_URL( orient-1, old_im3d->vinfo->xi,
00352                                     old_im3d->vinfo->yj, old_im3d->vinfo->zk ) ;
00353 
00354         if( strcmp(url,old_url) == 0 ) return ;
00355         strcpy(old_url,url) ;
00356 
00357         im = TTget_ppm( url ) ; if( im == NULL ) return ;
00358 
00359         impop = PLUTO_popup_image( impop, im ) ;
00360         mri_free(im) ;
00361       }
00362       break ;
00363 
00364    }
00365 
00366    return ;
00367 }

char* TTget_URL int    code,
float    xx,
float    yy,
float    zz
[static]
 

(xx,yy,zz) in RAI (Dicom) coords; code is (0=axial,1=sag,2=cor).

Definition at line 69 of file plug_ttget.c.

References axial_ff, AXIAL_NUM, axial_zz, coronal_ff, CORONAL_NUM, coronal_yy, getenv(), sagittal_ff, SAGITTAL_NUM, sagittal_xx, and TTAHOME.

Referenced by TTget_recv().

00070 {
00071    static char nbuf[256] ;
00072    char *ttahome ;
00073    int ii,jj,kk ;
00074 
00075    ttahome = getenv("AFNI_TTAHOME"); if( ttahome == NULL ) ttahome = TTAHOME;
00076 
00077    switch( code ){
00078      case 1:                       /* sagittal */
00079        xx = fabs(xx) ;
00080        if( xx <= sagittal_xx[0] ){
00081          ii = 0 ;
00082        } else if( xx >= sagittal_xx[SAGITTAL_NUM-1] ){
00083          ii = SAGITTAL_NUM - 1 ;
00084        } else {
00085          for( ii=1 ; ii < SAGITTAL_NUM && xx > sagittal_xx[ii] ; ii++ ) ; /* nada */
00086          if( fabs(xx-sagittal_xx[ii-1]) < fabs(xx-sagittal_xx[ii]) ) ii-- ;
00087        }
00088        strcpy(nbuf,ttahome) ; strcat(nbuf,sagittal_ff[ii]) ;
00089      break ;
00090 
00091      case 2:                       /* coronal */
00092        yy = -yy ;
00093        if( yy <= coronal_yy[0] ){
00094           jj = 0 ;
00095        } else if( yy >= coronal_yy[CORONAL_NUM-1] ){
00096           jj = CORONAL_NUM - 1 ;
00097        } else {
00098           for( jj=1 ; jj < CORONAL_NUM && yy > coronal_yy[jj] ; jj++ ) ; /* nada */
00099           if( fabs(yy-coronal_yy[jj-1]) < fabs(yy-coronal_yy[jj]) ) jj-- ;
00100        }
00101        strcpy(nbuf,ttahome) ; strcat(nbuf,coronal_ff[jj]) ;
00102      break ;
00103 
00104      default:
00105      case 0:                       /* axial */
00106        if( zz <= axial_zz[0] ){
00107           kk = 0 ;
00108        } else if( zz >= axial_zz[AXIAL_NUM-1] ){
00109           kk = AXIAL_NUM - 1 ;
00110        } else {
00111           for( kk=1 ; kk < AXIAL_NUM && zz > axial_zz[kk] ; kk++ ) ; /* nada */
00112           if( fabs(zz-axial_zz[kk-1]) < fabs(zz-axial_zz[kk]) ) kk-- ;
00113        }
00114        strcpy(nbuf,ttahome) ; strcat(nbuf,axial_ff[kk]) ;
00115      break ;
00116    }
00117 
00118    return nbuf ;
00119 }

char* xxx_name_to_inet char *    host [static]
 

Definition at line 186 of file plug_ttget.c.

References malloc.

00187 {
00188    struct hostent * hostp ;
00189    char * iname = NULL, * str ;
00190    int ll ;
00191 
00192    if( host == NULL || host[0] == '\0' ) return NULL ;
00193    hostp = gethostbyname(host) ; if( hostp == NULL ) return NULL ;
00194 
00195    str = inet_ntoa(*((struct in_addr *)(hostp->h_addr))) ;
00196    if( str == NULL || str[0] == '\0' ) return NULL ;
00197 
00198    ll = strlen(str) ; iname = malloc(ll+1) ; strcpy(iname,str) ;
00199    return iname ;
00200 }

Variable Documentation

char* axial_ff[] [static]
 

Initial value:

 {
 "tt_horm40.ppm.gz", "tt_horm36.ppm.gz", "tt_horm32.ppm.gz", "tt_horm28.ppm.gz",
 "tt_horm24.ppm.gz", "tt_horm20.ppm.gz", "tt_horm16.ppm.gz", "tt_horm12.ppm.gz",
 "tt_horm08.ppm.gz", "tt_horm04.ppm.gz", "tt_horm01.ppm.gz", "tt_horp01.ppm.gz",
 "tt_horp04.ppm.gz", "tt_horp08.ppm.gz", "tt_horp12.ppm.gz", "tt_horp16.ppm.gz",
 "tt_horp20.ppm.gz", "tt_horp24.ppm.gz", "tt_horp28.ppm.gz", "tt_horp32.ppm.gz",
 "tt_horp35.ppm.gz", "tt_horp40.ppm.gz", "tt_horp45.ppm.gz", "tt_horp50.ppm.gz",
 "tt_horp55.ppm.gz", "tt_horp60.ppm.gz", "tt_horp65.ppm.gz"
}

Definition at line 53 of file plug_ttget.c.

Referenced by TTget_URL().

float axial_zz[] [static]
 

Initial value:

 {
   -40, -36, -32, -28, -24, -20, -16, -12, -8, -4,
    -1,   1,   4,   8,  12,  16,  20,  24, 28, 32, 35,
    40,  45,  50,  55,  60,  65
}

Definition at line 48 of file plug_ttget.c.

Referenced by TTget_URL().

char* coronal_ff[] [static]
 

Initial value:

 {
 "tt_corm99.ppm.gz", "tt_corm95.ppm.gz", "tt_corm90.ppm.gz", "tt_corm85.ppm.gz",
 "tt_corm80.ppm.gz", "tt_corm75.ppm.gz", "tt_corm70.ppm.gz", "tt_corm65.ppm.gz",
 "tt_corm60.ppm.gz", "tt_corm55.ppm.gz", "tt_corm50.ppm.gz", "tt_corm45.ppm.gz",
 "tt_corm40.ppm.gz", "tt_corm35.ppm.gz", "tt_corm32.ppm.gz", "tt_corm28.ppm.gz",
 "tt_corm24.ppm.gz", "tt_corm20.ppm.gz", "tt_corm16.ppm.gz", "tt_corm12.ppm.gz",
 "tt_corm08.ppm.gz", "tt_corm04.ppm.gz", "tt_corp00.ppm.gz", "tt_corp04.ppm.gz",
 "tt_corp08.ppm.gz", "tt_corp12.ppm.gz", "tt_corp16.ppm.gz", "tt_corp20.ppm.gz",
 "tt_corp24.ppm.gz", "tt_corp28.ppm.gz", "tt_corp32.ppm.gz", "tt_corp35.ppm.gz",
 "tt_corp40.ppm.gz", "tt_corp45.ppm.gz", "tt_corp50.ppm.gz", "tt_corp55.ppm.gz",
 "tt_corp60.ppm.gz", "tt_corp65.ppm.gz"
}

Definition at line 17 of file plug_ttget.c.

Referenced by TTget_URL().

float coronal_yy[] [static]
 

Initial value:

 {
  -100, -95, -90, -85, -80, -75, -70, -65,
   -60, -55, -50, -45, -40, -35, -32, -28,
   -24, -20, -16, -12,  -8,  -4,   0,   4,
     8,  12,  16,  20,  24,  28,  32,  35,
    40,  45,  50,  55,  60,  65
}

Definition at line 10 of file plug_ttget.c.

Referenced by TTget_URL().

void* impop = NULL [static]
 

Definition at line 337 of file plug_ttget.c.

Referenced by TTget_recv().

Three_D_View* old_im3d = NULL [static]
 

Definition at line 295 of file plug_ttget.c.

char old_url[256] = "\0" [static]
 

Definition at line 296 of file plug_ttget.c.

Referenced by TTget_main(), and TTget_recv().

int orient = 0 [static]
 

Definition at line 261 of file plug_ttget.c.

Referenced by PLUGIN_init(), TTget_main(), and TTget_recv().

char* orient_strings[4] = { "None", "Axial", "Sagittal", "Coronal" } [static]
 

Definition at line 260 of file plug_ttget.c.

Referenced by PLUGIN_init(), and TTget_main().

int recv_key = -1 [static]
 

Definition at line 294 of file plug_ttget.c.

Referenced by TTget_main().

char* sagittal_ff[] [static]
 

Initial value:

 {
 "tt_sag00g.ppm.gz", "tt_sag03.ppm.gz", "tt_sag05.ppm.gz", "tt_sag09.ppm.gz",
 "tt_sag13.ppm.gz", "tt_sag17.ppm.gz", "tt_sag21.ppm.gz", "tt_sag25.ppm.gz",
 "tt_sag29.ppm.gz", "tt_sag33.ppm.gz", "tt_sag37.ppm.gz", "tt_sag41.ppm.gz",
 "tt_sag43.ppm.gz", "tt_sag47.ppm.gz", "tt_sag51.ppm.gz", "tt_sag55.ppm.gz",
 "tt_sag59.ppm.gz", "tt_sag61.ppm.gz"
}

Definition at line 37 of file plug_ttget.c.

Referenced by TTget_URL().

float sagittal_xx[] [static]
 

Initial value:

 {
    0,  3,  5,  9, 13, 17, 21, 25, 29, 33,
   37, 41, 43, 47, 51, 55, 59, 61
}

Definition at line 33 of file plug_ttget.c.

Referenced by TTget_URL().

 

Powered by Plone

This site conforms to the following standards: