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

📄 meta.c

📁 下载来的一个看图软件的源代码
💻 C
字号:
/* libwmf (api/meta.c): library for wmf conversion   Copyright (C) 2000 - various; see CREDITS, ChangeLog, and sources   The libwmf Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 of the   License, or (at your option) any later version.   The libwmf Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the libwmf Library; see the file COPYING.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */#ifdef HAVE_CONFIG_H#include "wmfconfig.h"#endif#include <stdio.h>#include "wmfdefs.h"/** * @internal */U16 wmf_read_16 (wmfAPI* API){	int i1;	int i2;	U16 bb = 0;	if (API->bbuf.read == 0)	{	WMF_ERROR (API,"wmf_read_16: no input stream open!");		API->err = wmf_E_BadFile;	}	else	{	i1 = WMF_READ (API);		i2 = WMF_READ (API);		if ((i1 == EOF) || (i2 == EOF))		{	WMF_DEBUG (API,"wmf_read_16: (EOF)");			API->err = wmf_E_EOF;		}		else bb = (((U16) i2) << 8) + ((U16) i1);	}	return (bb);}/** * @internal */U32 wmf_read_32 (wmfAPI* API,U16* u16a,U16* u16b){	U16 w1;	U16 w2;	U32 ww = 0;	w1 = wmf_read_16 (API);	w2 = wmf_read_16 (API);	if (u16a) (*u16a) = w1;	if (u16b) (*u16b) = w2;	if (API->err == wmf_E_None) ww = WMF_U16_U16_to_U32 (w1,w2);	return (ww);}/** * Compute the Aldus checksum of the metafile's header. *  * @param API the API handle *  * (Must read the header first, either via wmf_scan() or by calling wmf_header_read() directly.) *  * @return Returns the checksum. */U16 wmf_aldus_checksum (wmfAPI* API){	U16 Checksum = 0;	Checksum ^=  API->File->pmh->Key & 0x0000FFFFUL;	Checksum ^= (API->File->pmh->Key & 0xFFFF0000UL) >> 16;	Checksum ^=  API->File->pmh->Handle;	Checksum ^=  API->File->pmh->Left;	Checksum ^=  API->File->pmh->Top;	Checksum ^=  API->File->pmh->Right;	Checksum ^=  API->File->pmh->Bottom;	Checksum ^=  API->File->pmh->Inch;	Checksum ^=  API->File->pmh->Reserved & 0x0000FFFFUL;	Checksum ^= (API->File->pmh->Reserved & 0xFFFF0000UL) >> 16;	return (Checksum);} /** * Read the metafile's header. *  * @param API the API handle *  * (Must read the header first, either via wmf_scan() or by calling wmf_header_read() directly.) *  * @return Returns the library error state (\b wmf_E_None on success). *         Possible library error states of \b wmf_E_Glitch, \b wmf_E_BadFormat (bad header), *         \b wmf_E_BadFile (no open input stream) and \b wmf_E_EOF (premature end-of-file). */wmf_error_t wmf_header_read (wmfAPI* API){	U16 u16a;	U16 u16b;	if ((API->File->pmh->Key = wmf_read_32 (API,&u16a,&u16b)) == 0x9ac6cdd7)	{	API->File->placeable = 1;		API->File->pmh->Handle	= wmf_read_16 (API);		u16a = wmf_read_16 (API);  API->File->pmh->Left   = U16_2_S16 (u16a);		u16a = wmf_read_16 (API);  API->File->pmh->Top    = U16_2_S16 (u16a);		u16a = wmf_read_16 (API);  API->File->pmh->Right  = U16_2_S16 (u16a);		u16a = wmf_read_16 (API);  API->File->pmh->Bottom = U16_2_S16 (u16a);		API->File->pmh->Inch     = wmf_read_16 (API);		API->File->pmh->Reserved = wmf_read_32 (API,0,0);		API->File->pmh->Checksum = wmf_read_16 (API);		API->File->wmfheader->FileType   = wmf_read_16 (API);		API->File->wmfheader->HeaderSize = wmf_read_16 (API);	}	else	{	API->File->placeable = 0;		API->File->pmh->Key = 0;		API->File->pmh->Handle   = 0;		API->File->pmh->Left     = 0;		API->File->pmh->Top      = 0;		API->File->pmh->Right    = 0; /* was 6000 */		API->File->pmh->Bottom   = 0; /* was 6000 */		API->File->pmh->Inch     = 0;		API->File->pmh->Reserved = 0;		API->File->pmh->Checksum = 0;		API->File->wmfheader->FileType   = u16a; /* from key-check above */		API->File->wmfheader->HeaderSize = u16b;	}	if (ERR (API)) return (API->err);	if (API->File->wmfheader->HeaderSize == 9)	{	API->File->wmfheader->Version       = wmf_read_16 (API);		API->File->wmfheader->FileSize      = wmf_read_32 (API,0,0);		API->File->wmfheader->NumOfObjects  = wmf_read_16 (API);		API->File->wmfheader->MaxRecordSize = wmf_read_32 (API,0,0);		API->File->wmfheader->NumOfParams   = wmf_read_16 (API);		if (API->bbuf.tell == 0)		{	WMF_ERROR (API,"wmf_header_read: Glitch! No tell() function!");			API->err = wmf_E_Glitch;		}		else		{	API->File->pos = WMF_TELL (API);		}	}	else	{	WMF_ERROR (API,"wmf_header_read: this isn't a wmf file");		API->err = wmf_E_BadFormat;	}	return (API->err);}

⌨️ 快捷键说明

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