source: pcp/src/parsetest.c@ f70c2a

Last change on this file since f70c2a was e08f45, checked in by Frederik Heber <heber@…>, 17 years ago

Merge branch 'ConcaveHull' of ../espack2 into ConcaveHull

Conflicts:

molecuilder/src/boundary.cpp
molecuilder/src/boundary.hpp
molecuilder/src/builder.cpp
molecuilder/src/linkedcell.cpp
molecuilder/src/linkedcell.hpp
molecuilder/src/vector.cpp
molecuilder/src/vector.hpp
util/src/NanoCreator.c

Basically, this resulted from a lot of conversions two from spaces to one tab, which is my standard indentation. The mess was caused by eclipse auto-indenting. And in espack2:ConcaveHull was the new stuff, so all from ConcaveHull was replaced in case of doubt.
Additionally, vector had ofstream << operator instead ostream << ...

  • Property mode set to 100755
File size: 5.3 KB
Line 
1//#include "init.h"
2
3#ifdef HAVE_CONFIG_H
4#include <config.h>
5#endif
6
7#include <stdio.h>
8#include "data.h"
9
10/** Reads parameter from a parsed file.
11 * \warning value is modified (both in contents and position)!
12 * \param file file to be parsed
13 * \param name Name of value in file (at least 3 chars!)
14 * \param xth Which among a number of parameters it is (in grid case it's row number as grid is read as a whole!)
15 * \param yth Only needed in grid case, specifying column number
16 * \param type Type of the Parameter to be read
17 * \param value address of the value to be read (must have been allocated)
18 * \sa ReadMainParameterFile Calling routine
19 */
20int ParseForParameter(FILE *file, const char *const name, int const xth, int const yth, enum value_type type, void *value) {
21 int i,j; // loop variables
22 int me;
23 long file_position = ftell(file); // mark current position
24 char *dummy1, *dummy, *free_dummy; // pointers in the line that is read in per step
25 char *free_parameter, *parameter; // parameter dummy
26 dummy1 = free_dummy = (char *) malloc(256 * sizeof(char)); //,"ParseForParameter: MemAlloc for dummy1 failed");
27 //MPI_Comm_rank(MPI_COMM_WORLD, &me);
28
29 //fprintf(stderr,"(%i) Parsing for %s\n",me,name);
30
31 int line = 0; // marks line where parameter was found
32 int found = 0; // marks if parameter name was found
33 while((!feof(file)) && (!found)) {
34 dummy1 = dummy = free_dummy;
35 do {
36 fgets(dummy1, 256, file); // Read the whole line, skips commentary and empty ones
37 line++;
38 } while ((dummy1[0] == '#') || (dummy1[0] == '\n'));
39 if (dummy1 == NULL)
40 fprintf(stderr,"(%i) Error reading line %i\n",me,line);
41 else
42 //fprintf(stderr,"(%i) Reading next line %i: %s\n",me, line, dummy1);
43 dummy = strchr(dummy1,'\t'); // set dummy on first tab
44 if (dummy == NULL) {
45 dummy = strchr(dummy1, '\n'); // set on line end then (whole line = keyword)
46 //fprintf(stderr,"(%i)Error: Cannot find tabs on line %i in search for %s\n", me, line, name);
47 //Error(FileOpenParams, NULL);
48 } else {
49 //fprintf(stderr,"(%i) found tab at %i\n",me,(int)dummy-(int)dummy1);
50 }
51 if ((dummy-dummy1 >= 3) && (strncmp(dummy1, name, strlen(name)) == 0)) {
52 found = 1; // found the parameter!
53 //fprintf(stderr,"(%i) found %s at line %i\n",me, name, line);
54
55 for (i=0;i<xth;i++) { // i = rows
56 if (type >= 3) {
57 // grid structure means, grid begins in the next line, not after keyword
58 dummy1 = dummy = free_dummy;
59 do {
60 fgets(dummy1, 256, file); // Read the whole line, skips commentary and empty ones
61 line++;
62 } while ((dummy1[0] == '#') || (dummy1[0] == '\n'));
63 if (dummy1 == NULL){
64 fprintf(stderr,"(%i) Error reading line %i\n", me, line);
65 } else {
66 //fprintf(stderr,"(%i) Reading next line %i: %s\n", me, line, dummy1);
67 }
68 } else {
69 while (*dummy == '\t')
70 dummy++;
71 }
72
73 for (j=0;j<yth;j++) { // j = columns
74 // check for lower triangular area and upper triangular area
75 if ( ((i > j) && (type == upper_trigrid)) || ((j > i) && (type == lower_trigrid))) {
76 *((double *)value) = 0.0;
77 fprintf(stderr,"%f\t",*((double *)value));
78 value += sizeof(double);
79 } else {
80 dummy1 = dummy;
81 dummy = strchr(dummy1, '\t'); // seek for tab
82 if (dummy == NULL) {
83 dummy = strchr(dummy1, '\n'); // at line end then
84 if ((j < yth-1) && (type < 4)) { // check if xth value or not yet
85 fprintf(stderr,"(%i)Error: EoL at %i and still missing %i values %d for parameter %s\n", me, line, yth-j, name);
86 //Error(FileOpenParams, NULL);
87 }
88 } else {
89 //fprintf(stderr,"(%i) found tab at %i\n",me,(int)dummy-(int)free_dummy);
90 }
91 //fprintf(stderr,"(%i) value from %i to %i\n",me,(int)dummy1-(int)free_dummy,(int)dummy-(int)free_dummy);
92 switch(type) {
93 case(grid):
94 case(lower_trigrid):
95 case(upper_trigrid):
96 *((double *)value) = atof(dummy1);
97 if ((i==0) && (j==0)) fprintf(stderr,"(%i)%s = ",me, name);
98 fprintf(stderr,"%f\t",*((double *)value));
99 value += sizeof(double);
100 break;
101 case(double_type):
102 *((double *)value) = atof(dummy1);
103 if (i == xth-1) fprintf(stderr,"(%i)%s = %f\n",me, name, *((double *) value));
104 //value += sizeof(double);
105 break;
106 case(int_type):
107 *((int *)value) = atoi(dummy1);
108 if (i == xth-1) fprintf(stderr,"(%i)%s = %i\n",me, name, *((int *) value));
109 //value += sizeof(int);
110 break;
111 default:
112 case(string_type):
113 strncpy((char *)value, dummy1, dummy-dummy1);
114 fprintf(stderr,"(%i)%s is '%s'\n",me,name,((char *) value));
115 //value += sizeof(char);
116 break;
117 }
118 }
119 while (*dummy == '\t')
120 dummy++;
121 }
122 //fprintf(stderr,"\n");
123 }
124 }
125 }
126 free(free_dummy);
127 fseek(file, file_position, SEEK_SET); // rewind to start position
128 //fprintf(stderr, "(%i) End of Parsing\n\n",me);
129
130 return (found); // true if found, false if not
131}
132
133int main(int argc, char **argv) {
134
135 FILE *cpiInputFile;
136 if (argc < 1) {
137 printf("Cant't find pseudopot path or file\n");
138 return 255;
139 }
140 cpiInputFile = fopen(argv[1],"r");
141 if (cpiInputFile == NULL) {
142 printf("Cant't find pseudopot path or file\n");
143 return 255;
144 }
145 double test;
146 ParseForParameter(cpiInputFile, NULL, 1, 1, double_type, &test);
147 printf("Parsed Value: %f", test);
148
149 return 1;
150}
Note: See TracBrowser for help on using the repository browser.