aboutsummaryrefslogtreecommitdiff
path: root/src/pmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pmt.c')
-rw-r--r--src/pmt.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/pmt.c b/src/pmt.c
new file mode 100644
index 0000000..d36e302
--- /dev/null
+++ b/src/pmt.c
@@ -0,0 +1,82 @@
+#include "pmt.h"
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include "vector.h"
+
+static int initialized = 0;
+
+pmt pmts[MAX_PMTS];
+
+int load_pmt_info()
+{
+ int i, j;
+ char line[256];
+ char *str;
+ double value;
+ int n;
+
+ FILE *f = fopen("pmt.txt", "r");
+
+ if (!f) {
+ fprintf(stderr, "failed to open pmt.txt: %s", strerror(errno));
+ return -1;
+ }
+
+ i = 0;
+ n = 0;
+ /* For the first pass, we just count how many values there are. */
+ while (fgets(line, sizeof(line), f)) {
+ size_t len = strlen(line);
+ if (len && (line[len-1] != '\n')) {
+ fprintf(stderr, "got incomplete line on line %i: '%s'\n", i, line);
+ goto err;
+ }
+
+ i += 1;
+
+ if (!len) continue;
+ else if (line[0] == '#') continue;
+
+ str = strtok(line," \n");
+
+ j = 0;
+ while (str) {
+ value = strtod(str, NULL);
+ switch (j) {
+ case 0:
+ case 1:
+ case 2:
+ pmts[n].pos[j] = value/10.0;
+ break;
+ case 3:
+ case 4:
+ case 5:
+ pmts[n].normal[j-3] = value;
+ break;
+ case 6:
+ pmts[n].pmt_type = value;
+ break;
+ }
+ j += 1;
+ str = strtok(NULL," \n");
+ }
+
+ normalize(pmts[n].normal);
+
+ n += 1;
+ }
+
+ fclose(f);
+
+ initialized = 1;
+
+ return 0;
+
+err:
+ fclose(f);
+
+ return -1;
+}
+