ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/dumpCat/dumpCat.c
Revision: 105
Committed: Fri Sep 6 21:47:13 2002 UTC (21 years, 10 months ago) by mmeineke
Content type: text/plain
File size: 8888 byte(s)
Log Message:
added command line arguments, and a time smoother

File Contents

# User Rev Content
1 mmeineke 47 #include <stdlib.h>
2     #include <stdio.h>
3     #include <string.h>
4     #include <unistd.h>
5    
6 mmeineke 105 #define MAX_FILES 1000
7 mmeineke 47
8     void usage( void );
9    
10     char* program_name;
11    
12    
13     int main( int argc, char* argv[] ){
14    
15     double realTime, currentTime, lastTime;
16     double boxX, boxY, boxZ;
17     char* foo;
18 mmeineke 105 char* in_name[MAX_FILES];
19 mmeineke 47 char readBuffer[2000];
20     int i,j,k;
21     int lineNum;
22    
23 mmeineke 105 int current_flag;
24     int done;
25    
26     char* out_name;
27     int have_out = 0;
28    
29     int timeMod = 1;
30    
31     int nFiles;
32     int index;
33    
34     int printMe = 0;
35     int skipFirst = 0;
36    
37 mmeineke 47 FILE *in_file;
38     FILE *out_file;
39    
40     program_name = argv[0];
41 mmeineke 105
42     nFiles = 0;
43     for( i = 1; i < argc; i++){
44    
45     if(argv[i][0] =='-'){
46    
47     // parse the option
48    
49     if(argv[i][1] == '-' ){
50    
51     // parse long word options
52    
53     fprintf( stderr,
54     "Invalid option \"%s\"\n", argv[i] );
55     usage();
56    
57     }
58    
59     else{
60    
61     // parse single character options
62    
63     done = 0;
64     j = 1;
65     current_flag = argv[i][j];
66     while( (current_flag != '\0') && (!done) ){
67    
68     switch(current_flag){
69    
70     case 'o':
71     // -o <outFile> => the output file.
72    
73     i++;
74     out_name = argv[i];
75     have_out = 1;
76     done = 1;
77     break;
78    
79     case 't':
80     // -t <#> => the time increment
81    
82     i++;
83     timeMod = atoi( argv[i] );
84     done = 1;
85     break;
86    
87     case 'h':
88     // -h => display help
89    
90     usage();
91     break;
92    
93     case 's':
94     // -b => skip first frame
95    
96     skipFirst = 1;
97     break;
98    
99     default:
100    
101     (void)fprintf(stderr, "Bad option \"-%c\"\n", current_flag);
102     usage();
103     }
104     j++;
105     current_flag = argv[i][j];
106     }
107     }
108     }
109    
110     else{
111    
112     nFiles++;
113     if( nFiles >= MAX_FILES ){
114     printf( "Error, MAX_FILES, %d, exceeded at %s\n", MAX_FILES, argv[i] );
115     exit(0);
116     }
117    
118     in_name[(nFiles-1)] = argv[i];
119     }
120     }
121 mmeineke 47
122 mmeineke 105 if( !have_out ){
123 mmeineke 47
124 mmeineke 105 in_file = fopen( in_name[0], "r" );
125 mmeineke 47 lineNum =0;
126     if( in_file == NULL ){
127     printf( "Error opening \"%s\"\n", out_name );
128     exit(8);
129     }
130    
131     fgets( readBuffer, sizeof( readBuffer ), in_file );
132     lineNum++;
133     if( feof( in_file ) ){
134     printf( "File %s ended unexpectedly at line %d\n", out_name, lineNum );
135     exit(8);
136     }
137    
138     while( !feof( in_file ) ){
139    
140     i = atoi(readBuffer);
141    
142     fgets( readBuffer, sizeof( readBuffer ), in_file );
143     lineNum++;
144     if( feof( in_file ) ){
145     printf( "File %s ended unexpectedly at line %d\n",
146     out_name, lineNum);
147     exit(8);
148     }
149    
150     foo = strtok( readBuffer, " \t;,\n" );
151     lastTime = atof( foo );
152    
153     for(j=0; j<i; j++){
154    
155     fgets( readBuffer, sizeof( readBuffer ), in_file );
156     lineNum++;
157     if( feof( in_file ) ){
158     printf( "File %s ended unexpectedly at line %d,"
159     " with atom %d\n", out_name, lineNum, j);
160     exit(8);
161     }
162    
163     }
164    
165     fgets( readBuffer, sizeof( readBuffer ), in_file );
166     lineNum++;
167     }
168    
169     fclose( in_file );
170    
171 mmeineke 105 out_file = fopen( in_name[0], "a" );
172 mmeineke 47 }
173    
174     else{
175    
176     out_file = fopen( out_name, "w" );
177     lastTime = 0.0;
178    
179 mmeineke 105 in_file = fopen( in_name[0], "r" );
180 mmeineke 47 lineNum = 0;
181     if( in_file == NULL ){
182 mmeineke 105 printf( "Error opening \"%s\"\n", in_name[0] );
183 mmeineke 47 exit(8);
184     }
185    
186     fgets( readBuffer, sizeof( readBuffer ), in_file );
187     lineNum++;
188     if( feof( in_file ) ){
189 mmeineke 105 printf( "File %s ended unexpectedly at line %d\n", in_name[0], lineNum );
190 mmeineke 47 exit(8);
191     }
192 mmeineke 105
193     while( !feof( in_file ) ){
194    
195    
196     i = atoi(readBuffer);
197    
198     fgets(readBuffer, sizeof(readBuffer), in_file);
199     lineNum++;
200     if( feof( in_file ) ){
201     printf( "File %s ended unexpectedly at line %d\n", in_name[0],
202     lineNum );
203     exit(8);
204     }
205    
206    
207     foo = strtok(readBuffer, " ,;\t");
208     if(foo == NULL){
209     printf("error in reading time at line %d in %s\n", lineNum,
210     in_name[0]);
211     exit(8);
212     }
213 mmeineke 47
214 mmeineke 105 currentTime = atof( foo );
215     realTime = currentTime + lastTime;
216    
217 mmeineke 47
218 mmeineke 105 foo = strtok(NULL, " ,;\t");
219     if(foo == NULL){
220     printf("error in reading boxX at line %d in %s\n", lineNum,
221     in_name[0]);
222     exit(8);
223     }
224 mmeineke 47
225 mmeineke 105 boxX = atof( foo );
226 mmeineke 47
227 mmeineke 105 foo = strtok(NULL, " ,;\t");
228     if(foo == NULL){
229     printf("error in reading boxY at line %d in %s\n", lineNum,
230     in_name[0]);
231     exit(8);
232     }
233 mmeineke 47
234 mmeineke 105 boxY = atof( foo );
235    
236     foo = strtok(NULL, " ,;\t");
237     if(foo == NULL){
238     printf("error in reading boxZ at line %d in %s\n", lineNum,
239     in_name[0]);
240 mmeineke 47 exit(8);
241     }
242 mmeineke 105
243     boxZ = atof( foo );
244 mmeineke 47
245 mmeineke 105 printMe = !( ((int)realTime) % timeMod );
246    
247     if( printMe ){
248     fprintf( out_file, "%d\n", i );
249     fprintf( out_file, "%lf\t%lf\t%lf\t%lf\n",
250     realTime, boxX, boxY, boxZ );
251     }
252    
253     for(j=0; j<i; j++){
254    
255     fgets( readBuffer, sizeof( readBuffer ), in_file );
256     lineNum++;
257     if( feof( in_file ) ){
258     printf( "File %s ended unexpectedly at line %d,"
259     " with atom %d\n", in_name[0], lineNum, j);
260     exit(8);
261     }
262    
263     if(printMe) fprintf( out_file, "%s", readBuffer );
264    
265     }
266    
267     fgets( readBuffer, sizeof( readBuffer ), in_file );
268     lineNum++;
269 mmeineke 47 }
270 mmeineke 105
271     lastTime = realTime;
272 mmeineke 47 fclose( in_file );
273     }
274    
275 mmeineke 105 for( k=1; k<nFiles; k++ ){
276 mmeineke 47
277 mmeineke 105 in_file = fopen( in_name[k], "r" );
278 mmeineke 47 lineNum = 0;
279     if( in_file == NULL ){
280 mmeineke 105 printf( "Error opening \"%s\"\n", in_name[k] );
281 mmeineke 47 exit(8);
282     }
283    
284    
285 mmeineke 105 // if this is a time = 0.0 frame then don't write it.
286 mmeineke 47
287 mmeineke 105 if( skipFirst ){
288 mmeineke 47 fgets( readBuffer, sizeof( readBuffer ), in_file );
289 mmeineke 105 lineNum++;
290 mmeineke 47 if( feof( in_file ) ){
291 mmeineke 105 printf( "File %s ended unexpectedly at line %d\n", in_name[k],
292     lineNum );
293 mmeineke 47 exit(8);
294     }
295 mmeineke 105
296     i = atoi(readBuffer);
297    
298     fgets(readBuffer, sizeof(readBuffer), in_file);
299     lineNum++;
300     if( feof( in_file ) ){
301     printf( "File %s ended unexpectedly at line %d\n", in_name[k],
302     lineNum );
303     exit(8);
304     }
305    
306     for(j=0; j<i; j++){
307    
308     fgets( readBuffer, sizeof( readBuffer ), in_file );
309     lineNum++;
310     if( feof( in_file ) ){
311     printf( "File %s ended unexpectedly at line %d,"
312     " with atom %d\n", in_name[k], lineNum, j);
313     exit(8);
314     }
315     }
316 mmeineke 47 }
317 mmeineke 105
318 mmeineke 47 // now start reading and writing
319    
320     fgets( readBuffer, sizeof( readBuffer ), in_file );
321     lineNum++;
322     if( feof( in_file ) ){
323     printf( "File %s ended unexpectedly at line %d\n", in_name, lineNum );
324     exit(8);
325     }
326    
327     while( !feof( in_file ) ){
328    
329     i = atoi(readBuffer);
330    
331     fgets(readBuffer, sizeof(readBuffer), in_file);
332     lineNum++;
333     if( feof( in_file ) ){
334 mmeineke 105 printf( "File %s ended unexpectedly at line %d\n", in_name[k],
335     lineNum );
336 mmeineke 47 exit(8);
337     }
338    
339    
340     foo = strtok(readBuffer, " ,;\t");
341     if(foo == NULL){
342 mmeineke 105 printf("error in reading time at line %d in %s\n", lineNum,
343     in_name[k]);
344 mmeineke 47 exit(8);
345     }
346    
347     currentTime = atof( foo );
348     realTime = currentTime + lastTime;
349    
350    
351     foo = strtok(NULL, " ,;\t");
352     if(foo == NULL){
353 mmeineke 105 printf("error in reading boxX at line %d in %s\n", lineNum,
354     in_name[k]);
355 mmeineke 47 exit(8);
356     }
357    
358     boxX = atof( foo );
359    
360     foo = strtok(NULL, " ,;\t");
361     if(foo == NULL){
362 mmeineke 105 printf("error in reading boxY at line %d in %s\n", lineNum,
363     in_name[k]);
364 mmeineke 47 exit(8);
365     }
366    
367     boxY = atof( foo );
368    
369     foo = strtok(NULL, " ,;\t");
370     if(foo == NULL){
371 mmeineke 105 printf("error in reading boxZ at line %d in %s\n", lineNum,
372     in_name[k]);
373 mmeineke 47 exit(8);
374     }
375    
376     boxZ = atof( foo );
377    
378 mmeineke 105 printMe = !( ((int)realTime) % timeMod );
379 mmeineke 47
380 mmeineke 105 if( printMe ){
381     fprintf( out_file, "%d\n", i );
382     fprintf( out_file, "%lf\t%lf\t%lf\t%lf\n",
383     realTime, boxX, boxY, boxZ );
384     }
385    
386 mmeineke 47 for(j=0; j<i; j++){
387    
388     fgets( readBuffer, sizeof( readBuffer ), in_file );
389     lineNum++;
390     if( feof( in_file ) ){
391     printf( "File %s ended unexpectedly at line %d,"
392 mmeineke 105 " with atom %d\n", in_name[k], lineNum, j);
393 mmeineke 47 exit(8);
394     }
395    
396 mmeineke 105 if(printMe) fprintf( out_file, "%s", readBuffer );
397 mmeineke 47
398     }
399    
400     fgets( readBuffer, sizeof( readBuffer ), in_file );
401     lineNum++;
402     }
403    
404     lastTime = realTime;
405     fclose( in_file );
406     }
407    
408     fclose( out_file );
409    
410     return 0;
411     }
412 mmeineke 105
413    
414     /***************************************************************************
415     * prints out the usage for the command line arguments, then exits.
416     ***************************************************************************/
417    
418     void usage(){
419     (void)fprintf(stderr,
420     "The proper usage is: %s [options] dumpFile1 dumpFile2...\n"
421     "\n"
422     "Options:\n"
423     "\n"
424     " -o <outFile> the output file\n"
425     " *default is to append to first file.\n"
426     " -t <#> only print out time steps that are\n"
427     " increments of <#>\n"
428     " -s skip the first frame (t = 0.0 )\n"
429     "\n"
430     " -h display this message\n"
431     "\n",
432     program_name);
433     exit(8);
434     }