Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
SUMA.c
Go to the documentation of this file.00001 #define DEBUG_1
00002 #ifdef DEBUG_1
00003         #define DEBUG_2
00004         #define DEBUG_3
00005 #endif
00006    
00007 
00008    
00009 #include "SUMA_suma.h"
00010 
00011 
00012 
00013 
00014 SUMA_SurfaceViewer *SUMAg_cSV; 
00015 SUMA_SurfaceViewer *SUMAg_SVv; 
00016 int SUMAg_N_SVv; 
00017 SUMA_DO *SUMAg_DOv;     
00018 int SUMAg_N_DOv = 0; 
00019 SUMA_CommonFields *SUMAg_CF; 
00020 
00021 void SUMA_usage ()
00022    
00023   {
00024           printf ("\n\33[1mUsage: \33[0m SUMA \n\t-spec <Spec file> [-sv <SurfVol>] [-ah AfniHost]\n\n");
00025                          printf ("\n\t-spec <Spec file>: File containing surface specification. This file is typically \n");
00026                          printf ("\n\t                   generated by @SUMA_Make_Spec_FS (for FreeSurfer surfaces) or \n");
00027                          printf ("\n\t                   @SUMA_Make_Spec_SF (for SureFit surfaces). The Spec file should \n");
00028                          printf ("\n\t                   be located in the directory containing the surfaces.\n");
00029                          printf ("\n\t[-sv <SurfVol>]: Anatomical volume used in creating the surface and registerd to \n");
00030                          printf ("\n\t                 the current experiment's anatomical volume (using @SUMA_AlignToExperiment).\n");
00031                          printf ("\n\t                 This parameter is optional but linking to AFNI is impossible without it.\n");
00032                          printf ("\n\t[-ah <AfniHost>]: Name (or IP address) of the computer running AFNI. This parameter is \n");
00033                          printf ("\n\t                  optional, the default is localhost.\n");
00034                          
00035 
00036 
00037 
00038                          
00039                          printf ("\n\n\tFor help on interacting with SUMA, press 'h' with the mouse pointer inside SUMA's window.\n");
00040                          printf ("\n\n\tFor more help: http://afni.nimh.nih.gov/ssc/ziad/SUMA/SUMA_doc.htm\n");
00041                          printf ("\n\n\tIf you can't get help here, please get help somewhere.\n");
00042                          SUMA_Version(NULL);
00043                          
00044           printf ("\n\t Ziad S. Saad SSCC/NIMH/NIH ziad@nih.gov \n\n");
00045           exit (0);
00046   }
00047      
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 
00080 
00081 
00082 int main (int argc,char *argv[])
00083 {
00084    static char FuncName[]={"SUMA"}; 
00085         int kar;
00086         SUMA_SFname *SF_name;
00087         SUMA_Boolean brk, SurfIn;
00088         char *VolParName, *NameParam, *specfilename = NULL, *AfniHostName;
00089         SUMA_SurfSpecFile Spec;   
00090         SUMA_Axis *EyeAxis;     
00091   
00092    if (argc < 3)
00093        {
00094           SUMA_usage ();
00095           exit (1);
00096        }
00097                 
00098         
00099         SUMAg_CF = SUMA_Create_CommonFields ();
00100         if (SUMAg_CF == NULL) {
00101                 fprintf(SUMA_STDERR,"Error %s: Failed in SUMA_Create_CommonFields\n", FuncName);
00102                 exit(1);
00103         }
00104         
00105         
00106         VolParName = NULL;
00107         AfniHostName = NULL; 
00108         
00109         
00110         SUMAg_DOv = SUMA_Alloc_DisplayObject_Struct (SUMA_MAX_DISPLAYABLE_OBJECTS);
00111         
00112         
00113         kar = 1;
00114         brk = NOPE;
00115         SurfIn = NOPE;
00116         while (kar < argc) { 
00117                 
00118                 if (strcmp(argv[kar], "-h") == 0 || strcmp(argv[kar], "-help") == 0) {
00119                         SUMA_usage ();
00120           exit (1);
00121                 }
00122                 
00123                 if (!brk && (strcmp(argv[kar], "-dev") == 0)) {
00124                         fprintf(SUMA_STDOUT,"Warning %s: SUMA running in developer mode, some options may malfunction.\n", FuncName);
00125                         SUMAg_CF->Dev = YUP;
00126                         brk = YUP;
00127                 }
00128                 
00129                 if (!brk && (strcmp(argv[kar], "-vp") == 0 || strcmp(argv[kar], "-sa") == 0 || strcmp(argv[kar], "-sv") == 0))
00130                 {
00131                         kar ++;
00132                         if (kar >= argc)  {
00133                                 fprintf (SUMA_STDERR, "need argument after -vp|-sa|-sv ");
00134                                 exit (1);
00135                         }
00136                         VolParName = argv[kar];
00137                         
00138 
00139                         brk = YUP;
00140                 }               
00141                 
00142                 if (!brk && strcmp(argv[kar], "-ah") == 0)
00143                 {
00144                         kar ++;
00145                         if (kar >= argc)  {
00146                                 fprintf (SUMA_STDERR, "need argument after -ah ");
00147                                 exit (1);
00148                         }
00149                         AfniHostName = argv[kar];
00150                         
00151 
00152                         brk = YUP;
00153                 }       
00154                 if (!brk && strcmp(argv[kar], "-spec") == 0)
00155                 { 
00156                         kar ++;
00157                   if (kar >= argc)  {
00158                                 fprintf (SUMA_STDERR, "need argument after -spec ");
00159                                 exit (1);
00160                         }
00161                         
00162                         specfilename = argv[kar];
00163                         
00164                         brk = YUP;
00165                 } 
00166                 
00167 
00168                 if (!brk) {
00169                         fprintf (SUMA_STDERR,"Error %s: Option %s not understood. Try -help for usage\n", FuncName, argv[kar]);
00170                         exit (1);
00171                 } else {        
00172                         brk = NOPE;
00173                         kar ++;
00174                 }
00175                 
00176         }
00177 
00178         
00179         if (specfilename == NULL) {
00180                 fprintf (SUMA_STDERR,"Error %s: No spec filename specified.\n", FuncName);
00181                 exit(1);
00182         }
00183 
00184         if(!SUMA_Assign_HostName (SUMAg_CF, AfniHostName, -1)) {
00185                 fprintf (SUMA_STDERR, "Error %s: Failed in SUMA_Assign_HostName", FuncName);
00186                 exit (1);
00187         }
00188         
00189         
00190                 
00191                 if (!SUMA_Read_SpecFile (specfilename, &Spec)) {
00192                         fprintf(SUMA_STDERR,"Error %s: Error in SUMA_Read_SpecFile\n", FuncName);
00193                         exit(1);
00194                 }       
00195 
00196                 
00197                 if (Spec.N_Groups != 1) {
00198                         fprintf(SUMA_STDERR,"Error %s: One and only one group of surfaces is allowed at the moment (%d found).\n", FuncName, Spec.N_Groups);
00199                         exit(1);
00200                 }
00201                 
00202                                   
00203                 if (!SUMA_LoadSpec (&Spec, SUMAg_DOv, &SUMAg_N_DOv, VolParName)) {
00204                         fprintf(SUMA_STDERR,"Error %s: Failed in SUMA_LoadSpec.\n", FuncName);
00205                         exit(1);
00206                 }
00207         
00208         
00209         EyeAxis = SUMA_Alloc_Axis ("Eye Axis");
00210         if (EyeAxis == NULL) {
00211                 SUMA_error_message (FuncName,"Error Creating Eye Axis",1);
00212                 exit(1);
00213         }
00214 
00215         
00216         if (!SUMA_AddDO(SUMAg_DOv, &SUMAg_N_DOv, (void *)EyeAxis,  AO_type, SUMA_SCREEN)) {
00217                 SUMA_error_message (FuncName,"Error Adding DO", 1);
00218                 exit(1);
00219         }
00220         
00221 
00222 
00223         
00224         SUMAg_SVv = SUMA_Alloc_SurfaceViewer_Struct (SUMA_MAX_SURF_VIEWERS);
00225 
00226         
00227         
00228 
00229         
00230         for (kar = 0; kar < SUMA_MAX_SURF_VIEWERS; ++kar) {
00231                 if (!SUMA_SetupSVforDOs (Spec, SUMAg_DOv, SUMAg_N_DOv, &SUMAg_SVv[kar])) {
00232                         fprintf (SUMA_STDERR, "Error %s: Failed in SUMA_SetupSVforDOs function.\n", FuncName);
00233                         exit (1);
00234                 }
00235         }
00236         
00237         
00238         if (!SUMA_X_SurfaceViewer_Create ()) {
00239                 fprintf(stderr,"Error in SUMA_X_SurfaceViewer_Create. Exiting\n");
00240                 return 1;
00241         }
00242         
00243         SUMAg_N_SVv += 1;
00244           
00245 
00246         
00247         XtAppMainLoop(SUMAg_CF->App);
00248 
00249         
00250         
00251           
00252         if (!SUMA_Free_Displayable_Object_Vect (SUMAg_DOv, SUMAg_N_DOv)) SUMA_error_message(FuncName,"DO Cleanup Failed!",1);
00253         if (!SUMA_Free_SurfaceViewer_Struct_Vect (SUMAg_SVv, SUMAg_N_SVv)) SUMA_error_message(FuncName,"SUMAg_SVv Cleanup Failed!",1);
00254         if (!SUMA_Free_CommonFields(SUMAg_CF)) SUMA_error_message(FuncName,"SUMAg_CF Cleanup Failed!",1);
00255   return 0;             
00256 } 
00257 
00258