FreeCalypso > hg > ueda-linux
annotate ueda/mclutils/csvbom.c @ 116:bb9908f36e23
m4-fp/qfpmnf.inc: basic fixes
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 13 Jun 2020 04:14:10 +0000 |
| parents | 422385f10084 |
| children |
| rev | line source |
|---|---|
|
84
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This program generates a BOM in CSV format whose content is a subset |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * of what is generated by ueda-mkbom; it is intended for passing BOM |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * information to assembly shops who would then import into M$ Excel. |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <string.h> |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <strings.h> |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <unistd.h> |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "../libueda/mcl.h" |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "bomstruct.h" |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 extern char *MCLfile; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 extern char *get_comp_attr(), *get_comp_multiattr(); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 int check_completeness, refdes_lists = 1; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 struct bompart *bomhead; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 do_cmdline_opts(argc, argv) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 char **argv; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 register int c; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 while ((c = getopt(argc, argv, "cM:p:")) != EOF) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 switch (c) { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 case 'c': |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 check_completeness++; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 break; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 case 'M': |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 MCLfile = optarg; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 break; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 case 'p': |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 set_popopt_list(optarg); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 break; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 default: |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 /* getopt prints the error message */ |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 exit(1); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 main(argc, argv) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 char **argv; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 do_cmdline_opts(argc, argv); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 read_MCL(); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 tally_parts(); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 output(); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 exit(0); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 output() |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 register struct component *part; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 register struct bompart *bp; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 register char *attr; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 static char unknownstr[] = "unknown"; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 puts("Manufacturer,Part number,Description,Qty,Refdes list"); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 for (bp = bomhead; bp; bp = bp->next) { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 part = bp->part; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 attr = get_comp_attr(part, "manufacturer"); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 if (attr) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 emit_csv_string(attr); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 else |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 emit_csv_string(unknownstr); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 putchar(','); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 if (attr = get_comp_attr(part, "manufacturer_part_number")) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 emit_csv_string(attr); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 else if (attr = get_comp_attr(part, "device")) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 emit_csv_string(attr); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 else |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 emit_csv_string(unknownstr); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 putchar(','); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 if (attr = get_comp_attr(part, "description")) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 emit_csv_string(attr); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 printf(",%d,", bp->qty); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 emit_refdes_list(bp->refdeslist); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 putchar('\n'); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 emit_csv_string(str) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 char *str; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 char *cp; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 int c; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 if (!index(str, ',') && !index(str, '"')) { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 fputs(str, stdout); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 return; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 putchar('"'); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 for (cp = str; c = *cp++; ) { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 if (c == '"') |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 putchar(c); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 putchar(c); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 putchar('"'); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 emit_refdes_list(le) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 register struct refdeslist *le; |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 putchar('"'); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 for (; le; le = le->next) { |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 printf("%s", le->first); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (le->last != le->first) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 printf("-%s", le->last); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 if (le->next) |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 putchar(','); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 } |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 putchar('"'); |
|
422385f10084
ueda-csvbom utility written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 } |
