#define DEBUG_1 #ifdef DEBUG_1 #define DEBUG_2 #define DEBUG_3 #endif /* Header FILES */ #include "SUMA_suma.h" /* CODE */ SUMA_SurfaceViewer *SUMAg_cSV; /*!< Global pointer to current Surface Viewer structure*/ SUMA_SurfaceViewer *SUMAg_SVv; /*!< Global pointer to the vector containing the various Surface Viewer Structures */ int SUMAg_N_SVv; /*!< Number of SVs stored in SVv */ SUMA_DO *SUMAg_DOv; /*!< Global pointer to Displayable Object structure vector*/ int SUMAg_N_DOv = 0; /*!< Number of DOs stored in DOv */ SUMA_CommonFields *SUMAg_CF; /*!< Global pointer to structure containing info common to all viewers */ void SUMA_usage () {/*Usage*/ printf ("\n\33[1mUsage: \33[0m SUMA \n\t-spec [-sv ] [-ah AfniHost]\n\n"); printf ("\n\t-spec : File containing surface specification. This file is typically \n"); printf ("\n\t generated by @SUMA_Make_Spec_FS (for FreeSurfer surfaces) or \n"); printf ("\n\t @SUMA_Make_Spec_SF (for SureFit surfaces). The Spec file should \n"); printf ("\n\t be located in the directory containing the surfaces.\n"); printf ("\n\t[-sv ]: Anatomical volume used in creating the surface and registerd to \n"); printf ("\n\t the current experiment's anatomical volume (using @SUMA_AlignToExperiment).\n"); printf ("\n\t This parameter is optional but linking to AFNI is impossible without it.\n"); printf ("\n\t[-ah ]: Name (or IP address) of the computer running AFNI. This parameter is \n"); printf ("\n\t optional, the default is localhost.\n"); /* printf ("\n\t[-dev]: This option will give access to options that are not well polished for consuption.\n"); printf ("\n\t \n"); */ /*SUMA_VolSurf_help(NULL); OBSOLETE */ printf ("\n\n\tFor help on interacting with SUMA, press 'h' with the mouse pointer inside SUMA's window.\n"); printf ("\n\n\tFor more help: http://afni.nimh.nih.gov/ssc/ziad/SUMA/SUMA_doc.htm\n"); printf ("\n\n\tIf you can't get help here, please get help somewhere.\n"); SUMA_Version(NULL); printf ("\n\t Ziad S. Saad SSCC/NIMH/NIH saadz@mail.nih.gov \n\n"); exit (0); }/*Usage*/ /*!\** File : SUMA.c \author : Ziad Saad Date : Thu Dec 27 16:21:01 EST 2001 Purpose : Input paramters : \param \param Usage : SUMA ( ) Returns : \return \return Support : \sa OpenGL prog. Guide 3rd edition \sa varray.c from book's sample code Side effects : ***/ int main (int argc,char *argv[]) {/* Main */ static char FuncName[]={"SUMA"}; int kar; SUMA_SFname *SF_name; SUMA_Boolean brk, SurfIn; char *VolParName, *NameParam, *specfilename = NULL, *AfniHostName; SUMA_SurfSpecFile Spec; SUMA_Axis *EyeAxis; if (argc < 3) { SUMA_usage (); exit (1); } /* allocate space for CommonFields structure */ SUMAg_CF = SUMA_Create_CommonFields (); if (SUMAg_CF == NULL) { fprintf(SUMA_STDERR,"Error %s: Failed in SUMA_Create_CommonFields\n", FuncName); exit(1); } /* initialize Volume Parent and AfniHostName to nothing */ VolParName = NULL; AfniHostName = NULL; /* Allocate space for DO structure */ SUMAg_DOv = SUMA_Alloc_DisplayObject_Struct (SUMA_MAX_DISPLAYABLE_OBJECTS); /* read in the surfaces */ kar = 1; brk = NOPE; SurfIn = NOPE; while (kar < argc) { /* loop accross command ine options */ /*fprintf(stdout, "%s verbose: Parsing command line...\n", FuncName);*/ if (strcmp(argv[kar], "-h") == 0 || strcmp(argv[kar], "-help") == 0) { SUMA_usage (); exit (1); } if (!brk && (strcmp(argv[kar], "-dev") == 0)) { fprintf(SUMA_STDOUT,"Warning %s: SUMA running in developer mode, some options may malfunction.\n", FuncName); SUMAg_CF->Dev = YUP; brk = YUP; } if (!brk && (strcmp(argv[kar], "-vp") == 0 || strcmp(argv[kar], "-sa") == 0 || strcmp(argv[kar], "-sv") == 0)) { kar ++; if (kar >= argc) { fprintf (SUMA_STDERR, "need argument after -vp|-sa|-sv "); exit (1); } VolParName = argv[kar]; /*fprintf(SUMA_STDOUT, "Found: %s\n", VolParName);*/ brk = YUP; } if (!brk && strcmp(argv[kar], "-ah") == 0) { kar ++; if (kar >= argc) { fprintf (SUMA_STDERR, "need argument after -ah "); exit (1); } AfniHostName = argv[kar]; /*fprintf(SUMA_STDOUT, "Found: %s\n", AfniHostName);*/ brk = YUP; } if (!brk && strcmp(argv[kar], "-spec") == 0) { kar ++; if (kar >= argc) { fprintf (SUMA_STDERR, "need argument after -spec "); exit (1); } specfilename = argv[kar]; /*fprintf(SUMA_STDOUT, "Found: %s\n", specfilename);*/ brk = YUP; } if (!brk) { fprintf (SUMA_STDERR,"Error %s: Option %s not understood. Try -help for usage\n", FuncName, argv[kar]); exit (1); } else { brk = NOPE; kar ++; } }/* loop accross command ine options */ if (specfilename == NULL) { fprintf (SUMA_STDERR,"Error %s: No spec filename specified.\n", FuncName); exit(1); } if(!SUMA_Assign_HostName (SUMAg_CF, AfniHostName, -1)) { fprintf (SUMA_STDERR, "Error %s: Failed in SUMA_Assign_HostName", FuncName); exit (1); } /* load the specs file and the specified surfaces*/ /* Load The spec file */ if (!SUMA_Read_SpecFile (specfilename, &Spec)) { fprintf(SUMA_STDERR,"Error %s: Error in SUMA_Read_SpecFile\n", FuncName); exit(1); } /* make sure only one group was read in */ if (Spec.N_Groups != 1) { fprintf(SUMA_STDERR,"Error %s: One and only one group of surfaces is allowed at the moment (%d found).\n", FuncName, Spec.N_Groups); exit(1); } /* load the surfaces specified in the specs file, one by one*/ if (!SUMA_LoadSpec (&Spec, SUMAg_DOv, &SUMAg_N_DOv, VolParName)) { fprintf(SUMA_STDERR,"Error %s: Failed in SUMA_LoadSpec.\n", FuncName); exit(1); } /* create an Eye Axis DO */ EyeAxis = SUMA_Alloc_Axis ("Eye Axis"); if (EyeAxis == NULL) { SUMA_error_message (FuncName,"Error Creating Eye Axis",1); exit(1); } /* Store it into SUMAg_DOv */ if (!SUMA_AddDO(SUMAg_DOv, &SUMAg_N_DOv, (void *)EyeAxis, AO_type, SUMA_SCREEN)) { SUMA_error_message (FuncName,"Error Adding DO", 1); exit(1); } /*fprintf (SUMA_STDERR, "SUMAg_N_DOv = %d created\n", SUMAg_N_DOv);*/ /* Allocate space (and initialize) Surface Viewer Structure */ SUMAg_SVv = SUMA_Alloc_SurfaceViewer_Struct (SUMA_MAX_SURF_VIEWERS); /* Check on initialization */ /*SUMA_Show_SurfaceViewer_Struct (SUMAg_cSV, stdout);*/ /* Register the surfaces in Spec file with the surface viewer and perform setups */ for (kar = 0; kar < SUMA_MAX_SURF_VIEWERS; ++kar) { if (!SUMA_SetupSVforDOs (Spec, SUMAg_DOv, SUMAg_N_DOv, &SUMAg_SVv[kar], 0)) { fprintf (SUMA_STDERR, "Error %s: Failed in SUMA_SetupSVforDOs function.\n", FuncName); exit (1); } } /* Create the Surface Viewer Window */ if (!SUMA_X_SurfaceViewer_Create ()) { fprintf(stderr,"Error in SUMA_X_SurfaceViewer_Create. Exiting\n"); return 1; } /* One Surface Viewer created and initialized */ SUMAg_N_SVv += 1; /*Main loop */ XtAppMainLoop(SUMAg_CF->App); /* Done, clean up time */ if (!SUMA_Free_Displayable_Object_Vect (SUMAg_DOv, SUMAg_N_DOv)) SUMA_error_message(FuncName,"DO Cleanup Failed!",1); if (!SUMA_Free_SurfaceViewer_Struct_Vect (SUMAg_SVv, SUMAg_N_SVv)) SUMA_error_message(FuncName,"SUMAg_SVv Cleanup Failed!",1); if (!SUMA_Free_CommonFields(SUMAg_CF)) SUMA_error_message(FuncName,"SUMAg_CF Cleanup Failed!",1); return 0; /* ANSI C requires main to return int. */ }/* Main */