Coverage Report

Created: 2026-07-15 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libredwg/src/dec_macros.h
Line
Count
Source
1
/*****************************************************************************/
2
/*  LibreDWG - free implementation of the DWG file format                    */
3
/*                                                                           */
4
/*  Copyright (C) 2009-2026 Free Software Foundation, Inc.                   */
5
/*                                                                           */
6
/*  This library is free software, licensed under the terms of the GNU       */
7
/*  General Public License as published by the Free Software Foundation,     */
8
/*  either version 3 of the License, or (at your option) any later version.  */
9
/*  You should have received a copy of the GNU General Public License        */
10
/*  along with this program.  If not, see <http://www.gnu.org/licenses/>.    */
11
/*****************************************************************************/
12
13
/*
14
 * dec_macros.h: decoding macros (for encode, print, free in the C files)
15
 * written by Felipe Castro
16
 * modified by Felipe Corrêa da Silva Sances
17
 * modified by Rodrigo Rodrigues da Silva
18
 * modified by Reini Urban
19
 * modified by Denis Pruchkovsky
20
 */
21
22
#ifndef DEC_MACROS_H
23
#define DEC_MACROS_H
24
25
/* DWG2_SPEC: decode2.c defines this to make dwg_decode_##token non-static */
26
#ifdef DWG2_SPEC
27
#  define DWG_DECODE_FUNC /* non-static */
28
#else
29
#  define DWG_DECODE_FUNC static
30
#endif
31
32
#include "config.h"
33
#if defined HAVE_CTYPE_H || defined _MSC_VER
34
#  include <ctype.h>
35
#endif
36
37
#ifdef IN_DXF_H
38
#  error in_dxf.h must be included after dec_macros.h because of FORMAT_BD
39
#endif
40
41
// needed by decode, decode_r2007 and decode_r11
42
#define ACTION decode
43
#define IS_DECODER
44
45
// redeclare versions to be from, not target
46
#include "importer.h"
47
48
#ifndef FREE_IF
49
#  define FREE_IF(ptr)                                                        \
50
0
    if (ptr)                                                                  \
51
0
      {                                                                       \
52
0
        free (ptr);                                                           \
53
0
        ptr = NULL;                                                           \
54
0
      }
55
#endif
56
57
// different to out_json
58
#define ARGS_HREF11(ref) ref->handleref.size, ref->r11_idx, ref->absolute_ref
59
#define FORMAT_HREF11 "[%u, %hd, " FORMAT_HV "]"
60
61
#undef LOG_POS
62
#define LOG_POS                                                               \
63
294k
  LOG_INSANE (" @%" PRIuSIZE ".%u",                                           \
64
294k
              obj ? dat->byte - obj->address : dat->byte, (unsigned)dat->bit);\
65
294k
  LOG_TRACE ("\n");
66
#define LOG_POS_(level)                                                       \
67
3.95k
  LOG_INSANE (" @%" PRIuSIZE ".%u",                                           \
68
3.95k
              obj ? dat->byte - obj->address : dat->byte, (unsigned)dat->bit);\
69
3.95k
  LOG (level, "\n")
70
71
#define LOG_RPOS                                                              \
72
10.5M
  LOG_INSANE (" @%" PRIuSIZE ".%u", dat->byte, (unsigned)dat->bit);           \
73
10.6M
  LOG_TRACE ("\n");
74
#define LOG_RPOS_(level)                                                      \
75
  LOG_INSANE (" @%" PRIuSIZE ".%u", dat->byte, (unsigned)dat->bit);           \
76
  LOG (level, "\n")
77
#define LOG_HPOS                                                              \
78
  LOG_INSANE (" @%" PRIuSIZE ".%u",                                           \
79
              obj && hdl_dat->byte > obj->address                             \
80
                  ? hdl_dat->byte - obj->address                              \
81
                  : hdl_dat->byte,                                            \
82
              (unsigned)hdl_dat->bit);                                        \
83
  LOG_TRACE ("\n");
84
#define LOG_HPOS_(level)                                                      \
85
  LOG_INSANE (" @%" PRIuSIZE ".%u",                                           \
86
              obj && hdl_dat->byte > obj->address                             \
87
                  ? hdl_dat->byte - obj->address                              \
88
                  : hdl_dat->byte,                                            \
89
              (unsigned)hdl_dat->bit);                                        \
90
  LOG (level, "\n");
91
92
#define VALUE(value, type, dxf)                                               \
93
0
  (void)bit_read_##type (dat);                                                \
94
0
  LOG_TRACE (FORMAT_##type " [" #type " %d]\n", (BITCODE_##type)value, dxf);
95
0
#define VALUE_RC(value, dxf) VALUE (value, RC, dxf)
96
0
#define VALUE_BS(value, dxf) VALUE (value, BS, dxf)
97
0
#define VALUE_BL(value, dxf) VALUE (value, BL, dxf)
98
0
#define VALUE_RS(value, dxf) VALUE (value, RS, dxf)
99
0
#define VALUE_RL(value, dxf) VALUE (value, RL, dxf)
100
0
#define VALUE_RLx(value, dxf) VALUE (value, RL, dxf)
101
0
#define VALUE_RD(value, dxf) VALUE (value, RD, dxf)
102
#define VALUE_BD(value, dxf) VALUE (value, BD, dxf)
103
104
#define FIELDG(nam, type, dxf)                                                \
105
12.4M
  {                                                                           \
106
12.4M
    _obj->nam = bit_read_##type (dat);                                        \
107
12.4M
    FIELD_G_TRACE (nam, type, dxf);                                           \
108
12.4M
  }
109
110
#define FIELD(nam, type)                                                      \
111
  {                                                                           \
112
    _obj->nam = bit_read_##type (dat);                                        \
113
    FIELD_TRACE (nam, type);                                                  \
114
  }
115
#define SUB_FIELD(o, nam, type, dxf)                                          \
116
196k
  {                                                                           \
117
196k
    _obj->o.nam = bit_read_##type (dat);                                      \
118
196k
    FIELD_G_TRACE (o.nam, type, dxf);                                         \
119
196k
  }
120
121
#define FIELD_CAST(nam, type, cast, dxf)                                      \
122
4.11M
  {                                                                           \
123
4.11M
    _obj->nam = (BITCODE_##cast)bit_read_##type (dat);                        \
124
4.11M
    FIELD_G_TRACE (nam, cast, dxf);                                           \
125
4.11M
  }
126
#define SUB_FIELD_CAST(o, nam, type, cast, dxf)                               \
127
707k
  {                                                                           \
128
707k
    _obj->o.nam = (BITCODE_##cast)bit_read_##type (dat);                      \
129
707k
    FIELD_G_TRACE (o.nam, cast, dxf);                                         \
130
707k
  }
131
132
#define FIELD_G_TRACE(nam, type, dxfgroup)                                    \
133
34.7M
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
134
34.7M
    {                                                                         \
135
0
      char *s1 = strrplc (#nam, "[rcount1]", "[%d]");                         \
136
0
      if (s1)                                                                 \
137
0
        {                                                                     \
138
0
          char *s2 = strrplc (s1, "[rcount2]", "[%d]");                       \
139
0
          if (s2)                                                             \
140
0
            {                                                                 \
141
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
142
0
              LOG_TRACE (strcat (s2, ": " FORMAT_##type " [" #type " %d]"),   \
143
0
                         rcount1, rcount2, (BITCODE_##type)_obj->nam, dxfgroup);\
144
0
              GCC46_DIAG_RESTORE                                              \
145
0
              free (s2);                                                      \
146
0
              free (s1);                                                      \
147
0
            }                                                                 \
148
0
          else                                                                \
149
0
            {                                                                 \
150
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
151
0
              LOG_TRACE (strcat (s1, ": " FORMAT_##type " [" #type " %d]"),   \
152
0
                         rcount1, (BITCODE_##type)_obj->nam, dxfgroup);       \
153
0
              GCC46_DIAG_RESTORE                                              \
154
0
              free (s1);                                                      \
155
0
            }                                                                 \
156
0
        }                                                                     \
157
0
      else                                                                    \
158
0
        LOG_TRACE (#nam ": " FORMAT_##type " [" #type " %d]",                 \
159
0
                   (BITCODE_##type)_obj->nam, dxfgroup);                      \
160
0
      LOG_RPOS                                                                \
161
0
    }
162
163
#define FIELD_G_TRACE_ANGLE(nam, type, dxfgroup)                              \
164
645k
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
165
645k
    {                                                                         \
166
0
      char *s1 = strrplc (#nam, "[rcount1]", "[%d]");                         \
167
0
      if (s1)                                                                 \
168
0
        {                                                                     \
169
0
          char *s2 = strrplc (s1, "[rcount2]", "[%d]");                       \
170
0
          if (s2)                                                             \
171
0
            {                                                                 \
172
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
173
0
              LOG_TRACE (                                                     \
174
0
                  strcat (s2, ": " FORMAT_##type " [" #type " %d] %gº"),      \
175
0
                  rcount1, rcount2, _obj->nam, dxfgroup,                      \
176
0
                  rad2deg (_obj->nam));                                       \
177
0
              GCC46_DIAG_RESTORE                                              \
178
0
              free (s2);                                                      \
179
0
              free (s1);                                                      \
180
0
            }                                                                 \
181
0
          else                                                                \
182
0
            {                                                                 \
183
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
184
0
              LOG_TRACE (                                                     \
185
0
                  strcat (s1, ": " FORMAT_##type " [" #type " %d] %gº"),      \
186
0
                  rcount1, _obj->nam, dxfgroup, rad2deg (_obj->nam));         \
187
0
              GCC46_DIAG_RESTORE                                              \
188
0
              free (s1);                                                      \
189
0
            }                                                                 \
190
0
        }                                                                     \
191
0
      else                                                                    \
192
0
        LOG_TRACE (#nam ": " FORMAT_##type " [" #type " %d] %gº",             \
193
0
                   (BITCODE_##type)_obj->nam, dxfgroup, rad2deg (_obj->nam)); \
194
0
      LOG_RPOS                                                                \
195
0
    }
196
197
#define FIELD_TRACE(nam, type)                                                \
198
1.41k
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
199
1.41k
    {                                                                         \
200
0
      char *s1 = strrplc (#nam, "[rcount1]", "[%d]");                         \
201
0
      if (s1)                                                                 \
202
0
        {                                                                     \
203
0
          char *s2 = strrplc (s1, "[rcount2]", "[%d]");                       \
204
0
          if (s2)                                                             \
205
0
            {                                                                 \
206
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
207
0
              LOG_TRACE (strcat (s2, ": " FORMAT_##type " " #type "\n"),      \
208
0
                         rcount1, rcount2, _obj->nam);                        \
209
0
              GCC46_DIAG_RESTORE                                              \
210
0
              free (s2);                                                      \
211
0
              free (s1);                                                      \
212
0
            }                                                                 \
213
0
          else                                                                \
214
0
            {                                                                 \
215
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
216
0
              LOG_TRACE (strcat (s1, ": " FORMAT_##type " " #type "\n"),      \
217
0
                         rcount1, _obj->nam);                                 \
218
0
              GCC46_DIAG_RESTORE                                              \
219
0
              free (s1);                                                      \
220
0
            }                                                                 \
221
0
        }                                                                     \
222
0
      else                                                                    \
223
0
        {                                                                     \
224
0
          LOG_TRACE (#nam ": " FORMAT_##type " [" #type "]\n", _obj->nam);    \
225
0
        }                                                                     \
226
0
    }
227
#define LOG_TF(level, var, len)                                               \
228
64.9k
  {                                                                           \
229
64.9k
    LOG_TF_HEX (level, var, len)                                              \
230
64.9k
    if (var && (DWG_LOGLEVEL >= DWG_LOGLEVEL_INSANE))                         \
231
64.9k
      {                                                                       \
232
0
        for (unsigned _i = 0; _i < (unsigned)(len); _i++)                     \
233
0
          {                                                                   \
234
0
            unsigned char c = ((unsigned char *)var)[_i];                     \
235
0
            LOG_INSANE ("%-2c", isprint (c) ? c : ' ');                       \
236
0
          }                                                                   \
237
0
        LOG_INSANE ("\n");                                                    \
238
0
      }                                                                       \
239
64.9k
  }
240
#define LOG_TF_HEX(level, var, len)                                           \
241
64.9k
  {                                                                           \
242
64.9k
    if (var && (DWG_LOGLEVEL >= DWG_LOGLEVEL_##level || len <= 256))          \
243
64.9k
      {                                                                       \
244
3.87M
        for (unsigned _i = 0; _i < (unsigned)(len); _i++)                     \
245
3.83M
          {                                                                   \
246
3.83M
            LOG (level, "%02X", (unsigned char)((char *)var)[_i]);            \
247
3.83M
          }                                                                   \
248
44.4k
        LOG (level, "\n");                                                    \
249
44.4k
      }                                                                       \
250
64.9k
  }
251
24.6k
#define LOG_TRACE_TF(var, len) LOG_TF (TRACE, var, len);
252
40.3k
#define LOG_INSANE_TF(var, len) LOG_TF (INSANE, var, len);
253
254
#define FIELD_VEC_TRACE_N(nam, type, vcount, value, dxf)                      \
255
491k
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
256
491k
    {                                                                         \
257
0
      char *s1 = strrplc (#nam, "[rcount1]", "[%d]");                         \
258
0
      if (s1)                                                                 \
259
0
        {                                                                     \
260
0
          char *s2 = strrplc (s1, "[rcount2]", "[%d]");                       \
261
0
          if (s2)                                                             \
262
0
            {                                                                 \
263
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
264
0
              LOG_TRACE (                                                     \
265
0
                  strcat (s2, "[%ld]: " FORMAT_##type " [" #type " %d]"),     \
266
0
                  rcount1, rcount2, vcount, value, dxf);                      \
267
0
              GCC46_DIAG_RESTORE                                              \
268
0
              free (s2);                                                      \
269
0
              free (s1);                                                      \
270
0
            }                                                                 \
271
0
          else                                                                \
272
0
            {                                                                 \
273
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
274
0
              LOG_TRACE (                                                     \
275
0
                  strcat (s1, "[%ld]: " FORMAT_##type " [" #type " %d]"),     \
276
0
                  rcount1, vcount, value, dxf);                               \
277
0
              GCC46_DIAG_RESTORE                                              \
278
0
              free (s1);                                                      \
279
0
            }                                                                 \
280
0
        }                                                                     \
281
0
      else                                                                    \
282
0
        {                                                                     \
283
0
          LOG_TRACE (#nam "[%ld]: " FORMAT_##type " [" #type " %d]", vcount,  \
284
0
                     value, dxf);                                             \
285
0
        }                                                                     \
286
0
      LOG_POS;                                                                \
287
0
    }
288
#define FIELD_2PT_TRACE(nam, type, dxf)                                       \
289
8.94M
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
290
8.94M
    {                                                                         \
291
0
      char *s1 = strrplc (#nam, "[rcount1]", "[%d]");                         \
292
0
      if (s1)                                                                 \
293
0
        {                                                                     \
294
0
          char *s2 = strrplc (s1, "[rcount2]", "[%d]");                       \
295
0
          if (s2)                                                             \
296
0
            {                                                                 \
297
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
298
0
              LOG_TRACE (strcat (s2, ": (" FORMAT_BD ", " FORMAT_BD           \
299
0
                                     ") [" #type " %d]"),                     \
300
0
                         rcount1, rcount2, _obj->nam.x, _obj->nam.y, dxf);    \
301
0
              GCC46_DIAG_RESTORE                                              \
302
0
              free (s2);                                                      \
303
0
              free (s1);                                                      \
304
0
            }                                                                 \
305
0
          else                                                                \
306
0
            {                                                                 \
307
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
308
0
              LOG_TRACE (strcat (s1, ": (" FORMAT_BD ", " FORMAT_BD           \
309
0
                                     ") [" #type " %d]"),                     \
310
0
                         rcount1, _obj->nam.x, _obj->nam.y, dxf);             \
311
0
              GCC46_DIAG_RESTORE                                              \
312
0
              free (s1);                                                      \
313
0
            }                                                                 \
314
0
        }                                                                     \
315
0
      else                                                                    \
316
0
        LOG_TRACE (#nam ": (" FORMAT_BD ", " FORMAT_BD ") [" #type " %d]",    \
317
0
                   _obj->nam.x, _obj->nam.y, dxf);                            \
318
0
      LOG_POS;                                                                \
319
0
    }
320
#define FIELD_3PT_TRACE(nam, type, dxf)                                       \
321
14.1M
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
322
14.1M
    {                                                                         \
323
0
      char *s1 = strrplc (#nam, "[rcount1]", "[%d]");                         \
324
0
      if (s1)                                                                 \
325
0
        {                                                                     \
326
0
          char *s2 = strrplc (s1, "[rcount2]", "[%d]");                       \
327
0
          if (s2)                                                             \
328
0
            {                                                                 \
329
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
330
0
              LOG_TRACE (strcat (s2, ": (" FORMAT_BD ", " FORMAT_BD           \
331
0
                                     ", " FORMAT_BD ") [" #type " %d]"),      \
332
0
                         rcount1, rcount2, _obj->nam.x, _obj->nam.y,          \
333
0
                         _obj->nam.z, dxf);                                   \
334
0
              GCC46_DIAG_RESTORE                                              \
335
0
              free (s2);                                                      \
336
0
              free (s1);                                                      \
337
0
            }                                                                 \
338
0
          else                                                                \
339
0
            {                                                                 \
340
0
              GCC46_DIAG_IGNORE (-Wformat-nonliteral)                         \
341
0
              LOG_TRACE (strcat (s1, ": (" FORMAT_BD ", " FORMAT_BD           \
342
0
                                     ", " FORMAT_BD ") [" #type " %d]"),      \
343
0
                         rcount1, _obj->nam.x, _obj->nam.y, _obj->nam.z, dxf);\
344
0
              GCC46_DIAG_RESTORE                                              \
345
0
              free (s1);                                                      \
346
0
            }                                                                 \
347
0
        }                                                                     \
348
0
      else                                                                    \
349
0
        {                                                                     \
350
0
          LOG_TRACE (#nam ": (" FORMAT_BD ", " FORMAT_BD ", " FORMAT_BD       \
351
0
                          ") [" #type " %d]",                                 \
352
0
                     _obj->nam.x, _obj->nam.y, _obj->nam.z, dxf);             \
353
0
        }                                                                     \
354
0
      LOG_POS;                                                                \
355
0
    }
356
357
#define ANYCODE -1
358
#define VALUE_HANDLE(ref, nam, code, dxf)                                     \
359
7.14M
  {                                                                           \
360
7.14M
    PRE (R_13b1)                                                              \
361
7.14M
    {                                                                         \
362
674k
      size_t _pos = bit_position (dat);                                       \
363
674k
      if (ref && !ref->handleref.is_global)                                   \
364
674k
        free (ref);                                                           \
365
674k
      ref = dwg_decode_preR13_handleref (dat, code /*as size */, dwg);        \
366
674k
      LOG_TRACE (#nam ": %hd [H(%s) %d]", (short)ref->r11_idx,                \
367
674k
                 code == 1 ? "RC" : "RSd", dxf);                              \
368
674k
      LOG_INSANE (" @%" PRIuSIZE ".%u", _pos / 8, (unsigned)(_pos % 8));      \
369
674k
      LOG_TRACE ("\n");                                                       \
370
674k
    }                                                                         \
371
7.14M
    LATER_VERSIONS                                                            \
372
7.14M
    {                                                                         \
373
6.46M
      size_t _pos = bit_position (hdl_dat);                                   \
374
6.46M
      if (code >= 0)                                                          \
375
6.46M
        ref = dwg_decode_handleref_with_code (hdl_dat, obj, dwg, code);       \
376
6.46M
      else                                                                    \
377
6.46M
        ref = dwg_decode_handleref (hdl_dat, obj, dwg);                       \
378
6.46M
      if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                 \
379
6.46M
        {                                                                     \
380
0
          if (ref)                                                            \
381
0
            {                                                                 \
382
0
              LOG_TRACE (#nam ": " FORMAT_REF " [H %d]", ARGS_REF (ref),      \
383
0
                         dxf);                                                \
384
0
              if (dwg_ref_object_silent (dwg, ref)                            \
385
0
                  && DWG_LOGLEVEL > DWG_LOGLEVEL_TRACE)                       \
386
0
                {                                                             \
387
0
                  int alloced;                                                \
388
0
                  const char *u8 = dwg_ref_tblname (dwg, ref, &alloced);      \
389
0
                  if (u8 && *u8)                                              \
390
0
                    HANDLER (OUTPUT, " => %s %s", dwg_ref_objname (dwg, ref), \
391
0
                             u8);                                             \
392
0
                  if (u8 && alloced)                                          \
393
0
                    free ((void *)u8);                                        \
394
0
                }                                                             \
395
0
            }                                                                 \
396
0
          else                                                                \
397
0
            {                                                                 \
398
0
              HANDLER (OUTPUT, #nam ": NULL %d [H %d]", code, dxf);           \
399
0
            }                                                                 \
400
0
          LOG_INSANE (" @%" PRIuSIZE ".%u", _pos / 8, (unsigned)(_pos % 8));  \
401
0
          HANDLER (OUTPUT, "\n");                                             \
402
0
        }                                                                     \
403
6.46M
    }                                                                         \
404
7.14M
  }
405
6.70M
#define FIELD_HANDLE(nam, code, dxf) VALUE_HANDLE (_obj->nam, nam, code, dxf)
406
#define SUB_FIELD_HANDLE(o, nam, code, dxf)                                   \
407
366k
  VALUE_HANDLE (_obj->o.nam, o.nam, code, dxf)
408
#define VALUE_H(hdl, dxf)                                                     \
409
138k
  {                                                                           \
410
138k
    size_t pos;                                                               \
411
138k
    PRE (R_13b1)                                                              \
412
138k
    {                                                                         \
413
138k
      pos = bit_position (dat);                                               \
414
138k
      error |= bit_read_H (dat, &hdl);                                        \
415
138k
    }                                                                         \
416
138k
    else                                                                      \
417
138k
    {                                                                         \
418
0
      pos = bit_position (hdl_dat);                                           \
419
0
      error |= bit_read_H (hdl_dat, &hdl);                                    \
420
0
    }                                                                         \
421
138k
    LOG_TRACE ("handle: " FORMAT_H " [H %d]", ARGS_H (hdl), dxf);             \
422
138k
    LOG_INSANE (" @%" PRIuSIZE ".%u", pos / 8, (unsigned)(pos % 8));          \
423
138k
    LOG_TRACE ("\n");                                                         \
424
138k
  }
425
426
#define VALUE_HANDLE_N(ref, nam, vcount, code, dxf)                           \
427
11.9M
  {                                                                           \
428
11.9M
    PRE (R_13b1)                                                              \
429
11.9M
    {                                                                         \
430
0
      size_t pos = bit_position (dat);                                        \
431
0
      ref = dwg_decode_preR13_handleref (dat, code, dwg);                     \
432
0
      LOG_TRACE (#nam "[%d]: " FORMAT_RS " [RS %d]", (int)vcount,             \
433
0
                 ref->r11_idx, dxf);                                          \
434
0
      LOG_INSANE (" @%" PRIuSIZE ".%u", pos / 8, (unsigned)(pos % 8));        \
435
0
      LOG_TRACE ("\n");                                                       \
436
0
    }                                                                         \
437
11.9M
    LATER_VERSIONS                                                            \
438
11.9M
    {                                                                         \
439
11.9M
      size_t pos = bit_position (hdl_dat);                                    \
440
11.9M
      if (code >= 0)                                                          \
441
11.9M
        ref = dwg_decode_handleref_with_code (hdl_dat, obj, dwg, code);       \
442
11.9M
      else                                                                    \
443
11.9M
        ref = dwg_decode_handleref (hdl_dat, obj, dwg);                       \
444
11.9M
      if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                 \
445
11.9M
        {                                                                     \
446
0
          if (ref)                                                            \
447
0
            {                                                                 \
448
0
              char *_name = strrplc (#nam, "[vcount]", "");                   \
449
0
              LOG_TRACE ("%s[%d]: " FORMAT_REF " [H* %d]",                    \
450
0
                         _name ? _name : #nam, (int)vcount, ARGS_REF (ref),   \
451
0
                         dxf);                                                \
452
0
              if (_name)                                                      \
453
0
                free (_name);                                                 \
454
0
              if (dwg_ref_object_silent (dwg, ref)                            \
455
0
                  && DWG_LOGLEVEL > DWG_LOGLEVEL_TRACE)                       \
456
0
                {                                                             \
457
0
                  int alloced;                                                \
458
0
                  const char *u8 = dwg_ref_tblname (dwg, ref, &alloced);      \
459
0
                  HANDLER (OUTPUT, " => %s %s", dwg_ref_objname (dwg, ref),   \
460
0
                           u8);                                               \
461
0
                  if (alloced)                                                \
462
0
                    free ((void *)u8);                                        \
463
0
                }                                                             \
464
0
            }                                                                 \
465
0
          else                                                                \
466
0
            {                                                                 \
467
0
              LOG_TRACE (#nam "[%d]: NULL %d [H* %d]", (int)vcount, code,     \
468
0
                         dxf);                                                \
469
0
            }                                                                 \
470
0
          LOG_INSANE (" @%" PRIuSIZE ".%u", pos / 8, (unsigned)(pos % 8));    \
471
0
          LOG_TRACE ("\n");                                                   \
472
0
        }                                                                     \
473
11.9M
    }                                                                         \
474
11.9M
  }
475
#define FIELD_HANDLE_N(nam, vcount, code, dxf)                                \
476
9.95M
  VALUE_HANDLE_N (_obj->nam, nam, vcount, code, dxf)
477
478
#define FIELD_DATAHANDLE(nam, code, dxf)                                      \
479
9.94k
  {                                                                           \
480
9.94k
    _obj->nam = dwg_decode_handleref (dat, obj, dwg);                         \
481
9.94k
    if (_obj->nam)                                                            \
482
9.94k
      {                                                                       \
483
5.52k
        LOG_TRACE (#nam ": " FORMAT_H " [H %d]",                              \
484
5.52k
                   ARGS_H (_obj->nam->handleref), dxf);                       \
485
5.52k
        LOG_RPOS                                                              \
486
5.52k
      }                                                                       \
487
9.94k
  }
488
489
1.02M
#define FIELD_B(nam, dxf) FIELDG (nam, B, dxf)
490
65.8k
#define FIELD_BB(nam, dxf) FIELDG (nam, BB, dxf)
491
#define FIELD_3B(nam, dxf) FIELDG (nam, 3B, dxf)
492
8.94M
#define FIELD_BS(nam, dxf) FIELDG (nam, BS, dxf)
493
134k
#define FIELD_BL(nam, dxf) FIELDG (nam, BL, dxf)
494
0
#define FIELD_BLL(nam, dxf) FIELDG (nam, BLL, dxf)
495
#define FIELD_BD(nam, dxf)                                                    \
496
16.6M
  {                                                                           \
497
16.6M
    _obj->nam = bit_read_BD (dat);                                            \
498
16.6M
    if (bit_isnan (_obj->nam))                                                \
499
16.6M
      {                                                                       \
500
5.13k
        FIELD_G_TRACE (nam, BD, dxf);                                         \
501
5.13k
        LOG_ERROR ("Invalid BD " #nam);                                       \
502
5.13k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
503
5.13k
      }                                                                       \
504
16.6M
    if (dxf >= 50 && dxf < 54)                                                \
505
16.6M
      {                                                                       \
506
645k
        FIELD_G_TRACE_ANGLE (nam, BD, dxf);                                   \
507
645k
      }                                                                       \
508
16.6M
    else                                                                      \
509
16.6M
      {                                                                       \
510
15.9M
        FIELD_G_TRACE (nam, BD, dxf);                                         \
511
15.9M
      }                                                                       \
512
16.6M
  }
513
14.3k
#define FIELD_BLx(nam, dxf) FIELD_CAST (nam, BL, BLx, dxf)
514
0
#define SUB_FIELD_BLx(o, nam, dxf) SUB_FIELD_CAST (o, nam, BL, BLx, dxf)
515
196k
#define SUB_FIELD_RC(o, nam, dxf) SUB_FIELD (o, nam, RC, dxf)
516
#define FIELD_RCx(nam, dxf) FIELD_CAST (nam, RC, RCx, dxf)
517
149k
#define FIELD_RCd(nam, dxf) FIELD_CAST (nam, RC, RCd, dxf)
518
17.8k
#define FIELD_RLx(nam, dxf) FIELD_CAST (nam, RL, RLx, dxf)
519
8
#define FIELD_RLLx(nam, dxf) FIELD_CAST (nam, RLL, RLLx, dxf)
520
2.69M
#define FIELD_BSx(nam, dxf) FIELD_CAST (nam, BS, BSx, dxf)
521
7.48k
#define FIELD_RSd(nam, dxf) FIELD_CAST (nam, RS, RSd, dxf)
522
76.0k
#define FIELD_BSd(nam, dxf) FIELD_CAST (nam, BS, BSd, dxf)
523
707k
#define SUB_FIELD_BSd(o, nam, dxf) SUB_FIELD_CAST (o, nam, BS, BSd, dxf)
524
392k
#define FIELD_BLd(nam, dxf) FIELD_CAST (nam, BL, BLd, dxf)
525
18
#define FIELD_RLd(nam, dxf) FIELD_CAST (nam, RL, RLd, dxf)
526
791k
#define FIELD_RC(nam, dxf) FIELDG (nam, RC, dxf)
527
#define FIELD_RCu(nam, dxf)                                                   \
528
18.6k
  {                                                                           \
529
18.6k
    _obj->nam = bit_read_RC (dat);                                            \
530
18.6k
    LOG_TRACE (#nam ": %u [RC %d]", (unsigned)((unsigned char)_obj->nam),     \
531
18.6k
               dxf);                                                          \
532
18.6k
    LOG_RPOS                                                                  \
533
18.6k
  }
534
0
#define SUB_FIELD_RCd(o, nam, dxf) SUB_FIELD_CAST (o, nam, RC, RCd, dxf)
535
101k
#define FIELD_RS(nam, dxf) FIELDG (nam, RS, dxf)
536
292k
#define FIELD_RSx(nam, dxf) FIELD_CAST (nam, RS, RSx, dxf)
537
#define FIELD_HV(nam, dxf) FIELD_CAST (nam, RLL, RLLx, dxf)
538
#define FIELD_RD(nam, dxf)                                                    \
539
1.46M
  {                                                                           \
540
1.46M
    _obj->nam = bit_read_RD (dat);                                            \
541
1.46M
    if (bit_isnan (_obj->nam))                                                \
542
1.46M
      {                                                                       \
543
28.7k
        LOG_ERROR ("Invalid RD " #nam);                                       \
544
28.7k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
545
28.7k
      }                                                                       \
546
1.46M
    if (dxf >= 50 && dxf < 54)                                                \
547
1.43M
      {                                                                       \
548
202k
        LOG_TRACE (#nam ": " FORMAT_RD " [RD %d]  %gº", _obj->nam, dxf,       \
549
202k
                   rad2deg (_obj->nam));                                      \
550
202k
        LOG_RPOS                                                              \
551
202k
      }                                                                       \
552
1.43M
    else                                                                      \
553
1.43M
      {                                                                       \
554
1.23M
        FIELD_G_TRACE (nam, RD, dxf);                                         \
555
1.23M
      }                                                                       \
556
1.43M
  }
557
24.6k
#define FIELD_RL(nam, dxf) FIELDG (nam, RL, dxf)
558
366
#define FIELD_RLL(nam, dxf) FIELDG (nam, RLL, dxf)
559
#define FIELD_RLLd(nam, dxf) FIELDG (nam, RLLd, dxf)
560
#define FIELD_MC(nam, dxf) FIELDG (nam, MC, dxf)
561
#define FIELD_MS(nam, dxf) FIELDG (nam, MS, dxf)
562
/* preR13 we have no obj->address and obj->size yet, skip VECTOR_CHKCOUNT */
563
// clang-format off
564
#define FIELD_TF(nam, len, dxf)                                               \
565
15.0k
  {                                                                           \
566
15.0k
    SINCE (R_13b1) { _obj->nam = NULL; VECTOR_CHKCOUNT (nam, TF, len, dat) }  \
567
15.0k
    _obj->nam = bit_read_TF (dat, (size_t)len);                               \
568
13.5k
    LOG_TRACE (#nam ": \"%s\" [TF %" PRIuSIZE " " #dxf "]", _obj->nam, (size_t)len); \
569
13.5k
    if (!_obj->nam)                                                           \
570
13.5k
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
571
13.5k
    LOG_INSANE (" @%" PRIuSIZE ".%u", dat->byte, (unsigned)dat->bit);         \
572
12.8k
    LOG_TRACE ("\n");                                                         \
573
12.8k
    LOG_TRACE_TF (FIELD_VALUE (nam), (int)len);                               \
574
12.8k
  }
575
#define FIELD_TFv(nam, len, dxf)                                              \
576
16.1k
  {                                                                           \
577
16.1k
    /* if (_obj->nam) free (_obj->nam); // preR13 add_Document defaults */    \
578
16.1k
    SINCE (R_13b1) { _obj->nam = NULL; VECTOR_CHKCOUNT (nam, TF, len, dat) }  \
579
16.1k
    _obj->nam = (BITCODE_TV)bit_read_TF (dat, (size_t)len);                   \
580
16.1k
    LOG_TRACE (#nam ": \"%s\" [TFv %" PRIuSIZE " " #dxf "]", _obj->nam,       \
581
16.1k
               (size_t)len);                                                  \
582
16.1k
    if (!_obj->nam)                                                           \
583
16.1k
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
584
16.1k
    LOG_RPOS                                                                  \
585
13.3k
    /* LOG_TRACE_TF (FIELD_VALUE (nam), (int)len); */                         \
586
13.3k
  }
587
#define FIELD_TFF(nam, len, dxf)                                              \
588
552
  {                                                                           \
589
552
    SINCE (R_13b1) { _VECTOR_CHKCOUNT_STATIC (nam, len, 8, dat) }             \
590
552
    bit_read_fixed (dat, _obj->nam, (size_t)len);                             \
591
552
    LOG_TRACE (#nam ": \"%.*s\" [TFF %" PRIuSIZE " " #dxf "]", (int)len,      \
592
552
               _obj->nam, (size_t)len);                                       \
593
552
    LOG_RPOS                                                                  \
594
552
    LOG_TRACE_TF (FIELD_VALUE (nam), (size_t)len);                            \
595
552
  }
596
#define FIELD_TFFx(nam, len, dxf)                                             \
597
2
  {                                                                           \
598
2
    SINCE (R_13b1) { _VECTOR_CHKCOUNT_STATIC (nam, len, 8, dat) }             \
599
2
    bit_read_fixed (dat, (BITCODE_RC*)_obj->nam, (int)len);                   \
600
2
    LOG_TRACE (#nam ": [TFFx %d " #dxf "]", (int)len);                        \
601
2
    LOG_RPOS                                                                  \
602
2
    LOG_TRACE_TF ((BITCODE_RC*)_obj->nam, (int)len);                          \
603
2
  }
604
#define FIELD_T16(nam, dxf)                                                   \
605
208
    if (dat->from_version < R_2007)                                           \
606
208
      {                                                                       \
607
208
        _obj->nam = (BITCODE_T16)bit_read_T16 (dat);                          \
608
208
        LOG_TRACE (#nam ": %s [T16 " #dxf "]", _obj->nam);                    \
609
208
        LOG_RPOS                                                              \
610
208
      }                                                                       \
611
208
    else                                                                      \
612
208
      {                                                                       \
613
0
        _obj->nam = (BITCODE_T16)bit_read_TU16 (dat);                         \
614
0
        LOG_TRACE_TU (#nam, FIELD_VALUE (nam), dxf);                          \
615
0
      }
616
#define FIELD_T32(nam, dxf)                                                   \
617
0
  {                                                                           \
618
0
    if (dat->from_version < R_2007)                                           \
619
0
      {                                                                       \
620
0
        FIELDG (nam, T32, dxf);                                               \
621
0
      }                                                                       \
622
0
    else                                                                      \
623
0
      {                                                                       \
624
0
        _obj->nam = bit_read_TU32 (dat);                                      \
625
0
        LOG_TRACE_TU (#nam, FIELD_VALUE (nam), dxf);                          \
626
0
      }                                                                       \
627
0
  }
628
#define FIELD_TU16(nam, dxf)                                                  \
629
  {                                                                           \
630
    _obj->nam = bit_read_TU16 (dat);                                          \
631
    LOG_TRACE_TU (#nam, FIELD_VALUE (nam), dxf);                              \
632
  }
633
#define FIELD_TU32(nam, dxf)                                                  \
634
  {                                                                           \
635
    _obj->nam = bit_read_TU32 (dat);                                          \
636
    if (dat->from_version < R_2007)                                           \
637
      {                                                                       \
638
        LOG_TRACE (#nam ": \"%s\" [TU32 %d]", _obj->nam, dxf)                 \
639
        LOG_RPOS                                                              \
640
      }                                                                       \
641
    else                                                                      \
642
      {                                                                       \
643
        LOG_TRACE_TU (#nam, FIELD_VALUE (nam), dxf)                           \
644
      }                                                                       \
645
  }
646
#define FIELD_TV(nam, dxf)                                                    \
647
340k
  {                                                                           \
648
340k
    _obj->nam = bit_read_TV (dat);                                            \
649
340k
    LOG_TRACE_TV (#nam ": \"%s\" [TV %d]", _obj->nam, dxf);                   \
650
340k
  }
651
#define FIELD_TU(nam, dxf)                                                    \
652
  {                                                                           \
653
    _obj->nam = (BITCODE_TU)bit_read_TU (str_dat);                            \
654
    LOG_TRACE_TU (#nam, (BITCODE_TU)FIELD_VALUE (nam), dxf);                  \
655
  }
656
// clang-format on
657
#define FIELD_T(nam, dxf)                                                     \
658
8.30M
  {                                                                           \
659
8.30M
    if (dat->from_version < R_2007)                                           \
660
8.30M
      {                                                                       \
661
8.30M
        _obj->nam = bit_read_TV (dat);                                        \
662
8.30M
        LOG_TRACE_TV (#nam ": \"%s\" [TV %d]", _obj->nam, dxf);               \
663
8.30M
      }                                                                       \
664
8.30M
    else                                                                      \
665
8.30M
      {                                                                       \
666
0
        if (!obj || obj->has_strings) /* header_vars */                       \
667
0
          {                                                                   \
668
0
            _obj->nam = (BITCODE_T)bit_read_TU (str_dat);                     \
669
0
            LOG_TRACE_TU (#nam, (BITCODE_TU)FIELD_VALUE (nam), dxf);          \
670
0
          }                                                                   \
671
0
        else                                                                  \
672
0
          {                                                                   \
673
0
            LOG_TRACE_TU (#nam, L"", dxf);                                    \
674
0
            LOG_INSANE (" !has_strings\n");                                   \
675
0
          }                                                                   \
676
0
      }                                                                       \
677
8.30M
  }
678
34.6k
#define FIELD_BT(nam, dxf) FIELDG (nam, BT, dxf)
679
#define FIELD_4BITS(nam, dxf)                                                 \
680
36.5k
  {                                                                           \
681
36.5k
    int _b = _obj->nam = bit_read_4BITS (dat);                                \
682
36.5k
    LOG_TRACE (#nam ": b%d%d%d%d [4BITS %d]", _b & 8, _b & 4, _b & 2, _b & 1, \
683
36.5k
               dxf);                                                          \
684
36.5k
    LOG_RPOS                                                                  \
685
36.5k
  }
686
687
#define FIELD_BE(nam, dxf)                                                    \
688
33.6k
  {                                                                           \
689
33.6k
    bit_read_BE (dat, &_obj->nam.x, &_obj->nam.y, &_obj->nam.z);              \
690
33.6k
    if (dat->version >= R_2000 && FIELD_VALUE (nam.x) == 0.0                  \
691
33.6k
        && FIELD_VALUE (nam.y) == 0.0 && FIELD_VALUE (nam.z) == 1.0)          \
692
33.6k
      LOG_TRACE (#nam ": default 0,0,1 [B %d]", dxf);                         \
693
33.6k
    else                                                                      \
694
33.6k
      LOG_TRACE (#nam ": (%f, %f, %f) [BE %d]", _obj->nam.x, _obj->nam.y,     \
695
33.6k
                 _obj->nam.z, dxf);                                           \
696
33.6k
    LOG_POS;                                                                  \
697
33.6k
  }
698
#define TRACE_DD                                                              \
699
419k
  {                                                                           \
700
419k
    BITCODE_BB result = 0;                                                    \
701
419k
    BITCODE_RC byte;                                                          \
702
419k
    if ((dat->byte * 8) + 8 + dat->bit > dat->size * 8)                       \
703
419k
      {                                                                       \
704
92.8k
        loglevel = dat->opts & DWG_OPTS_LOGLEVEL;                             \
705
92.8k
        LOG_ERROR ("%s FIELD_DD buffer overflow at pos %" PRIuSIZE            \
706
92.8k
                   ".%u, size %" PRIuSIZE ","                                 \
707
92.8k
                   " advance by 8",                                           \
708
92.8k
                   __FUNCTION__, dat->byte, dat->bit, dat->size);             \
709
92.8k
      }                                                                       \
710
419k
    else                                                                      \
711
419k
      {                                                                       \
712
327k
        byte = dat->chain[dat->byte];                                         \
713
327k
        if (dat->bit < 7)                                                     \
714
327k
          result = (byte & (0xc0 >> dat->bit)) >> (6 - dat->bit);             \
715
327k
        else                                                                  \
716
327k
          {                                                                   \
717
680
            result = (byte & 0x01) << 1;                                      \
718
680
            if (dat->byte < dat->size - 1)                                    \
719
680
              {                                                               \
720
680
                byte = dat->chain[dat->byte + 1];                             \
721
680
                result |= (byte & 0x80) >> 7;                                 \
722
680
              }                                                               \
723
680
          }                                                                   \
724
327k
      }                                                                       \
725
419k
    LOG_HANDLE ("DD code %u\n", result);                                      \
726
419k
  }
727
#define FIELD_DD(nam, _default, dxf)                                          \
728
419k
  {                                                                           \
729
419k
    TRACE_DD                                                                  \
730
419k
    FIELD_VALUE (nam) = bit_read_DD (dat, _default);                          \
731
419k
    if (bit_isnan (_obj->nam))                                                \
732
419k
      {                                                                       \
733
1.22k
        LOG_ERROR ("Invalid DD " #nam);                                       \
734
1.22k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
735
1.22k
      }                                                                       \
736
419k
  }
737
#define FIELD_2DD(nam, def, dxf)                                              \
738
11.7k
  {                                                                           \
739
11.7k
    FIELD_DD (nam.x, FIELD_VALUE (def.x), dxf);                               \
740
11.4k
    FIELD_DD (nam.y, FIELD_VALUE (def.y), dxf + 10);                          \
741
11.3k
    FIELD_2PT_TRACE (nam, 2DD, dxf);                                          \
742
11.3k
  }
743
#define FIELD_3DD(nam, def, dxf)                                              \
744
7.59k
  {                                                                           \
745
7.59k
    FIELD_DD (nam.x, FIELD_VALUE (def.x), dxf);                               \
746
7.49k
    FIELD_DD (nam.y, FIELD_VALUE (def.y), dxf + 10);                          \
747
7.44k
    FIELD_DD (nam.z, FIELD_VALUE (def.z), dxf + 20);                          \
748
7.36k
    FIELD_3PT_TRACE (nam, 3DD, dxf);                                          \
749
7.36k
  }
750
#define FIELD_3RD(nam, dxf)                                                   \
751
245k
  {                                                                           \
752
245k
    _obj->nam.x = bit_read_RD (dat);                                          \
753
245k
    _obj->nam.y = bit_read_RD (dat);                                          \
754
245k
    _obj->nam.z = bit_read_RD (dat);                                          \
755
245k
    if (bit_isnan (_obj->nam.x) || bit_isnan (_obj->nam.y)                    \
756
245k
        || bit_isnan (_obj->nam.z))                                           \
757
245k
      {                                                                       \
758
34.1k
        LOG_ERROR ("Invalid 3RD " #nam);                                      \
759
34.1k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
760
34.1k
      }                                                                       \
761
245k
    FIELD_3PT_TRACE (nam, 3RD, dxf);                                          \
762
211k
  }
763
#define FIELD_3BD(nam, dxf)                                                   \
764
13.8M
  {                                                                           \
765
13.8M
    _obj->nam.x = bit_read_BD (dat);                                          \
766
13.8M
    _obj->nam.y = bit_read_BD (dat);                                          \
767
13.8M
    _obj->nam.z = bit_read_BD (dat);                                          \
768
13.8M
    if (bit_isnan (_obj->nam.x) || bit_isnan (_obj->nam.y)                    \
769
13.8M
        || bit_isnan (_obj->nam.z))                                           \
770
13.8M
      {                                                                       \
771
10.1k
        LOG_ERROR ("Invalid 3BD " #nam);                                      \
772
10.1k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
773
10.1k
      }                                                                       \
774
13.8M
    FIELD_3PT_TRACE (nam, 3BD, dxf);                                          \
775
13.8M
  }
776
#define FIELD_2RD(nam, dxf)                                                   \
777
3.60M
  {                                                                           \
778
3.60M
    _obj->nam.x = bit_read_RD (dat);                                          \
779
3.60M
    _obj->nam.y = bit_read_RD (dat);                                          \
780
3.60M
    if (bit_isnan (_obj->nam.x) || bit_isnan (_obj->nam.y))                   \
781
3.60M
      {                                                                       \
782
64.4k
        LOG_ERROR ("Invalid 2RD " #nam);                                      \
783
64.4k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
784
64.4k
      }                                                                       \
785
3.60M
    FIELD_2PT_TRACE (nam, 2RD, dxf);                                          \
786
3.53M
  }
787
// FIXME: does this even exist? normal 2DPOINT is 2RD
788
//   HATCH.deflines.pt0,offset LAYOUT.plot_origin,plot_window_{ll,ur},
789
//   LAYOUT.paper_image_origin GEODATA.northdir, GEODATA.refpt0,1 .zero1, zero2
790
//   BACKGROUND.offset,scale
791
#define FIELD_2BD(nam, dxf)                                                   \
792
  {                                                                           \
793
    _obj->nam.x = bit_read_BD (dat);                                          \
794
    _obj->nam.y = bit_read_BD (dat);                                          \
795
    if (bit_isnan (_obj->nam.x) || bit_isnan (_obj->nam.y))                   \
796
      {                                                                       \
797
        LOG_ERROR ("Invalid 2BD " #nam);                                      \
798
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
799
      }                                                                       \
800
    FIELD_2PT_TRACE (nam, 2BD, dxf);                                          \
801
  }
802
#define FIELD_2BD_1(nam, dxf)                                                 \
803
5.39M
  {                                                                           \
804
5.39M
    _obj->nam.x = bit_read_BD (dat);                                          \
805
5.39M
    _obj->nam.y = bit_read_BD (dat);                                          \
806
5.39M
    if (bit_isnan (_obj->nam.x) || bit_isnan (_obj->nam.y))                   \
807
5.39M
      {                                                                       \
808
1.47k
        LOG_ERROR ("Invalid 2BD_1 " #nam);                                    \
809
1.47k
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
810
1.47k
      }                                                                       \
811
5.39M
    FIELD_2PT_TRACE (nam, 2BD_1, dxf);                                        \
812
5.39M
  }
813
// FIELDG(nam.x, BD, dxf); FIELDG(nam.y, BD, dxf+1);
814
#define FIELD_3BD_1(nam, dxf)                                                 \
815
50.7k
  {                                                                           \
816
50.7k
    _obj->nam.x = bit_read_BD (dat);                                          \
817
50.7k
    _obj->nam.y = bit_read_BD (dat);                                          \
818
50.7k
    _obj->nam.z = bit_read_BD (dat);                                          \
819
50.7k
    if (bit_isnan (_obj->nam.x) || bit_isnan (_obj->nam.y)                    \
820
50.7k
        || bit_isnan (_obj->nam.z))                                           \
821
50.7k
      {                                                                       \
822
276
        LOG_ERROR ("Invalid 3BD_1 " #nam);                                    \
823
276
        return DWG_ERR_VALUEOUTOFBOUNDS;                                      \
824
276
      }                                                                       \
825
50.7k
    FIELD_3PT_TRACE (nam, 3BD_1, dxf);                                        \
826
50.5k
  }
827
//    FIELDG(nam.x, BD, dxf); FIELDG(nam.y, BD, dxf+1);
828
//    FIELDG(nam.z, BD, dxf+2); }
829
#define FIELD_2DPOINT(nam, dxf) FIELD_2RD (nam, dxf)
830
12.4M
#define FIELD_3DPOINT(nam, dxf) FIELD_3BD (nam, dxf)
831
#define FIELD_3DVECTOR(nam, dxf) FIELD_3BD_1 (nam, dxf)
832
#define FIELD_TIMEBLL(nam, dxf)                                               \
833
39.7k
  {                                                                           \
834
39.7k
    _obj->nam = bit_read_TIMEBLL (dat);                                       \
835
39.7k
    if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                   \
836
39.7k
      {                                                                       \
837
0
        struct tm tm;                                                         \
838
0
        char _buf[60] = "";                                                   \
839
0
        cvt_TIMEBLL (&tm, _obj->nam);                                         \
840
0
        if (strEQc (#nam, "TDINDWG") || strEQc (#nam, "TDUSRTIMER"))          \
841
0
          strftime (_buf, 60, STRFTIME_DURATION, &tm);                        \
842
0
        else if (_obj->nam.days)                                              \
843
0
          strftime (_buf, 60, STRFTIME_DATE, &tm);                            \
844
0
        else                                                                  \
845
0
          strftime (_buf, 60, STRFTIME_TIME, &tm);                            \
846
0
        LOG_TRACE (#nam ": [" FORMAT_BL ", " FORMAT_BL "] %s [TIMEBLL %d]",   \
847
0
                   _obj->nam.days, _obj->nam.ms, _buf, dxf);                  \
848
0
        LOG_RPOS                                                              \
849
0
      }                                                                       \
850
39.7k
  }
851
#define FIELD_TIMERLL(nam, dxf)                                               \
852
1.11k
  {                                                                           \
853
1.11k
    _obj->nam = bit_read_TIMERLL (dat);                                       \
854
1.11k
    if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                   \
855
1.11k
      {                                                                       \
856
0
        struct tm tm;                                                         \
857
0
        char _buf[60] = "";                                                   \
858
0
        if (_obj->nam.days)                                                   \
859
0
          strftime (_buf, 60, STRFTIME_DATE, cvt_TIMEBLL (&tm, _obj->nam));   \
860
0
        else                                                                  \
861
0
          strftime (_buf, 60, STRFTIME_TIME, cvt_TIMEBLL (&tm, _obj->nam));   \
862
0
        LOG_TRACE (#nam ": [" FORMAT_RL ", " FORMAT_RL "] %s [TIMERLL %d]",   \
863
0
                   _obj->nam.days, _obj->nam.ms, _buf, dxf);                  \
864
0
        LOG_RPOS                                                              \
865
0
      }                                                                       \
866
1.11k
  }
867
#define FIELD_CMC(color, dxf)                                                 \
868
74.2k
  {                                                                           \
869
74.2k
    error |= bit_read_CMC (dat, str_dat, &_obj->color);                       \
870
74.2k
    LOG_TRACE (#color ".index: %d [CMC.%s %d]", _obj->color.index,            \
871
74.2k
               dat->from_version < R_13b1 ? "RS" : "BS", dxf);                \
872
74.2k
    LOG_RPOS                                                                  \
873
74.2k
    if (dat->from_version >= R_2004)                                          \
874
74.2k
      {                                                                       \
875
0
        LOG_TRACE (#color ".rgb: 0x%06x [CMC.BL %d]\n",                       \
876
0
                   (unsigned)_obj->color.rgb, dxf + 420 - 62);                \
877
0
        LOG_TRACE (#color ".method: 0x%x %s\n", _obj->color.method,           \
878
0
                   dwg_color_method_name (_obj->color.method));               \
879
0
        LOG_TRACE (#color ".flag: 0x%x [CMC.RC]\n",                           \
880
0
                   (unsigned)_obj->color.flag);                               \
881
0
        if (_obj->color.flag & 1)                                             \
882
0
          {                                                                   \
883
0
            LOG_TRACE (#color ".name: %s [CMC.%s]\n", _obj->color.name,       \
884
0
                       dat->from_version >= R_2007 ? "T" : "TV");             \
885
0
          }                                                                   \
886
0
        if (_obj->color.flag & 2)                                             \
887
0
          {                                                                   \
888
0
            LOG_TRACE (#color ".book_name: %s [CMC.%s]\n",                    \
889
0
                       _obj->color.book_name,                                 \
890
0
                       dat->from_version >= R_2007 ? "T" : "TV");             \
891
0
          }                                                                   \
892
0
      }                                                                       \
893
74.2k
  }
894
#define SUB_FIELD_CMC(o, color, dxf)                                          \
895
707k
  {                                                                           \
896
707k
    error |= bit_read_CMC (dat, str_dat, &_obj->o.color);                     \
897
707k
    LOG_TRACE (#o "." #color ".index: %d [CMC.BS %d]", _obj->o.color.index,   \
898
707k
               dxf);                                                          \
899
707k
    LOG_RPOS                                                                  \
900
707k
    if (dat->from_version >= R_2004)                                          \
901
707k
      {                                                                       \
902
0
        LOG_TRACE (#o "." #color ".rgb: 0x%06x [CMC.BL %d]\n",                \
903
0
                   (unsigned)_obj->o.color.rgb, dxf + 420 - 62);              \
904
0
        LOG_TRACE (#color ".method: 0x%x %s\n", _obj->o.color.method,         \
905
0
                   dwg_color_method_name (_obj->o.color.method));             \
906
0
        LOG_TRACE (#o "." #color ".flag: 0x%x [CMC.RC]\n",                    \
907
0
                   (unsigned)_obj->o.color.flag);                             \
908
0
        if (_obj->o.color.flag & 1)                                           \
909
0
          {                                                                   \
910
0
            LOG_TRACE (#o "." #color ".name: %s [CMC.%s]\n",                  \
911
0
                       _obj->o.color.name,                                    \
912
0
                       dat->from_version >= R_2007 ? "T" : "TV");             \
913
0
          }                                                                   \
914
0
        if (_obj->o.color.flag & 2)                                           \
915
0
          {                                                                   \
916
0
            LOG_TRACE (#o "." #color ".book_name: %s [CMC.%s]\n",             \
917
0
                       _obj->o.color.book_name,                               \
918
0
                       dat->from_version >= R_2007 ? "T" : "TV");             \
919
0
          }                                                                   \
920
0
      }                                                                       \
921
707k
  }
922
// force truecolor
923
#define FIELD_CMTC(name, dxf)                                                 \
924
0
  {                                                                           \
925
0
    Dwg_Version_Type _ver = dat->from_version;                                \
926
0
    if (dat->from_version < R_2004)                                           \
927
0
      dat->from_version = R_2004;                                             \
928
0
    FIELD_CMC (name, dxf);                                                    \
929
0
    dat->from_version = _ver;                                                 \
930
0
  }
931
#define SUB_FIELD_CMTC(o, name, dxf)                                          \
932
0
  {                                                                           \
933
0
    Dwg_Version_Type _ver = dat->from_version;                                \
934
0
    if (dat->from_version < R_2004)                                           \
935
0
      dat->from_version = R_2004;                                             \
936
0
    SUB_FIELD_CMC (o, name, dxf);                                             \
937
0
    dat->from_version = _ver;                                                 \
938
0
  }
939
#define FIELD_ENC(color, dxf)                                                 \
940
  {                                                                           \
941
    bit_read_ENC (dat, hdl_dat, str_dat, &_obj->color);                       \
942
    LOG_TRACE (#color ".index: %d [ENC.BS %d]", _obj->color.index, dxf);      \
943
    LOG_POS                                                                   \
944
    if (dat->from_version >= R_2004)                                          \
945
      {                                                                       \
946
        if (_obj->color.flag)                                                 \
947
          LOG_TRACE (#color ".flag: 0x%x\n", (unsigned)_obj->color.flag);     \
948
        if (_obj->color.flag & 0x20)                                          \
949
          LOG_TRACE (#color ".alpha: %d [ENC.BL %d]\n",                       \
950
                     (int)_obj->color.alpha, dxf + 440 - 62);                 \
951
        if (_obj->color.flag & 0x80)                                          \
952
          LOG_TRACE (#color ".rgb: 0x%06x [ENC.BL %d]\n",                     \
953
                     (unsigned)_obj->color.rgb, dxf + 420 - 62);              \
954
        if (_obj->color.flag & 0x40 && _obj->color.handle)                    \
955
          LOG_TRACE (#color ".handle: %X [ENC.H %d]\n",                       \
956
                     _obj->color.handle->handleref.value, dxf + 430 - 62);    \
957
      }                                                                       \
958
  }
959
#define SUB_FIELD_ENC(o, color, dxf)                                          \
960
  {                                                                           \
961
    bit_read_ENC (dat, hdl_dat, str_dat, &_obj->o.color);                     \
962
    LOG_TRACE (#o "." #color ".index: %d [ENC.BS %d]", _obj->o.color.index,   \
963
               dxf);                                                          \
964
    LOG_POS                                                                   \
965
    if (dat->from_version >= R_2004)                                          \
966
      {                                                                       \
967
        if (_obj->o.color.flag)                                               \
968
          LOG_TRACE (#o "." #color ".flag: 0x%x\n",                           \
969
                     (unsigned)_obj->o.color.flag);                           \
970
        if (_obj->o.color.flag & 0x20)                                        \
971
          LOG_TRACE (#o "." #color ".alpha: %d [ENC.BL %d]\n",                \
972
                     (unsigned)_obj->o.color.alpha, dxf + 440 - 62);          \
973
        if (_obj->o.color.flag & 0x80)                                        \
974
          LOG_TRACE (#o "." #color ".rgb: 0x%06x [ENC.BL %d]\n",              \
975
                     (unsigned)_obj->o.color.rgb, dxf + 420 - 62);            \
976
        if (_obj->o.color.flag & 0x40 && _obj->o.color.handle)                \
977
          LOG_TRACE (#o "." #color ".handle: " FORMAT_HV " [ENC.H %d]\n",     \
978
                     _obj->o.color.handle->handleref.value, dxf + 430 - 62);  \
979
      }                                                                       \
980
  }
981
982
#undef DEBUG_POS
983
#undef DEBUG_HERE
984
#undef DEBUG_POS_OBJ
985
#undef DEBUG_HERE_OBJ
986
#define DEBUG_POS_OBJ                                                         \
987
54
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
988
54
    {                                                                         \
989
0
      LOG_TRACE ("DEBUG_POS @%" PRIuSIZE ".%u (%" PRIuSIZE ") %" PRIuSIZE     \
990
0
                 "\n",                                                        \
991
0
                 dat->byte, (unsigned)dat->bit, bit_position (dat),           \
992
0
                 obj ? bit_position (dat) - obj->address * 8 : 0);            \
993
0
    }
994
#define DEBUG_POS                                                             \
995
3.63M
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
996
3.63M
    {                                                                         \
997
0
      LOG_TRACE ("DEBUG_POS @%" PRIuSIZE ".%u (%" PRIuSIZE ")\n", dat->byte,  \
998
0
                 (unsigned)dat->bit, bit_position (dat));                     \
999
0
    }
1000
#define _DEBUG_HERE(objsize)                                                  \
1001
3.63M
  if (dat->size < dat->byte)                                                  \
1002
3.63M
    return DWG_ERR_VALUEOUTOFBOUNDS;                                          \
1003
3.63M
  if (DWG_LOGLEVEL >= DWG_LOGLEVEL_TRACE)                                     \
1004
3.63M
    {                                                                         \
1005
0
      Bit_Chain here = *dat;                                                  \
1006
0
      int oldloglevel = loglevel;                                             \
1007
0
      BITCODE_TF tmp;                                                         \
1008
0
      BITCODE_BB bb = 0;                                                      \
1009
0
      BITCODE_RS rs;                                                          \
1010
0
      BITCODE_RL rl;                                                          \
1011
0
      double bd;                                                              \
1012
0
      Dwg_Handle hdl;                                                         \
1013
0
      rs = 24;                                                                \
1014
0
      if ((objsize) > 0 && dat->byte + rs > (objsize))                        \
1015
0
        rs = ((objsize) - dat->byte) & 0xFFFF;                                \
1016
0
      if (dat->byte + rs > dat->size)                                         \
1017
0
        rs = (dat->size - dat->byte - 1) & 0xFFFF;                            \
1018
0
      tmp = bit_read_TF (dat, (size_t)rs);                                    \
1019
0
      if (tmp)                                                                \
1020
0
        {                                                                     \
1021
0
          if (DWG_LOGLEVEL >= DWG_LOGLEVEL_INSANE)                            \
1022
0
            {                                                                 \
1023
0
              bit_fprint_bits (OUTPUT, tmp, rs * 8);                          \
1024
0
              HANDLER (OUTPUT, "\n");                                         \
1025
0
            }                                                                 \
1026
0
          LOG_TRACE_TF (tmp, rs);                                             \
1027
0
          free (tmp);                                                         \
1028
0
        }                                                                     \
1029
0
      SINCE (R_13b1)                                                          \
1030
0
      {                                                                       \
1031
0
        *dat = here;                                                          \
1032
0
        LOG_TRACE ("  B  :" FORMAT_B "\t", bit_read_B (dat));                 \
1033
0
        *dat = here;                                                          \
1034
0
        bb = bit_read_BB (dat) & 0x3;                                         \
1035
0
        LOG_TRACE ("  BB :" FORMAT_BB "\n", bb);                              \
1036
0
      }                                                                       \
1037
0
      *dat = here;                                                            \
1038
0
      rs = bit_read_RS (dat);                                                 \
1039
0
      LOG_TRACE ("  RS :" FORMAT_RS " / 0x%04x (16)\n", rs, rs);              \
1040
0
      SINCE (R_13b1)                                                          \
1041
0
      {                                                                       \
1042
0
        *dat = here;                                                          \
1043
0
        rs = bit_read_BS (dat);                                               \
1044
0
        LOG_TRACE ("  BS :" FORMAT_BS " / 0x%04x (%" PRIuSIZE ")\t", rs, rs,  \
1045
0
                   bit_position (dat) - bit_position (&here));                \
1046
0
      }                                                                       \
1047
0
      SINCE (R_2007a)                                                         \
1048
0
      {                                                                       \
1049
0
        *dat = here;                                                          \
1050
0
        rs = bit_read_MS (dat);                                               \
1051
0
        LOG_TRACE ("  MS :" FORMAT_RS " / 0x%04x (%" PRIuSIZE ")\n", rs, rs,  \
1052
0
                   bit_position (dat) - bit_position (&here));                \
1053
0
      }                                                                       \
1054
0
      else LOG_TRACE ("\n");                                                  \
1055
0
      *dat = here;                                                            \
1056
0
      rl = bit_read_RL (dat);                                                 \
1057
0
      LOG_TRACE ("  RL :" FORMAT_RL " / 0x%08x (32)\n", rl, rl);              \
1058
0
      *dat = here;                                                            \
1059
0
      LOG_TRACE ("  RD :" FORMAT_RD " (64)\n", bit_read_RD (dat));            \
1060
0
      *dat = here;                                                            \
1061
0
      SINCE (R_13b1)                                                          \
1062
0
      {                                                                       \
1063
0
        if (bb != 3)                                                          \
1064
0
          {                                                                   \
1065
0
            rl = bit_read_BL (dat);                                           \
1066
0
            LOG_TRACE ("  BL :" FORMAT_BL " / 0x%08x (%" PRIuSIZE ")\n", rl,  \
1067
0
                       rl, bit_position (dat) - bit_position (&here));        \
1068
0
            *dat = here;                                                      \
1069
0
            bd = bit_read_BD (dat);                                           \
1070
0
            LOG_TRACE ("  BD :" FORMAT_BD " (%" PRIuSIZE ")\n", bd,           \
1071
0
                       bit_position (dat) - bit_position (&here));            \
1072
0
            *dat = here;                                                      \
1073
0
          }                                                                   \
1074
0
      }                                                                       \
1075
0
      if ((dat->chain[dat->byte] & 0xf) <= 4)                                 \
1076
0
        {                                                                     \
1077
0
          loglevel = 0;                                                       \
1078
0
          if (!bit_read_H (dat, &hdl))                                        \
1079
0
            {                                                                 \
1080
0
              LOG_TRACE ("  H : " FORMAT_H " (%" PRIuSIZE ")\n",              \
1081
0
                         ARGS_H (hdl),                                        \
1082
0
                         bit_position (dat) - bit_position (&here));          \
1083
0
            }                                                                 \
1084
0
          loglevel = oldloglevel;                                             \
1085
0
        }                                                                     \
1086
0
      *dat = here;                                                            \
1087
0
    }
1088
#define DEBUG_HERE_OBJ                                                        \
1089
54
  DEBUG_POS_OBJ                                                               \
1090
54
  _DEBUG_HERE (obj->size)
1091
#define DEBUG_HERE                                                            \
1092
3.63M
  DEBUG_POS                                                                   \
1093
3.63M
  _DEBUG_HERE (0UL)
1094
1095
// check for overflow into next object (invalid num_elems)
1096
1.35M
#define AVAIL_BITS(dat) (int64_t) ((dat->size * 8) - bit_position (dat))
1097
160k
#define TYPE_MAXELEMSIZE(type) dwg_bits_size[BITS_##type]
1098
#define VECTOR_CHKCOUNT(nam, type, size, dat)                                 \
1099
18.3k
  if ((int64_t)(size) > AVAIL_BITS (dat)                                      \
1100
18.3k
      || (int64_t)((size) * TYPE_MAXELEMSIZE (type)) > AVAIL_BITS (dat))      \
1101
18.3k
    {                                                                         \
1102
2.30k
      LOG_ERROR ("Invalid " #nam " size %" PRId64 ". Need min. %" PRId64      \
1103
2.30k
                 " bits for " #type ", have %" PRId64 " for %s.",             \
1104
2.30k
                 (int64_t)(size), (int64_t)(size) * TYPE_MAXELEMSIZE (type),  \
1105
2.30k
                 AVAIL_BITS (dat), SAFEDXFNAME);                              \
1106
2.30k
      if (_obj->nam)                                                          \
1107
2.30k
        free (_obj->nam);                                                     \
1108
2.30k
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1109
2.30k
    }
1110
#define SUB_VECTOR_CHKCOUNT(o, nam, type, size, dat)                          \
1111
646
  if ((int64_t)(size) > AVAIL_BITS (dat)                                      \
1112
646
      || (int64_t)((size) * TYPE_MAXELEMSIZE (type)) > AVAIL_BITS (dat))      \
1113
646
    {                                                                         \
1114
43
      LOG_ERROR (                                                             \
1115
43
          "Invalid " #nam " size %" PRId64 ". Need min. %" PRId64             \
1116
43
          " bits for " #type ", have %" PRId64 " at @%" PRIuSIZE ".%u "       \
1117
43
          " for %s.",                                                         \
1118
43
          (int64_t)(size), (int64_t)(size) * TYPE_MAXELEMSIZE (type),         \
1119
43
          AVAIL_BITS (dat), dat->byte, (unsigned)dat->bit, SAFEDXFNAME);      \
1120
43
      if (_obj->o.nam)                                                        \
1121
43
        free (_obj->o.nam);                                                   \
1122
43
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1123
43
    }
1124
#define VECTOR_CHKCOUNT_LV(nam, type, size, dat)                              \
1125
248k
  if ((int64_t)(size) > AVAIL_BITS (dat)                                      \
1126
248k
      || (int64_t)((size) * TYPE_MAXELEMSIZE (type)) > AVAIL_BITS (dat))      \
1127
248k
    {                                                                         \
1128
115k
      LOG_ERROR (                                                             \
1129
115k
          "Invalid " #nam " size %" PRId64 ". Need min. %" PRId64             \
1130
115k
          " bits for " #type ", have %" PRId64 " at @%" PRIuSIZE ".%u "       \
1131
115k
          "for %s.",                                                          \
1132
115k
          (int64_t)(size), (int64_t)(size) * TYPE_MAXELEMSIZE (type),         \
1133
115k
          AVAIL_BITS (dat), dat->byte, (unsigned)dat->bit, SAFEDXFNAME);      \
1134
115k
      if (_obj->nam)                                                          \
1135
115k
        free (_obj->nam);                                                     \
1136
115k
      size = 0; /* return DWG_ERR_VALUEOUTOFBOUNDS; */                                  \
1137
115k
    }
1138
// for static TFF types with a size field
1139
#define _VECTOR_CHKCOUNT(nam, size, maxelemsize, dat)                         \
1140
7.93k
  if ((int64_t)(size) > AVAIL_BITS (dat)                                      \
1141
7.93k
      || (int64_t)((size) * (maxelemsize)) > AVAIL_BITS (dat))                \
1142
7.93k
    {                                                                         \
1143
2.14k
      LOG_ERROR ("Invalid " #nam " size %" PRId64 ". Need min. %" PRId64      \
1144
2.14k
                 " bits, have %" PRId64 " for %s. "                           \
1145
2.14k
                 "Set " #size " to 0",                                        \
1146
2.14k
                 (int64_t)(size), (int64_t)(size) * (maxelemsize),            \
1147
2.14k
                 AVAIL_BITS (dat), SAFEDXFNAME);                              \
1148
2.14k
      size = 0;                                                               \
1149
2.14k
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1150
2.14k
    }
1151
// for static TFF types with fixed size
1152
#define _VECTOR_CHKCOUNT_STATIC(nam, siz, maxelemsize, dat)                   \
1153
89
  if ((int64_t)(8 * siz) > AVAIL_BITS (dat)                                   \
1154
89
      || (int64_t)((siz) * (maxelemsize)) > AVAIL_BITS (dat)                  \
1155
89
      || dat->byte + (siz) > dat->size)                                       \
1156
89
    {                                                                         \
1157
5
      LOG_ERROR ("Invalid " #nam " size %" PRId64 ". Need min. %" PRId64      \
1158
5
                 " bits, have %" PRId64 " for %s.",                           \
1159
5
                 (int64_t)(siz), (int64_t)(siz) * (maxelemsize),              \
1160
5
                 AVAIL_BITS (dat), SAFEDXFNAME);                              \
1161
5
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1162
5
    }
1163
#define HANDLE_VECTOR_CHKCOUNT(nam, size)                                     \
1164
7.60k
  _VECTOR_CHKCOUNT (nam, size, TYPE_MAXELEMSIZE (HANDLE), hdl_dat)
1165
1166
// FIELD_VECTOR_N(name, type, size):
1167
// reads data of the type indicated by 'type' 'size' times and stores
1168
// it all in the vector called 'name'.
1169
#define FIELD_VECTOR_N(name, type, size, dxf)                                 \
1170
7.72k
  if (size > 0)                                                               \
1171
7.72k
    {                                                                         \
1172
3.14k
      VECTOR_CHKCOUNT (name, type, size, dat);                                \
1173
2.27k
      _obj->name = (BITCODE_##type *)calloc (size, sizeof (BITCODE_##type));  \
1174
2.27k
      if (!_obj->name)                                                        \
1175
2.27k
        return DWG_ERR_OUTOFMEM;                                              \
1176
493k
      for (vcount = 0; vcount < (BITCODE_BL)size; vcount++)                   \
1177
491k
        {                                                                     \
1178
491k
          _obj->name[vcount] = bit_read_##type (dat);                         \
1179
491k
          FIELD_VEC_TRACE_N (name, type, (long)vcount, _obj->name[vcount],    \
1180
491k
                             dxf);                                            \
1181
491k
        }                                                                     \
1182
2.27k
    }
1183
#define SUB_FIELD_VECTOR_N(o, nam, type, csize, dxf)                          \
1184
0
  if (csize > 0)                                                              \
1185
0
    {                                                                         \
1186
0
      SUB_VECTOR_CHKCOUNT (o, nam, type, csize, dat)                          \
1187
0
      _obj->o.nam                                                             \
1188
0
          = (BITCODE_##type *)calloc (csize, sizeof (BITCODE_##type));        \
1189
0
      if (!_obj->o.nam)                                                       \
1190
0
        return DWG_ERR_OUTOFMEM;                                              \
1191
0
      for (vcount = 0; vcount < (BITCODE_BL)csize; vcount++)                  \
1192
0
        {                                                                     \
1193
0
          _obj->o.nam[vcount] = bit_read_##type (dat);                        \
1194
0
          LOG_TRACE (#nam "[%ld]: " FORMAT_##type " [" #type " %d]",          \
1195
0
                     (long)vcount, _obj->o.nam[vcount], dxf);                 \
1196
0
          LOG_POS                                                             \
1197
0
        }                                                                     \
1198
0
    }
1199
#define SUB_FIELD_VECTOR(o, name, type, sizefield, dxf)                       \
1200
7.95k
  if (_obj->o.sizefield > 0)                                                  \
1201
7.95k
    {                                                                         \
1202
646
      SUB_VECTOR_CHKCOUNT (o, name, type, _obj->o.sizefield, dat);            \
1203
603
      _obj->o.name = (BITCODE_##type *)calloc (_obj->o.sizefield,             \
1204
603
                                               sizeof (BITCODE_##type));      \
1205
603
      if (!_obj->o.name)                                                      \
1206
603
        return DWG_ERR_OUTOFMEM;                                              \
1207
603
      LOG_TRACE (#name ": { ");                                               \
1208
692k
      for (vcount = 0; vcount < (BITCODE_BL)_obj->o.sizefield; vcount++)      \
1209
692k
        {                                                                     \
1210
692k
          _obj->o.name[vcount] = bit_read_##type (dat);                       \
1211
692k
          LOG_TRACE (FORMAT_##type " ", _obj->o.name[vcount]);                \
1212
692k
        }                                                                     \
1213
603
      if (dxf)                                                                \
1214
603
        LOG_TRACE ("} [*" #type " %d]", dxf);                                 \
1215
603
      else                                                                    \
1216
603
        LOG_TRACE ("} [*" #type "]");                                         \
1217
603
      LOG_POS                                                                 \
1218
603
    }
1219
// inlined, with const size and without malloc
1220
#define FIELD_VECTOR_INL(name, type, size, dxf)                               \
1221
330
  if (size > 0)                                                               \
1222
330
    {                                                                         \
1223
330
      SINCE (R_13b1)                                                          \
1224
330
      {                                                                       \
1225
33
        _VECTOR_CHKCOUNT_STATIC (name, size, TYPE_MAXELEMSIZE (type), dat);   \
1226
28
      }                                                                       \
1227
330
      LOG_TRACE (#name ": { ");                                               \
1228
20.6k
      for (vcount = 0; vcount < (BITCODE_BL)size; vcount++)                   \
1229
20.2k
      {                                                                       \
1230
20.2k
        _obj->name[vcount] = bit_read_##type (dat);                           \
1231
20.2k
        LOG_TRACE (FORMAT_##type " ", _obj->name[vcount]);                    \
1232
20.2k
      }                                                                       \
1233
325
      if (dxf)                                                                \
1234
325
        LOG_TRACE ("} [*" #type " %d]", dxf);                                 \
1235
325
      else                                                                    \
1236
325
        LOG_TRACE ("} [*" #type "]");                                         \
1237
325
      LOG_POS                                                                 \
1238
325
    }
1239
// inlined, with const size and without malloc
1240
#define SUB_FIELD_VECTOR_INL(o, nam, type, csize, dxf)                        \
1241
0
  if (csize > 0)                                                              \
1242
0
    {                                                                         \
1243
0
      _VECTOR_CHKCOUNT_STATIC (nam, csize, TYPE_MAXELEMSIZE (type), dat);     \
1244
0
      for (vcount = 0; vcount < (BITCODE_BL)csize; vcount++)                  \
1245
0
        {                                                                     \
1246
0
          _obj->o.nam[vcount] = bit_read_##type (dat);                        \
1247
0
          LOG_TRACE (#nam "[%ld]: " FORMAT_##type " [" #type " %d]",          \
1248
0
                     (long)vcount, _obj->o.nam[vcount], dxf);                 \
1249
0
          LOG_POS                                                             \
1250
0
        }                                                                     \
1251
0
    }
1252
#define FIELD_VECTOR_T(name, type, size, dxf)                                 \
1253
350
  if (_obj->size > 0)                                                         \
1254
350
    {                                                                         \
1255
329
      _VECTOR_CHKCOUNT (name, _obj->size,                                     \
1256
329
                        dat->from_version >= R_2007 ? 18 : 2, dat);           \
1257
139
      _obj->name = (char **)calloc (_obj->size, sizeof (char *));             \
1258
139
      if (!_obj->name)                                                        \
1259
139
        return DWG_ERR_OUTOFMEM;                                              \
1260
581
      for (vcount = 0; vcount < (BITCODE_BL)_obj->size; vcount++)             \
1261
560
        {                                                                     \
1262
560
          PRE (R_2007a)                                                       \
1263
560
          {                                                                   \
1264
560
            _obj->name[vcount] = bit_read_TV (dat);                           \
1265
560
            LOG_TRACE (#name "[%d]: \"%s\" [TV %d]", (int)vcount,             \
1266
560
                       _obj->name[vcount], dxf);                              \
1267
560
            LOG_POS                                                           \
1268
560
            if (!_obj->name[vcount])                                          \
1269
560
              return DWG_ERR_VALUEOUTOFBOUNDS;                                \
1270
560
          }                                                                   \
1271
560
          LATER_VERSIONS                                                      \
1272
560
          {                                                                   \
1273
0
            _obj->name[vcount] = (char *)bit_read_##type (dat);               \
1274
0
            LOG_TRACE_TU_I (#name, vcount, _obj->name[vcount], type, dxf);    \
1275
0
            if (!_obj->name[vcount])                                          \
1276
0
              return DWG_ERR_VALUEOUTOFBOUNDS;                                \
1277
0
          }                                                                   \
1278
560
        }                                                                     \
1279
139
    }
1280
#define FIELD_VECTOR_N1(name, type, size, dxf)                                \
1281
0
  if (size > 0)                                                               \
1282
0
    {                                                                         \
1283
0
      int _dxf = dxf;                                                         \
1284
0
      VECTOR_CHKCOUNT (name, type, size, dat)                                 \
1285
0
      _obj->name = (BITCODE_##type *)calloc (size, sizeof (BITCODE_##type));  \
1286
0
      if (!_obj->name)                                                        \
1287
0
        return DWG_ERR_OUTOFMEM;                                              \
1288
0
      for (vcount = 0; vcount < (BITCODE_BL)size; vcount++)                   \
1289
0
        {                                                                     \
1290
0
          _obj->name[vcount] = bit_read_##type (dat);                         \
1291
0
          LOG_TRACE (#name "[%d]: " FORMAT_##type " [" #type " %d]",          \
1292
0
                     (int)vcount, _obj->name[vcount], _dxf++);                \
1293
0
          LOG_POS;                                                            \
1294
0
        }                                                                     \
1295
0
    }
1296
1297
#define FIELD_VECTOR(name, type, size, dxf)                                   \
1298
7.72k
  FIELD_VECTOR_N (name, type, _obj->size, dxf)
1299
1300
#define SUB_FIELD_VECTOR_TYPESIZE(o, name, size, typesize, dxf)               \
1301
0
  if (_obj->o.size > 0)                                                       \
1302
0
    {                                                                         \
1303
0
      _obj->o.name = (BITCODE_RC *)calloc (_obj->o.size, typesize);           \
1304
0
      if (!_obj->o.name)                                                      \
1305
0
        return DWG_ERR_OUTOFMEM;                                              \
1306
0
      for (vcount = 0; vcount < (BITCODE_BL)_obj->o.size; vcount++)           \
1307
0
        {                                                                     \
1308
0
          switch (typesize)                                                   \
1309
0
            {                                                                 \
1310
0
            case 0:                                                           \
1311
0
              break;                                                          \
1312
0
            case 1:                                                           \
1313
0
              _obj->o.name[vcount] = bit_read_RC (dat);                       \
1314
0
              break;                                                          \
1315
0
            case 2:                                                           \
1316
0
              _obj->o.name[vcount] = bit_read_RS (dat);                       \
1317
0
              break;                                                          \
1318
0
            case 4:                                                           \
1319
0
              _obj->o.name[vcount] = bit_read_RL (dat);                       \
1320
0
              break;                                                          \
1321
0
            case 8:                                                           \
1322
0
              _obj->o.name[vcount] = bit_read_RLL (dat);                      \
1323
0
              break;                                                          \
1324
0
            default:                                                          \
1325
0
              LOG_ERROR ("Unknown FIELD_VECTOR_TYPE " #name " typesize %d",   \
1326
0
                         typesize);                                           \
1327
0
              break;                                                          \
1328
0
            }                                                                 \
1329
0
          LOG_TRACE (#name "[%u]: %d", vcount, (int)_obj->o.name[vcount]);    \
1330
0
          LOG_POS                                                             \
1331
0
        }                                                                     \
1332
0
    }
1333
1334
#define FIELD_2RD_VECTOR(name, size, dxf)                                     \
1335
2.12k
  VECTOR_CHKCOUNT_LV (name, 2RD, _obj->size, dat)                             \
1336
2.12k
  if (_obj->size > 0)                                                         \
1337
750
    {                                                                         \
1338
750
      _obj->name = (BITCODE_2RD *)calloc (_obj->size, sizeof (BITCODE_2RD));  \
1339
750
      if (!_obj->name)                                                        \
1340
750
        return DWG_ERR_OUTOFMEM;                                              \
1341
33.0k
      for (vcount = 0; vcount < (BITCODE_BL)_obj->size; vcount++)             \
1342
32.8k
        {                                                                     \
1343
32.8k
          FIELD_2RD (name[vcount], dxf);                                      \
1344
32.2k
        }                                                                     \
1345
750
    }                                                                         \
1346
0
  else                                                                        \
1347
1.37k
    return DWG_ERR_VALUEOUTOFBOUNDS;
1348
1349
#define SUB_FIELD_2RD_VECTOR(o, name, size, dxf)                              \
1350
0
  VECTOR_CHKCOUNT_LV (o.name, 2RD, _obj->o.size, dat)                         \
1351
0
  if (_obj->o.size > 0)                                                       \
1352
0
    {                                                                         \
1353
0
      _obj->o.name                                                            \
1354
0
          = (BITCODE_2RD *)calloc (_obj->o.size, sizeof (BITCODE_2RD));       \
1355
0
      if (!_obj->o.name)                                                      \
1356
0
        return DWG_ERR_OUTOFMEM;                                              \
1357
0
      for (vcount = 0; vcount < (BITCODE_BL)_obj->o.size; vcount++)           \
1358
0
        {                                                                     \
1359
0
          SUB_FIELD_2RD (o, name[vcount], dxf);                               \
1360
0
        }                                                                     \
1361
0
    }                                                                         \
1362
0
  else                                                                        \
1363
0
    return DWG_ERR_VALUEOUTOFBOUNDS;
1364
1365
#define FIELD_2DD_VECTOR(name, size, dxf)                                     \
1366
2.72k
  VECTOR_CHKCOUNT_LV (name, 2DD, _obj->size, dat)                             \
1367
2.72k
  if (_obj->size > 0)                                                         \
1368
2.72k
    {                                                                         \
1369
1.63k
      _obj->name = (BITCODE_2RD *)calloc (_obj->size, sizeof (BITCODE_2RD));  \
1370
1.63k
      if (!_obj->name)                                                        \
1371
1.63k
        return DWG_ERR_OUTOFMEM;                                              \
1372
3.11k
      FIELD_2RD (name[0], dxf);                                               \
1373
182k
      for (vcount = 1; vcount < (BITCODE_BL)_obj->size; vcount++)             \
1374
181k
        {                                                                     \
1375
181k
          BITCODE_BB b2, b1 = bit_read_BB_noadv (dat);                        \
1376
181k
          FIELD_DD (name[vcount].x, FIELD_VALUE (name[vcount - 1].x), dxf);   \
1377
181k
          b2 = bit_read_BB_noadv (dat);                                       \
1378
181k
          FIELD_DD (name[vcount].y, FIELD_VALUE (name[vcount - 1].y),         \
1379
181k
                    dxf + 10);                                                \
1380
180k
          if (b1 == 3 && b2 == 3)                                             \
1381
180k
            LOG_TRACE (#name "[%ld]: (" FORMAT_BD ", " FORMAT_BD              \
1382
180k
                             ") [2DD %d]",                                    \
1383
180k
                       (long)vcount, _obj->name[vcount].x,                    \
1384
180k
                       _obj->name[vcount].y, dxf);                            \
1385
180k
          else                                                                \
1386
180k
            LOG_TRACE (#name "[%ld]: (" FORMAT_BD ", " FORMAT_BD              \
1387
180k
                             ") [2DD/%d%d %d]",                               \
1388
180k
                       (long)vcount, _obj->name[vcount].x,                    \
1389
180k
                       _obj->name[vcount].y, b1, b2, dxf);                    \
1390
180k
          LOG_POS                                                             \
1391
180k
        }                                                                     \
1392
3.11k
    }                                                                         \
1393
2.72k
  else                                                                        \
1394
2.72k
    return DWG_ERR_VALUEOUTOFBOUNDS;
1395
1396
#define FIELD_3DPOINT_VECTOR(name, size, dxf)                                 \
1397
206k
  VECTOR_CHKCOUNT_LV (name, 3BD, _obj->size, dat)                             \
1398
206k
  if (_obj->size > 0)                                                         \
1399
206k
    {                                                                         \
1400
18.5k
      _obj->name                                                              \
1401
18.5k
          = (BITCODE_3DPOINT *)calloc (_obj->size, sizeof (BITCODE_3DPOINT)); \
1402
18.5k
      if (!_obj->name)                                                        \
1403
18.5k
        return DWG_ERR_OUTOFMEM;                                              \
1404
4.40M
      for (vcount = 0; vcount < (BITCODE_BL)_obj->size; vcount++)             \
1405
4.38M
        {                                                                     \
1406
4.38M
          FIELD_3DPOINT (name[vcount], dxf);                                  \
1407
4.38M
        }                                                                     \
1408
18.5k
    }
1409
#define SUB_FIELD_3BD_VECTOR(o, name, size, dxf)                              \
1410
0
  VECTOR_CHKCOUNT_LV (o.name, 3BD, _obj->o.size, dat)                         \
1411
0
  if (_obj->o.size > 0)                                                       \
1412
0
    {                                                                         \
1413
0
      _obj->o.name                                                            \
1414
0
          = (BITCODE_3BD *)calloc (_obj->o.size, sizeof (BITCODE_3BD));       \
1415
0
      if (!_obj->o.name)                                                      \
1416
0
        return DWG_ERR_OUTOFMEM;                                              \
1417
0
      for (vcount = 0; vcount < (BITCODE_BL)_obj->o.size; vcount++)           \
1418
0
        {                                                                     \
1419
0
          SUB_FIELD_3BD (o, name[vcount], dxf);                               \
1420
0
        }                                                                     \
1421
0
    }                                                                         \
1422
0
  else                                                                        \
1423
0
    return DWG_ERR_VALUEOUTOFBOUNDS;
1424
1425
// shortest handle: 8 bit
1426
#define HANDLE_VECTOR_N(nam, size, code, dxf)                                 \
1427
36.9k
  if (size > 0)                                                               \
1428
36.9k
    {                                                                         \
1429
16.0k
      FIELD_VALUE (nam) = (BITCODE_H *)calloc (size, sizeof (BITCODE_H));     \
1430
16.0k
      if (!_obj->nam)                                                         \
1431
16.0k
        return DWG_ERR_OUTOFMEM;                                              \
1432
9.97M
      for (vcount = 0; vcount < (BITCODE_BL)size; vcount++)                   \
1433
9.95M
        {                                                                     \
1434
9.95M
          FIELD_HANDLE_N (nam[vcount], vcount, code, dxf);                    \
1435
9.95M
        }                                                                     \
1436
16.0k
    }
1437
1438
#define HANDLE_VECTOR(nam, sizefield, code, dxf)                              \
1439
36.9k
  VECTOR_CHKCOUNT_LV (nam, HANDLE, FIELD_VALUE (sizefield), hdl_dat)          \
1440
36.9k
  HANDLE_VECTOR_N (nam, FIELD_VALUE (sizefield), code, dxf)
1441
1442
#define SUB_HANDLE_VECTOR(o, nam, sizefield, code, dxf)                       \
1443
249
  if (_obj->o.sizefield > 0)                                                  \
1444
249
    {                                                                         \
1445
83
      BITCODE_BL _size = _obj->o.sizefield;                                   \
1446
83
      HANDLE_VECTOR_CHKCOUNT (nam, _size)                                     \
1447
83
      _obj->o.nam = (BITCODE_H *)calloc (_size, sizeof (BITCODE_H));          \
1448
73
      if (!_obj->o.nam)                                                       \
1449
73
        return DWG_ERR_OUTOFMEM;                                              \
1450
6.97k
      for (vcount = 0; vcount < _size; vcount++)                              \
1451
6.90k
        {                                                                     \
1452
6.90k
          SUB_FIELD_HANDLE (o, nam[vcount], code, dxf);                       \
1453
6.90k
        }                                                                     \
1454
73
    }
1455
1456
// count 1 bytes, until non-1 bytes or a terminating zero
1457
#define FIELD_NUM_INSERTS(num_inserts, type, dxf)                             \
1458
8.45k
  FIELD_VALUE (num_inserts) = 0;                                              \
1459
8.45k
  vcount = 0;                                                                 \
1460
283k
  while ((vcount = (BITCODE_RC)bit_read_RC (dat)))                            \
1461
274k
    {                                                                         \
1462
274k
      FIELD_VALUE (num_inserts)++;                                            \
1463
274k
      LOG_INSANE ("num_inserts [RC " FORMAT_RL "]: %d\n",                     \
1464
274k
                  FIELD_VALUE (num_inserts), (unsigned char)vcount);          \
1465
274k
      if (vcount == 0)                                                        \
1466
274k
        break;                                                                \
1467
274k
    }                                                                         \
1468
8.45k
  LOG_TRACE ("num_inserts: %d [RC* 0]\n", FIELD_VALUE (num_inserts));
1469
1470
#define FIELD_XDATA(name, xdata_size)                                         \
1471
1.41k
  _obj->name = dwg_decode_xdata (dat, _obj, _obj->xdata_size)
1472
1473
#define REACTORS(code)                                                        \
1474
31.8k
  if (obj->tio.object->num_reactors > 0)                                      \
1475
31.8k
    {                                                                         \
1476
2.65k
      HANDLE_VECTOR_CHKCOUNT (reactors, obj->tio.object->num_reactors)        \
1477
2.65k
      obj->tio.object->reactors = (BITCODE_H *)calloc (                       \
1478
2.39k
          obj->tio.object->num_reactors, sizeof (BITCODE_H));                 \
1479
2.39k
      if (!obj->tio.object->reactors)                                         \
1480
2.39k
        return DWG_ERR_OUTOFMEM;                                              \
1481
660k
      for (vcount = 0; vcount < obj->tio.object->num_reactors; vcount++)      \
1482
657k
        {                                                                     \
1483
657k
          VALUE_HANDLE_N (obj->tio.object->reactors[vcount], reactors,        \
1484
657k
                          vcount, code, 330);                                 \
1485
657k
        }                                                                     \
1486
2.39k
    }
1487
1488
#define ENT_REACTORS(code)                                                    \
1489
11.7k
  if (_ent->num_reactors > 0)                                                 \
1490
11.7k
    {                                                                         \
1491
4.86k
      HANDLE_VECTOR_CHKCOUNT (reactors, _ent->num_reactors)                   \
1492
4.86k
      _ent->reactors                                                          \
1493
3.18k
          = (BITCODE_H *)calloc (_ent->num_reactors, sizeof (BITCODE_H));     \
1494
3.18k
      if (!_ent->reactors)                                                    \
1495
3.18k
        return DWG_ERR_OUTOFMEM;                                              \
1496
1.35M
      for (vcount = 0; vcount < _ent->num_reactors; vcount++)                 \
1497
1.35M
        {                                                                     \
1498
1.35M
          VALUE_HANDLE_N (_ent->reactors[vcount], reactors, vcount, code,     \
1499
1.35M
                          330);                                               \
1500
1.35M
        }                                                                     \
1501
3.18k
    }
1502
1503
#define XDICOBJHANDLE(code)                                                   \
1504
31.5k
  SINCE (R_2004a)                                                             \
1505
31.5k
  {                                                                           \
1506
0
    if (!obj->tio.object->is_xdic_missing)                                    \
1507
0
      {                                                                       \
1508
0
        VALUE_HANDLE (obj->tio.object->xdicobjhandle, xdicobjhandle, code,    \
1509
0
                      360);                                                   \
1510
0
        if (!obj->tio.object->xdicobjhandle)                                  \
1511
0
          obj->tio.object->is_xdic_missing = 1;                               \
1512
0
      }                                                                       \
1513
0
  }                                                                           \
1514
31.5k
  else                                                                        \
1515
31.5k
  {                                                                           \
1516
31.5k
    SINCE (R_13b1)                                                            \
1517
31.5k
    {                                                                         \
1518
31.5k
      VALUE_HANDLE (obj->tio.object->xdicobjhandle, xdicobjhandle, code,      \
1519
31.5k
                    360);                                                     \
1520
31.5k
    }                                                                         \
1521
31.5k
  }
1522
1523
#define ENT_XDICOBJHANDLE(code)                                               \
1524
10.1k
  SINCE (R_2004a)                                                             \
1525
10.1k
  {                                                                           \
1526
0
    if (!_ent->is_xdic_missing)                                               \
1527
0
      {                                                                       \
1528
0
        VALUE_HANDLE (_ent->xdicobjhandle, xdicobjhandle, code, 360);         \
1529
0
      }                                                                       \
1530
0
  }                                                                           \
1531
10.1k
  else                                                                        \
1532
10.1k
  {                                                                           \
1533
10.1k
    SINCE (R_13b1)                                                            \
1534
10.1k
    {                                                                         \
1535
10.1k
      VALUE_HANDLE (_ent->xdicobjhandle, xdicobjhandle, code, 360);           \
1536
10.1k
    }                                                                         \
1537
10.1k
  }
1538
1539
#define UNKNOWN_UNTIL(pos)                                                    \
1540
4.11k
  if (dat->byte < (size_t)(pos))                                              \
1541
4.11k
    {                                                                         \
1542
3.54k
      long len = (long)((pos) - dat->byte);                                   \
1543
3.54k
      BITCODE_TF unknown = bit_read_TF (dat, (size_t)len);                    \
1544
3.54k
      LOG_TRACE ("unknown (%ld): ", len);                                     \
1545
3.54k
      LOG_TRACE_TF (unknown, len);                                            \
1546
3.54k
      free (unknown);                                                         \
1547
3.54k
    }                                                                         \
1548
4.11k
  dat->byte = (size_t)(pos)
1549
1550
#define SECTION_STRING_STREAM                                                 \
1551
0
  {                                                                           \
1552
0
    Bit_Chain sav_dat = *dat;                                                 \
1553
0
    dat = str_dat;
1554
1555
// TODO: unused
1556
#define START_STRING_STREAM                                                   \
1557
  obj->has_strings = bit_read_B (dat);                                        \
1558
  if (obj->has_strings)                                                       \
1559
    {                                                                         \
1560
      Bit_Chain sav_dat = *dat;                                               \
1561
      obj_string_stream (dat, obj, dat);
1562
1563
#define END_STRING_STREAM                                                     \
1564
0
  *dat = sav_dat;                                                             \
1565
0
  }
1566
/* just checking. skip the has_strings bit. hdl_dat is already set */
1567
#define START_HANDLE_STREAM                                                   \
1568
1.60M
  {                                                                           \
1569
1.60M
    size_t _pos = bit_position (dat);                                         \
1570
1.60M
    if (dat->from_version >= R_2007)                                          \
1571
1.60M
      _pos++; /* has_strings bit */                                           \
1572
1.60M
    if (obj->hdlpos != _pos)                                                  \
1573
1.60M
      {                                                                       \
1574
488k
        LOG_HANDLE (                                                          \
1575
488k
            " handle stream: %+ld @%" PRIuSIZE ".%u %s (@%" PRIuSIZE ".%u "   \
1576
488k
            " @%" PRIuSIZE ".%u)\n",                                          \
1577
488k
            (long)(obj->hdlpos - _pos), dat->byte, (unsigned)dat->bit,        \
1578
488k
            (long)(obj->hdlpos - _pos) >= 8 ? "MISSING"                       \
1579
488k
            : (long)(obj->hdlpos < _pos)    ? "OVERSHOOT"                     \
1580
488k
                                            : "",                                \
1581
488k
            obj->hdlpos / 8, (unsigned)obj->hdlpos % 8, hdl_dat->byte,        \
1582
488k
            (unsigned)hdl_dat->bit);                                          \
1583
488k
        bit_set_position (dat, obj->hdlpos);                                  \
1584
488k
      }                                                                       \
1585
1.60M
  }
1586
1587
#define REPEAT_CHKCOUNT(name, times, type)                                    \
1588
0
  if (AVAIL_BITS (dat) < 0)                                                   \
1589
0
    {                                                                         \
1590
0
      LOG_ERROR ("Invalid " #name " in %s. No bytes left.\n", SAFEDXFNAME);   \
1591
0
      if (_obj->name)                                                         \
1592
0
        {                                                                     \
1593
0
          free (_obj->name);                                                  \
1594
0
          _obj->name = NULL;                                                  \
1595
0
        }                                                                     \
1596
0
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1597
0
    }                                                                         \
1598
0
  LOG_INSANE ("REPEAT_CHKCOUNT %s." #name " x %lu: %lu > %" PRId64 "?\n",     \
1599
0
              SAFEDXFNAME, (unsigned long)times,                              \
1600
0
              (unsigned long)((times) * sizeof (type)), AVAIL_BITS (dat));    \
1601
0
  if ((int64_t)((times) * sizeof (type)) > AVAIL_BITS (dat))                  \
1602
0
    {                                                                         \
1603
0
      LOG_ERROR ("Invalid %s." #name " x %lu\n", SAFEDXFNAME,                 \
1604
0
                 (unsigned long)times);                                       \
1605
0
      if (_obj->name)                                                         \
1606
0
        {                                                                     \
1607
0
          free (_obj->name);                                                  \
1608
0
          _obj->name = NULL;                                                  \
1609
0
        }                                                                     \
1610
0
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1611
0
    }
1612
#define REPEAT_CHKCOUNT_LVAL(name, times, type)                               \
1613
208k
  if (AVAIL_BITS (dat) < 0)                                                   \
1614
208k
    {                                                                         \
1615
1.06k
      LOG_ERROR ("Invalid %s." #name ". No bytes left.\n", SAFEDXFNAME);      \
1616
1.06k
      times = 0;                                                              \
1617
1.06k
      if (_obj->name)                                                         \
1618
1.06k
        {                                                                     \
1619
0
          free (_obj->name);                                                  \
1620
0
          _obj->name = NULL;                                                  \
1621
0
        }                                                                     \
1622
1.06k
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1623
1.06k
    }                                                                         \
1624
208k
  LOG_INSANE ("REPEAT_CHKCOUNT_LVAL %s." #name " x %lu: %lu > %" PRId64       \
1625
207k
              "?\n",                                                          \
1626
207k
              SAFEDXFNAME, (unsigned long)times,                              \
1627
207k
              (unsigned long)((times) * sizeof (type)), AVAIL_BITS (dat));    \
1628
207k
  if ((int64_t)((times) * sizeof (type)) > AVAIL_BITS (dat)                   \
1629
207k
      || (sizeof (times) > 4 && times > 0xc0000000 / sizeof (type)))          \
1630
207k
    {                                                                         \
1631
4.18k
      LOG_ERROR ("Invalid %s." #name " x %ld\n", SAFEDXFNAME, (long)times);   \
1632
4.18k
      times = 0;                                                              \
1633
4.18k
      if (_obj->name)                                                         \
1634
4.18k
        {                                                                     \
1635
0
          free (_obj->name);                                                  \
1636
0
          _obj->name = NULL;                                                  \
1637
0
        }                                                                     \
1638
4.18k
      return DWG_ERR_VALUEOUTOFBOUNDS;                                        \
1639
4.18k
    }
1640
1641
/* REPEAT names:
1642
  _ adds idx
1643
  C does no checks
1644
  N does constant times (else _obj->times)
1645
  F does not calloc/free
1646
*/
1647
1648
// unchecked with constant times
1649
#define REPEAT_CN(times, name, type)                                          \
1650
0
  if (times > 0)                                                              \
1651
0
    {                                                                         \
1652
0
      _obj->name = (type *)calloc (times, sizeof (type));                     \
1653
0
      if (!_obj->name)                                                        \
1654
0
        return DWG_ERR_OUTOFMEM;                                              \
1655
0
    }                                                                         \
1656
0
  for (rcount1 = 0; rcount1 < (BITCODE_BL)times; rcount1++)
1657
// checked with constant times
1658
#define REPEAT_N(times, name, type)                                           \
1659
0
  REPEAT_CHKCOUNT (name, times, type)                                         \
1660
0
  if (times > 0)                                                              \
1661
0
    {                                                                         \
1662
0
      _obj->name = (type *)calloc (times, sizeof (type));                     \
1663
0
      if (!_obj->name)                                                        \
1664
0
        return DWG_ERR_OUTOFMEM;                                              \
1665
0
    }                                                                         \
1666
0
  for (rcount1 = 0; rcount1 < (BITCODE_BL)times; rcount1++)
1667
1668
// checked with var. times
1669
#define _REPEAT(times, nam, type, idx)                                        \
1670
208k
  REPEAT_CHKCOUNT_LVAL (nam, _obj->times, type)                               \
1671
207k
  if (_obj->times > 0)                                                        \
1672
202k
    {                                                                         \
1673
15.9k
      _obj->nam = (type *)calloc (_obj->times, sizeof (type));                \
1674
15.9k
      if (!_obj->nam)                                                         \
1675
15.9k
        return DWG_ERR_OUTOFMEM;                                              \
1676
15.9k
    }                                                                         \
1677
1.04M
  for (rcount##idx = 0; rcount##idx < (BITCODE_BL)_obj->times; rcount##idx++)
1678
// unchecked with var. times
1679
#define _REPEAT_C(times, name, type, idx)                                     \
1680
6.90k
  if (_obj->times > 0)                                                        \
1681
6.90k
    _obj->name = (type *)calloc (_obj->times, sizeof (type));                 \
1682
713k
  for (rcount##idx = 0; rcount##idx < (BITCODE_BL)_obj->times; rcount##idx++)
1683
// unchecked with constant times
1684
#define _REPEAT_CN(times, name, type, idx)                                    \
1685
0
  if (times > 0)                                                              \
1686
0
    {                                                                         \
1687
0
      _obj->name = (type *)calloc (times, sizeof (type));                     \
1688
0
      if (!_obj->name)                                                        \
1689
0
        return DWG_ERR_OUTOFMEM;                                              \
1690
0
    }                                                                         \
1691
0
  if (_obj->name)                                                             \
1692
0
    for (rcount##idx = 0; rcount##idx < (BITCODE_BL)times; rcount##idx++)
1693
1694
// not allocating versions unchecked: _REPEAT_CNF
1695
// not allocating versions checked: _REPEAT_NF
1696
1697
25.3k
#define REPEAT(times, name, type) _REPEAT (times, name, type, 1)
1698
183k
#define REPEAT2(times, name, type) _REPEAT (times, name, type, 2)
1699
116
#define REPEAT3(times, name, type) _REPEAT (times, name, type, 3)
1700
0
#define REPEAT4(times, name, type) _REPEAT (times, name, type, 4)
1701
1702
6.90k
#define REPEAT_C(times, name, type) _REPEAT_C (times, name, type, 1)
1703
#define REPEAT2_C(times, name, type) _REPEAT_C (times, name, type, 2)
1704
#define REPEAT3_C(times, name, type) _REPEAT_C (times, name, type, 3)
1705
#define REPEAT4_C(times, name, type) _REPEAT_C (times, name, type, 4)
1706
1707
#define COMMON_ENTITY_HANDLE_DATA                                             \
1708
323k
  SINCE (R_13b1)                                                              \
1709
193k
  {                                                                           \
1710
193k
    START_HANDLE_STREAM;                                                      \
1711
193k
  }
1712
1713
/** Add the empty entity or object with its three structs to the DWG.
1714
    All fields are zero'd. TODO: some are initialized with default values, as
1715
    defined in dwg.spec.
1716
    Returns 0 or DWG_ERR_OUTOFMEM.
1717
*/
1718
1719
#define DWG_ENTITY(token)                                                     \
1720
  EXPORT int dwg_setup_##token (Dwg_Object *obj)                              \
1721
529k
  {                                                                           \
1722
529k
    Dwg_Object_Entity *_ent;                                                  \
1723
529k
    Dwg_Entity_##token *_obj;                                                 \
1724
529k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
529k
        && obj->parent->header.version < R_13b1)                              \
1726
529k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
529k
    else                                                                      \
1728
529k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
529k
    obj->parent->num_entities++;                                              \
1730
529k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
529k
    if (!(int)obj->fixedtype)                                                 \
1732
529k
      {                                                                       \
1733
529k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
529k
      }                                                                       \
1735
529k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
529k
      {                                                                       \
1737
1.13k
        obj->type = DWG_TYPE_##token;                                         \
1738
1.13k
      }                                                                       \
1739
529k
    if (!obj->dxfname)                                                        \
1740
529k
      {                                                                       \
1741
529k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
529k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
529k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
512k
          {                                                                   \
1745
184
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
184
            obj->name = (char *)#token;                                       \
1747
184
          }                                                                   \
1748
512k
        else                                                                  \
1749
512k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
529k
      }                                                                       \
1751
529k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
529k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
529k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
529k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
529k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
529k
    _ent = obj->tio.entity                                                    \
1771
529k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
529k
    if (!_ent)                                                                \
1773
529k
      return DWG_ERR_OUTOFMEM;                                                \
1774
529k
    _ent->tio.token                                                           \
1775
529k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
529k
    if (!_ent->tio.token)                                                     \
1777
529k
      return DWG_ERR_OUTOFMEM;                                                \
1778
529k
    _ent->dwg = obj->parent;                                                  \
1779
529k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
529k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
529k
    return 0;                                                                 \
1782
529k
  }                                                                           \
dwg_setup_TEXT
Line
Count
Source
1721
29.1k
  {                                                                           \
1722
29.1k
    Dwg_Object_Entity *_ent;                                                  \
1723
29.1k
    Dwg_Entity_##token *_obj;                                                 \
1724
29.1k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
29.1k
        && obj->parent->header.version < R_13b1)                              \
1726
29.1k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
29.1k
    else                                                                      \
1728
29.1k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
29.1k
    obj->parent->num_entities++;                                              \
1730
29.1k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
29.1k
    if (!(int)obj->fixedtype)                                                 \
1732
29.1k
      {                                                                       \
1733
29.1k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
29.1k
      }                                                                       \
1735
29.1k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
29.1k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
29.1k
    if (!obj->dxfname)                                                        \
1740
29.1k
      {                                                                       \
1741
29.1k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
29.1k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
29.1k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
29.1k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
29.1k
        else                                                                  \
1749
29.1k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
29.1k
      }                                                                       \
1751
29.1k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
29.1k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
29.1k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
29.1k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
29.1k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
29.1k
    _ent = obj->tio.entity                                                    \
1771
29.1k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
29.1k
    if (!_ent)                                                                \
1773
29.1k
      return DWG_ERR_OUTOFMEM;                                                \
1774
29.1k
    _ent->tio.token                                                           \
1775
29.1k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
29.1k
    if (!_ent->tio.token)                                                     \
1777
29.1k
      return DWG_ERR_OUTOFMEM;                                                \
1778
29.1k
    _ent->dwg = obj->parent;                                                  \
1779
29.1k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
29.1k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
29.1k
    return 0;                                                                 \
1782
29.1k
  }                                                                           \
dwg_setup_ATTRIB
Line
Count
Source
1721
24.9k
  {                                                                           \
1722
24.9k
    Dwg_Object_Entity *_ent;                                                  \
1723
24.9k
    Dwg_Entity_##token *_obj;                                                 \
1724
24.9k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
24.9k
        && obj->parent->header.version < R_13b1)                              \
1726
24.9k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
24.9k
    else                                                                      \
1728
24.9k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
24.9k
    obj->parent->num_entities++;                                              \
1730
24.9k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
24.9k
    if (!(int)obj->fixedtype)                                                 \
1732
24.9k
      {                                                                       \
1733
24.9k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
24.9k
      }                                                                       \
1735
24.9k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
24.9k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
24.9k
    if (!obj->dxfname)                                                        \
1740
24.9k
      {                                                                       \
1741
24.9k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
24.9k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
24.9k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
24.9k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
24.9k
        else                                                                  \
1749
24.9k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
24.9k
      }                                                                       \
1751
24.9k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
24.9k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
24.9k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
24.9k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
24.9k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
24.9k
    _ent = obj->tio.entity                                                    \
1771
24.9k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
24.9k
    if (!_ent)                                                                \
1773
24.9k
      return DWG_ERR_OUTOFMEM;                                                \
1774
24.9k
    _ent->tio.token                                                           \
1775
24.9k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
24.9k
    if (!_ent->tio.token)                                                     \
1777
24.9k
      return DWG_ERR_OUTOFMEM;                                                \
1778
24.9k
    _ent->dwg = obj->parent;                                                  \
1779
24.9k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
24.9k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
24.9k
    return 0;                                                                 \
1782
24.9k
  }                                                                           \
dwg_setup_ATTDEF
Line
Count
Source
1721
43.3k
  {                                                                           \
1722
43.3k
    Dwg_Object_Entity *_ent;                                                  \
1723
43.3k
    Dwg_Entity_##token *_obj;                                                 \
1724
43.3k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
43.3k
        && obj->parent->header.version < R_13b1)                              \
1726
43.3k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
43.3k
    else                                                                      \
1728
43.3k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
43.3k
    obj->parent->num_entities++;                                              \
1730
43.3k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
43.3k
    if (!(int)obj->fixedtype)                                                 \
1732
43.3k
      {                                                                       \
1733
43.3k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
43.3k
      }                                                                       \
1735
43.3k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
43.3k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
43.3k
    if (!obj->dxfname)                                                        \
1740
43.3k
      {                                                                       \
1741
43.3k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
43.3k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
43.3k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
43.3k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
43.3k
        else                                                                  \
1749
43.3k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
43.3k
      }                                                                       \
1751
43.3k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
43.3k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
43.3k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
43.3k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
43.3k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
43.3k
    _ent = obj->tio.entity                                                    \
1771
43.3k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
43.3k
    if (!_ent)                                                                \
1773
43.3k
      return DWG_ERR_OUTOFMEM;                                                \
1774
43.3k
    _ent->tio.token                                                           \
1775
43.3k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
43.3k
    if (!_ent->tio.token)                                                     \
1777
43.3k
      return DWG_ERR_OUTOFMEM;                                                \
1778
43.3k
    _ent->dwg = obj->parent;                                                  \
1779
43.3k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
43.3k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
43.3k
    return 0;                                                                 \
1782
43.3k
  }                                                                           \
dwg_setup_BLOCK
Line
Count
Source
1721
11.4k
  {                                                                           \
1722
11.4k
    Dwg_Object_Entity *_ent;                                                  \
1723
11.4k
    Dwg_Entity_##token *_obj;                                                 \
1724
11.4k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
11.4k
        && obj->parent->header.version < R_13b1)                              \
1726
11.4k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
11.4k
    else                                                                      \
1728
11.4k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
11.4k
    obj->parent->num_entities++;                                              \
1730
11.4k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
11.4k
    if (!(int)obj->fixedtype)                                                 \
1732
11.4k
      {                                                                       \
1733
11.4k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
11.4k
      }                                                                       \
1735
11.4k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
11.4k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
11.4k
    if (!obj->dxfname)                                                        \
1740
11.4k
      {                                                                       \
1741
11.4k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
11.4k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
11.4k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
11.4k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
11.4k
        else                                                                  \
1749
11.4k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
11.4k
      }                                                                       \
1751
11.4k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
11.4k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
11.4k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
11.4k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
11.4k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
11.4k
    _ent = obj->tio.entity                                                    \
1771
11.4k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
11.4k
    if (!_ent)                                                                \
1773
11.4k
      return DWG_ERR_OUTOFMEM;                                                \
1774
11.4k
    _ent->tio.token                                                           \
1775
11.4k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
11.4k
    if (!_ent->tio.token)                                                     \
1777
11.4k
      return DWG_ERR_OUTOFMEM;                                                \
1778
11.4k
    _ent->dwg = obj->parent;                                                  \
1779
11.4k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
11.4k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
11.4k
    return 0;                                                                 \
1782
11.4k
  }                                                                           \
dwg_setup_ENDBLK
Line
Count
Source
1721
9.84k
  {                                                                           \
1722
9.84k
    Dwg_Object_Entity *_ent;                                                  \
1723
9.84k
    Dwg_Entity_##token *_obj;                                                 \
1724
9.84k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
9.84k
        && obj->parent->header.version < R_13b1)                              \
1726
9.84k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
9.84k
    else                                                                      \
1728
9.84k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
9.84k
    obj->parent->num_entities++;                                              \
1730
9.84k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
9.84k
    if (!(int)obj->fixedtype)                                                 \
1732
9.84k
      {                                                                       \
1733
9.84k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
9.84k
      }                                                                       \
1735
9.84k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
9.84k
      {                                                                       \
1737
1.13k
        obj->type = DWG_TYPE_##token;                                         \
1738
1.13k
      }                                                                       \
1739
9.84k
    if (!obj->dxfname)                                                        \
1740
9.84k
      {                                                                       \
1741
9.84k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
9.84k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
9.84k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
9.84k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
9.84k
        else                                                                  \
1749
9.84k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
9.84k
      }                                                                       \
1751
9.84k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
9.84k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
9.84k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
9.84k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
9.84k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
9.84k
    _ent = obj->tio.entity                                                    \
1771
9.84k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
9.84k
    if (!_ent)                                                                \
1773
9.84k
      return DWG_ERR_OUTOFMEM;                                                \
1774
9.84k
    _ent->tio.token                                                           \
1775
9.84k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
9.84k
    if (!_ent->tio.token)                                                     \
1777
9.84k
      return DWG_ERR_OUTOFMEM;                                                \
1778
9.84k
    _ent->dwg = obj->parent;                                                  \
1779
9.84k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
9.84k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
9.84k
    return 0;                                                                 \
1782
9.84k
  }                                                                           \
dwg_setup_SEQEND
Line
Count
Source
1721
3.15k
  {                                                                           \
1722
3.15k
    Dwg_Object_Entity *_ent;                                                  \
1723
3.15k
    Dwg_Entity_##token *_obj;                                                 \
1724
3.15k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
3.15k
        && obj->parent->header.version < R_13b1)                              \
1726
3.15k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
3.15k
    else                                                                      \
1728
3.15k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
3.15k
    obj->parent->num_entities++;                                              \
1730
3.15k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
3.15k
    if (!(int)obj->fixedtype)                                                 \
1732
3.15k
      {                                                                       \
1733
3.15k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
3.15k
      }                                                                       \
1735
3.15k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
3.15k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
3.15k
    if (!obj->dxfname)                                                        \
1740
3.15k
      {                                                                       \
1741
3.15k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
3.15k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
3.15k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
3.15k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
3.15k
        else                                                                  \
1749
3.15k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
3.15k
      }                                                                       \
1751
3.15k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
3.15k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
3.15k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
3.15k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
3.15k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
3.15k
    _ent = obj->tio.entity                                                    \
1771
3.15k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
3.15k
    if (!_ent)                                                                \
1773
3.15k
      return DWG_ERR_OUTOFMEM;                                                \
1774
3.15k
    _ent->tio.token                                                           \
1775
3.15k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
3.15k
    if (!_ent->tio.token)                                                     \
1777
3.15k
      return DWG_ERR_OUTOFMEM;                                                \
1778
3.15k
    _ent->dwg = obj->parent;                                                  \
1779
3.15k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
3.15k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
3.15k
    return 0;                                                                 \
1782
3.15k
  }                                                                           \
dwg_setup_INSERT
Line
Count
Source
1721
14.1k
  {                                                                           \
1722
14.1k
    Dwg_Object_Entity *_ent;                                                  \
1723
14.1k
    Dwg_Entity_##token *_obj;                                                 \
1724
14.1k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
14.1k
        && obj->parent->header.version < R_13b1)                              \
1726
14.1k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
14.1k
    else                                                                      \
1728
14.1k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
14.1k
    obj->parent->num_entities++;                                              \
1730
14.1k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
14.1k
    if (!(int)obj->fixedtype)                                                 \
1732
14.1k
      {                                                                       \
1733
14.1k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
14.1k
      }                                                                       \
1735
14.1k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
14.1k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
14.1k
    if (!obj->dxfname)                                                        \
1740
14.1k
      {                                                                       \
1741
14.1k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
14.1k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
14.1k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
14.1k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
14.1k
        else                                                                  \
1749
14.1k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
14.1k
      }                                                                       \
1751
14.1k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
14.1k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
14.1k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
14.1k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
14.1k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
14.1k
    _ent = obj->tio.entity                                                    \
1771
14.1k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
14.1k
    if (!_ent)                                                                \
1773
14.1k
      return DWG_ERR_OUTOFMEM;                                                \
1774
14.1k
    _ent->tio.token                                                           \
1775
14.1k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
14.1k
    if (!_ent->tio.token)                                                     \
1777
14.1k
      return DWG_ERR_OUTOFMEM;                                                \
1778
14.1k
    _ent->dwg = obj->parent;                                                  \
1779
14.1k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
14.1k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
14.1k
    return 0;                                                                 \
1782
14.1k
  }                                                                           \
dwg_setup_MINSERT
Line
Count
Source
1721
6.32k
  {                                                                           \
1722
6.32k
    Dwg_Object_Entity *_ent;                                                  \
1723
6.32k
    Dwg_Entity_##token *_obj;                                                 \
1724
6.32k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
6.32k
        && obj->parent->header.version < R_13b1)                              \
1726
6.32k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
6.32k
    else                                                                      \
1728
6.32k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
6.32k
    obj->parent->num_entities++;                                              \
1730
6.32k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
6.32k
    if (!(int)obj->fixedtype)                                                 \
1732
6.32k
      {                                                                       \
1733
6.32k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
6.32k
      }                                                                       \
1735
6.32k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
6.32k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
6.32k
    if (!obj->dxfname)                                                        \
1740
6.32k
      {                                                                       \
1741
6.32k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
6.32k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
6.32k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
6.32k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
6.32k
        else                                                                  \
1749
6.32k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
6.32k
      }                                                                       \
1751
6.32k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
6.32k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
6.32k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
6.32k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
6.32k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
6.32k
    _ent = obj->tio.entity                                                    \
1771
6.32k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
6.32k
    if (!_ent)                                                                \
1773
6.32k
      return DWG_ERR_OUTOFMEM;                                                \
1774
6.32k
    _ent->tio.token                                                           \
1775
6.32k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
6.32k
    if (!_ent->tio.token)                                                     \
1777
6.32k
      return DWG_ERR_OUTOFMEM;                                                \
1778
6.32k
    _ent->dwg = obj->parent;                                                  \
1779
6.32k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
6.32k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
6.32k
    return 0;                                                                 \
1782
6.32k
  }                                                                           \
dwg_setup__3DLINE
Line
Count
Source
1721
1.95k
  {                                                                           \
1722
1.95k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.95k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.95k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.95k
        && obj->parent->header.version < R_13b1)                              \
1726
1.95k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.95k
    else                                                                      \
1728
1.95k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.95k
    obj->parent->num_entities++;                                              \
1730
1.95k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.95k
    if (!(int)obj->fixedtype)                                                 \
1732
1.95k
      {                                                                       \
1733
1.95k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.95k
      }                                                                       \
1735
1.95k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.95k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.95k
    if (!obj->dxfname)                                                        \
1740
1.95k
      {                                                                       \
1741
1.95k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.95k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.95k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
0
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
0
        else                                                                  \
1749
0
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.95k
      }                                                                       \
1751
1.95k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.95k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.95k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.95k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.95k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.95k
    _ent = obj->tio.entity                                                    \
1771
1.95k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.95k
    if (!_ent)                                                                \
1773
1.95k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.95k
    _ent->tio.token                                                           \
1775
1.95k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.95k
    if (!_ent->tio.token)                                                     \
1777
1.95k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.95k
    _ent->dwg = obj->parent;                                                  \
1779
1.95k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.95k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.95k
    return 0;                                                                 \
1782
1.95k
  }                                                                           \
dwg_setup_VERTEX_2D
Line
Count
Source
1721
8.54k
  {                                                                           \
1722
8.54k
    Dwg_Object_Entity *_ent;                                                  \
1723
8.54k
    Dwg_Entity_##token *_obj;                                                 \
1724
8.54k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
8.54k
        && obj->parent->header.version < R_13b1)                              \
1726
8.54k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
8.54k
    else                                                                      \
1728
8.54k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
8.54k
    obj->parent->num_entities++;                                              \
1730
8.54k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
8.54k
    if (!(int)obj->fixedtype)                                                 \
1732
8.54k
      {                                                                       \
1733
8.54k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
8.54k
      }                                                                       \
1735
8.54k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
8.54k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
8.54k
    if (!obj->dxfname)                                                        \
1740
8.54k
      {                                                                       \
1741
8.54k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
8.54k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
8.54k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
8.54k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
8.54k
        else                                                                  \
1749
8.54k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
8.54k
      }                                                                       \
1751
8.54k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
8.54k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
8.54k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
8.54k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
8.54k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
8.54k
    _ent = obj->tio.entity                                                    \
1771
8.54k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
8.54k
    if (!_ent)                                                                \
1773
8.54k
      return DWG_ERR_OUTOFMEM;                                                \
1774
8.54k
    _ent->tio.token                                                           \
1775
8.54k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
8.54k
    if (!_ent->tio.token)                                                     \
1777
8.54k
      return DWG_ERR_OUTOFMEM;                                                \
1778
8.54k
    _ent->dwg = obj->parent;                                                  \
1779
8.54k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
8.54k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
8.54k
    return 0;                                                                 \
1782
8.54k
  }                                                                           \
dwg_setup_VERTEX_3D
Line
Count
Source
1721
4.48k
  {                                                                           \
1722
4.48k
    Dwg_Object_Entity *_ent;                                                  \
1723
4.48k
    Dwg_Entity_##token *_obj;                                                 \
1724
4.48k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
4.48k
        && obj->parent->header.version < R_13b1)                              \
1726
4.48k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
4.48k
    else                                                                      \
1728
4.48k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
4.48k
    obj->parent->num_entities++;                                              \
1730
4.48k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
4.48k
    if (!(int)obj->fixedtype)                                                 \
1732
4.48k
      {                                                                       \
1733
4.48k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
4.48k
      }                                                                       \
1735
4.48k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
4.48k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
4.48k
    if (!obj->dxfname)                                                        \
1740
4.48k
      {                                                                       \
1741
4.48k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
4.48k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
4.48k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
4.48k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
4.48k
        else                                                                  \
1749
4.48k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
4.48k
      }                                                                       \
1751
4.48k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
4.48k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
4.48k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
4.48k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
4.48k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
4.48k
    _ent = obj->tio.entity                                                    \
1771
4.48k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
4.48k
    if (!_ent)                                                                \
1773
4.48k
      return DWG_ERR_OUTOFMEM;                                                \
1774
4.48k
    _ent->tio.token                                                           \
1775
4.48k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
4.48k
    if (!_ent->tio.token)                                                     \
1777
4.48k
      return DWG_ERR_OUTOFMEM;                                                \
1778
4.48k
    _ent->dwg = obj->parent;                                                  \
1779
4.48k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
4.48k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
4.48k
    return 0;                                                                 \
1782
4.48k
  }                                                                           \
dwg_setup_VERTEX_MESH
Line
Count
Source
1721
18.6k
  {                                                                           \
1722
18.6k
    Dwg_Object_Entity *_ent;                                                  \
1723
18.6k
    Dwg_Entity_##token *_obj;                                                 \
1724
18.6k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
18.6k
        && obj->parent->header.version < R_13b1)                              \
1726
18.6k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
18.6k
    else                                                                      \
1728
18.6k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
18.6k
    obj->parent->num_entities++;                                              \
1730
18.6k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
18.6k
    if (!(int)obj->fixedtype)                                                 \
1732
18.6k
      {                                                                       \
1733
18.6k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
18.6k
      }                                                                       \
1735
18.6k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
18.6k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
18.6k
    if (!obj->dxfname)                                                        \
1740
18.6k
      {                                                                       \
1741
18.6k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
18.6k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
18.6k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
18.6k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
18.6k
        else                                                                  \
1749
18.6k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
18.6k
      }                                                                       \
1751
18.6k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
18.6k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
18.6k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
18.6k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
18.6k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
18.6k
    _ent = obj->tio.entity                                                    \
1771
18.6k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
18.6k
    if (!_ent)                                                                \
1773
18.6k
      return DWG_ERR_OUTOFMEM;                                                \
1774
18.6k
    _ent->tio.token                                                           \
1775
18.6k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
18.6k
    if (!_ent->tio.token)                                                     \
1777
18.6k
      return DWG_ERR_OUTOFMEM;                                                \
1778
18.6k
    _ent->dwg = obj->parent;                                                  \
1779
18.6k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
18.6k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
18.6k
    return 0;                                                                 \
1782
18.6k
  }                                                                           \
dwg_setup_VERTEX_PFACE
Line
Count
Source
1721
11.6k
  {                                                                           \
1722
11.6k
    Dwg_Object_Entity *_ent;                                                  \
1723
11.6k
    Dwg_Entity_##token *_obj;                                                 \
1724
11.6k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
11.6k
        && obj->parent->header.version < R_13b1)                              \
1726
11.6k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
11.6k
    else                                                                      \
1728
11.6k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
11.6k
    obj->parent->num_entities++;                                              \
1730
11.6k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
11.6k
    if (!(int)obj->fixedtype)                                                 \
1732
11.6k
      {                                                                       \
1733
11.6k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
11.6k
      }                                                                       \
1735
11.6k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
11.6k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
11.6k
    if (!obj->dxfname)                                                        \
1740
11.6k
      {                                                                       \
1741
11.6k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
11.6k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
11.6k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
11.6k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
11.6k
        else                                                                  \
1749
11.6k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
11.6k
      }                                                                       \
1751
11.6k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
11.6k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
11.6k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
11.6k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
11.6k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
11.6k
    _ent = obj->tio.entity                                                    \
1771
11.6k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
11.6k
    if (!_ent)                                                                \
1773
11.6k
      return DWG_ERR_OUTOFMEM;                                                \
1774
11.6k
    _ent->tio.token                                                           \
1775
11.6k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
11.6k
    if (!_ent->tio.token)                                                     \
1777
11.6k
      return DWG_ERR_OUTOFMEM;                                                \
1778
11.6k
    _ent->dwg = obj->parent;                                                  \
1779
11.6k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
11.6k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
11.6k
    return 0;                                                                 \
1782
11.6k
  }                                                                           \
dwg_setup_VERTEX_PFACE_FACE
Line
Count
Source
1721
2.69k
  {                                                                           \
1722
2.69k
    Dwg_Object_Entity *_ent;                                                  \
1723
2.69k
    Dwg_Entity_##token *_obj;                                                 \
1724
2.69k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
2.69k
        && obj->parent->header.version < R_13b1)                              \
1726
2.69k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
2.69k
    else                                                                      \
1728
2.69k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
2.69k
    obj->parent->num_entities++;                                              \
1730
2.69k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
2.69k
    if (!(int)obj->fixedtype)                                                 \
1732
2.69k
      {                                                                       \
1733
2.69k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
2.69k
      }                                                                       \
1735
2.69k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
2.69k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
2.69k
    if (!obj->dxfname)                                                        \
1740
2.69k
      {                                                                       \
1741
2.69k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
2.69k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
2.69k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
2.69k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
2.69k
        else                                                                  \
1749
2.69k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
2.69k
      }                                                                       \
1751
2.69k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
2.69k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
2.69k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
2.69k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
2.69k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
2.69k
    _ent = obj->tio.entity                                                    \
1771
2.69k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
2.69k
    if (!_ent)                                                                \
1773
2.69k
      return DWG_ERR_OUTOFMEM;                                                \
1774
2.69k
    _ent->tio.token                                                           \
1775
2.69k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
2.69k
    if (!_ent->tio.token)                                                     \
1777
2.69k
      return DWG_ERR_OUTOFMEM;                                                \
1778
2.69k
    _ent->dwg = obj->parent;                                                  \
1779
2.69k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
2.69k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
2.69k
    return 0;                                                                 \
1782
2.69k
  }                                                                           \
dwg_setup_POLYLINE_2D
Line
Count
Source
1721
7.91k
  {                                                                           \
1722
7.91k
    Dwg_Object_Entity *_ent;                                                  \
1723
7.91k
    Dwg_Entity_##token *_obj;                                                 \
1724
7.91k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
7.91k
        && obj->parent->header.version < R_13b1)                              \
1726
7.91k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
7.91k
    else                                                                      \
1728
7.91k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
7.91k
    obj->parent->num_entities++;                                              \
1730
7.91k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
7.91k
    if (!(int)obj->fixedtype)                                                 \
1732
7.91k
      {                                                                       \
1733
7.91k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
7.91k
      }                                                                       \
1735
7.91k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
7.91k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
7.91k
    if (!obj->dxfname)                                                        \
1740
7.91k
      {                                                                       \
1741
7.91k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
7.91k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
7.91k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
7.91k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
7.91k
        else                                                                  \
1749
7.91k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
7.91k
      }                                                                       \
1751
7.91k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
7.91k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
7.91k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
7.91k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
7.91k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
7.91k
    _ent = obj->tio.entity                                                    \
1771
7.91k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
7.91k
    if (!_ent)                                                                \
1773
7.91k
      return DWG_ERR_OUTOFMEM;                                                \
1774
7.91k
    _ent->tio.token                                                           \
1775
7.91k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
7.91k
    if (!_ent->tio.token)                                                     \
1777
7.91k
      return DWG_ERR_OUTOFMEM;                                                \
1778
7.91k
    _ent->dwg = obj->parent;                                                  \
1779
7.91k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
7.91k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
7.91k
    return 0;                                                                 \
1782
7.91k
  }                                                                           \
dwg_setup_POLYLINE_3D
Line
Count
Source
1721
15.9k
  {                                                                           \
1722
15.9k
    Dwg_Object_Entity *_ent;                                                  \
1723
15.9k
    Dwg_Entity_##token *_obj;                                                 \
1724
15.9k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
15.9k
        && obj->parent->header.version < R_13b1)                              \
1726
15.9k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
15.9k
    else                                                                      \
1728
15.9k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
15.9k
    obj->parent->num_entities++;                                              \
1730
15.9k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
15.9k
    if (!(int)obj->fixedtype)                                                 \
1732
15.9k
      {                                                                       \
1733
15.9k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
15.9k
      }                                                                       \
1735
15.9k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
15.9k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
15.9k
    if (!obj->dxfname)                                                        \
1740
15.9k
      {                                                                       \
1741
15.9k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
15.9k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
15.9k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
15.9k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
15.9k
        else                                                                  \
1749
15.9k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
15.9k
      }                                                                       \
1751
15.9k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
15.9k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
15.9k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
15.9k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
15.9k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
15.9k
    _ent = obj->tio.entity                                                    \
1771
15.9k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
15.9k
    if (!_ent)                                                                \
1773
15.9k
      return DWG_ERR_OUTOFMEM;                                                \
1774
15.9k
    _ent->tio.token                                                           \
1775
15.9k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
15.9k
    if (!_ent->tio.token)                                                     \
1777
15.9k
      return DWG_ERR_OUTOFMEM;                                                \
1778
15.9k
    _ent->dwg = obj->parent;                                                  \
1779
15.9k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
15.9k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
15.9k
    return 0;                                                                 \
1782
15.9k
  }                                                                           \
dwg_setup_ARC
Line
Count
Source
1721
14.4k
  {                                                                           \
1722
14.4k
    Dwg_Object_Entity *_ent;                                                  \
1723
14.4k
    Dwg_Entity_##token *_obj;                                                 \
1724
14.4k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
14.4k
        && obj->parent->header.version < R_13b1)                              \
1726
14.4k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
14.4k
    else                                                                      \
1728
14.4k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
14.4k
    obj->parent->num_entities++;                                              \
1730
14.4k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
14.4k
    if (!(int)obj->fixedtype)                                                 \
1732
14.4k
      {                                                                       \
1733
14.4k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
14.4k
      }                                                                       \
1735
14.4k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
14.4k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
14.4k
    if (!obj->dxfname)                                                        \
1740
14.4k
      {                                                                       \
1741
14.4k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
14.4k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
14.4k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
14.4k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
14.4k
        else                                                                  \
1749
14.4k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
14.4k
      }                                                                       \
1751
14.4k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
14.4k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
14.4k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
14.4k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
14.4k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
14.4k
    _ent = obj->tio.entity                                                    \
1771
14.4k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
14.4k
    if (!_ent)                                                                \
1773
14.4k
      return DWG_ERR_OUTOFMEM;                                                \
1774
14.4k
    _ent->tio.token                                                           \
1775
14.4k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
14.4k
    if (!_ent->tio.token)                                                     \
1777
14.4k
      return DWG_ERR_OUTOFMEM;                                                \
1778
14.4k
    _ent->dwg = obj->parent;                                                  \
1779
14.4k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
14.4k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
14.4k
    return 0;                                                                 \
1782
14.4k
  }                                                                           \
dwg_setup_CIRCLE
Line
Count
Source
1721
4.19k
  {                                                                           \
1722
4.19k
    Dwg_Object_Entity *_ent;                                                  \
1723
4.19k
    Dwg_Entity_##token *_obj;                                                 \
1724
4.19k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
4.19k
        && obj->parent->header.version < R_13b1)                              \
1726
4.19k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
4.19k
    else                                                                      \
1728
4.19k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
4.19k
    obj->parent->num_entities++;                                              \
1730
4.19k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
4.19k
    if (!(int)obj->fixedtype)                                                 \
1732
4.19k
      {                                                                       \
1733
4.19k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
4.19k
      }                                                                       \
1735
4.19k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
4.19k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
4.19k
    if (!obj->dxfname)                                                        \
1740
4.19k
      {                                                                       \
1741
4.19k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
4.19k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
4.19k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
4.19k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
4.19k
        else                                                                  \
1749
4.19k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
4.19k
      }                                                                       \
1751
4.19k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
4.19k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
4.19k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
4.19k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
4.19k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
4.19k
    _ent = obj->tio.entity                                                    \
1771
4.19k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
4.19k
    if (!_ent)                                                                \
1773
4.19k
      return DWG_ERR_OUTOFMEM;                                                \
1774
4.19k
    _ent->tio.token                                                           \
1775
4.19k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
4.19k
    if (!_ent->tio.token)                                                     \
1777
4.19k
      return DWG_ERR_OUTOFMEM;                                                \
1778
4.19k
    _ent->dwg = obj->parent;                                                  \
1779
4.19k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
4.19k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
4.19k
    return 0;                                                                 \
1782
4.19k
  }                                                                           \
dwg_setup_LINE
Line
Count
Source
1721
14.8k
  {                                                                           \
1722
14.8k
    Dwg_Object_Entity *_ent;                                                  \
1723
14.8k
    Dwg_Entity_##token *_obj;                                                 \
1724
14.8k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
14.8k
        && obj->parent->header.version < R_13b1)                              \
1726
14.8k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
14.8k
    else                                                                      \
1728
14.8k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
14.8k
    obj->parent->num_entities++;                                              \
1730
14.8k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
14.8k
    if (!(int)obj->fixedtype)                                                 \
1732
14.8k
      {                                                                       \
1733
14.8k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
14.8k
      }                                                                       \
1735
14.8k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
14.8k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
14.8k
    if (!obj->dxfname)                                                        \
1740
14.8k
      {                                                                       \
1741
14.8k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
14.8k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
14.8k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
14.8k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
14.8k
        else                                                                  \
1749
14.8k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
14.8k
      }                                                                       \
1751
14.8k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
14.8k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
14.8k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
14.8k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
14.8k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
14.8k
    _ent = obj->tio.entity                                                    \
1771
14.8k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
14.8k
    if (!_ent)                                                                \
1773
14.8k
      return DWG_ERR_OUTOFMEM;                                                \
1774
14.8k
    _ent->tio.token                                                           \
1775
14.8k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
14.8k
    if (!_ent->tio.token)                                                     \
1777
14.8k
      return DWG_ERR_OUTOFMEM;                                                \
1778
14.8k
    _ent->dwg = obj->parent;                                                  \
1779
14.8k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
14.8k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
14.8k
    return 0;                                                                 \
1782
14.8k
  }                                                                           \
dwg_setup_DIMENSION_ORDINATE
Line
Count
Source
1721
13.3k
  {                                                                           \
1722
13.3k
    Dwg_Object_Entity *_ent;                                                  \
1723
13.3k
    Dwg_Entity_##token *_obj;                                                 \
1724
13.3k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
13.3k
        && obj->parent->header.version < R_13b1)                              \
1726
13.3k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
13.3k
    else                                                                      \
1728
13.3k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
13.3k
    obj->parent->num_entities++;                                              \
1730
13.3k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
13.3k
    if (!(int)obj->fixedtype)                                                 \
1732
13.3k
      {                                                                       \
1733
13.3k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
13.3k
      }                                                                       \
1735
13.3k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
13.3k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
13.3k
    if (!obj->dxfname)                                                        \
1740
13.3k
      {                                                                       \
1741
13.3k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
13.3k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
13.3k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
13.3k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
13.3k
        else                                                                  \
1749
13.3k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
13.3k
      }                                                                       \
1751
13.3k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
13.3k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
13.3k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
13.3k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
13.3k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
13.3k
    _ent = obj->tio.entity                                                    \
1771
13.3k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
13.3k
    if (!_ent)                                                                \
1773
13.3k
      return DWG_ERR_OUTOFMEM;                                                \
1774
13.3k
    _ent->tio.token                                                           \
1775
13.3k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
13.3k
    if (!_ent->tio.token)                                                     \
1777
13.3k
      return DWG_ERR_OUTOFMEM;                                                \
1778
13.3k
    _ent->dwg = obj->parent;                                                  \
1779
13.3k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
13.3k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
13.3k
    return 0;                                                                 \
1782
13.3k
  }                                                                           \
dwg_setup_DIMENSION_LINEAR
Line
Count
Source
1721
20.9k
  {                                                                           \
1722
20.9k
    Dwg_Object_Entity *_ent;                                                  \
1723
20.9k
    Dwg_Entity_##token *_obj;                                                 \
1724
20.9k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
20.9k
        && obj->parent->header.version < R_13b1)                              \
1726
20.9k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
20.9k
    else                                                                      \
1728
20.9k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
20.9k
    obj->parent->num_entities++;                                              \
1730
20.9k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
20.9k
    if (!(int)obj->fixedtype)                                                 \
1732
20.9k
      {                                                                       \
1733
20.9k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
20.9k
      }                                                                       \
1735
20.9k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
20.9k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
20.9k
    if (!obj->dxfname)                                                        \
1740
20.9k
      {                                                                       \
1741
20.9k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
20.9k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
20.9k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
20.9k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
20.9k
        else                                                                  \
1749
20.9k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
20.9k
      }                                                                       \
1751
20.9k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
20.9k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
20.9k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
20.9k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
20.9k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
20.9k
    _ent = obj->tio.entity                                                    \
1771
20.9k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
20.9k
    if (!_ent)                                                                \
1773
20.9k
      return DWG_ERR_OUTOFMEM;                                                \
1774
20.9k
    _ent->tio.token                                                           \
1775
20.9k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
20.9k
    if (!_ent->tio.token)                                                     \
1777
20.9k
      return DWG_ERR_OUTOFMEM;                                                \
1778
20.9k
    _ent->dwg = obj->parent;                                                  \
1779
20.9k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
20.9k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
20.9k
    return 0;                                                                 \
1782
20.9k
  }                                                                           \
dwg_setup_DIMENSION_ALIGNED
Line
Count
Source
1721
3.33k
  {                                                                           \
1722
3.33k
    Dwg_Object_Entity *_ent;                                                  \
1723
3.33k
    Dwg_Entity_##token *_obj;                                                 \
1724
3.33k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
3.33k
        && obj->parent->header.version < R_13b1)                              \
1726
3.33k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
3.33k
    else                                                                      \
1728
3.33k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
3.33k
    obj->parent->num_entities++;                                              \
1730
3.33k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
3.33k
    if (!(int)obj->fixedtype)                                                 \
1732
3.33k
      {                                                                       \
1733
3.33k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
3.33k
      }                                                                       \
1735
3.33k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
3.33k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
3.33k
    if (!obj->dxfname)                                                        \
1740
3.33k
      {                                                                       \
1741
3.33k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
3.33k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
3.33k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
3.33k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
3.33k
        else                                                                  \
1749
3.33k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
3.33k
      }                                                                       \
1751
3.33k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
3.33k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
3.33k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
3.33k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
3.33k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
3.33k
    _ent = obj->tio.entity                                                    \
1771
3.33k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
3.33k
    if (!_ent)                                                                \
1773
3.33k
      return DWG_ERR_OUTOFMEM;                                                \
1774
3.33k
    _ent->tio.token                                                           \
1775
3.33k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
3.33k
    if (!_ent->tio.token)                                                     \
1777
3.33k
      return DWG_ERR_OUTOFMEM;                                                \
1778
3.33k
    _ent->dwg = obj->parent;                                                  \
1779
3.33k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
3.33k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
3.33k
    return 0;                                                                 \
1782
3.33k
  }                                                                           \
dwg_setup_DIMENSION_ANG3PT
Line
Count
Source
1721
4.73k
  {                                                                           \
1722
4.73k
    Dwg_Object_Entity *_ent;                                                  \
1723
4.73k
    Dwg_Entity_##token *_obj;                                                 \
1724
4.73k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
4.73k
        && obj->parent->header.version < R_13b1)                              \
1726
4.73k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
4.73k
    else                                                                      \
1728
4.73k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
4.73k
    obj->parent->num_entities++;                                              \
1730
4.73k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
4.73k
    if (!(int)obj->fixedtype)                                                 \
1732
4.73k
      {                                                                       \
1733
4.73k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
4.73k
      }                                                                       \
1735
4.73k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
4.73k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
4.73k
    if (!obj->dxfname)                                                        \
1740
4.73k
      {                                                                       \
1741
4.73k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
4.73k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
4.73k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
4.73k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
4.73k
        else                                                                  \
1749
4.73k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
4.73k
      }                                                                       \
1751
4.73k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
4.73k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
4.73k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
4.73k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
4.73k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
4.73k
    _ent = obj->tio.entity                                                    \
1771
4.73k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
4.73k
    if (!_ent)                                                                \
1773
4.73k
      return DWG_ERR_OUTOFMEM;                                                \
1774
4.73k
    _ent->tio.token                                                           \
1775
4.73k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
4.73k
    if (!_ent->tio.token)                                                     \
1777
4.73k
      return DWG_ERR_OUTOFMEM;                                                \
1778
4.73k
    _ent->dwg = obj->parent;                                                  \
1779
4.73k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
4.73k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
4.73k
    return 0;                                                                 \
1782
4.73k
  }                                                                           \
dwg_setup_DIMENSION_ANG2LN
Line
Count
Source
1721
98.4k
  {                                                                           \
1722
98.4k
    Dwg_Object_Entity *_ent;                                                  \
1723
98.4k
    Dwg_Entity_##token *_obj;                                                 \
1724
98.4k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
98.4k
        && obj->parent->header.version < R_13b1)                              \
1726
98.4k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
98.4k
    else                                                                      \
1728
98.4k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
98.4k
    obj->parent->num_entities++;                                              \
1730
98.4k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
98.4k
    if (!(int)obj->fixedtype)                                                 \
1732
98.4k
      {                                                                       \
1733
98.4k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
98.4k
      }                                                                       \
1735
98.4k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
98.4k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
98.4k
    if (!obj->dxfname)                                                        \
1740
98.4k
      {                                                                       \
1741
98.4k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
98.4k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
98.4k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
98.4k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
98.4k
        else                                                                  \
1749
98.4k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
98.4k
      }                                                                       \
1751
98.4k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
98.4k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
98.4k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
98.4k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
98.4k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
98.4k
    _ent = obj->tio.entity                                                    \
1771
98.4k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
98.4k
    if (!_ent)                                                                \
1773
98.4k
      return DWG_ERR_OUTOFMEM;                                                \
1774
98.4k
    _ent->tio.token                                                           \
1775
98.4k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
98.4k
    if (!_ent->tio.token)                                                     \
1777
98.4k
      return DWG_ERR_OUTOFMEM;                                                \
1778
98.4k
    _ent->dwg = obj->parent;                                                  \
1779
98.4k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
98.4k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
98.4k
    return 0;                                                                 \
1782
98.4k
  }                                                                           \
dwg_setup_DIMENSION_RADIUS
Line
Count
Source
1721
2.66k
  {                                                                           \
1722
2.66k
    Dwg_Object_Entity *_ent;                                                  \
1723
2.66k
    Dwg_Entity_##token *_obj;                                                 \
1724
2.66k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
2.66k
        && obj->parent->header.version < R_13b1)                              \
1726
2.66k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
2.66k
    else                                                                      \
1728
2.66k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
2.66k
    obj->parent->num_entities++;                                              \
1730
2.66k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
2.66k
    if (!(int)obj->fixedtype)                                                 \
1732
2.66k
      {                                                                       \
1733
2.66k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
2.66k
      }                                                                       \
1735
2.66k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
2.66k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
2.66k
    if (!obj->dxfname)                                                        \
1740
2.66k
      {                                                                       \
1741
2.66k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
2.66k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
2.66k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
2.66k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
2.66k
        else                                                                  \
1749
2.66k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
2.66k
      }                                                                       \
1751
2.66k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
2.66k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
2.66k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
2.66k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
2.66k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
2.66k
    _ent = obj->tio.entity                                                    \
1771
2.66k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
2.66k
    if (!_ent)                                                                \
1773
2.66k
      return DWG_ERR_OUTOFMEM;                                                \
1774
2.66k
    _ent->tio.token                                                           \
1775
2.66k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
2.66k
    if (!_ent->tio.token)                                                     \
1777
2.66k
      return DWG_ERR_OUTOFMEM;                                                \
1778
2.66k
    _ent->dwg = obj->parent;                                                  \
1779
2.66k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
2.66k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
2.66k
    return 0;                                                                 \
1782
2.66k
  }                                                                           \
dwg_setup_DIMENSION_DIAMETER
Line
Count
Source
1721
1.64k
  {                                                                           \
1722
1.64k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.64k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.64k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.64k
        && obj->parent->header.version < R_13b1)                              \
1726
1.64k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.64k
    else                                                                      \
1728
1.64k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.64k
    obj->parent->num_entities++;                                              \
1730
1.64k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.64k
    if (!(int)obj->fixedtype)                                                 \
1732
1.64k
      {                                                                       \
1733
1.64k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.64k
      }                                                                       \
1735
1.64k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.64k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.64k
    if (!obj->dxfname)                                                        \
1740
1.64k
      {                                                                       \
1741
1.64k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.64k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.64k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
1.64k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
1.64k
        else                                                                  \
1749
1.64k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.64k
      }                                                                       \
1751
1.64k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.64k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.64k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.64k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.64k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.64k
    _ent = obj->tio.entity                                                    \
1771
1.64k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.64k
    if (!_ent)                                                                \
1773
1.64k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.64k
    _ent->tio.token                                                           \
1775
1.64k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.64k
    if (!_ent->tio.token)                                                     \
1777
1.64k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.64k
    _ent->dwg = obj->parent;                                                  \
1779
1.64k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.64k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.64k
    return 0;                                                                 \
1782
1.64k
  }                                                                           \
Unexecuted instantiation: dwg_setup_LARGE_RADIAL_DIMENSION
dwg_setup_POINT
Line
Count
Source
1721
5.93k
  {                                                                           \
1722
5.93k
    Dwg_Object_Entity *_ent;                                                  \
1723
5.93k
    Dwg_Entity_##token *_obj;                                                 \
1724
5.93k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
5.93k
        && obj->parent->header.version < R_13b1)                              \
1726
5.93k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
5.93k
    else                                                                      \
1728
5.93k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
5.93k
    obj->parent->num_entities++;                                              \
1730
5.93k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
5.93k
    if (!(int)obj->fixedtype)                                                 \
1732
5.93k
      {                                                                       \
1733
5.93k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
5.93k
      }                                                                       \
1735
5.93k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
5.93k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
5.93k
    if (!obj->dxfname)                                                        \
1740
5.93k
      {                                                                       \
1741
5.93k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
5.93k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
5.93k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
5.93k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
5.93k
        else                                                                  \
1749
5.93k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
5.93k
      }                                                                       \
1751
5.93k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
5.93k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
5.93k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
5.93k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
5.93k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
5.93k
    _ent = obj->tio.entity                                                    \
1771
5.93k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
5.93k
    if (!_ent)                                                                \
1773
5.93k
      return DWG_ERR_OUTOFMEM;                                                \
1774
5.93k
    _ent->tio.token                                                           \
1775
5.93k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
5.93k
    if (!_ent->tio.token)                                                     \
1777
5.93k
      return DWG_ERR_OUTOFMEM;                                                \
1778
5.93k
    _ent->dwg = obj->parent;                                                  \
1779
5.93k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
5.93k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
5.93k
    return 0;                                                                 \
1782
5.93k
  }                                                                           \
dwg_setup__3DFACE
Line
Count
Source
1721
14.3k
  {                                                                           \
1722
14.3k
    Dwg_Object_Entity *_ent;                                                  \
1723
14.3k
    Dwg_Entity_##token *_obj;                                                 \
1724
14.3k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
14.3k
        && obj->parent->header.version < R_13b1)                              \
1726
14.3k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
14.3k
    else                                                                      \
1728
14.3k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
14.3k
    obj->parent->num_entities++;                                              \
1730
14.3k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
14.3k
    if (!(int)obj->fixedtype)                                                 \
1732
14.3k
      {                                                                       \
1733
14.3k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
14.3k
      }                                                                       \
1735
14.3k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
14.3k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
14.3k
    if (!obj->dxfname)                                                        \
1740
14.3k
      {                                                                       \
1741
14.3k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
14.3k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
14.3k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
0
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
0
        else                                                                  \
1749
0
          obj->name = obj->dxfname = (char *)#token;                          \
1750
14.3k
      }                                                                       \
1751
14.3k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
14.3k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
14.3k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
14.3k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
14.3k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
14.3k
    _ent = obj->tio.entity                                                    \
1771
14.3k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
14.3k
    if (!_ent)                                                                \
1773
14.3k
      return DWG_ERR_OUTOFMEM;                                                \
1774
14.3k
    _ent->tio.token                                                           \
1775
14.3k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
14.3k
    if (!_ent->tio.token)                                                     \
1777
14.3k
      return DWG_ERR_OUTOFMEM;                                                \
1778
14.3k
    _ent->dwg = obj->parent;                                                  \
1779
14.3k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
14.3k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
14.3k
    return 0;                                                                 \
1782
14.3k
  }                                                                           \
dwg_setup_POLYLINE_PFACE
Line
Count
Source
1721
9.33k
  {                                                                           \
1722
9.33k
    Dwg_Object_Entity *_ent;                                                  \
1723
9.33k
    Dwg_Entity_##token *_obj;                                                 \
1724
9.33k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
9.33k
        && obj->parent->header.version < R_13b1)                              \
1726
9.33k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
9.33k
    else                                                                      \
1728
9.33k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
9.33k
    obj->parent->num_entities++;                                              \
1730
9.33k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
9.33k
    if (!(int)obj->fixedtype)                                                 \
1732
9.33k
      {                                                                       \
1733
9.33k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
9.33k
      }                                                                       \
1735
9.33k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
9.33k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
9.33k
    if (!obj->dxfname)                                                        \
1740
9.33k
      {                                                                       \
1741
9.33k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
9.33k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
9.33k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
9.33k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
9.33k
        else                                                                  \
1749
9.33k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
9.33k
      }                                                                       \
1751
9.33k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
9.33k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
9.33k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
9.33k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
9.33k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
9.33k
    _ent = obj->tio.entity                                                    \
1771
9.33k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
9.33k
    if (!_ent)                                                                \
1773
9.33k
      return DWG_ERR_OUTOFMEM;                                                \
1774
9.33k
    _ent->tio.token                                                           \
1775
9.33k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
9.33k
    if (!_ent->tio.token)                                                     \
1777
9.33k
      return DWG_ERR_OUTOFMEM;                                                \
1778
9.33k
    _ent->dwg = obj->parent;                                                  \
1779
9.33k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
9.33k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
9.33k
    return 0;                                                                 \
1782
9.33k
  }                                                                           \
dwg_setup_POLYLINE_MESH
Line
Count
Source
1721
5.02k
  {                                                                           \
1722
5.02k
    Dwg_Object_Entity *_ent;                                                  \
1723
5.02k
    Dwg_Entity_##token *_obj;                                                 \
1724
5.02k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
5.02k
        && obj->parent->header.version < R_13b1)                              \
1726
5.02k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
5.02k
    else                                                                      \
1728
5.02k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
5.02k
    obj->parent->num_entities++;                                              \
1730
5.02k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
5.02k
    if (!(int)obj->fixedtype)                                                 \
1732
5.02k
      {                                                                       \
1733
5.02k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
5.02k
      }                                                                       \
1735
5.02k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
5.02k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
5.02k
    if (!obj->dxfname)                                                        \
1740
5.02k
      {                                                                       \
1741
5.02k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
5.02k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
5.02k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
5.02k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
5.02k
        else                                                                  \
1749
5.02k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
5.02k
      }                                                                       \
1751
5.02k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
5.02k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
5.02k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
5.02k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
5.02k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
5.02k
    _ent = obj->tio.entity                                                    \
1771
5.02k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
5.02k
    if (!_ent)                                                                \
1773
5.02k
      return DWG_ERR_OUTOFMEM;                                                \
1774
5.02k
    _ent->tio.token                                                           \
1775
5.02k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
5.02k
    if (!_ent->tio.token)                                                     \
1777
5.02k
      return DWG_ERR_OUTOFMEM;                                                \
1778
5.02k
    _ent->dwg = obj->parent;                                                  \
1779
5.02k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
5.02k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
5.02k
    return 0;                                                                 \
1782
5.02k
  }                                                                           \
dwg_setup_SOLID
Line
Count
Source
1721
7.55k
  {                                                                           \
1722
7.55k
    Dwg_Object_Entity *_ent;                                                  \
1723
7.55k
    Dwg_Entity_##token *_obj;                                                 \
1724
7.55k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
7.55k
        && obj->parent->header.version < R_13b1)                              \
1726
7.55k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
7.55k
    else                                                                      \
1728
7.55k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
7.55k
    obj->parent->num_entities++;                                              \
1730
7.55k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
7.55k
    if (!(int)obj->fixedtype)                                                 \
1732
7.55k
      {                                                                       \
1733
7.55k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
7.55k
      }                                                                       \
1735
7.55k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
7.55k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
7.55k
    if (!obj->dxfname)                                                        \
1740
7.55k
      {                                                                       \
1741
7.55k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
7.55k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
7.55k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
7.55k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
7.55k
        else                                                                  \
1749
7.55k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
7.55k
      }                                                                       \
1751
7.55k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
7.55k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
7.55k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
7.55k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
7.55k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
7.55k
    _ent = obj->tio.entity                                                    \
1771
7.55k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
7.55k
    if (!_ent)                                                                \
1773
7.55k
      return DWG_ERR_OUTOFMEM;                                                \
1774
7.55k
    _ent->tio.token                                                           \
1775
7.55k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
7.55k
    if (!_ent->tio.token)                                                     \
1777
7.55k
      return DWG_ERR_OUTOFMEM;                                                \
1778
7.55k
    _ent->dwg = obj->parent;                                                  \
1779
7.55k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
7.55k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
7.55k
    return 0;                                                                 \
1782
7.55k
  }                                                                           \
dwg_setup_TRACE
Line
Count
Source
1721
14.5k
  {                                                                           \
1722
14.5k
    Dwg_Object_Entity *_ent;                                                  \
1723
14.5k
    Dwg_Entity_##token *_obj;                                                 \
1724
14.5k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
14.5k
        && obj->parent->header.version < R_13b1)                              \
1726
14.5k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
14.5k
    else                                                                      \
1728
14.5k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
14.5k
    obj->parent->num_entities++;                                              \
1730
14.5k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
14.5k
    if (!(int)obj->fixedtype)                                                 \
1732
14.5k
      {                                                                       \
1733
14.5k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
14.5k
      }                                                                       \
1735
14.5k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
14.5k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
14.5k
    if (!obj->dxfname)                                                        \
1740
14.5k
      {                                                                       \
1741
14.5k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
14.5k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
14.5k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
14.5k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
14.5k
        else                                                                  \
1749
14.5k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
14.5k
      }                                                                       \
1751
14.5k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
14.5k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
14.5k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
14.5k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
14.5k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
14.5k
    _ent = obj->tio.entity                                                    \
1771
14.5k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
14.5k
    if (!_ent)                                                                \
1773
14.5k
      return DWG_ERR_OUTOFMEM;                                                \
1774
14.5k
    _ent->tio.token                                                           \
1775
14.5k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
14.5k
    if (!_ent->tio.token)                                                     \
1777
14.5k
      return DWG_ERR_OUTOFMEM;                                                \
1778
14.5k
    _ent->dwg = obj->parent;                                                  \
1779
14.5k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
14.5k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
14.5k
    return 0;                                                                 \
1782
14.5k
  }                                                                           \
dwg_setup_SHAPE
Line
Count
Source
1721
4.17k
  {                                                                           \
1722
4.17k
    Dwg_Object_Entity *_ent;                                                  \
1723
4.17k
    Dwg_Entity_##token *_obj;                                                 \
1724
4.17k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
4.17k
        && obj->parent->header.version < R_13b1)                              \
1726
4.17k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
4.17k
    else                                                                      \
1728
4.17k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
4.17k
    obj->parent->num_entities++;                                              \
1730
4.17k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
4.17k
    if (!(int)obj->fixedtype)                                                 \
1732
4.17k
      {                                                                       \
1733
4.17k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
4.17k
      }                                                                       \
1735
4.17k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
4.17k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
4.17k
    if (!obj->dxfname)                                                        \
1740
4.17k
      {                                                                       \
1741
4.17k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
4.17k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
4.17k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
4.17k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
4.17k
        else                                                                  \
1749
4.17k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
4.17k
      }                                                                       \
1751
4.17k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
4.17k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
4.17k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
4.17k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
4.17k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
4.17k
    _ent = obj->tio.entity                                                    \
1771
4.17k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
4.17k
    if (!_ent)                                                                \
1773
4.17k
      return DWG_ERR_OUTOFMEM;                                                \
1774
4.17k
    _ent->tio.token                                                           \
1775
4.17k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
4.17k
    if (!_ent->tio.token)                                                     \
1777
4.17k
      return DWG_ERR_OUTOFMEM;                                                \
1778
4.17k
    _ent->dwg = obj->parent;                                                  \
1779
4.17k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
4.17k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
4.17k
    return 0;                                                                 \
1782
4.17k
  }                                                                           \
dwg_setup_VIEWPORT
Line
Count
Source
1721
3.22k
  {                                                                           \
1722
3.22k
    Dwg_Object_Entity *_ent;                                                  \
1723
3.22k
    Dwg_Entity_##token *_obj;                                                 \
1724
3.22k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
3.22k
        && obj->parent->header.version < R_13b1)                              \
1726
3.22k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
3.22k
    else                                                                      \
1728
3.22k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
3.22k
    obj->parent->num_entities++;                                              \
1730
3.22k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
3.22k
    if (!(int)obj->fixedtype)                                                 \
1732
3.22k
      {                                                                       \
1733
3.22k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
3.22k
      }                                                                       \
1735
3.22k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
3.22k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
3.22k
    if (!obj->dxfname)                                                        \
1740
3.22k
      {                                                                       \
1741
3.22k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
3.22k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
3.22k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
3.22k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
3.22k
        else                                                                  \
1749
3.22k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
3.22k
      }                                                                       \
1751
3.22k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
3.22k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
3.22k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
3.22k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
3.22k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
3.22k
    _ent = obj->tio.entity                                                    \
1771
3.22k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
3.22k
    if (!_ent)                                                                \
1773
3.22k
      return DWG_ERR_OUTOFMEM;                                                \
1774
3.22k
    _ent->tio.token                                                           \
1775
3.22k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
3.22k
    if (!_ent->tio.token)                                                     \
1777
3.22k
      return DWG_ERR_OUTOFMEM;                                                \
1778
3.22k
    _ent->dwg = obj->parent;                                                  \
1779
3.22k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
3.22k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
3.22k
    return 0;                                                                 \
1782
3.22k
  }                                                                           \
dwg_setup_ELLIPSE
Line
Count
Source
1721
649
  {                                                                           \
1722
649
    Dwg_Object_Entity *_ent;                                                  \
1723
649
    Dwg_Entity_##token *_obj;                                                 \
1724
649
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
649
        && obj->parent->header.version < R_13b1)                              \
1726
649
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
649
    else                                                                      \
1728
649
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
649
    obj->parent->num_entities++;                                              \
1730
649
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
649
    if (!(int)obj->fixedtype)                                                 \
1732
649
      {                                                                       \
1733
649
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
649
      }                                                                       \
1735
649
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
649
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
649
    if (!obj->dxfname)                                                        \
1740
649
      {                                                                       \
1741
649
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
649
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
649
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
649
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
649
        else                                                                  \
1749
649
          obj->name = obj->dxfname = (char *)#token;                          \
1750
649
      }                                                                       \
1751
649
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
649
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
649
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
649
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
649
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
649
    _ent = obj->tio.entity                                                    \
1771
649
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
649
    if (!_ent)                                                                \
1773
649
      return DWG_ERR_OUTOFMEM;                                                \
1774
649
    _ent->tio.token                                                           \
1775
649
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
649
    if (!_ent->tio.token)                                                     \
1777
649
      return DWG_ERR_OUTOFMEM;                                                \
1778
649
    _ent->dwg = obj->parent;                                                  \
1779
649
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
649
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
649
    return 0;                                                                 \
1782
649
  }                                                                           \
dwg_setup_SPLINE
Line
Count
Source
1721
7.22k
  {                                                                           \
1722
7.22k
    Dwg_Object_Entity *_ent;                                                  \
1723
7.22k
    Dwg_Entity_##token *_obj;                                                 \
1724
7.22k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
7.22k
        && obj->parent->header.version < R_13b1)                              \
1726
7.22k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
7.22k
    else                                                                      \
1728
7.22k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
7.22k
    obj->parent->num_entities++;                                              \
1730
7.22k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
7.22k
    if (!(int)obj->fixedtype)                                                 \
1732
7.22k
      {                                                                       \
1733
7.22k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
7.22k
      }                                                                       \
1735
7.22k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
7.22k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
7.22k
    if (!obj->dxfname)                                                        \
1740
7.22k
      {                                                                       \
1741
7.22k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
7.22k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
7.22k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
7.22k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
7.22k
        else                                                                  \
1749
7.22k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
7.22k
      }                                                                       \
1751
7.22k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
7.22k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
7.22k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
7.22k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
7.22k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
7.22k
    _ent = obj->tio.entity                                                    \
1771
7.22k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
7.22k
    if (!_ent)                                                                \
1773
7.22k
      return DWG_ERR_OUTOFMEM;                                                \
1774
7.22k
    _ent->tio.token                                                           \
1775
7.22k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
7.22k
    if (!_ent->tio.token)                                                     \
1777
7.22k
      return DWG_ERR_OUTOFMEM;                                                \
1778
7.22k
    _ent->dwg = obj->parent;                                                  \
1779
7.22k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
7.22k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
7.22k
    return 0;                                                                 \
1782
7.22k
  }                                                                           \
dwg_setup_REGION
Line
Count
Source
1721
12.2k
  {                                                                           \
1722
12.2k
    Dwg_Object_Entity *_ent;                                                  \
1723
12.2k
    Dwg_Entity_##token *_obj;                                                 \
1724
12.2k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
12.2k
        && obj->parent->header.version < R_13b1)                              \
1726
12.2k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
12.2k
    else                                                                      \
1728
12.2k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
12.2k
    obj->parent->num_entities++;                                              \
1730
12.2k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
12.2k
    if (!(int)obj->fixedtype)                                                 \
1732
12.2k
      {                                                                       \
1733
12.2k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
12.2k
      }                                                                       \
1735
12.2k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
12.2k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
12.2k
    if (!obj->dxfname)                                                        \
1740
12.2k
      {                                                                       \
1741
12.2k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
12.2k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
12.2k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
12.2k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
12.2k
        else                                                                  \
1749
12.2k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
12.2k
      }                                                                       \
1751
12.2k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
12.2k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
12.2k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
12.2k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
12.2k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
12.2k
    _ent = obj->tio.entity                                                    \
1771
12.2k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
12.2k
    if (!_ent)                                                                \
1773
12.2k
      return DWG_ERR_OUTOFMEM;                                                \
1774
12.2k
    _ent->tio.token                                                           \
1775
12.2k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
12.2k
    if (!_ent->tio.token)                                                     \
1777
12.2k
      return DWG_ERR_OUTOFMEM;                                                \
1778
12.2k
    _ent->dwg = obj->parent;                                                  \
1779
12.2k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
12.2k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
12.2k
    return 0;                                                                 \
1782
12.2k
  }                                                                           \
dwg_setup__3DSOLID
Line
Count
Source
1721
1.13k
  {                                                                           \
1722
1.13k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.13k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.13k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.13k
        && obj->parent->header.version < R_13b1)                              \
1726
1.13k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.13k
    else                                                                      \
1728
1.13k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.13k
    obj->parent->num_entities++;                                              \
1730
1.13k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.13k
    if (!(int)obj->fixedtype)                                                 \
1732
1.13k
      {                                                                       \
1733
1.13k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.13k
      }                                                                       \
1735
1.13k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.13k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.13k
    if (!obj->dxfname)                                                        \
1740
1.13k
      {                                                                       \
1741
1.13k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.13k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.13k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
0
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
0
        else                                                                  \
1749
0
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.13k
      }                                                                       \
1751
1.13k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.13k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.13k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.13k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.13k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.13k
    _ent = obj->tio.entity                                                    \
1771
1.13k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.13k
    if (!_ent)                                                                \
1773
1.13k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.13k
    _ent->tio.token                                                           \
1775
1.13k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.13k
    if (!_ent->tio.token)                                                     \
1777
1.13k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.13k
    _ent->dwg = obj->parent;                                                  \
1779
1.13k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.13k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.13k
    return 0;                                                                 \
1782
1.13k
  }                                                                           \
dwg_setup_BODY
Line
Count
Source
1721
1.96k
  {                                                                           \
1722
1.96k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.96k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.96k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.96k
        && obj->parent->header.version < R_13b1)                              \
1726
1.96k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.96k
    else                                                                      \
1728
1.96k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.96k
    obj->parent->num_entities++;                                              \
1730
1.96k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.96k
    if (!(int)obj->fixedtype)                                                 \
1732
1.96k
      {                                                                       \
1733
1.96k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.96k
      }                                                                       \
1735
1.96k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.96k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.96k
    if (!obj->dxfname)                                                        \
1740
1.96k
      {                                                                       \
1741
1.96k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.96k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.96k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
1.96k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
1.96k
        else                                                                  \
1749
1.96k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.96k
      }                                                                       \
1751
1.96k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.96k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.96k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.96k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.96k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.96k
    _ent = obj->tio.entity                                                    \
1771
1.96k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.96k
    if (!_ent)                                                                \
1773
1.96k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.96k
    _ent->tio.token                                                           \
1775
1.96k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.96k
    if (!_ent->tio.token)                                                     \
1777
1.96k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.96k
    _ent->dwg = obj->parent;                                                  \
1779
1.96k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.96k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.96k
    return 0;                                                                 \
1782
1.96k
  }                                                                           \
dwg_setup_RAY
Line
Count
Source
1721
2.93k
  {                                                                           \
1722
2.93k
    Dwg_Object_Entity *_ent;                                                  \
1723
2.93k
    Dwg_Entity_##token *_obj;                                                 \
1724
2.93k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
2.93k
        && obj->parent->header.version < R_13b1)                              \
1726
2.93k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
2.93k
    else                                                                      \
1728
2.93k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
2.93k
    obj->parent->num_entities++;                                              \
1730
2.93k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
2.93k
    if (!(int)obj->fixedtype)                                                 \
1732
2.93k
      {                                                                       \
1733
2.93k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
2.93k
      }                                                                       \
1735
2.93k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
2.93k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
2.93k
    if (!obj->dxfname)                                                        \
1740
2.93k
      {                                                                       \
1741
2.93k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
2.93k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
2.93k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
2.93k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
2.93k
        else                                                                  \
1749
2.93k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
2.93k
      }                                                                       \
1751
2.93k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
2.93k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
2.93k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
2.93k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
2.93k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
2.93k
    _ent = obj->tio.entity                                                    \
1771
2.93k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
2.93k
    if (!_ent)                                                                \
1773
2.93k
      return DWG_ERR_OUTOFMEM;                                                \
1774
2.93k
    _ent->tio.token                                                           \
1775
2.93k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
2.93k
    if (!_ent->tio.token)                                                     \
1777
2.93k
      return DWG_ERR_OUTOFMEM;                                                \
1778
2.93k
    _ent->dwg = obj->parent;                                                  \
1779
2.93k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
2.93k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
2.93k
    return 0;                                                                 \
1782
2.93k
  }                                                                           \
dwg_setup_XLINE
Line
Count
Source
1721
1.37k
  {                                                                           \
1722
1.37k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.37k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.37k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.37k
        && obj->parent->header.version < R_13b1)                              \
1726
1.37k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.37k
    else                                                                      \
1728
1.37k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.37k
    obj->parent->num_entities++;                                              \
1730
1.37k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.37k
    if (!(int)obj->fixedtype)                                                 \
1732
1.37k
      {                                                                       \
1733
1.37k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.37k
      }                                                                       \
1735
1.37k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.37k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.37k
    if (!obj->dxfname)                                                        \
1740
1.37k
      {                                                                       \
1741
1.37k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.37k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.37k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
1.37k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
1.37k
        else                                                                  \
1749
1.37k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.37k
      }                                                                       \
1751
1.37k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.37k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.37k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.37k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.37k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.37k
    _ent = obj->tio.entity                                                    \
1771
1.37k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.37k
    if (!_ent)                                                                \
1773
1.37k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.37k
    _ent->tio.token                                                           \
1775
1.37k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.37k
    if (!_ent->tio.token)                                                     \
1777
1.37k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.37k
    _ent->dwg = obj->parent;                                                  \
1779
1.37k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.37k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.37k
    return 0;                                                                 \
1782
1.37k
  }                                                                           \
dwg_setup_OLEFRAME
Line
Count
Source
1721
215
  {                                                                           \
1722
215
    Dwg_Object_Entity *_ent;                                                  \
1723
215
    Dwg_Entity_##token *_obj;                                                 \
1724
215
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
215
        && obj->parent->header.version < R_13b1)                              \
1726
215
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
215
    else                                                                      \
1728
215
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
215
    obj->parent->num_entities++;                                              \
1730
215
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
215
    if (!(int)obj->fixedtype)                                                 \
1732
215
      {                                                                       \
1733
215
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
215
      }                                                                       \
1735
215
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
215
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
215
    if (!obj->dxfname)                                                        \
1740
215
      {                                                                       \
1741
215
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
215
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
215
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
215
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
215
        else                                                                  \
1749
215
          obj->name = obj->dxfname = (char *)#token;                          \
1750
215
      }                                                                       \
1751
215
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
215
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
215
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
215
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
215
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
215
    _ent = obj->tio.entity                                                    \
1771
215
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
215
    if (!_ent)                                                                \
1773
215
      return DWG_ERR_OUTOFMEM;                                                \
1774
215
    _ent->tio.token                                                           \
1775
215
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
215
    if (!_ent->tio.token)                                                     \
1777
215
      return DWG_ERR_OUTOFMEM;                                                \
1778
215
    _ent->dwg = obj->parent;                                                  \
1779
215
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
215
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
215
    return 0;                                                                 \
1782
215
  }                                                                           \
dwg_setup_MTEXT
Line
Count
Source
1721
3.56k
  {                                                                           \
1722
3.56k
    Dwg_Object_Entity *_ent;                                                  \
1723
3.56k
    Dwg_Entity_##token *_obj;                                                 \
1724
3.56k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
3.56k
        && obj->parent->header.version < R_13b1)                              \
1726
3.56k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
3.56k
    else                                                                      \
1728
3.56k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
3.56k
    obj->parent->num_entities++;                                              \
1730
3.56k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
3.56k
    if (!(int)obj->fixedtype)                                                 \
1732
3.56k
      {                                                                       \
1733
3.56k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
3.56k
      }                                                                       \
1735
3.56k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
3.56k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
3.56k
    if (!obj->dxfname)                                                        \
1740
3.56k
      {                                                                       \
1741
3.56k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
3.56k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
3.56k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
3.56k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
3.56k
        else                                                                  \
1749
3.56k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
3.56k
      }                                                                       \
1751
3.56k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
3.56k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
3.56k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
3.56k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
3.56k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
3.56k
    _ent = obj->tio.entity                                                    \
1771
3.56k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
3.56k
    if (!_ent)                                                                \
1773
3.56k
      return DWG_ERR_OUTOFMEM;                                                \
1774
3.56k
    _ent->tio.token                                                           \
1775
3.56k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
3.56k
    if (!_ent->tio.token)                                                     \
1777
3.56k
      return DWG_ERR_OUTOFMEM;                                                \
1778
3.56k
    _ent->dwg = obj->parent;                                                  \
1779
3.56k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
3.56k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
3.56k
    return 0;                                                                 \
1782
3.56k
  }                                                                           \
dwg_setup_LEADER
Line
Count
Source
1721
4.95k
  {                                                                           \
1722
4.95k
    Dwg_Object_Entity *_ent;                                                  \
1723
4.95k
    Dwg_Entity_##token *_obj;                                                 \
1724
4.95k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
4.95k
        && obj->parent->header.version < R_13b1)                              \
1726
4.95k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
4.95k
    else                                                                      \
1728
4.95k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
4.95k
    obj->parent->num_entities++;                                              \
1730
4.95k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
4.95k
    if (!(int)obj->fixedtype)                                                 \
1732
4.95k
      {                                                                       \
1733
4.95k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
4.95k
      }                                                                       \
1735
4.95k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
4.95k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
4.95k
    if (!obj->dxfname)                                                        \
1740
4.95k
      {                                                                       \
1741
4.95k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
4.95k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
4.95k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
4.95k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
4.95k
        else                                                                  \
1749
4.95k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
4.95k
      }                                                                       \
1751
4.95k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
4.95k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
4.95k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
4.95k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
4.95k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
4.95k
    _ent = obj->tio.entity                                                    \
1771
4.95k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
4.95k
    if (!_ent)                                                                \
1773
4.95k
      return DWG_ERR_OUTOFMEM;                                                \
1774
4.95k
    _ent->tio.token                                                           \
1775
4.95k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
4.95k
    if (!_ent->tio.token)                                                     \
1777
4.95k
      return DWG_ERR_OUTOFMEM;                                                \
1778
4.95k
    _ent->dwg = obj->parent;                                                  \
1779
4.95k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
4.95k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
4.95k
    return 0;                                                                 \
1782
4.95k
  }                                                                           \
dwg_setup_TOLERANCE
Line
Count
Source
1721
374
  {                                                                           \
1722
374
    Dwg_Object_Entity *_ent;                                                  \
1723
374
    Dwg_Entity_##token *_obj;                                                 \
1724
374
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
374
        && obj->parent->header.version < R_13b1)                              \
1726
374
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
374
    else                                                                      \
1728
374
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
374
    obj->parent->num_entities++;                                              \
1730
374
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
374
    if (!(int)obj->fixedtype)                                                 \
1732
374
      {                                                                       \
1733
374
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
374
      }                                                                       \
1735
374
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
374
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
374
    if (!obj->dxfname)                                                        \
1740
374
      {                                                                       \
1741
374
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
374
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
374
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
374
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
374
        else                                                                  \
1749
374
          obj->name = obj->dxfname = (char *)#token;                          \
1750
374
      }                                                                       \
1751
374
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
374
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
374
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
374
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
374
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
374
    _ent = obj->tio.entity                                                    \
1771
374
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
374
    if (!_ent)                                                                \
1773
374
      return DWG_ERR_OUTOFMEM;                                                \
1774
374
    _ent->tio.token                                                           \
1775
374
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
374
    if (!_ent->tio.token)                                                     \
1777
374
      return DWG_ERR_OUTOFMEM;                                                \
1778
374
    _ent->dwg = obj->parent;                                                  \
1779
374
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
374
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
374
    return 0;                                                                 \
1782
374
  }                                                                           \
dwg_setup_MLINE
Line
Count
Source
1721
1.25k
  {                                                                           \
1722
1.25k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.25k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.25k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.25k
        && obj->parent->header.version < R_13b1)                              \
1726
1.25k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.25k
    else                                                                      \
1728
1.25k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.25k
    obj->parent->num_entities++;                                              \
1730
1.25k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.25k
    if (!(int)obj->fixedtype)                                                 \
1732
1.25k
      {                                                                       \
1733
1.25k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.25k
      }                                                                       \
1735
1.25k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.25k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.25k
    if (!obj->dxfname)                                                        \
1740
1.25k
      {                                                                       \
1741
1.25k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.25k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.25k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
1.25k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
1.25k
        else                                                                  \
1749
1.25k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.25k
      }                                                                       \
1751
1.25k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.25k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.25k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.25k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.25k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.25k
    _ent = obj->tio.entity                                                    \
1771
1.25k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.25k
    if (!_ent)                                                                \
1773
1.25k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.25k
    _ent->tio.token                                                           \
1775
1.25k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.25k
    if (!_ent->tio.token)                                                     \
1777
1.25k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.25k
    _ent->dwg = obj->parent;                                                  \
1779
1.25k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.25k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.25k
    return 0;                                                                 \
1782
1.25k
  }                                                                           \
dwg_setup_HATCH
Line
Count
Source
1721
1.05k
  {                                                                           \
1722
1.05k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.05k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.05k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.05k
        && obj->parent->header.version < R_13b1)                              \
1726
1.05k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.05k
    else                                                                      \
1728
1.05k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.05k
    obj->parent->num_entities++;                                              \
1730
1.05k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.05k
    if (!(int)obj->fixedtype)                                                 \
1732
1.05k
      {                                                                       \
1733
1.05k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.05k
      }                                                                       \
1735
1.05k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.05k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.05k
    if (!obj->dxfname)                                                        \
1740
1.05k
      {                                                                       \
1741
1.05k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.05k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.05k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
1.05k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
1.05k
        else                                                                  \
1749
1.05k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.05k
      }                                                                       \
1751
1.05k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.05k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.05k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.05k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.05k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.05k
    _ent = obj->tio.entity                                                    \
1771
1.05k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.05k
    if (!_ent)                                                                \
1773
1.05k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.05k
    _ent->tio.token                                                           \
1775
1.05k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.05k
    if (!_ent->tio.token)                                                     \
1777
1.05k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.05k
    _ent->dwg = obj->parent;                                                  \
1779
1.05k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.05k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.05k
    return 0;                                                                 \
1782
1.05k
  }                                                                           \
Unexecuted instantiation: dwg_setup_IMAGE
dwg_setup_LWPOLYLINE
Line
Count
Source
1721
8.46k
  {                                                                           \
1722
8.46k
    Dwg_Object_Entity *_ent;                                                  \
1723
8.46k
    Dwg_Entity_##token *_obj;                                                 \
1724
8.46k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
8.46k
        && obj->parent->header.version < R_13b1)                              \
1726
8.46k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
8.46k
    else                                                                      \
1728
8.46k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
8.46k
    obj->parent->num_entities++;                                              \
1730
8.46k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
8.46k
    if (!(int)obj->fixedtype)                                                 \
1732
8.46k
      {                                                                       \
1733
8.46k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
8.46k
      }                                                                       \
1735
8.46k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
8.46k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
8.46k
    if (!obj->dxfname)                                                        \
1740
8.46k
      {                                                                       \
1741
8.46k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
8.46k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
8.46k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
8.46k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
8.46k
        else                                                                  \
1749
8.46k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
8.46k
      }                                                                       \
1751
8.46k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
8.46k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
8.46k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
8.46k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
8.46k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
8.46k
    _ent = obj->tio.entity                                                    \
1771
8.46k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
8.46k
    if (!_ent)                                                                \
1773
8.46k
      return DWG_ERR_OUTOFMEM;                                                \
1774
8.46k
    _ent->tio.token                                                           \
1775
8.46k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
8.46k
    if (!_ent->tio.token)                                                     \
1777
8.46k
      return DWG_ERR_OUTOFMEM;                                                \
1778
8.46k
    _ent->dwg = obj->parent;                                                  \
1779
8.46k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
8.46k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
8.46k
    return 0;                                                                 \
1782
8.46k
  }                                                                           \
dwg_setup_OLE2FRAME
Line
Count
Source
1721
1.01k
  {                                                                           \
1722
1.01k
    Dwg_Object_Entity *_ent;                                                  \
1723
1.01k
    Dwg_Entity_##token *_obj;                                                 \
1724
1.01k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
1.01k
        && obj->parent->header.version < R_13b1)                              \
1726
1.01k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
1.01k
    else                                                                      \
1728
1.01k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
1.01k
    obj->parent->num_entities++;                                              \
1730
1.01k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
1.01k
    if (!(int)obj->fixedtype)                                                 \
1732
1.01k
      {                                                                       \
1733
1.01k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
1.01k
      }                                                                       \
1735
1.01k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
1.01k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
1.01k
    if (!obj->dxfname)                                                        \
1740
1.01k
      {                                                                       \
1741
1.01k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
1.01k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
1.01k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
1.01k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
1.01k
        else                                                                  \
1749
1.01k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
1.01k
      }                                                                       \
1751
1.01k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
1.01k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
1.01k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
1.01k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
1.01k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
1.01k
    _ent = obj->tio.entity                                                    \
1771
1.01k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
1.01k
    if (!_ent)                                                                \
1773
1.01k
      return DWG_ERR_OUTOFMEM;                                                \
1774
1.01k
    _ent->tio.token                                                           \
1775
1.01k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
1.01k
    if (!_ent->tio.token)                                                     \
1777
1.01k
      return DWG_ERR_OUTOFMEM;                                                \
1778
1.01k
    _ent->dwg = obj->parent;                                                  \
1779
1.01k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
1.01k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
1.01k
    return 0;                                                                 \
1782
1.01k
  }                                                                           \
dwg_setup_PROXY_ENTITY
Line
Count
Source
1721
184
  {                                                                           \
1722
184
    Dwg_Object_Entity *_ent;                                                  \
1723
184
    Dwg_Entity_##token *_obj;                                                 \
1724
184
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
184
        && obj->parent->header.version < R_13b1)                              \
1726
184
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
184
    else                                                                      \
1728
184
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
184
    obj->parent->num_entities++;                                              \
1730
184
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
184
    if (!(int)obj->fixedtype)                                                 \
1732
184
      {                                                                       \
1733
184
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
184
      }                                                                       \
1735
184
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
184
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
184
    if (!obj->dxfname)                                                        \
1740
184
      {                                                                       \
1741
184
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
184
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
184
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
184
          {                                                                   \
1745
184
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
184
            obj->name = (char *)#token;                                       \
1747
184
          }                                                                   \
1748
184
        else                                                                  \
1749
184
          obj->name = obj->dxfname = (char *)#token;                          \
1750
184
      }                                                                       \
1751
184
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
184
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
184
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
184
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
184
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
184
    _ent = obj->tio.entity                                                    \
1771
184
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
184
    if (!_ent)                                                                \
1773
184
      return DWG_ERR_OUTOFMEM;                                                \
1774
184
    _ent->tio.token                                                           \
1775
184
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
184
    if (!_ent->tio.token)                                                     \
1777
184
      return DWG_ERR_OUTOFMEM;                                                \
1778
184
    _ent->dwg = obj->parent;                                                  \
1779
184
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
184
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
184
    return 0;                                                                 \
1782
184
  }                                                                           \
Unexecuted instantiation: dwg_setup_MULTILEADER
Unexecuted instantiation: dwg_setup_WIPEOUT
Unexecuted instantiation: dwg_setup_PDFUNDERLAY
Unexecuted instantiation: dwg_setup_DGNUNDERLAY
Unexecuted instantiation: dwg_setup_DWFUNDERLAY
Unexecuted instantiation: dwg_setup_CAMERA
Unexecuted instantiation: dwg_setup_SECTIONOBJECT
Unexecuted instantiation: dwg_setup_UNKNOWN_ENT
Unexecuted instantiation: dwg_setup_LIGHT
Unexecuted instantiation: dwg_setup_HELIX
Unexecuted instantiation: dwg_setup_MESH
Unexecuted instantiation: dwg_setup_ARC_DIMENSION
Unexecuted instantiation: dwg_setup_PLANESURFACE
Unexecuted instantiation: dwg_setup_LAYOUTPRINTCONFIG
Unexecuted instantiation: dwg_setup_POINTCLOUD
Unexecuted instantiation: dwg_setup_POINTCLOUDEX
dwg_setup_REPEAT
Line
Count
Source
1721
18.7k
  {                                                                           \
1722
18.7k
    Dwg_Object_Entity *_ent;                                                  \
1723
18.7k
    Dwg_Entity_##token *_obj;                                                 \
1724
18.7k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
18.7k
        && obj->parent->header.version < R_13b1)                              \
1726
18.7k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
18.7k
    else                                                                      \
1728
18.7k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
18.7k
    obj->parent->num_entities++;                                              \
1730
18.7k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
18.7k
    if (!(int)obj->fixedtype)                                                 \
1732
18.7k
      {                                                                       \
1733
18.7k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
18.7k
      }                                                                       \
1735
18.7k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
18.7k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
18.7k
    if (!obj->dxfname)                                                        \
1740
18.7k
      {                                                                       \
1741
18.7k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
18.7k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
18.7k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
18.7k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
18.7k
        else                                                                  \
1749
18.7k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
18.7k
      }                                                                       \
1751
18.7k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
18.7k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
18.7k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
18.7k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
18.7k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
18.7k
    _ent = obj->tio.entity                                                    \
1771
18.7k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
18.7k
    if (!_ent)                                                                \
1773
18.7k
      return DWG_ERR_OUTOFMEM;                                                \
1774
18.7k
    _ent->tio.token                                                           \
1775
18.7k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
18.7k
    if (!_ent->tio.token)                                                     \
1777
18.7k
      return DWG_ERR_OUTOFMEM;                                                \
1778
18.7k
    _ent->dwg = obj->parent;                                                  \
1779
18.7k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
18.7k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
18.7k
    return 0;                                                                 \
1782
18.7k
  }                                                                           \
dwg_setup_ENDREP
Line
Count
Source
1721
3.08k
  {                                                                           \
1722
3.08k
    Dwg_Object_Entity *_ent;                                                  \
1723
3.08k
    Dwg_Entity_##token *_obj;                                                 \
1724
3.08k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
3.08k
        && obj->parent->header.version < R_13b1)                              \
1726
3.08k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
3.08k
    else                                                                      \
1728
3.08k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
3.08k
    obj->parent->num_entities++;                                              \
1730
3.08k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
3.08k
    if (!(int)obj->fixedtype)                                                 \
1732
3.08k
      {                                                                       \
1733
3.08k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
3.08k
      }                                                                       \
1735
3.08k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
3.08k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
3.08k
    if (!obj->dxfname)                                                        \
1740
3.08k
      {                                                                       \
1741
3.08k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
3.08k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
3.08k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
3.08k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
3.08k
        else                                                                  \
1749
3.08k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
3.08k
      }                                                                       \
1751
3.08k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
3.08k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
3.08k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
3.08k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
3.08k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
3.08k
    _ent = obj->tio.entity                                                    \
1771
3.08k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
3.08k
    if (!_ent)                                                                \
1773
3.08k
      return DWG_ERR_OUTOFMEM;                                                \
1774
3.08k
    _ent->tio.token                                                           \
1775
3.08k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
3.08k
    if (!_ent->tio.token)                                                     \
1777
3.08k
      return DWG_ERR_OUTOFMEM;                                                \
1778
3.08k
    _ent->dwg = obj->parent;                                                  \
1779
3.08k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
3.08k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
3.08k
    return 0;                                                                 \
1782
3.08k
  }                                                                           \
dwg_setup_LOAD
Line
Count
Source
1721
2.18k
  {                                                                           \
1722
2.18k
    Dwg_Object_Entity *_ent;                                                  \
1723
2.18k
    Dwg_Entity_##token *_obj;                                                 \
1724
2.18k
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
2.18k
        && obj->parent->header.version < R_13b1)                              \
1726
2.18k
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
2.18k
    else                                                                      \
1728
2.18k
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
2.18k
    obj->parent->num_entities++;                                              \
1730
2.18k
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
2.18k
    if (!(int)obj->fixedtype)                                                 \
1732
2.18k
      {                                                                       \
1733
2.18k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
2.18k
      }                                                                       \
1735
2.18k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
2.18k
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
2.18k
    if (!obj->dxfname)                                                        \
1740
2.18k
      {                                                                       \
1741
2.18k
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
2.18k
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
2.18k
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
2.18k
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
2.18k
        else                                                                  \
1749
2.18k
          obj->name = obj->dxfname = (char *)#token;                          \
1750
2.18k
      }                                                                       \
1751
2.18k
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
2.18k
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
2.18k
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
2.18k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
2.18k
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
2.18k
    _ent = obj->tio.entity                                                    \
1771
2.18k
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
2.18k
    if (!_ent)                                                                \
1773
2.18k
      return DWG_ERR_OUTOFMEM;                                                \
1774
2.18k
    _ent->tio.token                                                           \
1775
2.18k
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
2.18k
    if (!_ent->tio.token)                                                     \
1777
2.18k
      return DWG_ERR_OUTOFMEM;                                                \
1778
2.18k
    _ent->dwg = obj->parent;                                                  \
1779
2.18k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
2.18k
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
2.18k
    return 0;                                                                 \
1782
2.18k
  }                                                                           \
dwg_setup_JUMP
Line
Count
Source
1721
385
  {                                                                           \
1722
385
    Dwg_Object_Entity *_ent;                                                  \
1723
385
    Dwg_Entity_##token *_obj;                                                 \
1724
385
    if (strEQc (#token, "DIMENSION_ANG2LN")                                   \
1725
385
        && obj->parent->header.version < R_13b1)                              \
1726
385
      LOG_INFO ("Add entity DIMENSION [%d] ", obj->index);                    \
1727
385
    else                                                                      \
1728
385
      LOG_INFO ("Add entity " #token " [%d] ", obj->index);                   \
1729
385
    obj->parent->num_entities++;                                              \
1730
385
    obj->supertype = DWG_SUPERTYPE_ENTITY;                                    \
1731
385
    if (!(int)obj->fixedtype)                                                 \
1732
385
      {                                                                       \
1733
385
        obj->fixedtype = DWG_TYPE_##token;                                    \
1734
385
      }                                                                       \
1735
385
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1736
385
      {                                                                       \
1737
0
        obj->type = DWG_TYPE_##token;                                         \
1738
0
      }                                                                       \
1739
385
    if (!obj->dxfname)                                                        \
1740
385
      {                                                                       \
1741
385
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1742
385
          obj->name = obj->dxfname = (char *)&#token[1];                      \
1743
385
        else if (strEQc (#token, "PROXY_ENTITY"))                             \
1744
385
          {                                                                   \
1745
0
            obj->dxfname = (char *)"ACAD_PROXY_ENTITY";                       \
1746
0
            obj->name = (char *)#token;                                       \
1747
0
          }                                                                   \
1748
385
        else                                                                  \
1749
385
          obj->name = obj->dxfname = (char *)#token;                          \
1750
385
      }                                                                       \
1751
385
    else if (!obj->name)                                                      \
1752
0
      {                                                                       \
1753
0
        if (strlen (#token) > 3 && !memcmp (#token, "_3D", 3))                \
1754
0
          obj->name = (char *)&#token[1];                                     \
1755
0
        else                                                                  \
1756
0
          obj->name = (char *)#token;                                         \
1757
0
      }                                                                       \
1758
385
    if (strEQc (#token, "UNKNOWN_ENT"))                                       \
1759
385
      {                                                                       \
1760
0
        obj->name = (char *)#token;                                           \
1761
0
        obj->dxfname = (char *)#token;                                        \
1762
0
        obj->fixedtype = DWG_TYPE_UNKNOWN_ENT;                                \
1763
0
      }                                                                       \
1764
385
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1765
385
      {                                                                       \
1766
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1767
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1768
0
          obj->name = strdup (obj->name);                                     \
1769
0
      }                                                                       \
1770
385
    _ent = obj->tio.entity                                                    \
1771
385
        = (Dwg_Object_Entity *)calloc (1, sizeof (Dwg_Object_Entity));        \
1772
385
    if (!_ent)                                                                \
1773
385
      return DWG_ERR_OUTOFMEM;                                                \
1774
385
    _ent->tio.token                                                           \
1775
385
        = (Dwg_Entity_##token *)calloc (1, sizeof (Dwg_Entity_##token));      \
1776
385
    if (!_ent->tio.token)                                                     \
1777
385
      return DWG_ERR_OUTOFMEM;                                                \
1778
385
    _ent->dwg = obj->parent;                                                  \
1779
385
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1780
385
    _ent->tio.token->parent = obj->tio.entity;                                \
1781
385
    return 0;                                                                 \
1782
385
  }                                                                           \
1783
                                                                              \
1784
  static int dwg_decode_##token##_private (                                   \
1785
      Bit_Chain *dat, Bit_Chain *hdl_dat, Bit_Chain *str_dat,                 \
1786
      Dwg_Object *restrict obj); \
1787
                                                                              \
1788
      /** Call dwg_setup_##token and write the fields from the bitstream dat  \
1789
       * to the entity or object. */                                             \
1790
  DWG_DECODE_FUNC int dwg_decode_##token (Bit_Chain *restrict dat,            \
1791
                                          Dwg_Object *restrict obj)           \
1792
434k
  {                                                                           \
1793
434k
    int error = dwg_setup_##token (obj);                                      \
1794
434k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
434k
    if (error)                                                                \
1796
434k
      return error;                                                           \
1797
434k
    SINCE (R_2007a)                                                           \
1798
434k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
434k
    else                                                                      \
1804
434k
    {                                                                         \
1805
434k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
434k
    }                                                                         \
1807
434k
    return error;                                                             \
1808
434k
  }                                                                           \
decode.c:dwg_decode_TEXT
Line
Count
Source
1792
29.1k
  {                                                                           \
1793
29.1k
    int error = dwg_setup_##token (obj);                                      \
1794
29.1k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
29.1k
    if (error)                                                                \
1796
29.1k
      return error;                                                           \
1797
29.1k
    SINCE (R_2007a)                                                           \
1798
29.1k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
29.1k
    else                                                                      \
1804
29.1k
    {                                                                         \
1805
29.1k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
29.1k
    }                                                                         \
1807
29.1k
    return error;                                                             \
1808
29.1k
  }                                                                           \
decode.c:dwg_decode_ATTRIB
Line
Count
Source
1792
24.9k
  {                                                                           \
1793
24.9k
    int error = dwg_setup_##token (obj);                                      \
1794
24.9k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
24.9k
    if (error)                                                                \
1796
24.9k
      return error;                                                           \
1797
24.9k
    SINCE (R_2007a)                                                           \
1798
24.9k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
24.9k
    else                                                                      \
1804
24.9k
    {                                                                         \
1805
24.9k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
24.9k
    }                                                                         \
1807
24.9k
    return error;                                                             \
1808
24.9k
  }                                                                           \
decode.c:dwg_decode_ATTDEF
Line
Count
Source
1792
43.3k
  {                                                                           \
1793
43.3k
    int error = dwg_setup_##token (obj);                                      \
1794
43.3k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
43.3k
    if (error)                                                                \
1796
43.3k
      return error;                                                           \
1797
43.3k
    SINCE (R_2007a)                                                           \
1798
43.3k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
43.3k
    else                                                                      \
1804
43.3k
    {                                                                         \
1805
43.3k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
43.3k
    }                                                                         \
1807
43.3k
    return error;                                                             \
1808
43.3k
  }                                                                           \
decode.c:dwg_decode_BLOCK
Line
Count
Source
1792
11.4k
  {                                                                           \
1793
11.4k
    int error = dwg_setup_##token (obj);                                      \
1794
11.4k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
11.4k
    if (error)                                                                \
1796
11.4k
      return error;                                                           \
1797
11.4k
    SINCE (R_2007a)                                                           \
1798
11.4k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
11.4k
    else                                                                      \
1804
11.4k
    {                                                                         \
1805
11.4k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
11.4k
    }                                                                         \
1807
11.4k
    return error;                                                             \
1808
11.4k
  }                                                                           \
decode.c:dwg_decode_ENDBLK
Line
Count
Source
1792
8.71k
  {                                                                           \
1793
8.71k
    int error = dwg_setup_##token (obj);                                      \
1794
8.71k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
8.71k
    if (error)                                                                \
1796
8.71k
      return error;                                                           \
1797
8.71k
    SINCE (R_2007a)                                                           \
1798
8.71k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
8.71k
    else                                                                      \
1804
8.71k
    {                                                                         \
1805
8.71k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
8.71k
    }                                                                         \
1807
8.71k
    return error;                                                             \
1808
8.71k
  }                                                                           \
decode.c:dwg_decode_SEQEND
Line
Count
Source
1792
3.15k
  {                                                                           \
1793
3.15k
    int error = dwg_setup_##token (obj);                                      \
1794
3.15k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
3.15k
    if (error)                                                                \
1796
3.15k
      return error;                                                           \
1797
3.15k
    SINCE (R_2007a)                                                           \
1798
3.15k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
3.15k
    else                                                                      \
1804
3.15k
    {                                                                         \
1805
3.15k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
3.15k
    }                                                                         \
1807
3.15k
    return error;                                                             \
1808
3.15k
  }                                                                           \
decode.c:dwg_decode_INSERT
Line
Count
Source
1792
14.1k
  {                                                                           \
1793
14.1k
    int error = dwg_setup_##token (obj);                                      \
1794
14.1k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
14.1k
    if (error)                                                                \
1796
14.1k
      return error;                                                           \
1797
14.1k
    SINCE (R_2007a)                                                           \
1798
14.1k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
14.1k
    else                                                                      \
1804
14.1k
    {                                                                         \
1805
14.1k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
14.1k
    }                                                                         \
1807
14.1k
    return error;                                                             \
1808
14.1k
  }                                                                           \
decode.c:dwg_decode_MINSERT
Line
Count
Source
1792
6.32k
  {                                                                           \
1793
6.32k
    int error = dwg_setup_##token (obj);                                      \
1794
6.32k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
6.32k
    if (error)                                                                \
1796
6.32k
      return error;                                                           \
1797
6.32k
    SINCE (R_2007a)                                                           \
1798
6.32k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
6.32k
    else                                                                      \
1804
6.32k
    {                                                                         \
1805
6.32k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
6.32k
    }                                                                         \
1807
6.32k
    return error;                                                             \
1808
6.32k
  }                                                                           \
decode.c:dwg_decode_VERTEX_2D
Line
Count
Source
1792
8.54k
  {                                                                           \
1793
8.54k
    int error = dwg_setup_##token (obj);                                      \
1794
8.54k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
8.54k
    if (error)                                                                \
1796
8.54k
      return error;                                                           \
1797
8.54k
    SINCE (R_2007a)                                                           \
1798
8.54k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
8.54k
    else                                                                      \
1804
8.54k
    {                                                                         \
1805
8.54k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
8.54k
    }                                                                         \
1807
8.54k
    return error;                                                             \
1808
8.54k
  }                                                                           \
decode.c:dwg_decode_VERTEX_3D
Line
Count
Source
1792
4.48k
  {                                                                           \
1793
4.48k
    int error = dwg_setup_##token (obj);                                      \
1794
4.48k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
4.48k
    if (error)                                                                \
1796
4.48k
      return error;                                                           \
1797
4.48k
    SINCE (R_2007a)                                                           \
1798
4.48k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
4.48k
    else                                                                      \
1804
4.48k
    {                                                                         \
1805
4.48k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
4.48k
    }                                                                         \
1807
4.48k
    return error;                                                             \
1808
4.48k
  }                                                                           \
decode.c:dwg_decode_VERTEX_MESH
Line
Count
Source
1792
18.6k
  {                                                                           \
1793
18.6k
    int error = dwg_setup_##token (obj);                                      \
1794
18.6k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
18.6k
    if (error)                                                                \
1796
18.6k
      return error;                                                           \
1797
18.6k
    SINCE (R_2007a)                                                           \
1798
18.6k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
18.6k
    else                                                                      \
1804
18.6k
    {                                                                         \
1805
18.6k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
18.6k
    }                                                                         \
1807
18.6k
    return error;                                                             \
1808
18.6k
  }                                                                           \
decode.c:dwg_decode_VERTEX_PFACE
Line
Count
Source
1792
11.6k
  {                                                                           \
1793
11.6k
    int error = dwg_setup_##token (obj);                                      \
1794
11.6k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
11.6k
    if (error)                                                                \
1796
11.6k
      return error;                                                           \
1797
11.6k
    SINCE (R_2007a)                                                           \
1798
11.6k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
11.6k
    else                                                                      \
1804
11.6k
    {                                                                         \
1805
11.6k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
11.6k
    }                                                                         \
1807
11.6k
    return error;                                                             \
1808
11.6k
  }                                                                           \
decode.c:dwg_decode_VERTEX_PFACE_FACE
Line
Count
Source
1792
2.69k
  {                                                                           \
1793
2.69k
    int error = dwg_setup_##token (obj);                                      \
1794
2.69k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
2.69k
    if (error)                                                                \
1796
2.69k
      return error;                                                           \
1797
2.69k
    SINCE (R_2007a)                                                           \
1798
2.69k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
2.69k
    else                                                                      \
1804
2.69k
    {                                                                         \
1805
2.69k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
2.69k
    }                                                                         \
1807
2.69k
    return error;                                                             \
1808
2.69k
  }                                                                           \
decode.c:dwg_decode_POLYLINE_2D
Line
Count
Source
1792
7.91k
  {                                                                           \
1793
7.91k
    int error = dwg_setup_##token (obj);                                      \
1794
7.91k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
7.91k
    if (error)                                                                \
1796
7.91k
      return error;                                                           \
1797
7.91k
    SINCE (R_2007a)                                                           \
1798
7.91k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
7.91k
    else                                                                      \
1804
7.91k
    {                                                                         \
1805
7.91k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
7.91k
    }                                                                         \
1807
7.91k
    return error;                                                             \
1808
7.91k
  }                                                                           \
decode.c:dwg_decode_POLYLINE_3D
Line
Count
Source
1792
15.9k
  {                                                                           \
1793
15.9k
    int error = dwg_setup_##token (obj);                                      \
1794
15.9k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
15.9k
    if (error)                                                                \
1796
15.9k
      return error;                                                           \
1797
15.9k
    SINCE (R_2007a)                                                           \
1798
15.9k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
15.9k
    else                                                                      \
1804
15.9k
    {                                                                         \
1805
15.9k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
15.9k
    }                                                                         \
1807
15.9k
    return error;                                                             \
1808
15.9k
  }                                                                           \
decode.c:dwg_decode_ARC
Line
Count
Source
1792
14.4k
  {                                                                           \
1793
14.4k
    int error = dwg_setup_##token (obj);                                      \
1794
14.4k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
14.4k
    if (error)                                                                \
1796
14.4k
      return error;                                                           \
1797
14.4k
    SINCE (R_2007a)                                                           \
1798
14.4k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
14.4k
    else                                                                      \
1804
14.4k
    {                                                                         \
1805
14.4k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
14.4k
    }                                                                         \
1807
14.4k
    return error;                                                             \
1808
14.4k
  }                                                                           \
decode.c:dwg_decode_CIRCLE
Line
Count
Source
1792
4.19k
  {                                                                           \
1793
4.19k
    int error = dwg_setup_##token (obj);                                      \
1794
4.19k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
4.19k
    if (error)                                                                \
1796
4.19k
      return error;                                                           \
1797
4.19k
    SINCE (R_2007a)                                                           \
1798
4.19k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
4.19k
    else                                                                      \
1804
4.19k
    {                                                                         \
1805
4.19k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
4.19k
    }                                                                         \
1807
4.19k
    return error;                                                             \
1808
4.19k
  }                                                                           \
decode.c:dwg_decode_LINE
Line
Count
Source
1792
14.8k
  {                                                                           \
1793
14.8k
    int error = dwg_setup_##token (obj);                                      \
1794
14.8k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
14.8k
    if (error)                                                                \
1796
14.8k
      return error;                                                           \
1797
14.8k
    SINCE (R_2007a)                                                           \
1798
14.8k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
14.8k
    else                                                                      \
1804
14.8k
    {                                                                         \
1805
14.8k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
14.8k
    }                                                                         \
1807
14.8k
    return error;                                                             \
1808
14.8k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_ORDINATE
Line
Count
Source
1792
13.3k
  {                                                                           \
1793
13.3k
    int error = dwg_setup_##token (obj);                                      \
1794
13.3k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
13.3k
    if (error)                                                                \
1796
13.3k
      return error;                                                           \
1797
13.3k
    SINCE (R_2007a)                                                           \
1798
13.3k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
13.3k
    else                                                                      \
1804
13.3k
    {                                                                         \
1805
13.3k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
13.3k
    }                                                                         \
1807
13.3k
    return error;                                                             \
1808
13.3k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_LINEAR
Line
Count
Source
1792
20.9k
  {                                                                           \
1793
20.9k
    int error = dwg_setup_##token (obj);                                      \
1794
20.9k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
20.9k
    if (error)                                                                \
1796
20.9k
      return error;                                                           \
1797
20.9k
    SINCE (R_2007a)                                                           \
1798
20.9k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
20.9k
    else                                                                      \
1804
20.9k
    {                                                                         \
1805
20.9k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
20.9k
    }                                                                         \
1807
20.9k
    return error;                                                             \
1808
20.9k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_ALIGNED
Line
Count
Source
1792
3.33k
  {                                                                           \
1793
3.33k
    int error = dwg_setup_##token (obj);                                      \
1794
3.33k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
3.33k
    if (error)                                                                \
1796
3.33k
      return error;                                                           \
1797
3.33k
    SINCE (R_2007a)                                                           \
1798
3.33k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
3.33k
    else                                                                      \
1804
3.33k
    {                                                                         \
1805
3.33k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
3.33k
    }                                                                         \
1807
3.33k
    return error;                                                             \
1808
3.33k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_ANG3PT
Line
Count
Source
1792
4.73k
  {                                                                           \
1793
4.73k
    int error = dwg_setup_##token (obj);                                      \
1794
4.73k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
4.73k
    if (error)                                                                \
1796
4.73k
      return error;                                                           \
1797
4.73k
    SINCE (R_2007a)                                                           \
1798
4.73k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
4.73k
    else                                                                      \
1804
4.73k
    {                                                                         \
1805
4.73k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
4.73k
    }                                                                         \
1807
4.73k
    return error;                                                             \
1808
4.73k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_ANG2LN
Line
Count
Source
1792
4.27k
  {                                                                           \
1793
4.27k
    int error = dwg_setup_##token (obj);                                      \
1794
4.27k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
4.27k
    if (error)                                                                \
1796
4.27k
      return error;                                                           \
1797
4.27k
    SINCE (R_2007a)                                                           \
1798
4.27k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
4.27k
    else                                                                      \
1804
4.27k
    {                                                                         \
1805
4.27k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
4.27k
    }                                                                         \
1807
4.27k
    return error;                                                             \
1808
4.27k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_RADIUS
Line
Count
Source
1792
2.66k
  {                                                                           \
1793
2.66k
    int error = dwg_setup_##token (obj);                                      \
1794
2.66k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
2.66k
    if (error)                                                                \
1796
2.66k
      return error;                                                           \
1797
2.66k
    SINCE (R_2007a)                                                           \
1798
2.66k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
2.66k
    else                                                                      \
1804
2.66k
    {                                                                         \
1805
2.66k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
2.66k
    }                                                                         \
1807
2.66k
    return error;                                                             \
1808
2.66k
  }                                                                           \
decode.c:dwg_decode_DIMENSION_DIAMETER
Line
Count
Source
1792
1.64k
  {                                                                           \
1793
1.64k
    int error = dwg_setup_##token (obj);                                      \
1794
1.64k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.64k
    if (error)                                                                \
1796
1.64k
      return error;                                                           \
1797
1.64k
    SINCE (R_2007a)                                                           \
1798
1.64k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.64k
    else                                                                      \
1804
1.64k
    {                                                                         \
1805
1.64k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.64k
    }                                                                         \
1807
1.64k
    return error;                                                             \
1808
1.64k
  }                                                                           \
decode.c:dwg_decode_POINT
Line
Count
Source
1792
5.93k
  {                                                                           \
1793
5.93k
    int error = dwg_setup_##token (obj);                                      \
1794
5.93k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
5.93k
    if (error)                                                                \
1796
5.93k
      return error;                                                           \
1797
5.93k
    SINCE (R_2007a)                                                           \
1798
5.93k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
5.93k
    else                                                                      \
1804
5.93k
    {                                                                         \
1805
5.93k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
5.93k
    }                                                                         \
1807
5.93k
    return error;                                                             \
1808
5.93k
  }                                                                           \
decode.c:dwg_decode__3DFACE
Line
Count
Source
1792
14.3k
  {                                                                           \
1793
14.3k
    int error = dwg_setup_##token (obj);                                      \
1794
14.3k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
14.3k
    if (error)                                                                \
1796
14.3k
      return error;                                                           \
1797
14.3k
    SINCE (R_2007a)                                                           \
1798
14.3k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
14.3k
    else                                                                      \
1804
14.3k
    {                                                                         \
1805
14.3k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
14.3k
    }                                                                         \
1807
14.3k
    return error;                                                             \
1808
14.3k
  }                                                                           \
decode.c:dwg_decode_POLYLINE_PFACE
Line
Count
Source
1792
9.33k
  {                                                                           \
1793
9.33k
    int error = dwg_setup_##token (obj);                                      \
1794
9.33k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
9.33k
    if (error)                                                                \
1796
9.33k
      return error;                                                           \
1797
9.33k
    SINCE (R_2007a)                                                           \
1798
9.33k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
9.33k
    else                                                                      \
1804
9.33k
    {                                                                         \
1805
9.33k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
9.33k
    }                                                                         \
1807
9.33k
    return error;                                                             \
1808
9.33k
  }                                                                           \
decode.c:dwg_decode_POLYLINE_MESH
Line
Count
Source
1792
5.02k
  {                                                                           \
1793
5.02k
    int error = dwg_setup_##token (obj);                                      \
1794
5.02k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
5.02k
    if (error)                                                                \
1796
5.02k
      return error;                                                           \
1797
5.02k
    SINCE (R_2007a)                                                           \
1798
5.02k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
5.02k
    else                                                                      \
1804
5.02k
    {                                                                         \
1805
5.02k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
5.02k
    }                                                                         \
1807
5.02k
    return error;                                                             \
1808
5.02k
  }                                                                           \
decode.c:dwg_decode_SOLID
Line
Count
Source
1792
7.55k
  {                                                                           \
1793
7.55k
    int error = dwg_setup_##token (obj);                                      \
1794
7.55k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
7.55k
    if (error)                                                                \
1796
7.55k
      return error;                                                           \
1797
7.55k
    SINCE (R_2007a)                                                           \
1798
7.55k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
7.55k
    else                                                                      \
1804
7.55k
    {                                                                         \
1805
7.55k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
7.55k
    }                                                                         \
1807
7.55k
    return error;                                                             \
1808
7.55k
  }                                                                           \
decode.c:dwg_decode_TRACE
Line
Count
Source
1792
14.5k
  {                                                                           \
1793
14.5k
    int error = dwg_setup_##token (obj);                                      \
1794
14.5k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
14.5k
    if (error)                                                                \
1796
14.5k
      return error;                                                           \
1797
14.5k
    SINCE (R_2007a)                                                           \
1798
14.5k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
14.5k
    else                                                                      \
1804
14.5k
    {                                                                         \
1805
14.5k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
14.5k
    }                                                                         \
1807
14.5k
    return error;                                                             \
1808
14.5k
  }                                                                           \
decode.c:dwg_decode_SHAPE
Line
Count
Source
1792
4.17k
  {                                                                           \
1793
4.17k
    int error = dwg_setup_##token (obj);                                      \
1794
4.17k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
4.17k
    if (error)                                                                \
1796
4.17k
      return error;                                                           \
1797
4.17k
    SINCE (R_2007a)                                                           \
1798
4.17k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
4.17k
    else                                                                      \
1804
4.17k
    {                                                                         \
1805
4.17k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
4.17k
    }                                                                         \
1807
4.17k
    return error;                                                             \
1808
4.17k
  }                                                                           \
decode.c:dwg_decode_VIEWPORT
Line
Count
Source
1792
3.22k
  {                                                                           \
1793
3.22k
    int error = dwg_setup_##token (obj);                                      \
1794
3.22k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
3.22k
    if (error)                                                                \
1796
3.22k
      return error;                                                           \
1797
3.22k
    SINCE (R_2007a)                                                           \
1798
3.22k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
3.22k
    else                                                                      \
1804
3.22k
    {                                                                         \
1805
3.22k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
3.22k
    }                                                                         \
1807
3.22k
    return error;                                                             \
1808
3.22k
  }                                                                           \
decode.c:dwg_decode_ELLIPSE
Line
Count
Source
1792
649
  {                                                                           \
1793
649
    int error = dwg_setup_##token (obj);                                      \
1794
649
    Bit_Chain hdl_dat = *dat;                                                 \
1795
649
    if (error)                                                                \
1796
649
      return error;                                                           \
1797
649
    SINCE (R_2007a)                                                           \
1798
649
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
649
    else                                                                      \
1804
649
    {                                                                         \
1805
649
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
649
    }                                                                         \
1807
649
    return error;                                                             \
1808
649
  }                                                                           \
decode.c:dwg_decode_SPLINE
Line
Count
Source
1792
7.22k
  {                                                                           \
1793
7.22k
    int error = dwg_setup_##token (obj);                                      \
1794
7.22k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
7.22k
    if (error)                                                                \
1796
7.22k
      return error;                                                           \
1797
7.22k
    SINCE (R_2007a)                                                           \
1798
7.22k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
7.22k
    else                                                                      \
1804
7.22k
    {                                                                         \
1805
7.22k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
7.22k
    }                                                                         \
1807
7.22k
    return error;                                                             \
1808
7.22k
  }                                                                           \
decode.c:dwg_decode_REGION
Line
Count
Source
1792
12.2k
  {                                                                           \
1793
12.2k
    int error = dwg_setup_##token (obj);                                      \
1794
12.2k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
12.2k
    if (error)                                                                \
1796
12.2k
      return error;                                                           \
1797
12.2k
    SINCE (R_2007a)                                                           \
1798
12.2k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
12.2k
    else                                                                      \
1804
12.2k
    {                                                                         \
1805
12.2k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
12.2k
    }                                                                         \
1807
12.2k
    return error;                                                             \
1808
12.2k
  }                                                                           \
decode.c:dwg_decode__3DSOLID
Line
Count
Source
1792
1.13k
  {                                                                           \
1793
1.13k
    int error = dwg_setup_##token (obj);                                      \
1794
1.13k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.13k
    if (error)                                                                \
1796
1.13k
      return error;                                                           \
1797
1.13k
    SINCE (R_2007a)                                                           \
1798
1.13k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.13k
    else                                                                      \
1804
1.13k
    {                                                                         \
1805
1.13k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.13k
    }                                                                         \
1807
1.13k
    return error;                                                             \
1808
1.13k
  }                                                                           \
decode.c:dwg_decode_BODY
Line
Count
Source
1792
1.96k
  {                                                                           \
1793
1.96k
    int error = dwg_setup_##token (obj);                                      \
1794
1.96k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.96k
    if (error)                                                                \
1796
1.96k
      return error;                                                           \
1797
1.96k
    SINCE (R_2007a)                                                           \
1798
1.96k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.96k
    else                                                                      \
1804
1.96k
    {                                                                         \
1805
1.96k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.96k
    }                                                                         \
1807
1.96k
    return error;                                                             \
1808
1.96k
  }                                                                           \
decode.c:dwg_decode_RAY
Line
Count
Source
1792
2.93k
  {                                                                           \
1793
2.93k
    int error = dwg_setup_##token (obj);                                      \
1794
2.93k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
2.93k
    if (error)                                                                \
1796
2.93k
      return error;                                                           \
1797
2.93k
    SINCE (R_2007a)                                                           \
1798
2.93k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
2.93k
    else                                                                      \
1804
2.93k
    {                                                                         \
1805
2.93k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
2.93k
    }                                                                         \
1807
2.93k
    return error;                                                             \
1808
2.93k
  }                                                                           \
decode.c:dwg_decode_XLINE
Line
Count
Source
1792
1.37k
  {                                                                           \
1793
1.37k
    int error = dwg_setup_##token (obj);                                      \
1794
1.37k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.37k
    if (error)                                                                \
1796
1.37k
      return error;                                                           \
1797
1.37k
    SINCE (R_2007a)                                                           \
1798
1.37k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.37k
    else                                                                      \
1804
1.37k
    {                                                                         \
1805
1.37k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.37k
    }                                                                         \
1807
1.37k
    return error;                                                             \
1808
1.37k
  }                                                                           \
decode.c:dwg_decode_MTEXT
Line
Count
Source
1792
3.56k
  {                                                                           \
1793
3.56k
    int error = dwg_setup_##token (obj);                                      \
1794
3.56k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
3.56k
    if (error)                                                                \
1796
3.56k
      return error;                                                           \
1797
3.56k
    SINCE (R_2007a)                                                           \
1798
3.56k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
3.56k
    else                                                                      \
1804
3.56k
    {                                                                         \
1805
3.56k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
3.56k
    }                                                                         \
1807
3.56k
    return error;                                                             \
1808
3.56k
  }                                                                           \
decode.c:dwg_decode_LEADER
Line
Count
Source
1792
4.95k
  {                                                                           \
1793
4.95k
    int error = dwg_setup_##token (obj);                                      \
1794
4.95k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
4.95k
    if (error)                                                                \
1796
4.95k
      return error;                                                           \
1797
4.95k
    SINCE (R_2007a)                                                           \
1798
4.95k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
4.95k
    else                                                                      \
1804
4.95k
    {                                                                         \
1805
4.95k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
4.95k
    }                                                                         \
1807
4.95k
    return error;                                                             \
1808
4.95k
  }                                                                           \
decode.c:dwg_decode_TOLERANCE
Line
Count
Source
1792
374
  {                                                                           \
1793
374
    int error = dwg_setup_##token (obj);                                      \
1794
374
    Bit_Chain hdl_dat = *dat;                                                 \
1795
374
    if (error)                                                                \
1796
374
      return error;                                                           \
1797
374
    SINCE (R_2007a)                                                           \
1798
374
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
374
    else                                                                      \
1804
374
    {                                                                         \
1805
374
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
374
    }                                                                         \
1807
374
    return error;                                                             \
1808
374
  }                                                                           \
decode.c:dwg_decode_MLINE
Line
Count
Source
1792
1.25k
  {                                                                           \
1793
1.25k
    int error = dwg_setup_##token (obj);                                      \
1794
1.25k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.25k
    if (error)                                                                \
1796
1.25k
      return error;                                                           \
1797
1.25k
    SINCE (R_2007a)                                                           \
1798
1.25k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.25k
    else                                                                      \
1804
1.25k
    {                                                                         \
1805
1.25k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.25k
    }                                                                         \
1807
1.25k
    return error;                                                             \
1808
1.25k
  }                                                                           \
decode.c:dwg_decode_OLE2FRAME
Line
Count
Source
1792
1.01k
  {                                                                           \
1793
1.01k
    int error = dwg_setup_##token (obj);                                      \
1794
1.01k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.01k
    if (error)                                                                \
1796
1.01k
      return error;                                                           \
1797
1.01k
    SINCE (R_2007a)                                                           \
1798
1.01k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.01k
    else                                                                      \
1804
1.01k
    {                                                                         \
1805
1.01k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.01k
    }                                                                         \
1807
1.01k
    return error;                                                             \
1808
1.01k
  }                                                                           \
decode.c:dwg_decode_LWPOLYLINE
Line
Count
Source
1792
8.46k
  {                                                                           \
1793
8.46k
    int error = dwg_setup_##token (obj);                                      \
1794
8.46k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
8.46k
    if (error)                                                                \
1796
8.46k
      return error;                                                           \
1797
8.46k
    SINCE (R_2007a)                                                           \
1798
8.46k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
8.46k
    else                                                                      \
1804
8.46k
    {                                                                         \
1805
8.46k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
8.46k
    }                                                                         \
1807
8.46k
    return error;                                                             \
1808
8.46k
  }                                                                           \
decode.c:dwg_decode_HATCH
Line
Count
Source
1792
1.05k
  {                                                                           \
1793
1.05k
    int error = dwg_setup_##token (obj);                                      \
1794
1.05k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.05k
    if (error)                                                                \
1796
1.05k
      return error;                                                           \
1797
1.05k
    SINCE (R_2007a)                                                           \
1798
1.05k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.05k
    else                                                                      \
1804
1.05k
    {                                                                         \
1805
1.05k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.05k
    }                                                                         \
1807
1.05k
    return error;                                                             \
1808
1.05k
  }                                                                           \
decode.c:dwg_decode_OLEFRAME
Line
Count
Source
1792
215
  {                                                                           \
1793
215
    int error = dwg_setup_##token (obj);                                      \
1794
215
    Bit_Chain hdl_dat = *dat;                                                 \
1795
215
    if (error)                                                                \
1796
215
      return error;                                                           \
1797
215
    SINCE (R_2007a)                                                           \
1798
215
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
215
    else                                                                      \
1804
215
    {                                                                         \
1805
215
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
215
    }                                                                         \
1807
215
    return error;                                                             \
1808
215
  }                                                                           \
decode.c:dwg_decode_PROXY_ENTITY
Line
Count
Source
1792
184
  {                                                                           \
1793
184
    int error = dwg_setup_##token (obj);                                      \
1794
184
    Bit_Chain hdl_dat = *dat;                                                 \
1795
184
    if (error)                                                                \
1796
184
      return error;                                                           \
1797
184
    SINCE (R_2007a)                                                           \
1798
184
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
184
    else                                                                      \
1804
184
    {                                                                         \
1805
184
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
184
    }                                                                         \
1807
184
    return error;                                                             \
1808
184
  }                                                                           \
Unexecuted instantiation: decode.c:dwg_decode_IMAGE
Unexecuted instantiation: decode.c:dwg_decode_LARGE_RADIAL_DIMENSION
decode.c:dwg_decode__3DLINE
Line
Count
Source
1792
1.95k
  {                                                                           \
1793
1.95k
    int error = dwg_setup_##token (obj);                                      \
1794
1.95k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
1.95k
    if (error)                                                                \
1796
1.95k
      return error;                                                           \
1797
1.95k
    SINCE (R_2007a)                                                           \
1798
1.95k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
1.95k
    else                                                                      \
1804
1.95k
    {                                                                         \
1805
1.95k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
1.95k
    }                                                                         \
1807
1.95k
    return error;                                                             \
1808
1.95k
  }                                                                           \
Unexecuted instantiation: dwg_decode_MULTILEADER
Unexecuted instantiation: dwg_decode_WIPEOUT
Unexecuted instantiation: dwg_decode_PDFUNDERLAY
Unexecuted instantiation: dwg_decode_DGNUNDERLAY
Unexecuted instantiation: dwg_decode_DWFUNDERLAY
Unexecuted instantiation: dwg_decode_CAMERA
Unexecuted instantiation: dwg_decode_SECTIONOBJECT
Unexecuted instantiation: dwg_decode_UNKNOWN_ENT
Unexecuted instantiation: dwg_decode_LIGHT
Unexecuted instantiation: dwg_decode_HELIX
Unexecuted instantiation: dwg_decode_MESH
Unexecuted instantiation: dwg_decode_ARC_DIMENSION
Unexecuted instantiation: dwg_decode_PLANESURFACE
Unexecuted instantiation: dwg_decode_LAYOUTPRINTCONFIG
Unexecuted instantiation: dwg_decode_POINTCLOUD
Unexecuted instantiation: dwg_decode_POINTCLOUDEX
dwg_decode_REPEAT
Line
Count
Source
1792
18.7k
  {                                                                           \
1793
18.7k
    int error = dwg_setup_##token (obj);                                      \
1794
18.7k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
18.7k
    if (error)                                                                \
1796
18.7k
      return error;                                                           \
1797
18.7k
    SINCE (R_2007a)                                                           \
1798
18.7k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
18.7k
    else                                                                      \
1804
18.7k
    {                                                                         \
1805
18.7k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
18.7k
    }                                                                         \
1807
18.7k
    return error;                                                             \
1808
18.7k
  }                                                                           \
dwg_decode_ENDREP
Line
Count
Source
1792
3.08k
  {                                                                           \
1793
3.08k
    int error = dwg_setup_##token (obj);                                      \
1794
3.08k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
3.08k
    if (error)                                                                \
1796
3.08k
      return error;                                                           \
1797
3.08k
    SINCE (R_2007a)                                                           \
1798
3.08k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
3.08k
    else                                                                      \
1804
3.08k
    {                                                                         \
1805
3.08k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
3.08k
    }                                                                         \
1807
3.08k
    return error;                                                             \
1808
3.08k
  }                                                                           \
dwg_decode_LOAD
Line
Count
Source
1792
2.18k
  {                                                                           \
1793
2.18k
    int error = dwg_setup_##token (obj);                                      \
1794
2.18k
    Bit_Chain hdl_dat = *dat;                                                 \
1795
2.18k
    if (error)                                                                \
1796
2.18k
      return error;                                                           \
1797
2.18k
    SINCE (R_2007a)                                                           \
1798
2.18k
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
2.18k
    else                                                                      \
1804
2.18k
    {                                                                         \
1805
2.18k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
2.18k
    }                                                                         \
1807
2.18k
    return error;                                                             \
1808
2.18k
  }                                                                           \
dwg_decode_JUMP
Line
Count
Source
1792
385
  {                                                                           \
1793
385
    int error = dwg_setup_##token (obj);                                      \
1794
385
    Bit_Chain hdl_dat = *dat;                                                 \
1795
385
    if (error)                                                                \
1796
385
      return error;                                                           \
1797
385
    SINCE (R_2007a)                                                           \
1798
385
    {                                                                         \
1799
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1800
0
      error                                                                   \
1801
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
1802
0
    }                                                                         \
1803
385
    else                                                                      \
1804
385
    {                                                                         \
1805
385
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1806
385
    }                                                                         \
1807
385
    return error;                                                             \
1808
385
  }                                                                           \
1809
                                                                              \
1810
  GCC30_DIAG_IGNORE (-Wformat-nonliteral)                                     \
1811
  static int dwg_decode_##token##_private (                                   \
1812
      Bit_Chain *dat, Bit_Chain *hdl_dat, Bit_Chain *str_dat,                 \
1813
      Dwg_Object *restrict obj)                                               \
1814
434k
  {                                                                           \
1815
434k
    BITCODE_BL vcount, rcount3, rcount4;                                      \
1816
434k
    int error = 0;                                                            \
1817
434k
    Dwg_Entity_##token *ent, *_obj;                                           \
1818
434k
    Dwg_Object_Entity *_ent;                                                  \
1819
434k
    Dwg_Data *dwg = obj->parent;                                              \
1820
434k
    LOG_INFO ("Decode entity " #token "\n");                                  \
1821
434k
    _ent = obj->tio.entity;                                                   \
1822
434k
    ent = obj->tio.entity->tio.token;                                         \
1823
434k
    _obj = ent;                                                               \
1824
434k
    _ent->dwg = dwg;                                                          \
1825
434k
    _ent->objid = obj->index; /* obj ptr itself might move */                 \
1826
434k
    _obj->parent = obj->tio.entity;                                           \
1827
434k
    SINCE (R_13b1)                                                            \
1828
434k
    {                                                                         \
1829
228k
      error = dwg_decode_entity (dat, hdl_dat, str_dat, _ent);                \
1830
228k
    }                                                                         \
1831
434k
    else                                                                      \
1832
434k
    {                                                                         \
1833
206k
      error = decode_entity_preR13 (dat, obj, _ent);                          \
1834
206k
    }                                                                         \
1835
434k
    if (error >= DWG_ERR_CRITICAL || dat->byte > dat->size)                   \
1836
434k
      return error;
1837
1838
// Does size include the CRC?
1839
#define DWG_ENTITY_END                                                        \
1840
1.80M
  SINCE (R_13b1)                                                              \
1841
1.63M
  {                                                                           \
1842
1.63M
    size_t pos = obj_stream_position (dat, hdl_dat, str_dat);                 \
1843
1.63M
    int64_t padding = (obj->size * 8) - pos;                                  \
1844
1.63M
    bit_set_position (dat, pos);                                              \
1845
1.63M
    if (padding)                                                              \
1846
1.63M
      LOG_HANDLE (" padding: %+ld %s\n", (long)padding,                       \
1847
1.63M
                  padding >= 8    ? "MISSING"                                 \
1848
1.63M
                  : (padding < 0) ? "OVERSHOOT"                               \
1849
1.63M
                                  : "");                                      \
1850
1.63M
  }                                                                           \
1851
1.47M
  return error & ~DWG_ERR_UNHANDLEDCLASS;                                     \
1852
1.83M
  }
1853
1854
#define DWG_OBJECT(token)                                                     \
1855
  EXPORT int dwg_setup_##token (Dwg_Object *obj)                              \
1856
1.40M
  {                                                                           \
1857
1.40M
    Dwg_Object_##token *_obj;                                                 \
1858
1.40M
    LOG_INFO ("Add object " #token " [%d] ", obj->index);                     \
1859
1.40M
    obj->supertype = DWG_SUPERTYPE_OBJECT;                                    \
1860
1.40M
    obj->tio.object                                                           \
1861
1.40M
        = (Dwg_Object_Object *)calloc (1, sizeof (Dwg_Object_Object));        \
1862
1.40M
    if (!obj->tio.object)                                                     \
1863
1.40M
      return DWG_ERR_OUTOFMEM;                                                \
1864
1.40M
    _obj = obj->tio.object->tio.token                                         \
1865
1.40M
        = (Dwg_Object_##token *)calloc (1, sizeof (Dwg_Object_##token));      \
1866
1.40M
    if (!_obj)                                                                \
1867
1.40M
      {                                                                       \
1868
0
        free (obj->tio.object);                                               \
1869
0
        obj->tio.object = NULL;                                               \
1870
0
        obj->fixedtype = DWG_TYPE_FREED;                                      \
1871
0
        return DWG_ERR_OUTOFMEM;                                              \
1872
0
      }                                                                       \
1873
1.40M
    if (!(int)obj->fixedtype)                                                 \
1874
1.40M
      {                                                                       \
1875
1.40M
        obj->fixedtype = DWG_TYPE_##token;                                    \
1876
1.40M
        obj->name = (char *)#token;                                           \
1877
1.40M
      }                                                                       \
1878
1.40M
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1879
1.40M
      {                                                                       \
1880
1.34M
        obj->type = DWG_TYPE_##token;                                         \
1881
1.34M
      }                                                                       \
1882
1.40M
    if (!obj->dxfname)                                                        \
1883
1.40M
      {                                                                       \
1884
1.40M
        if (strEQc (#token, "PLACEHOLDER"))                                   \
1885
1.40M
          obj->dxfname = (char *)"ACDBPLACEHOLDER";                           \
1886
1.40M
        else if (strEQc (#token, "PROXY_OBJECT"))                             \
1887
1.39M
          obj->dxfname = (char *)"ACAD_PROXY_OBJECT";                         \
1888
1.39M
        else                                                                  \
1889
1.39M
          obj->dxfname = (char *)#token;                                      \
1890
1.40M
      }                                                                       \
1891
1.40M
    if (strEQc (#token, "UNKNOWN_OBJ"))                                       \
1892
1.40M
      {                                                                       \
1893
38
        obj->name = (char *)#token;                                           \
1894
38
        obj->dxfname = (char *)#token;                                        \
1895
38
        obj->fixedtype = DWG_TYPE_UNKNOWN_OBJ;                                \
1896
38
      }                                                                       \
1897
1.40M
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1898
1.40M
      {                                                                       \
1899
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1900
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1901
0
          obj->name = strdup (obj->name);                                     \
1902
0
      }                                                                       \
1903
1.40M
    _obj->parent = obj->tio.object;                                           \
1904
1.40M
    obj->tio.object->dwg = obj->parent;                                       \
1905
1.40M
    obj->tio.object->objid = obj->index; /* obj ptr itself might move */      \
1906
1.40M
    return 0;                                                                 \
1907
1.40M
  }                                                                           \
1908
  static int dwg_decode_##token##_private (                                  \
1909
      Bit_Chain *obj_dat, Bit_Chain *hdl_dat, Bit_Chain *str_dat,             \
1910
      Dwg_Object *restrict obj);                                              \
1911
                                                                              \
1912
  DWG_DECODE_FUNC int dwg_decode_##token (Bit_Chain *restrict dat,            \
1913
                                          Dwg_Object *restrict obj)           \
1914
1.40M
  {                                                                           \
1915
1.40M
    int error = dwg_setup_##token (obj);                                      \
1916
1.40M
    Bit_Chain hdl_dat = *dat;                                                 \
1917
1.40M
    if (error)                                                                \
1918
1.40M
      return error;                                                           \
1919
1.40M
    SINCE (R_2007a)                                                           \
1920
1.40M
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
1.40M
    else                                                                      \
1926
1.40M
    {                                                                         \
1927
1.40M
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
1.40M
    }                                                                         \
1929
1.40M
    return error;                                                             \
1930
1.40M
  }                                                                           \
decode.c:dwg_decode_DICTIONARY
Line
Count
Source
1914
354
  {                                                                           \
1915
354
    int error = dwg_setup_##token (obj);                                      \
1916
354
    Bit_Chain hdl_dat = *dat;                                                 \
1917
354
    if (error)                                                                \
1918
354
      return error;                                                           \
1919
354
    SINCE (R_2007a)                                                           \
1920
354
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
354
    else                                                                      \
1926
354
    {                                                                         \
1927
354
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
354
    }                                                                         \
1929
354
    return error;                                                             \
1930
354
  }                                                                           \
decode.c:dwg_decode_BLOCK_CONTROL
Line
Count
Source
1914
3.86k
  {                                                                           \
1915
3.86k
    int error = dwg_setup_##token (obj);                                      \
1916
3.86k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
3.86k
    if (error)                                                                \
1918
3.86k
      return error;                                                           \
1919
3.86k
    SINCE (R_2007a)                                                           \
1920
3.86k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
3.86k
    else                                                                      \
1926
3.86k
    {                                                                         \
1927
3.86k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
3.86k
    }                                                                         \
1929
3.86k
    return error;                                                             \
1930
3.86k
  }                                                                           \
decode.c:dwg_decode_LAYER_CONTROL
Line
Count
Source
1914
1.53k
  {                                                                           \
1915
1.53k
    int error = dwg_setup_##token (obj);                                      \
1916
1.53k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
1.53k
    if (error)                                                                \
1918
1.53k
      return error;                                                           \
1919
1.53k
    SINCE (R_2007a)                                                           \
1920
1.53k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
1.53k
    else                                                                      \
1926
1.53k
    {                                                                         \
1927
1.53k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
1.53k
    }                                                                         \
1929
1.53k
    return error;                                                             \
1930
1.53k
  }                                                                           \
decode.c:dwg_decode_STYLE_CONTROL
Line
Count
Source
1914
4.31k
  {                                                                           \
1915
4.31k
    int error = dwg_setup_##token (obj);                                      \
1916
4.31k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
4.31k
    if (error)                                                                \
1918
4.31k
      return error;                                                           \
1919
4.31k
    SINCE (R_2007a)                                                           \
1920
4.31k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
4.31k
    else                                                                      \
1926
4.31k
    {                                                                         \
1927
4.31k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
4.31k
    }                                                                         \
1929
4.31k
    return error;                                                             \
1930
4.31k
  }                                                                           \
decode.c:dwg_decode_LTYPE_CONTROL
Line
Count
Source
1914
2.94k
  {                                                                           \
1915
2.94k
    int error = dwg_setup_##token (obj);                                      \
1916
2.94k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
2.94k
    if (error)                                                                \
1918
2.94k
      return error;                                                           \
1919
2.94k
    SINCE (R_2007a)                                                           \
1920
2.94k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
2.94k
    else                                                                      \
1926
2.94k
    {                                                                         \
1927
2.94k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
2.94k
    }                                                                         \
1929
2.94k
    return error;                                                             \
1930
2.94k
  }                                                                           \
decode.c:dwg_decode_VIEW_CONTROL
Line
Count
Source
1914
1.96k
  {                                                                           \
1915
1.96k
    int error = dwg_setup_##token (obj);                                      \
1916
1.96k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
1.96k
    if (error)                                                                \
1918
1.96k
      return error;                                                           \
1919
1.96k
    SINCE (R_2007a)                                                           \
1920
1.96k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
1.96k
    else                                                                      \
1926
1.96k
    {                                                                         \
1927
1.96k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
1.96k
    }                                                                         \
1929
1.96k
    return error;                                                             \
1930
1.96k
  }                                                                           \
decode.c:dwg_decode_UCS_CONTROL
Line
Count
Source
1914
937
  {                                                                           \
1915
937
    int error = dwg_setup_##token (obj);                                      \
1916
937
    Bit_Chain hdl_dat = *dat;                                                 \
1917
937
    if (error)                                                                \
1918
937
      return error;                                                           \
1919
937
    SINCE (R_2007a)                                                           \
1920
937
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
937
    else                                                                      \
1926
937
    {                                                                         \
1927
937
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
937
    }                                                                         \
1929
937
    return error;                                                             \
1930
937
  }                                                                           \
decode.c:dwg_decode_VPORT_CONTROL
Line
Count
Source
1914
6.81k
  {                                                                           \
1915
6.81k
    int error = dwg_setup_##token (obj);                                      \
1916
6.81k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
6.81k
    if (error)                                                                \
1918
6.81k
      return error;                                                           \
1919
6.81k
    SINCE (R_2007a)                                                           \
1920
6.81k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
6.81k
    else                                                                      \
1926
6.81k
    {                                                                         \
1927
6.81k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
6.81k
    }                                                                         \
1929
6.81k
    return error;                                                             \
1930
6.81k
  }                                                                           \
decode.c:dwg_decode_APPID_CONTROL
Line
Count
Source
1914
1.25k
  {                                                                           \
1915
1.25k
    int error = dwg_setup_##token (obj);                                      \
1916
1.25k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
1.25k
    if (error)                                                                \
1918
1.25k
      return error;                                                           \
1919
1.25k
    SINCE (R_2007a)                                                           \
1920
1.25k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
1.25k
    else                                                                      \
1926
1.25k
    {                                                                         \
1927
1.25k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
1.25k
    }                                                                         \
1929
1.25k
    return error;                                                             \
1930
1.25k
  }                                                                           \
decode.c:dwg_decode_DIMSTYLE_CONTROL
Line
Count
Source
1914
2.84k
  {                                                                           \
1915
2.84k
    int error = dwg_setup_##token (obj);                                      \
1916
2.84k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
2.84k
    if (error)                                                                \
1918
2.84k
      return error;                                                           \
1919
2.84k
    SINCE (R_2007a)                                                           \
1920
2.84k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
2.84k
    else                                                                      \
1926
2.84k
    {                                                                         \
1927
2.84k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
2.84k
    }                                                                         \
1929
2.84k
    return error;                                                             \
1930
2.84k
  }                                                                           \
decode.c:dwg_decode_VX_CONTROL
Line
Count
Source
1914
718
  {                                                                           \
1915
718
    int error = dwg_setup_##token (obj);                                      \
1916
718
    Bit_Chain hdl_dat = *dat;                                                 \
1917
718
    if (error)                                                                \
1918
718
      return error;                                                           \
1919
718
    SINCE (R_2007a)                                                           \
1920
718
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
718
    else                                                                      \
1926
718
    {                                                                         \
1927
718
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
718
    }                                                                         \
1929
718
    return error;                                                             \
1930
718
  }                                                                           \
decode.c:dwg_decode_GROUP
Line
Count
Source
1914
4.61k
  {                                                                           \
1915
4.61k
    int error = dwg_setup_##token (obj);                                      \
1916
4.61k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
4.61k
    if (error)                                                                \
1918
4.61k
      return error;                                                           \
1919
4.61k
    SINCE (R_2007a)                                                           \
1920
4.61k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
4.61k
    else                                                                      \
1926
4.61k
    {                                                                         \
1927
4.61k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
4.61k
    }                                                                         \
1929
4.61k
    return error;                                                             \
1930
4.61k
  }                                                                           \
decode.c:dwg_decode_MLINESTYLE
Line
Count
Source
1914
6.93k
  {                                                                           \
1915
6.93k
    int error = dwg_setup_##token (obj);                                      \
1916
6.93k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
6.93k
    if (error)                                                                \
1918
6.93k
      return error;                                                           \
1919
6.93k
    SINCE (R_2007a)                                                           \
1920
6.93k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
6.93k
    else                                                                      \
1926
6.93k
    {                                                                         \
1927
6.93k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
6.93k
    }                                                                         \
1929
6.93k
    return error;                                                             \
1930
6.93k
  }                                                                           \
decode.c:dwg_decode_LAYOUT
Line
Count
Source
1914
1.34M
  {                                                                           \
1915
1.34M
    int error = dwg_setup_##token (obj);                                      \
1916
1.34M
    Bit_Chain hdl_dat = *dat;                                                 \
1917
1.34M
    if (error)                                                                \
1918
1.34M
      return error;                                                           \
1919
1.34M
    SINCE (R_2007a)                                                           \
1920
1.34M
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
1.34M
    else                                                                      \
1926
1.34M
    {                                                                         \
1927
1.34M
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
1.34M
    }                                                                         \
1929
1.34M
    return error;                                                             \
1930
1.34M
  }                                                                           \
decode.c:dwg_decode_PROXY_OBJECT
Line
Count
Source
1914
11
  {                                                                           \
1915
11
    int error = dwg_setup_##token (obj);                                      \
1916
11
    Bit_Chain hdl_dat = *dat;                                                 \
1917
11
    if (error)                                                                \
1918
11
      return error;                                                           \
1919
11
    SINCE (R_2007a)                                                           \
1920
11
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
11
    else                                                                      \
1926
11
    {                                                                         \
1927
11
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
11
    }                                                                         \
1929
11
    return error;                                                             \
1930
11
  }                                                                           \
Unexecuted instantiation: decode.c:dwg_decode_DICTIONARYVAR
Unexecuted instantiation: decode.c:dwg_decode_DICTIONARYWDFLT
Unexecuted instantiation: decode.c:dwg_decode_FIELD
Unexecuted instantiation: decode.c:dwg_decode_FIELDLIST
Unexecuted instantiation: decode.c:dwg_decode_IDBUFFER
Unexecuted instantiation: decode.c:dwg_decode_INDEX
Unexecuted instantiation: decode.c:dwg_decode_IMAGEDEF
Unexecuted instantiation: decode.c:dwg_decode_IMAGEDEF_REACTOR
Unexecuted instantiation: decode.c:dwg_decode_LAYER_INDEX
Unexecuted instantiation: decode.c:dwg_decode_PLOTSETTINGS
Unexecuted instantiation: dwg_decode_GEODATA
Unexecuted instantiation: dwg_decode_RASTERVARIABLES
Unexecuted instantiation: dwg_decode_SORTENTSTABLE
Unexecuted instantiation: dwg_decode_SPATIAL_FILTER
Unexecuted instantiation: dwg_decode_SPATIAL_INDEX
Unexecuted instantiation: dwg_decode_TABLESTYLE
Unexecuted instantiation: dwg_decode_CELLSTYLEMAP
Unexecuted instantiation: dwg_decode_TABLEGEOMETRY
dwg_decode_XRECORD
Line
Count
Source
1914
1.41k
  {                                                                           \
1915
1.41k
    int error = dwg_setup_##token (obj);                                      \
1916
1.41k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
1.41k
    if (error)                                                                \
1918
1.41k
      return error;                                                           \
1919
1.41k
    SINCE (R_2007a)                                                           \
1920
1.41k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
1.41k
    else                                                                      \
1926
1.41k
    {                                                                         \
1927
1.41k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
1.41k
    }                                                                         \
1929
1.41k
    return error;                                                             \
1930
1.41k
  }                                                                           \
dwg_decode_PLACEHOLDER
Line
Count
Source
1914
2.30k
  {                                                                           \
1915
2.30k
    int error = dwg_setup_##token (obj);                                      \
1916
2.30k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
2.30k
    if (error)                                                                \
1918
2.30k
      return error;                                                           \
1919
2.30k
    SINCE (R_2007a)                                                           \
1920
2.30k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
2.30k
    else                                                                      \
1926
2.30k
    {                                                                         \
1927
2.30k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
2.30k
    }                                                                         \
1929
2.30k
    return error;                                                             \
1930
2.30k
  }                                                                           \
Unexecuted instantiation: dwg_decode_SCALE
dwg_decode_VBA_PROJECT
Line
Count
Source
1914
6.02k
  {                                                                           \
1915
6.02k
    int error = dwg_setup_##token (obj);                                      \
1916
6.02k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
6.02k
    if (error)                                                                \
1918
6.02k
      return error;                                                           \
1919
6.02k
    SINCE (R_2007a)                                                           \
1920
6.02k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
6.02k
    else                                                                      \
1926
6.02k
    {                                                                         \
1927
6.02k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
6.02k
    }                                                                         \
1929
6.02k
    return error;                                                             \
1930
6.02k
  }                                                                           \
Unexecuted instantiation: dwg_decode_MLEADERSTYLE
Unexecuted instantiation: dwg_decode_WIPEOUTVARIABLES
Unexecuted instantiation: dwg_decode_PDFDEFINITION
Unexecuted instantiation: dwg_decode_DGNDEFINITION
Unexecuted instantiation: dwg_decode_DWFDEFINITION
Unexecuted instantiation: dwg_decode_SECTION_MANAGER
Unexecuted instantiation: dwg_decode_SECTION_SETTINGS
dwg_decode_UNKNOWN_OBJ
Line
Count
Source
1914
38
  {                                                                           \
1915
38
    int error = dwg_setup_##token (obj);                                      \
1916
38
    Bit_Chain hdl_dat = *dat;                                                 \
1917
38
    if (error)                                                                \
1918
38
      return error;                                                           \
1919
38
    SINCE (R_2007a)                                                           \
1920
38
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
38
    else                                                                      \
1926
38
    {                                                                         \
1927
38
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
38
    }                                                                         \
1929
38
    return error;                                                             \
1930
38
  }                                                                           \
dwg_decode_DUMMY
Line
Count
Source
1914
362
  {                                                                           \
1915
362
    int error = dwg_setup_##token (obj);                                      \
1916
362
    Bit_Chain hdl_dat = *dat;                                                 \
1917
362
    if (error)                                                                \
1918
362
      return error;                                                           \
1919
362
    SINCE (R_2007a)                                                           \
1920
362
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
362
    else                                                                      \
1926
362
    {                                                                         \
1927
362
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
362
    }                                                                         \
1929
362
    return error;                                                             \
1930
362
  }                                                                           \
dwg_decode_LONG_TRANSACTION
Line
Count
Source
1914
3.25k
  {                                                                           \
1915
3.25k
    int error = dwg_setup_##token (obj);                                      \
1916
3.25k
    Bit_Chain hdl_dat = *dat;                                                 \
1917
3.25k
    if (error)                                                                \
1918
3.25k
      return error;                                                           \
1919
3.25k
    SINCE (R_2007a)                                                           \
1920
3.25k
    {                                                                         \
1921
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
1922
0
      error                                                                   \
1923
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj);\
1924
0
    }                                                                         \
1925
3.25k
    else                                                                      \
1926
3.25k
    {                                                                         \
1927
3.25k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
1928
3.25k
    }                                                                         \
1929
3.25k
    return error;                                                             \
1930
3.25k
  }                                                                           \
Unexecuted instantiation: dwg_decode_OBJECT_PTR
Unexecuted instantiation: dwg_decode_ASSOCDEPENDENCY
Unexecuted instantiation: dwg_decode_ASSOCPLANESURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCEXTENDSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCEXTRUDEDSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCLOFTEDSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCNETWORKSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCOFFSETSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCREVOLVEDSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCTRIMSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCBLENDSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCPATCHSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_ASSOCFILLETSURFACEACTIONBODY
Unexecuted instantiation: dwg_decode_VISUALSTYLE
Unexecuted instantiation: dwg_decode_DYNAMICBLOCKPURGEPREVENTER
Unexecuted instantiation: dwg_decode_BLOCKREPRESENTATION
Unexecuted instantiation: dwg_decode_DBCOLOR
Unexecuted instantiation: dwg_decode_LIGHTLIST
Unexecuted instantiation: dwg_decode_SUN
Unexecuted instantiation: dwg_decode_RENDERSETTINGS
Unexecuted instantiation: dwg_decode_MENTALRAYRENDERSETTINGS
Unexecuted instantiation: dwg_decode_RAPIDRTRENDERSETTINGS
Unexecuted instantiation: dwg_decode_MATERIAL
Unexecuted instantiation: dwg_decode_LAYERFILTER
Unexecuted instantiation: dwg_decode_ACSH_BOX_CLASS
Unexecuted instantiation: dwg_decode_ACSH_WEDGE_CLASS
Unexecuted instantiation: dwg_decode_ACSH_SPHERE_CLASS
Unexecuted instantiation: dwg_decode_ACSH_CYLINDER_CLASS
Unexecuted instantiation: dwg_decode_ACSH_CONE_CLASS
Unexecuted instantiation: dwg_decode_ACSH_PYRAMID_CLASS
Unexecuted instantiation: dwg_decode_ACSH_FILLET_CLASS
Unexecuted instantiation: dwg_decode_ACSH_CHAMFER_CLASS
Unexecuted instantiation: dwg_decode_ACSH_TORUS_CLASS
Unexecuted instantiation: dwg_decode_ACSH_BREP_CLASS
Unexecuted instantiation: dwg_decode_ACSH_BOOLEAN_CLASS
Unexecuted instantiation: dwg_decode_ACSH_HISTORY_CLASS
Unexecuted instantiation: dwg_decode_ASSOCACTION
Unexecuted instantiation: dwg_decode_ASSOCVALUEDEPENDENCY
Unexecuted instantiation: dwg_decode_ASSOCGEOMDEPENDENCY
Unexecuted instantiation: dwg_decode_ASSOCNETWORK
Unexecuted instantiation: dwg_decode_BLOCKVISIBILITYGRIP
Unexecuted instantiation: dwg_decode_BLOCKGRIPLOCATIONCOMPONENT
Unexecuted instantiation: dwg_decode_BLOCKALIGNMENTGRIP
Unexecuted instantiation: dwg_decode_BLOCKALIGNMENTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKLINEARPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKBASEPOINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKFLIPPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKFLIPGRIP
Unexecuted instantiation: dwg_decode_BLOCKLINEARGRIP
Unexecuted instantiation: dwg_decode_BLOCKLOOKUPGRIP
Unexecuted instantiation: dwg_decode_BLOCKXYPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKMOVEACTION
Unexecuted instantiation: dwg_decode_BLOCKFLIPACTION
Unexecuted instantiation: dwg_decode_BLOCKROTATIONPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKROTATEACTION
Unexecuted instantiation: dwg_decode_BLOCKROTATIONGRIP
Unexecuted instantiation: dwg_decode_BLOCKSCALEACTION
Unexecuted instantiation: dwg_decode_BLOCKVISIBILITYPARAMETER
Unexecuted instantiation: dwg_decode_EVALUATION_GRAPH
Unexecuted instantiation: dwg_decode_DIMASSOC
Unexecuted instantiation: dwg_decode_DATALINK
Unexecuted instantiation: dwg_decode_ALDIMOBJECTCONTEXTDATA
Unexecuted instantiation: dwg_decode_MTEXTOBJECTCONTEXTDATA
Unexecuted instantiation: dwg_decode_TEXTOBJECTCONTEXTDATA
Unexecuted instantiation: dwg_decode_BLKREFOBJECTCONTEXTDATA
Unexecuted instantiation: dwg_decode_LEADEROBJECTCONTEXTDATA
Unexecuted instantiation: dwg_decode_FCFOBJECTCONTEXTDATA
Unexecuted instantiation: dwg_decode_DETAILVIEWSTYLE
Unexecuted instantiation: dwg_decode_SECTIONVIEWSTYLE
Unexecuted instantiation: dwg_decode_GRADIENT_BACKGROUND
Unexecuted instantiation: dwg_decode_GROUND_PLANE_BACKGROUND
Unexecuted instantiation: dwg_decode_IBL_BACKGROUND
Unexecuted instantiation: dwg_decode_IMAGE_BACKGROUND
Unexecuted instantiation: dwg_decode_SKYLIGHT_BACKGROUND
Unexecuted instantiation: dwg_decode_SOLID_BACKGROUND
Unexecuted instantiation: dwg_decode_RENDERENTRY
Unexecuted instantiation: dwg_decode_RENDERENVIRONMENT
Unexecuted instantiation: dwg_decode_RENDERGLOBAL
Unexecuted instantiation: dwg_decode_POINTCLOUDDEF
Unexecuted instantiation: dwg_decode_POINTCLOUDDEFEX
Unexecuted instantiation: dwg_decode_POINTCLOUDDEF_REACTOR
Unexecuted instantiation: dwg_decode_POINTCLOUDDEF_REACTOR_EX
Unexecuted instantiation: dwg_decode_POINTCLOUDCOLORMAP
Unexecuted instantiation: dwg_decode_ASSOC2DCONSTRAINTGROUP
Unexecuted instantiation: dwg_decode_ASSOCVARIABLE
Unexecuted instantiation: dwg_decode_ASSOCACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCCOMPOUNDACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCOSNAPPOINTREFACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCPOINTREFACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCOBJECTACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCPATHACTIONPARAM
Unexecuted instantiation: dwg_decode_BLOCKPOLARPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKPOLARGRIP
Unexecuted instantiation: dwg_decode_ASSOCDIMDEPENDENCYBODY
Unexecuted instantiation: dwg_decode_BLOCKARRAYACTION
Unexecuted instantiation: dwg_decode_BLOCKANGULARCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_ASSOCFACEACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCVERTEXACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCASMBODYACTIONPARAM
Unexecuted instantiation: dwg_decode_ASSOCARRAYMODIFYPARAMETERS
Unexecuted instantiation: dwg_decode_ASSOCARRAYPATHPARAMETERS
Unexecuted instantiation: dwg_decode_ASSOCARRAYPOLARPARAMETERS
Unexecuted instantiation: dwg_decode_ASSOCARRAYRECTANGULARPARAMETERS
Unexecuted instantiation: dwg_decode_BLOCKPARAMDEPENDENCYBODY
Unexecuted instantiation: dwg_decode_BLOCKDIAMETRICCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKRADIALCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKALIGNEDCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKLINEARCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKHORIZONTALCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKVERTICALCONSTRAINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKLOOKUPACTION
Unexecuted instantiation: dwg_decode_BLOCKLOOKUPPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKPOINTPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKSTRETCHACTION
Unexecuted instantiation: dwg_decode_BLOCKPOLARSTRETCHACTION
Unexecuted instantiation: dwg_decode_ASSOCARRAYACTIONBODY
Unexecuted instantiation: dwg_decode_BLOCKUSERPARAMETER
Unexecuted instantiation: dwg_decode_BLOCKXYGRIP
Unexecuted instantiation: dwg_decode_PARTIAL_VIEWING_INDEX
1931
                                                                              \
1932
  GCC30_DIAG_IGNORE (-Wformat-nonliteral)                                     \
1933
  static int dwg_decode_##token##_private (                                   \
1934
      Bit_Chain *dat, Bit_Chain *hdl_dat, Bit_Chain *str_dat,                 \
1935
      Dwg_Object *restrict obj)                                               \
1936
1.40M
  {                                                                           \
1937
1.40M
    BITCODE_BL vcount, rcount3, rcount4;                                      \
1938
1.40M
    int error = 0;                                                            \
1939
1.40M
    Dwg_Object_##token *_obj = NULL;                                          \
1940
1.40M
    Dwg_Data *dwg = obj->parent;                                              \
1941
1.40M
    LOG_INFO ("Decode object " #token "\n");                                  \
1942
1.40M
    if (strNE (#token, "TABLECONTENT") || obj->fixedtype != DWG_TYPE_TABLE)   \
1943
1.40M
      {                                                                       \
1944
1.40M
        _obj = obj->tio.object->tio.token;                                    \
1945
1.40M
        error = dwg_decode_object (dat, hdl_dat, str_dat, obj->tio.object);   \
1946
1.40M
        if (error >= DWG_ERR_CRITICAL || dat->byte > dat->size)               \
1947
1.40M
          return error;                                                       \
1948
1.40M
      }
1949
1950
1.45M
#define DWG_OBJECT_END DWG_ENTITY_END
1951
1952
// only for exported BLOCK_HEADER, LAYER, STYLE, LTYPE, VIEW, UCS, VPORT,
1953
// APPID, DIMSTYLE, VX_TABLE_RECORD table records, needed for the r11 add API.
1954
#define DWG_TABLE(token)                                                      \
1955
  EXPORT int dwg_setup_##token (Dwg_Object *obj)                              \
1956
87.1k
  {                                                                           \
1957
87.1k
    Dwg_Object_##token *_obj;                                                 \
1958
87.1k
    LOG_INFO ("Add table record " #token " [%d] ", obj->index);               \
1959
87.1k
    obj->supertype = DWG_SUPERTYPE_OBJECT;                                    \
1960
87.1k
    obj->tio.object                                                           \
1961
87.1k
        = (Dwg_Object_Object *)calloc (1, sizeof (Dwg_Object_Object));        \
1962
87.1k
    if (!obj->tio.object)                                                     \
1963
87.1k
      return DWG_ERR_OUTOFMEM;                                                \
1964
87.1k
    _obj = obj->tio.object->tio.token                                         \
1965
87.1k
        = (Dwg_Object_##token *)calloc (1, sizeof (Dwg_Object_##token));      \
1966
87.1k
    if (!_obj)                                                                \
1967
87.1k
      {                                                                       \
1968
0
        free (obj->tio.object);                                               \
1969
0
        obj->tio.object = NULL;                                               \
1970
0
        obj->fixedtype = DWG_TYPE_FREED;                                      \
1971
0
        return DWG_ERR_OUTOFMEM;                                              \
1972
0
      }                                                                       \
1973
87.1k
    if (!(int)obj->fixedtype)                                                 \
1974
87.1k
      {                                                                       \
1975
87.1k
        obj->fixedtype = DWG_TYPE_##token;                                    \
1976
87.1k
        obj->name = (char *)#token;                                           \
1977
87.1k
      }                                                                       \
1978
87.1k
    if (!(int)obj->type && obj->fixedtype <= DWG_TYPE_LAYOUT)                 \
1979
87.1k
      {                                                                       \
1980
11.5k
        obj->type = DWG_TYPE_##token;                                         \
1981
11.5k
      }                                                                       \
1982
87.1k
    obj->dxfname = (char *)#token;                                            \
1983
87.1k
    if (obj->parent->opts & DWG_OPTS_IN)                                      \
1984
87.1k
      {                                                                       \
1985
0
        obj->dxfname = strdup (obj->dxfname);                                 \
1986
0
        if (obj->parent->opts & DWG_OPTS_INJSON)                              \
1987
0
          obj->name = strdup (obj->name);                                     \
1988
0
      }                                                                       \
1989
87.1k
    _obj->parent = obj->tio.object;                                           \
1990
87.1k
    obj->tio.object->dwg = obj->parent;                                       \
1991
87.1k
    obj->tio.object->objid = obj->index; /* obj ptr itself might move */      \
1992
87.1k
    return 0;                                                                 \
1993
87.1k
  }                                                                           \
1994
  static int dwg_decode_##token##_private (                                   \
1995
      Bit_Chain *obj_dat, Bit_Chain *hdl_dat, Bit_Chain *str_dat,             \
1996
      Dwg_Object *restrict obj);                                              \
1997
                                                                              \
1998
  int dwg_decode_##token (Bit_Chain *restrict dat, Dwg_Object *restrict obj)  \
1999
87.1k
  {                                                                           \
2000
87.1k
    int error = dwg_setup_##token (obj);                                      \
2001
87.1k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
87.1k
    if (error)                                                                \
2003
87.1k
      return error;                                                           \
2004
87.1k
    SINCE (R_2007a)                                                           \
2005
87.1k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
87.1k
    else                                                                      \
2011
87.1k
    {                                                                         \
2012
87.1k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
87.1k
    }                                                                         \
2014
87.1k
    return error;                                                             \
2015
87.1k
  }                                                                           \
dwg_decode_BLOCK_HEADER
Line
Count
Source
1999
12.4k
  {                                                                           \
2000
12.4k
    int error = dwg_setup_##token (obj);                                      \
2001
12.4k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
12.4k
    if (error)                                                                \
2003
12.4k
      return error;                                                           \
2004
12.4k
    SINCE (R_2007a)                                                           \
2005
12.4k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
12.4k
    else                                                                      \
2011
12.4k
    {                                                                         \
2012
12.4k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
12.4k
    }                                                                         \
2014
12.4k
    return error;                                                             \
2015
12.4k
  }                                                                           \
dwg_decode_LAYER
Line
Count
Source
1999
1.54k
  {                                                                           \
2000
1.54k
    int error = dwg_setup_##token (obj);                                      \
2001
1.54k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
1.54k
    if (error)                                                                \
2003
1.54k
      return error;                                                           \
2004
1.54k
    SINCE (R_2007a)                                                           \
2005
1.54k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
1.54k
    else                                                                      \
2011
1.54k
    {                                                                         \
2012
1.54k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
1.54k
    }                                                                         \
2014
1.54k
    return error;                                                             \
2015
1.54k
  }                                                                           \
dwg_decode_STYLE
Line
Count
Source
1999
6.68k
  {                                                                           \
2000
6.68k
    int error = dwg_setup_##token (obj);                                      \
2001
6.68k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
6.68k
    if (error)                                                                \
2003
6.68k
      return error;                                                           \
2004
6.68k
    SINCE (R_2007a)                                                           \
2005
6.68k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
6.68k
    else                                                                      \
2011
6.68k
    {                                                                         \
2012
6.68k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
6.68k
    }                                                                         \
2014
6.68k
    return error;                                                             \
2015
6.68k
  }                                                                           \
dwg_decode_LTYPE
Line
Count
Source
1999
10.9k
  {                                                                           \
2000
10.9k
    int error = dwg_setup_##token (obj);                                      \
2001
10.9k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
10.9k
    if (error)                                                                \
2003
10.9k
      return error;                                                           \
2004
10.9k
    SINCE (R_2007a)                                                           \
2005
10.9k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
10.9k
    else                                                                      \
2011
10.9k
    {                                                                         \
2012
10.9k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
10.9k
    }                                                                         \
2014
10.9k
    return error;                                                             \
2015
10.9k
  }                                                                           \
dwg_decode_VIEW
Line
Count
Source
1999
8.85k
  {                                                                           \
2000
8.85k
    int error = dwg_setup_##token (obj);                                      \
2001
8.85k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
8.85k
    if (error)                                                                \
2003
8.85k
      return error;                                                           \
2004
8.85k
    SINCE (R_2007a)                                                           \
2005
8.85k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
8.85k
    else                                                                      \
2011
8.85k
    {                                                                         \
2012
8.85k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
8.85k
    }                                                                         \
2014
8.85k
    return error;                                                             \
2015
8.85k
  }                                                                           \
dwg_decode_UCS
Line
Count
Source
1999
3.29k
  {                                                                           \
2000
3.29k
    int error = dwg_setup_##token (obj);                                      \
2001
3.29k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
3.29k
    if (error)                                                                \
2003
3.29k
      return error;                                                           \
2004
3.29k
    SINCE (R_2007a)                                                           \
2005
3.29k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
3.29k
    else                                                                      \
2011
3.29k
    {                                                                         \
2012
3.29k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
3.29k
    }                                                                         \
2014
3.29k
    return error;                                                             \
2015
3.29k
  }                                                                           \
dwg_decode_VPORT
Line
Count
Source
1999
35.4k
  {                                                                           \
2000
35.4k
    int error = dwg_setup_##token (obj);                                      \
2001
35.4k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
35.4k
    if (error)                                                                \
2003
35.4k
      return error;                                                           \
2004
35.4k
    SINCE (R_2007a)                                                           \
2005
35.4k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
35.4k
    else                                                                      \
2011
35.4k
    {                                                                         \
2012
35.4k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
35.4k
    }                                                                         \
2014
35.4k
    return error;                                                             \
2015
35.4k
  }                                                                           \
dwg_decode_APPID
Line
Count
Source
1999
943
  {                                                                           \
2000
943
    int error = dwg_setup_##token (obj);                                      \
2001
943
    Bit_Chain hdl_dat = *dat;                                                 \
2002
943
    if (error)                                                                \
2003
943
      return error;                                                           \
2004
943
    SINCE (R_2007a)                                                           \
2005
943
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
943
    else                                                                      \
2011
943
    {                                                                         \
2012
943
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
943
    }                                                                         \
2014
943
    return error;                                                             \
2015
943
  }                                                                           \
dwg_decode_DIMSTYLE
Line
Count
Source
1999
6.54k
  {                                                                           \
2000
6.54k
    int error = dwg_setup_##token (obj);                                      \
2001
6.54k
    Bit_Chain hdl_dat = *dat;                                                 \
2002
6.54k
    if (error)                                                                \
2003
6.54k
      return error;                                                           \
2004
6.54k
    SINCE (R_2007a)                                                           \
2005
6.54k
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
6.54k
    else                                                                      \
2011
6.54k
    {                                                                         \
2012
6.54k
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
6.54k
    }                                                                         \
2014
6.54k
    return error;                                                             \
2015
6.54k
  }                                                                           \
dwg_decode_VX_TABLE_RECORD
Line
Count
Source
1999
416
  {                                                                           \
2000
416
    int error = dwg_setup_##token (obj);                                      \
2001
416
    Bit_Chain hdl_dat = *dat;                                                 \
2002
416
    if (error)                                                                \
2003
416
      return error;                                                           \
2004
416
    SINCE (R_2007a)                                                           \
2005
416
    {                                                                         \
2006
0
      Bit_Chain obj_dat = *dat, str_dat = *dat;                               \
2007
0
      error                                                                   \
2008
0
          = dwg_decode_##token##_private (&obj_dat, &hdl_dat, &str_dat, obj); \
2009
0
    }                                                                         \
2010
416
    else                                                                      \
2011
416
    {                                                                         \
2012
416
      error = dwg_decode_##token##_private (dat, &hdl_dat, dat, obj);         \
2013
416
    }                                                                         \
2014
416
    return error;                                                             \
2015
416
  }                                                                           \
2016
                                                                              \
2017
  GCC30_DIAG_IGNORE (-Wformat-nonliteral)                                     \
2018
  static int dwg_decode_##token##_private (                                   \
2019
      Bit_Chain *dat, Bit_Chain *hdl_dat, Bit_Chain *str_dat,                 \
2020
      Dwg_Object *restrict obj)                                               \
2021
87.1k
  {                                                                           \
2022
87.1k
    BITCODE_BL vcount, rcount3, rcount4;                                      \
2023
87.1k
    int error = 0;                                                            \
2024
87.1k
    Dwg_Object_##token *_obj = NULL;                                          \
2025
87.1k
    Dwg_Data *dwg = obj->parent;                                              \
2026
87.1k
    LOG_INFO ("Decode table record " #token "\n");                            \
2027
87.1k
    _obj = obj->tio.object->tio.token;                                        \
2028
87.1k
    error = dwg_decode_object (dat, hdl_dat, str_dat, obj->tio.object);       \
2029
87.1k
    if (error >= DWG_ERR_CRITICAL || dat->byte > dat->size)                   \
2030
87.1k
      return error;
2031
2032
#endif