TPCCLIB
Loading...
Searching...
No Matches
nii_lhdr.c
Go to the documentation of this file.
1
7/*****************************************************************************/
8#include "tpcclibConfig.h"
9/*****************************************************************************/
10#include <stdio.h>
11#include <stdlib.h>
12#include <math.h>
13#include <string.h>
14#include <time.h>
15/*****************************************************************************/
16#include "libtpcmisc.h"
17#include "libtpcimgio.h"
18/*****************************************************************************/
19#include "niftiift.h"
20/*****************************************************************************/
21
22/*****************************************************************************/
23static char *info[] = {
24 "Lists the information in NIfTI-1 image header.",
25 "Optionally, only the specified header field is printed.",
26 " ",
27 "Usage: @P niftifile [fieldname]",
28 " ",
29 "Options:",
30 " -stdoptions", // List standard options like --help, -v, etc
31 " ",
32 "See also: nii_ehdr, ana_lhdr, iftlist, iftadd, iftdel, iftmatch",
33 " ",
34 "Keywords: image, NIfTI, header, IFT",
35 0};
36/*****************************************************************************/
37
38/*****************************************************************************/
39/* Turn on the globbing of the command line, since it is disabled by default in
40 mingw-w64 (_dowildcard=0); in MinGW32 define _CRT_glob instead, if necessary;
41 In Unix&Linux wildcard command line processing is enabled by default. */
42/*
43#undef _CRT_glob
44#define _CRT_glob -1
45*/
46int _dowildcard = -1;
47/*****************************************************************************/
48
49/*****************************************************************************/
53int main(int argc, char **argv)
54{
55 int ai, help=0, version=0, verbose=1;
56 int i, ret;
57 char hdrfile[FILENAME_MAX], tmp[256], keyname[256];
58 NIFTI_DSR dsr;
59 IFT ift;
60
61
62 /*
63 * Get arguments
64 */
65 if(argc==1) {tpcPrintUsage(argv[0], info, stderr); return(1);}
66 hdrfile[0]=keyname[0]=(char)0;
67 iftInit(&ift);
68 /* Options */
69 for(ai=1; ai<argc; ai++) if(*argv[ai]=='-') { /* options */
70 if(tpcProcessStdOptions(argv[ai], &help, &version, &verbose)==0) continue;
71 fprintf(stderr, "Error: invalid option '%s'.\n", argv[ai]);
72 return(1);
73 } else break;
74
75 /* Print help or version? */
76 if(help==2) {tpcHtmlUsage(argv[0], info, ""); return(0);}
77 if(help) {tpcPrintUsage(argv[0], info, stdout); return(0);}
78 if(version) {tpcPrintBuild(argv[0], stdout); return(0);}
79
80 /* Process other arguments, starting from the first non-option */
81 for(; ai<argc; ai++) {
82 if(!hdrfile[0]) {strlcpy(hdrfile, argv[ai], FILENAME_MAX); continue;}
83 else if(!keyname[0]) {strlcpy(keyname, argv[ai], 256); continue;}
84 fprintf(stderr, "Error: invalid argument '%s'.\n", argv[ai]);
85 return(1);
86 }
87
88 /* Is something missing? */
89 if(!hdrfile[0]) {
90 fprintf(stderr, "Error: missing command-line argument.\n");
91 return(1);
92 }
93
94
95 /* In verbose mode print arguments and options */
96 if(verbose>1) {
97 printf("hdrfile := %s\n", hdrfile);
98 if(keyname[0]) printf("keyname := %s\n", keyname);
99 }
100
101
102 /*
103 * Read header file
104 */
105 if(verbose>1) printf("reading %s\n", hdrfile);
106 ret=niftiReadHeader(hdrfile, &dsr, verbose-2, tmp);
107 if(ret) {
108 fprintf(stderr, "Error: cannot read %s: %s.\n", hdrfile, tmp);
109 return(2);
110 }
111
112 /*
113 * Print header
114 */
115 /* Copy header contents to IFT structure */
116 ret=niftiHeaderToIFT(&dsr, &ift, verbose-4);
117 if(ret) {
118 fprintf(stderr, "Error: invalid header structure (%d).\n", ret);
119 return(5);
120 }
121 /* If key name was given, then print only that field, otherwise all */
122 if(keyname[0]) {
123 i=iftGet(&ift, keyname, 0);
124 if(i<0) {
125 fprintf(stderr, "Error: '%s' not found in %s\n", keyname, hdrfile);
126 iftEmpty(&ift);
127 return(3);
128 }
129 iftWriteItem(&ift, i, stdout, 0);
130 } else {
131 iftWrite(&ift, "stdout", 0);
132 }
133 iftEmpty(&ift);
134
135 return(0);
136}
137/*****************************************************************************/
138
139/*****************************************************************************/
void iftEmpty(IFT *ift)
Definition ift.c:60
void iftInit(IFT *ift)
Definition ift.c:45
int iftWriteItem(IFT *ift, int item, FILE *fp, int verbose)
Definition iftfile.c:221
int iftWrite(IFT *ift, char *filename, int verbose)
Definition iftfile.c:282
int iftGet(IFT *ift, char *key, int verbose)
Definition iftsrch.c:15
Header file for libtpcimgio.
int niftiReadHeader(char *filename, NIFTI_DSR *h, int verbose, char *status)
Definition nifti.c:293
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
Definition proginfo.c:40
size_t strlcpy(char *dst, const char *src, size_t dstsize)
Definition strext.c:245
int tpcHtmlUsage(const char *program, char *text[], const char *path)
Definition proginfo.c:213
void tpcPrintBuild(const char *program, FILE *fp)
Definition proginfo.c:383
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
Definition proginfo.c:158
int niftiHeaderToIFT(NIFTI_DSR *dsr, IFT *ift, int verbose)
Definition niftiift.c:256
Header file for niftiift.c.