nifti1_io
nifti1_tool.h
1#ifndef _NIFTI_TOOL_H_
2#define _NIFTI_TOOL_H_
3
4#define NT_CMD_LEN 2048
5
6typedef struct{
7 int len;
8 const char ** list;
10
11typedef struct{
12 int len;
13 int * list;
14} int_list;
15
16typedef struct{
17 /* action options (flags) */
18 int check_hdr, check_nim;
19 int diff_hdr, diff_nim;
20 int disp_hdr, disp_nim, disp_ana;
21 int disp_exts, add_exts, rm_exts;
22 int mod_hdr, mod_nim;
23 int swap_hdr, swap_ana, swap_old;
24
25 int strip; /* strip extras from dataset(s) */
26 int cbl, cci; /* -copy_XXX option flags */
27 int dts, dci, dci_lines; /* display collapsed img flags */
28 int make_im; /* create a new image on the fly */
29 int ci_dims[8]; /* user dims list (last 7 valid) */
30 int new_dim[8]; /* user dim list for new image */
31 int new_datatype; /* datatype for new image */
32 int debug, keep_hist; /* debug level and history flag */
33 int overwrite; /* overwrite flag */
34 char * prefix; /* for output file */
35 str_list elist; /* extension strings */
36 int_list etypes; /* extension type list */
37 str_list flist; /* fields (to display or modify) */
38 str_list vlist; /* values (to set fields to) */
39 str_list infiles; /* input files */
40 char command[NT_CMD_LEN]; /* for inserting the command */
41} nt_opts;
42
43#define USE_SHORT 1
44#define USE_FULL 2
45#define USE_HIST 3
46#define USE_FIELD_HDR 4
47#define USE_FIELD_NIM 5
48#define USE_FIELD_ANA 6
49#define USE_DTYPES 7
50#define USE_VERSION 8
51
52#define CHECK_NEXT_OPT(n,m,str) \
53 do { if ( (n) >= (m) ) { \
54 fprintf(stderr,"** option '%s': missing parameter\n",str); \
55 fprintf(stderr," consider: 'nifti_tool -help'\n"); \
56 return 1; } \
57 } while(0)
58
59#define CHECK_NEXT_OPT_MSG(n,m,str,msg) \
60 do { if ( (n) >= (m) ) { \
61 fprintf(stderr,"** option '%s': %s\n",str,msg); \
62 fprintf(stderr," consider: 'nifti_tool -help'\n"); \
63 return 1; } \
64 } while(0)
65
66/*----------------------------------------------------------------------
67 * this structure and definitions will be used to process the nifti_1_header
68 * and nifti_image structure fields (actions disp, diff, mod)
69 *----------------------------------------------------------------------*/
70
71#define NT_FIELD_NAME_LEN 20 /* more than length of longest name */
72#define NT_HDR_NUM_FIELDS 43 /* in the nifti_1_header struct */
73#define NT_ANA_NUM_FIELDS 47 /* in the nifti_analyze75 struct */
74#define NT_NIM_NUM_FIELDS 63 /* in the nifti_image struct */
75#define NT_DT_STRING -0xfff /* some strange number to abuse... */
76#define NT_DT_POINTER -0xfef /* some strange number to abuse... */
77#define NT_DT_CHAR_PTR -0xfee /* another... */
78#define NT_DT_EXT_PTR -0xfed /* and another... */
79
80typedef struct {
81 int type; /* one of the DT_* types from nifti1.h */
82 int offset; /* bytes from the start of the struct */
83 int size; /* size of one element type */
84 int len; /* number of elements */
85 char name[NT_FIELD_NAME_LEN]; /* actual structure name used */
86} field_s;
87
88/* for computing the offset from the start of the struct */
89#define NT_OFF(str,field) ((int)( ((char *)&str.field) - ((char *)&str) ))
90
91/* call fill_field() for a single type, name and number of elements */
92/* nstr is the base struct, and fldp is a field pointer */
93#define NT_SFILL(nstr,fldp,type,name,num,rv) do{ \
94 rv=fill_field(fldp,type,NT_OFF(nstr,name),num,#name); \
95 fldp++; } while (0)
96
97#define NT_MAKE_IM_NAME "MAKE_IM"
98
99/*----------------------------------------------------------------------*/
100/*----- prototypes ---------------------------------------------------*/
101/*----------------------------------------------------------------------*/
102int act_add_exts ( nt_opts * opts );
103int act_cbl ( nt_opts * opts ); /* copy brick list */
104int act_cci ( nt_opts * opts ); /* copy collapsed dimensions */
105int act_check_hdrs ( nt_opts * opts ); /* check for valid hdr or nim */
106int act_diff_hdrs ( nt_opts * opts );
107int act_diff_nims ( nt_opts * opts );
108int act_disp_ci ( nt_opts * opts ); /* display general collapsed data */
109int act_disp_exts ( nt_opts * opts );
110int act_disp_hdrs ( nt_opts * opts );
111int act_disp_nims ( nt_opts * opts );
112int act_disp_anas ( nt_opts * opts );
113int act_disp_ts ( nt_opts * opts ); /* display time series */
114int act_mod_hdrs ( nt_opts * opts );
115int act_mod_nims ( nt_opts * opts );
116int act_swap_hdrs ( nt_opts * opts );
117int act_rm_ext ( nt_opts * opts );
118int act_strip ( nt_opts * opts ); /* strip extras from datasets */
119
120
121field_s * get_hdr_field( const char * fname, int show_fail );
122field_s * get_nim_field( const char * fname, int show_fail );
123const char * field_type_str (int type);
124
125int diff_hdrs (nifti_1_header *s0, nifti_1_header *s1, int display);
126int diff_hdrs_list(nifti_1_header *s0, nifti_1_header *s1, str_list *slist,
127 int display);
128int diff_nims (nifti_image *s0,nifti_image *s1, int display);
129int diff_nims_list(nifti_image *s0,nifti_image *s1,str_list *slist,int display);
130
131int add_int (int_list * ilist, int val);
132int add_string (str_list * slist, const char * str);
133int check_total_size ( const char *mesg, field_s *fields, int nfields, int tot_size);
134int clear_float_zeros( char * str );
135int diff_field (field_s *fieldp, void * str0, void * str1, int nfields);
136int disp_nifti1_extension( const char *mesg, nifti1_extension * ext, int maxlen);
137int disp_field ( const char *mesg,field_s *fieldp,void *str,int nfields,int header);
138int disp_field_s_list( const char *mesg, field_s *, int nfields);
139int disp_nt_opts ( const char *mesg, nt_opts * opts);
140int disp_raw_data (void * data, int type, int nvals, char space,int newline);
141int fill_cmd_string (nt_opts * opts, int argc, char * argv[]);
142int fill_field (field_s *fp, int type, int offset, int num, const char *name);
143int fill_hdr_field_array(field_s * nh_fields);
144int fill_nim_field_array(field_s * nim_fields);
145int fill_ana_field_array(field_s * ah_fields);
146int modify_all_fields(void *basep, nt_opts *opts, field_s *fields, int flen);
147int modify_field (void * basep, field_s * field, const char * data);
148int process_opts (int argc, char * argv[], nt_opts * opts);
149int remove_ext_list (nifti_image * nim, const char ** elist, int len);
150int usage (const char * prog, int level);
151int use_full (const char * prog);
152int verify_opts (nt_opts * opts, char * prog);
153int write_hdr_to_file(nifti_1_header * nhdr, const char * fname);
154
155/* wrappers for nifti reading functions (allow MAKE_IM) */
156nifti_image * nt_image_read (nt_opts * opts, const char * fname, int doread);
157nifti_image * nt_read_bricks(nt_opts * opts, const char * fname, int len,
158 int * list, nifti_brick_list * NBL);
159nifti_1_header * nt_read_header(nt_opts * opts, const char * fname, int * swapped,
160 int check);
161
162
163#endif /* _NIFTI_TOOL_H_ */
Definition: nifti1_tool.h:80
Definition: nifti1_tool.h:11
Data structure defining the fields of a header extension.
Definition: nifti1.h:297
Data structure defining the fields in the nifti1 header. This binary header should be found at the be...
Definition: nifti1.h:148
Definition: nifti1_io.h:175
High level data structure for open nifti datasets in the nifti1_io API. Note that this structure is n...
Definition: nifti1_io.h:88
Definition: nifti1_tool.h:16
Definition: nifti1_tool.h:6