TPCCLIB
Loading...
Searching...
No Matches
fit2res.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/*****************************************************************************/
15#include "libtpcmisc.h"
16#include "libtpccurveio.h"
17/*****************************************************************************/
18
19/*****************************************************************************/
20static char *info[] = {
21 "Converts FIT files (1) to RES files (2).",
22 " ",
23 "Usage: @P [Options] fitfile(s)",
24 " ",
25 "Options:",
26 " -stdoptions", // List standard options like --help, -v, etc
27 " ",
28 "References:",
29 "1. https://www.turkupetcentre.net/petanalysis/format_tpc_fit.html",
30 "2. https://www.turkupetcentre.net/petanalysis/format_tpc_res.html",
31 " ",
32 "See also: fit2dat, rescoll, resdiff, res2html, reslist, resmatch, parformat",
33 " ",
34 "Keywords: FIT, RES, simulation, tool, results",
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 ret, fileNr=0, ffi=0;
57 char fitfile[FILENAME_MAX], resfile[FILENAME_MAX];
58 char *cptr, tmp[FILENAME_MAX];
59 RES res;
60 FIT fit;
61
62
63
64 /*
65 * Get arguments
66 */
67 if(argc==1) {tpcPrintUsage(argv[0], info, stderr); return(1);}
68 fitfile[0]=resfile[0]=(char)0;
69 fitInit(&fit); resInit(&res);
70 /* Options */
71 for(ai=1; ai<argc; ai++) if(*argv[ai]=='-') {
72 cptr=argv[ai]+1; if(*cptr=='-') cptr++; if(cptr==NULL) continue;
73 if(tpcProcessStdOptions(argv[ai], &help, &version, &verbose)==0) continue;
74 fprintf(stderr, "Error: invalid option '%s'.\n", argv[ai]);
75 return(1);
76 } else break;
77
78 /* Print help or version? */
79 if(help==2) {tpcHtmlUsage(argv[0], info, ""); return(0);}
80 if(help) {tpcPrintUsage(argv[0], info, stdout); return(0);}
81 if(version) {tpcPrintBuild(argv[0], stdout); return(0);}
82
83 /* Process other arguments, starting from the first non-option */
84 for(; ai<argc; ai++) {
85 if(ffi<1) ffi=ai;
86 fileNr++;
87 }
88
89 /* Is something missing? */
90 if(fileNr<1) {
91 fprintf(stderr, "Error: missing command-line argument; use option --help\n");
92 return(1);
93 }
94
95
96 /* In verbose mode print arguments and options */
97 if(verbose>1) {
98 printf("fileNr := %d\n", fileNr);
99 }
100 if(verbose>3) RESULT_TEST=verbose-3; else RESULT_TEST=0;
101 if(verbose>3) MATHFUNC_TEST=verbose-3; else MATHFUNC_TEST=0;
102
103
104
105 /*
106 * Convert one file at a time
107 */
108 fileNr=0;
109 for(ai=ffi; ai<argc; ai++) {
110
111 strlcpy(fitfile, argv[ai], FILENAME_MAX);
112 if(verbose>0 && fileNr>1) fprintf(stdout, "%s :\n", fitfile);
113
114 /*
115 * Construct result filename
116 */
117 strlcpy(resfile, fitfile, FILENAME_MAX);
118 cptr=strrchr(resfile, '.'); if(cptr!=NULL) *cptr=(char)0;
119 strlcat(resfile, ".res", FILENAME_MAX);
120 if(verbose>2) printf("converting %s -> %s\n", fitfile, resfile);
121
122 /*
123 * Read FIT data
124 */
125 if(verbose>2) printf("reading '%s'\n", fitfile);
126 if((ret=fitRead(fitfile, &fit, verbose-2))) {
127 fprintf(stderr, "Error in reading fit file: %s\n", fiterrmsg);
128 continue;
129 }
130
131 /*
132 * Copy FIT data into RES structure
133 */
134 if(verbose>2) printf("converting\n");
135 ret=fitToResult(&fit, &res, tmp);
136 if(ret!=0) {
137 fprintf(stderr, "Error: %s; not converted\n", tmp);
138 fitEmpty(&fit); resEmpty(&res);
139 continue;
140 }
141
142
143 /*
144 * Write result file
145 */
146 if(verbose>0) fprintf(stdout, " writing %s\n", resfile);
147 ret=resWrite(&res, resfile, verbose-3);
148 if(ret) {
149 fprintf(stderr, "Error in writing result file: %s\n", reserrmsg);
150 fitEmpty(&fit); resEmpty(&res);
151 continue;
152 }
153
154 resEmpty(&res); fitEmpty(&fit);
155
156 fileNr++;
157 } // next file
158
159
160 if(fileNr<1) {
161 fprintf(stderr, "Error: no fit file was successfully converted.\n");
162 return(9);
163 }
164 if(verbose>0) printf("converted %d fit file(s).\n", fileNr);
165
166 return(0);
167}
168
169/*****************************************************************************/
170
171/*****************************************************************************/
int fitToResult(FIT *fit, RES *res, char *status)
Definition fitres.c:56
Header file for libtpccurveio.
char reserrmsg[64]
Definition result.c:6
void resInit(RES *res)
Definition result.c:52
void fitEmpty(FIT *fit)
Definition mathfunc.c:18
int fitRead(char *filename, FIT *fit, int verbose)
Definition mathfunc.c:196
int resWrite(RES *res, char *filename, int verbose)
Definition result.c:565
int MATHFUNC_TEST
Definition mathfunc.c:5
char fiterrmsg[64]
Definition mathfunc.c:6
void fitInit(FIT *fit)
Definition mathfunc.c:38
void resEmpty(RES *res)
Definition result.c:22
int RESULT_TEST
Definition result.c:5
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
size_t strlcat(char *dst, const char *src, size_t dstsize)
Definition strext.c:206
void tpcPrintBuild(const char *program, FILE *fp)
Definition proginfo.c:383
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
Definition proginfo.c:158