00001 #ifndef SUMA_DATASETS_INCLUDED
00002 #define SUMA_DATASETS_INCLUDED
00003
00004 #define SUMA_MAX_NAME_LENGTH 500
00005 #define SUMA_MAX_DIR_LENGTH 2000
00006 #ifndef SUMA_IDCODE_LENGTH
00007 #define SUMA_IDCODE_LENGTH 50
00008 #endif
00009
00010 #define SUMA_VERSION_VECTOR 20041229, 20040610, 20040116, \
00011 20040106, -10000
00012
00013
00014
00015
00016
00017
00018 #define SUMA_EMPTY_ATTR "~"
00019 #define SUMA_NI_SS ","
00020
00021 typedef enum { NOPE, YUP} SUMA_Boolean;
00022
00023 typedef enum { SUMA_notypeset = -1,
00024 SUMA_byte = NI_BYTE,
00025 SUMA_short = NI_SHORT,
00026 SUMA_int = NI_INT,
00027 SUMA_float = NI_FLOAT32,
00028 SUMA_double = NI_FLOAT64,
00029 SUMA_complex = NI_COMPLEX64,
00030 SUMA_string = NI_STRING} SUMA_VARTYPE;
00031
00032
00033 typedef struct {
00034 int n;
00035 int *v;
00036 } SUMA_IVEC;
00037
00038 typedef struct {
00039 int n;
00040 float *v;
00041 } SUMA_FVEC;
00042
00043 typedef struct {
00044 int n;
00045 double *v;
00046 } SUMA_DVEC;
00047
00048
00049 typedef struct {
00050 char *Path;
00051 char *FileName;
00052 }SUMA_FileName;
00053
00054
00055 typedef struct {
00056 char *Path;
00057 char *FileName;
00058 char *FileName_NoExt;
00059 char *Ext;
00060 }SUMA_PARSED_NAME;
00061
00062
00063
00064
00065 typedef struct {
00066 int N_alloc;
00067 char *s;
00068 } SUMA_STRING;
00069
00070 typedef enum {
00071 SUMA_ERROR_DSET_TYPE = -1,
00072 SUMA_NO_DSET_TYPE,
00073 SUMA_NODE_BUCKET,
00074 SUMA_AFNI_NODE_BUCKET,
00075 SUMA_NODE_ROI,
00076 SUMA_NODE_RGB,
00077 SUMA_NODE_RGBb,
00078 SUMA_NODE_RGBA,
00079 SUMA_NODE_RGBAb,
00080 SUMA_NODE_XYZ,
00081 SUMA_NEW_NODE_XYZ,
00082 SUMA_NODE_CONVEXITY,
00083 SUMA_NEW_MESH_IJK,
00084 SUMA_MESH_IJK,
00085 SUMA_PREP_NEW_SURFACE,
00086 SUMA_VIEWER_SETTING,
00087 SUMA_SURFACE_VOLUME_PARENT,
00088 SUMA_SURFACE_OBJECT,
00089 SUMA_N_DSET_TYPES
00090 } SUMA_DSET_TYPE;
00091
00092
00093
00094
00095 typedef enum {
00096 SUMA_ERROR_DSET_FORMAT = -1,
00097 SUMA_NO_DSET_FORMAT,
00098 SUMA_ASCII_NIML,
00099 SUMA_BINARY_NIML,
00100 SUMA_NIML,
00101 SUMA_1D,
00102 SUMA_1D_PURE,
00103 SUMA_ASCII_OPEN_DX_DSET,
00104 } SUMA_DSET_FORMAT;
00105
00106
00107
00108
00109 typedef enum {
00110 SUMA_ERROR_COL_TYPE = -1,
00111 SUMA_NO_COL_TYPE,
00112 SUMA_NODE_INT,
00113 SUMA_NODE_INDEX,
00114 SUMA_NODE_ILABEL,
00115 SUMA_NODE_FLOAT,
00116 SUMA_NODE_CX,
00117 SUMA_NODE_X,
00118 SUMA_NODE_Y,
00119 SUMA_NODE_Z,
00120 SUMA_NODE_3C,
00121 SUMA_NODE_R,
00122 SUMA_NODE_G,
00123 SUMA_NODE_B,
00124 SUMA_NODE_A,
00125 SUMA_NODE_BYTE,
00126 SUMA_NODE_Rb,
00127 SUMA_NODE_Gb,
00128 SUMA_NODE_Bb,
00129 SUMA_NODE_Ab,
00130 SUMA_NODE_STRING,
00131 SUMA_NODE_SHORT,
00132 SUMA_NODE_DOUBLE,
00133 SUMA_NODE_XCORR
00134 } SUMA_COL_TYPE;
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150 typedef struct {
00151 int action;
00152
00153 int Type;
00154
00155 int N_n;
00156 int *nPath;
00157
00158
00159
00160 } SUMA_NIML_ROI_DATUM;
00161
00162
00163 typedef struct {
00164 int Type;
00165
00166 char *idcode_str;
00167 char *Parent_idcode_str;
00168 char *Label;
00169 char *ColPlaneName;
00170 float FillColor[3];
00171 float EdgeColor[3];
00172 int EdgeThickness;
00173 int iLabel;
00174 SUMA_NIML_ROI_DATUM *ROI_datum;
00175
00176 int N_ROI_datum;
00177 } SUMA_NIML_DRAWN_ROI;
00178
00179
00180
00181 typedef enum { SUMA_NO_PTR_TYPE,
00182 SUMA_LINKED_DSET_TYPE,
00183 SUMA_LINKED_OVERLAY_TYPE,
00184 SUMA_LINKED_ND_FRST_NEI_TYPE,
00185 SUMA_LINKED_MEMB_FACE_TYPE,
00186 SUMA_LINKED_SURFCONT_TYPE,
00187 SUMA_N_LINKED_PTR_TYPES } SUMA_LINKED_PTR_TYPES;
00188
00189
00190
00191
00192
00193 typedef struct {
00194 int LinkedPtrType;
00195 int N_links;
00196 char owner_id[SUMA_IDCODE_LENGTH];
00197 } SUMA_LinkedPtr;
00198
00199
00200
00201 typedef struct {
00202
00203
00204
00205
00206
00207
00208
00209 int LinkedPtrType;
00210 int N_links;
00211 char owner_id[SUMA_IDCODE_LENGTH];
00212
00213 #ifdef OLD_DSET
00214 NI_element *nel;
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 #else
00307
00308 NI_group *ngr;
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335 NI_element *dnel;
00336
00337
00338 #endif
00339 } SUMA_DSET;
00340
00341 #define SUMA_COUNTER_SUFFIX(ic) ( ((ic) == 1) ? "st" : ((ic) == 2) ? "nd" : ((ic) == 3) ? "rd" : "th" )
00342 #define SUMA_COUNTER_PLURAL(ic) ( ((ic) == 1) ? "" : "s" )
00343
00344 #define SUMA_SKIP_COMMON_OPTIONS(m_brk, m_kar) {\
00345 if (!m_brk && \
00346 ( (strcmp(argv[m_kar], "-memdbg") == 0) || \
00347 (strcmp(argv[m_kar], "-iodbg") == 0) || \
00348 (strcmp(argv[m_kar], "-nomall") == 0) || \
00349 (strcmp(argv[m_kar], "-yesmall") == 0) || \
00350 (strcmp(argv[m_kar], "-trace") == 0) || \
00351 (strcmp(argv[m_kar], "-novolreg") == 0) || \
00352 (strcmp(argv[m_kar], "-TRACE") == 0)) ) { \
00353 \
00354 m_brk = YUP; \
00355 } \
00356 }
00357
00358
00359
00360
00361 #define SUMA_SS2S(SS, stmp) {\
00362 if (SS) { \
00363 SS = SUMA_StringAppend(SS, NULL); \
00364 stmp = SS->s; \
00365 SUMA_free(SS); SS = NULL; } \
00366 }
00367
00368
00369
00370
00371
00372 #define SUMA_STRING_REPLACE(so, sn) { \
00373 if (so) SUMA_free(so); \
00374 so = SUMA_copy_string(sn); \
00375 }
00376
00377 #define SUMA_TO_LOWER(s) { \
00378 int m_i; \
00379 if (s) { \
00380 for (m_i=0; m_i < strlen(s); ++m_i) { \
00381 if (s[m_i] >= 'A' && s[m_i] <= 'Z') s[m_i] = s[m_i] + 'a' - 'A'; \
00382 } \
00383 } \
00384 }
00385
00386
00387
00388
00389 #define SUMA_IS_EMPTY_STR_ATTR(str) ( (!(str) || !strcmp((str),SUMA_EMPTY_ATTR)) ? 1 : 0 )
00390
00391
00392
00393
00394
00395
00396
00397
00398 #ifdef OLD_DSET
00399 #define SDSET_FILENAME(dset) NI_get_attribute(dset->nel,"filename")
00400 #define SDSET_LABEL(dset) NI_get_attribute(dset->nel,"label")
00401 #define SDSET_ID(dset) SUMA_sdset_id(dset)
00402 #define SDSET_IDGDOM(dset) NI_get_attribute(dset->nel,"GeomParent_idcode")
00403 #define SDSET_IDMDOM(dset) SUMA_sdset_idmdom(dset)
00404 #define SDSET_SORTED(dset) NI_get_attribute(dset->nel,"sorted_node_def")
00405 #define SDSET_TYPE_NAME(dset) dset->nel->name
00406 #define SDSET_TYPE(dset) SUMA_Dset_Type(dset->nel->name)
00407 #define SDEST_VECLEN(dset) dset->nel->vec_len
00408 #else
00409 #define SDSET_FILENAME(dset) NI_get_attribute(dset->ngr,"filename")
00410 #define SDSET_LABEL(dset) NI_get_attribute(dset->ngr,"label")
00411 #define SDSET_ID(dset) SUMA_sdset_id(dset)
00412 #define SDSET_IDGDOM(dset) NI_get_attribute(dset->ngr,"GeomParent_idcode")
00413 #define SDSET_IDMDOM(dset) SUMA_sdset_idmdom(dset)
00414 #define SDSET_SORTED(dset) NI_get_attribute(dset->ngr,"sorted_node_def")
00415 #define SDSET_TYPE_NAME(dset) dset->ngr->name
00416 #define SDSET_TYPE(dset) SUMA_Dset_Type(dset->ngr->name)
00417 #define SDEST_VECLEN(dset) dset->dnel->vec_len
00418
00419 #endif
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431 #define COLP_NODEDEF(cop) cop->NodeDef
00432 #define COLP_N_NODEDEF(cop) cop->N_NodeDef
00433 #ifdef OLD_DSET
00434 #define COLP_N_ALLOC(cop) cop->dset_link->nel->vec_len
00435 #else
00436 #define COLP_N_ALLOC(cop) cop->dset_link->dnel->vec_len
00437 #endif
00438
00439
00440
00441
00442
00443
00444
00445 #define NEL_READ(nel, frm) { \
00446 NI_stream m_ns = NULL; \
00447 int m_tt = NI_element_type((void*)nel) ; \
00448 if (m_tt == NI_GROUP_TYPE) { SUMA_SL_Err ("Group, use DSET_READ"); } \
00449 else { \
00450 nel = NULL; \
00451 m_ns = NI_stream_open( frm , "r" ) ; \
00452 if( m_ns == NULL ) { \
00453 SUMA_SL_Err ("Failed to open stream"); \
00454 } else { \
00455 \
00456 if (!(nel = NI_read_element( m_ns , 1 ))) { \
00457 SUMA_SL_Err ("Failed to read element"); \
00458 } \
00459 } \
00460 \
00461 NI_stream_close( m_ns ) ; \
00462 } \
00463 }
00464
00465 #define DSET_READ(dset, frm) { \
00466 NI_stream m_ns = NULL; \
00467 if (dset->ngr || dset->dnel) { SUMA_SL_Err("dset elements not empty!\nNeed a clean dset"); } \
00468 else { \
00469 m_ns = NI_stream_open( frm , "r" ) ; \
00470 if( m_ns == NULL ) { \
00471 SUMA_SL_Err ("Failed to open stream"); \
00472 } else { \
00473 \
00474 if (!(dset->ngr = NI_read_element( m_ns , 1 ))) { \
00475 SUMA_SL_Err ("Failed to read element"); \
00476 } else { \
00477 \
00478 if (!(dset->dnel = SUMA_FindDsetDataAttributeElement(dset))) { \
00479 SUMA_SL_Err("Cannot find data element!\nCleaning up.\n"); \
00480 NI_free_element (dset->ngr); dset->ngr = NULL; \
00481 } \
00482 }\
00483 } \
00484 \
00485 NI_stream_close( m_ns ) ; \
00486 } \
00487 }
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501 #define NEL_WRITE_TX(nel, frm, suc) { \
00502 NI_stream m_ns = NULL; \
00503 suc = 1; \
00504 m_ns = NI_stream_open( frm , "w" ) ; \
00505 if( m_ns == NULL ) { \
00506 SUMA_SL_Err ("Failed to open stream"); \
00507 suc = 0; \
00508 } else { \
00509 \
00510 if (NI_write_element( m_ns , nel , NI_TEXT_MODE ) < 0) { \
00511 SUMA_SL_Err ("Failed to write element"); \
00512 suc = 0; \
00513 } \
00514 } \
00515 \
00516 NI_stream_close( m_ns ) ; \
00517 }
00518 #define DSET_WRITE_1D(dset, frm, suc) { \
00519 NI_stream m_ns = NULL; \
00520 int m_allnum; \
00521 suc = 1; \
00522 m_allnum = SUMA_is_AllNumeric_dset(dset); \
00523 if (!m_allnum) { \
00524 SUMA_SL_Err ("Element cannont be written to 1D format"); \
00525 suc = 0; \
00526 } else { \
00527 m_ns = NI_stream_open( frm , "w" ) ; \
00528 if( m_ns == NULL ) { \
00529 SUMA_SL_Err ("Failed to open stream"); \
00530 suc = 0; \
00531 } else { \
00532 \
00533 if (NI_write_element( m_ns , dset->dnel , NI_TEXT_MODE | NI_HEADERSHARP_FLAG) < 0) { \
00534 SUMA_SL_Err ("Failed to write element"); \
00535 suc = 0; \
00536 } \
00537 } \
00538 \
00539 NI_stream_close( m_ns ) ; \
00540 } \
00541 }
00542 #define DSET_WRITE_1D_PURE(dset, frm, suc) { \
00543 FILE *m_fid = NULL; \
00544 int m_ind, m_ival; \
00545 int m_allnum; \
00546 suc = 1; \
00547 m_allnum = SUMA_is_AllNumeric_dset(dset); \
00548 if (!m_allnum) { \
00549 SUMA_SL_Err ("Element cannont be written to 1D format"); \
00550 suc = 0; \
00551 } else { \
00552 m_fid = fopen(frm,"w"); \
00553 if( m_fid == NULL ) { \
00554 SUMA_SL_Err ("Failed to open file for output"); \
00555 suc = 0; \
00556 } else { \
00557 for (m_ival=0; m_ival<dset->dnel->vec_len; ++m_ival) { \
00558 for (m_ind=0; m_ind<dset->dnel->vec_num; ++m_ind) { \
00559 fprintf(m_fid,"%f ", SUMA_GetDsetValInCol2(dset, m_ind, m_ival)); \
00560 } \
00561 fprintf(m_fid,"\n"); \
00562 } \
00563 fclose(m_fid); m_fid = NULL; \
00564 } \
00565 }\
00566 }
00567
00568 #define NEL_WRITE_1D(nel, frm, suc) { \
00569 NI_stream m_ns = NULL; \
00570 int m_tt = NI_element_type((void*)nel) ; \
00571 int m_allnum; \
00572 suc = 1; \
00573 if (m_tt == NI_GROUP_TYPE) { m_allnum = 0; SUMA_SL_Err ("Group, use DSET_WRITE_1D_PURE"); } \
00574 else m_allnum = SUMA_is_AllNumeric_nel(nel); \
00575 if (!m_allnum) { \
00576 SUMA_SL_Err ("Element cannont be written to 1D format"); \
00577 suc = 0; \
00578 } else { \
00579 m_ns = NI_stream_open( frm , "w" ) ; \
00580 if( m_ns == NULL ) { \
00581 SUMA_SL_Err ("Failed to open stream"); \
00582 suc = 0; \
00583 } else { \
00584 \
00585 if (NI_write_element( m_ns , nel , NI_TEXT_MODE | NI_HEADERSHARP_FLAG) < 0) { \
00586 SUMA_SL_Err ("Failed to write element"); \
00587 suc = 0; \
00588 } \
00589 } \
00590 \
00591 NI_stream_close( m_ns ) ; \
00592 } \
00593 }
00594
00595
00596
00597
00598 #define NEL_WRITE_1D_PURE(nel, frm, suc) { \
00599 FILE *m_fid = NULL; \
00600 int m_ind, m_ival; \
00601 int m_tt = NI_element_type((void*)nel) ; \
00602 int m_allnum; \
00603 suc = 1; \
00604 if (m_tt == NI_GROUP_TYPE) { m_allnum = 0; SUMA_SL_Err ("Group, use DSET_WRITE_1D_PURE"); } \
00605 else m_allnum = SUMA_is_AllNumeric_nel(nel); \
00606 if (!m_allnum) { \
00607 SUMA_SL_Err ("Element cannont be written to 1D format"); \
00608 suc = 0; \
00609 } else { \
00610 m_fid = fopen(frm,"w"); \
00611 if( m_fid == NULL ) { \
00612 SUMA_SL_Err ("Failed to open file for output"); \
00613 suc = 0; \
00614 } else { \
00615 for (m_ival=0; m_ival<nel->vec_len; ++m_ival) { \
00616 for (m_ind=0; m_ind<nel->vec_num; ++m_ind) { \
00617 fprintf(m_fid,"%f ", SUMA_GetValInCol2(nel, m_ind, m_ival)); \
00618 } \
00619 fprintf(m_fid,"\n"); \
00620 } \
00621 fclose(m_fid); m_fid = NULL; \
00622 } \
00623 }\
00624 }
00625
00626 #define NEL_WRITE_BI(nel, frm, suc) { \
00627 NI_stream m_ns = NULL; \
00628 suc = 1; \
00629 m_ns = NI_stream_open( frm , "w" ) ; \
00630 if( m_ns == NULL ) { \
00631 SUMA_SL_Err ("Failed to open stream"); \
00632 suc = 0; \
00633 } else { \
00634 \
00635 if (NI_write_element( m_ns , nel , NI_BINARY_MODE) < 0) { \
00636 SUMA_SL_Err ("Failed to write element"); \
00637 suc = 0; \
00638 } \
00639 } \
00640 \
00641 NI_stream_close( m_ns ) ; \
00642 }
00643
00644
00645
00646
00647
00648 #define SUMA_NEL_GET_STRING(nel, row, col, str) {\
00649 char **m_rc; \
00650 m_rc = (char **)(nel)->vec[(col)]; \
00651 str = m_rc[(row)];\
00652 }
00653
00654
00655
00656
00657 #define SUMA_NEL_REPLACE_STRING(nel, row, col, str) {\
00658 char **m_rc; \
00659 m_rc = (char **)(nel)->vec[(col)]; \
00660 if (m_rc[(row)]) NI_free(m_rc[(row)]); \
00661 m_rc[(row)] = NULL;\
00662 if (str) { \
00663 m_rc[(row)] = (char*)NI_malloc(char, (strlen((str))+1)*sizeof(char));\
00664 strcpy( m_rc[(row)], str ); \
00665 } \
00666 }
00667
00668
00669 NI_element *SUMA_FindDsetDataAttributeElement(SUMA_DSET *dset);
00670 NI_element *SUMA_FindDsetAttributeElement(SUMA_DSET *dset, char *attname);
00671 NI_element *SUMA_FindNgrAttributeElement(NI_group *ngr, char *attname);
00672 float SUMA_LatestVersionNumber(void);
00673 char * SUMA_Dset_Type_Name (SUMA_DSET_TYPE tp);
00674 SUMA_DSET_TYPE SUMA_Dset_Type (char *Name);
00675 char * SUMA_Col_Type_Name (SUMA_COL_TYPE tp);
00676 SUMA_COL_TYPE SUMA_Col_Type (char *Name);
00677 char * SUMA_AttrOfDsetColNumb(SUMA_DSET *dset, int ind);
00678 SUMA_COL_TYPE SUMA_TypeOfDsetColNumb(SUMA_DSET *dset, int ind);
00679 SUMA_COL_TYPE SUMA_TypeOfColNumb(NI_element *nel, int ind) ;
00680 SUMA_VARTYPE SUMA_ColType2TypeCast (SUMA_COL_TYPE ctp);
00681 int SUMA_ShowNel (NI_element *nel);
00682 void SUMA_allow_nel_use(int al);
00683 int SUMA_AddDsetNelCol ( SUMA_DSET *dset, char *col_label,
00684 SUMA_COL_TYPE ctp, void *col,
00685 void *col_attr, int stride);
00686 int SUMA_AddNelCol ( NI_element *nel, char *col_label,
00687 SUMA_COL_TYPE ctp, void *col,
00688 void *col_attr, int stride);
00689 int SUMA_AddDsetColAttr (SUMA_DSET *dset, char *col_label,
00690 SUMA_COL_TYPE ctp, void *col_attr, int col_index);
00691 int SUMA_AddColAttr (NI_element *nel, char *col_label,
00692 SUMA_COL_TYPE ctp, void *col_attr, int col_index);
00693 SUMA_Boolean SUMA_NewDsetGrp (SUMA_DSET *dset, SUMA_DSET_TYPE dtp,
00694 char* MeshParent_idcode,
00695 char * GeomParent_idcode, int N_el,
00696 char *filename, char *thisidcode);
00697 NI_element * SUMA_NewNel (SUMA_DSET_TYPE dtp, char* MeshParent_idcode,
00698 char * GeomParent_idcode, int N_el,
00699 char *name, char *thisidcode);
00700 SUMA_DSET_FORMAT SUMA_Dset_Format (char *Name);
00701 char * SUMA_Dset_Format_Name (SUMA_DSET_FORMAT fr);
00702 char *SUMA_HistString (char *CallingFunc, int N_arg, char **arg, char *sold);
00703 char * SUMA_GetNgrHist(NI_group *ngr);
00704 int SUMA_AddNgrHist(NI_group *ngr, char *CallingFunc, int N_arg, char **arg);
00705 int SUMA_AddNelHist(NI_element *nel, char *CallingFunc, int N_arg, char **arg);
00706 void SUMA_FreeDset(void *dset);
00707 SUMA_DSET * SUMA_FindDset (char *idcode_str, DList *DsetList);
00708 char *SUMA_DsetInfo (SUMA_DSET *dset, int detail);
00709 void SUMA_ShowDset (SUMA_DSET *dset, int detail, FILE *out);
00710 char *SUMA_ShowMeSome (void *dt, SUMA_VARTYPE tp, int N_dt, int mxshow);
00711 SUMA_DSET * SUMA_NewDsetPointer(void);
00712 SUMA_DSET * SUMA_CreateDsetPointer (
00713 char *name,
00714 SUMA_DSET_TYPE tp,
00715 char *idcode_str,
00716 char *domain_idcode_str,
00717 int N_Alloc);
00718 int SUMA_InsertDsetPointer (SUMA_DSET *dset, DList *DsetList);
00719 void * SUMA_GetCx(char *idcode_str, DList *DsetList, int ReturnDsetPointer) ;
00720 #if 0
00721 SUMA_DSET *SUMA_LinkToDset(SUMA_DSET *dset);
00722 SUMA_DSET *SUMA_UnlinkFromDset(SUMA_DSET *dset);
00723 #endif
00724 void *SUMA_LinkToPointer(void *ptr);
00725 void *SUMA_UnlinkFromPointer(void *ptr);
00726 int * SUMA_GetNodeDef(SUMA_DSET *dset);
00727 int SUMA_FillDsetNelCol (SUMA_DSET *dset, char *col_label,
00728 SUMA_COL_TYPE ctp, void *col,
00729 void *col_attr, int stride);
00730 int SUMA_FillNelCol (NI_element *nel, char *col_label,
00731 SUMA_COL_TYPE ctp, void *col,
00732 void *col_attr, int stride);
00733 int *SUMA_GetDsetColIndex (SUMA_DSET *dset, SUMA_COL_TYPE tp, int *N_i);
00734 int *SUMA_GetColIndex (NI_element *nel, SUMA_COL_TYPE tp, int *N_i);
00735 float * SUMA_DsetCol2Float (SUMA_DSET *dset, int ind, int FilledOnly);
00736 float * SUMA_Col2Float (NI_element *nel, int ind, int FilledOnly);
00737 int SUMA_GetDsetColRange(SUMA_DSET *dset, int col_index, float range[2], int loc[2]);
00738 int SUMA_GetColRange(NI_element *nel, int col_index, float range[2], int loc[2]);
00739 int SUMA_AddGenDsetColAttr (SUMA_DSET *dset, SUMA_COL_TYPE ctp, void *col, int stride, int col_index);
00740 int SUMA_AddGenColAttr (NI_element *nel, SUMA_COL_TYPE ctp, void *col, int stride, int col_index);
00741 SUMA_DSET *SUMA_LoadNimlDset (char *Name, int verb);
00742 SUMA_DSET *SUMA_LoadDset (char *Name, SUMA_DSET_FORMAT *form, int verb);
00743 SUMA_DSET *SUMA_Load1DDset (char *Name, int verb);
00744 SUMA_DSET *SUMA_LoadDXDset (char *Name, int verb);
00745 char *SUMA_RemoveDsetExtension (char*Name, SUMA_DSET_FORMAT form);
00746 char * SUMA_WriteDset (char *Name, SUMA_DSET *dset, SUMA_DSET_FORMAT form, int overwrite, int verb);
00747 SUMA_DSET * SUMA_far2dset( char *FullName, char *dset_id, char *dom_id,
00748 float **farp, int vec_len, int vec_num,
00749 int ptr_cpy);
00750 int SUMA_is_AllNumeric_dset(SUMA_DSET *dset);
00751 int SUMA_is_AllNumeric_ngr(NI_group *ngr) ;
00752 int SUMA_is_AllNumeric_nel(NI_element *nel);
00753 SUMA_Boolean SUMA_NewDsetID (SUMA_DSET *dset);
00754 char *SUMA_DsetColLabelCopy(SUMA_DSET *dset, int i, int addcolnum);
00755 char *SUMA_ColLabelCopy(NI_element *nel, int i, int addcolnum);
00756 SUMA_DSET * SUMA_MaskedCopyofDset(SUMA_DSET *odset, byte *rowmask, byte *colmask, int masked_only, int keep_node_index);
00757 void *SUMA_Copy_Part_Column(void *col, NI_rowtype *rt, int N_col, byte *rowmask, int masked_only, int *n_incopy);
00758 char* SUMA_sdset_id(SUMA_DSET *dset);
00759 char* SUMA_sdset_idmdom(SUMA_DSET *dset);
00760 NI_group *SUMA_oDsetNel2nDsetNgr(NI_element *nel);
00761 void SUMA_SetParent_DsetToLoad(char *parent);
00762
00763 #ifdef SUMA_COMPILED
00764 #define SUMA_STANDALONE_INIT { \
00765 \
00766 signal(SIGINT ,SUMA_sigfunc) ; \
00767 signal(SIGBUS ,SUMA_sigfunc) ; \
00768 signal(SIGSEGV,SUMA_sigfunc) ; \
00769 signal(SIGTERM,SUMA_sigfunc) ; \
00770 SUMA_process_environ(); \
00771 SUMAg_CF = SUMA_Create_CommonFields (); \
00772 if (SUMAg_CF == NULL) { \
00773 fprintf(SUMA_STDERR,"Error %s: Failed in SUMA_Create_CommonFields\n", FuncName); \
00774 exit(1); \
00775 } \
00776 \
00777 SUMA_ParseInput_basics (argv, argc); \
00778 }
00779 #else
00780 #define SUMA_STANDALONE_INIT { \
00781 \
00782 signal(SIGINT ,SUMA_sigfunc) ; \
00783 signal(SIGBUS ,SUMA_sigfunc) ; \
00784 signal(SIGSEGV,SUMA_sigfunc) ; \
00785 signal(SIGTERM,SUMA_sigfunc) ; \
00786 SUMA_process_environ(); \
00787 SUMA_ParseInput_basics (argv, argc); \
00788 }
00789
00790 #endif
00791
00792 int SUMA_filexists (char *f_name);
00793 char *SUMA_help_basics();
00794 char *SUMA_help_talk();
00795 void SUMA_process_environ(void);
00796 void SUMA_ParseInput_basics (char *argv[], int argc);
00797 SUMA_FileName SUMA_StripPath (char *FileName);
00798 SUMA_PARSED_NAME * SUMA_ParseFname (char *FileName);
00799 char *SUMA_Extension(char *filename, char *ext, SUMA_Boolean Remove);
00800 SUMA_DSET_FORMAT SUMA_GuessFormatFromExtension(char *Name);
00801 SUMA_Boolean SUMA_isExtension(char *filename, char *ext);
00802 void *SUMA_Free_Parsed_Name(SUMA_PARSED_NAME *Test);
00803 int SUMA_StringToNum (char *s, float *fv, int N);
00804 int SUMA_isNumString (char *s, void *p);
00805 char *SUMA_copy_string(char *buf);
00806 char * SUMA_append_string(char *s1, char *s2);
00807 char * SUMA_append_replace_string( char *s1, char *s2,
00808 char *Spc, int whichTofree);
00809 char * SUMA_truncate_string (char *s1, int length);
00810 char *SUMA_set_string_length(char *buf, char cp, int n);
00811 SUMA_STRING * SUMA_StringAppend (SUMA_STRING *SS, char *newstring);
00812 SUMA_STRING * SUMA_StringAppend_va (SUMA_STRING *SS, char *newstring, ... );
00813 void SUMA_sigfunc(int sig);
00814 char *SUMA_pad_string(char *buf, char cp, int n, int add2end);
00815 char * SUMA_GetDsetValInCol(SUMA_DSET *dset, int ind, int ival, double *dval) ;
00816 char * SUMA_GetValInCol(NI_element *nel, int ind, int ival, double *dval);
00817 double SUMA_GetDsetValInCol2(SUMA_DSET *dset, int ind, int ival) ;
00818 double SUMA_GetValInCol2(NI_element *nel, int ind, int ival);
00819 int SUMA_GetNodeRow_FromNodeIndex(SUMA_DSET *dset, int node, int N_Node);
00820 int SUMA_GetNodeIndex_FromNodeRow(SUMA_DSET *dset, int row, int N_Node);
00821 NI_str_array *SUMA_free_NI_str_array(NI_str_array *nisa);
00822 NI_str_array *SUMA_comp_str_2_NI_str_ar(char *s, char *sep);
00823 char *SUMA_NI_str_ar_2_comp_str (NI_str_array *nisa, char *sep);
00824 NI_str_array *SUMA_free_NI_str_array(NI_str_array *nisa);
00825 char *SUMA_Get_Sub_String(char *cs, char *sep, int ii);
00826 int SUMA_AddColAtt_CompString(NI_element *nel, int col, char *lbl, char *sep);
00827 NI_str_array * SUMA_NI_decode_string_list( char *ss , char *sep );
00828 char * SUMA_NI_get_ith_string( char *ss , char *sep, int i );
00829 SUMA_VARTYPE SUMA_VarType2TypeCast (char *vt);
00830 SUMA_COL_TYPE SUMA_VarType2ColType (char *vt);
00831 int SUMA_SizeOf(SUMA_VARTYPE vt);
00832 void *SUMA_BinarySuck(char *fname, SUMA_VARTYPE data_type, int endian, int start, int end, int *nvals_read);
00833 void SUMA_swap_2(void *ppp);
00834 void SUMA_swap_4(void *ppp);
00835 void SUMA_swap_8(void *ppp);
00836
00837
00838
00839
00840 #endif