00001 #include "SUMA_suma.h"
00002
00003 extern SUMA_CommonFields *SUMAg_CF;
00004
00005 static char s_ver[100];
00006
00007 static char * SUMA_ver2date(int ver)
00008 {
00009 int yy, mm, dd;
00010 yy = ver/10000;
00011 mm = (ver % 10000) / 100;
00012 dd = ver % 100;
00013 sprintf(s_ver,"%d_%d_%d", yy, mm, dd);
00014 return(s_ver);
00015 }
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 static int verv[] = { SUMA_VERSION_VECTOR };
00033
00034 char * SUMA_New_Additions (int ver, SUMA_Boolean StampOnly)
00035 {
00036 static char FuncName[]={"SUMA_New_Additions"};
00037 char *s = NULL;
00038 int i;
00039 SUMA_STRING *SS = NULL;
00040
00041 SUMA_ENTRY;
00042
00043 SS = SUMA_StringAppend (NULL, NULL);
00044
00045 if (ver == 0) {
00046 s = SUMA_New_Additions_perver( verv[0], StampOnly);
00047 if (s) {
00048 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00049 }
00050 } else if (ver < 0) {
00051
00052 SS = SUMA_StringAppend (SS, "All Version Info:\n");
00053 i = 0;
00054 while (verv[i] > 0) {
00055 s = SUMA_New_Additions_perver( verv[i], StampOnly);
00056 if (s) {
00057 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00058 SS = SUMA_StringAppend (SS, "\n");
00059 }
00060 ++i;
00061 }
00062
00063 } else {
00064
00065 s = SUMA_New_Additions_perver( ver, StampOnly);
00066 if (s) {
00067 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00068 }
00069 }
00070
00071
00072 SS = SUMA_StringAppend_va (SS, "\nCVS tag:\n %s\n", SUMA_VERSION_LABEL);
00073
00074
00075 SS = SUMA_StringAppend_va (SS, "\nCompile Date:\n %s\n",__DATE__);
00076
00077
00078 SS = SUMA_StringAppend (SS, NULL);
00079
00080 s = SS->s;
00081 SUMA_free(SS);
00082
00083 SUMA_RETURN(s);
00084
00085 }
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 char * SUMA_New_Additions_perver (int ver, SUMA_Boolean StampOnly)
00100 {
00101 static char FuncName[]={"SUMA_New_Additions_perver"};
00102 char *s = NULL;
00103 SUMA_STRING *SS = NULL;
00104
00105 SUMA_ENTRY;
00106
00107 SS = SUMA_StringAppend (NULL, NULL);
00108
00109
00110 switch (ver) {
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 case 20041229:
00125 SS = SUMA_StringAppend_va(SS,
00126 "++ SUMA version %s\n", SUMA_ver2date(ver)); if (StampOnly) break;
00127 SS = SUMA_StringAppend(SS,
00128 "New Programs:\n"
00129 " + SurfClust: Program to find clusters of activation\n"
00130 " on the surface.\n"
00131 " + IsoSurface: Program to create isosurfaces from AFNI volumes.\n"
00132 " + ConvexHull: Program to create the convex hull of a set of\n"
00133 " points.\n"
00134 " + 3dSkullStrip: Program to remove the skull from anatomical \n"
00135 " volumes.\n"
00136 " + 3dCRUISEtoAFNI: Program to convert CRUISE volumes to AFNI\n"
00137 " + 3dBRAIN_VOYAGERtoAFNI: Program to convert BrainVoyager .vmr\n"
00138 " volumes to AFNI\n"
00139 " + SurfMesh: Program to increase or decrease a mesh's density.\n"
00140 " + SurfMask: Program to find the volume enclosed by a surface.\n"
00141 " + SurfToSurf: Program to interpolate between non-isotopic surfaces.\n"
00142 "Modifications:\n"
00143 " + SUMA:\n"
00144 " o Slight modification to threshold scale.\n"
00145 " o Added environment variable SUMA_ThresholdScalePower.\n"
00146 " o Fixed a few kinks in the surface controller.\n"
00147 " o Fixed ROI drawing trace on OSX.\n"
00148 " o Added geodesic distance measurements in ROI drawing\n"
00149 " controller.\n"
00150 " o Suma can read surfaces specified on command line.\n"
00151 " o Fixed bug reading AFNI generated niml files.\n"
00152 " o Useful axis displayed with F2 key.\n"
00153 " o Fixed bug with recursive function used to fill ROIs.\n"
00154 " o Support for reading CRUISE surfaces in OpenDX format\n"
00155 " o Support for reading BrainVoyager surfaces (.srf) format\n"
00156 " o Mouse motion effect is modulated with Zoom level\n"
00157 " o F8 toggles between orthographic and perspective viewing\n"
00158 " + ConvertSurface:\n"
00159 " o Option -make_consistent added to make the winding\n"
00160 " of the mesh consistent. \n"
00161 " + SurfQual:\n"
00162 " o Checks and warns about mesh's winding inconsistency.\n"
00163 " + SurfSmooth:\n"
00164 " o Added NN_geom, nearest neighbor interpolation option.\n"
00165 " o Combined with -match_vol or -match_area, this geometry\n"
00166 " smoothing mode can be used to inflate surfaces.\n"
00167 " + SurfaceMetrics:\n"
00168 " o Option -vol calculates the volume of the closed surface.\n"
00169 " + SurfPatch:\n"
00170 " o Option -vol to calculate the volume between two isotopic\n"
00171 " surface patches.\n"
00172 " + ROI2dataset:\n"
00173 " o Option -pad_to_node and -pad_label to output datasets\n"
00174 " containing full node listings.\n"
00175 " + ConvertDset:\n"
00176 " o Option -o_1dp was added to write 1D file data only,\n"
00177 " without additional comments.\n"
00178 );
00179 break;
00180
00181 case 20040610:
00182 SS = SUMA_StringAppend_va(SS,
00183 "++ SUMA version %s (used to be 2.500)\n", SUMA_ver2date(ver)); if (StampOnly) break;
00184 SS = SUMA_StringAppend(SS,
00185 "Modifications:\n"
00186 " + SUMA's surface controller 'ctrl+s' has been\n"
00187 " vastly improved. \n"
00188 " Of note are the following features:\n"
00189 " - interactive color mapping\n"
00190 " - thresholding controls \n"
00191 " - brightness modulation\n"
00192 " - choice of colormaps\n"
00193 " - coordinate bias (tres tres cool)\n"
00194 " - info on current cross hair location\n"
00195 " Use Bhelp button in the controller for detailed help.\n"
00196 " + 3dVol2Surf can output NIML formatted datasets.\n"
00197 " Options -first_node and -last_node can be used\n"
00198 " to restrict the mapping to a subset of the nodes.\n"
00199 " That is useful if your output file size exceeds 2GB.\n"
00200 "Bug Fix:\n"
00201 " + Fixed bug on Mac OS-X that cause all viewers to close\n"
00202 " after pressing 'Yes' on the 'Close this viewer' prompt.\n"
00203 );
00204 break;
00205
00206 case 20040116:
00207 SS = SUMA_StringAppend_va(SS,
00208 "++ SUMA version %s (used to be 2.480)\n", SUMA_ver2date(ver)); if (StampOnly) break;
00209 SS = SUMA_StringAppend(SS,
00210 "New Programs:\n"
00211 " + FS_readannot: Program to read FreeSurfer's\n"
00212 " annotation files.\n"
00213 " + SurfPatch: Program to create surface patches\n"
00214 " from a set of nodes.\n"
00215 " + SurfQual: Program to report defects in surfaces.\n"
00216 " For the moment, works on spherical \n"
00217 " surfaces only.\n"
00218 "Modifications:\n"
00219 " + Added affine transforms to ConvertSurface.\n"
00220 " + Added datasets into SUMA's code (no interface).\n"
00221 " + Added saving/loading of viewer settings.\n"
00222 " + Beginning of multiple group support in SUMA.\n"
00223 " + Redisplays of Surface Viewers due to X events\n"
00224 " are no longer passed to the image recorder.\n" );
00225 break;
00226
00227 case 20040106:
00228 SS = SUMA_StringAppend_va(SS,
00229 "++ SUMA version %s (used to be 2.450)\n", SUMA_ver2date(ver)); if (StampOnly) break;
00230 SS = SUMA_StringAppend(SS,
00231 "New Programs:\n"
00232 " + inspec: Shows the contents of a spec file\n"
00233 " + quickspec: Creates a minimal spec file for one\n"
00234 " or a bunch of surfaces.\n"
00235 " + SurfSmooth: Smoothes surface data or geometry\n"
00236 " + SurfMeasures: Outputs various surface attributes \n"
00237 " and measurements such as:\n"
00238 " Thickness, Area, Volume, etc.\n"
00239 "Modifications:\n"
00240 " + Foreground color smoothing option (SUMA keyb. 8)\n"
00241 " + No more MappingRef field in Spec files.\n"
00242 " The field is broken up into a set of other\n"
00243 " fields for more flexibility.\n"
00244 " + Surface input to command-line programs is \n"
00245 " now done via -spec files too.\n"
00246 " + One-way communication with SUMA via niml.\n"
00247 " Only available with SurfSmooth for the moment.\n"
00248 " + Began, in good faith, to update the new version \n"
00249 " information.\n");
00250 break;
00251
00252 default:
00253 SS = SUMA_StringAppend_va(SS, "++ %d? No such version, fool!\n", ver);
00254 break;
00255 }
00256
00257
00258 SS = SUMA_StringAppend (SS, NULL);
00259
00260 s = SS->s;
00261 SUMA_free(SS);
00262
00263 SUMA_RETURN(s);
00264 }
00265
00266
00267
00268
00269 void SUMA_Help_open (void *p)
00270 {
00271 static char FuncName[]={"SUMA_Help_open"};
00272
00273 SUMA_ENTRY;
00274
00275
00276 SUMA_RETURNe;
00277 }
00278
00279
00280
00281
00282 void SUMA_Help_destroyed (void *p)
00283 {
00284 static char FuncName[]={"SUMA_Help_destroyed"};
00285
00286 SUMA_ENTRY;
00287
00288 SUMAg_CF->X->Help_TextShell = NULL;
00289
00290 SUMA_RETURNe;
00291 }
00292
00293
00294
00295 void SUMA_Help_Cmap_open (void *p)
00296 {
00297 static char FuncName[]={"SUMA_Help_Cmap_open"};
00298
00299 SUMA_ENTRY;
00300
00301
00302 SUMA_RETURNe;
00303 }
00304
00305
00306
00307
00308 void SUMA_Help_Cmap_destroyed (void *p)
00309 {
00310 static char FuncName[]={"SUMA_Help_Cmap_destroyed"};
00311
00312 SUMA_ENTRY;
00313
00314 SUMAg_CF->X->Help_Cmap_TextShell = NULL;
00315
00316 SUMA_RETURNe;
00317 }
00318
00319
00320
00321
00322 void SUMA_Message_open (void *p)
00323 {
00324 static char FuncName[]={"SUMA_Message_open"};
00325
00326 SUMA_ENTRY;
00327
00328
00329 SUMA_RETURNe;
00330 }
00331
00332
00333
00334
00335 void SUMA_Message_destroyed (void *p)
00336 {
00337 static char FuncName[]={"SUMA_Message_destroyed"};
00338
00339 SUMA_ENTRY;
00340
00341 SUMAg_CF->X->Log_TextShell = NULL;
00342
00343 SUMA_RETURNe;
00344 }
00345
00346 char * SUMA_sources_Info(void)
00347 {
00348 static char FuncName[]={"SUMA_sources_Info"};
00349 char *s = NULL;
00350 SUMA_STRING *SS = NULL;
00351
00352 SUMA_ENTRY;
00353
00354 SS = SUMA_StringAppend (NULL, NULL);
00355
00356 SS = SUMA_StringAppend(SS,
00357 "Parts of SUMA use functions from various sources.\n"
00358 "Library sources:\n"
00359 "----------------\n"
00360 "* MarchingCubes:\n"
00361 " The code for the heart of the program IsoSurface is a translation of:\n"
00362 " Thomas Lewiner's C++ implementation of the algorithm in:\n"
00363 " Efficient Implementation of Marching Cubes´ Cases with Topological Guarantees\n"
00364 " by Thomas Lewiner, Hélio Lopes, Antônio Wilson Vieira and Geovan Tavares \n"
00365 " in Journal of Graphics Tools. \n"
00366 " http://www-sop.inria.fr/prisme/personnel/Thomas.Lewiner/JGT.pdf\n"
00367 " Permission to use this translation in other programs must be obtained \n"
00368 " from Mr. Lewiner.\n"
00369 "\n"
00370 "* QHull:\n"
00371 " Qhull, Copyright (c) 1993-2001 \n"
00372 " The National Science and Technology Research Center for \n"
00373 " Computation and Visualization of Geometric Structures \n"
00374 " (The Geometry Center) \n"
00375 " University of Minnesota \n"
00376 " 400 Lind Hall \n"
00377 " 207 Church Street S.E. \n"
00378 " Minneapolis, MN 55455 USA \n"
00379 " \n"
00380 " email: qhull@geom.umn.edu \n"
00381 " \n"
00382 " This software includes Qhull from The Geometry Center. Qhull is \n"
00383 " copyrighted as noted above. Qhull is free software and may be obtained \n"
00384 " via anonymous ftp from geom.umn.edu. It may be freely copied, modified, \n"
00385 " and redistributed under the following conditions: \n"
00386 " \n"
00387 " 1. All copyright notices must remain intact in all files. \n"
00388 " \n"
00389 " 2. A copy of this text file must be distributed along with any copies \n"
00390 " of Qhull that you redistribute; this includes copies that you have \n"
00391 " modified, or copies of programs or other software products that \n"
00392 " include Qhull. \n"
00393 " \n"
00394 " 3. If you modify Qhull, you must include a notice giving the \n"
00395 " name of the person performing the modification, the date of \n"
00396 " modification, and the reason for such modification. \n"
00397 " \n"
00398 " 4. When distributing modified versions of Qhull, or other software \n"
00399 " products that include Qhull, you must provide notice that the original \n"
00400 " source code may be obtained as noted above.\n"
00401 " \n"
00402 " 5. There is no warranty or other guarantee of fitness for Qhull, it is \n"
00403 " provided solely ""as is"". Bug reports or fixes may be sent to \n"
00404 " qhull_bug@geom.umn.edu; the authors may or may not act on them as \n"
00405 " they desire.\n"
00406 " \n"
00407 "\n"
00408 "* GLUT: Mark. J. Kilgard's code from the book 'Programming OpenGL for \n"
00409 " the X Window System' (ISBN:0-201-48359-9) published by \n"
00410 " Addison-Wesley.\n"
00411 " NOTICE: This source code distribution contains source code contained\n"
00412 " in the book 'Programming OpenGL for the X Window System' (ISBN:\n"
00413 " 0-201-48359-9) published by Addison-Wesley. The programs and\n"
00414 " associated files contained in the distribution were developed by Mark\n"
00415 " J. Kilgard and are Copyright 1994, 1995, 1996 by Mark J. Kilgard\n"
00416 " (unless otherwise noted). The programs are not in the public domain,\n"
00417 " but they are freely distributable without licensing fees. These\n"
00418 " programs are provided without guarantee or warrantee expressed or\n"
00419 " implied.\n"
00420 "\n"
00421 "* PLY: A set of functions for reading/writing PLY polygon files by\n"
00422 " Greg Turk.\n"
00423 " Copyright (c) 1994 The Board of Trustees of The Leland Stanford\n"
00424 " Junior University. All rights reserved. \n"
00425 " \n"
00426 " Permission to use, copy, modify and distribute this software and its \n"
00427 " documentation for any purpose is hereby granted without fee, provided \n"
00428 " that the above copyright notice and this permission notice appear in \n"
00429 " all copies of this software and that you do not sell the software. \n"
00430 " \n"
00431 " THE SOFTWARE IS PROVIDED 'AS IS' AND WITHOUT WARRANTY OF ANY KIND, \n"
00432 " EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY \n"
00433 " WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. \n"
00434 " \n"
00435 "* SimpEnvelopes: A set of functions for simplifying triangular meshes by\n"
00436 " Jonathan Cohen (cohenj@cs.unc.edu) and Amitabh Varshney\n"
00437 " (varshney@cs.sunysb.edu).\n"
00438 " Copyright 1995 The University of North Carolina at Chapel Hill.\n"
00439 " All Rights Reserved.\n"
00440 "\n"
00441 " Permission to use, copy, modify and distribute this software and its\n"
00442 " documentation for educational, research and non-profit purposes,\n"
00443 " without fee, and without a written agreement is hereby granted,\n"
00444 " provided that the above copyright notice and the following three\n"
00445 " paragraphs appear in all copies.\n"
00446 "\n"
00447 " IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL BE\n"
00448 " LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR\n"
00449 " CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE\n"
00450 " USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY\n"
00451 " OF NORTH CAROLINA HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH\n"
00452 " DAMAGES.\n"
00453 "\n"
00454 "\n"
00455 " Permission to use, copy, modify and distribute this software and its\n"
00456 " documentation for educational, research and non-profit purposes,\n"
00457 " without fee, and without a written agreement is hereby granted,\n"
00458 " provided that the above copyright notice and the following three\n"
00459 " paragraphs appear in all copies.\n"
00460 "\n"
00461 " THE UNIVERSITY OF NORTH CAROLINA SPECIFICALLY DISCLAIM ANY\n"
00462 " WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n"
00463 " MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE\n"
00464 " PROVIDED HEREUNDER IS ON AN 'AS IS' BASIS, AND THE UNIVERSITY OF\n"
00465 " NORTH CAROLINA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,\n"
00466 " UPDATES, ENHANCEMENTS, OR MODIFICATIONS.\n"
00467 "\n"
00468 " The authors may be contacted via:\n"
00469 "\n"
00470 " US Mail: Jonathan Cohen Amitabh Varshney\n"
00471 " Department of Computer Science Department of Computer Science \n"
00472 " Sitterson Hall, CB #3175 State University of New York\n"
00473 " University of N. Carolina Stony Brook, NY 11794-4400, USA \n"
00474 " Chapel Hill, NC 27599-3175\n"
00475 " \n"
00476 " Phone: (919)962-1749 Phone: (516)632-8446 \n"
00477 " \n"
00478 " EMail: cohenj@cs.unc.edu varshney@cs.sunysb.edu\n"
00479 "\n"
00480 "Sample code sources:\n"
00481 "--------------------\n"
00482 "* 'Mastering Algorithms with C': a book by Kyle Loudon, \n"
00483 " published by O'Reilly & Associates. \n"
00484 " This code is under copyright and cannot be included in any other book, publication,\n"
00485 " or educational product without permission from O'Reilly & Associates. No\n"
00486 " warranty is attached; we cannot take responsibility for errors or fitness for\n"
00487 " use.\n"
00488 "\n"
00489 "* 'C Language Algorithms for Digital Signal Processing': a book by \n"
00490 " Bruce Kimball, Paul Embree and Bruce Kimble\n"
00491 " published by Prentice Hall, 1991.\n"
00492 "\n"
00493 "* 'Motif Programming Manual': a book by Dan Heller and Paula Ferguson\n"
00494 " published by O'Reilly & Associates, Inc. 1994\n"
00495 " * Written by Dan Heller and Paula Ferguson.\n"
00496 " * Copyright 1994, O'Reilly & Associates, Inc.\n"
00497 " * Permission to use, copy, and modify this program without\n"
00498 " * restriction is hereby granted, as long as this copyright\n"
00499 " * notice appears in each copy of the program source code.\n"
00500 " * This program is freely distributable without licensing fees and\n"
00501 " * is provided without guarantee or warrantee expressed or implied.\n"
00502 " * This program is -not- in the public domain.\n"
00503 "\n"
00504 "* 'http://astronomy.swin.edu.au/~pbourke': Paul Bourke's personal pages\n"
00505 " on geometry and rendering .\n"
00506 " Copyright notice on webpage: Copyright Paul Bourke or a third party \n"
00507 " contributer where indicated. You may view this site and its contents \n"
00508 " using your web browser. You may print or save an electronic copy of \n"
00509 " parts of this web site for your own personal use. \n"
00510 " Permission must be sought for any other use. \n"
00511 "\n" );
00512
00513 SUMA_SS2S(SS,s);
00514
00515 SUMA_RETURN (s);
00516 }
00517
00518 char * SUMA_help_Cmap_message_Info(SUMA_COLOR_MAP * ColMap)
00519 {
00520 static char FuncName[]={"SUMA_help_message_Info"};
00521 char stmp[1000], *s = NULL;
00522 SUMA_STRING *SS = NULL;
00523
00524 SUMA_ENTRY;
00525
00526 SS = SUMA_StringAppend (NULL, NULL);
00527
00528 s = SUMA_New_Additions (0, 1);
00529 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00530
00531 SS = SUMA_StringAppend (SS,
00532 "\nKeyboard Controls\n"
00533 " r: record image of colormap.\n"
00534 "\n"
00535 " Ctrl+h: this help message\n"
00536 "\n"
00537 " Z: Zoom in.\n"
00538 " Maximum zoom in shows 2 colors in the map\n"
00539 " z: Zoom out.\n"
00540 " Minimum zoom in shows all colors in the map\n"
00541 "\n"
00542 " Up/Down arrows: move colormap up/down.\n"
00543 "\n"
00544 " Home: Reset zoom and translation parameters\n"
00545 "\n");
00546
00547 SS = SUMA_StringAppend (SS,
00548 "\nCmap properties\n");
00549 s = SUMA_ColorMapVec_Info(&ColMap, 1, 1);
00550 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00551
00552
00553 s = SUMA_Help_AllSurfCont();
00554 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00555
00556
00557 SS = SUMA_StringAppend (SS, NULL);
00558
00559 s = SS->s;
00560 SUMA_free(SS);
00561
00562 SUMA_RETURN (s);
00563
00564 }
00565
00566 char * SUMA_help_message_Info(void)
00567 {
00568 static char FuncName[]={"SUMA_help_message_Info"};
00569 char stmp[1000], *s = NULL;
00570 SUMA_STRING *SS = NULL;
00571
00572 SUMA_ENTRY;
00573
00574 SS = SUMA_StringAppend (NULL, NULL);
00575
00576 s = SUMA_New_Additions (0, 1);
00577 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00578
00579 SS = SUMA_StringAppend (SS,
00580 "\nKeyboard Controls (substitute Alt with Apple key on MACs)\n");
00581 SS = SUMA_StringAppend (SS,
00582 " a: attenuation by background, toggle.\n\n");
00583 SS = SUMA_StringAppend (SS,
00584 " B: Backface culling, toggle.\n");
00585 SS = SUMA_StringAppend (SS,
00586 " b: background color, toggle.\n\n");
00587 SS = SUMA_StringAppend (SS,
00588 " c: load a node color file.\n\n");
00589 SS = SUMA_StringAppend (SS,
00590 " Ctrl+d: draw ROI controller.\n\n");
00591 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00592 " d: Show all DO objects in DOv.\n\n");
00593 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00594 " Ctrl+e: Look for OpenGL errors.\n\n");
00595 SS = SUMA_StringAppend (SS,
00596 " F: Flip light position between +z and -z.\n");
00597 SS = SUMA_StringAppend (SS,
00598 " f: functional overlay, toggle.\n\n");
00599 SS = SUMA_StringAppend (SS,
00600 " H: Highlight nodes inside a specified box.\n"
00601 " Does not update other viewers\n"
00602 " Paints into existing colors\n"
00603 " Highlight is wiped out with new\n"
00604 " colors.\n\n");
00605 SS = SUMA_StringAppend (SS,
00606 " h: NO LONGER USED.\n"
00607 " Please use Ctrl+h instead.\n");
00608 SS = SUMA_StringAppend (SS,
00609 " Ctrl+h: help message\n\n");
00610 SS = SUMA_StringAppend (SS,
00611 " J: Set the selected FaceSet on Surface Object\n"
00612 " in Focus. Does not update in other viewers\n"
00613 " or in AFNI.\n");
00614 SS = SUMA_StringAppend (SS,
00615 " j: Set the cross hair to a certain node on \n"
00616 " SO in Focus.\n"
00617 " Does update in other viewers\n"
00618 " if linked by index"
00619 " and AFNI if connected\n");
00620 SS = SUMA_StringAppend (SS,
00621 " Ctrl+j: Set the cross hair's XYZ location. \n"
00622 " Does update in other viewers\n"
00623 " if linked by XYZ"
00624 " and AFNI if connected\n");
00625 SS = SUMA_StringAppend (SS,
00626 " Alt+j: Set the Focus node. \n"
00627 " Cross hair's XYZ remain unchanged.\n"
00628 " Does not update in other viewers\n"
00629 " or in AFNI\n\n");
00630 SS = SUMA_StringAppend (SS,
00631 " L: Light's XYZ coordinates\n");
00632 SS = SUMA_StringAppend (SS,
00633 " l: look at point\n");
00634 SS = SUMA_StringAppend (SS,
00635 " Alt+l: look at cross hair\n");
00636 SS = SUMA_StringAppend (SS,
00637 " Ctrl+l: Switch locking mode for all viewers \n"
00638 " between: No Lock, Index Lock and \n"
00639 " XYZ Lock. The switching is order is \n"
00640 " based on the lock of the first viewer.\n\n");
00641 SS = SUMA_StringAppend (SS,
00642 " Alt+Ctrl+M: Dumps memory trace to file \n"
00643 " called malldump.NNN where NNN\n"
00644 " is the smallest number between\n"
00645 " 001 and 999 that has not been used.\n");
00646 SS = SUMA_StringAppend (SS,
00647 " m: momentum, toggle\n\n");
00648 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00649 " n: bring a node to direct view (does not work AT ALL)\n");
00650 SS = SUMA_StringAppend (SS,
00651 " Ctrl+n: Open a new surface viewer window.\n\n");
00652 SS = SUMA_StringAppend (SS,
00653 " p: Viewer rendering mode \n"
00654 " (Fill, Line, Points), switch.\n\n");
00655 SS = SUMA_StringAppend (SS,
00656 " r: record current image\n"
00657 " in an a la AFNI image viewer.\n"
00658 " Identical images are rejected.\n\n");
00659 SS = SUMA_StringAppend (SS,
00660 " R: Toggle continuous recording \n"
00661 " to an a la AFNI image viewer.\n"
00662 " Identical images are rejected.\n\n");
00663 SS = SUMA_StringAppend (SS,
00664 " s: NO LONGER IN USE. \n"
00665 " View the surface's structure contents.\n"
00666 " Use:View->Surface Controller->More.\n");
00667 SS = SUMA_StringAppend (SS,
00668 " Ctrl+s: Open controller for \n"
00669 " surface in Focus.\n");
00670 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00671 " Ctrl+Alt+s: Input filename with coordinates\n"
00672 " forming a segment (6 values) on \n"
00673 " each line.\n");
00674 SS = SUMA_StringAppend (SS,
00675 " Alt+s: Switch mouse buttons 1 and 3.\n\n");
00676 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00677 " S: Show all surface objects registered in DOv.\n\n");
00678 SS = SUMA_StringAppend (SS,
00679 " t: talk to AFNI, toggle.\n");
00680 SS = SUMA_StringAppend (SS,
00681 " Ctrl+t: Force a resend of \n"
00682 " surfaces to AFNI.\n\n");
00683 SS = SUMA_StringAppend (SS,
00684 " T: Start listening for niml connections\n\n");
00685 SS = SUMA_StringAppend (SS,
00686 " Ctrl+u: Open SUMA controller.\n\n");
00687 SS = SUMA_StringAppend (SS,
00688 " v: NO LONGER IN USE. \n"
00689 " View the viewer's structure contents.\n"
00690 " Use: View->Viewer Controller->More.\n"
00691 "\n");
00692 SS = SUMA_StringAppend (SS,
00693 " w: This option has been dropped.\n"
00694 " Instead, use 'r' or 'R' recording options\n"
00695 " or use a screen grab instead. \n"
00696 " (like xv on unix systems, and grab on Macs.)\n");
00697 SS = SUMA_StringAppend (SS,
00698 " W: Write ascii files containing the NodeList,\n"
00699 " the FaceSetList and the nodecolors of the \n"
00700 " surface in focus.\n\n");
00701 SS = SUMA_StringAppend (SS,
00702 " Z/z: Zoom in/out\n\n");
00703 SS = SUMA_StringAppend (SS,
00704 " [: Show/Hide left hemisphere.\n"
00705 " ]: Show/Hide right hemisphere.\n"
00706 " Window title shows which \n"
00707 " hemispheres are shown :LR:\n"
00708 " :-R: :L-: or :--:\n\n");
00709 SS = SUMA_StringAppend (SS,
00710 " 8: Set the number of smoothing iterations\n"
00711 " to be applied to the foreground colors.\n"
00712 " This setting will be applied to all subsequent\n"
00713 " color sets.\n");
00714 SS = SUMA_StringAppend (SS,
00715 " *: Smooth node colors by averaging with neighbors.\n"
00716 " The smoothing is only applied to the current colors,\n"
00717 " and will be not be applied to new color sets.\n\n");
00718 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00719 " @: Compute curvatures along principal directions \n"
00720 " on the surface, results written to disk.\n\n");
00721 if (SUMAg_CF->Dev) SS = SUMA_StringAppend (SS,
00722 " (: Compute convexity of surface, \n"
00723 " results written to disk.\n\n");
00724 SS = SUMA_StringAppend (SS,
00725 " ,/. (think </>): Switch to next/previous view state.\n\n");
00726 SS = SUMA_StringAppend (SS,
00727 " SPACE: Toggle between Mapping Reference and\n"
00728 " Current view state.\n\n");
00729
00730 SS = SUMA_StringAppend (SS,
00731 " L-R arrows: rotate about screen's Y axis\n");
00732 SS = SUMA_StringAppend (SS,
00733 " U-D arrows: rotate about screen's X axis\n");
00734 SS = SUMA_StringAppend (SS,
00735 " Shift+L-R arrows: translate about screen's \n"
00736 " Y axis\n");
00737 SS = SUMA_StringAppend (SS,
00738 " Shift+U-D arrows: translate about screen's \n"
00739 " X axis\n");
00740 SS = SUMA_StringAppend (SS,
00741 " Ctrl+L-R arrows: LR cardinal views\n");
00742 SS = SUMA_StringAppend (SS,
00743 " Ctrl+U-D arrows: IS cardinal views\n");
00744 SS = SUMA_StringAppend (SS,
00745 " Ctrl+Shift+U-D arrows: AP cardinal views\n\n");
00746
00747 SS = SUMA_StringAppend (SS,
00748 " F1: screen axis (X-Red, Y-Green), toggle. \n");
00749 SS = SUMA_StringAppend (SS,
00750 " F2: surface axis (X-Red, Y-Green, Z-Blue), \n"
00751 " switch. \n");
00752 SS = SUMA_StringAppend (SS,
00753 " F3: cross hair, toggle. \n");
00754 SS = SUMA_StringAppend (SS,
00755 " F4: node selection highlight, toggle. \n");
00756 SS = SUMA_StringAppend (SS,
00757 " F5: FaceSet selection highlight, toggle.\n");
00758 SS = SUMA_StringAppend (SS,
00759 " F6: Viewer background color, toggle.\n");
00760 SS = SUMA_StringAppend (SS,
00761 " F7: Switch between color mixing modes.\n"
00762 " ORIG: Col = ( 1 - opacity ) * OldCol + opacity * NewCol \n"
00763 " MOD1: Col = ( 1 - opacity ) * OldCol + NewCol \n");
00764 SS = SUMA_StringAppend (SS,
00765 " F8: Viewing mode (Perspective or Orthographic Projection), toggle.\n"
00766 );
00767 SS = SUMA_StringAppend (SS,
00768 " F12: Time 20 scene renderings.\n\n");
00769 SS = SUMA_StringAppend (SS,
00770 " HOME: reset view to startup\n\n");
00771 SS = SUMA_StringAppend (SS,
00772 " ESCAPE: close the surface viewer window.\n");
00773 SS = SUMA_StringAppend (SS,
00774 " Shft+ESCAPE: close all surface viewer windows.\n\n");
00775 SS = SUMA_StringAppend (SS,
00776 " Mouse Controls:\n");
00777 SS = SUMA_StringAppend (SS,
00778 " Button 1-Motion: rotation as if you were using\n"
00779 " a trackball.\n");
00780 SS = SUMA_StringAppend (SS,
00781 " Pure vertical motion is equivalent to using \n"
00782 " the up/down arrow keys.\n");
00783 SS = SUMA_StringAppend (SS,
00784 " Pure horizontal motion is equivalent to using \n"
00785 " the left/right arrow keys.\n");
00786 SS = SUMA_StringAppend (SS,
00787 " Of course, the advantage to using the mouse is \n"
00788 " a continuous range of rotation angles and \n");
00789 SS = SUMA_StringAppend (SS,
00790 " simultaneous rotations about the screen's \n"
00791 " X & Y axis.\n");
00792 SS = SUMA_StringAppend (SS,
00793 " This mode of rotation is similar to SGI's \n"
00794 " ivview interface.\n");
00795 SS = SUMA_StringAppend (SS,
00796 " Button 2-Motion: translation\n");
00797 SS = SUMA_StringAppend (SS,
00798 " Button 1+2-Motion OR \n"
00799 " Shift+Button2-Motion: \n"
00800 " Zoom in/out\n");
00801 SS = SUMA_StringAppend (SS,
00802 " Button 3-Press: picking \n");
00803 SS = SUMA_StringAppend (SS,
00804 " shft+Button 3-Press: ROI drawing \n"
00805 " (when in DrawROI mode)\n");
00806 SS = SUMA_StringAppend (SS,
00807 " \n");
00808 SS = SUMA_StringAppend (SS,
00809 " File Menu:\n"
00810 " ->Save View: Save viewer's display settings.\n"
00811 " ->Load View: Load and apply display settings.\n"
00812 " ->Close: Close this viewer.\n"
00813 " Exit SUMA if this is the only viewer.\n");
00814 SS = SUMA_StringAppend (SS,
00815 " View Menu:\n"
00816 " ->SUMA Controller: Open SUMA controller interface.\n"
00817 " ->Surface Controller: Open selected surface's \n"
00818 " controller interface.\n"
00819 " ->Viewer Controller: Open viewer's controller interface.\n"
00820 " --------\n"
00821 " ->Cross Hair: Toggle cross hair display.\n"
00822 " ->Node in Focus: Toggle highlight of selected node.\n"
00823 " ->Selected Faceset: Toggle highlight of selected faceset.\n");
00824 SS = SUMA_StringAppend (SS,
00825 " Tools Menu:\n"
00826 " ->Draw ROI: Open Draw ROI controller.\n");
00827 SS = SUMA_StringAppend (SS,
00828 " Help Menu:\n"
00829 " ->Usage: Opens window with this message.\n"
00830 " ->Message Log: Opens window that will \n"
00831 " contain errors and warnings\n"
00832 " typically output to screen.\n"
00833 " -------\n"
00834 " ->SUMA Global: Output debugging information\n"
00835 " about some of SUMA's global \n"
00836 " structure's variables.\n"
00837 " ->Viewer Struct: Output debugging info on \n"
00838 " a viewer's structure.\n"
00839 " ->Surface Struct: Output debugging info on\n"
00840 " the selected surface's struct.\n"
00841 " -------\n"
00842 " ->InOut Notify: Turn on/off function in/out tracing.\n"
00843 " ->MemTrace: Turn on memory tracing.\n"
00844 " Once turned on, this can't be turned off.\n"
00845 "\n");
00846 SS = SUMA_StringAppend (SS,
00847 " More help at \n"
00848 " http://afni.nimh.nih.gov/ssc/ziad/SUMA/SUMA_doc.htm\n");
00849 SS = SUMA_StringAppend (SS,
00850 "\n");
00851
00852
00853 SS = SUMA_StringAppend (SS, "Current Version Info:\n");
00854 s = SUMA_New_Additions (0, 0);
00855 SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00856
00857
00858 SS = SUMA_StringAppend (SS, NULL);
00859
00860 s = SS->s;
00861 SUMA_free(SS);
00862
00863 SUMA_RETURN (s);
00864
00865 }
00866
00867
00868
00869
00870 void SUMA_help_message(FILE *Out)
00871 {
00872 char *s=NULL;
00873 static char FuncName[]={"SUMA_help_message"};
00874
00875 SUMA_ENTRY;
00876
00877 if (Out == NULL) {
00878 Out = stdout;
00879 }
00880
00881 s = SUMA_help_message_Info();
00882 if (!s) {
00883 fprintf (SUMA_STDERR, "Error %s: Failed in SUMA_help_message_Info.\n", FuncName);
00884 }else {
00885 fprintf (Out, "%s\n", s);
00886 SUMA_free(s);
00887 }
00888
00889 SUMA_RETURNe;
00890 }
00891
00892 char *SUMA_All_Programs(void )
00893 {
00894 char *s=NULL;
00895 static char FuncName[]={"SUMA_All_Programs"};
00896 SUMA_STRING *SS = NULL;
00897
00898 SUMA_ENTRY;
00899
00900 SS = SUMA_StringAppend (NULL, NULL);
00901
00902 SS = SUMA_StringAppend ( SS,
00903 "+ List of programs in the SUMA package:\n"
00904 " 3dCRUISEtoAFNI\n"
00905 " 3dBRAIN_VOYAGERtoAFNI\n"
00906 " 3dSkullStrip\n"
00907 " 3dSurf2Vol\n"
00908 " 3dSurfMask\n"
00909 " 3dVol2Surf\n"
00910 " CompareSurfaces\n"
00911 " ConvertSurface\n"
00912 " ConvexHull\n"
00913 " CreateIcosahedron\n"
00914 " FSread_annot\n"
00915 " inspec\n"
00916 " IsoSurface\n"
00917 " MakeColorMap\n"
00918 " MapIcosahedron\n"
00919 " quickspec\n"
00920 " ROI2dataset\n"
00921 " ScaleToMap\n"
00922 " SUMA_glxdino\n"
00923 " SurfaceMetrics\n"
00924 " SurfClust\n"
00925 " SurfMeasures\n"
00926 " SurfMesh\n"
00927 " SurfPatch\n"
00928 " SurfQual\n"
00929 " SurfSmooth\n"
00930 " SurfToSurf\n"
00931 );
00932
00933
00934 SS = SUMA_StringAppend (SS, NULL);
00935
00936 s = SS->s;
00937 SUMA_free(SS);
00938
00939 SUMA_RETURN(s);
00940
00941 }
00942
00943
00944
00945
00946
00947 void SUMA_Version (FILE *Out)
00948 {
00949 static char FuncName[]={"SUMA_Version"};
00950 char *s = NULL;
00951
00952 if (Out == NULL) {
00953 Out = stdout;
00954 }
00955 s = SUMA_New_Additions (0, 0);
00956 if (s) {
00957 fprintf (Out, "\n %s\n", s);
00958 SUMA_free(s);
00959 } else {
00960 fprintf (Out, "\n");
00961 }
00962
00963 return;
00964 }
00965
00966
00967
00968
00969 void SUMA_VolSurf_help (FILE *Out)
00970 {
00971 if (Out == NULL) {
00972 Out = stdout;
00973 }
00974 fprintf (Out, "SUMA_VolSurf_help: This function is obsolete.\n");
00975 return;
00976 fprintf (Out, "\nVolume <--> Surface jeremiad:\n");
00977 fprintf (Out, "-----------------------------\n");
00978 fprintf (Out, "\tTo transform surface node coordinates to voxel coordinates a few parameters are required.\n");
00979 fprintf (Out, "\tThose paramters vary depending on the type of surfaces used. Currently, SUMA supports \n");
00980 fprintf (Out, "\tFreeSurfer and SureFit surfaces.\n");
00981 fprintf (Out, "\nParent Volume (VolPar):\n");
00982 fprintf (Out, "\tThe surface model is created from a high-resolution anatomical scan\n");
00983 fprintf (Out, "\treferred to as Parent Volume (VolPar).\n");
00984 fprintf (Out, "\tTo align the surface with data from a particular experiment, VolPar must\n");
00985 fprintf (Out, "\tbe brought to alignment with the experiemt's data.\n");
00986 fprintf (Out, "\tFor example, VolPar is aligned with data from experiment Day1 using:\n");
00987 fprintf (Out, "\t3dvolreg -clipit -twopass -twodup -zpad 8 -rotcom -verbose \n");
00988 fprintf (Out, "\t-base SPGR_Day1 -prefix VolPar_Day1 VolMast >>& VolParAlignLog\n");
00989 fprintf (Out, "\twhere SPGR_Day1 is the high-resolution anatomical scan obtained in\n");
00990 fprintf (Out, "\texperiment Day1 and VolPar_Day1 is VolPar aligned to SPGR_Day1.\n");
00991 fprintf (Out, "\nSurface segmentation programs typically require the resolution of VolPar to\n");
00992 fprintf (Out, "\tbe 1x1x1mm. Such volumes, especially for FreeSurfer are quite large and\n");
00993 fprintf (Out, "\t3dvolreg might run out of memory. If that happens, you could resample \n");
00994 fprintf (Out, "\tVolPar to a lower resolution such as 1.2x1.2x1.2mm, prior to registration. \n");
00995 fprintf (Out, "\tNote that SPGR_Day1 must have the same resolution and number of slices as VolPar.\n");
00996 fprintf (Out, "\n\t+FreeSurfer Parent Volume:\n");
00997 fprintf (Out, "\tConstruct VolPar from the .COR images used to create the surface using:\n");
00998 fprintf (Out, "\tto3d -prefix CW-cSurfParent-SPGR -xSLAB 127.5L-R -ySLAB 127.5S-I -zSLAB 127.5P-A COR-???\n");
00999 fprintf (Out, "\tExample command line for a FreeSurfer suface with VolPar aligned to experiment ARzs:\n");
01000 fprintf (Out, "\t./suma -vp CW-cSurfParent-SPGR_Reg2_ARzsspgrax_1mm_256pad_cor_RSP_down12+orig\\\n");
01001 fprintf (Out, "\t -spec CW-FreeSurfer.SumaSpec\n");
01002 fprintf (Out, "\n\t+SureFit Parent Volume:\n");
01003 fprintf (Out, "\tVolPar is the anatomical 1x1x1 mm volume in the correct orientation (LPI) \n");
01004 fprintf (Out, "\tthat is used by SureFit to create the surface. Typically, this volume has \n");
01005 fprintf (Out, "\tthe .Orient string in its name unless it was in LPI orientation from the \n");
01006 fprintf (Out, "\tstart. Because SureFit crops the volume before segmentation, it is also \n");
01007 fprintf (Out, "\tnecessary to supply the .params file along with VolPar. The .params file is \n");
01008 fprintf (Out, "\ttypically named something like: (anything here).L.full.sMRI.params for the \n");
01009 fprintf (Out, "\tleft full hemisphere. Example command line for a SureFit surface with VolPar:\n");
01010 fprintf (Out, "\t./suma -vp colin_short_Orient+orig. colin_short+orig.L.full.sMRI.params\\\n");
01011 fprintf (Out, "\t -s_s colin.fiducial.coord colin.topo");
01012 fprintf (Out, "\nor:\n");
01013 fprintf (Out, "\t./suma -vp CW-cSurfParent-SPGR-AX_LPI+orig. -spec CW-SureFit.SumaSpec\n");
01014 fprintf (Out, "\t\n");
01015 return;
01016 }
01017
01018 char * SUMA_Help_AllSurfCont ()
01019 {
01020 static char FuncName[]={"SUMA_Help_AllSurfCont"};
01021 char *s = NULL;
01022 SUMA_STRING *SS = NULL;
01023
01024 SUMA_ENTRY;
01025
01026 SS = SUMA_StringAppend (NULL, NULL);
01027
01028 SS = SUMA_StringAppend(SS,
01029 "\n"
01030 "\n"
01031 "----------------------------\n"
01032 "Help for Surface Controller:\n"
01033 "----------------------------\n"
01034 "The surface controller is for \n"
01035 "controlling properties pertinent\n"
01036 "to the surface selected (in focus).\n"
01037 "The Surface Controller is launched\n"
01038 "with 'ctrl+s' or \n"
01039 " View-->Surface Controller .\n"
01040 "\n"
01041 );
01042 SS = SUMA_StringAppend_va(SS,
01043 "+ Surface Properties Block:\n"
01044 "\n"
01045 "++ more:\n%s\n"
01046 "\n"
01047 "++ RenderMode:\n%s\n"
01048 "\n"
01049 "++ Dsets:\n%s\n"
01050 "\n",
01051 SUMA_SurfContHelp_more, SUMA_SurfContHelp_RenderMode, SUMA_SurfContHelp_Dsets);
01052 SS = SUMA_StringAppend_va(SS,
01053 "+ Xhair Info Block:\n"
01054 "\n"
01055 "++ Xhr:\n%s\n"
01056 "\n"
01057 "++ Node:\n%s\n"
01058 "\n"
01059 "++ Tri:\n%s\n"
01060 "\n"
01061 "++ Node Values Table: %s\n"
01062 "+++ Col. Intens\n%s\n"
01063 "+++ Col. Thresh\n%s\n"
01064 "+++ Col. Bright:\n%s\n"
01065 "+++ Row Val:\n%s\n"
01066 "\n"
01067 "++ Node Label Table:\n"
01068 "+++ Row Lbl:\n%s\n"
01069 "\n",
01070 SUMA_SurfContHelp_Xhr, SUMA_SurfContHelp_Node, SUMA_SurfContHelp_Tri,
01071 SUMA_SurfContHelp_NodeValTblr0, SUMA_SurfContHelp_NodeValTblc1,
01072 SUMA_SurfContHelp_NodeValTblc2, SUMA_SurfContHelp_NodeValTblc3,
01073 SUMA_SurfContHelp_NodeValTblr0,
01074 SUMA_SurfContHelp_NodeLabelTblr0);
01075
01076 SS = SUMA_StringAppend_va(SS,
01077 "+ Dset Controls Block:\n"
01078 "\n"
01079 "++ Dset Info Table: \n"
01080 "+++ Row Lbl:\n%s\n"
01081 "+++ Row Par:\n%s\n"
01082 "\n"
01083 "++ Ord:\n%s\n"
01084 "\n"
01085 "++ Opa:\n%s\n"
01086 "\n"
01087 "++ Dim:\n%s\n"
01088 "\n"
01089 "++ view:\n%s\n"
01090 "\n"
01091 "++ Switch Dset:\n%s\n"
01092 "\n",
01093 SUMA_SurfContHelp_DsetLblTblr0, SUMA_SurfContHelp_DsetLblTblr1,
01094 SUMA_SurfContHelp_DsetOrd, SUMA_SurfContHelp_DsetOpa, SUMA_SurfContHelp_DsetDim,
01095 SUMA_SurfContHelp_DsetView, SUMA_SurfContHelp_DsetSwitch);
01096
01097 SS = SUMA_StringAppend_va(SS,
01098 "++ Load Dset:\n%s\n"
01099 "\n"
01100 "++ Load Col:\n%s\n"
01101 "\n",
01102 SUMA_SurfContHelp_DsetLoad,
01103 SUMA_SurfContHelp_DsetLoadCol);
01104
01105 SS = SUMA_StringAppend_va(SS,
01106 "+ Dset Mapping Block:\n"
01107 "\n"
01108 "++ Mapping Data: \n"
01109 "\n"
01110 "+++ I\n%s\n"
01111 "++++ v:\n%s\n"
01112 "+++ T\n%s\n"
01113 "++++ v\n%s\n"
01114 "+++ B\n%s\n"
01115 "++++ v\n%s\n"
01116 "\n",
01117 SUMA_SurfContHelp_SelInt, SUMA_SurfContHelp_SelIntTgl,
01118 SUMA_SurfContHelp_SelThr, SUMA_SurfContHelp_SelThrTgl,
01119 SUMA_SurfContHelp_SelBrt, SUMA_SurfContHelp_SelBrtTgl );
01120
01121 SS = SUMA_StringAppend_va(SS,
01122 "++ Mapping Parameters Table:\n%s\n"
01123 "+++ Col. Min\n%s\n"
01124 "+++ Col. Max\n%s\n"
01125 "+++ Row I\n%s\n"
01126 "+++ Row B1\n%s\n"
01127 "+++ Row B2\n%s\n"
01128 "+++ Row C\n%s\n"
01129 "\n",
01130 SUMA_SurfContHelp_SetRngTbl_r0,
01131 SUMA_SurfContHelp_SetRngTbl_c1, SUMA_SurfContHelp_SetRngTbl_c2,
01132 SUMA_SurfContHelp_SetRngTbl_r1, SUMA_SurfContHelp_SetRngTbl_r2,
01133 SUMA_SurfContHelp_SetRngTbl_r3, SUMA_SurfContHelp_SetRngTbl_r4);
01134
01135 SS = SUMA_StringAppend_va(SS,
01136 "++ Col\n%s\n"
01137 "\n"
01138 "++ Bias\n%s\n"
01139 "\n"
01140 "Cmp\n%s\n"
01141 "\n"
01142 "New\n%s\n"
01143 "\n"
01144 "|T|\n%s\n"
01145 "\n"
01146 "sym I\n%s\n"
01147 "\n"
01148 "shw 0\n%s\n"
01149 "\n",
01150 SUMA_SurfContHelp_Col, SUMA_SurfContHelp_Bias, SUMA_SurfContHelp_Cmp,
01151 SUMA_SurfContHelp_CmpNew, SUMA_SurfContHelp_AbsThr, SUMA_SurfContHelp_Isym,
01152 SUMA_SurfContHelp_Shw0);
01153
01154 SS = SUMA_StringAppend_va(SS,
01155 "++ Data Range Table:\n%s\n"
01156 "\n"
01157 "+++ Col Min\n%s\n"
01158 "+++ Col Node\n%s\n"
01159 "+++ Col Max\n%s\n"
01160 "+++ Col Node\n%s\n"
01161 "+++ Row I\n%s\n"
01162 "+++ Row T\n%s\n"
01163 "+++ Row B\n%s\n",
01164 SUMA_SurfContHelp_RangeTbl_c0,
01165 SUMA_SurfContHelp_RangeTbl_c1, SUMA_SurfContHelp_RangeTbl_c2,
01166 SUMA_SurfContHelp_RangeTbl_c3, SUMA_SurfContHelp_RangeTbl_c4,
01167 SUMA_SurfContHelp_RangeTbl_r1, SUMA_SurfContHelp_RangeTbl_r2,
01168 SUMA_SurfContHelp_RangeTbl_r3);
01169
01170
01171 SUMA_SS2S(SS, s);
01172
01173 SUMA_RETURN(s);
01174 }