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

📄 txt_utile.c

📁 智原mp3 SDK 开发包 与巨力 有mp3 wma ogg decoder
💻 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 + -