MCPcopy Create free account
hub / github.com/OpenBoardView/OpenBoardView / CADFile

Method CADFile

src/openboardview/FileFormats/CADFile.cpp:35–165  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33}
34
35CADFile::CADFile(std::vector<char> &buf) {
36 auto buffer_size = buf.size();
37 float multiplier = 1000.0f;
38 char *saved_locale;
39 saved_locale = setlocale(LC_NUMERIC, "C"); // Use '.' as delimiter for strtod
40
41 ENSURE_OR_FAIL(buffer_size > 4, error_msg, return);
42 size_t file_buf_size = 3 * (1 + buffer_size);
43 file_buf = (char *)calloc(1, file_buf_size);
44 ENSURE_OR_FAIL(file_buf != nullptr, error_msg, return);
45
46 std::copy(buf.begin(), buf.end(), file_buf);
47 file_buf[buffer_size] = 0;
48 // This is for fixing degenerate utf8
49 char *arena = &file_buf[buffer_size + 1];
50 char *arena_end = file_buf + file_buf_size - 1;
51 *arena_end = 0;
52
53 enum Block current_block = None;
54 std::unordered_map<std::string, int> parts_id; // map between part name and part number
55 char *nailnet; // Net name for VIA
56
57 std::vector<char *> lines;
58 stringfile(file_buf, lines);
59
60 for (char *line : lines) {
61 while (isspace((uint8_t)*line)) line++;
62 if (!line[0]) continue;
63
64 if (!strncmp(line, "COMP", 4)) {
65 current_block = Parts;
66 } else if (!strncmp(line, "C_PIN", 5)) {
67 current_block = Pins;
68 } else if (!strncmp(line, "NET ", 4)) {
69 current_block = Nets;
70 } else if (!strncmp(line, "N_VIA", 5)) {
71 current_block = Vias;
72 } else {
73 current_block = Invalid;
74 continue;
75 }
76 char *p = line;
77 char *s;
78
79 switch (current_block) {
80 case Parts: {
81 BRDPart part;
82 BRDPin pin;
83 /*char *TYPE =*/READ_STR();
84 part.name = READ_STR();
85 /*char *Part(NR)=*/READ_STR();
86 /*char *Unknown =*/READ_STR();
87 /*char *Unknown =*/READ_STR();
88 /*char *X =*/READ_STR();
89 /*char *Y =*/READ_STR();
90 char *loc = READ_STR();
91 /*int *Unknown =*/READ_STR();
92 part.part_type = BRDPartType::SMD;

Callers

nothing calls this directly

Calls 1

stringfileFunction · 0.85

Tested by

no test coverage detected