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

📄 propmod.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* * propmod.c * Copyright (C) 2001-2003 A.J. van Os; Released under GPL * * Description: * Build, read and destroy a list (array) of Word property modifiers */#include <stdio.h>#include <string.h>#include "antiword.h"#if defined(DEBUG)#define ELEMENTS_TO_ADD	 3#else#define ELEMENTS_TO_ADD	30#endif /* DEBUG *//* Variables needed to write the property modifier list */static UCHAR	**ppAnchor = NULL;static size_t	tNextFree = 0;static size_t	tMaxElements = 0;/* * vDestroyPropModList - destroy the property modifier list */voidvDestroyPropModList(void){	size_t	tIndex;	DBG_MSG("vDestroyPropModList");	/* Free all the elements of the list */	for (tIndex = 0; tIndex < tNextFree; tIndex++) {		ppAnchor[tIndex] = xfree(ppAnchor[tIndex]);	}	/* Free the list itself */	ppAnchor = xfree(ppAnchor);	/* Reset all control variables */	tNextFree = 0;	tMaxElements = 0;} /* end of vDestroyPropModList *//* * vAdd2PropModList - add an element to the property modifier list */voidvAdd2PropModList(const UCHAR *aucPropMod){	size_t	tSize, tLen;	fail(aucPropMod == NULL);	NO_DBG_MSG("vAdd2PropModList");	if (tNextFree >= tMaxElements) {		tMaxElements += ELEMENTS_TO_ADD;		tSize = tMaxElements * sizeof(UCHAR **);		ppAnchor = xrealloc(ppAnchor, tSize);	}	NO_DBG_DEC(tNextFree);	tLen = 2 + (size_t)usGetWord(0, aucPropMod);	NO_DBG_HEX(tLen);	NO_DBG_PRINT_BLOCK(pucPropMod, tLen);	ppAnchor[tNextFree] = xmalloc(tLen);	memcpy(ppAnchor[tNextFree], aucPropMod, tLen);	tNextFree++;} /* end of vAdd2PropModList *//* * aucReadPropModListItem - get an item of the property modifier list */const UCHAR *aucReadPropModListItem(USHORT usPropMod){	static UCHAR	aucBuffer[4];	size_t	tIndex;	if (usPropMod == IGNORE_PROPMOD) {		/* This Properties Modifier must be ignored */		return NULL;	}	if (!odd(usPropMod)) {		/* Variant 1: The information is in the input ifself */		aucBuffer[0] = 2;		aucBuffer[1] = 0;		aucBuffer[2] = (UCHAR)((usPropMod & 0x00fe) >> 1);		aucBuffer[3] = (UCHAR)((usPropMod & 0xff00) >> 8);		return aucBuffer;	}	if (ppAnchor == NULL) {		/* No information available */		return NULL;	}	/* Variant 2: The input contains an index */	tIndex = (size_t)(usPropMod >> 1);	if (tIndex >= tNextFree) {		DBG_HEX(usPropMod);		DBG_DEC(tIndex);		DBG_DEC(tNextFree);		return NULL;	}	return ppAnchor[tIndex];} /* end of aucGetPropModListItem */

⌨️ 快捷键说明

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