📄 txt_utile.c
字号:
/****************************
* mp3_utile.c
****************************/
#include <string.h>
#include "api.h"
#include "lcd.h"
#include "common.h"
#include "display.h"
#include "txt_display.h"
#include "txt_main.h"
#include "prefer.h"
#define Page_stack_size 128
#define isSpecialChar( ch ) ((ch) > 0 && (ch) < 0x0a) || ((ch) > 0x0a && (ch) < '!')
UINT8 *StepAdd,*flashdata;
UINT32 coder_counter;
//parse file data
UINT8 decoderdata1[720];
static UINT8 Gatdata[513];
UINT8 txt_page_next();
void DataConvert_en(void);
void DataConvert_ch(void);
UINT32 page_start=0;
UINT32 page_last=0;
INT32S page_offset[Page_stack_size];
FILE_t *fp;
UINT32 get_stack_size()
{
return (page_last+Page_stack_size-page_start)%Page_stack_size;
}
// open the txt file and seek
UINT8 txt_init(UINT8 *file_name)
{
UINT32 i;
//init page offset stack..
for(i=0;i<128;i++)
page_offset[i]=0;
page_start = 0;
page_last = 0;
fp=api_pFileOpen(file_name);
tUserPreference.offset = 0;
tUserPreference.page_number =1;
if(fp==0)
return 0;
txt_page_next();
return 1;
}
UINT8 txt_page_prev()
{
UINT32 j,stack_size=0,temp_page_number;
if(tUserPreference.page_number > 1)
tUserPreference.page_number--;
//if(tUserPreference.page_number == 1)
// tUserPreference.offset =0;
if(get_stack_size()>0)
{
if(page_last != 0)
{
tUserPreference.offset = page_offset[page_last-1];
}
else
{
tUserPreference.offset = page_offset[Page_stack_size-1];
}
}
else //need find last page.
{
temp_page_number = tUserPreference.page_number; //find from first.
tUserPreference.page_number=0;
tUserPreference.offset=0;
while(tUserPreference.page_number!=temp_page_number)
{
txt_page_next();
}
return 1;
}
api_bFileSeek(fp,tUserPreference.offset,SEEK_SET);
if(!api_u16FileRead(&Gatdata[0], 512 ,fp ))
return 0;
flashdata=&Gatdata[0];
coder_counter=513;
StepAdd=decoderdata1;
for( j = 0; j < 513; j++ )
{
if(isSpecialChar(Gatdata[j]) )
Gatdata[j] = ' ';
}
if((tUserPreference.u8LanguageId==0)||(tUserPreference.u8LanguageId>4))
DataConvert_en();
else
DataConvert_ch();
return 1;
}
UINT8 txt_close(void)
{
return 1;
}
UINT8 txt_page_next()
{
UINT32 j;
UINT32 i;
api_bFileSeek(fp,tUserPreference.offset,SEEK_SET);
for(i=0;i<513;i++)
{
Gatdata[i]=0;
}
if(!api_u16FileRead(&Gatdata[0], 512 ,fp ))
{
return 0;
}
tUserPreference.page_number++;
if(tUserPreference.page_number<Page_stack_size)
page_offset[tUserPreference.page_number-1]=tUserPreference.offset;
else
{
if(get_stack_size()==Page_stack_size) //stack is full.
if(page_start<Page_stack_size-1)
page_start++;
else
page_start = 0;
page_last = (tUserPreference.page_number-1)%Page_stack_size;
page_offset[page_last] = tUserPreference.offset;
}
flashdata=&Gatdata[0];
coder_counter=513;
StepAdd=decoderdata1;
for( j = 0; j < 513; j++ )
{
if(isSpecialChar(Gatdata[j]) )
Gatdata[j] = ' ';
}
if((tUserPreference.u8LanguageId==0)||(tUserPreference.u8LanguageId>4))
DataConvert_en();
else
DataConvert_ch();
return 1;
}
void DataConvert_ch(void)
{
UINT32 i,j,k;
i=0;
j=0;
k=0;
while(i<coder_counter)
{
if((*flashdata==0x0d)||(*flashdata==0x0a))
{
i++;
flashdata++;
tUserPreference.offset++;
continue;
}
if(*flashdata == 0x20)
{
j=j+8;
*StepAdd++=*flashdata++;
tUserPreference.offset++;
i++;
continue;
}
else if(*flashdata==0x0d)
{
if(j+16>128)
{
j=0;
k++;
if(k>9)
{
k=0;
*StepAdd++=0;
return;
}
else
*StepAdd++='\n';
}
j=j+16;
i++;
flashdata++;
tUserPreference.offset++;
continue;
}
else if(((*flashdata<0xa1)&&(tUserPreference.u8LanguageId!=2))||((*flashdata<0x81)&&(tUserPreference.u8LanguageId==2)))
{
if(j+8>128)
{
j=0;
k++;
if(k>9)
{
k=0;
*StepAdd++=0;
return;
}
else
*StepAdd++='\n';
}
j=j+8;
i++;
*StepAdd++=*flashdata++;
tUserPreference.offset++;
continue;
}
else
{
if(i+1>=coder_counter)
{
Gatdata[0]=Gatdata[512];
*StepAdd++=0;
break;
}
i++;
i++;
if(j+16>128)
{
j=0;
k++;
if(k>9)
{
k=0;
*StepAdd++=0;
return;
}
else
*StepAdd++='\n';
}
j=j+16;
*StepAdd++=*flashdata++;
tUserPreference.offset++;
*StepAdd++=*flashdata++;
tUserPreference.offset++;
continue;
}
}
}
void DataConvert_en(void)
{
UINT32 i,j,k;
i=0;
j=0;
k=0;
while(i<coder_counter)
{
if(((*flashdata)==0x0d)||((*flashdata)==0x0a))
{
i++;
flashdata++;
tUserPreference.offset++;
continue;
}
else
{
if(j+8>128)
{
j=0;
k++;
if(k>9)
{
k=0;
*StepAdd++=0;
return;
}
else
*StepAdd++='\n';
}
j=j+8;
i++;
*StepAdd++=*flashdata++;
tUserPreference.offset++;
continue;
}
}
*StepAdd++=0;
*StepAdd=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -