显示下一页
int ShowNextPage(void){int iError;PT_PageDesc ptPage; /* 定义页信息的指针 */unsigned char *pucTextFileMemCurPos; /* 当前指向text文件的位置 */if (g_ptCurPage) /* 判断当前page是否存在 */{/* 将下一page的起始位置取出来 */pucTextFileMemCurPos = g_ptCurPage->pucLcdNextPageFirstPosAtFile;}else{/* 否则将初始的其实位置取出来 */pucTextFileMemCurPos = g_pucLcdFirstPosAtFile;}/* 执行显示page操作 */iError = ShowOnePage(pucTextFileMemCurPos);DBG_PRINTF("%s %d, %d\n", __FUNCTION__, __LINE__, iError);if (iError == 0){if (g_ptCurPage && g_ptCurPage->ptNextPage){g_ptCurPage = g_ptCurPage->ptNextPage;return 0;}ptPage = malloc(sizeof(T_PageDesc));if (ptPage){ptPage->pucLcdFirstPosAtFile = pucTextFileMemCurPos;ptPage->pucLcdNextPageFirstPosAtFile = g_pucLcdNextPosAtFile;ptPage->ptPrePage = NULL;ptPage->ptNextPage = NULL;g_ptCurPage = ptPage;DBG_PRINTF("%s %d, pos = 0x%x\n", __FUNCTION__, __LINE__, (unsigned int)ptPage->pucLcdFirstPosAtFile);RecordPage(ptPage);return 0;}else{return -1;}}return iError;}
显示一页 ```c int ShowOnePage(unsigned char pucTextFileMemCurPos) { int iLen; int iError; unsigned char pucBufStart; unsigned int dwCode; PT_FontOpr ptFontOpr; T_FontBitMap tFontBitMap;
int bHasNotClrSceen = 1; / 清屏标志 / int bHasGetCode = 0; / /
tFontBitMap.iCurOriginX = 0; / x / tFontBitMap.iCurOriginY = g_dwFontSize; / y / pucBufStart = pucTextFileMemCurPos; / 设置buf起始位置 /
while (1){/* */iLen = g_ptEncodingOprForFile->GetCodeFrmBuf(pucBufStart, g_pucTextFileMemEnd, &dwCode);if (0 == iLen){/* 文件结束 */if (!bHasGetCode){return -1;}else{return 0;}}bHasGetCode = 1; /* 成功获取code */pucBufStart += iLen;/* 有些文本, \n\r两个一起才表示回车换行* 碰到这种连续的\n\r, 只处理一次*/if (dwCode == '\n'){g_pucLcdNextPosAtFile = pucBufStart;/* 回车换行 */tFontBitMap.iCurOriginX = 0;tFontBitMap.iCurOriginY = IncLcdY(tFontBitMap.iCurOriginY);if (0 == tFontBitMap.iCurOriginY){/* 显示完当前一屏了 */return 0;}else{continue;}}else if (dwCode == '\r'){continue;}else if (dwCode == '\t'){/* TAB键用一个空格代替 */dwCode = ' ';}DBG_PRINTF("dwCode = 0x%x\n", dwCode);ptFontOpr = g_ptEncodingOprForFile->ptFontOprSupportedHead;while (ptFontOpr){DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);iError = ptFontOpr->GetFontBitmap(dwCode, &tFontBitMap);DBG_PRINTF("%s %s %d, ptFontOpr->name = %s, %d\n", __FILE__, __FUNCTION__, __LINE__, ptFontOpr->name, iError);if (0 == iError){DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);if (RelocateFontPos(&tFontBitMap)){/* 剩下的LCD空间不能满足显示这个字符 */return 0;}DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);if (bHasNotClrSceen){/* 首先清屏 */g_ptDispOpr->CleanScreen(COLOR_BACKGROUND);bHasNotClrSceen = 0;}DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);/* 显示一个字符 */if (ShowOneFont(&tFontBitMap)){return -1;}tFontBitMap.iCurOriginX = tFontBitMap.iNextOriginX;tFontBitMap.iCurOriginY = tFontBitMap.iNextOriginY;g_pucLcdNextPosAtFile = pucBufStart;/* 继续取出下一个编码来显示 */break;}ptFontOpr = ptFontOpr->ptNext;}}
```
