ui_playlist3.c
来自「MP3 整个 SDK」· C语言 代码 · 共 178 行
C
178 行
/*
*******************************************************************************
* ACTOS AP
* wma player basal module implementation
*
* (c) Copyright Actions Co,Ld.
*
* $Id: ui_playlist3.c,v 1.2 2006/04/25 10:50:14 jmzhang Exp $
*******************************************************************************
*/
/*
这个函数的作用是在汇编程序外包一层 C ,这样汇编在C中用BANK方式CALL
*/
#pragma codeseg(PLAYLIST_FUN)
#include "actos.h"
#include "ap_common.h"
extern char *str_pt;//字符串当前指针
extern char *strhead_pt;//字串首址记录
extern BYTE scroll_cnt;
int Count_playlist(char *str,char language,region_t *scroll); //统计字数
void ScrollInit_PlayList(char *str,char language,region_t *scroll);
void HoriScroll_PlayList(signed char step,char language,region_t *scroll);
/* (字符串首址,是否初始化true为要初始化) */
void Scroll_PlayList( char * scrollstr, bool mode ,char language,region_t *scroll)
{
if (mode)
{
//初始化滚屏(第一次调用时先显示一串字符)
ScrollInit_PlayList(scrollstr,language,scroll);
return;
}
HoriScroll_PlayList(1,language,scroll);
}
void ScrollInit_PlayList(char *str,char language,region_t *scroll)
{
int code;
int count;
bool result;
region_t kregion;//余下部分区域
scroll_cnt = 0;
SetTextPos(scroll->x, scroll->y);
strhead_pt = str_pt = str;
//tmpstr = str;
count=Count_playlist(str_pt,language,scroll);
str_pt = PutS(str_pt, count);
if(*str_pt!=0)
{
GetTextPos(&kregion.x, &kregion.y);
kregion.width =scroll->x+scroll->width-kregion.x;
kregion.height = scroll->height;
//汉字和ASCII的不同处理
if ((*str_pt >= FirstSectionCode)&&(language!=1))
{//汉字
code = *(int *)str_pt;
}
else
{//ASCII
code = *str_pt;
}
//输出最后一个字
result = CharOutRect(code, &kregion, scroll_cnt);
if (!result)
{
return;
}
//scroll_cnt = kregion.width-1;
scroll_cnt = kregion.width;
}
else
{
str_pt = strhead_pt;
return;
}
}
//==========================================================
/*
滚动屏幕
*/
void HoriScroll_PlayList(signed char step,char language,region_t *scroll)
{
int code;
char *tmpstrpt;
region_t tregion;
region_t sregion;
region_t kregion;//余下部分区域
tmpstrpt = str_pt;
//余下部分区域
kregion.x = scroll->x+scroll->width-step;
kregion.y = scroll->y;
kregion.width = step;
kregion.height = scroll->height;
//设定移动的源,目标区域
sregion.x = scroll->x+step;//暂时未考虑为负数的情况
tregion.x = scroll->x;
tregion.y = sregion.y = scroll->y;
sregion.width = scroll->width-step;
sregion.height = scroll->height;
//向左移step列
RegionCopy(&sregion, &tregion);
test:
if (*str_pt == '\0')
{
tmpstrpt = str_pt = strhead_pt;
}
//汉字和ASCII的不同处理
if ((*str_pt >= FirstSectionCode)&&(language!=1))
{//汉字
code = *(int *)str_pt;
tmpstrpt++;
}
else
{//ASCII
code = *str_pt;
}
tmpstrpt++;
if (!CharOutRect(code, &kregion, scroll_cnt))
{
//strhead_pt = str_pt;
str_pt = tmpstrpt;
scroll_cnt = 0;
goto test;
}
scroll_cnt += step;//未支持负数
}
int Count_playlist(char *str,char language,region_t *scroll) //统计字数
{
int n=0;
int m=0;
while(*str!=0)
{
if((*str >= FirstSectionCode)&&(language!=1))
{
if(m+16>scroll->width)break;
*str++;
*str++;
n++;
m=m+16;
}
else //采用大字体8*16
{
if(m+8>scroll->width)break;
*str++;
n++;
m=m+8;
}
}
return n;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?