Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

SUMA_help.c

Go to the documentation of this file.
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    \brief Returns a string with the new additions and version information
00019    
00020    \param ver (float) v (v > 0) for info on version v alone 
00021                       0.0 just the latest version info
00022                       -1.0 for all versions
00023    \param StampOnly (SUMA_Boolean) Want version number and time stamp only ?
00024                       
00025    \return s (char *) the string, yall have to free it with SUMA_free
00026    \sa SUMA_New_Additions_perver
00027    
00028    - To add a new version, you must add a case statement in SUMA_New_Additions_perver
00029      AND add the version number in the beginning of SUMA_VERSION_VECTOR  in SUMA_DataSets.h
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) { /* just the latest */
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       /* all history */
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       /* just for ver */
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    /* add the CVS tag */
00072    SS = SUMA_StringAppend_va (SS, "\nCVS tag:\n   %s\n", SUMA_VERSION_LABEL);
00073    
00074    /* add the compile date */
00075    SS = SUMA_StringAppend_va (SS, "\nCompile Date:\n   %s\n",__DATE__);
00076    
00077    /* clean SS */
00078    SS = SUMA_StringAppend (SS, NULL);
00079    /* copy s pointer and free SS */
00080    s = SS->s;
00081    SUMA_free(SS); 
00082    
00083    SUMA_RETURN(s);      
00084    
00085 }
00086 
00087  
00088 /*!
00089    \brief Returns a string with version information
00090    \param ver (float) Version number
00091    \param StampOnly (SUMA_Boolean) if YUP 
00092                      then return the time stamp of the version only)
00093    \return s (char *) the string, yall have to free it with SUMA_free
00094    \sa SUMA_New_Additions
00095    
00096    - To add a new version, you must add a case statement in SUMA_New_Additions_perver
00097      AND add the version number in the beginning of SUMA_VERSION_VECTOR  in SUMA_DataSets.h
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       /* Must modify verv in SUMA_New_Additions when you touch this block */
00112       /*
00113       case XX:
00114          SS = SUMA_StringAppend_va(SS, 
00115             "++ SUMA version %s\n", SUMA_ver2date(ver)); if (StampOnly) break;
00116          SS = SUMA_StringAppend(SS, 
00117             "New Programs:\n"
00118             "  + \n"
00119             "Modifications:\n"
00120             "  + \n");
00121          break; 
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:   /* used to be 25000 */
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:    /* used to be 24800 */
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:    /* used to be 24500 */
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    /* clean SS */
00258    SS = SUMA_StringAppend (SS, NULL);
00259    /* copy s pointer and free SS */
00260    s = SS->s;
00261    SUMA_free(SS); 
00262    
00263    SUMA_RETURN(s);
00264 }
00265 
00266 /*!
00267    \brief function called when help window is open
00268 */
00269 void SUMA_Help_open (void *p)
00270 {
00271    static char FuncName[]={"SUMA_Help_open"};
00272 
00273    SUMA_ENTRY;
00274    /* nothing to do here */
00275    
00276    SUMA_RETURNe;
00277 }
00278 
00279 /*!
00280    \brief function called when help window is destroyed
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    \brief function called when help window is open
00294 */
00295 void SUMA_Help_Cmap_open (void *p)
00296 {
00297    static char FuncName[]={"SUMA_Help_Cmap_open"};
00298 
00299    SUMA_ENTRY;
00300    /* nothing to do here */
00301    
00302    SUMA_RETURNe;
00303 }
00304 
00305 /*!
00306    \brief function called when help window is destroyed
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    \brief function called when Message window is open
00321 */
00322 void SUMA_Message_open (void *p)
00323 {
00324    static char FuncName[]={"SUMA_Message_open"};
00325 
00326    SUMA_ENTRY;
00327    /* nothing to do here */
00328    
00329    SUMA_RETURNe;
00330 }
00331 
00332 /*!
00333    \brief function called when Message window is destroyed
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    /* Add help for all controller options */
00553    s = SUMA_Help_AllSurfCont();
00554    SS = SUMA_StringAppend (SS, s); SUMA_free(s); s = NULL;
00555    
00556    /* clean SS */
00557    SS = SUMA_StringAppend (SS, NULL);
00558    /* copy s pointer and free SS */
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    /* add latest additions */
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    /* clean SS */
00858    SS = SUMA_StringAppend (SS, NULL);
00859    /* copy s pointer and free SS */
00860    s = SS->s;
00861    SUMA_free(SS); 
00862    
00863    SUMA_RETURN (s);
00864 
00865 }
00866 
00867 /*!
00868 Controls help message
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    /* clean SS */
00934    SS = SUMA_StringAppend (SS, NULL);
00935    /* copy s pointer and free SS */
00936    s = SS->s;
00937    SUMA_free(SS); 
00938    
00939    SUMA_RETURN(s);      
00940    
00941 }
00942 
00943 /*!
00944 SUMA version 
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 Surface .. Volume relationships
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 }
 

Powered by Plone

This site conforms to the following standards: