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