📄 vcard.c
字号:
}
else if(mystrcmp(ptr,UtfEncodePrin,decLen[1])==0)
{
ptr += decLen[1];
pos = GetSubString(ptr,"\r\n",0);
if(pos)
{
pos = UtfPrin2Gb(ptr,viewBuf+viewLen,pos);
viewLen += pos;
}
}
}
}
pos = GetSubString(dataBuf,"X-SKYPE-CITY",1);//城市
if(pos >= 0)
{
char *ptr = dataBuf+pos;
if(*ptr == ':')
{
ptr += 1;
pos = GetSubString(ptr,"\r\n",0);
if(pos >= 0)
{
memcpy(viewBuf+viewLen,ptr,pos);
viewLen += pos;
}
}
else if(*ptr == ';')
{
ptr += 1;
if(mystrcmp(ptr,UtfEncode8Bit,decLen[0]) == 0)
{
ptr += decLen[0];
pos = GetSubString(ptr,"\r\n",0);
if(pos)
{
pos = Utf8Bit2Gb(ptr,viewBuf+viewLen,pos);
viewLen += pos;
}
}
else if(mystrcmp(ptr,UtfEncodePrin,decLen[1])==0)
{
ptr += decLen[1];
pos = GetSubString(ptr,"\r\n",0);
if(pos)
{
pos = UtfPrin2Gb(ptr,viewBuf+viewLen,pos);
viewLen += pos;
}
}
}
}
if(viewLen > bufLen)
{
viewTitle[totalLine] = CardViewTitle[CADDR];
viewPos[totalLine ++] = viewLen;
}
}
static void GetTel_Skype(U8 *dataBuf)
{
INT pos,i;
for(i = 0; i < 4; i ++)
{
pos = GetSubString(dataBuf,CardDataTitle[1][CWORKTEL+i],1);
if(pos >= 0)
GetNewLineData_Skype(dataBuf+pos,CWORKTEL+i);
}
}
static void GetEmail_Skype(U8 * dataBuf)
{
INT pos = GetSubString(dataBuf,CardDataTitle[1][CEMAIL],1);
if(pos >= 0)
GetNewLineData_Skype(dataBuf+pos,CEMAIL);
}
static void GetUrl_Skype(U8 * dataBuf)
{
INT pos = GetSubString(dataBuf,CardDataTitle[1][CURL],1);
if(pos >= 0)
GetNewLineData_Skype(dataBuf+pos,CEMAIL);
}
INT InitCardData_Skype(U8 *dataBuf)
{
INT pos,len;
U8 *ptr;
viewLen = totalLine= 0;
viewPos[totalLine++] = viewLen;
GetName_Skype(dataBuf);
GetBirthDay_Skype(dataBuf);
GetSex_Skype(dataBuf);
GetLanguage_Skype(dataBuf);
GetAddr_Skype(dataBuf);
GetTel_Skype(dataBuf);
GetEmail_Skype(dataBuf);
GetUrl_Skype(dataBuf);
return totalLine - 1;
}
INT InitCardData(U8 *dataBuf)
{
if(GetSubString(dataBuf,"VERSION:2.1",1) ==-1)
cardVersion = SKYPE;
else
cardVersion = OUTLOOK;
if(cardVersion == SKYPE)
{
totalLine = InitCardData_Skype(dataBuf);
}
else
{
totalLine = InitCardData_outlook(dataBuf);
}
return totalLine;
}
NU_TIMER cardTimer;
U8 scrollFlag;
INT dispLen,maxLen,dispX,dispY,scrollOffset;
//maxLen,可以显示的最大长度,dispLen,字符串长度
void ScrollCardLine(U8 flag)
{
INT len,titleLen;
U8 dispBuf[MAX_CHAR+1];
dispLen = viewPos[dispLine+1] - viewPos[dispLine];
if(dispLen > 256)
dispLen = 256;
titleLen = strlen(viewTitle[dispLine+1]);
maxLen = MAX_CHAR - titleLen;
memcpy(lineBuf,viewBuf+viewPos[dispLine],dispLen);
lineBuf[dispLen ++] = 0x20;
lineBuf[dispLen ++] = 0x20;
lineBuf[dispLen] = 0;
if(dispLine >= 1)
dispX = 2 + titleLen*12;
else
{
len = viewPos[1] - viewPos[0];
if(len >= MAX_CHAR)
{
dispX = 2;
}
else
{
len *= 12;
len = (LCD_X_SIZE-4-len)/2 + 2;
dispX = 2 +len;
}
}
dispY = viewLinePos[dispLine+1-startLine];
scrollOffset = 0;
scrollFlag = flag;
if(flag == FALSE)
{
len = CutViewBuf(lineBuf,maxLen);
memcpy(dispBuf,lineBuf,len);
for(len;len < maxLen;len ++)
dispBuf[len] = 0x20;
if(dispLine == 0)
Printf(dispX,dispY,lineBuf,GRAY_SEVEN,TITLECOLOR);
else
Printf(dispX,dispY,dispBuf,GRAY_SEVEN,BLACK);
}
}
void CardScrollLineEntry(void)
{
U8 dispBuf[MAX_CHAR+1],*ptr;
INT len;
if(scrollFlag == FALSE)
return;
if(dispLen <= maxLen)
{
scrollFlag = FALSE;
Printf(dispX,dispY,lineBuf,GRAY_SEVEN,DISPCOLOR);
return;
}
if(lineBuf[scrollOffset] &0x80)
scrollOffset += 2;
else
scrollOffset += 1;
if(scrollOffset >= dispLen)
scrollOffset = 0;
len = dispLen - scrollOffset;
if(len >= maxLen)
{
memcpy(dispBuf,lineBuf+scrollOffset,maxLen);
}
else
{
memcpy(dispBuf,lineBuf+scrollOffset,len);
memcpy(dispBuf+len,lineBuf,maxLen-len);
}
len = CutViewBuf(dispBuf,maxLen);
for(len;len < maxLen; len ++)
dispBuf[len] = 0x20;
dispBuf[len] = 0;
Printf(dispX,dispY,dispBuf,GRAY_SEVEN,DISPCOLOR);
}
INT CardView(U8 * curDir, U8 * curFile)
{
U8 *scrBuf = SaveScreen(0,LCD_Y_SIZE-1);
U8 fname[260] = {0};
INT status;
INT posList[MAX_TITLE]={0};
U8 *titleList[MAX_TITLE];
INT titleLen,dispLen;
INT len,i,disp = 1;
INT totalCard,cardInx = 0;
U8 *ptr;
SKEY key;
lineBuf = fname;
viewTitle = titleList;
viewPos = posList;
strcpy(fname,curDir);
len = strlen(fname);
memcpy(fname+len,"\\",2);
strcat(fname,curFile);
if(InitUtf8() == FALSE)
{
RestoreScreen(0,LCD_Y_SIZE,scrBuf);
return FALSE;
}
if(InitDiskData(fname) == FALSE)
{
RestoreScreen(0,LCD_Y_SIZE-1,scrBuf);
DestroyUtf8();
return FALSE;
}
status = NU_Allocate_Memory(&System_Memory,&viewBuf,DiskDataSize+1,NU_NO_SUSPEND);
if(status != NU_SUCCESS)
{
MessageBox(NULL,OpenFileErrorMsg[sPara.language][1],MB_OK);
RestoreScreen(0,LCD_Y_SIZE,scrBuf);
DestroyDiskData();
DestroyUtf8();
return 0;
}
memset(viewBuf,0,DiskDataSize+1);
status = NU_Allocate_Memory(&System_Memory,&cardPos,(MAX_CARD_NUM+1)*sizeof(INT),NU_NO_SUSPEND);
if(status != NU_SUCCESS)
{
MessageBox(NULL,OpenFileErrorMsg[sPara.language][1],MB_OK);
NU_Deallocate_Memory(viewBuf);
RestoreScreen(0,LCD_Y_SIZE,scrBuf);
DestroyDiskData();
DestroyUtf8();
}
totalCard = GetCardNum();
if(totalCard <= 0)
{
NU_Deallocate_Memory(viewBuf);
NU_Deallocate_Memory(cardPos);
DestroyDiskData();
DestroyUtf8();
RestoreScreen(0,LCD_Y_SIZE-1,scrBuf);
return FALSE;
}
status = NU_Allocate_Memory(&System_Memory,&viewData,DiskDataSize+1,NU_NO_SUSPEND);
if(status != NU_SUCCESS)
{
NU_Deallocate_Memory(viewBuf);
NU_Deallocate_Memory(cardPos);
DestroyDiskData();
DestroyUtf8();
RestoreScreen(0,LCD_Y_SIZE-1,scrBuf);
return FALSE;
}
GetViewData:
disp = 1;
dataLen = cardPos[cardInx+1]-cardPos[cardInx];
memcpy(viewData,DiskData+cardPos[cardInx],dataLen);
viewData[dataLen] = 0;
totalLine = InitCardData(viewData);
if(totalLine <= 1)
{
NU_Deallocate_Memory(viewBuf);
NU_Deallocate_Memory(cardPos);
NU_Deallocate_Memory(viewData);
DestroyDiskData();
DestroyUtf8();
RestoreScreen(0,LCD_Y_SIZE-1,scrBuf);
return FALSE;
}
startLine = 1;
endLine = MAX_LINE+1;
if(endLine > totalLine)
endLine = totalLine;
scrollFlag = 0;
NU_Create_Timer(&cardTimer,"cardTimer",CardScrollLineEntry,0,10,40,NU_ENABLE_TIMER);
while(1)
{
if(disp == 1)
{
disp = 0;
scrollFlag = 0;
BlockFill(0,0,LCD_X_SIZE-1,LCD_Y_SIZE-1,GRAY_SEVEN,1);
//Always disp name
i = 0;
dispLen = MAX_CHAR;
len = viewPos[i+1] - viewPos[i];
ptr = viewBuf + viewPos[i];
if(len >= dispLen)
{
len = CutViewBuf(ptr,dispLen);
memcpy(lineBuf,ptr,len);
lineBuf[len] = 0;
Printf(2,viewLinePos[0],lineBuf,GRAY_SEVEN,TITLECOLOR);
}
else
{
memcpy(lineBuf,ptr,len);
lineBuf[len] = 0;
len *= 12;
len = (LCD_X_SIZE-4-len)/2 + 2;
Printf(2+len,viewLinePos[0],lineBuf,GRAY_SEVEN,TITLECOLOR);
}
for( i = startLine; i < endLine; i ++)
{
titleLen = strlen(viewTitle[i+1]);
dispLen = MAX_CHAR - titleLen;
len = viewPos[i+1] - viewPos[i];
ptr = viewBuf + viewPos[i];
if(len > dispLen)
{
len = CutViewBuf(ptr,dispLen);
}
memcpy(lineBuf,ptr,len);
lineBuf[len] = 0;
Printf(2,viewLinePos[i+1-startLine],viewTitle[i+1],GRAY_SEVEN,PURPLE);
//Printf(2,viewLinePos[i+1-startLine],viewTitle[i+1],GRAY_SEVEN,CYAN);
Printf(2+titleLen*12,viewLinePos[i+1-startLine],lineBuf,GRAY_SEVEN,BLACK);
}
dispLine = startLine;
ScrollCardLine(TRUE);
}
key = GetKey();
if(key == NEC_CANCEL)
break;
else if(key == NEC_RIGHT && endLine < totalLine)
{
startLine += MAX_LINE;
endLine += MAX_LINE;
if(endLine > totalLine)
endLine = totalLine;
disp = 1;
}
else if(key == NEC_LEFT && startLine > 1)
{
startLine -= MAX_LINE;
endLine = startLine + MAX_LINE;
disp = 1;
}
else if(key == NEC_DOWN)
{
if(dispLine < endLine -1)
{
ScrollCardLine(FALSE);
dispLine ++;
ScrollCardLine(TRUE);
}
else if(endLine < totalLine - 1)
{
startLine += MAX_LINE;
endLine += MAX_LINE;
if(endLine > totalLine)
endLine = totalLine;
disp = 1;
}
}
else if(key == NEC_UP)
{
if(dispLine > startLine || dispLine == 1)
{
ScrollCardLine(FALSE);
dispLine --;
ScrollCardLine(TRUE);
}
else if(startLine > 1)
{
startLine -= MAX_LINE;
endLine = startLine + MAX_LINE;
disp = 1;
}
}
else if(key == NEC_F1 && cardInx)// 上一人
{
ScrollCardLine(FALSE);
NU_Delete_Timer(&cardTimer);
cardInx --;
goto GetViewData;
}
else if(key == NEC_F2 && cardInx < totalCard-1)
{
ScrollCardLine(FALSE);
NU_Delete_Timer(&cardTimer);
cardInx ++;
goto GetViewData;
}
}
ScrollCardLine(FALSE);
NU_Delete_Timer(&cardTimer);
NU_Deallocate_Memory(viewBuf);
NU_Deallocate_Memory(cardPos);
NU_Deallocate_Memory(viewData);
DestroyDiskData();
DestroyUtf8();
RestoreScreen(0,LCD_Y_SIZE-1,scrBuf);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -