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

Method BDVFile

src/openboardview/FileFormats/BDVFile.cpp:25–154  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23}
24
25BDVFile::BDVFile(std::vector<char> &buf) {
26 auto buffer_size = buf.size();
27
28 char *saved_locale;
29 saved_locale = setlocale(LC_NUMERIC, "C"); // Use '.' as delimiter for strtod
30
31 ENSURE_OR_FAIL(buffer_size > 4, error_msg, return);
32 size_t file_buf_size = 3 * (1 + buffer_size);
33 file_buf = (char *)calloc(1, file_buf_size);
34 ENSURE_OR_FAIL(file_buf != nullptr, error_msg, return);
35
36 std::copy(buf.begin(), buf.end(), file_buf);
37 file_buf[buffer_size] = 0;
38 // This is for fixing degenerate utf8
39 char *arena = &file_buf[buffer_size + 1];
40 char *arena_end = file_buf + file_buf_size - 1;
41 *arena_end = 0;
42
43 decode_bdv(file_buf, buffer_size);
44
45 int current_block = 0;
46
47 std::vector<char *> lines;
48 stringfile(file_buf, lines);
49
50 std::vector<char *>::iterator line_it = lines.begin();
51 while (line_it != lines.end()) {
52 char *line = *line_it;
53 ++line_it;
54
55 while (isspace((uint8_t)*line)) line++;
56 if (!line[0]) continue;
57 if (!strcmp(line, "<<format.asc>>")) {
58 current_block = 1;
59 line_it += 8; // Skip 8 unused lines before 1st point. Might not work with
60 // all files.
61 continue;
62 }
63 if (!strcmp(line, "<<pins.asc>>")) {
64 current_block = 2;
65 line_it += 8; // Skip 8 unused lines before 1st part
66 continue;
67 }
68 if (!strcmp(line, "<<nails.asc>>")) {
69 current_block = 3;
70 line_it += 7; // Skip 7 unused lines before 1st nail
71 continue;
72 }
73
74 char *p = line;
75 char *s;
76
77 switch (current_block) {
78 case 1: { // Format
79 BRDPoint point;
80
81 double x = READ_DOUBLE();
82 point.x = x * 1000.0f; // OBV uses integers

Callers

nothing calls this directly

Calls 2

decode_bdvFunction · 0.85
stringfileFunction · 0.85

Tested by

no test coverage detected