📄 propmod.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 + -