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

📄 wbxmlelm.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:

		/* Find last element */
		while ((pTemp->pNextElement)!=NULL)
		{
			pTemp=(pTemp->pNextElement);
		}

		/* Add element last to list */
		pTemp->pNextElement=*ppContent;
	}

	*ppContent=NULL;
}


/*========================================================================
	XML_GetContent
==========================================================================*/
pELEMENTTYPE XML_GetContent (pELEMENTTYPE pElement)
{
	return ((pCONTENTELEMENT) (pElement))->pContent;
}


/*========================================================================
	XML_CreateInlineText
==========================================================================*/
pELEMENTTYPE XML_CreateInlineText (WCHAR** ppwchString)
{
	/* Check if data defined */
	if ((ppwchString!=NULL)&&(*ppwchString!=NULL))
	{
		/* Create element */
		pI_TEXTELEMENT pElement=NEWSTRUCT(I_TEXTELEMENT);

		#ifndef HAS_SETJMP
		if (pElement!=NULL)
		{
		#endif

			/* Store attributes */
			pElement->iType=Type_Inline_Text;
			pElement->pNextElement=NULL;
			pElement->pwchTextData=*ppwchString;
			*ppwchString=NULL;

		#ifndef HAS_SETJMP
		}
		else
		{
			/* Delete string */
			DEALLOC (ppwchString);
		}
		#endif

		/* Cast to super type and return */
		return (pELEMENTTYPE) pElement;
	}
	return NULL;
}


/*========================================================================
	XML_CreateTableText
==========================================================================*/
pELEMENTTYPE XML_CreateTableText (UINT32 iTableRef)
{
	/* Create element */
	pT_TEXTELEMENT pElement=NEWSTRUCT(T_TEXTELEMENT);

	#ifndef HAS_SETJMP
	if (pElement!=NULL)
	{
	#endif

		/* Store attributes */
		pElement->iType=Type_Table_Text;
		pElement->pNextElement=NULL;
		pElement->iTableRef=iTableRef;

	#ifndef HAS_SETJMP
	}
	#endif

	/* Cast to super type and return */
	return (pELEMENTTYPE) pElement;
}


/*========================================================================
	XML_DeleteText
==========================================================================*/
void XML_DeleteText (pELEMENTTYPE* ppText)
{
	if ((ppText!=NULL)&&(*ppText!=NULL))
	{
		if ((*ppText)->iType==Type_Inline_Text)
		{
			/* Remove the string */
			DEALLOC(& ((pI_TEXTELEMENT)(*ppText))->pwchTextData);

			DEALLOC(ppText);
		}
		else if ((*ppText)->iType==Type_Table_Text)
		{
			DEALLOC(ppText);
		}
	}
}


/*========================================================================
	XML_CreateExt
==========================================================================*/
pELEMENTTYPE XML_CreateExt (WCHAR** ppwchString, BYTE bType)
{
	UINT16 iType=0;
	pEXT_ELEMENT pElement=NULL;

	/* Check if data defined */
	if (ppwchString!=NULL)
	{
		/* Get type */
		switch (bType)
		{
		case GLOBAL_EXT_I_0:
		case GLOBAL_EXT_T_0:
		case GLOBAL_EXT_0:
			iType=Type_Ext_0;
			break;
		case GLOBAL_EXT_I_1:
		case GLOBAL_EXT_T_1:
		case GLOBAL_EXT_1:
			iType=Type_Ext_1;
			break;
		case GLOBAL_EXT_I_2:
		case GLOBAL_EXT_T_2:
		case GLOBAL_EXT_2:
			iType=Type_Ext_2;
			break;
		default:
			return NULL;
		}

		/* Create element */
		pElement=NEWSTRUCT(EXT_ELEMENT);

		#ifndef HAS_SETJMP
		if (pElement!=NULL)
		{
		#endif
			
			/* Store attributes */
			pElement->iType=iType;
			pElement->pNextElement=NULL;
			pElement->pwchName=*ppwchString;
			*ppwchString=NULL;

		#ifndef HAS_SETJMP
		}
		else
		{
			/* Delete string */
			DEALLOC (ppwchString);
		}
		#endif

		/* Cast to super type and return */
		return (pELEMENTTYPE) pElement;
	}
	return NULL;
}


/*========================================================================
	XML_DeleteExt
==========================================================================*/
void XML_DeleteExt (pELEMENTTYPE* ppExt)
{
	if ((ppExt!=NULL)&&(*ppExt!=NULL))
	{
		if( ((*ppExt)->iType==Type_Ext_0) ||
			((*ppExt)->iType==Type_Ext_1) ||
			((*ppExt)->iType==Type_Ext_2) )
		{
			/* Remove the string */
			DEALLOC(& ((pEXT_ELEMENT)(*ppExt))->pwchName);

			DEALLOC(ppExt);
		}
	}
}


/*========================================================================
	XML_CreateEntity
==========================================================================*/
pELEMENTTYPE XML_CreateEntity (UINT32 iEntity)
{
	/* Create element */
	pENTITY pElement=NEWSTRUCT(ENTITY);

	#ifndef HAS_SETJMP
	if (pElement!=NULL)
	{
	#endif
		
		/* Store attributes */
		pElement->iType=Type_Entity;
		pElement->pNextElement=NULL;
		pElement->iEntity=iEntity;

	#ifndef HAS_SETJMP
	}
	#endif

	/* Cast to super type and return */
	return (pELEMENTTYPE) pElement;
}


/*========================================================================
	XML_DeleteEntity
==========================================================================*/
void XML_DeleteEntity (pELEMENTTYPE* ppEntity)
{
	if ((ppEntity!=NULL)&&(*ppEntity!=NULL))
	{
		if ((*ppEntity)->iType==Type_Entity)
		{
			DEALLOC(ppEntity);
		}
	}
}


/*========================================================================
	XML_CreateOpaque
==========================================================================*/
pELEMENTTYPE XML_CreateOpaque (BYTE** ppbData, UINT32 iLength)
{
	/* Check if data defined */
	if (ppbData!=NULL)
	{
		/* Create element */
		pXMLOPAQUE pElement=NEWSTRUCT(XMLOPAQUE);

		#ifndef HAS_SETJMP
		if (pElement!=NULL)
		{
		#endif
			
			/* Store attributes */
			pElement->iType=Type_Opaque;
			pElement->pNextElement=NULL;
			pElement->iLength=iLength;
			pElement->pbData=*ppbData;
			*ppbData=NULL;

		#ifndef HAS_SETJMP
		}
		#endif

		/* Cast to super type and return */
		return (pELEMENTTYPE) pElement;
	}
	return NULL;
}


/*========================================================================
	XML_DeleteOpaque
==========================================================================*/
void XML_DeleteOpaque (pELEMENTTYPE* ppOpaque)
{
	if ((ppOpaque!=NULL)&&(*ppOpaque!=NULL))
	{
		if ((*ppOpaque)->iType==Type_Opaque)
		{
			/* Delete data */
			DEALLOC(& ((pXMLOPAQUE)(*ppOpaque))->pbData);

			DEALLOC(ppOpaque);
		}
	}
}


/*========================================================================
	XML_GetNextElement
==========================================================================*/
pELEMENTTYPE XML_GetNextElement (pELEMENTTYPE pElement)
{
	if (pElement!=NULL)
	{
		return pElement->pNextElement;
	}
	return NULL;
}


/*========================================================================
	XML_DeleteElement
==========================================================================*/
void XML_DeleteElement (pELEMENTTYPE* ppElement, pWBXMLDECODESTR pDecStr)
{
	if (*ppElement!=NULL)
	{
		/* Check type */
		switch ((*ppElement)->iType)
		{

		/* Global elements */
		case Type_Inline_Text:
		case Type_Table_Text:
			XML_DeleteText (ppElement);
			break;
		case Type_Ext_0:
		case Type_Ext_1:
		case Type_Ext_2:
			XML_DeleteExt (ppElement);
			break;
		case Type_Entity:
			XML_DeleteEntity (ppElement);
			break;
		case Type_Opaque:
			XML_DeleteOpaque (ppElement);
			break;
		case Type_ContentElement:
			XML_DeleteElementList(& ((pCONTENTELEMENT) (*ppElement))->pContent, pDecStr);
			DEALLOC(ppElement);
			break;

		/* Application specific elements */
		default:
			pDecStr->DTD_DeleteElement(pDecStr,ppElement);
			break;
		}
	}
}


/*========================================================================
	XML_DeleteElementList
==========================================================================*/
void XML_DeleteElementList (pELEMENTTYPE* ppElement, pWBXMLDECODESTR pDecStr)
{
	if (ppElement!=NULL)
	{
		/* Get first element */
		pELEMENTTYPE pTemp=NULL;

		/* Delete all elements on this level */
		while (*ppElement!=NULL)
		{
			pTemp=*ppElement;

			*ppElement=(*ppElement)->pNextElement;

			XML_DeleteElement(&pTemp,pDecStr);
		}
	}
}


/*========================================================================
	XML_AddElementToHead
==========================================================================*/
void XML_AddElementToHead (pELEMENTTYPE* ppElementList, pELEMENTTYPE pElement)
{
	if ((pElement!=NULL)&&(ppElementList!=NULL))
	{
		/* Add first in existing list */
		pElement->pNextElement=*ppElementList;

		*ppElementList=pElement;	
	}
}


/*========================================================================
	XML_AddElementToEnd
==========================================================================*/
void XML_AddElementToEnd (pELEMENTTYPE* ppElementList, pELEMENTTYPE pElement)
{
	if ((pElement!=NULL)&&(ppElementList!=NULL))
	{
		pElement->pNextElement=NULL;

		if (*ppElementList==NULL)
		{
			/* List is empty */
			*ppElementList=pElement;
		}
		else
		{
			pELEMENTTYPE pTemp=*ppElementList;

			/* Find last element */
			while (pTemp->pNextElement!=NULL)
			{
				pTemp=pTemp->pNextElement;
			}

			/* Append element to list */
			pTemp->pNextElement=pElement;
		}
	}
}

⌨️ 快捷键说明

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