1 #ifndef SUMA_PARSECOMMANDS_INCLUDED 2 #define SUMA_PARSECOMMANDS_INCLUDED 3 4 /* structures to be used by most command line programs */ 5 #define SUMA_GENERIC_PROG_MAX_SURF 10 /*!< Maximum number of surfaces allowed*/ 6 #define SUMA_GENERIC_PROG_MAX_IN_NAME 500 /*!< Maximum number of input dsets allowed*/ 7 8 #define SUMA_MAX_SURF_ON_COMMAND 1000 9 #define SUMA_MAX_DSET_ON_COMMAND 1000 10 #define SUMA_MAX_DO_ON_COMMAND 100 11 #define SUMA_N_ARGS_MAX 1000 12 #define SUMA_VIEW_LENGTH 5 13 14 typedef struct { 15 /* spec related input */ 16 char *spec_names[SUMA_MAX_SURF_ON_COMMAND]; 17 int N_spec_names; 18 19 char *s_surfnames[SUMA_MAX_SURF_ON_COMMAND]; 20 char *s_surfprefix[SUMA_MAX_SURF_ON_COMMAND]; 21 char *s_surfpath[SUMA_MAX_SURF_ON_COMMAND]; 22 int s_N_surfnames; 23 24 /* -i_ related input */ 25 char *i_surfnames[SUMA_MAX_SURF_ON_COMMAND]; 26 char *i_surftopo[SUMA_MAX_SURF_ON_COMMAND]; 27 char *i_surfpath[SUMA_MAX_SURF_ON_COMMAND]; 28 char *i_surfprefix[SUMA_MAX_SURF_ON_COMMAND]; 29 char *i_state[SUMA_MAX_SURF_ON_COMMAND]; 30 char *i_group[SUMA_MAX_SURF_ON_COMMAND]; 31 int i_anatomical[SUMA_MAX_SURF_ON_COMMAND]; 32 int i_N_surfnames; 33 int i_DO_type[SUMA_MAX_SURF_ON_COMMAND]; 34 SUMA_SO_File_Format i_FF[SUMA_MAX_SURF_ON_COMMAND]; 35 SUMA_SO_File_Type i_FT[SUMA_MAX_SURF_ON_COMMAND]; 36 37 /* -ipar_ related input */ 38 char *ipar_surfnames[SUMA_MAX_SURF_ON_COMMAND]; 39 char *ipar_surftopo[SUMA_MAX_SURF_ON_COMMAND]; 40 char *ipar_surfpath[SUMA_MAX_SURF_ON_COMMAND]; 41 char *ipar_surfprefix[SUMA_MAX_SURF_ON_COMMAND]; 42 char *ipar_state[SUMA_MAX_SURF_ON_COMMAND]; 43 char *ipar_group[SUMA_MAX_SURF_ON_COMMAND]; 44 int ipar_anatomical[SUMA_MAX_SURF_ON_COMMAND]; 45 int ipar_N_surfnames; 46 SUMA_SO_File_Format ipar_FF[SUMA_MAX_SURF_ON_COMMAND]; 47 SUMA_SO_File_Type ipar_FT[SUMA_MAX_SURF_ON_COMMAND]; 48 49 /* -o_related input */ 50 char *o_surfnames[SUMA_MAX_SURF_ON_COMMAND]; 51 char *o_surftopo[SUMA_MAX_SURF_ON_COMMAND]; 52 char *o_surfpath[SUMA_MAX_SURF_ON_COMMAND]; 53 char *o_surfprefix[SUMA_MAX_SURF_ON_COMMAND]; 54 char *o_state[SUMA_MAX_SURF_ON_COMMAND]; 55 char *o_group[SUMA_MAX_SURF_ON_COMMAND]; 56 int o_anatomical[SUMA_MAX_SURF_ON_COMMAND]; 57 int o_N_surfnames; 58 SUMA_SO_File_Format o_FF[SUMA_MAX_SURF_ON_COMMAND]; 59 SUMA_SO_File_Type o_FT[SUMA_MAX_SURF_ON_COMMAND]; 60 61 /* -t_related input */ 62 char *t_surfnames[SUMA_MAX_SURF_ON_COMMAND]; 63 char *t_surftopo[SUMA_MAX_SURF_ON_COMMAND]; 64 char *t_surfpath[SUMA_MAX_SURF_ON_COMMAND]; 65 char *t_surfprefix[SUMA_MAX_SURF_ON_COMMAND]; 66 char *t_state[SUMA_MAX_SURF_ON_COMMAND]; 67 char *t_group[SUMA_MAX_SURF_ON_COMMAND]; 68 int t_anatomical[SUMA_MAX_SURF_ON_COMMAND]; 69 int t_N_surfnames; 70 SUMA_SO_File_Format t_FF[SUMA_MAX_SURF_ON_COMMAND]; 71 SUMA_SO_File_Type t_FT[SUMA_MAX_SURF_ON_COMMAND]; 72 73 byte arg_checked[SUMA_N_ARGS_MAX]; 74 int N_args; 75 char *sv[SUMA_MAX_SURF_ON_COMMAND]; 76 int N_sv; 77 char *vp[SUMA_MAX_SURF_ON_COMMAND]; 78 int N_vp; 79 80 /* -talk_suma options */ 81 SUMA_COMM_STRUCT *cs; 82 83 /* mask fields */ 84 char *cmask ; 85 char *bmaskname ; 86 char *nmaskname ; 87 88 /* dsets */ 89 char *dsetname[SUMA_MAX_DSET_ON_COMMAND]; 90 int N_dsetname; 91 92 /* DOs */ 93 char *DO_name[SUMA_MAX_DO_ON_COMMAND]; 94 int N_DO; 95 int DO_type[SUMA_MAX_DO_ON_COMMAND]; 96 97 /* flags for what to read */ 98 byte accept_t; 99 byte accept_s; 100 byte accept_i; 101 byte onestate; /* if 1, All -i surfaces will have the same state */ 102 int anatomical; /* if 1, All -i, -t surfs will be deemed anat. correct */ 103 byte accept_ipar; 104 byte accept_o; 105 byte accept_spec; 106 byte accept_sv; 107 byte accept_talk_suma; 108 byte check_input_surf; 109 byte accept_mask; 110 byte accept_dset; 111 byte accept_do; 112 byte accept_cmap; 113 114 /* flags for help */ 115 byte hverb; /* help verbosity */ 116 117 /* flags for cmap selection */ 118 char *cmap; 119 char *cmapfile; 120 char *cmapdb; 121 122 // Other flags 123 Boolean verbose; 124 125 } SUMA_GENERIC_ARGV_PARSE; 126 127 typedef struct { 128 SUMA_SO_File_Type iType; 129 char *sv_name; /* do not free, argv[.] copy */ 130 char *surf_names[SUMA_GENERIC_PROG_MAX_SURF];/* do not free, argv[.] copy */ 131 int N_surf; 132 char *spec_file; /* do not free, argv[.] copy */ 133 char *in_name; /* do not free, argv[.] copy */ 134 char *in_namev[SUMA_GENERIC_PROG_MAX_IN_NAME];/*whole bunch of input files*/ 135 int n_in_namev; 136 char *surftype; /* do not free, argv[.] copy */ 137 char *out_prefix; /* this one's dynamically allocated so 138 you'll have to free it yourself */ 139 SUMA_DSET_FORMAT oform; 140 141 char *out_vol_prefix; /* this one's dynamically allocated so 142 you'll have to free it yourself */ 143 char out_vol_view[SUMA_VIEW_LENGTH]; 144 int out_vol_exists; 145 char *out_grid_prefix; /* this one's dynamically allocated so 146 you'll have to free it yourself */ 147 char out_grid_view[SUMA_VIEW_LENGTH]; 148 int out_grid_exists; 149 char *in_vol_prefix; /* this one's dynamically allocated 150 so you'll have to free it yourself */ 151 char in_vol_view[SUMA_VIEW_LENGTH]; 152 int in_vol_exists; 153 int MaskMode; 154 char *cmask; 155 char *dmask; 156 THD_3dim_dataset *in_vol; 157 float VolCM[3]; /* input volume's center of mass */ 158 float *mcfv; /* the dataset that is passed to the 159 marching cube algorithm */ 160 int debug; 161 int ninmask; 162 int fix_winding; 163 float v0; 164 float v1; 165 int nvox; 166 float *fvec; 167 int n_fvec; 168 int fvec_dim; 169 double *dvec; 170 int obj_type; 171 int obj_type_res; 172 int xform; 173 SUMA_SO_File_Format SurfFileFormat; 174 SUMA_SO_File_Type SurfFileType; 175 /* following fields are intended for use in ConvexHull only */ 176 char *in_1D; /* name of 1D file containing XYZ coords */ 177 float *XYZ; /* a 3*N_XYZ vector of XYZ coordinates. 178 This vector should be freed at the end*/ 179 int N_XYZ; /* number of points in XYZ */ 180 /* following fields are intended for use in BrainWarp only */ 181 float ExpFrac; /* a fraction (0.01) used to control the rate of expansion of 182 the surface (see su3 variable in SUMA_StretchToFitLeCerveau ) */ 183 float Zt; /* a fraction controlling the separation between brain and non 184 brain, see variable tb in SUMA_StretchToFitLeCerveau ) */ 185 int N_it; /* number of iterations */ 186 int Icold; /* number of Ico subdivisions */ 187 int NodeDbg; /* node to debug */ 188 float t; 189 float tm; 190 float t2; 191 float t98; 192 float r; 193 float cog[3]; 194 float d1; 195 float su1; 196 float UseNew; 197 float d4; 198 float *ztv; 199 int Kill98; 200 int NoEyes; 201 int NNsmooth; 202 int smootheach; 203 float avoid_vent; 204 int smooth_end; 205 int *k98mask; 206 int k98maskcnt; 207 float travstp; 208 float *Stop; 209 int MaxIntIter; 210 int UseExpansion; 211 float PercInt; 212 int UseSkull; 213 float bot_lztclip; 214 float var_lzt; 215 int send_hull; 216 int DemoPause; 217 int DoSpatNorm; 218 float SpatNormDxyz; 219 int specie; 220 int WriteSpatNorm; 221 int fillhole; 222 THD_3dim_dataset *iset; 223 FILE *dbg_eyenodes; 224 float SpatShift[3]; 225 THD_3dim_dataset *OrigSpatNormedSet; 226 THD_3dim_dataset *in_edvol; 227 float blur_fwhm; 228 int iset_hand; 229 char *shrink_bias_name; 230 float *shrink_bias; 231 int NearestNode; 232 int NearestTriangle; 233 int DistanceToMesh; 234 int NearestNodeCoords; 235 int ProjectionOnMesh; 236 int Data; 237 238 char *in_nodeindices; 239 240 float *emask; 241 float efrac; 242 float *fatemask; 243 int Use_emask; 244 byte *nmask; 245 246 int PushToEdge; 247 int DoSkulls; 248 byte b1; 249 byte b2; 250 251 void *popt; /*< NULL pointer to hide program specific structure */ 252 253 float *Brain_Contour; 254 float *Brain_Hull; 255 float *Skull_Outer; 256 float *Skull_Inner; 257 258 char *UseThisBrain;/* do not free, argv[.] copy */ 259 char *UseThisBrainHull; /* do not free, argv[.] copy */ 260 char *UseThisSkullOuter; /* do not free, argv[.] copy */ 261 byte SurfaceCoil; /* data acquired with SurfaceCoil */ 262 263 int iopt; 264 265 char **com; 266 int N_com; 267 268 char *unit_sphere_name; 269 char *bases_prefix; 270 271 int dmed; 272 int unif; 273 int geom; 274 int corder; 275 int poly; 276 277 int match_area; 278 279 float xyz_scale; 280 SUMA_GENERIC_ARGV_PARSE *ps; /* a holder for convenience, never free it*/ 281 282 char *s; /* freed in the end */ 283 284 int *ivec; 285 int n_ivec; 286 287 float permask; 288 float flt1, flt2, flt3; 289 float PlEq[4]; 290 } SUMA_GENERIC_PROG_OPTIONS_STRUCT; /* also edit defaults in 291 SUMA_Alloc_Generic_Prog_Options_Struct and in 292 SUMA_Free_Generic_Prog_Options_Struct */ 293 294 double SUMA_ParseTime(char *tm); 295 int SUMA_GetNextCommand (char *S, char d, char term, char *Scom); 296 SUMA_Boolean SUMA_RegisterCommand(char *S, char d, char term, char *Scom, SUMA_Boolean Prepend); 297 int SUMA_CommandCode(char *Scom); 298 SUMA_NI_COMMAND_CODE SUMA_niCommandCode(char *Scom); 299 const char *SUMA_CommandString (SUMA_ENGINE_CODE code); 300 const char *SUMA_niCommandString (SUMA_NI_COMMAND_CODE code); 301 SUMA_Boolean SUMA_RegisterEngineData (SUMA_EngineData *MTI, char *Fldname, void *FldValp, char *DestName, char *SourceName, SUMA_Boolean PassByPointer); 302 SUMA_Boolean SUMA_FreeEngineData (SUMA_EngineData *MTI); 303 SUMA_ENGINE_FIELD_CODE SUMA_EngineFieldCode(char *Scom); 304 const char *SUMA_EngineFieldString (SUMA_ENGINE_FIELD_CODE i); 305 SUMA_Boolean SUMA_ReleaseEngineData (SUMA_EngineData *MTI, char *Location); 306 SUMA_Boolean SUMA_InitializeEngineData (SUMA_EngineData *MTI); 307 int SUMA_EngineSourceCode (char *Scom); 308 void SUMA_EngineSourceString (char *Scom, int ses_code); 309 const char *SUMA_DomainKinships_String (SUMA_DOMAIN_KINSHIPS code); 310 DList *SUMA_CreateList (void); 311 SUMA_EngineData *SUMA_InitializeEngineListData (SUMA_ENGINE_CODE CommandCode); 312 DListElmt * SUMA_RegisterEngineListCommand (DList *list, SUMA_EngineData * EngineData, 313 SUMA_ENGINE_FIELD_CODE Fld, void *FldValp, 314 SUMA_ENGINE_SOURCE Src, void *Srcp, SUMA_Boolean PassByPointer, 315 SUMA_ENGINE_INSERT_LOCATION InsertAt, DListElmt *Element); 316 SUMA_Boolean SUMA_ReleaseEngineListElement (DList *list, DListElmt *element); 317 DList * SUMA_DestroyList (DList *list); 318 DList * SUMA_EmptyDestroyList (DList *list); 319 void SUMA_FreeEngineListData(void *MTI); 320 SUMA_ENGINE_CODE SUMA_GetListNextCommand (DList *list); 321 void SUMA_ShowList (DList *list, FILE *Out); 322 void SUMA_FreeMessageListData(void *Hv); 323 SUMA_Boolean SUMA_ReleaseMessageListElement (DList *list, DListElmt *element) ; 324 DList *SUMA_CreateMessageList (void); 325 SUMA_Boolean SUMA_RegisterMessage ( DList *list, char *Message, char *Source, SUMA_MESSAGE_TYPES Type, SUMA_MESSAGE_ACTION Action); 326 char *SUMA_BuildMessageLog (DList *ML); 327 void SUMA_FreeActionStackData(void *asdata); 328 DList *SUMA_CreateActionStack (void); 329 void SUMA_ReleaseActionStackData (void *asdata); 330 DList *SUMA_EmptyDestroyActionStack (DList *AS); 331 const char *SUMA_ColMixModeString (SUMA_COL_MIX_MODE mode); 332 SUMA_SO_File_Type SUMA_SurfaceTypeCode (char *cd); 333 const char * SUMA_SurfaceTypeString (SUMA_SO_File_Type tp); 334 const char * SUMA_SurfaceFormatString (SUMA_SO_File_Format ff); 335 SUMA_SO_File_Format SUMA_SurfaceFormatCode (char *cd); 336 SUMA_DO_DRAW_MASK SUMA_DO_DrawMaskName2Code (char *name); 337 char *SUMA_DO_DrawMaskCode2Name(SUMA_DO_DRAW_MASK dd); 338 char *SUMA_DO_DrawMaskCode2Name_human(SUMA_DO_DRAW_MASK dd); 339 SUMA_SO_File_Type SUMA_guess_surftype_argv(char *str); 340 SUMA_SO_File_Type SUMA_GuessSurfFormatFromExtension_core(char *Name, 341 char **specname, char **svname, char **sname); 342 SUMA_SO_File_Type SUMA_GuessSurfFormatFromExtension( 343 char *Name, char *fallbackname); 344 SUMA_GENERIC_ARGV_PARSE *SUMA_CreateGenericArgParse(char *optflags); 345 SUMA_GENERIC_ARGV_PARSE *SUMA_FreeGenericArgParse(SUMA_GENERIC_ARGV_PARSE *ps); 346 char *SUMA_help_IO_Args(SUMA_GENERIC_ARGV_PARSE *opt); 347 SUMA_GENERIC_ARGV_PARSE *SUMA_Parse_IO_Args (int argc, char *argv[], char *optflags); 348 SUMA_GENERIC_PROG_OPTIONS_STRUCT * SUMA_Alloc_Generic_Prog_Options_Struct(void); 349 SUMA_GENERIC_PROG_OPTIONS_STRUCT * SUMA_Free_Generic_Prog_Options_Struct(SUMA_GENERIC_PROG_OPTIONS_STRUCT *Opt); 350 SUMA_Boolean SUMA_isOutputFormatFromArg(char *arg, SUMA_DSET_FORMAT *o_formp); 351 SUMA_Boolean SUMA_isInputFormatFromArg(char *arg, SUMA_DSET_FORMAT *o_formp); 352 SUMA_Boolean SUMA_isFormatFromArg(char *arg, SUMA_DSET_FORMAT *o_formp); 353 SUMA_Boolean SUMA_isIOFormatFromArg(char *argi, SUMA_DSET_FORMAT *oformp, 354 int *io); 355 356 /*! 357 \brief Macro that adds a command to the head of command list. 358 SUMA_REGISTER_HEAD_COMMAND_NO_DATA(list, Command, Src, Srcp) 359 360 \param list (DList *) pointer to list 361 \param Command (SUMA_ENGINE_CODE) command code 362 \param Src (SUMA_ENGINE_SOURCE) source of command 363 \param Srcp (void *) pointer to source pointer. (No need to type cast it yourself, macro will) 364 365 - Expects the variable FuncName (char *) to be defined already (that's the case in all of SUMA's functions) 366 - No Engine Data can be passed with this macro 367 368 */ 369 #define SUMA_REGISTER_HEAD_COMMAND_NO_DATA(list, Command, Src, Srcp) {\ 370 SUMA_EngineData *ED_macro; \ 371 ED_macro = SUMA_InitializeEngineListData (Command); \ 372 if (!SUMA_RegisterEngineListCommand ( list, ED_macro, \ 373 SEF_Empty, NULL, \ 374 Src, (void *)Srcp, NOPE, \ 375 SEI_Head, NULL)) { \ 376 fprintf (SUMA_STDERR, "Error %s: Failed to register command.\n", FuncName); \ 377 } \ 378 } 379 380 /*! 381 \brief Macro that adds a command to the tail of command list. 382 383 \sa SUMA_REGISTER_HEAD_COMMAND_NO_DATA 384 */ 385 #define SUMA_REGISTER_TAIL_COMMAND_NO_DATA(list, Command, Src, Srcp) {\ 386 SUMA_EngineData *ED_macro; \ 387 ED_macro = SUMA_InitializeEngineListData (Command); \ 388 if (!SUMA_RegisterEngineListCommand ( list, ED_macro, \ 389 SEF_Empty, NULL, \ 390 Src, (void *)Srcp, NOPE, \ 391 SEI_Tail, NULL)) { \ 392 fprintf (SUMA_STDERR, "Error %s: Failed to register command.\n", FuncName); \ 393 } \ 394 } 395 396 /*! 397 \brief Macro that reports an error to the log 398 399 */ 400 #define SUMA_L_Err(...) {\ 401 char m_stemp[256]; \ 402 snprintf(m_stemp, 255, __VA_ARGS__ ); \ 403 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 404 FuncName, SMT_Error, SMA_Log); \ 405 } 406 /*! 407 \brief Macro that reports an error to stderr 408 409 */ 410 #define SUMA_S_Errv( ... ) {\ 411 fprintf (SUMA_STDERR, \ 412 "-- Error %s (%s:%d):\n", FuncName, __FILE__ , __LINE__); \ 413 fprintf (SUMA_STDERR, __VA_ARGS__); \ 414 } 415 #define SUMA_S_Err( ... ) {\ 416 SUMA_S_Errv( __VA_ARGS__ ); \ 417 fprintf (SUMA_STDERR,"\n"); \ 418 } 419 420 /*! 421 \brief Macro that reports an error to stderr and log 422 423 */ 424 #define SUMA_SL_Err(...) {\ 425 SUMA_S_Err(__VA_ARGS__); \ 426 SUMA_L_Err(__VA_ARGS__); \ 427 } 428 429 /*! 430 \brief Macro that reports an error to stderr and log and popup 431 432 */ 433 #define SUMA_SLP_Err(...) {\ 434 static char mm[1024]; \ 435 SUMA_S_Err(__VA_ARGS__); \ 436 snprintf(mm, 1022, __VA_ARGS__); \ 437 SUMA_RegisterMessage (SUMAg_CF->MessageList, mm, FuncName, \ 438 SMT_Error, SMA_LogAndPopup); \ 439 } 440 441 /*! 442 \brief Macro that reports a notice to the log 443 444 */ 445 #define SUMA_L_Note(...) {\ 446 char m_stemp[256]; \ 447 snprintf(m_stemp, 255, __VA_ARGS__); \ 448 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 449 FuncName, SMT_Notice, SMA_Log); \ 450 } 451 /*! 452 \brief Macro that reports a notice to stderr 453 454 */ 455 #define SUMA_S_Notev( ... ) {\ 456 fprintf (SUMA_STDERR, "++ Notice %s (%s:%d @%s):\n", \ 457 FuncName, __FILE__ , __LINE__, SUMA_time()); \ 458 fprintf (SUMA_STDERR, __VA_ARGS__); \ 459 } 460 #define SUMA_S_Note( ... ) {\ 461 SUMA_S_Notev(__VA_ARGS__); \ 462 fprintf (SUMA_STDERR,"\n"); \ 463 } 464 465 /*! 466 \brief Macro that reports a notice to stderr and log 467 468 */ 469 #define SUMA_SL_Note(...) {\ 470 SUMA_S_Note(__VA_ARGS__); \ 471 SUMA_L_Note(__VA_ARGS__); \ 472 } 473 474 /*! 475 \brief Macro that reports a notice to stderr and log and popup 476 477 */ 478 #define SUMA_SLP_Note(...) {\ 479 char m_stemp[256]; \ 480 snprintf(m_stemp, 255, __VA_ARGS__); \ 481 SUMA_S_Note(__VA_ARGS__); \ 482 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 483 FuncName, SMT_Notice, SMA_LogAndPopup); \ 484 } 485 486 /*! 487 \brief Macro that reports a text message to the log 488 489 */ 490 #define SUMA_L_Text(...) {\ 491 char m_stemp[256]; \ 492 snprintf(m_stemp, 255, __VA_ARGS__); \ 493 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 494 FuncName, SMT_Text, SMA_Log); \ 495 } 496 /*! 497 \brief Macro that reports a text message to stderr 498 499 */ 500 #define SUMA_S_Text(...) {\ 501 fprintf (SUMA_STDERR, __VA_ARGS__); \ 502 } 503 /*! 504 \brief Macro that reports a text message to stderr and log 505 506 */ 507 #define SUMA_SL_Text(...) {\ 508 char m_stemp[256]; \ 509 SUMA_S_Text(__VA_ARGS__); \ 510 snprintf(m_stemp, 255, __VA_ARGS__); \ 511 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 512 FuncName, SMT_Text, SMA_Log); \ 513 } 514 /*! 515 \brief Macro that reports a text message to stderr and log and popup 516 517 */ 518 #define SUMA_SLP_Text(...) {\ 519 char m_stemp[256]; \ 520 snprintf(m_stemp, 255, __VA_ARGS__); \ 521 SUMA_S_Text(__VA_ARGS__); \ 522 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 523 FuncName, SMT_Text, SMA_LogAndPopup); \ 524 } 525 526 /*! 527 \brief Macro that reports a warning to the log 528 529 */ 530 #define SUMA_L_Warn(...) {\ 531 char m_stemp[256]; \ 532 snprintf(m_stemp, 255, __VA_ARGS__ ); \ 533 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 534 FuncName, SMT_Warning, SMA_Log); \ 535 } 536 /*! 537 \brief Macro that reports a warning to stderr 538 539 */ 540 #define SUMA_S_Warnv( ... ) {\ 541 fprintf (SUMA_STDERR, "oo Warning %s (%s:%d):\n", \ 542 FuncName, __FILE__ , __LINE__); \ 543 fprintf (SUMA_STDERR, __VA_ARGS__); \ 544 } 545 #define SUMA_S_Warn( ... ) {\ 546 SUMA_S_Warnv(__VA_ARGS__); \ 547 fprintf (SUMA_STDERR,"\n"); \ 548 } 549 /*! 550 \brief Macro that reports a warning to stderr and log 551 552 */ 553 #define SUMA_SL_Warn(...) {\ 554 char m_stemp[513]; \ 555 SUMA_S_Warn(__VA_ARGS__); \ 556 snprintf(m_stemp, 511, __VA_ARGS__); \ 557 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, FuncName, SMT_Warning, SMA_Log); \ 558 } 559 /*! 560 \brief Macro that reports a warning to stderr and log and popup 561 562 */ 563 #define SUMA_SLP_Warn(...) {\ 564 char m_stemp[513]; \ 565 SUMA_S_Warn(__VA_ARGS__); \ 566 snprintf(m_stemp, 511, __VA_ARGS__); \ 567 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, \ 568 FuncName, SMT_Warning, SMA_LogAndPopup); \ 569 } 570 571 /*! 572 \brief Macro that reports a critical error to the log 573 574 */ 575 #define SUMA_L_Crit(...) {\ 576 char m_stemp[513]; \ 577 snprintf(m_stemp, 511, __VA_ARGS__); \ 578 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, FuncName, \ 579 SMT_Critical, SMA_Log); \ 580 } 581 /*! 582 \brief Macro that reports a critical error to stderr 583 584 */ 585 #define SUMA_S_Crit( ... ) {\ 586 SUMA_S_Critv( __VA_ARGS__ ); \ 587 fprintf (SUMA_STDERR,"\n"); \ 588 } 589 #define SUMA_S_Critv( ... ) {\ 590 fprintf (SUMA_STDERR, "** Critical %s (%s:%d):\n", \ 591 FuncName, __FILE__, __LINE__); \ 592 fprintf (SUMA_STDERR, __VA_ARGS__); \ 593 } 594 595 /*! 596 \brief Macro that reports a critical error to stderr and log 597 598 */ 599 #define SUMA_SL_Crit(...) {\ 600 char m_stemp[513]; \ 601 snprintf(m_stemp, 511, __VA_ARGS__); \ 602 SUMA_S_Crit(__VA_ARGS__); \ 603 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, FuncName, \ 604 SMT_Critical, SMA_Log); \ 605 } 606 /*! 607 \brief Macro that reports a critical error to stderr and log and popup 608 609 */ 610 #define SUMA_SLP_Crit(...) {\ 611 char m_stemp[513]; \ 612 snprintf(m_stemp, 511, __VA_ARGS__); \ 613 SUMA_S_Crit(__VA_ARGS__); \ 614 SUMA_RegisterMessage (SUMAg_CF->MessageList, m_stemp, FuncName, \ 615 SMT_Critical, SMA_LogAndPopup); \ 616 } 617 618 #define SUMA_BEEP { \ 619 if (SUMAg_SVv[0].X->TOPLEVEL) XBell (XtDisplay (SUMAg_SVv[0].X->TOPLEVEL), SUMA_BEEP_LENGTH_MS); \ 620 } 621 /*! 622 \brief Macro that reports a message to SUMA_STDERR if LocalHead is set to YUP 623 */ 624 #define SUMA_LHv( ...) {\ 625 if (LocalHead) { \ 626 fprintf (SUMA_STDERR, "## %s (%s:%d @%s):\n", \ 627 FuncName, __FILE__, __LINE__, SUMA_time()); \ 628 fprintf (SUMA_STDERR, __VA_ARGS__); \ 629 } \ 630 } 631 #define SUMA_LH( ... ) {\ 632 if (LocalHead) { \ 633 SUMA_LHv( __VA_ARGS__ ); \ 634 fprintf (SUMA_STDERR,"\n"); \ 635 } \ 636 } 637 638 639 #define SUMA_ANIM_EXT(Ext) ( (\ 640 SUMA_iswordsame_ci(Ext,".agif") || SUMA_iswordsame_ci(Ext,".gif") || \ 641 SUMA_iswordsame_ci(Ext,".mpeg") || SUMA_iswordsame_ci(Ext,".mpg") \ 642 ) ? 1:0 ) 643 #define SUMA_IMG_EXT(Ext) ( (\ 644 SUMA_iswordsame_ci(Ext,".jpeg") || SUMA_iswordsame_ci(Ext,".jpg") || \ 645 SUMA_iswordsame_ci(Ext,".png") || \ 646 SUMA_iswordsame_ci(Ext,".gif") \ 647 ) ? 1:0 ) 648 649 650 #endif 651