TPCCLIB
Loading...
Searching...
No Matches
parsort.c
Go to the documentation of this file.
1
9/*****************************************************************************/
10#include "tpcclibConfig.h"
11/*****************************************************************************/
12#include <stdio.h>
13#include <stdlib.h>
14#include <string.h>
15#include <math.h>
16/*****************************************************************************/
17#include "tpcextensions.h"
18#include "tpcpar.h"
19/*****************************************************************************/
20
21/*****************************************************************************/
22static char *info[] = {
23 "Sort the contents of parameter files by the TAC name.",
24 " ",
25 "Usage: @P [options] filename(s)",
26 " ",
27 "Options:",
28 " -stdoptions", // List standard options like --help, -v, etc
29 " ",
30 "Example:",
31 " @P ut????srtm.res",
32 " ",
33 "See also: paradd, parformat, reslist, parmatch, rescoll",
34 " ",
35 "Keywords: parameter, tool, format, CSV, RES, FIT",
36 0};
37/*****************************************************************************/
38
39/*****************************************************************************/
40/* Turn on the globbing of the command line, since it is disabled by default in
41 mingw-w64 (_dowildcard=0); in MinGW32 define _CRT_glob instead, if necessary;
42 In Unix&Linux wildcard command line processing is enabled by default. */
43/*
44#undef _CRT_glob
45#define _CRT_glob -1
46*/
47int _dowildcard = -1;
48/*****************************************************************************/
49
50/*****************************************************************************/
54int main(int argc, char **argv)
55{
56 int ai, help=0, version=0, verbose=1;
57 int ret, n, ffi=0;
58 //char *cptr,
59 char parfile[FILENAME_MAX];
60 PAR par;
61
62
63 /*
64 * Get arguments
65 */
66 if(argc==1) {tpcPrintUsage(argv[0], info, stderr); return(1);}
67 parInit(&par);
68 parfile[0]=(char)0;
69 /* Options */
70 for(ai=1; ai<argc; ai++) if(*argv[ai]=='-') {
71 if(tpcProcessStdOptions(argv[ai], &help, &version, &verbose)==0) continue;
72 //cptr=argv[ai]+1; if(*cptr=='-') cptr++; if(!*cptr) continue;
73 fprintf(stderr, "Error: invalid option '%s'.\n", argv[ai]);
74 return(1);
75 } else break; // tac name argument may start with '-'
76
77 /* Print help or version? */
78 if(help==2) {tpcHtmlUsage(argv[0], info, ""); return(0);}
79 if(help) {tpcPrintUsage(argv[0], info, stdout); return(0);}
80 if(version) {tpcPrintBuild(argv[0], stdout); return(0);}
81
82 TPCSTATUS status; statusInit(&status);
83 statusSet(&status, __func__, __FILE__, __LINE__, TPCERROR_OK);
84 status.verbose=verbose-1;
85
86 /* Next arguments are names of files */
87 n=0;
88 for(; ai<argc; ai++) {
89 if(ffi<1) ffi=ai;
90 n++;
91 }
92 /* Is something missing? */
93 if(n==0) {tpcPrintUsage(argv[0], info, stdout); return(1);}
94
95 /* In verbose mode print arguments and options */
96 if(verbose>1) {
97 printf("fileNr := %d\n", n);
98 }
99
100 /*
101 * Sort all specified files
102 */
103 FILE *fp;
104 for(ai=ffi; ai<argc; ai++) {
105 strlcpy(parfile, argv[ai], FILENAME_MAX);
106 if(verbose>0) printf("%s\n", parfile);
107 /* Read file */
108 ret=parRead(&par, parfile, &status);
109 if(ret) {
110 fprintf(stderr, "Error: %s.\n", errorMsg(status.error));
111 parFree(&par);
112 return(2);
113 }
114 /* If less then one TAC, no need to sort and save */
115 if(par.tacNr<2) {
116 if(verbose>1) fprintf(stdout, " contains only one TAC\n");
117 parFree(&par);
118 continue;
119 }
120 /* Sort the parameters */
121 if(verbose>1) printf(" sorting\n");
122 parSortByName(&par, &status);
123 /* Write sorted parameter file */
124 if(verbose>1) printf(" saving\n");
125 fp=fopen(parfile, "w");
126 if(fp==NULL) {
127 fprintf(stderr, "Error: cannot open file for writing.\n");
128 parFree(&par); return(11);
129 }
130 ret=parWrite(&par, fp, PAR_FORMAT_UNKNOWN, 1, &status);
131 fclose(fp);
132 parFree(&par);
133 if(ret!=TPCERROR_OK) {
134 fprintf(stderr, "Error: %s\n", errorMsg(status.error));
135 return(12);
136 }
137 } // next file
138
139 return(0);
140}
141/*****************************************************************************/
142
143/*****************************************************************************/
void parFree(PAR *par)
Definition par.c:75
void parInit(PAR *par)
Definition par.c:25
int parWrite(PAR *par, FILE *fp, parformat format, int extra, TPCSTATUS *status)
Definition pario.c:148
int parRead(PAR *par, const char *fname, TPCSTATUS *status)
Definition pario.c:232
int parSortByName(PAR *d, TPCSTATUS *status)
Definition parorder.c:30
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
Definition proginfo.c:47
int tpcHtmlUsage(const char *program, char *text[], const char *path)
Definition proginfo.c:169
void tpcPrintBuild(const char *program, FILE *fp)
Definition proginfo.c:339
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
Definition proginfo.c:114
void statusInit(TPCSTATUS *s)
Definition statusmsg.c:104
char * errorMsg(tpcerror e)
Definition statusmsg.c:68
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
Definition statusmsg.c:142
size_t strlcpy(char *dst, const char *src, size_t dstsize)
Definition stringext.c:632
Definition tpcpar.h:100
int tacNr
Definition tpcpar.h:104
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
Header file for library libtpcextensions.
@ TPCERROR_OK
No error.
Header file for libtpcpar.
@ PAR_FORMAT_UNKNOWN
Unknown format.
Definition tpcpar.h:28