annotate offline/sws-email2db.c @ 229:ed8cb3c0d312 default tip

new README, indicating repository move
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Mar 2021 18:26:13 +0000
parents 0f96b5136541
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
226
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This program reads extracts from Sysmocom webshop emails containing
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * card provisioning data and converts these bits into our sws-card-db
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * format.
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdio.h>
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdlib.h>
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <string.h>
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <strings.h>
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #define MAX_FIELDS 32
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #define MAX_FIELD_KW 7
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 char *infname;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 FILE *inf;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 char linebuf[128];
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 int lineno;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 char field_names[MAX_FIELDS][MAX_FIELD_KW+1];
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 unsigned nfields;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 get_input_line()
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 char *cp;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 if (!fgets(linebuf, sizeof linebuf, inf))
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 return(0);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 lineno++;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 cp = index(linebuf, '\n');
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 if (!cp) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 fprintf(stderr, "%s line %d: too long or missing newline\n",
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 infname, lineno);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 *cp = '\0';
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 return(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 read_field_names()
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 for (;;) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 if (!get_input_line()) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 fprintf(stderr, "error: %s EOFs in field name list\n",
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 infname);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 if (!linebuf[0])
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 break;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 if (nfields >= MAX_FIELDS) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 fprintf(stderr, "%s line %d: too many fields\n",
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 infname, lineno);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 if (strlen(linebuf) > MAX_FIELD_KW) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 fprintf(stderr, "%s line %d: field name is too long\n",
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 infname, lineno);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 strcpy(field_names[nfields], linebuf);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 nfields++;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 if (!nfields) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 fprintf(stderr, "error: %s header defines 0 fields\n", infname);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 process_one_card()
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 unsigned nf;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 int rc;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 for (nf = 0; nf < nfields; nf++) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 for (;;) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 rc = get_input_line();
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 if (!rc) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 if (!nf)
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 exit(0);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 fprintf(stderr,
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 "error: %s EOFs in the middle of a card data block\n",
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 infname);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 if (linebuf[0])
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 break;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 if (nf) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 fprintf(stderr,
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 "%s line %d: empty line in the middle of a card data block\n",
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 infname, lineno);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 if (nf)
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 putchar(' ');
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 printf("%s=%s", field_names[nf], linebuf);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 putchar('\n');
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 main(argc, argv)
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 char **argv;
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 if (argc != 2) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 fprintf(stderr, "usage: %s email-extract-file\n", argv[0]);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 infname = argv[1];
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 inf = fopen(infname, "r");
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 if (!inf) {
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 perror(infname);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 exit(1);
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 }
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 read_field_names();
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 for (;;)
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 process_one_card();
0f96b5136541 sws-email2db program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 }