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 "afni.h"
8
9 #ifndef ALLOW_PLUGINS
ENV_init(void)10 void ENV_init(void){}
11 #else
12
13 extern void TTRR_resetup(void) ;
14
15 /***********************************************************************
16 Pseudo-plugin to set/show environment variables
17 ************************************************************************/
18
19 #define USE_SESSTRAIL
20
21 /*--------------------- string to 'help' the user --------------------*/
22
23 static char help_start[] =
24 "Purpose: control the AFNI environment variables.\n"
25 "\n"
26 "The environment variables controlled from this plugin affect the\n"
27 "operation of various AFNI components. Full documentation is in\n"
28 "the file README.environment. These environment variables may also\n"
29 "also set from the command line, your login script, or from your\n"
30 ".afnirc file.\n"
31 "\n"
32 "Some environment variables CANNOT be set in this plugin, since the\n"
33 "choices they imply are irrevocable, they only affect the startup\n"
34 "operation of AFNI, or the parameters they control can be set by\n"
35 "other AFNI controls. Some of these 'fixed' variables are:\n"
36 ;
37
38 static char help_mid[] =
39 "\n"
40 "The variables that CAN be set by this plugin are:\n"
41 ;
42
43 static char help_end[] =
44 "\n"
45 "The variables shown above may be set using the plugin interface.\n"
46 "As usual, one of the 'Send' buttons must be used for any changes\n"
47 "you make to be communicated to AFNI. Depending on the variables\n"
48 "that are altered, there may be no immediate effects visible in the\n"
49 "AFNI interface, until you take some action that is dependent on\n"
50 "the variable settings.\n"
51 "\n"
52 "Author -- RW Cox -- June 2000"
53 ;
54
55 /*----------- list of variables that CANNOT be edited ---------------------*/
56
57 static char *env_fixed[] = {
58 "AFNI_PLUGINPATH" , "AFNI_NOPLUGINS" , "AFNI_YESPLUGOUTS" ,
59 "AFNI_TSPATH" , "AFNI_MODELPATH" , "AFNI_HINTS" ,
60 "AFNI_NO_MCW_MALLOC" , "AFNI_NOREALPATH" , "AFNI_NOSPLASH" ,
61 "AFNI_SPLASH_XY" , "AFNI_SPLASHTIME" ,
62 "AFNI_NOTES_DLINES" , "AFNI_OPTIONS" , "AFNI_SYSTEM_AFNIRC" ,
63 "AFNI_ALWAYS_LOCK" , "AFNI_FIM_BKTHR" , "AFNI_NO_XDBE" ,
64 "AFNI_GRAYSCALE_BOT" , "AFNI_NOMMAP" ,
65 #ifndef USE_SESSTRAIL
66 "AFNI_SESSTRAIL" ,
67 #endif
68 "AFNI_RENDER_PRECALC_MODE" ,
69 "AFNI_NO_ADOPTION_WARNING" ,
70 "AFNI_BYTEORDER" ,
71 "AFNI_BYTEORDER_INPUT" ,
72 "AFNI_NO_BYTEORDER_WARNING" ,
73 "AFNI_COLORSCALE_DEFAULT" ,
74 "AFNI_RESCAN_METHOD" ,
75 "AFNI_THRESH_BIGSTEP" ,
76 "AFNI_PCOR_DENEPS" , "AFNI_FIM_MASK" , "AFNI_FIM_IDEAL" ,
77 "AFNI_LAYOUT_FILE" , "AFNI_tsplotgeom" ,
78 "AFNI_IMAGE_MAXFRAC" , "AFNI_DEFAULT_OPACITY" ,
79 "AFNI_DEFAULT_IMSAVE" , "AFNI_IMAGE_ZEROCOLOR" ,
80 "AFNI_IMAGE_LABEL_MODE" , "AFNI_IMAGE_LABEL_SIZE" ,
81 "AFNI_GRAPH_BASELINE" , "AFNI_GRAPH_GLOBALBASE" ,
82 "AFNI_ANALYZE_DATASETS" , "AFNI_ANALYZE_SCALE" , "AFNI_ANALYZE_FLOATIZE" ,
83 "AFNI_ANALYZE_ORIENT" , "AFNI_ANALYZE_AUTOCENTER" ,
84 "AFNI_MPEG_DATASETS" , "AFNI_MPEG_GRAYIZE" ,
85 "AFNI_1D_TIME" , "AFNI_1D_TIME_TR" ,
86 "AFNI_START_SMALL" , "AFNI_MENU_COLSIZE" ,
87 "AFNI_GLOBAL_SESSION" , "AFNI_NIML_START" ,
88 "AFNI_TTRR_SETUP" , "AFNI_LOAD_PRINTSIZE" ,
89 "AFNI_VALUE_LABEL_DTABLE" ,
90 "AFNI_AGIF_DELAY" , "AFNI_MPEG_FRAMERATE" ,
91 "AFNI_STARTUP_SCRIPT" , "AFNI_STARTUP_WARNINGS" ,
92 "AFNI_VERSION_CHECK" , "AFNI_LOGO16" ,
93 "IDCODE_PREFIX" , "TMPDIR"
94 } ;
95
96 #define NUM_env_fixed (sizeof(env_fixed)/sizeof(char *))
97
98 /*-------------------------------------------------------------------------*/
99
100 char *angle_strings[] = { "120" , "180" , "240" , "300" , "360" } ;
101 #define NUM_angle_strings (sizeof(angle_strings)/sizeof(char *)) /* 08 Nov 2011 */
102
103 char *globalrange_strings[] = { "Slice" , "Volume" , "Dataset" } ; /* 29 Jan 2014 */
104 #define NUM_globalrange_strings 3
105
106 /*--------------------- strings for Cooordinate format --------------------*/
107
108 #define NUM_cord_strings 50
109
110 static char *cord_strings[NUM_cord_strings] = {
111 "Dicom" , "Flipped" ,
112 "RAI" , "RAS" , "RPI" , "RPS" , "RIA" , "RIP" , "RSA" , "RSP" ,
113 "LAI" , "LAS" , "LPI" , "LPS" , "LIA" , "LIP" , "LSA" , "LSP" ,
114 "AIR" , "ASR" , "PIR" , "PSR" , "IAR" , "IPR" , "SAR" , "SPR" ,
115 "AIL" , "ASL" , "PIL" , "PSL" , "IAL" , "IPL" , "SAL" , "SPL" ,
116 "IRA" , "SRA" , "IRP" , "SRP" , "ARI" , "PRI" , "ARS" , "PRS" ,
117 "ILA" , "SLA" , "ILP" , "SLP" , "ALI" , "PLI" , "ALS" , "PLS"
118 } ;
119
120 static void ENV_coorder( char * ) ;
121 static void ENV_angle_string( char * ) ;
122 /*void ENV_globalrange( char * ) ;*/
123 static void ENV_thresh_lock( char * ) ;
124 static void ENV_compressor( char * ) ;
125 static void ENV_leftisleft( char * ) ;
126 static void ENV_leftisposterior( char * ); /* 27 Mar 2017 */
127 static void ENV_marksquality( char * ) ;
128 static void ENV_trusthost( char * ) ; /* 21 Feb 2001 */
129 static void ENV_cwd( char * ) ; /* 22 Feb 2001 */
130 static void ENV_redraw_titles( char * ); /* 21 Dec 2004 */
131 static void ENV_redisplay( char * ); /* 21 Mar 2005 */
132 static void ENV_setjpegquality(char *); /* 11 May 2006 */
133 static void ENV_wami_maxrad(char *vname); /* 27 Jun 2011 */
134 static void ENV_wami_maxfind(char *vname); /* 27 Jun 2011 */
135 static void ENV_atlas_reset(char *atlas); /* 05 Jul 2011 */
136 static void ENV_jumpspace_reset(char *spacename); /* 13 Jun 2014 */
137 #ifdef USE_SESSTRAIL
138 static void ENV_sesstrail( char * ) ;
139 #endif
140
141 /*-------------------------------------------------------------------------*/
142
143 #if 0
144 #define NUM_byteorder_list 3
145 static char *byteorder_list[] = { "This CPU" , "LSB_FIRST" , "MSB_FIRST" } ;
146
147 static void ENV_byteorder( char * ) ;
148 #endif
149
150 #define NUM_yesno_list 2
151 static char *yesno_list[] = { "YES" , "NO" } ;
152
153 #define NUM_threshlock_list 3
154 static char *threshlock_list[] = { "NO" , "VALUE" , "P-VALUE" } ;
155
156 #define NUM_cx2r_list 4
157 static char *cx2r_list[] = { "ABS" , "PHASE" , "REAL" , "IMAG" } ;
158
159 #define NUM_boxlab_list 3
160 static char *boxlab_list[] = { "ATOP" , "MAX" , "ZERO" } ;
161
162 /*--------- variables that can be edited ----------------------------------*/
163
164 #define NAME_NMAX 64
165 #define HINT_NMAX 64
166 #define VAL_NMAX (PLUGIN_STRING_SIZE+NAME_NMAX+8)
167
168 #define ENV_NUMBER_EDITABLE 1
169 #define ENV_NUMBER_FIXED 2
170 #define ENV_STRING 9
171
172 static int enf = -1 ;
173
174 typedef struct {
175 char vname[NAME_NMAX] ;
176 char vhint[HINT_NMAX] ;
177 int vtype ; /* ENV_NUMBER_* or ENV_STRING */
178 int vbot,vtop,vdecim,vdef ; /* for NUMBER */
179 int vcount ; /* for STRING */
180 char **vlist ; /* for STRING */
181 char vvalue[VAL_NMAX] ;
182 generic_func *vfunc ;
183 } ENV_var ;
184
185 static int NUM_env_var = 0 ;
186 static ENV_var *env_var = NULL ;
187
188 /*---------------------------------------------------------------------------*/
189
ENV_compare(const void * av,const void * bv)190 int ENV_compare( const void *av , const void *bv ) /* 21 Feb 2007 */
191 {
192 ENV_var *a = (ENV_var *)av ;
193 ENV_var *b = (ENV_var *)bv ;
194 return strcmp( a->vname , b->vname ) ;
195 }
196
197 /*----------------- prototypes for internal routines -----------------*/
198
199 static char * ENV_main( PLUGIN_interface * ) ; /* the entry point */
200
201 /***********************************************************************
202 Set up the interface to the user
203 ************************************************************************/
204
ENV_init(void)205 PLUGIN_interface * ENV_init(void)
206 {
207 PLUGIN_interface *plint ; /* will be the output of this routine */
208
209 char *helpstring=NULL , *ept , *eval ;
210 int ii ;
211
212 /*------- some environment variables for AFNI ------*/
213
214 { static char buf[VAL_NMAX] = "AFNI_CWD=" ; /* 22 Feb 2001 */
215 ept = getcwd( buf+9 , VAL_NMAX-9 ) ;
216 if( ept != NULL ){
217 putenv(buf) ;
218 ENV_add_string( "AFNI_CWD" ,
219 "Current working directory (gets output files)" ,
220 0,NULL , ENV_cwd ) ;
221 }
222 }
223
224 #if 0
225 ENV_add_string( "AFNI_ENFORCE_ASPECT" ,
226 "To make AFNI enforce image window aspect ratio?" ,
227 NUM_yesno_list , yesno_list , NULL ) ;
228 #endif
229
230 ENV_add_numeric( "AFNI_FIM_PERCENT_LIMIT" ,
231 "Upper limit on % Change in FIM" ,
232 10,1000,0,100 , NULL ) ;
233
234 ENV_add_numeric( "AFNI_IMAGE_MINFRAC" ,
235 "Minimum size of image window" ,
236 0,10,2,2 , NULL ) ;
237
238 ENV_add_string( "AFNI_LEFT_IS_LEFT" ,
239 "To show subject's left on image left (axial, coronal)?" ,
240 NUM_yesno_list , yesno_list , ENV_leftisleft ) ;
241
242 ENV_add_string( "AFNI_LEFT_IS_POSTERIOR" ,
243 "To show subject's posterior on image left (sagittal)?" ,
244 NUM_yesno_list , yesno_list , ENV_leftisposterior ) ;
245
246 ENV_add_string( "AFNI_NO_SIDES_LABELS" ,
247 "Skip showing image window left-side label?" ,
248 NUM_yesno_list , yesno_list , NULL ) ;
249
250 ENV_add_string( "AFNI_VIEW_ANAT_BRICK" ,
251 "Show OverLay brick whenever possible" ,
252 NUM_yesno_list , yesno_list , NULL ) ;
253
254 ENV_add_string( "AFNI_VIEW_FUNC_BRICK" ,
255 "Show UnderLay brick whenever possible" ,
256 NUM_yesno_list , yesno_list , NULL ) ;
257
258 ENV_add_string( "AFNI_ORIENT" ,
259 "Coordinate display orientation" ,
260 NUM_cord_strings,cord_strings , ENV_coorder ) ;
261
262 ENV_add_string( "AFNI_MARKERS_NOQUAL" ,
263 "Skip markers quality checking?" ,
264 NUM_yesno_list , yesno_list , ENV_marksquality ) ;
265
266 ENV_add_string( "AFNI_COMPRESSOR" ,
267 "Output BRIK compression method" ,
268 NUM_COMPRESS_elist,COMPRESS_elist , ENV_compressor ) ;
269
270 ENV_add_string( "AFNI_AUTOGZIP" ,
271 "Use gzip on output if BRIK seems highly compressible" ,
272 NUM_yesno_list , yesno_list , NULL ) ;
273
274 #if 0
275 ENV_add_string( "AFNI_BYTEORDER" ,
276 "Byte ordering for output BRIKs" ,
277 NUM_byteorder_list , byteorder_list , ENV_byteorder ) ;
278 #endif
279
280 #if 0
281 ENV_add_string( "AFNI_NOMMAP" ,
282 "Whether to read BRIKs using mmap()" ,
283 NUM_yesno_list , yesno_list , NULL ) ;
284 #endif
285
286 ENV_add_string( "AFNI_FLOATSCAN" ,
287 "Scan floating BRIKs for errors on input?" ,
288 NUM_yesno_list , yesno_list , NULL ) ;
289
290 #ifdef USE_SESSTRAIL
291 ENV_add_numeric( "AFNI_SESSTRAIL" ,
292 "# directory levels seen in Switch Session, etc." ,
293 0,9,0,SESSTRAIL , ENV_sesstrail ) ;
294 #endif
295
296 ENV_add_string( "AFNI_PBAR_IMXY" ,
297 "Sizes of 'Save to PPM' for color pbars" ,
298 0,NULL , NULL ) ;
299
300 ENV_add_string( "AFNI_PSPRINT" ,
301 "Command to send stdin to PostScript printer" ,
302 0,NULL , NULL ) ;
303
304 ENV_add_string( "AFNI_TRUSTHOST" ,
305 "Name of host to trust for plugouts and realtime data" ,
306 0,NULL , ENV_trusthost ) ;
307
308 ENV_add_string( "AFNI_IMAGE_LABEL_COLOR" ,
309 "Name of color for image overlay labels" , /* 21 Sep 2001 */
310 0,NULL , NULL ) ;
311
312 ENV_add_numeric( "AFNI_IMAGE_LABEL_SETBACK" ,
313 "Size of setback for image overlay labels" ,
314 0 , 40 , 3 , 3 , NULL ) ;
315
316 if( SUMA_ENABLED ){
317 ENV_add_string( "AFNI_SUMA_BOXCOLOR" , /* 21 Sep 2001 */
318 "Color name for surface node overlays [or none]" ,
319 0,NULL , NULL ) ;
320
321 ENV_add_numeric( "AFNI_SUMA_BOXSIZE" , /* 10 Mar 2002 */
322 "Box size for surface node overlays" ,
323 1 , 10 , 1 , 2 , NULL ) ;
324
325 ENV_add_string( "AFNI_SUMA_LINECOLOR" , /* 10 Mar 2002 */
326 "Color name for surface line overlays [or none]" ,
327 0,NULL , NULL ) ;
328
329 ENV_add_numeric( "AFNI_SUMA_LINESIZE" , /* 15 Jan 2003 */
330 "Line thickness for surface intersection overlay" ,
331 0 , 30 , 3 , 0 , NULL ) ;
332 }
333
334 #ifndef NO_FRIVOLITIES
335 ENV_add_string( "AFNI_IMAGE_PGMFILE" ,
336 "Image file for AFNI splash window" ,
337 0,NULL , NULL ) ;
338 #endif
339
340 /* 08 Aug 2001 */
341
342 ENV_add_yesno( "AFNI_DONT_MOVE_MENUS" ,
343 "Move popup menus to enhance visibility?" ) ;
344
345 /* 07 Mar 2002 */
346
347 ENV_add_numeric( "AFNI_GRAPH_TEXTLIMIT" ,
348 "Max rows in Graph Button-3 popup" ,
349 1 , 99 , 0 , 40 , NULL ) ;
350
351 /* 16 Mar 2002 */
352
353 ENV_add_string( "AFNI_KEEP_PANNING" ,
354 "Keep 'pan' turned on in image viewers?" ,
355 NUM_yesno_list , yesno_list , NULL ) ;
356
357 /* 18 Mar 2002 */
358
359 ENV_add_string( "AFNI_VALUE_LABEL" ,
360 "Turn on the Define Overlay dataset value label?" ,
361 NUM_yesno_list , yesno_list , NULL ) ;
362
363 /* 22 Mar 2002 */
364
365 ENV_add_string( "AFNI_CROSSHAIR_LINES" ,
366 "Draw crosshairs with lines, not overlay voxels?" ,
367 NUM_yesno_list , yesno_list , NULL ) ;
368
369 /* 25 Mar 2002 */
370
371 ENV_add_string( "AFNI_CROP_ZOOMSAVE" ,
372 "Crop zoomed images when saving to disk?" ,
373 NUM_yesno_list , yesno_list , NULL ) ;
374
375 /* 23 Aug 2003 */
376
377 ENV_add_numeric( "AFNI_MAX_OPTMENU" ,
378 "Max buttons in an Option Menu" ,
379 100 , 100000 , 0 , 255 , NULL ) ;
380
381 /* 23 Oct 2003 */
382
383 ENV_add_numeric( "AFNI_STROKE_THRESHOLD" ,
384 "Coarseness of grayscale stroking" ,
385 8 , 99 , 0 , 32 , NULL ) ;
386
387 ENV_add_string( "AFNI_STROKE_AUTOPLOT" ,
388 "To automatically draw grayscale-data value plot?" ,
389 NUM_yesno_list , yesno_list , NULL ) ;
390
391 /* 04 Nov 2003 */
392
393 ENV_add_string( "AFNI_IMAGE_MINTOMAX" ,
394 "Set new image viewers to do min-to-max grayscaling?" ,
395 NUM_yesno_list , yesno_list , ENV_redisplay ) ;
396
397 ENV_add_string( "AFNI_IMAGE_GLOBALRANGE" ,
398 "Set image viewers to use 3D global data range by slice, volume or dataset min-max?",
399 NUM_globalrange_strings , globalrange_strings , ENV_globalrange_view ) ;
400
401
402 /* 19 Nov 2003 */
403
404 ENV_add_numeric( "AFNI_DRAW_UNDOSIZE" ,
405 "Megabytes allowed for Drawing Undo" ,
406 1 , 999 , 0 , 6 , NULL ) ;
407
408 #if !defined(NO_FRIVOLITIES) && defined(DARWIN)
409 ENV_add_yesno( "AFNI_SPEECH" , "Allow speech synthesis?" ) ; /* 03 Dec 2003 */
410 #endif
411
412 ENV_add_numeric( "AFNI_VIDEO_DELAY" , /* 04 Dec 2003 */
413 "Image redraw interval for 'V' or 'v' (ms)." ,
414 1,9000,0,1 , NULL ) ;
415
416 ENV_add_numeric( "AFNI_IMAGE_ENTROPY" ,
417 "Entropy threshold: below this, 2%-98% is off." ,
418 0,10,1,0 , NULL ) ;
419
420 ENV_add_string( "AFNI_THRESH_LOCK" , /* 06 Feb 2004 */
421 "Lock Threshold slider values together?" ,
422 NUM_threshlock_list , threshlock_list , ENV_thresh_lock ) ;
423
424 ENV_add_string( "AFNI_GRAPH_CX2R" , /* 18 Apr 2011 */
425 "Graph display of complex time series" ,
426 NUM_cx2r_list , cx2r_list , NULL ) ;
427
428 #if 0 /* removed 11 Jan 2021 */
429 ENV_add_string( "AFNI_GRAPH_BOXLAB" , /* 18 Apr 2011 */
430 "Box graph display of brick labels" ,
431 NUM_boxlab_list , boxlab_list , NULL ) ;
432 #endif
433
434 ENV_add_yesno( "AFNI_PBAR_LOCK" , "Lock Color Pbars together?" ) ; /* 07 Feb 2004 */
435 ENV_add_yesno( "AFNI_RANGE_LOCK", "Lock OLay Ranges together?" ) ; /* 23 Feb 2004 */
436
437 ENV_add_yesno( "AFNI_DISP_SCROLLBARS" , "Image Disp menu get scrollbars?" ) ;
438
439 /* 23 Feb 2004 [rickr] */
440 ENV_add_yesno( "AFNI_IMAGE_ZOOM_NN" ,
441 "Use Nearest Neighbor interpolation for image Zoom?" ) ;
442
443 /* 22 Mar 2004 [RWCox] */
444 ENV_add_yesno( "AFNI_SLAVE_FUNCTIME" , "Time Index affects functional overlay?" ) ;
445 #if 0
446 ENV_add_yesno( "AFNI_SLAVE_THRTIME" , "Time Index affects threshold overlay?" ) ;
447 #endif
448
449 ENV_add_string( "AFNI_REALTIME_MP_HOST_PORT" , /* 31 Mar 2004 [rickr] */
450 "Supply host:port string for realtime motion parameters." ,
451 0,NULL , NULL ) ;
452
453 /* 07 Apr 2004 [RWCox] */
454 ENV_add_yesno( "AFNI_X11_REDECORATE" , "Try to set X11 window 'decorations'?" ) ;
455
456 /* 21 Dec 2004 [RWCox] */
457 ENV_add_string( "AFNI_TITLE_LABEL2" ,
458 "Use 'label2' field for window titles?" ,
459 NUM_yesno_list , yesno_list , ENV_redraw_titles ) ;
460
461 #if 0
462 /* 21 Mar 2005 [RWCox] */
463 ENV_add_string( "AFNI_EDGIZE_OVERLAY" ,
464 "Display color overlay as edges?" ,
465 NUM_yesno_list , yesno_list , ENV_redisplay ) ;
466 #endif
467
468 /* 11 Dec 2014 [RWCox] */
469 ENV_add_string( "AFNI_FUNC_BOXED_COLOR" ,
470 "Name of color for Alpha+Boxed overlays." , /* 21 Sep 2001 */
471 0,NULL , NULL ) ;
472
473 /* 08 Apr 2005 [rickr] */
474 ENV_add_numeric( "AFNI_NIFTI_DEBUG" ,
475 "Set nifti_io debug level (should then do Rescan:This)" ,
476 0,5,0,0 , NULL ) ;
477
478 /* 20 Apr 2005 [RWCox] */
479 ENV_add_string( "AFNI_OVERLAY_ZERO" ,
480 "Do 0 values get color in an Overlay?" ,
481 NUM_yesno_list , yesno_list , ENV_redisplay ) ;
482
483 /* 20 Oct 2005 [RWCox] */
484 ENV_add_yesno("AFNI_TTATLAS_CAUTION","Add caution to 'Where Am I' output?");
485
486 /* 10 May 2006 [drg] */
487 ENV_add_numeric( "AFNI_JPEG_COMPRESS" ,
488 "JPEG compression quality %" ,
489 1,100,0,95 , ENV_setjpegquality ) ;
490
491 /* 21 Feb 2007 [RWCox] */
492 ENV_add_yesno( "AFNI_DATASET_BROWSE" , "Switch datasets upon selection?" ) ;
493
494 /* 05 Mar 2007 [RWCox] */
495 ENV_add_yesno( "AFNI_THRESH_AUTO" , "Reset threshold on Switch Overlay?" ) ;
496
497 /* 18 Sep 2007 [RWCox] */
498 ENV_add_string( "AFNI_IMAGE_CLIPPED" ,
499 "Set new image viewers to do clipped grayscaling?" ,
500 NUM_yesno_list , yesno_list , ENV_redisplay ) ;
501
502 ENV_add_numeric( "AFNI_IMAGE_CLIPBOT" ,
503 "Set clipped grayscale bottom = fraction of top default" ,
504 0,50,2,25 , ENV_redisplay ) ;
505
506 ENV_add_numeric( "AFNI_IMAGE_CLIPTOP" ,
507 "Set clipped grayscale top = fraction of default" ,
508 60,190,2,100 , ENV_redisplay ) ;
509
510 ENV_add_numeric( "AFNI_1DPLOT_THIK" ,
511 "Set 1dplot-style line thickness" ,
512 0,20,3,3 , NULL ) ;
513
514 #if 0
515 /* 20 Dec 2007 [RWCox] */
516 ENV_add_string( "AFNI_CLUSTER_PREFIX" ,
517 "Prefix for Clusterize 1D file Saves" , 0 , NULL , NULL ) ;
518 #endif
519
520 /* 10 Jan 2008 [RWCox] */
521 ENV_add_numeric( "AFNI_CLUSTER_REPMAX" ,
522 "Max number rows in Clusterize Rpt table" ,
523 10,99,0,15 , NULL ) ;
524
525 /* 04 Aug 2010 [RWCox] */
526 ENV_add_numeric( "AFNI_CLUSTER_WAMIMAX" ,
527 "Max clusters sent to 'whereami'" ,
528 1,99,0,20 , NULL ) ;
529
530 /* 28 Feb 2011 [RWCox] */
531 ENV_add_yesno( "AFNI_CLUSTER_EBAR" ,
532 "Error bars in Clusterize plots?" ) ;
533
534 /* 03 Jun 2008 [RWCox] */
535 ENV_add_yesno( "AFNI_IMAGE_TICK_DIV_IN_MM" ,
536 "Image tick divisions count is in mm?" ) ;
537
538 /* 09 Feb 2009 [RWCox] */
539 ENV_add_numeric( "AFNI_ANIM_DUP" ,
540 "Duplication factor for MPEG save" ,
541 1,99,0,1 , NULL ) ;
542
543 /* 29 Apr 2009 [RWCox] */
544 { static char *fsize[3] = { "Normal" , "Big" , "Small" } ;
545 ENV_add_string( "AFNI_TTATLAS_FONTSIZE" ,
546 "Size of 'Where am I?' window font" ,
547 3 , fsize , NULL ) ;
548 }
549
550 /* 11 May 2009 [RWCox] */
551 ENV_add_yesno( "AFNI_INSTACORR_FDR" ,
552 "Compute FDR curve for InstaCorr correlations?" ) ;
553
554 /* 24 Sep 2021 [RWCox] */
555 ENV_add_yesno( "AFNI_INSTACORR_JUMP" ,
556 "Shift+Ctrl click jumps crosshairs before doing InstaCorr?") ;
557
558 /* 27 Aug 2009 [RWCox] */
559 ENV_add_numeric( "AFNI_IMAGE_CROPSTEP" ,
560 "Cropped image panning step size" ,
561 -9,9,0,1 , NULL ) ;
562
563 /* 06 Oct 2010 [RWCox] */
564 ENV_add_string( "AFNI_IDEAL_COLORS" ,
565 "Colors for the FIM Ideal in AFNI Graph viewer" ,
566 0,NULL , NULL ) ;
567 ENV_add_string( "AFNI_ORT_COLORS" ,
568 "Colors for the FIM Ort in AFNI Graph viewer" ,
569 0,NULL , NULL ) ;
570
571 /* 27 Jun 2011 [DRG] */
572 ENV_add_numeric( "AFNI_WHEREAMI_DEC_PLACES" ,
573 "Number of decimal places for whereami output" ,
574 0,4,0,0 , NULL ) ;
575 ENV_add_numeric( "AFNI_WHEREAMI_MAX_FIND" ,
576 "Maximum limit for structures from an atlas for whereami output" ,
577 1,50,0,9 , ENV_wami_maxfind ) ;
578 ENV_add_string( "AFNI_WHEREAMI_MAX_SEARCH_RAD" ,
579 "Maximum radius for structures from an atlas for whereami output" ,
580 0, NULL, ENV_wami_maxrad ) ;
581 /* 01 Jul 2011 [DRG] */
582 ENV_add_string( "AFNI_ATLAS_COLORS" ,
583 "Atlas to use in Atlas colors, Draw Dataset, Go to atlas location" ,
584 0, NULL, ENV_atlas_reset ) ;
585
586 /* 08 Nov 2011 [RWC] */
587 ENV_add_string( "AFNI_IMAGE_COLORANGLE" ,
588 "Image view color scale angle" ,
589 NUM_angle_strings,angle_strings , ENV_angle_string ) ;
590
591 /* 23 Dec 2011 [RWC] */
592 ENV_add_string( "AFNI_IMAGE_LABEL_STRING" ,
593 "Extra string for image view overlay labels" ,
594 0,NULL , NULL ) ;
595
596 /* 21 Feb 2013 [RWC] */
597 ENV_add_yesno( "AFNI_HISTOG_CUMULATIVE" ,
598 "Show cumulative histogram in plugins?" ) ;
599
600 /* 25 Jun 2013 [RWC] */
601 ENV_add_numeric( "AFNI_PBAR_TICK" ,
602 "Number of tick marks for colorscale" ,
603 0,63,0,9 , NULL ) ;
604
605 /* 23 Jul 2013 [RWC] */
606 ENV_add_yesno( "AFNI_RECENTER_VIEWING" ,
607 "Re-center xhairs when switching UnderLay?" ) ;
608
609 ENV_add_string( "AFNI_JUMPTO_SPACE" ,
610 "Space name to use in Jump to (spacename)" ,
611 0, NULL, ENV_jumpspace_reset ) ;
612
613 /* 28 Feb 2017 [RWC] */
614 ENV_add_yesno( "AFNI_IMAGE_LABEL_IJK" ,
615 "Plot image overlay label as slice index?" ) ;
616
617 /*--------- Sort list of variables [21 Feb 2007] -----------*/
618
619 if( !AFNI_yesenv("AFNI_DONT_SORT_ENVIRONMENT") )
620 qsort( env_var , (size_t)NUM_env_var , sizeof(ENV_var) , ENV_compare ) ;
621
622 /*---------------- compute helpstring -----------------------*/
623
624 helpstring = THD_zzprintf( helpstring , "%s\n" , help_start ) ;
625
626 for( ii=0 ; ii < NUM_env_fixed ; ii++ ){
627 ept = getenv(env_fixed[ii]) ;
628 if( ept == NULL )
629 eval = "(Not set)" ;
630 else if( ept[0] == '\0' )
631 eval = "(Set to empty string)" ;
632 else
633 eval = ept ;
634 helpstring = THD_zzprintf( helpstring, " %-25.25s= %s\n",
635 env_fixed[ii],eval ) ;
636 }
637
638 helpstring = THD_zzprintf( helpstring , "%s\n" , help_mid ) ;
639
640 for( ii=0 ; ii < NUM_env_var ; ii++ ){
641 helpstring = THD_zzprintf( helpstring, " %-25.25s: %s\n" ,
642 env_var[ii].vname , env_var[ii].vhint ) ;
643 }
644
645 helpstring = THD_zzprintf( helpstring , "%s\n" , help_end ) ;
646
647 /*---------------- set titles and call point ----------------*/
648
649 plint = PLUTO_new_interface( "Environment" ,
650 "Environment variables control" ,
651 helpstring ,
652 PLUGIN_CALL_VIA_MENU , ENV_main ) ;
653 free(helpstring) ;
654
655 PLUTO_add_hint( plint , "Environment variables control" ) ;
656
657 PLUTO_set_runlabels( plint , "Set+Keep" , "Set+Close" ) ; /* 04 Nov 2003 */
658
659 /*--------- make interface lines: 1 for each variable -----------*/
660
661 for( ii=0 ; ii < NUM_env_var ; ii++ ){
662
663 PLUTO_add_option( plint ,
664 "" , /* label at left of input line */
665 env_var[ii].vname , /* tag to return to plugin */
666 FALSE /* is this mandatory? */
667 ) ;
668
669 ept = getenv( env_var[ii].vname ) ;
670
671 switch( env_var[ii].vtype ){
672
673 default: break ; /* should never happen */
674
675 case ENV_NUMBER_FIXED:
676 case ENV_NUMBER_EDITABLE:{
677 double dval=env_var[ii].vdef ; int ival ;
678
679 if( ept != NULL ){
680 dval = strtod(ept,NULL) ;
681 AV_SHIFT_VAL(-env_var[ii].vdecim,dval) ;
682 }
683 ival = rint(dval) ;
684 if( ival < env_var[ii].vbot ) ival = env_var[ii].vbot ;
685 else if( ival > env_var[ii].vtop ) ival = env_var[ii].vtop ;
686
687 PLUTO_add_number( plint ,
688 env_var[ii].vname ,
689 env_var[ii].vbot ,
690 env_var[ii].vtop ,
691 env_var[ii].vdecim,
692 ival,(env_var[ii].vtype==ENV_NUMBER_EDITABLE) ) ;
693 PLUTO_add_hint( plint , env_var[ii].vhint ) ; /* 8 Apr 2005 rickr */
694 }
695 break ;
696
697 case ENV_STRING:{
698 if( env_var[ii].vcount <= 0 ){
699 PLUTO_add_string( plint ,
700 env_var[ii].vname ,
701 0 , &ept , NAME_NMAX ) ;
702 PLUTO_add_hint( plint , env_var[ii].vhint ) ;
703 } else {
704 int dval , jj ;
705 char ** sval ;
706
707 dval = 1 + PLUTO_string_index( ept , env_var[ii].vcount ,
708 env_var[ii].vlist ) ;
709
710 sval = (char **) malloc( sizeof(char *)*(1+env_var[ii].vcount) ) ;
711 sval[0] = "(Not set)" ;
712 for( jj=0 ; jj < env_var[ii].vcount ; jj++ )
713 sval[jj+1] = env_var[ii].vlist[jj] ;
714
715 PLUTO_add_string( plint ,
716 env_var[ii].vname ,
717 1+env_var[ii].vcount , sval , dval ) ;
718 PLUTO_add_hint( plint , env_var[ii].vhint ) ;
719 free(sval) ;
720 }
721 }
722 break ;
723 } /* end of switch over variable type */
724
725 } /* end of loop over variables */
726
727 /*--------- done with interface setup ---------*/
728
729 return plint ;
730 }
731
732 /***************************************************************************
733 Add a new variable to the list
734 ****************************************************************************/
735
ENV_add_numeric(char * vname,char * vhint,int vbot,int vtop,int vdecim,int vdef,generic_func * cbfunc)736 void ENV_add_numeric( char *vname , char *vhint ,
737 int vbot , int vtop , int vdecim , int vdef ,
738 generic_func *cbfunc )
739 {
740 int ii ;
741
742 if( vname == NULL || vname[0] == '\0' ) return ;
743 if( vhint == NULL || vhint[0] == '\0' ) return ;
744 if( vbot >= vtop ) return ;
745
746 if( NUM_env_var == 0 )
747 env_var = (ENV_var *) malloc(sizeof(ENV_var)) ;
748 else
749 env_var = (ENV_var *) realloc(env_var,(NUM_env_var+1)*sizeof(ENV_var)) ;
750
751 ii = NUM_env_var ; NUM_env_var++ ;
752
753 memset(env_var + ii, 0, sizeof(ENV_var)) ; /* 12 Feb 2009 [L patrol] */
754 MCW_strncpy( env_var[ii].vname , vname , NAME_NMAX ) ;
755 MCW_strncpy( env_var[ii].vhint , vhint , HINT_NMAX ) ;
756
757 if( enf > 0 )
758 env_var[ii].vtype = enf ;
759 else
760 env_var[ii].vtype = (vtop-vbot < 40) ? ENV_NUMBER_FIXED
761 : ENV_NUMBER_EDITABLE ;
762
763 env_var[ii].vbot = vbot ;
764 env_var[ii].vtop = vtop ;
765 env_var[ii].vdecim = vdecim ;
766 env_var[ii].vdef = vdef ;
767 env_var[ii].vfunc = cbfunc ;
768
769 return ;
770 }
771
772 /*---------------------------------------------------------------------------*/
773
ENV_add_yesno(char * vname,char * vhint)774 void ENV_add_yesno( char *vname , char *vhint ) /* 08 Aug 2001 */
775 {
776 ENV_add_string( vname , vhint ,
777 NUM_yesno_list , yesno_list , NULL ) ;
778 }
779
780 /*---------------------------------------------------------------------------*/
781
ENV_add_string(char * vname,char * vhint,int vcount,char ** vlist,generic_func * cbfunc)782 void ENV_add_string( char *vname , char *vhint ,
783 int vcount , char **vlist , generic_func *cbfunc )
784 {
785 int ii ;
786
787 if( vname == NULL || vname[0] == '\0' ) return ;
788 if( vhint == NULL || vhint[0] == '\0' ) return ;
789 if( vcount < 0 ) return ;
790 if( vcount > 0 && vlist == NULL ) return ;
791
792 if( NUM_env_var == 0 )
793 env_var = (ENV_var *) malloc(sizeof(ENV_var)) ;
794 else
795 env_var = (ENV_var *) realloc(env_var,(NUM_env_var+1)*sizeof(ENV_var)) ;
796
797 ii = NUM_env_var ; NUM_env_var++ ;
798
799 memset(env_var + ii, 0, sizeof(ENV_var)) ; /* 12 Feb 2009 [L patrol] */
800 MCW_strncpy( env_var[ii].vname , vname , NAME_NMAX ) ;
801 MCW_strncpy( env_var[ii].vhint , vhint , HINT_NMAX ) ;
802
803 env_var[ii].vtype = ENV_STRING ;
804 env_var[ii].vcount = vcount ;
805 env_var[ii].vlist = vlist ;
806 env_var[ii].vfunc = cbfunc ;
807
808 return ;
809 }
810
811 /***************************************************************************
812 Main routine for this plugin (will be called from AFNI).
813 If the return string is not NULL, some error transpired, and
814 AFNI will popup the return string in a message box.
815 ****************************************************************************/
816
ENV_main(PLUGIN_interface * plint)817 static char * ENV_main( PLUGIN_interface *plint )
818 {
819 char *tag ;
820 int ii,kk , ndone=0 , skip ;
821
822 ENTRY("ENV_main") ;
823
824 /*--------- loop over input lines ---------*/
825
826 while(1){
827 tag = PLUTO_get_optiontag(plint) ; skip = 0 ;
828 if( tag == NULL ) break ;
829
830 /* find which variable */
831
832 for( ii=0 ; ii < NUM_env_var ; ii++ )
833 if( strcmp(tag,env_var[ii].vname) == 0 ) break ;
834
835 if( ii == NUM_env_var )
836 RETURN( "** ENV_main: table corruption! **" ); /* should not happen */
837
838 switch( env_var[ii].vtype ){ /* set vvalue for each type */
839
840 default:
841 RETURN( "** ENV_main: table corruption! **" ); /* should not happen */
842
843 /* write a numeric value into the environment */
844
845 case ENV_NUMBER_FIXED:
846 case ENV_NUMBER_EDITABLE:{
847 float val = PLUTO_get_number(plint) ;
848 sprintf(env_var[ii].vvalue,"%s=%s" ,
849 env_var[ii].vname , AV_uformat_fval(val) ) ;
850 }
851 break ;
852
853 /* write a string value into the environment */
854
855 case ENV_STRING:{
856 char *str = PLUTO_get_string(plint) ; int jj ;
857
858 if( str == NULL || *str == '\0' ){
859 skip = 1 ;
860 } else {
861 if( env_var[ii].vcount > 0 ){
862 jj = PLUTO_string_index( str , env_var[ii].vcount ,
863 env_var[ii].vlist ) ;
864 if( jj >= 0 )
865 sprintf(env_var[ii].vvalue,"%s=%s" ,
866 env_var[ii].vname , str ) ;
867 else
868 sprintf(env_var[ii].vvalue,"%s=" , env_var[ii].vname ) ;
869 } else {
870 sprintf(env_var[ii].vvalue,"%s=%s" ,
871 env_var[ii].vname , str ) ;
872 }
873 }
874 }
875 break ;
876
877 } /* end of switch over environment variable types */
878
879 /* actually set environment variable */
880
881 if( !skip ){
882
883 putenv(env_var[ii].vvalue) ;
884
885 /* call callback, if there is one */
886
887 #if 0
888 if( env_var[ii].vfunc != NULL ) env_var[ii].vfunc( env_var[ii].vname ) ;
889 #else
890 if( env_var[ii].vfunc != NULL )
891 AFNI_CALL_VOID_1ARG( env_var[ii].vfunc , char *, env_var[ii].vname ) ;
892 #endif
893 }
894
895 /* turn this option off (for the user's convenience) */
896
897 for( kk=0 ; kk < plint->option_count ; kk++ ) /* find widget */
898 if( strcmp(tag,plint->option[kk]->tag) == 0 ) break ;
899
900 if( kk < plint->option_count ) /* turn off */
901 XmToggleButtonSetState( plint->wid->opwid[kk]->toggle, False,True ) ;
902
903 ndone++ ; /* count of how many we've done */
904
905 } /* end of while(1) loop over option lines */
906
907 /*--------- finished -------*/
908
909 if( ndone == 0 ) RETURN( " \n*** Don't you want to do anything? ***\n ") ;
910
911 RETURN( NULL );
912 }
913
914
915 /*-----------------------------------------------------------------------*/
916
ENV_thresh_lock(char * vname)917 static void ENV_thresh_lock( char *vname )
918 {
919 /* initialize viewers with new env value */
920 AFNI_set_all_thrlock_bboxes(NULL, -1);
921 return;
922 }
923 /*-----------------------------------------------------------------------*/
924
ENV_coorder(char * vname)925 static void ENV_coorder( char *vname )
926 {
927 char *str = getenv(vname) ;
928 if( str == NULL ) str = "RAI" ;
929 MCW_strncpy(GLOBAL_argopt.orient_code,str,4) ;
930 THD_coorder_fill( GLOBAL_argopt.orient_code , &GLOBAL_library.cord ) ;
931 PLUTO_force_redisplay() ;
932 }
933
934 /*-----------------------------------------------------------------------*/
935
ENV_angle_string(char * vname)936 static void ENV_angle_string( char *vname ) /* 08 Nov 2011 */
937 {
938 int ii ; Three_D_View *im3d ; MCW_DC *dc = NULL ;
939
940 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
941 im3d = GLOBAL_library.controllers[ii] ;
942 if( IM3D_OPEN(im3d) && im3d->dc != dc ){
943 if( dc == NULL ) dc = im3d->dc ;
944 DC_init_im_col(dc) ;
945 if( dc->use_xcol_im ) DC_set_image_colors(dc) ;
946 }
947 }
948
949 PLUTO_force_rebar() ; PLUTO_force_redisplay() ;
950 }
951
952 /*-----------------------------------------------------------------------*/
953
ENV_redisplay(char * vname)954 static void ENV_redisplay( char *vname ) /** 21 Mar 2005 */
955 {
956 PLUTO_force_redisplay() ;
957 }
958
959 /*-----------------------------------------------------------------------*/
960
ENV_compressor(char * vname)961 static void ENV_compressor( char *vname )
962 {
963 char *str = getenv(vname) ;
964 int meth ;
965
966 if( str == NULL ) str = "None" ;
967 meth = PLUTO_string_index( str , NUM_COMPRESS_elist , COMPRESS_elist ) ;
968 if( meth < 0 ) meth = COMPRESS_NONE ;
969 THD_set_write_compression(meth) ;
970 }
971
972 /*-----------------------------------------------------------------------*/
973
974 #ifdef USE_SESSTRAIL
ENV_sesstrail(char * vname)975 static void ENV_sesstrail( char *vname )
976 {
977 int ii , tt ;
978 THD_session *sess ;
979 char *str = getenv(vname) ;
980
981 if( str == NULL ) str = "1" ;
982 ii = SESSTRAIL ; SESSTRAIL = (int) strtod(str,NULL) ;
983 if( ii == SESSTRAIL ) return ;
984
985 /* relabel controller windows */
986
987 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
988 if( IM3D_OPEN(GLOBAL_library.controllers[ii]) )
989 AFNI_set_window_titles( GLOBAL_library.controllers[ii] ) ;
990
991 /* relabel sessions (cf. thd_initsess.c) */
992
993 for( ii=0 ; ii < GLOBAL_library.sslist->num_sess ; ii++ ){
994 sess = GLOBAL_library.sslist->ssar[ii] ;
995 str = THD_trailname(sess->sessname,SESSTRAIL) ;
996 tt = 1+strlen(str) - THD_MAX_NAME ; if( tt < 0 ) tt = 0 ;
997 strcpy( sess->lastname , str+tt ) ;
998 }
999 }
1000 #endif
1001
1002 /*-----------------------------------------------------------------------*/
1003
1004 #if 0
1005 static void ENV_byteorder( char *vname )
1006 {
1007 char *str = getenv(vname) ;
1008 int meth ;
1009
1010 meth = PLUTO_string_index( str , NUM_byteorder_list , byteorder_list ) ;
1011 switch( meth ){
1012 default: meth = -1 ; break ;
1013 case 0: meth = mri_short_order() ; break ;
1014 case 1: meth = LSB_FIRST ; break ;
1015 case 2: meth = MSB_FIRST ; break ;
1016 }
1017 THD_set_write_order( meth ) ;
1018 }
1019 #endif
1020
1021 /*-----------------------------------------------------------------------*/
1022
ENV_trusthost(char * vname)1023 static void ENV_trusthost( char *vname ) /* 21 Feb 2001 */
1024 {
1025 char *str = getenv(vname) ;
1026 TRUST_addhost(str) ;
1027 }
1028
1029 /*-----------------------------------------------------------------------*/
1030
ENV_redraw_titles(char * vname)1031 static void ENV_redraw_titles( char *vname ) /* 21 Dec 2004 */
1032 {
1033 int ii ;
1034 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
1035 AFNI_set_window_titles( GLOBAL_library.controllers[ii] ) ;
1036 }
1037
1038 /*-----------------------------------------------------------------------*/
1039
ENV_cwd(char * vname)1040 static void ENV_cwd( char *vname ) /* 22 Feb 2001 */
1041 {
1042 char *str = getenv(vname) , buf[256] , *bpt ;
1043
1044 if( str != NULL && str[0] != '\0' ){
1045 int ii = chdir(str) ;
1046 if( ii ){
1047 perror("** Setting CWD fails") ;
1048 bpt = getcwd( buf , 256 ) ;
1049 if( bpt != NULL ) fprintf(stderr,"** CWD still = %s\n",buf) ;
1050 BEEPIT ;
1051 } else {
1052 bpt = getcwd( buf , 256 ) ;
1053 if( bpt != NULL ) fprintf(stderr,"++ CWD now = %s\n",buf) ;
1054 }
1055 } else {
1056 fprintf(stderr,"** CWD not changed!\n") ;
1057 }
1058 }
1059
1060 /*-----------------------------------------------------------------------*/
1061
ENV_leftisleft(char * vname)1062 static void ENV_leftisleft( char *vname )
1063 {
1064 char *str = getenv(vname) ;
1065 GLOBAL_argopt.left_is_left = YESSISH(str) ;
1066 }
1067
ENV_leftisposterior(char * vname)1068 static void ENV_leftisposterior( char *vname ) /* 27 Mar 2017 */
1069 {
1070 char *str = getenv(vname) ;
1071 GLOBAL_argopt.left_is_posterior = YESSISH(str) ;
1072 }
1073
1074 /*-----------------------------------------------------------------------*/
1075
ENV_marksquality(char * vname)1076 static void ENV_marksquality( char *vname )
1077 {
1078 char *str = getenv(vname) ;
1079 GLOBAL_argopt.elide_quality = YESSISH(str) ;
1080 }
1081
1082 /*-----------------------------------------------------------------------*/
1083
ENV_setjpegquality(char * vname)1084 static void ENV_setjpegquality(char *vname)
1085 {
1086 ISQ_setup_ppmto_filters();
1087 }
1088
ENV_wami_maxrad(char * vname)1089 static void ENV_wami_maxrad(char *vname)
1090 {
1091 float maxrad;
1092
1093 char *str = getenv(vname) ;
1094 if(!str) return;
1095 maxrad = strtod(str, NULL);
1096 if(maxrad<=0.0) return;
1097 Set_Whereami_Max_Rad(maxrad);
1098 }
1099
ENV_wami_maxfind(char * vname)1100 static void ENV_wami_maxfind(char *vname)
1101 {
1102 int maxfind;
1103
1104 char *str = getenv(vname) ;
1105 if(!str) return;
1106 maxfind = atoi(str);
1107 if(maxfind<=0) return;
1108 Set_Whereami_Max_Find(maxfind);
1109 }
1110
ENV_atlas_reset(char * atlas)1111 static void ENV_atlas_reset(char *atlas)
1112 {
1113 TTRR_resetup();
1114 reset_atlas_ovdset();
1115 return ;
1116 }
1117
1118 /* reset the space used in the Jump to (MNI) menu */
ENV_jumpspace_reset(char * vname)1119 static void ENV_jumpspace_reset(char *vname)
1120 {
1121 char *spacename;
1122 int ii;
1123
1124 spacename = getenv(vname);
1125 set_jump_space(spacename);
1126
1127 /* relabel controller windows */
1128
1129 for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
1130 if( IM3D_OPEN(GLOBAL_library.controllers[ii]) )
1131 reset_mnito( GLOBAL_library.controllers[ii] ) ;
1132
1133 return ;
1134 }
1135
1136 #endif
1137 /* endif above is for if plugins are compiled - "#else" near top of file*/
1138