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 + -
显示快捷键?