1%{// -*- mode: c -*- 2/*****************************************************************************/ 3/* LibreDWG - free implementation of the DWG file format */ 4/* */ 5/* Copyright (C) 2020 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 * dxfclasses.c: create classes, lookup the initial class values from its DXF name. 16 * generated via gperf from dxfclasses.in 17 * 18 * written Reini Urban 19 */ 20 21#include <stdio.h> 22#include <stdint.h> 23#include <string.h> 24#include <stdbool.h> 25#include "config.h" 26#include "dwg.h" 27#include "common.h" 28// other imports 29int dwg_add_class (Dwg_Data *restrict dwg, const char *const restrict dxfname, 30 const char *const restrict cppname, const char *const restrict appname, 31 const bool is_entity); 32// export 33EXPORT int dwg_require_class (Dwg_Data *restrict dwg, 34 const char *const restrict dxfname, const int len); 35 36// v3.1 changed len type from unsigned int to size_t (gperf d519d1a821511eaa22eae6d9019a548aea21e6) 37#ifdef GPERF_VERSION 38# if GPERF_VERSION < 301 39# define SIZE_TYPE unsigned int 40# else 41# define SIZE_TYPE size_t 42# endif 43#else 44# define SIZE_TYPE size_t 45#endif 46// internal 47static const struct Dwg_DXFClass *in_word_set (register const char *str, register SIZE_TYPE len); 48 49enum apptypes 50{ 51 ODBXCLASS, 52 ODBX_OR_A2000CLASS, 53 A2000CLASS, 54 SCENEOECLASS, 55 ISMCLASS, 56 EXPRESSCLASS, 57 POINTCLOUDCLASS, 58 DGNLSCLASS, 59 AEC60CLASS, 60 SPECIALCLASS, 61}; 62#define ODBX ODBXCLASS 63#define ISM ISMCLASS 64#define SCENEOE SCENEOECLASS 65#define EXPRESS EXPRESSCLASS 66#define POINTCLOUD POINTCLOUDCLASS 67#define DGNLS DGNLSCLASS 68#define AEC60 AEC60CLASS 69#define SPECIAL SPECIALCLASS 70//%null-strings 71 72%} 73%7bit 74%language=ANSI-C 75%struct-type 76%readonly-tables 77%pic 78 79struct Dwg_DXFClass {int name; const char *const cppname; unsigned apptype:4; unsigned isent:1;}; 80 81%% 82# Entities 83LWPOLYLINE, "AcDbPolyline", ODBX, 1 84HATCH, "AcDbHatch", ODBX, 1 85OLE2FRAME, "AcDbOle2Frame", ODBX, 1 86ARC_DIMENSION, "AcDbArcDimension", ODBX, 1 87MULTILEADER, "AcDbMLeader", ODBX, 1 88ACAD_TABLE, "AcDbTable", ODBX, 1 89PDFUNDERLAY, "AcDbPdfReference", ODBX, 1 90DGNUNDERLAY, "AcDbDgnReference", ODBX, 1 91DWFUNDERLAY, "AcDbDwfReference", ODBX, 1 92# 93ACDBDICTIONARYWDFLT, "AcDbDictionaryWithDefault", ODBX_OR_A2000CLASS, 0 94ACDBPLACEHOLDER, "AcDbPlaceHolder", ODBX_OR_A2000CLASS, 0 95ACAD_PROXY_ENTITY_WRAPPER, "AcDbProxyEntityWrapper", ODBX_OR_A2000CLASS, 0 96ACAD_PROXY_OBJECT_WRAPPER, "AcDbProxyObjectWrapper", ODBX_OR_A2000CLASS, 0 97# 98DICTIONARYVAR, "AcDbDictionaryVar", A2000CLASS, 0 99LAYOUT, "AcDbLayout", A2000CLASS, 0 100SORTENTSTABLE, "AcDbSortentsTable", A2000CLASS, 0 101# 102VBA_PROJECT, "AcDbVbaProject", ODBX, 0 103XRECORD, "AcDbXrecord", ODBX, 0 104LAYER_INDEX, "AcDbLayerIndex", ODBX, 0 105SPATIAL_INDEX, "AcDbSpatialIndex", ODBX, 0 106SPATIAL_FILTER, "AcDbSpatialFilter", ODBX, 0 107IDBUFFER, "AcDbIdBuffer", ODBX, 0 108VISUALSTYLE, "AcDbVisualStyle", ODBX, 0 109TABLESTYLE, "AcDbTableStyle", ODBX, 0 110TABLECONTENT, "AcDbTableContent", ODBX, 0 111TABLEGEOMETRY, "AcDbTableGeometry", ODBX, 0 112CELLSTYLEMAP, "AcDbCellStyleMap", ODBX, 0 113DATATABLE, "AcDbDataTable", ODBX, 0 114SCALE, "AcDbScale", ODBX, 0 115DGNDEFINITION, "AcDbDgnDefinition", ODBX, 0 116DWFDEFINITION, "AcDbDwfDefinition", ODBX, 0 117PDFDEFINITION, "AcDbPdfDefinition", ODBX, 0 118# 119IMAGE, "AcDbRasterImage", ISM, 1 120IMAGEDEF, "AcDbRasterImageDef", ISM, 0 121IMAGEDEF_REACTOR,"AcDbRasterImageDefReactor", ISM, 0 122RASTERVARIABLES,"AcDbRasterVariables", ISM, 0 123# 124LIGHT, "AcDbLight", SCENEOE, 1 125LIGHTLIST, "AcDbLightList", SCENEOE, 0 126SUN, "AcDbSun", SCENEOE, 0 127SUNSTUDY, "AcDbSunStudy", SCENEOE, 0 128# 129DIMASSOC, "AcDbDimAssoc", SPECIAL, 0 130WIPEOUT, "AcDbWipeout", SPECIAL, 1 131WIPEOUTVARIABLES,"AcDbWipeoutVariables", ODBX, 0 132RTEXT, "AcDbRText", EXPRESS, 1 133ARCALIGNEDTEXT, "AcDbArcAlignedText", EXPRESS, 1 134MLEADERSTYLE, "AcDbMLeaderStyle", SPECIAL, 0 135# 136MATERIAL, "AcDbMaterial", ODBX, 0 137PLOTSETTINGS, "AcDbPlotSettings", ODBX, 0 138ACDBSECTIONVIEWSTYLE, "AcDbSectionViewStyle", ODBX, 0 139ACDBDETAILVIEWSTYLE, "AcDbDetailViewStyle", ODBX, 0 140POSITIONMARKER, "AcDbGeoPositionMarker",ODBX, 0 141ACAD_EVALUATION_GRAPH, "AcDbEvalGraph", ODBX, 0 142# 143SURFACE, "AcDbSurface", ODBX, 1 144EXTRUDEDSURFACE, "AcDbExtrudedSurface", ODBX, 1 145LOFTEDSURFACE, "AcDbLoftedSurface", ODBX, 1 146NURBSURFACE, "AcDbNurbSurface", ODBX, 1 147PLANESURFACE, "AcDbPlaneSurface", ODBX, 1 148REVOLVEDSURFACE, "AcDbRevolvedSurface", ODBX, 1 149SWEPTSURFACE, "AcDbSweptSurface", ODBX, 1 150# 151ACSH_BOOLEAN_CLASS, "AcDbShBoolean", ODBX, 0 152ACSH_BOX_CLASS, "AcDbShBox", ODBX, 0 153ACSH_BREP_CLASS, "AcDbShBrep", ODBX, 0 154ACSH_CHAMFER_CLASS, "AcDbShChamfer", ODBX, 0 155ACSH_CONE_CLASS, "AcDbShCone", ODBX, 0 156ACSH_CYLINDER_CLASS, "AcDbShCylinder", ODBX, 0 157ACSH_EXTRUSION_CLASS, "AcDbShExtrusion", ODBX, 0 158ACSH_FILLET_CLASS, "AcDbShFillet", ODBX, 0 159ACSH_HISTORY_CLASS, "AcDbShHistory", ODBX, 0 160ACSH_LOFT_CLASS, "AcDbShLoft", ODBX, 0 161ACSH_PYRAMID_CLASS, "AcDbShPyramid", ODBX, 0 162ACSH_REVOLVE_CLASS, "AcDbShRevolve", ODBX, 0 163ACSH_SPHERE_CLASS, "AcDbShSphere", ODBX, 0 164ACSH_SWEEP_CLASS, "AcDbShSweep", ODBX, 0 165ACSH_TORUS_CLASS, "AcDbShTorus", ODBX, 0 166ACSH_WEDGE_CLASS, "AcDbShWedge", ODBX, 0 167# 168ACDBASSOCPERSSUBENTMANAGER, "AcDbAssocPersSubentManager", ODBX, 0 169ACDBPERSSUBENTMANAGER, "AcDbPersSubentManager", ODBX, 0 170ACDBASSOCNETWORK, "AcDbAssocNetwork", ODBX, 0 171ACDBASSOCACTION, "AcDbAssocAction", ODBX, 0 172ACDBASSOCALIGNEDDIMACTIONBODY, "AcDbAssocAlignedDimActionBody", ODBX, 0 173ACDBASSOCOSNAPPOINTREFACTIONPARAM,"AcDbAssocOsnapPointRefActionParam", ODBX, 0 174ACDBASSOCVERTEXACTIONPARAM, "AcDbAssocVertexActionParam", ODBX, 0 175ACDBASSOCGEOMDEPENDENCY, "AcDbAssocGeomDependency", ODBX, 0 176ACDBASSOCDEPENDENCY, "AcDbAssocDependency", ODBX, 0 177ACDBASSOCDIMDEPENDENCYBODY, "AcDbAssocDimDependencyBody", ODBX, 0 178ACDBBLOCKPARAMDEPENDENCYBODY, "AcDbBlockParameterDependencyBody", ODBX, 0 179# 180ACDBASSOC3POINTANGULARDIMACTIONBODY,"AcDbAssoc3PointAngularDimActionBody", ODBX, 0 181ACDBASSOCALIGNEDIMACTIONBODY, "AcDbAssocAlignedDimActionBody", ODBX, 0 182ACDBASSOCORDINATEDIMACTIONBODY, "AcDbAssocOrdinatedDimActionBody", ODBX, 0 183ACDBASSOCROTATEDDIMACTIONBODY, "AcDbAssocRotatedDimActionBody", ODBX, 0 184# 185ACDBASSOCARRAYMODIFYACTIONBODY, "AcDbAssocArrayModifyActionBody", ODBX, 0 186ACDBASSOCARRAYACTIONBODY, "AcDbAssocArrayActionBody", ODBX, 0 187ACDBASSOCEDGECHAMFERACTIONBODY, "AcDbAssocEdgeChamferActionBody", ODBX, 0 188ACDBASSOCEDGEFILLETACTIONBODY, "AcDbAssocEdgeFilletActionBody", ODBX, 0 189ACDBASSOCMLEADERACTIONBODY, "AcDbAssocMLeaderActionBody", ODBX, 0 190CONTEXTDATAMANAGER, "AcDbContextDataManager", ODBX, 0 191# 192ACDBASSOCBLENDSURFACEACTIONBODY, "AcDbAssocBlendSurfaceActionBody", ODBX, 0 193ACDBASSOCEXTENDSURFACEACTIONBODY, "AcDbAssocExtendSurfaceActionBody", ODBX, 0 194ACDBASSOCEXTRUDEDSURFACEACTIONBODY, "AcDbAssocExtrudedSurfaceActionBody", ODBX, 0 195ACDBASSOCFILLETSURFACEACTIONBODY, "AcDbAssocFilletSurfaceActionBody", ODBX, 0 196ACDBASSOCLOFTEDSURFACEACTIONBODY, "AcDbAssocLoftedSurfaceActionBody", ODBX, 0 197ACDBASSOCNETWORKSURFACEACTIONBODY, "AcDbAssocNetworkSurfaceActionBody", ODBX, 0 198ACDBASSOCOFFSETSURFACEACTIONBODY, "AcDbAssocOffsetSurfaceActionBody", ODBX, 0 199ACDBASSOCPLANESURFACEACTIONBODY, "AcDbAssocPlaneSurfaceActionBody", ODBX, 0 200ACDBASSOCPATCHSURFACEACTIONBODY, "AcDbAssocPatchSurfaceActionBody", ODBX, 0 201ACDBASSOCRESTOREENTITYSTATEACTIONBODY, "AcDbAssocRestoreEntityStateActionBody",ODBX, 0 202ACDBASSOCREVOLVEDSURFACEACTIONBODY, "AcDbAssocRevolvedSurfaceActionBody", ODBX, 0 203ACDBASSOCSWEPTSURFACEACTIONBODY, "AcDbAssocSweptSurfaceActionBody", ODBX, 0 204ACDBASSOCTRIMSURFACEACTIONBODY, "AcDbAssocTrimSurfaceActionBody", ODBX, 0 205# 206ACDBASSOCACTIONPARAM, "AcDbAssocActionParam", ODBX, 0 207ACDBASSOCASMBODYACTIONPARAM, "AcDbAssocAsmbodyActionParam", ODBX, 0 208ACDBASSOCCOMPOUNDACTIONPARAM, "AcDbAssocCompoundActionParam", ODBX, 0 209ACDBASSOCEDGEACTIONPARAM, "AcDbAssocEdgeActionParam", ODBX, 0 210ACDBASSOCFACEACTIONPARAM, "AcDbAssocFaceActionParam", ODBX, 0 211ACDBASSOCPATHACTIONPARAM, "AcDbAssocPathActionParam", ODBX, 0 212ACDBASSOCOBJECTACTIONPARAM, "AcDbAssocObjectActionParam", ODBX, 0 213ACDBASSOCPOINTREFACTIONPARAM, "AcDbAssocPointRefActionParam", ODBX, 0 214# 215ACDBASSOCARRAYMODIFYPARAMETERS, "AcDbAssocArrayModifyParameters", ODBX, 0 216ACDBASSOCARRAYPATHPARAMETERS, "AcDbAssocArrayPathParameters", ODBX, 0 217ACDBASSOCARRAYPOLARPARAMETERS, "AcDbAssocArrayPolarParameters", ODBX, 0 218ACDBASSOCARRAYRECTANGULARPARAMETERS, "AcDbAssocArrayRectangularParameters", ODBX, 0 219# 220ALIGNMENTPARAMETERENTITY, "AcDbBlockAlignmentParameterEntity", ODBX, 1 221BASEPOINTPARAMETERENTITY, "AcDbBlockBasepointParameterEntity", ODBX, 1 222FLIPPARAMETERENTITY, "AcDbBlockFlipParameterEntity", ODBX, 1 223LINEARPARAMETERENTITY, "AcDbBlockLinearParameterEntity", ODBX, 1 224POINTPARAMETERENTITY, "AcDbBlockPointParameterEntity", ODBX, 1 225ROTATIONPARAMETERENTITY, "AcDbBlockRotationParameterEntity", ODBX, 1 226POLARGRIPENTITY, "AcDbBlockPolarGripEntity", ODBX, 1 227XYPARAMETERENTITY, "AcDbBlockXYParameterEntity", ODBX, 1 228# more Dynblocks 229ACDB_BLOCKREPRESENTATION_DATA, "AcDbBlockRepresentationData", ODBX, 0 230BLOCKARRAYACTION, "AcDbBlockArrayAction", ODBX, 0 231BLOCKANGULARCONSTRAINTPARAMETER, "AcDbBlockAngularConstraintParameter", ODBX, 0 232BLOCKDIAMETRICCONSTRAINTPARAMETER, "AcDbBlockDiametricConstraintParameter",ODBX, 0 233BLOCKRADIALCONSTRAINTPARAMETER, "AcDbBlockRadialConstraintParameter", ODBX, 0 234BLOCKALIGNEDCONSTRAINTPARAMETER, "AcDbBlockAlignedConstraintParameter", ODBX, 0 235BLOCKLINEARCONSTRAINTPARAMETER, "AcDbBlockLinearConstraintParameter", ODBX, 0 236BLOCKHORIZONTALCONSTRAINTPARAMETER, "AcDbBlockHorizontalConstraintParameter",ODBX, 0 237BLOCKVERTICALCONSTRAINTPARAMETER, "AcDbBlockVerticalConstraintParameter", ODBX, 0 238BLOCKMOVEACTION, "AcDbBlockMoveAction", ODBX, 0 239BLOCKFLIPACTION, "AcDbBlockFlipAction", ODBX, 0 240BLOCKLOOKUPACTION, "AcDbBlockLookupAction", ODBX, 0 241BLOCKROTATEACTION, "AcDbBlockRotateAction", ODBX, 0 242BLOCKSCALEACTION, "AcDbBlockScaleAction", ODBX, 0 243BLOCKPOLARSTRETCHACTION, "AcDbBlockPolarStretchAction", ODBX, 0 244BLOCKSTRETCHACTION, "AcDbBlockStretchAction", ODBX, 0 245BLOCKLOOKUPPARAMETER, "AcDbBlockLookupParameter", ODBX, 0 246BLOCKPOINTPARAMETER, "AcDbBlockPointParameter", ODBX, 0 247BLOCKROTATIONPARAMETER, "AcDbBlockRotationParameter", ODBX, 0 248BLOCKPOLARPARAMETER, "AcDbBlockPolarParameter", ODBX, 0 249BLOCKPOLARGRIP, "AcDbBlockPolarGrip", ODBX, 0 250BLOCKROTATIONGRIP, "AcDbBlockRotationGrip", ODBX, 0 251BLOCKVISIBILITYGRIP, "AcDbBlockVisibilityGrip", ODBX, 0 252BLOCKXYGRIP, "AcDbBlockXYGrip", ODBX, 0 253BLOCKGRIPLOCATIONCOMPONENT, "AcDbBlockGripExpr", ODBX, 0 254BLOCKALIGNMENTGRIP, "AcDbBlockAlignmentGrip", ODBX, 0 255BLOCKALIGNMENTPARAMETER, "AcDbBlockAlignmentParameter", ODBX, 0 256BLOCKLINEARPARAMETER, "AcDbBlockLinearParameter", ODBX, 0 257BLOCKBASEPOINTPARAMETER, "AcDbBlockBasepointParameter", ODBX, 0 258BLOCKFLIPPARAMETER, "AcDbBlockFlipParameter", ODBX, 0 259BLOCKFLIPGRIP, "AcDbBlockFlipGrip", ODBX, 0 260BLOCKLINEARGRIP, "AcDbBlockLinearGrip", ODBX, 0 261BLOCKLOOKUPGRIP, "AcDbBlockLookupGrip", ODBX, 0 262BLOCKUSERPARAMETER, "AcDbBlockUserParameter", ODBX, 0 263BLOCKXYPARAMETER, "AcDbBlockXYParameter", ODBX, 0 264BLOCKVISIBILITYPARAMETER, "AcDbBlockVisibilityParameter", ODBX, 0 265BLOCKPROPERTIESTABLE, "AcDbBlockPropertiesTable", ODBX, 0 266BLOCKPROPERTIESTABLEGRIP, "AcDbBlockPropertiesTableGrip", ODBX, 0 267ACDB_DYNAMICBLOCKPROXYNODE, "AcDbDynamicBlockProxyNode", ODBX, 0 268ACDB_DYNAMICBLOCKPURGEPREVENTER_VERSION,"AcDbDynamicBlockPurgePreventer", ODBX, 0 269# 270ACDBCURVEPATH, "AcDbCurvePath", SCENEOE, 0 271ACDBMOTIONPATH, "AcDbMotionPath", SCENEOE, 0 272ACDBPOINTPATH, "AcDbPointPath", SCENEOE, 0 273MENTALRAYRENDERSETTINGS, "AcDbMentalRayRenderSettings", SCENEOE, 0 274RAPIDRTRENDERSETTINGS, "AcDbRapidRTRenderSettings", ODBX, 0 275RENDERENVIRONMENT, "AcDbRenderEnvironment", SCENEOE, 0 276RENDERGLOBAL, "AcDbRenderGlobal", SCENEOE, 0 277RENDERENTRY, "AcDbRenderEntry", SCENEOE, 0 278RAPIDRTRENDERENVIRONMENT, "AcDbIBLBackground", SCENEOE, 0 279SKYLIGHT_BACKGROUND, "AcDbSkyBackground", SCENEOE, 0 280IMAGE_BACKGROUND, "AcDbImageBackground", SCENEOE, 0 281SOLID_BACKGROUND, "AcDbSolidBackground", SCENEOE, 0 282GROUND_PLANE_BACKGROUND, "AcDbGroundPlaneBackground", SCENEOE, 0 283GRADIENT_BACKGROUND, "AcDbGradientBackground", SCENEOE, 0 284# 285ACDB_ALDIMOBJECTCONTEXTDATA_CLASS, "AcDbAlignedDimensionObjectContextData",ODBX, 0 286ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS, "AcDbAngularDimensionObjectContextData",ODBX, 0 287ACDB_ANNOTSCALEOBJECTCONTEXTDATA_CLASS, "AcDbAnnotScaleObjectContextData", ODBX, 0 288ACDB_BLKREFOBJECTCONTEXTDATA_CLASS, "AcDbBlkrefObjectContextData", ODBX, 0 289ACDB_DMDIMOBJECTCONTEXTDATA_CLASS, "AcDbDiametricDimensionObjectContextData",ODBX, 0 290ACDB_FCFOBJECTCONTEXTDATA_CLASS, "AcDbFcfObjectContextData", ODBX, 0 291ACDB_LEADEROBJECTCONTEXTDATA_CLASS, "AcDbLeaderObjectContextData", ODBX, 0 292ACDB_MLEADEROBJECTCONTEXTDATA_CLASS, "AcDbMLeaderObjectContextData", ODBX, 0 293ACDB_ORDDIMOBJECTCONTEXTDATA_CLASS, "AcDbOrdinateDimensionObjectContextData", ODBX, 0 294ACDB_RADIMLGOBJECTCONTEXTDATA_CLASS, "AcDbRadialDimensionLargeObjectContextData", ODBX, 0 295ACDB_RADIMOBJECTCONTEXTDATA_CLASS, "AcDbRadialDimensionObjectContextData", ODBX, 0 296ACDB_TEXTOBJECTCONTEXTDATA_CLASS, "AcDbTextObjectContextData", ODBX, 0 297# 298ACDBPOINTCLOUD, "AcDbPointCloud", POINTCLOUD, 1 299ACDBPOINTCLOUDEX, "AcDbPointCloudEx", POINTCLOUD, 1 300ACDBPOINTCLOUDDEF, "AcDbPointCloudDef", POINTCLOUD, 0 301ACDBPOINTCLOUDDEFEX, "AcDbPointCloudDefEx", POINTCLOUD, 0 302ACDBPOINTCLOUDDEF_REACTOR, "AcDbPointCloudDefReactor", POINTCLOUD, 0 303ACDBPOINTCLOUDDEF_REACTOR_EX, "AcDbPointCloudDefReactorEx", POINTCLOUD, 0 304ACDBPOINTCLOUDCOLORMAP, "AcDbPointCloudColorMap", POINTCLOUD, 0 305# 306EXACXREFPANELOBJECT, "ExAcXREFPanelObject", SPECIAL, 0 307NPOCOLLECTION, "AcDbImpNonPersistentObjectsCollection", ODBX, 0 308PARTIAL_VIEWING_FILTER, "OdDbPartialViewingFilter", SPECIAL, 0 309PARTIAL_VIEWING_INDEX, "OdDbPartialViewingIndex", SPECIAL, 0 310LSDEFINITION, "AcDbLSDefinition", DGNLS, 0 311LSSTROKEPATTERNCOMPONENT, "AcDbLSStrokePatternComponent", DGNLS, 0 312LSINTERNALCOMPONENT, "AcDbLSInternalComponent", DGNLS, 0 313LSCOMPOUNDCOMPONENT, "AcDbLSCompoundComponent", DGNLS, 0 314LSPOINTCOMPONENT, "AcDbLSPointComponent", DGNLS, 0 315LSSYMBOLCOMPONENT, "AcDbLSSymbolComponent", DGNLS, 0 316AEC_REFEDIT_STATUS_TRACKER, "AecDbRefEditStatusTracker", AEC60, 0 317%% 318 319/* Create classes on demand. 320 Returns found or new klass->number id (always >=500), <0 on error. 321 -1 out of memory (from dwg_add_class()) 322 -2 unknown class for dxfname. 323 -3 invalid apptype for class. (should not happen) 324*/ 325EXPORT int 326dwg_require_class (Dwg_Data *restrict dwg, const char *const restrict dxfname, const int len) 327{ 328 const struct Dwg_DXFClass* result; 329 for (BITCODE_BL i = 0; i < dwg->num_classes; i++) 330 { 331 Dwg_Class *klass = &dwg->dwg_class[i]; 332 if (strEQ (klass->dxfname, dxfname)) 333 return klass->number; 334 } 335 336 result = in_word_set (dxfname, len); 337 if (result) 338 { 339 switch ((enum apptypes)result->apptype) 340 { 341 case ODBXCLASS: 342 return dwg_add_class (dwg, dxfname, result->cppname, "ObjectDBX Classes", result->isent); 343 case ODBX_OR_A2000CLASS: 344 return dwg_add_class (dwg, dxfname, result->cppname, 345 dwg->header.from_version <= R_2000 ? "AutoCAD 2000" : "ObjectDBX Classes", 346 result->isent); 347 case A2000CLASS: 348 return dwg_add_class (dwg, dxfname, result->cppname, "AutoCAD 2000", result->isent); 349 case SCENEOECLASS: 350 return dwg_add_class (dwg, dxfname, result->cppname, "SCENEOE", result->isent); 351 case ISMCLASS: 352 return dwg_add_class (dwg, dxfname, result->cppname, "ISM", result->isent); 353 case POINTCLOUDCLASS: 354 return dwg_add_class (dwg, dxfname, result->cppname, "AcDbPointCloudObj", result->isent); //appname? 355 case DGNLSCLASS: 356 return dwg_add_class (dwg, dxfname, result->cppname, "AcDgnLS", result->isent); 357 case AEC60CLASS: 358 return dwg_add_class (dwg, dxfname, result->cppname, "AecArchBase60|Product Desc: " 359 "Autodesk Architectural Desktop 2007", result->isent); 360 case EXPRESSCLASS: 361 { 362 char appname[128]; 363 strcpy (appname, dxfname); 364 strcat (appname, "|AutoCAD Express Tool"); 365 return dwg_add_class (dwg, dxfname, result->cppname, appname, result->isent); 366 } 367 case SPECIALCLASS: 368 { 369 char appname[128]; 370 if (strEQc (dxfname, "MLEADERSTYLE")) 371 strcpy (appname, "ACDB_MLEADERSTYLE_CLASS"); 372 else if (strEQc (dxfname, "WIPEOUT")) 373 strcpy (appname, "Wipeout|Product Desc: WipeOut Dbx Application"); 374 else if (strEQc (dxfname, "DIMASSOC")) 375 strcpy (appname, "AcDbDimAssoc|Product Desc: AcDim ARX App For Dimension"); 376 else if (memBEGINc (dxfname, "PARTIAL_VIEWING_")) 377 strcpy (appname, "OdDbPartialViewing|https://www.opendesign.com Teigha(R) Core Db"); 378 else 379 { 380 strcpy (appname, result->cppname); 381 strcat (appname, "|Unknown ARX App"); 382 } 383 return dwg_add_class (dwg, dxfname, result->cppname, appname, result->isent); 384 } 385 break; 386 default: 387 fprintf (stderr, "dxfclass_require: Invalid apptype %d", (int)result->apptype); 388 return -3; 389 } 390 } 391 return -2; 392} 393 394/* 395 * Local variables: 396 * c-file-style: "gnu" 397 * End: 398 * vim: expandtab shiftwidth=4 cinoptions='\:2=2' : 399 */ 400