00001
00002
00003
00004
00005
00006
00007 #include "afni.h"
00008
00009 #ifndef ALLOW_PLUGINS
00010 void ENV_init(void){}
00011 #else
00012
00013
00014
00015
00016
00017 #define USE_SESSTRAIL
00018
00019
00020
00021 static char help_start[] =
00022 "Purpose: control the AFNI environment variables.\n"
00023 "\n"
00024 "The environment variables controlled from this plugin affect the\n"
00025 "operation of various AFNI components. Full documentation is in\n"
00026 "the file README.environment. These environment variables may also\n"
00027 "also set from the command line, your login script, or from your\n"
00028 ".afnirc file.\n"
00029 "\n"
00030 "Some environment variables CANNOT be set in this plugin, since the\n"
00031 "choices they imply are irrevocable, they only affect the startup\n"
00032 "operation of AFNI, or the parameters they control can be set by\n"
00033 "other AFNI controls. Some of these 'fixed' variables are:\n"
00034 ;
00035
00036 static char help_mid[] =
00037 "\n"
00038 "The variables that CAN be set by this plugin are:\n"
00039 ;
00040
00041 static char help_end[] =
00042 "\n"
00043 "The variables shown above may be set using the plugin interface.\n"
00044 "As usual, one of the 'Send' buttons must be used for any changes\n"
00045 "you make to be communicated to AFNI. Depending on the variables\n"
00046 "that are altered, there may be no immediate effects visible in the\n"
00047 "AFNI interface, until you take some action that is dependent on\n"
00048 "the variable settings.\n"
00049 "\n"
00050 "Author -- RW Cox -- June 2000"
00051 ;
00052
00053
00054
00055 static char *env_fixed[] = {
00056 "AFNI_PLUGINPATH" , "AFNI_NOPLUGINS" , "AFNI_YESPLUGOUTS" ,
00057 "AFNI_TSPATH" , "AFNI_MODELPATH" , "AFNI_HINTS" ,
00058 "AFNI_NO_MCW_MALLOC" , "AFNI_NOREALPATH" , "AFNI_NOSPLASH" ,
00059 "AFNI_SPLASH_XY" , "AFNI_SPLASHTIME" ,
00060 "AFNI_NOTES_DLINES" , "AFNI_OPTIONS" , "AFNI_SYSTEM_AFNIRC" ,
00061 "AFNI_ALWAYS_LOCK" , "AFNI_FIM_BKTHR" , "AFNI_NO_XDBE" ,
00062 "AFNI_GRAYSCALE_BOT" , "AFNI_NOMMAP" ,
00063 #ifndef USE_SESSTRAIL
00064 "AFNI_SESSTRAIL" ,
00065 #endif
00066 "AFNI_RENDER_PRECALC_MODE" ,
00067 "AFNI_NO_ADOPTION_WARNING" ,
00068 "AFNI_BYTEORDER" ,
00069 "AFNI_BYTEORDER_INPUT" ,
00070 "AFNI_NO_BYTEORDER_WARNING" ,
00071 "AFNI_COLORSCALE_DEFAULT" ,
00072 "AFNI_RESCAN_METHOD" ,
00073 "AFNI_THRESH_BIGSTEP" ,
00074 "AFNI_PCOR_DENEPS" , "AFNI_FIM_MASK" , "AFNI_FIM_IDEAL" ,
00075 "AFNI_LAYOUT_FILE" , "AFNI_tsplotgeom" ,
00076 "AFNI_IMAGE_MAXFRAC" , "AFNI_DEFAULT_OPACITY" ,
00077 "AFNI_DEFAULT_IMSAVE" , "AFNI_IMAGE_ZEROCOLOR" ,
00078 "AFNI_IMAGE_LABEL_MODE" , "AFNI_IMAGE_LABEL_SIZE" ,
00079 "AFNI_GRAPH_BASELINE" , "AFNI_GRAPH_GLOBALBASE" ,
00080 "AFNI_MINC_DATASETS" , "AFNI_MINC_FLOATIZE" , "AFNI_MINC_SLICESCALE" ,
00081 "AFNI_ANALYZE_DATASETS" , "AFNI_ANALYZE_SCALE" , "AFNI_ANALYZE_FLOATIZE" ,
00082 "AFNI_ANALYZE_ORIENT" , "AFNI_ANALYZE_AUTOCENTER" ,
00083 "AFNI_MPEG_DATASETS" , "AFNI_MPEG_GRAYIZE" ,
00084 "AFNI_1D_TIME" , "AFNI_1D_TIME_TR" ,
00085 "AFNI_START_SMALL" , "AFNI_MENU_COLSIZE" ,
00086 "AFNI_GLOBAL_SESSION" , "AFNI_NIML_START" ,
00087 "AFNI_TTRR_SETUP" , "AFNI_LOAD_PRINTSIZE" ,
00088 "AFNI_VALUE_LABEL_DTABLE" ,
00089 "AFNI_VERSION_CHECK" ,
00090 "AFNI_AGIF_DELAY" , "AFNI_MPEG_FRAMERATE" ,
00091 "AFNI_STARTUP_SCRIPT" , "AFNI_STARTUP_WARNINGS" ,
00092 "AFNI_VERSION_CHECK" , "AFNI_LOGO16" ,
00093 "IDCODE_PREFIX" , "TMPDIR"
00094 } ;
00095
00096 #define NUM_env_fixed (sizeof(env_fixed)/sizeof(char *))
00097
00098
00099
00100 #define NUM_cord_strings 50
00101
00102 static char *cord_strings[NUM_cord_strings] = {
00103 "Dicom" , "Flipped" ,
00104 "RAI" , "RAS" , "RPI" , "RPS" , "RIA" , "RIP" , "RSA" , "RSP" ,
00105 "LAI" , "LAS" , "LPI" , "LPS" , "LIA" , "LIP" , "LSA" , "LSP" ,
00106 "AIR" , "ASR" , "PIR" , "PSR" , "IAR" , "IPR" , "SAR" , "SPR" ,
00107 "AIL" , "ASL" , "PIL" , "PSL" , "IAL" , "IPL" , "SAL" , "SPL" ,
00108 "IRA" , "SRA" , "IRP" , "SRP" , "ARI" , "PRI" , "ARS" , "PRS" ,
00109 "ILA" , "SLA" , "ILP" , "SLP" , "ALI" , "PLI" , "ALS" , "PLS"
00110 } ;
00111
00112 static void ENV_coorder( char * ) ;
00113 static void ENV_globalrange( char * ) ;
00114 static void ENV_compressor( char * ) ;
00115 static void ENV_leftisleft( char * ) ;
00116 static void ENV_marksquality( char * ) ;
00117 static void ENV_trusthost( char * ) ;
00118 static void ENV_cwd( char * ) ;
00119 static void ENV_redraw_titles( char * );
00120 static void ENV_redisplay( char * );
00121
00122 #ifdef USE_SESSTRAIL
00123 static void ENV_sesstrail( char * ) ;
00124 #endif
00125
00126
00127
00128 #if 0
00129 #define NUM_byteorder_list 3
00130 static char *byteorder_list[] = { "This CPU" , "LSB_FIRST" , "MSB_FIRST" } ;
00131
00132 static void ENV_byteorder( char * ) ;
00133 #endif
00134
00135 #define NUM_yesno_list 2
00136 static char *yesno_list[] = { "YES" , "NO" } ;
00137
00138 #define NUM_threshlock_list 3
00139 static char *threshlock_list[] = { "NO" , "VALUE" , "P-VALUE" } ;
00140
00141
00142
00143 #define NAME_NMAX 32
00144 #define HINT_NMAX 64
00145 #define VAL_NMAX (PLUGIN_STRING_SIZE+NAME_NMAX+8)
00146
00147 #define ENV_NUMBER_EDITABLE 1
00148 #define ENV_NUMBER_FIXED 2
00149 #define ENV_STRING 9
00150
00151 typedef struct {
00152 char vname[NAME_NMAX] ;
00153 char vhint[HINT_NMAX] ;
00154 int vtype ;
00155 int vbot,vtop,vdecim,vdef ;
00156 int vcount ;
00157 char ** vlist ;
00158 char vvalue[VAL_NMAX] ;
00159 generic_func *vfunc ;
00160 } ENV_var ;
00161
00162 static int NUM_env_var = 0 ;
00163 static ENV_var *env_var = NULL ;
00164
00165
00166
00167 static char * ENV_main( PLUGIN_interface * ) ;
00168
00169
00170
00171
00172
00173 PLUGIN_interface * ENV_init(void)
00174 {
00175 PLUGIN_interface *plint ;
00176
00177 char *helpstring=NULL , *ept , *eval ;
00178 int ii ;
00179
00180
00181
00182 { static char buf[VAL_NMAX] = "AFNI_CWD=" ;
00183 ept = getcwd( buf+9 , VAL_NMAX-9 ) ;
00184 if( ept != NULL ){
00185 putenv(buf) ;
00186 ENV_add_string( "AFNI_CWD" ,
00187 "Current working directory (gets output files)" ,
00188 0,NULL , ENV_cwd ) ;
00189 }
00190 }
00191
00192 ENV_add_string( "AFNI_ENFORCE_ASPECT" ,
00193 "To make AFNI enforce image window aspect ratio?" ,
00194 NUM_yesno_list , yesno_list , NULL ) ;
00195
00196 ENV_add_numeric( "AFNI_FIM_PERCENT_LIMIT" ,
00197 "Upper limit on % Change in FIM" ,
00198 10,1000,0,100 , NULL ) ;
00199
00200 ENV_add_numeric( "AFNI_IMAGE_MINFRAC" ,
00201 "Minimum size of image window" ,
00202 0,10,2,2 , NULL ) ;
00203
00204 ENV_add_string( "AFNI_LEFT_IS_LEFT" ,
00205 "To show subject's left on image left?" ,
00206 NUM_yesno_list , yesno_list , ENV_leftisleft ) ;
00207
00208 ENV_add_string( "AFNI_NO_SIDES_LABELS" ,
00209 "Skip showing image window left-side label?" ,
00210 NUM_yesno_list , yesno_list , NULL ) ;
00211
00212 ENV_add_string( "AFNI_VIEW_ANAT_BRICK" ,
00213 "Show OverLay brick whenever possible" ,
00214 NUM_yesno_list , yesno_list , NULL ) ;
00215
00216 ENV_add_string( "AFNI_VIEW_FUNC_BRICK" ,
00217 "Show UnderLay brick whenever possible" ,
00218 NUM_yesno_list , yesno_list , NULL ) ;
00219
00220 ENV_add_string( "AFNI_ORIENT" ,
00221 "Coordinate display orientation" ,
00222 NUM_cord_strings,cord_strings , ENV_coorder ) ;
00223
00224 ENV_add_string( "AFNI_MARKERS_NOQUAL" ,
00225 "Skip markers quality checking?" ,
00226 NUM_yesno_list , yesno_list , ENV_marksquality ) ;
00227
00228 ENV_add_string( "AFNI_COMPRESSOR" ,
00229 "Output BRIK compression method" ,
00230 NUM_COMPRESS_elist,COMPRESS_elist , ENV_compressor ) ;
00231
00232 ENV_add_string( "AFNI_AUTOGZIP" ,
00233 "Use gzip on output if BRIK seems highly compressible" ,
00234 NUM_yesno_list , yesno_list , NULL ) ;
00235
00236 #if 0
00237 ENV_add_string( "AFNI_BYTEORDER" ,
00238 "Byte ordering for output BRIKs" ,
00239 NUM_byteorder_list , byteorder_list , ENV_byteorder ) ;
00240 #endif
00241
00242 #if 0
00243 ENV_add_string( "AFNI_NOMMAP" ,
00244 "Whether to read BRIKs using mmap()" ,
00245 NUM_yesno_list , yesno_list , NULL ) ;
00246 #endif
00247
00248 ENV_add_string( "AFNI_FLOATSCAN" ,
00249 "Scan floating BRIKs for errors on input?" ,
00250 NUM_yesno_list , yesno_list , NULL ) ;
00251
00252 #ifdef USE_SESSTRAIL
00253 ENV_add_numeric( "AFNI_SESSTRAIL" ,
00254 "# directory levels seen in Switch Session, etc." ,
00255 0,9,0,SESSTRAIL , ENV_sesstrail ) ;
00256 #endif
00257
00258 ENV_add_string( "AFNI_PBAR_IMXY" ,
00259 "Sizes of 'Save to PPM' for color pbars" ,
00260 0,NULL , NULL ) ;
00261
00262 ENV_add_string( "AFNI_PSPRINT" ,
00263 "Command to send stdin to PostScript printer" ,
00264 0,NULL , NULL ) ;
00265
00266 ENV_add_string( "AFNI_TRUSTHOST" ,
00267 "Name of host to trust for plugouts and realtime data" ,
00268 0,NULL , ENV_trusthost ) ;
00269
00270 ENV_add_string( "AFNI_IMAGE_LABEL_COLOR" ,
00271 "Name of color for image overlay labels" ,
00272 0,NULL , NULL ) ;
00273
00274 ENV_add_numeric( "AFNI_IMAGE_LABEL_SETBACK" ,
00275 "Size of setback for image overlay labels" ,
00276 0 , 40 , 3 , 3 , NULL ) ;
00277
00278 if( SUMA_ENABLED ){
00279 ENV_add_string( "AFNI_SUMA_BOXCOLOR" ,
00280 "Color name for surface node overlays [or none]" ,
00281 0,NULL , NULL ) ;
00282
00283 ENV_add_numeric( "AFNI_SUMA_BOXSIZE" ,
00284 "Box size for surface node overlays" ,
00285 1 , 10 , 1 , 2 , NULL ) ;
00286
00287 ENV_add_string( "AFNI_SUMA_LINECOLOR" ,
00288 "Color name for surface line overlays [or none]" ,
00289 0,NULL , NULL ) ;
00290
00291 ENV_add_numeric( "AFNI_SUMA_LINESIZE" ,
00292 "Line thickness for surface intersection overlay" ,
00293 0 , 30 , 3 , 0 , NULL ) ;
00294 }
00295
00296 #ifndef NO_FRIVOLITIES
00297 ENV_add_string( "AFNI_IMAGE_PGMFILE" ,
00298 "Image file for AFNI splash window" ,
00299 0,NULL , NULL ) ;
00300 #endif
00301
00302
00303
00304 ENV_add_yesno( "AFNI_DONT_MOVE_MENUS" ,
00305 "Move popup menus to enhance visibility?" ) ;
00306
00307
00308
00309 ENV_add_numeric( "AFNI_GRAPH_TEXTLIMIT" ,
00310 "Max rows in Graph Button-3 popup" ,
00311 1 , 99 , 0 , 40 , NULL ) ;
00312
00313
00314
00315 ENV_add_string( "AFNI_KEEP_PANNING" ,
00316 "Keep 'pan' turned on in image viewers?" ,
00317 NUM_yesno_list , yesno_list , NULL ) ;
00318
00319
00320
00321 ENV_add_string( "AFNI_VALUE_LABEL" ,
00322 "Turn on the Define Overlay dataset value label?" ,
00323 NUM_yesno_list , yesno_list , NULL ) ;
00324
00325
00326
00327 ENV_add_string( "AFNI_CROSSHAIR_LINES" ,
00328 "Draw crosshairs with lines, not overlay voxels?" ,
00329 NUM_yesno_list , yesno_list , NULL ) ;
00330
00331
00332
00333 ENV_add_string( "AFNI_CROP_ZOOMSAVE" ,
00334 "Crop zoomed images when saving to disk?" ,
00335 NUM_yesno_list , yesno_list , NULL ) ;
00336
00337
00338
00339 ENV_add_numeric( "AFNI_MAX_OPTMENU" ,
00340 "Max buttons in an Option Menu" ,
00341 100 , 100000 , 0 , 255 , NULL ) ;
00342
00343
00344
00345 ENV_add_numeric( "AFNI_STROKE_THRESHOLD" ,
00346 "Coarseness of grayscale stroking" ,
00347 8 , 99 , 0 , 32 , NULL ) ;
00348
00349 ENV_add_string( "AFNI_STROKE_AUTOPLOT" ,
00350 "To automatically draw grayscale-data value plot?" ,
00351 NUM_yesno_list , yesno_list , NULL ) ;
00352
00353
00354
00355 ENV_add_string( "AFNI_IMAGE_MINTOMAX" ,
00356 "Set image viewers to do min-to-max grayscaling?" ,
00357 NUM_yesno_list , yesno_list , NULL ) ;
00358
00359 ENV_add_string( "AFNI_IMAGE_GLOBALRANGE" ,
00360 "Set image viewers to use 3D global data range min-to-max?" ,
00361 NUM_yesno_list , yesno_list , ENV_globalrange ) ;
00362
00363
00364
00365 ENV_add_numeric( "AFNI_DRAW_UNDOSIZE" ,
00366 "Megabytes allowed for Drawing Undo" ,
00367 1 , 999 , 0 , 6 , NULL ) ;
00368
00369 #if !defined(NO_FRIVOLITIES) && defined(DARWIN)
00370 ENV_add_yesno( "AFNI_SPEECH" , "Allow speech synthesis?" ) ;
00371 #endif
00372
00373 ENV_add_numeric( "AFNI_VIDEO_DELAY" ,
00374 "Image redraw interval for 'V' or 'v' (ms)." ,
00375 1,9000,0,1 , NULL ) ;
00376
00377 ENV_add_numeric( "AFNI_IMAGE_ENTROPY" ,
00378 "Entropy threshold: below this, 2%-98% is off." ,
00379 0,10,1,0 , NULL ) ;
00380
00381 ENV_add_string( "AFNI_THRESH_LOCK" ,
00382 "Lock Threshold slider values together?" ,
00383 NUM_threshlock_list , threshlock_list , NULL ) ;
00384
00385 ENV_add_yesno( "AFNI_PBAR_LOCK" , "Lock Color Pbars together?" ) ;
00386 ENV_add_yesno( "AFNI_RANGE_LOCK", "Lock OLay Ranges together?" ) ;
00387
00388 ENV_add_yesno( "AFNI_DISP_SCROLLBARS" , "Image Disp menu get scrollbars?" ) ;
00389
00390
00391 ENV_add_yesno( "AFNI_IMAGE_ZOOM_NN" ,
00392 "Use Nearest Neighbor interpolation for image Zoom?" ) ;
00393
00394
00395 ENV_add_yesno( "AFNI_SLAVE_FUNCTIME" , "Time Index affects functional overlay?" ) ;
00396 ENV_add_yesno( "AFNI_SLAVE_THRTIME" , "Time Index affects threshold overlay?" ) ;
00397
00398 ENV_add_string( "AFNI_REALTIME_MP_HOST_PORT" ,
00399 "Supply host:port string for realtime motion parameters." ,
00400 0,NULL , NULL ) ;
00401
00402
00403 ENV_add_yesno( "AFNI_X11_REDECORATE" , "Try to set X11 window 'decorations'?" ) ;
00404
00405
00406 ENV_add_string( "AFNI_TITLE_LABEL2" ,
00407 "Use 'label2' field for window titles?" ,
00408 NUM_yesno_list , yesno_list , ENV_redraw_titles ) ;
00409
00410
00411 ENV_add_string( "AFNI_EDGIZE_OVERLAY" ,
00412 "Display color overlay as edges only?" ,
00413 NUM_yesno_list , yesno_list , ENV_redisplay ) ;
00414
00415
00416 ENV_add_numeric( "AFNI_NIFTI_DEBUG" ,
00417 "Set nifti_io debug level (should then do Rescan:This)" ,
00418 0,5,0,0 , NULL ) ;
00419
00420
00421 ENV_add_string( "AFNI_OVERLAY_ZERO" ,
00422 "Do 0 values get color in an Overlay?" ,
00423 NUM_yesno_list , yesno_list , ENV_redisplay ) ;
00424
00425
00426
00427 helpstring = THD_zzprintf( helpstring , "%s\n" , help_start ) ;
00428
00429 for( ii=0 ; ii < NUM_env_fixed ; ii++ ){
00430 ept = getenv(env_fixed[ii]) ;
00431 if( ept == NULL )
00432 eval = "(Not set)" ;
00433 else if( ept[0] == '\0' )
00434 eval = "(Set to empty string)" ;
00435 else
00436 eval = ept ;
00437 helpstring = THD_zzprintf( helpstring, " %-25.25s= %s\n",
00438 env_fixed[ii],eval ) ;
00439 }
00440
00441 helpstring = THD_zzprintf( helpstring , "%s\n" , help_mid ) ;
00442
00443 for( ii=0 ; ii < NUM_env_var ; ii++ ){
00444 helpstring = THD_zzprintf( helpstring, " %-25.25s: %s\n" ,
00445 env_var[ii].vname , env_var[ii].vhint ) ;
00446 }
00447
00448 helpstring = THD_zzprintf( helpstring , "%s\n" , help_end ) ;
00449
00450
00451
00452 plint = PLUTO_new_interface( "Environment" ,
00453 "Environment variables control" ,
00454 helpstring ,
00455 PLUGIN_CALL_VIA_MENU , ENV_main ) ;
00456 free(helpstring) ;
00457
00458 PLUTO_add_hint( plint , "Environment variables control" ) ;
00459
00460 PLUTO_set_runlabels( plint , "Set+Keep" , "Set+Close" ) ;
00461
00462
00463
00464 for( ii=0 ; ii < NUM_env_var ; ii++ ){
00465
00466 PLUTO_add_option( plint ,
00467 "" ,
00468 env_var[ii].vname ,
00469 FALSE
00470 ) ;
00471
00472 ept = getenv( env_var[ii].vname ) ;
00473
00474 switch( env_var[ii].vtype ){
00475
00476 default: break ;
00477
00478 case ENV_NUMBER_FIXED:
00479 case ENV_NUMBER_EDITABLE:{
00480 double dval=env_var[ii].vdef ; int ival ;
00481
00482 if( ept != NULL ){
00483 dval = strtod(ept,NULL) ;
00484 AV_SHIFT_VAL(-env_var[ii].vdecim,dval) ;
00485 }
00486 ival = rint(dval) ;
00487 if( ival < env_var[ii].vbot ) ival = env_var[ii].vbot ;
00488 else if( ival > env_var[ii].vtop ) ival = env_var[ii].vtop ;
00489
00490 PLUTO_add_number( plint ,
00491 env_var[ii].vname ,
00492 env_var[ii].vbot ,
00493 env_var[ii].vtop ,
00494 env_var[ii].vdecim,
00495 ival,(env_var[ii].vtype==ENV_NUMBER_EDITABLE) ) ;
00496 PLUTO_add_hint( plint , env_var[ii].vhint ) ;
00497 }
00498 break ;
00499
00500 case ENV_STRING:{
00501 if( env_var[ii].vcount <= 0 ){
00502 PLUTO_add_string( plint ,
00503 env_var[ii].vname ,
00504 0 , &ept , NAME_NMAX ) ;
00505 PLUTO_add_hint( plint , env_var[ii].vhint ) ;
00506 } else {
00507 int dval , jj ;
00508 char ** sval ;
00509
00510 dval = 1 + PLUTO_string_index( ept , env_var[ii].vcount ,
00511 env_var[ii].vlist ) ;
00512
00513 sval = (char **) malloc( sizeof(char *)*(1+env_var[ii].vcount) ) ;
00514 sval[0] = "(Not set)" ;
00515 for( jj=0 ; jj < env_var[ii].vcount ; jj++ )
00516 sval[jj+1] = env_var[ii].vlist[jj] ;
00517
00518 PLUTO_add_string( plint ,
00519 env_var[ii].vname ,
00520 1+env_var[ii].vcount , sval , dval ) ;
00521 PLUTO_add_hint( plint , env_var[ii].vhint ) ;
00522 free(sval) ;
00523 }
00524 }
00525 break ;
00526 }
00527
00528 }
00529
00530
00531
00532 return plint ;
00533 }
00534
00535
00536
00537
00538
00539 void ENV_add_numeric( char *vname , char *vhint ,
00540 int vbot , int vtop , int vdecim , int vdef ,
00541 generic_func *cbfunc )
00542 {
00543 int ii ;
00544
00545 if( vname == NULL || vname[0] == '\0' ) return ;
00546 if( vhint == NULL || vhint[0] == '\0' ) return ;
00547 if( vbot >= vtop ) return ;
00548
00549 if( NUM_env_var == 0 )
00550 env_var = (ENV_var *) malloc(sizeof(ENV_var)) ;
00551 else
00552 env_var = (ENV_var *) realloc(env_var,(NUM_env_var+1)*sizeof(ENV_var)) ;
00553
00554 ii = NUM_env_var ; NUM_env_var++ ;
00555
00556 MCW_strncpy( env_var[ii].vname , vname , NAME_NMAX ) ;
00557 MCW_strncpy( env_var[ii].vhint , vhint , HINT_NMAX ) ;
00558
00559 env_var[ii].vtype = (vtop-vbot < 100) ? ENV_NUMBER_FIXED
00560 : ENV_NUMBER_EDITABLE ;
00561
00562 env_var[ii].vbot = vbot ;
00563 env_var[ii].vtop = vtop ;
00564 env_var[ii].vdecim = vdecim ;
00565 env_var[ii].vdef = vdef ;
00566 env_var[ii].vfunc = cbfunc ;
00567
00568 return ;
00569 }
00570
00571 void ENV_add_yesno( char *vname , char *vhint )
00572 {
00573 ENV_add_string( vname , vhint ,
00574 NUM_yesno_list , yesno_list , NULL ) ;
00575 }
00576
00577 void ENV_add_string( char *vname , char *vhint ,
00578 int vcount , char **vlist , generic_func *cbfunc )
00579 {
00580 int ii ;
00581
00582 if( vname == NULL || vname[0] == '\0' ) return ;
00583 if( vhint == NULL || vhint[0] == '\0' ) return ;
00584 if( vcount < 0 ) return ;
00585 if( vcount > 0 && vlist == NULL ) return ;
00586
00587 if( NUM_env_var == 0 )
00588 env_var = (ENV_var *) malloc(sizeof(ENV_var)) ;
00589 else
00590 env_var = (ENV_var *) realloc(env_var,(NUM_env_var+1)*sizeof(ENV_var)) ;
00591
00592 ii = NUM_env_var ; NUM_env_var++ ;
00593
00594 MCW_strncpy( env_var[ii].vname , vname , NAME_NMAX ) ;
00595 MCW_strncpy( env_var[ii].vhint , vhint , HINT_NMAX ) ;
00596
00597 env_var[ii].vtype = ENV_STRING ;
00598 env_var[ii].vcount = vcount ;
00599 env_var[ii].vlist = vlist ;
00600 env_var[ii].vfunc = cbfunc ;
00601
00602 return ;
00603 }
00604
00605
00606
00607
00608
00609
00610
00611 static char * ENV_main( PLUGIN_interface *plint )
00612 {
00613 char *tag ;
00614 int ii,kk , ndone=0 ;
00615
00616
00617
00618 while(1){
00619 tag = PLUTO_get_optiontag(plint) ;
00620 if( tag == NULL ) break ;
00621
00622
00623
00624 for( ii=0 ; ii < NUM_env_var ; ii++ )
00625 if( strcmp(tag,env_var[ii].vname) == 0 ) break ;
00626
00627 if( ii == NUM_env_var )
00628 return "** ENV_main: table corruption! **" ;
00629
00630 switch( env_var[ii].vtype ){
00631
00632 default:
00633 return "** ENV_main: table corruption! **" ;
00634
00635
00636
00637 case ENV_NUMBER_FIXED:
00638 case ENV_NUMBER_EDITABLE:{
00639 float val = PLUTO_get_number(plint) ;
00640 sprintf(env_var[ii].vvalue,"%s=%s" ,
00641 env_var[ii].vname , AV_format_fval(val) ) ;
00642 }
00643 break ;
00644
00645
00646
00647 case ENV_STRING:{
00648 char *str = PLUTO_get_string(plint) ; int jj ;
00649
00650 if( env_var[ii].vcount > 0 ){
00651 jj = PLUTO_string_index( str , env_var[ii].vcount ,
00652 env_var[ii].vlist ) ;
00653 if( jj >= 0 )
00654 sprintf(env_var[ii].vvalue,"%s=%s" ,
00655 env_var[ii].vname , str ) ;
00656 else
00657 sprintf(env_var[ii].vvalue,"%s=" , env_var[ii].vname ) ;
00658 } else {
00659 sprintf(env_var[ii].vvalue,"%s=%s" ,
00660 env_var[ii].vname , str ) ;
00661 }
00662 }
00663 break ;
00664
00665 }
00666
00667
00668
00669 putenv(env_var[ii].vvalue) ;
00670
00671
00672
00673 #if 0
00674 if( env_var[ii].vfunc != NULL ) env_var[ii].vfunc( env_var[ii].vname ) ;
00675 #else
00676 if( env_var[ii].vfunc != NULL )
00677 AFNI_CALL_VOID_1ARG( env_var[ii].vfunc , char *, env_var[ii].vname ) ;
00678 #endif
00679
00680
00681
00682 for( kk=0 ; kk < plint->option_count ; kk++ )
00683 if( strcmp(tag,plint->option[kk]->tag) == 0 ) break ;
00684
00685 if( kk < plint->option_count )
00686 XmToggleButtonSetState( plint->wid->opwid[kk]->toggle, False,True ) ;
00687
00688 ndone++ ;
00689
00690 }
00691
00692
00693
00694 if( ndone == 0 ) return " \n*** Don't you want to do anything? ***\n " ;
00695
00696 return NULL ;
00697 }
00698
00699
00700
00701 static void ENV_globalrange( char *vname )
00702 {
00703 Three_D_View *im3d ;
00704 int ii , gbr=AFNI_yesenv("AFNI_IMAGE_GLOBALRANGE") ;
00705
00706 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
00707 im3d = GLOBAL_library.controllers[ii] ;
00708 if( ! IM3D_OPEN(im3d) ) continue ;
00709 if( gbr ){
00710 AFNI_range_setter( im3d , im3d->s123 ) ;
00711 AFNI_range_setter( im3d , im3d->s231 ) ;
00712 AFNI_range_setter( im3d , im3d->s312 ) ;
00713 } else {
00714 drive_MCW_imseq( im3d->s123 , isqDR_setrange , (XtPointer)NULL ) ;
00715 drive_MCW_imseq( im3d->s231 , isqDR_setrange , (XtPointer)NULL ) ;
00716 drive_MCW_imseq( im3d->s312 , isqDR_setrange , (XtPointer)NULL ) ;
00717 }
00718 }
00719 return ;
00720 }
00721
00722
00723
00724 static void ENV_coorder( char *vname )
00725 {
00726 char *str = getenv(vname) ;
00727 if( str == NULL ) str = "RAI" ;
00728 MCW_strncpy(GLOBAL_argopt.orient_code,str,4) ;
00729 THD_coorder_fill( GLOBAL_argopt.orient_code , &GLOBAL_library.cord ) ;
00730 PLUTO_force_redisplay() ;
00731 }
00732
00733
00734
00735 static void ENV_redisplay( char *vname )
00736 {
00737 PLUTO_force_redisplay() ;
00738 }
00739
00740
00741
00742 static void ENV_compressor( char *vname )
00743 {
00744 char *str = getenv(vname) ;
00745 int meth ;
00746
00747 if( str == NULL ) str = "None" ;
00748 meth = PLUTO_string_index( str , NUM_COMPRESS_elist , COMPRESS_elist ) ;
00749 if( meth < 0 ) meth = COMPRESS_NONE ;
00750 THD_set_write_compression(meth) ;
00751 }
00752
00753
00754
00755 #ifdef USE_SESSTRAIL
00756 static void ENV_sesstrail( char *vname )
00757 {
00758 int ii , tt ;
00759 THD_session *sess ;
00760 char *str = getenv(vname) ;
00761
00762 if( str == NULL ) str = "1" ;
00763 ii = SESSTRAIL ; SESSTRAIL = (int) strtod(str,NULL) ;
00764 if( ii == SESSTRAIL ) return ;
00765
00766
00767
00768 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
00769 if( IM3D_OPEN(GLOBAL_library.controllers[ii]) )
00770 AFNI_set_window_titles( GLOBAL_library.controllers[ii] ) ;
00771
00772
00773
00774 for( ii=0 ; ii < GLOBAL_library.sslist->num_sess ; ii++ ){
00775 sess = GLOBAL_library.sslist->ssar[ii] ;
00776 str = THD_trailname(sess->sessname,SESSTRAIL) ;
00777 tt = 1+strlen(str) - THD_MAX_NAME ; if( tt < 0 ) tt = 0 ;
00778 strcpy( sess->lastname , str+tt ) ;
00779 }
00780 }
00781 #endif
00782
00783
00784
00785 #if 0
00786 static void ENV_byteorder( char *vname )
00787 {
00788 char *str = getenv(vname) ;
00789 int meth ;
00790
00791 meth = PLUTO_string_index( str , NUM_byteorder_list , byteorder_list ) ;
00792 switch( meth ){
00793 default: meth = -1 ; break ;
00794 case 0: meth = mri_short_order() ; break ;
00795 case 1: meth = LSB_FIRST ; break ;
00796 case 2: meth = MSB_FIRST ; break ;
00797 }
00798 THD_set_write_order( meth ) ;
00799 }
00800 #endif
00801
00802
00803
00804 static void ENV_trusthost( char *vname )
00805 {
00806 char *str = getenv(vname) ;
00807 TRUST_addhost(str) ;
00808 }
00809
00810
00811
00812 static void ENV_redraw_titles( char *vname )
00813 {
00814 int ii ;
00815 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
00816 AFNI_set_window_titles( GLOBAL_library.controllers[ii] ) ;
00817 }
00818
00819
00820
00821 static void ENV_cwd( char *vname )
00822 {
00823 char *str = getenv(vname) , buf[256] , *bpt ;
00824
00825 if( str != NULL && str[0] != '\0' ){
00826 int ii = chdir(str) ;
00827 if( ii ){
00828 perror("** Setting CWD fails") ;
00829 bpt = getcwd( buf , 256 ) ;
00830 if( bpt != NULL ) fprintf(stderr,"** CWD still = %s\n",buf) ;
00831 BEEPIT ;
00832 } else {
00833 bpt = getcwd( buf , 256 ) ;
00834 if( bpt != NULL ) fprintf(stderr,"++ CWD now = %s\n",buf) ;
00835 }
00836 } else {
00837 fprintf(stderr,"** CWD not changed!\n") ;
00838 }
00839 }
00840
00841
00842
00843 static void ENV_leftisleft( char *vname )
00844 {
00845 char *str = getenv(vname) ;
00846 GLOBAL_argopt.left_is_left = YESSISH(str) ;
00847 }
00848
00849
00850
00851 static void ENV_marksquality( char *vname )
00852 {
00853 char *str = getenv(vname) ;
00854 GLOBAL_argopt.elide_quality = YESSISH(str) ;
00855 }
00856 #endif