1/* -*- c -*- */
2/*****************************************************************************/
3/*  LibreDWG - free implementation of the DWG file format                    */
4/*                                                                           */
5/*  Copyright (C) 2018-2019 Free Software Foundation, Inc.                   */
6/*                                                                           */
7/*  This library is free software, licensed under the terms of the GNU       */
8/*  General Public License as published by the Free Software Foundation,     */
9/*  either version 3 of the License, or (at your option) any later version.  */
10/*  You should have received a copy of the GNU General Public License        */
11/*  along with this program.  If not, see <http://www.gnu.org/licenses/>.    */
12/*****************************************************************************/
13
14/*
15 * header_variables_dxf.spec: DXF header variables specification
16 * written by Reini Urban
17 */
18
19#include "spec.h"
20
21  SECTION (HEADER);
22
23  HEADER_VALUE_TV (ACADVER, 1, version_codes[dwg->header.version]);
24
25  if (minimal) {
26    HEADER_VALUE (HANDSEED, RL, 5, _obj->HANDSEED->handleref.value);
27    ENDSEC ();
28    return 0;
29  }
30
31  VERSIONS (R_13, R_2013) {
32    HEADER_VALUE (ACADMAINTVER, RS, 70, dwg->header.maint_version);
33  }
34  SINCE (R_2018) {
35    HEADER_VALUE (ACADMAINTVER, RL, 90, dwg->header.maint_version);
36  }
37  SINCE (R_10) {
38    HEADER_VALUE_TV (DWGCODEPAGE, 3, codepage);
39  }
40  SINCE (R_2004) {
41    // usually only since 2010
42    HEADER_VALUE_TU0 (TITLE, 1, dwg->summaryinfo.TITLE);
43    HEADER_VALUE_TU0 (SUBJECT, 1, dwg->summaryinfo.SUBJECT);
44    HEADER_VALUE_TU0 (AUTHOR, 1, dwg->summaryinfo.AUTHOR);
45    HEADER_VALUE_TU0 (KEYWORDS, 1, dwg->summaryinfo.KEYWORDS);
46    HEADER_VALUE_TU0 (COMMENTS, 1, dwg->summaryinfo.COMMENTS);
47    HEADER_VALUE_TU0 (LASTSAVEDBY, 1, dwg->summaryinfo.LASTSAVEDBY);
48    HEADER_VALUE_TU0 (REVISIONNUMBER, 1, dwg->summaryinfo.REVISIONNUMBER);
49    for (rcount2 = 0; rcount2 < dwg->summaryinfo.num_props; rcount2++)
50      {
51        if (!bit_empty_T (dat, (BITCODE_T)dwg->summaryinfo.props[rcount2].tag))
52          {
53            HEADER_VALUE_TU (CUSTOMPROPERTYTAG, 1, dwg->summaryinfo.props[rcount2].tag);
54            HEADER_VALUE_TU (CUSTOMPROPERTY, 1, dwg->summaryinfo.props[rcount2].value);
55          }
56      }
57  }
58  SINCE (R_2013) {
59    HEADER_BLL (REQUIREDVERSIONS, 160);
60  }
61  UNTIL (R_9) {
62    HEADER_2D (INSBASE);
63  } LATER_VERSIONS {
64    HEADER_3D (INSBASE);
65  }
66  UNTIL (R_10) {
67    HEADER_2D (EXTMIN);
68    HEADER_2D (EXTMAX);
69  } LATER_VERSIONS {
70    HEADER_3D (EXTMIN);
71    HEADER_3D (EXTMAX);
72  }
73  HEADER_2D (LIMMIN);
74  HEADER_2D (LIMMAX);
75
76  HEADER_RS (ORTHOMODE, 70);
77  HEADER_RS (REGENMODE, 70);
78  HEADER_RS (FILLMODE, 70);
79  HEADER_RS (QTEXTMODE, 70);
80  SINCE (R_9c1) {
81    HEADER_RS (MIRRTEXT, 70);
82  }
83  UNTIL (R_14) {
84    HEADER_RS (DRAGMODE, 70);
85  }
86  HEADER_RD (LTSCALE, 40);
87  UNTIL (R_14) {
88    HEADER_RS (OSMODE, 70);
89  }
90  HEADER_RS (ATTMODE, 70);
91  HEADER_RD (TEXTSIZE, 40);
92  HEADER_RD (TRACEWID, 40);
93
94  HEADER_HANDLE_NAME (TEXTSTYLE, 7, STYLE);
95  HEADER_HANDLE_NAME (CLAYER, 8, LAYER);
96  HEADER_HANDLE_NAME (CELTYPE, 6, LTYPE);
97  HEADER_CMC (CECOLOR, 62);
98  SINCE (R_13) {
99    HEADER_RD (CELTSCALE, 40);
100    UNTIL (R_14) {
101      HEADER_RS (DELOBJ, 70);
102    }
103    HEADER_RS (DISPSILH, 70); // this is WIREFRAME
104    HEADER_RD (DIMSCALE, 40);
105  }
106  HEADER_RD (DIMASZ, 40);
107  HEADER_RD (DIMEXO, 40);
108  HEADER_RD (DIMDLI, 40);
109  HEADER_RD (DIMRND, 40);
110  HEADER_RD (DIMDLE, 40);
111  HEADER_RD (DIMEXE, 40);
112  HEADER_RD (DIMTP, 40);
113  HEADER_RD (DIMTM, 40);
114  HEADER_RD (DIMTXT, 40);
115  HEADER_RD (DIMCEN, 40);
116  HEADER_RD (DIMTSZ, 40);
117  HEADER_RS (DIMTOL, 70);
118  HEADER_RS (DIMLIM, 70);
119  HEADER_RS (DIMTIH, 70);
120  HEADER_RS (DIMTOH, 70);
121  HEADER_RS (DIMSE1, 70);
122  HEADER_RS (DIMSE2, 70);
123  HEADER_RS (DIMTAD, 70);
124  HEADER_RS (DIMZIN, 70);
125  HEADER_HANDLE_NAME (DIMBLK, 1, BLOCK_HEADER);
126  HEADER_RS (DIMASO, 70);
127  HEADER_RS (DIMSHO, 70);
128  //HEADER_RS (DIMSAV, 70); // not in DXF
129  HEADER_T (DIMPOST, 1);
130  HEADER_T (DIMAPOST, 1);
131  SINCE (R_2010) {
132    HEADER_T0 (DIMALTMZS, 1);
133    HEADER_T0 (DIMMZS, 1);
134  }
135  HEADER_RS (DIMALT, 70);
136  HEADER_RS (DIMALTD, 70);
137  HEADER_RD (DIMALTF, 40);
138  HEADER_RD (DIMLFAC, 40);
139  HEADER_RS (DIMTOFL, 70);
140  HEADER_RD (DIMTVP, 40);
141  HEADER_RS (DIMTIX, 70);
142  HEADER_RS (DIMSOXD, 70);
143  HEADER_RS (DIMSAH, 70);
144  HEADER_HANDLE_NAME (DIMBLK1, 1,  BLOCK_HEADER);
145  HEADER_HANDLE_NAME (DIMBLK2, 1,  BLOCK_HEADER);
146  HEADER_HANDLE_NAME (DIMSTYLE, 2, DIMSTYLE);
147  HEADER_CMC (DIMCLRD, 70);
148  HEADER_CMC (DIMCLRE, 70);
149  HEADER_CMC (DIMCLRT, 70);
150  HEADER_RD (DIMTFAC, 40);
151  HEADER_RD (DIMGAP, 40);
152  SINCE (R_13) {
153    HEADER_RS (DIMJUST, 70);
154    HEADER_RS (DIMSD1, 70);
155    HEADER_RS (DIMSD2, 70);
156    HEADER_RS (DIMTOLJ, 70);
157    HEADER_RS (DIMTZIN, 70);
158    HEADER_RS (DIMALTZ, 70);
159    HEADER_RS (DIMALTTZ, 70);
160    HEADER_RS0 (DIMFIT, 70);
161    HEADER_RS (DIMUPT, 70);
162    HEADER_RS0 (DIMUNIT, 70);
163    HEADER_RS (DIMDEC, 70);
164    HEADER_RS (DIMTDEC, 70);
165    HEADER_RS (DIMALTU, 70);
166    HEADER_RS (DIMALTTD, 70);
167    HEADER_HANDLE_NAME (DIMTXSTY, 7, STYLE);
168    HEADER_RS (DIMAUNIT, 70);
169  }
170  SINCE (R_2000) {
171    HEADER_RS (DIMADEC, 70);
172    HEADER_RD (DIMALTRND, 40);
173    HEADER_RS (DIMAZIN, 70);
174    HEADER_RS (DIMDSEP, 70);
175    HEADER_RS (DIMATFIT, 70);
176    HEADER_RS (DIMFRAC, 70);
177    HEADER_HANDLE_NAME (DIMLDRBLK, 1, BLOCK_HEADER);
178    HEADER_RS (DIMLUNIT, 70);
179    //HEADER_RS (DIMLWD, 70); convert from unsigned to signed
180    //HEADER_RS (DIMLWE, 70);
181    HEADER_BSd (DIMLWD, 70);
182    HEADER_BSd (DIMLWE, 70);
183    HEADER_RS (DIMTMOVE, 70);
184  }
185  SINCE (R_2007)
186    {
187      HEADER_BD (DIMFXL, 40);
188      HEADER_B (DIMFXLON, 70);
189      HEADER_BD (DIMJOGANG, 40);
190      HEADER_BS (DIMTFILL, 70);
191      HEADER_CMC (DIMTFILLCLR, 70);
192      HEADER_BS (DIMARCSYM, 70);
193      HEADER_HANDLE_NAME (DIMLTYPE, 6, LTYPE);
194      HEADER_HANDLE_NAME (DIMLTEX1, 6, LTYPE);
195      HEADER_HANDLE_NAME (DIMLTEX2, 6, LTYPE);
196    }
197  SINCE (R_2010) {
198    HEADER_RS (DIMTXTDIRECTION, 70);
199  }
200  HEADER_RS (LUNITS, 70);
201  HEADER_RS (LUPREC, 70);
202  HEADER_RD (SKETCHINC, 40);
203  HEADER_RD (FILLETRAD, 40);
204  HEADER_RS (AUNITS, 70);
205  HEADER_RS (AUPREC, 70);
206  HEADER_TV (MENU, 1);
207  HEADER_RD (ELEVATION, 40);
208  SINCE (R_10c1) {
209    HEADER_RD (PELEVATION, 40);
210  }
211  HEADER_RD (THICKNESS, 40);
212  HEADER_RS (LIMCHECK, 70);
213  UNTIL (R_14) {
214    HEADER_RS0 (BLIPMODE, 70); //documented but nowhere found
215  }
216  HEADER_RD (CHAMFERA, 40);
217  HEADER_RD (CHAMFERB, 40);
218  SINCE (R_13) {
219    HEADER_RD (CHAMFERC, 40);
220    HEADER_RD (CHAMFERD, 40);
221  }
222  HEADER_RS (SKPOLY, 70);
223
224  HEADER_TIMEBLL (TDCREATE, 40);
225  SINCE (R_2000)
226    HEADER_TIMEBLL (TDUCREATE, 40);
227  HEADER_TIMEBLL (TDUPDATE, 40);
228  SINCE (R_2000)
229    HEADER_TIMEBLL (TDUUPDATE, 40);
230  HEADER_TIMEBLL (TDINDWG, 40);
231  HEADER_TIMEBLL (TDUSRTIMER, 40);
232
233  HEADER_VALUE (USRTIMER, RS, 70, 1); // 1
234  HEADER_RD (ANGBASE, 50);
235  HEADER_RS (ANGDIR, 70);
236  HEADER_RS (PDMODE, 70);
237  HEADER_RD (PDSIZE, 40);
238  HEADER_RD (PLINEWID, 40);
239  UNTIL (R_14) {
240    HEADER_RS (COORDS, 70); // 2
241  }
242  SINCE (R_9)
243    HEADER_RS (SPLFRAME, 70);
244  SINCE (R_2_6)
245    HEADER_RS (SPLINETYPE, 70);
246  SINCE (R_9)
247    HEADER_RS (SPLINESEGS, 70);
248  UNTIL (R_14) {
249    HEADER_RS (ATTDIA, 70); //default 1
250    HEADER_RS (ATTREQ, 70); //default 1
251    HEADER_RS (HANDLING, 70); //default 1
252  }
253
254  //HEADER_H (HANDSEED, 5); //default: 20000, before r13: 0xB8BC
255  SINCE (R_9)
256    FIELD_DATAHANDLE (HANDSEED, 0, 5);
257
258  HEADER_RS (SURFTAB1, 70); // 6
259  HEADER_RS (SURFTAB2, 70); // 6
260  HEADER_RS (SURFTYPE, 70); // 6
261  HEADER_RS (SURFU, 70); // 6
262  HEADER_RS (SURFV, 70); // 6
263  SINCE (R_2000) {
264    HEADER_HANDLE_NAME (UCSBASE, 2, UCS);
265  }
266  HEADER_HANDLE_NAME (UCSNAME, 2, UCS);
267  HEADER_3D (UCSORG);
268  HEADER_3D (UCSXDIR);
269  HEADER_3D (UCSYDIR);
270  SINCE (R_2000) {
271    HEADER_HANDLE_NAME (UCSORTHOREF, 2, UCS);
272    HEADER_RS (UCSORTHOVIEW, 70);
273    HEADER_3D (UCSORGTOP);
274    HEADER_3D (UCSORGBOTTOM);
275    HEADER_3D (UCSORGLEFT);
276    HEADER_3D (UCSORGRIGHT);
277    HEADER_3D (UCSORGFRONT);
278    HEADER_3D (UCSORGBACK);
279    HEADER_HANDLE_NAME (PUCSBASE, 2, UCS);
280  }
281  SINCE (R_10c1) {
282    HEADER_HANDLE_NAME (PUCSNAME, 2, UCS);
283    HEADER_3D (PUCSORG);
284    HEADER_3D (PUCSXDIR);
285    HEADER_3D (PUCSYDIR);
286  }
287  SINCE (R_2000) {
288    HEADER_HANDLE_NAME (PUCSORTHOREF, 2, UCS);
289    HEADER_RS (PUCSORTHOVIEW, 70);
290    HEADER_3D (PUCSORGTOP);
291    HEADER_3D (PUCSORGBOTTOM);
292    HEADER_3D (PUCSORGLEFT);
293    HEADER_3D (PUCSORGRIGHT);
294    HEADER_3D (PUCSORGFRONT);
295    HEADER_3D (PUCSORGBACK);
296  }
297
298  HEADER_RS (USERI1, 70);
299  HEADER_RS (USERI2, 70);
300  HEADER_RS (USERI3, 70);
301  HEADER_RS (USERI4, 70);
302  HEADER_RS (USERI5, 70);
303  HEADER_RD (USERR1, 40);
304  HEADER_RD (USERR2, 40);
305  HEADER_RD (USERR3, 40);
306  HEADER_RD (USERR4, 40);
307  HEADER_RD (USERR5, 40);
308
309  SINCE (R_2_6)
310    HEADER_RS (WORLDVIEW, 70);
311  UNTIL (R_10)
312    return 0;
313
314  //VERSION (R_13) {
315  //  HEADER_RS (WIREFRAME, 70); //Undocumented
316  //}
317  HEADER_RS (SHADEDGE, 70);
318  HEADER_RS (SHADEDIF, 70);
319  HEADER_RS (TILEMODE, 70);
320  HEADER_RS (MAXACTVP, 70);
321
322  SINCE (R_9)
323    HEADER_3D (PINSBASE);
324  HEADER_RS (PLIMCHECK, 70);
325  HEADER_3D (PEXTMIN);
326  HEADER_3D (PEXTMAX);
327  HEADER_2D (PLIMMIN);
328  HEADER_2D (PLIMMAX);
329
330  HEADER_RS (UNITMODE, 70);
331  HEADER_RS (VISRETAIN, 70);
332  VERSION (R_13) // undocumented and unhandled in ODA
333    HEADER_RS (DELOBJ, 70);
334  HEADER_RS (PLINEGEN, 70);
335  HEADER_RS (PSLTSCALE, 70);
336
337  HEADER_RS (TREEDEPTH, 70);
338  UNTIL (R_11) {
339    HEADER_VALUE_TV (DWGCODEPAGE, 3, codepage);
340  }
341  VERSIONS (R_10, R_2000) {
342    HEADER_RS0 (PICKSTYLE, 70);
343  }
344  HEADER_HANDLE_NAME (CMLSTYLE, 2, MLINESTYLE); //default: Standard
345  HEADER_RS (CMLJUST, 70);
346  HEADER_RD (CMLSCALE, 40); //default: 20
347  VERSION (R_13) {
348    HEADER_9 (SAVEIMAGES);
349    VALUE (1, RS, 70);
350  }
351  SINCE (R_13c3) {
352    HEADER_RS (PROXYGRAPHICS, 70);
353    HEADER_RS (MEASUREMENT, 70);
354  }
355  SINCE (R_2000) {
356    HEADER_RS (CELWEIGHT, 370);
357    HEADER_RS (ENDCAPS, 280);
358    HEADER_RS (JOINSTYLE, 280);
359    HEADER_B (LWDISPLAY, 290);
360    HEADER_RS (INSUNITS, 70);
361    HEADER_T (HYPERLINKBASE, 1);
362    HEADER_T (STYLESHEET, 1);
363    HEADER_B (XEDIT, 290);
364    HEADER_RS (CEPSNTYPE, 380);
365    if (dwg->header_vars.CEPSNTYPE == 3)
366    {
367      HEADER_HANDLE_NAME (CPSNID, 390, LTYPE);
368    }
369    HEADER_B (PSTYLEMODE, 290);
370    HEADER_T (FINGERPRINTGUID, 2);
371    HEADER_T (VERSIONGUID, 2);
372    HEADER_B (EXTNAMES, 290);
373    HEADER_RD (PSVPSCALE, 40);
374    HEADER_B (OLESTARTUP, 290);
375  }
376
377  SINCE (R_2004) {
378    HEADER_RC (SORTENTS, 280);
379    HEADER_RC (INDEXCTL, 280);
380    HEADER_RC (HIDETEXT, 280);
381    SINCE (R_2010) {
382      HEADER_RC (XCLIPFRAME, 280);
383    } else {
384      HEADER_B (XCLIPFRAME, 290);
385    }
386    PRE (R_2007) {
387      HEADER_RC (DIMASSOC, 280);
388    }
389    HEADER_RC (HALOGAP, 280);
390    HEADER_RS (OBSCOLOR, 70);
391    HEADER_RC (OBSLTYPE, 280);
392    HEADER_RC (INTERSECTIONDISPLAY, 280);
393    HEADER_RS (INTERSECTIONCOLOR, 70);
394    HEADER_RC (DIMASSOC, 280);
395    HEADER_T (PROJECTNAME, 1);
396  }
397
398  SINCE (R_2007) {
399    HEADER_B (CAMERADISPLAY, 290);
400    HEADER_BD (LENSLENGTH, 40);
401    HEADER_BD (CAMERAHEIGHT, 40);
402    HEADER_BD (STEPSPERSEC, 40);
403    HEADER_BD (STEPSIZE, 40);
404    HEADER_VALUE (3DDWFPREC, BD, 40, _obj->_3DDWFPREC);
405    HEADER_BD (PSOLWIDTH, 40);
406    HEADER_BD (PSOLHEIGHT, 40);
407    HEADER_BD (LOFTANG1, 40); //no rad2deg, ok
408    HEADER_BD (LOFTANG2, 40); //no rad2deg, ok
409    HEADER_BD (LOFTMAG1, 40);
410    HEADER_BD (LOFTMAG2, 40);
411    HEADER_RS (LOFTPARAM, 70);
412    HEADER_RC (LOFTNORMALS, 280);
413    HEADER_BD (LATITUDE, 40);
414    HEADER_BD (LONGITUDE, 40);
415    HEADER_BD (NORTHDIRECTION, 40);
416    HEADER_BLd (TIMEZONE, 70);
417    HEADER_RC (LIGHTGLYPHDISPLAY, 280);
418    HEADER_RC (TILEMODELIGHTSYNCH, 280);
419    HEADER_H0 (CMATERIAL, 347);
420    HEADER_RC (SOLIDHIST, 280);
421    HEADER_RC (SHOWHIST, 280);
422    HEADER_RC (DWFFRAME, 280);
423    HEADER_RC (DGNFRAME, 280);
424    HEADER_B (REALWORLDSCALE, 290);
425    HEADER_CMC (INTERFERECOLOR, 62);
426    HEADER_H0 (INTERFEREOBJVS, 345);
427    HEADER_H0 (INTERFEREVPVS, 346);
428    HEADER_H0 (DRAGVS, 349);
429    HEADER_RC (CSHADOW, 280);
430    HEADER_BD (SHADOWPLANELOCATION, 40);
431  }
432
433  ENDSEC ();
434