1 #ifndef GIFTI_XML_H 2 #define GIFTI_XML_H 3 4 #define GXML_MAX_DEPTH 10 /* maximum stack depth */ 5 #define GXML_MAX_ELEN 128 /* maximum element length */ 6 7 #define GIFTI_XML_VERSION "1.0" 8 #define GIFTI_XML_ENCODING "UTF-8" 9 /* use non-changing address 2 Mar 2010 */ 10 #define GIFTI_XML_DTD_SOURCE "http://gifti.projects.nitrc.org/gifti.dtd" 11 12 /* ---------------------------------------------------------------------- 13 element depths parent(s) children 14 ------- ------ -------------- ----------------------- 15 GIFTI 0 MetaData, LabelTable, DataArray 16 MetaData 1 GIFTI MD 17 2 DataArray 18 MD 2,+1 MetaData Name, Value 19 Name 3,+1 MD CDATA/char 20 Value 3,+1 MD CDATA/char 21 LabelTable 1 GIFTI Label 22 Label 2 LabelTable CDATA/char 23 24 DataArray 1 GIFTI MetaData, CSTM, Data 25 CSTM 2 DataArray DataSpace, TransformedSpace, MatrixData 26 Data 2 DataArray 27 DataSpace 3 CSTM CDATA/char 28 TransformedSpace 3 CSTM CDATA/char 29 MatrixData 3 CSTM char 30 31 32 CDATA 4,+1 Name, Value char 33 4 DataSpace char 34 4 TransformedSpace char 35 char any any whitespace 36 5 CDATA 37 38 -- other objects to handle -- 39 XML declaration: version, encoding, standalone 40 DOCTYPE: type=GIFTI, sid=.../gifti.dtd, pid, sub 41 default: 42 ---------------------------------------------------------------------- 43 */ 44 45 /* this list must match enames, and is ordered via the above comment */ 46 #define GXML_ETYPE_INVALID 0 47 #define GXML_ETYPE_GIFTI 1 /* GIFTI element */ 48 #define GXML_ETYPE_META 2 /* MetaData element */ 49 #define GXML_ETYPE_MD 3 /* MD element */ 50 #define GXML_ETYPE_NAME 4 /* Name element */ 51 #define GXML_ETYPE_VALUE 5 /* Value element */ 52 #define GXML_ETYPE_LABELTABLE 6 /* LabelTable element */ 53 #define GXML_ETYPE_LABEL 7 /* Label element */ 54 #define GXML_ETYPE_DATAARRAY 8 /* DataArray element */ 55 #define GXML_ETYPE_CSTM 9 /* CSTM element */ 56 #define GXML_ETYPE_DATA 10 /* Data element */ 57 #define GXML_ETYPE_DATASPACE 11 /* DataSpace element */ 58 #define GXML_ETYPE_XFORMSPACE 12 /* TransformedSpace element */ 59 #define GXML_ETYPE_MATRIXDATA 13 /* MatrixData element */ 60 #define GXML_ETYPE_CDATA 14 /* CDATA element */ 61 #define GXML_ETYPE_LAST 14 /* should match last entry */ 62 63 typedef struct { 64 long long nalloc; /* allocation length */ 65 long long nused; /* number of bytes used */ 66 char * buf; /* buffer */ 67 } gxml_buffer; 68 69 typedef struct { 70 int verb; /* verbose level */ 71 int dstore; /* flag: store data */ 72 int indent; /* spaces per depth level */ 73 int buf_size; /* for XML buffer */ 74 int b64_check; /* 0=no, 1=check, 2=count, 3=skip */ 75 int update_ok; /* library can update metadata */ 76 int zlevel; /* compression level -1..9 */ 77 int perm_by_iord; /* do we permute by index order */ 78 79 int * da_list; /* DA index list to store */ 80 int da_len; /* DA index list length */ 81 int da_ind; /* current DA index list index */ 82 83 int eleDA; /* number of elements found */ 84 int expDA; /* number of elements expected */ 85 int b64_errors; /* bad chars, per DATA element */ 86 int errors; /* number of errors encountered */ 87 int skip; /* stack depth to skip */ 88 int depth; /* current stack depth */ 89 int stack[GXML_MAX_DEPTH+1]; /* stack of etypes */ 90 91 long long dind; /* index into data->data/xform */ 92 int clen; /* length of current CDATA */ 93 int xlen; /* length of xform buffer */ 94 int dlen; /* length of Data buffer */ 95 int doff; /* offset into data buffer */ 96 int zlen; /* length of compression buffer */ 97 char ** cdata; /* pointer to current CDATA */ 98 char * xdata; /* xform buffer */ 99 char * ddata; /* I/O buffer xml->ddata->data */ 100 char * zdata; /* zlib compression buffer */ 101 gifti_image * gim; /* pointer to returning image */ 102 } gxml_data; 103 104 /* protos */ 105 106 /* main interface */ 107 gifti_image * gxml_read_image (const char * fname, int read_data, 108 const int * dalist, int len); 109 gifti_image * gxml_read_image_buf(const char * buf_in, long long bin_len, 110 const int * dalist, int dalen); 111 int gxml_write_image(gifti_image * gim, const char * fname, 112 int write_data); 113 114 int gxml_set_verb ( int val ); 115 int gxml_get_verb ( void ); 116 int gxml_set_dstore ( int val ); 117 int gxml_get_dstore ( void ); 118 int gxml_set_indent ( int val ); 119 int gxml_get_indent ( void ); 120 int gxml_set_buf_size ( int val ); 121 int gxml_get_buf_size ( void ); 122 int gxml_set_b64_check ( int val ); 123 int gxml_get_b64_check ( void ); 124 int gxml_set_update_ok ( int val ); 125 int gxml_get_update_ok ( void ); 126 int gxml_set_zlevel ( int val ); 127 int gxml_get_zlevel ( void ); 128 int gxml_set_perm_by_iord( int val ); 129 int gxml_get_perm_by_iord( void ); 130 131 132 #endif /* GIFTI_XML_H */ 133