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

📄 rowlist.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* * rowlist.c * Copyright (C) 1998-2004 A.J. van Os; Released under GPL * * Description: * Build, read and destroy a list of Word table-row information */#include <stdlib.h>#include <string.h>#include "antiword.h"/* * Private structure to hide the way the information * is stored from the rest of the program */typedef struct row_desc_tag {	row_block_type		tInfo;	struct row_desc_tag	*pNext;} row_desc_type;/* Variables needed to write the Row Information List */static row_desc_type	*pAnchor = NULL;static row_desc_type	*pRowLast = NULL;/* Variable needed to read the Row Information List */static row_desc_type	*pRowCurrent = NULL;/* * vDestroyRowInfoList - destroy the Row Information List */voidvDestroyRowInfoList(void){	row_desc_type	*pCurr, *pNext;	DBG_MSG("vDestroyRowInfoList");	/* Free the Row Information List */	pCurr = pAnchor;	while (pCurr != NULL) {		pNext = pCurr->pNext;		pCurr = xfree(pCurr);		pCurr = pNext;	}	pAnchor = NULL;	/* Reset all control variables */	pRowLast = NULL;	pRowCurrent = NULL;} /* end of vDestroyRowInfoList *//* * vAdd2RowInfoList - Add an element to the Row Information List */voidvAdd2RowInfoList(const row_block_type *pRowBlock){	row_desc_type	*pListMember;	short		*psTmp;	int		iIndex;	fail(pRowBlock == NULL);	if (pRowBlock->ulFileOffsetStart == FC_INVALID ||	    pRowBlock->ulFileOffsetEnd == FC_INVALID ||	    pRowBlock->ulFileOffsetStart == pRowBlock->ulFileOffsetEnd) {		DBG_HEX_C(pRowBlock->ulFileOffsetStart != FC_INVALID,			pRowBlock->ulFileOffsetStart);		DBG_HEX_C(pRowBlock->ulFileOffsetEnd != FC_INVALID,			pRowBlock->ulFileOffsetEnd);		return;	}	NO_DBG_HEX(pRowBlock->ulFileOffsetStart);	NO_DBG_HEX(pRowBlock->ulFileOffsetEnd);	NO_DBG_DEC(pRowBlock->ucNumberOfColumns);	/* Create the new list member */	pListMember = xmalloc(sizeof(row_desc_type));	/* Fill the new list member */	pListMember->tInfo = *pRowBlock;	pListMember->pNext = NULL;	/* Correct the values where needed */	for (iIndex = 0, psTmp = pListMember->tInfo.asColumnWidth;	     iIndex < (int)pListMember->tInfo.ucNumberOfColumns;	     iIndex++, psTmp++) {		if (*psTmp < 0) {			*psTmp = 0;			DBG_MSG("The column width was negative");		}	}	/* Add the new member to the list */	if (pAnchor == NULL) {		pAnchor = pListMember;		pRowCurrent = pListMember;	} else {		fail(pRowLast == NULL);		pRowLast->pNext = pListMember;	}	pRowLast = pListMember;} /* end of vAdd2RowInfoList *//* * Get the next item in the Row Information List */const row_block_type *pGetNextRowInfoListItem(void){	const row_block_type	*pItem;	if (pRowCurrent == NULL) {		return NULL;	}	pItem = &pRowCurrent->tInfo;	pRowCurrent = pRowCurrent->pNext;	return pItem;} /* end of pGetNextRowInfoListItem */

⌨️ 快捷键说明

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