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

📄 browser.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 3 页
字号:
		{
			/*缩进*/
			if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
			{
				if (wCurCol == 0)
				{
					if (pBrowserer->pBrwInfo->byTabGrade == 0)
					{
						wCurCol = BROWSER_TAB_LENGTH;
						pBrowserer->pBrwInfo->byTabGrade = 1;
					}
					else
					{
						wCurCol = pBrowserer->pBrwInfo->wTabWidth;
					}
				}
			}
			/*累加列宽*/
			wCurCol += wUnitWidth;
			/*拨动指针*/
			pData += wMoveLen;
		}
	}
calcEnd:
	dwTotalLine = dwCurLine - (*line) + 1;
	(*line) = dwCurLine;
	(*col) = wCurCol;

	//释放堆栈
	BROWSER_STACK_FREE(handle, sizeof(MBrowserInfo));
	BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);

	return dwTotalLine;
}

/*过滤器*/
UINT BrowserFilter(MBrowser *handle, UINT8 *pString,UINT uOption)
{
	MUnitInfo* pUnit;
	UINT uTypt,ret;
	UINT (*ProcessRule)(MBrowser*,UINT8*,UINT,MUnitInfo*);

	if ((!uOption) || (handle->pBrwInfo->fpProcessRule == NULL))
		return 0;
	pUnit = BROWSER_STACK_ALLOC(handle, sizeof(MUnitInfo));
	ProcessRule = handle->pBrwInfo->fpProcessRule;
	ret = 0;
	uTypt = ProcessRule(handle,pString,BROWSER_SCANNING,pUnit);
	if (uTypt & uOption)
	{
		ret = pUnit->uMemLen;
	}
	BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
	return ret;
}

/************************************************************************/
/* 函数名称: BrowserIsMarking                                           */
/* 函数描述: 返回浏览器有无mark块                                       */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/* 返回值  :                                                            */
/*          TRUE,FALSE	                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-15    gaolinhui      1.0    创建	                            */
/************************************************************************/
BOOL BrowserIsMarking(MBrowser *handle)
{
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;
	if(handle->pBrwInfo->wStates&BROWSER_STATE_MARKING)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}


/************************************************************************/
/* 函数名称: BrowserGetMarkPos                                          */
/* 函数描述: 返回浏览器Mark起止位置                                     */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/*			pStart			-	Mark头的位置							*/
/*			pEnd			-	Mark尾的位置							*/
/* 返回值  :                                                            */
/*          无			                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-15    gaolinhui      1.0    创建	                            */
/************************************************************************/
BOOL BrowserGetMarkPos(MBrowser *handle,UINT8** pStart, UINT8** pEnd)
{
	UINT8* pS, *pE;
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;
	if(!(handle->pBrwInfo->wStates & BROWSER_STATE_MARKING))
	{
		*pStart = NULL;
		*pEnd = NULL;
		return FALSE;
	}
	if (handle->pBrwInfo->pMarkStart > handle->pBrwInfo->pMarkEnd)
	{
		pS = handle->pBrwInfo->pMarkEnd;
		pE = handle->pBrwInfo->pMarkStart;
	}
	else
	{
		pS = handle->pBrwInfo->pMarkStart;
		pE = handle->pBrwInfo->pMarkEnd;
	}
	pS = BrowserLocateMarkPosition(handle, pS, BROWSER_GO_FORWARD);
	if (pS == NULL)
	{
		*pStart = NULL;
		*pEnd = NULL;
		return FALSE;
	}
	if (pS > pE)
	{
		*pStart = NULL;
		*pEnd = NULL;
		return FALSE;
	}
	*pStart = pS;
	*pEnd = pE;
	
	return TRUE;	
}

/************************************************************************/
/* 函数名称: BrowserGetMarkData                                           */
/* 函数描述: 得到MARK内容	                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/*			pMarkData		- 内容字符串								*/
/* 返回值  :                                                            */
/*          内存长度	                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT32 BrowserGetMarkData(MBrowser *handle, UINT8* pMarkData,UINT32 dwLen)
{
	UINT8 	*pStart;
	UINT32 	dwMarkLen;

	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return 0;
	dwMarkLen = BrowserGetMarkLength(handle);
	if (dwMarkLen == 0)
	{
		return 0;
	}
	if (dwLen > dwMarkLen)
	{
		return 0;
	}
	if (handle->pBrwInfo->pMarkStart > handle->pBrwInfo->pMarkEnd)
	{
		pStart = handle->pBrwInfo->pMarkEnd;
	}
	else
	{
		pStart = handle->pBrwInfo->pMarkStart;
	}
	pStart = BrowserLocateMarkPosition(handle, pStart, BROWSER_GO_FORWARD);
	if (pStart == NULL)
	{
		return 0;
	}
	memcpy(pMarkData, pStart, dwLen);
	return dwLen;
}




/************************************************************************/
/* 函数名称: BrowserGetMarkLength                                         */
/* 函数描述: 得到MARK内容长度                                           */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          内存长度	                                                */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT32 BrowserGetMarkLength(MBrowser *handle)
{
	UINT32	dwMarkLen;	
	UINT8 	*pStart,*pEnd;

	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return 0;
	if (!(handle->pBrwInfo->wStates & BROWSER_STATE_MARKING))
	{
		return 0;
	}
	if (handle->pBrwInfo->pMarkStart > handle->pBrwInfo->pMarkEnd)
	{
		pStart = handle->pBrwInfo->pMarkEnd;
		pEnd = handle->pBrwInfo->pMarkStart;
	}
	else
	{
		pStart = handle->pBrwInfo->pMarkStart;
		pEnd = handle->pBrwInfo->pMarkEnd;
	}
	pStart = BrowserLocateMarkPosition(handle, pStart, BROWSER_GO_FORWARD);
	if (pStart == NULL)
	{
		return 0;
	}
	if (pStart > pEnd)
	{
		return 0;
	}
	dwMarkLen = pEnd - pStart;
	return dwMarkLen;
}

/************************************************************************/
/* 函数名称: BrowserSetMark	                                            */
/* 函数描述: 设置一个Mark	                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                  */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/*			pMarkStart		- mark起始									*/
/*			pMarkEnd		- mark结束									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          mark成功或失败                                              */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                              */
/************************************************************************/
BOOL	BrowserSetMark(MBrowser* handle, UINT8* pMarkStart, UINT8* pMarkEnd)
{
	BOOL	bRet;
	UINT8*  pStart, *pEnd;
	UINT16  wPageLines;
	MLineInfo LineInfo;
	UINT32	dwLine,dwTopLine;
	UINT16	wCol;
	BOOL    flag;

	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;
	if(pMarkStart < pMarkEnd)
	{
		pStart = pMarkStart;
		pEnd = pMarkEnd;
	}
	else
	{
		pStart = pMarkEnd;
		pEnd = pMarkStart;
	}
	//搜索到mark起始点所在的行
	bRet = BrowserPosToLineCol(handle, pStart, &dwLine,&wCol);
	if(!bRet)		//起始点超出了,返回失败
	{
		return FALSE;
	}
	dwTopLine = handle->pBrwInfo->dwTopLine;
	wPageLines = BrowserPageLineSum(handle, dwTopLine);
	if(!GetLineInfo(handle, dwTopLine, &LineInfo)) return FALSE;
	flag = (pStart >= LineInfo.pLinePtr)?TRUE:FALSE;
	if(!GetLineInfo(handle, dwTopLine+wPageLines, &LineInfo)) return FALSE;
	if(flag && pEnd <= LineInfo.pLinePtr)
	{
		//如果Mark的起点和终点都在本页内
		dwLine = dwTopLine;
	}
	else
	{
		wPageLines = BrowserPageLineSum(handle, dwLine);		
		if(!GetLineInfo(handle, dwLine+wPageLines, &LineInfo)) return FALSE;
		flag = (pEnd >= LineInfo.pLinePtr)?TRUE:FALSE;
		if(!GetLineInfo(handle,dwLine+wPageLines,&LineInfo)) return FALSE;
		if( flag  || LineInfo.pLinePtr == NULL)
		{
			//数据结尾超出了页面 或 超出了数据长度
			return FALSE;
		}
	}
	//mark位置有效,设置mark
	handle->pBrwInfo->pMarkStart = pStart;
	handle->pBrwInfo->pMarkEnd = pEnd;
	handle->pBrwInfo->pMarkCur = pStart;
	handle->pBrwInfo->wStates |= BROWSER_STATE_MARKING;
	//设置顶行
	if(dwLine != dwTopLine)
	{
		__BrowserSetTopLine(handle,dwLine,FALSE);
	}
	return TRUE;
}

UINT8* BrowserGetBuffer(MBrowser* handle)
{
	if(handle->wReserved != BROWSER_INIT_SUCCESS)	return NULL;
	return handle->pBrwInfo->pBuffer;
}


BOOL GetLineInfo(MBrowser* handle,UINT32 dwLine, MLineInfo* pLineInfo)
{

#if defined(BORWSER_RECORD_EVERY)
	if(handle->wReserved != BROWSER_INIT_SUCCESS)
		return FALSE;
	if(!pLineInfo)
	{
		return FALSE;
	}
	if(dwLine > handle->pBrwInfo->dwTotalLine)
	{
		return FALSE;
	}
	if(dwLine > handle->pBrwInfo->dwTotalLine)

⌨️ 快捷键说明

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