8#include "tpcclibConfig.h"
24static char *info[] = {
25 "Edit the information in the ECAT 7.x image volume subheaders.",
27 "Usage: @P [options] ecatfile headerfile",
32 "Header file can contain one or more subheader field names and values",
33 "in interfile-like format, for example:",
34 " x_pixel_size := 0.257426",
35 " y_pixel_size := 0.257426",
36 " z_pixel_size := 0.2425",
38 "See also: lshdr, e7emhdr, e7eshdr, lmlist, lmhdr, eframe",
40 "Keywords: ECAT, image, header, tool, IFT",
59int main(
int argc,
char **argv)
61 int ai, help=0, version=0, verbose=1;
63 char *cptr, petfile[FILENAME_MAX], iftfile[FILENAME_MAX];
74 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
75 petfile[0]=iftfile[0]=(char)0;
79 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
80 cptr=argv[ai]+1;
if(*cptr==
'-') cptr++;
if(cptr==NULL)
continue;
82 fprintf(stderr,
"Error: invalid option %s\n", argv[ai]);
87 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
92 for(; ai<argc; ai++) {
93 if(!petfile[0]) {strcpy(petfile, argv[ai]);
continue;}
94 if(!iftfile[0]) {strcpy(iftfile, argv[ai]);
continue;}
95 fprintf(stderr,
"Error: invalid argument '%s'\n", argv[ai]);
101 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
107 printf(
"petfile := %s\n", petfile);
108 printf(
"iftfile := %s\n", iftfile);
115 if(verbose>1) printf(
"reading %s\n", iftfile);
116 ret=
iftRead(&ift, iftfile, 1, 0);
118 fprintf(stderr,
"Error: %s\n", ift.
status);
121 if(verbose>9)
iftWrite(&ift,
"stdout", 0);
127 if(verbose) printf(
"opening %s\n", petfile);
128 if((fp=fopen(petfile,
"r+b")) == NULL) {
129 fprintf(stderr,
"Error: cannot open file %s\n", petfile);
134 fprintf(stderr,
"Error (%d): cannot read main header.\n", ret);
135 iftEmpty(&ift); fclose(fp);
return(3);
139 if(strncmp(main_header.
magic_number, ECAT7V_MAGICNR, 7)!=0) {
140 fprintf(stderr,
"Error: %s is not an ECAT 7.x file.\n", petfile);
141 iftEmpty(&ift); fclose(fp);
return(3);
146 fprintf(stderr,
"Error: filetype %s is not supported.\n",
148 iftEmpty(&ift); fclose(fp);
return(3);
154 if(verbose>1) printf(
"reading matrix list\n");
157 fprintf(stderr,
"Error (%d): cannot read matrix list.\n", ret);
158 iftEmpty(&ift); fclose(fp);
return(4);
161 fprintf(stderr,
"Error: matrix list is empty.\n");
162 iftEmpty(&ift); fclose(fp);
return(4);
170 if(verbose>1) printf(
"editing matrices\n");
171 for(mi=0; mi<mlist.
matrixNr; mi++) {
173 if(verbose>2) printf(
"reading subheader from matrix %d\n", mi+1);
176 fprintf(stderr,
"Error %d in reading subheader.\n", ret);
181 for(li=0; li<ift.
keyNr; li++) {
185 fprintf(stderr,
"Error: invalid field name: %s\n", ift.
item[li].
key);
187 fprintf(stderr,
"Error: invalid field value: %s\n", ift.
item[li].
value);
188 if(ret==1 || ret==2) {
195 if(verbose>2) printf(
"writing header\n");
198 fprintf(stderr,
"Error %d in writing subheader.\n", ret);
203 if(verbose>2) printf(
"all matrices processed.\n");
int ecat7EditVHeader(ECAT7_imageheader *h, char *field, char *value, int verbose)
void ecat7InitMatlist(ECAT7_MATRIXLIST *mlist)
int ecat7ReadMatlist(FILE *fp, ECAT7_MATRIXLIST *ml, int verbose)
void ecat7EmptyMatlist(ECAT7_MATRIXLIST *mlist)
void ecat7PrintMatlist(ECAT7_MATRIXLIST *ml)
void ecat7PrintImageheader(ECAT7_imageheader *h, FILE *fp)
char * ecat7filetype(short int file_type)
void ecat7PrintMainheader(ECAT7_mainheader *h, FILE *fp)
int ecat7ReadMainheader(FILE *fp, ECAT7_mainheader *h)
int ecat7ReadImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
int ecat7WriteImageheader(FILE *fp, int blk, ECAT7_imageheader *h)
int iftRead(IFT *ift, char *filename, int is_key_required, int verbose)
int iftWrite(IFT *ift, char *filename, int verbose)
Header file for libtpcimgio.
Header file for libtpcmisc.
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)