⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 header.c

📁 AutoCAD DWG-file viewer
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************************************/
/*			COPYRIGHT NOTICE			*/
/*			----------------			*/
/*  All software in this listing remain the strict copyright	*/
/*  of Ilija Kovacevic and cannot be copied or used in any way	*/
/*  except by written permission of Ilija Kovacevic.		*/
/*								*/
/*	Copyright (c) 1992 Ilija Kovacevic			*/
/*	www.kov.com   email ilija@kov.com			*/
/****************************************************************/

#include "dwgin.h"

#define DEFAULT_HEADER_SIZE 0x51e

static unsigned char default_header[ DEFAULT_HEADER_SIZE ] =
	{
	65,67,49,48,48,54,0,0,0,0,0,0,1,3,0,5,0,160,0,0,30,5,0,0,70,5,0,0,218,8,0,
	0,0,0,0,64,218,8,0,0,0,0,0,128,37,0,0,0,0,0,70,5,0,0,37,0,1,0,0,0,70,5,0,0,
	194,0,1,0,0,0,107,5,0,0,187,0,1,0,0,0,45,6,0,0,149,0,0,0,0,0,232,6,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,122,64,0,0,0,0,0,144,114,64,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,122,64,0,0,0,0,
	0,144,114,64,43,227,122,118,140,51,111,64,39,92,136,96,12,153,102,64,0,0,0,0,0,0,0,0,39,92,136,96,12,
	153,118,64,1,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,36,64,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,57,64,0,0,0,0,0,0,8,64,0,0,0,0,0,0,
	36,64,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,217,1,227,112,23,246,63,2,0,2,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,0,0,
	0,0,4,0,0,0,0,0,1,0,97,99,97,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,
	0,0,0,0,0,0,8,64,0,0,0,0,0,0,4,64,0,0,0,0,0,0,36,64,0,0,0,0,0,0,4,64,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,64,0,0,0,0,0,0,8,192,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,
	63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,
	63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,208,7,2,0,0,1,0,1,78,94,37,0,228,56,103,3,78,94,37,0,180,189,103,3,0,0,0,0,208,132,0,0,
	0,0,0,0,208,132,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,43,135,22,217,206,247,163,63,0,0,0,0,0,0,240,63,6,0,0,0,1,0,1,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,105,0,0,0,0,0,232,6,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,73,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,248,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,12,0,12,0,6,0,12,0,12,0,249,0,2,0,0,
	0,232,6,0,0,0,0,6,0,3,0,26,255,33,0,0,0,0,0,218,8,0,0,0,0
	};


//#ifdef DOS
#define convert_INT16( a ) *(a)
#define convert_INT32( a ) *(a)
#define convert_DOUBLE( a ) *(a)
#//endif

#ifdef BIG_ENDIAN
PRIVATE DOUBLE convert_DOUBLE( DOUBLE *number )

{
DOUBLE n;
char *s,*d;

d = ( char * )&n;
s = ( char * )number;
s += 7;
*d++ = *s--;	/* long winded but faster than for loop */
*d++ = *s--;
*d++ = *s--;
*d++ = *s--;
*d++ = *s--;
*d++ = *s--;
*d++ = *s--;
*d = *s;
return( n );
}


PRIVATE INT16 convert_INT16( INT16 *number )

{
INT16 n;
char *s,*d;

d = ( char * )&n;
s = ( char * )number;
s += 1;
*d++ = (*s--)&0xff;
*d = (*s)&0xff;
return( n );
}


PRIVATE INT32 convert_INT32( INT32 *number )

{
INT32 n;
char *s,*d;

d = ( char * )&n;
s = ( char * )number;
s += 3;
*d++ = *s--;
*d++ = *s--;
*d++ = *s--;
*d = *s;
return( n );
}
#endif


PRIVATE void show_time_value( long days,long millisecs )	/* print AutoCAD time/date out to debug file */

{
int hours,mins;

dprintf( " days %ld millisecs %ld ",days,millisecs );
hours = ( int )( millisecs/3600000L );
millisecs -= hours*3600000L;
mins = ( int )( millisecs/60000L );
millisecs -= mins*60000L;
dprintf( "%ld days  %d:%d:%lf\n",days,hours,mins,millisecs/1000.0 );
}


AcadHeader *AcadHeader__create( void )

{
return( ( AcadHeader * )get_memory( sizeof( AcadHeader ) ) );
}


PUBLIC void AcadHeader__delete( AcadHeader *me )

{
free( ( char * )me );
}


PUBLIC void AcadHeader__dump_to_debug_file( AcadHeader *me )

{
#ifndef WIN31
dprintf( "********** HIDDEN SYSTEM PARAMETERS ***********\n" );
dprintf( "ENTITIES START      %8lxH",me->entities_start );
dprintf( "        ENTITIES    %d\n",me->entities );
dprintf( "BLOCK NAMES START   %8lxH",me->block_names_start );
dprintf( "        BLOCKS      %d\n",me->blocks );
dprintf( "LAYERS START        %8lxH",me->layers_start );
dprintf( "        LAYERS      %d size %xH\n",me->layers,me->layer_size );
dprintf( "FONT STYLES START   %8lxH",me->font_styles_start );
dprintf( "        FONT STYLES %d size %xH\n",me->styles,me->font_styles_size );
dprintf( "LINE TYPES START    %8lxH",me->line_types_start );
dprintf( "        LINE TYPES  %d size %xH\n",me->line_types,me->line_type_size );
dprintf( "VIEWS START         %8lxH",me->views_start );
dprintf( "        VIEWS       %d size %xH\n",me->views,me->view_size );
dprintf( "DWGMGR START        %8lxH\n",me->dwgmgr_start );
if ( __drawing->acad10 OR __drawing->acad11 )
	{
	dprintf( "UCSS START          %8lxH",me->ucss_start );
	dprintf( "        UCS COUNT   %d size %xH\n",me->ucss,me->ucss_size );
	dprintf( "VIEWPORTS START     %8lxH",me->viewports_start );
	dprintf( "        VIEWPORTS   %d size %xH\n",me->viewports,me->viewports_size );
	}
if ( __drawing->acad11 )
	{
        dprintf( "APPLICATIONS %d START %8lxH SIZE %xH\n",me->applications,me->applications_start,me->applications_size );
	dprintf( "DIMSTYLES %d START %8lxH SIZE %xH\n",me->dimstyles,me->dimstyles_start,me->dimstyles_size );
	}
dprintf( "BLOCKS START        %8lxH",me->blocks_start );
dprintf( "        BLOCKS      %d\n",me->blocks );
dprintf( "INDIRECTS START     %8lxH",me->indirects_start );

dprintf( "\nNEXT ENTITY %d\n",me->next_entity );

dprintf( "*********** SYSTEM PARAMETERS ***********\n" );
dprintf( "ACADVER [%s]\n",me->acadver );
dprintf( "ANGBASE = %lf\n",me->angbase );
dprintf( "ANGDIR = " );
if ( me->angdir ) dprintf( "CLOCKWISE\n" );
else dprintf( "ANTICLOCKWISE\n" );
dprintf( "ATTMODE = " );
if ( me->attmode EQ 0 ) dprintf( "NONE\n" );
else if ( me->attmode EQ 1 ) dprintf( "NORMAL\n" );
else if ( me->attmode EQ 2 ) dprintf( "ALL\n" );
dprintf( "AUNITS = " );
switch( me->aunits )
	{
	case 0 :dprintf( "DECIMAL DEGREES\n" );
		break;
	case 1 :dprintf( "DEGREES/MINUTES/SECONDS\n" );
		break;
	case 2 :dprintf( "GRADS\n" );
		break;
	case 3 :dprintf( "RADIANS\n" );
		break;
	case 4 :dprintf( "SURVEYOR'S UNITS\n" );
		break;
	}		
dprintf( "AUPREC = %d\n",me->auprec );
dprintf( "AXIS = " );
if ( me->axismode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "AXISUNIT = %lf,%lf\n",me->axisunit_x,me->axisunit_y );
dprintf( "BLIPMODE = " );
if ( me->blipmode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "CECOLOR = %d\n",me->cecolor );
dprintf( "CELTYPE = " );
if ( me->celtype ) dprintf( "BYBLOCK\n" );
else dprintf( "BYLAYER\n" );
dprintf( "CHAMFERA = %lf\n",me->chamfera );
dprintf( "CHAMFERB = %lf\n",me->chamferb );
dprintf( "CLAYER = %d\n",me->clayer );
dprintf( "COORDS = " );
if ( me->coords EQ 0 ) dprintf( "STATIC\n" );
else if ( me->coords EQ 1 ) dprintf( "CONTINUOUS UPDATE\n" );
else dprintf( "d<a FORMAT\n" );

dprintf( "DIMSTYLE %xH\n",me->dimstyle&0xff );
dprintf( "DIMALT = " );
if ( me->dimalt ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMALTD = " );
if ( me->dimaltd ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMALTF = %lf\n",me->dimaltf );
dprintf( "DIMASO = " );
if ( me->dimaso ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMASZ = %lf\n",me->dimasz );
dprintf( "DIMCEN = %lf\n",me->dimcen );
dprintf( "DIMDLE = %lf\n",me->dimdle );
dprintf( "DIMDLI = %lf\n",me->dimdli );
dprintf( "DIMEXE = %lf\n",me->dimexe );
dprintf( "DIMEXO = %lf\n",me->dimexo );
dprintf( "DIMLFACDIM = %lf\n",me->dimlfac );
dprintf( "DIMLIM = " );
if ( me->dimlim ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMRND = %lf\n",me->dimrnd );
dprintf( "DIMSCALE = %lf\n",me->dimscale );
dprintf( "DIMSE2 = " );
if ( me->dimse2 ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMSHO = " );
if ( me->dimsho ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMTAD = " );
if ( me->dimtad ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMTIH = " );
if ( me->dimtih ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMTH = %lf\n",me->dimtm );
dprintf( "DIMTOH = " );
if ( me->dimtoh ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMTOL = " );
if ( me->dimtol ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMTP = %lf\n",me->dimtp );
dprintf( "DIMTSZ = " );
if ( me->dimtsz ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "DIMTXT = %lf\n",me->dimtxt );
dprintf( "DIMZIN = " );
if ( me->dimzin ) dprintf( "ON\n" );
else dprintf( "OFF\n" );

dprintf( "DRAGMODE = " );
if ( me->dragmode EQ 2 ) dprintf( "AUTO\n" );
else if ( me->dragmode EQ 0 ) dprintf( "OFF\n" );
else dprintf( "ON\n" );

dprintf( "ELEVATION = %lf\n",me->elevation );
dprintf( "EXTMAX = %lf,%lf,%lf\n",me->extmin_x,me->extmin_y,me->extmax_z );
dprintf( "EXTMIN = %lf,%lf,%lf\n",me->extmax_x,me->extmax_y,me->extmax_z );

dprintf( "FASTZOOM = " );
if ( me->fastzoom ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "FASTCIRCLE = %d\n",me->fastcircle );
dprintf( "FILLETRAD = %lf\n",me->filletrad );
dprintf( "FILLMODE = " );
if ( me->fillmode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "FLATLAND = " );
if ( me->flatland ) dprintf( "TRUE\n" );
else dprintf( "FALSE\n" );
dprintf( "GRID = " );
if ( me->gridmode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "GRIDUNIT = %lf,%lf\n",me->gridunit_x,me->gridunit_y );

dprintf( "INSBASE = %lf,%lf\n",me->insbase_x,me->insbase_y );
dprintf( "LIMCHECK = " );
if ( me->limcheck ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "LIMMAX = %lf,%lf\n",me->limmax_x,me->limmax_y );
dprintf( "LIMMIN = %lf,%lf\n",me->limmin_x,me->limmin_y );
dprintf( "LTSCALE = %lf\n",me->ltscale );
dprintf( "LUNITS = " );
switch( me->lunits )
	{
	case 1 :dprintf( "SCIENTIFIC\n" );
		break;
	case 2 :dprintf( "DECIMAL\n" );
		break;
	case 3 :dprintf( "ENGINEERING\n" );
		break;
	case 4 :dprintf( "ARCHITECTURAL\n" );
		break;
	}
dprintf( "LUPREC = %d\n",me->luprec );
dprintf( "MENU = [%s]\n",me->menu );
dprintf( "MIRRTEXT = " );
if ( me->mirrtext ) dprintf( "ON\n" );
else dprintf( "OFF\n" );

dprintf( "ORTHOMODE = " );
if ( me->orthomode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "OSMODE = %d\n",me->osmode );
dprintf( "PDMODE = %d\n",me->pdmode );
dprintf( "PDSIZE = %lf\n",me->pdsize );

dprintf( "QTEXTMODE = " );
if ( me->qtextmode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );

dprintf( "REGENMODE = " );
if ( me->regenmode ) dprintf( "AUTO\n" );
else dprintf( "OFF\n" );

dprintf( "SKETCHINC = %lf\n",me->sketchinc );

dprintf( "SKPOLY = " );
if ( me->skpoly ) dprintf( "ON\n" );
else dprintf( "OFF\n" );

dprintf( "SNAP = " );
if ( me->snapmode ) dprintf( "ON\n" );
else dprintf( "OFF\n" );

dprintf( "SNAPANG = %lf\n",me->snapang );
dprintf( "SNAPBASE = %lf,%lf\n",me->snapbase_x,me->snapbase_y );

dprintf( "SNAPSTYLE = " );
if ( me->snapstyle ) dprintf( "ISOMETRIC\n" );
else dprintf( "STANDARD\n" );

dprintf( "SNAPUNIT = %lf,%lf\n",me->snapunit_x,me->snapunit_y );

dprintf( "TEXTSIZE = %lf\n",me->text_size );

dprintf( "THICKNESS = %lf\n",me->thickness );
dprintf( "TRACEWID = %lf\n",me->tracewid );
dprintf( "TDCREAT = " );
show_time_value( me->tdcreate_days,me->tdcreate_fraction );
dprintf( "TDUPDATE = " );
show_time_value( me->tdupdate_days,me->tdupdate_fraction );
dprintf( "TDINDWG = " );
show_time_value( me->tdindwg_days,me->tdindwg_fraction );
dprintf( "TDUSER = " );
show_time_value( me->tdusrtimer_days,me->tdusrtimer_fraction );
dprintf( "USRTIMER = " );
if ( me->usrtimer ) dprintf( "ON\n" );
else dprintf( "OFF\n" );
dprintf( "VIEWCTR = %lf,%lf\n",me->viewctr_x,me->viewctr_y );
dprintf( "VDIR = %lf,%lf,%lf\n",me->viewdir_x,me->viewdir_y,me->viewdir_z );
dprintf( "VIEWSIZE = %lf\n",me->viewsize );
if ( __drawing->acad10 OR __drawing->acad11 )
	{
	dprintf( "\tWORLDVIEW %xH\n",me->worldview );
	}
if ( __drawing->acad11 )
	{
	dprintf( "\tDIMCLRD %d\n",me->dimclrd );
	dprintf( "\tDIMCLRE %d\n",me->dimclre );
	dprintf( "\tDIMCLRT %d\n",me->dimclrt );
	dprintf( "\tSHADEDGE %xH\n",me->shadedge );
	dprintf( "\tSHADEDIF %d\n",me->shadedif );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -