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

📄 ui_scroll_string.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
字号:
	NAME	ui_scroll_string(17)
	RSEG	COM_RES(0)
	RSEG	UDATA0(0)
	EXTERN	CharOutRect
	PUBLIC	CountString
	PUBLIC	Count_Byte
	EXTERN	GetTextPos
	PUBLIC	HoriScrollString
	EXTERN	PutS
	EXTERN	RegionCopy
	PUBLIC	ScrollFlag
	PUBLIC	ScrollString
	PUBLIC	ScrollStringInit
	EXTERN	SetTextPos
	PUBLIC	region_scroll
	PUBLIC	scroll_buf
	EXTERN	scroll_cnt
	EXTERN	str_pt
	EXTERN	strhead_pt
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SS_CMP_L02
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_PARM_DIRECT_L09
	EXTERN	?ENT_AUTO_DIRECT_L09
	RSEG	COM_RES
ScrollString:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        wma player basal module implementation
; 5.	*
; 6.	*        (c) Copyright Actions Co,Ld.
; 7.	*
; 8.	*  $Id: ui_scroll.c,v 1.1.1.1 2006/04/21 08:22:43 selina Exp $
; 9.	*******************************************************************************
; 10.	*/
; 11.	/*
; 12.	这个函数的作用是在汇编程序外包一层 C ,这样汇编在C中用BANK方式CALL
; 13.	*/
; 14.	#pragma codeseg(COM_RES)
; 15.	#include "actos.h"
; 16.	#include "ap_common.h"     
; 17.	#define  DISPLAYWIDTH  128      //显示一行字符的宽度 
; 18.	region_t  region_scroll; 
; 19.	char  scroll_buf[32];
; 20.	char  ScrollFlag;
; 21.	 
; 22.	void ScrollStringInit(char *str,char language,region_t *scroll);
; 23.	void HoriScrollString(signed char step,char language,region_t *scroll);
; 24.	int CountString(char *str,char language,region_t *scroll);
; 25.	
; 26.	/* (字符串首址,是否初始化true为要初始化) */
; 27.	void ScrollString( char * scrollstr, bool mode ,char language,region_t *scroll)
; 28.	{
	CALL	LWRD ?ENT_PARM_DIRECT_L09
; 29.	    if (mode)
	INC	C
	DEC	C
	LD	L,(IX+12)
	LD	H,(IX+13)
	PUSH	HL
	LD	C,(IX+10)
	JR	Z,?0003
?0002:
; 30.	    {
; 31.	        //初始化滚屏(第一次调用时先显示一串字符)
; 32.	        ScrollStringInit(scrollstr,language,scroll);
	LD	A,BYTE3 ScrollStringInit
	LD	HL,LWRD ScrollStringInit
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	JR	?0050
; 33.	        return;
; 34.	    }
?0003:
; 35.	    HoriScrollString(1,language,scroll);
	LD	E,1
	LD	A,BYTE3 HoriScrollString
	LD	HL,LWRD HoriScrollString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
?0050:
	POP	HL
; 36.	}
?0004:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
ScrollStringInit:
; 37.	
; 38.	void ScrollStringInit(char *str,char language,region_t *scroll)
; 39.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65526
	PUSH	IY
	LD	L,(IX+10)
	LD	H,(IX+11)
	PUSH	HL
	POP	IY
; 40.	    int code;
; 41.	    int count;
; 42.	    bool result;
; 43.	    region_t kregion;//余下部分区域                      
; 44.	    scroll_cnt = 0;
	XOR	A
	LD	(scroll_cnt),A
; 45.	 
; 46.	    SetTextPos(scroll->x, scroll->y);
	LD	C,(IY+1)
	LD	E,(IY+0)
	CALL	LWRD SetTextPos
; 47.	    strhead_pt = str_pt = str;
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	(str_pt),HL
	LD	(strhead_pt),HL
; 48.	    //tmpstr = str;
; 49.	    count=CountString(str_pt,language,scroll); 
	PUSH	IY
	LD	C,(IX+4)
	EX	DE,HL
	LD	A,BYTE3 CountString
	LD	HL,LWRD CountString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 50.	    str_pt = PutS(str_pt, count);
	LD	C,L
	LD	DE,(str_pt)
	CALL	LWRD PutS
	LD	(str_pt),HL
; 51.	 
; 52.	 
; 53.	
; 54.	      if(*str_pt!=0)
	XOR	A
	OR	(HL)
	JR	Z,?0006
?0005:
; 55.	      {
; 56.	        GetTextPos(&kregion.x, &kregion.y);
	LD	HL,2
	ADD	HL,SP
	LD	BC,1
	ADD	HL,BC
	LD	C,L
	LD	B,H
	DEC	HL
	EX	DE,HL
	CALL	LWRD GetTextPos
; 57.	        kregion.width = scroll->width+scroll->x - kregion.x;
	LD	A,(IY+0)
	ADD	A,(IY+2)
	SUB	(IX-10)
	LD	(IX-8),A
; 58.	        kregion.height = scroll->height;
	LD	B,(IY+3)
	LD	(IX-7),B
; 59.	        //汉字和ASCII的不同处理
; 60.	        if ((*str_pt >= FirstSectionCode)&&(language!=1))
	LD	HL,(str_pt)
	LD	A,(HL)
	CP	161
	JR	C,?0008
	LD	B,(IX+4)
	DEC	B
	JR	Z,?0008
?0010:
?0009:
?0007:
; 61.	          {//汉字
; 62.	            code = *(int *)str_pt;
	LD	B,(HL)
	LD	(IX-6),B
	INC	HL
	LD	H,(HL)
	LD	(IX-5),H
; 63.	          }
; 64.	        else
	JR	?0011
?0008:
; 65.	          {//ASCII
; 66.	             code = *str_pt;
	LD	C,(HL)
	LD	(IX-6),C
	LD	B,0
	LD	(IX-5),B
?0011:
; 67.	          }
; 68.	
; 69.	        //输出最后一个字
; 70.	        result = CharOutRect(code, *(str_pt+1), &kregion, scroll_cnt);
	LD	A,(scroll_cnt)
	LD	C,A
	PUSH	BC
	LD	HL,4
	ADD	HL,SP
	PUSH	HL
	LD	HL,(str_pt)
	INC	HL
	LD	C,(HL)
	LD	B,0
	LD	E,(IX-6)
	LD	D,(IX-5)
	CALL	LWRD CharOutRect
	POP	HL
	POP	HL
; 71.	        if (!result)
	OR	A
	JR	Z,?0014
?0012:
; 72.	          {
; 73.	            return;
; 74.	          }
?0013:
; 75.	        //scroll_cnt = kregion.width-1;
; 76.	    scroll_cnt = kregion.width;
	LD	A,(IX-8)
	LD	(scroll_cnt),A
; 77.	
; 78.	    }
; 79.	    else
	JR	?0014
?0006:
; 80.	    {
; 81.	        str_pt = strhead_pt;
	LD	HL,(strhead_pt)
	LD	(str_pt),HL
; 82.	        return;
; 83.	    }
?0014:
; 84.	
; 85.	}
?0015:
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
HoriScrollString:
; 86.	
; 87.	//==========================================================
; 88.	/*
; 89.	滚动屏幕
; 90.	*/
; 91.	void HoriScrollString(signed char step,char language,region_t *scroll)
; 92.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65520
	PUSH	IY
	LD	L,(IX+10)
	LD	H,(IX+11)
	PUSH	HL
	POP	IY
; 93.	    int code;
; 94.	    char *tmpstrpt;
; 95.	    region_t tregion;
; 96.	    region_t sregion;
; 97.	    region_t kregion;//余下部分区域
; 98.	
; 99.	    tmpstrpt = str_pt;
	LD	HL,(str_pt)
	LD	(IX-16),L
	LD	(IX-15),H
; 100.	
; 101.	    //余下部分区域
; 102.	    kregion.x = scroll->x + scroll->width - step;
	LD	A,(IY+2)
	ADD	A,(IY+0)
	SUB	(IX+2)
	LD	(IX-14),A
; 103.	    kregion.y = scroll->y;
	LD	B,(IY+1)
	LD	(IX-13),B
; 104.	    kregion.width = step;
	LD	B,(IX+2)
	LD	(IX-12),B
; 105.	    kregion.height = scroll->height;
	LD	B,(IY+3)
	LD	(IX-11),B
; 106.	
; 107.	    //设定移动的源,目标区域
; 108.	    sregion.x = scroll->x + step;//暂时未考虑为负数的情况
	LD	A,(IY+0)
	ADD	A,(IX+2)
	LD	(IX-10),A
; 109.	    tregion.x = scroll->x;
	LD	B,(IY+0)
	LD	(IX-6),B
; 110.	    tregion.y = sregion.y = scroll->y;
	LD	B,(IY+1)
	LD	(IX-9),B
	LD	(IX-5),B
; 111.	    sregion.width = scroll->width - step;
	LD	A,(IY+2)
	SUB	(IX+2)
	LD	(IX-8),A
; 112.	    sregion.height = scroll->height;
	LD	B,(IY+3)
	LD	(IX-7),B
; 113.	
; 114.	    //向左移step列
; 115.	    RegionCopy(&sregion, &tregion);
	LD	HL,12
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	HL,8
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD RegionCopy
?0016:
; 116.	
; 117.	
; 118.	
; 119.	test:
; 120.	    if (*str_pt == '\0')
	LD	HL,(str_pt)
	XOR	A
	OR	(HL)
	JR	NZ,?0018
?0017:
; 121.	    {
; 122.	        tmpstrpt = str_pt = strhead_pt;
	LD	HL,(strhead_pt)
	LD	(str_pt),HL
	LD	(IX-16),L
	LD	(IX-15),H
?0018:
; 123.	    }
; 124.	
; 125.	    //汉字和ASCII的不同处理
; 126.	    if ((*str_pt >= FirstSectionCode)&&(language!=1))
	LD	A,(HL)
	CP	161
	JR	C,?0020
	LD	B,(IX+4)
	DEC	B
	JR	Z,?0020
?0022:
?0021:
?0019:
; 127.	    {//汉字
; 128.	        code = *(int *)str_pt;
	LD	B,(HL)
	LD	(IX-2),B
	INC	HL
	LD	H,(HL)
	LD	(IX-1),H
; 129.	        tmpstrpt++;
	INC	(IX-16)
	JR	NZ,?0023
	INC	(IX-15)
; 130.	    }
; 131.	    else
	JR	?0023
?0020:
; 132.	    {//ASCII
; 133.	        code = *str_pt;
	LD	C,(HL)
	LD	(IX-2),C
	LD	B,0
	LD	(IX-1),B
?0023:
; 134.	    }
; 135.	    tmpstrpt++;
	INC	(IX-16)
	JR	NZ,?0053
	INC	(IX-15)
?0053:
; 136.	
; 137.	    if (!CharOutRect(code, *(str_pt+1), &kregion, scroll_cnt))
	LD	A,(scroll_cnt)
	LD	C,A
	PUSH	BC
	LD	HL,6
	ADD	HL,SP
	PUSH	HL
	LD	HL,(str_pt)
	INC	HL
	LD	C,(HL)
	LD	B,0
	LD	E,(IX-2)
	LD	D,(IX-1)
	CALL	LWRD CharOutRect
	POP	HL
	POP	HL
	OR	A
	JR	NZ,?0025
?0024:
; 138.	    {
; 139.	        //strhead_pt = str_pt;
; 140.	        str_pt = tmpstrpt;
	LD	L,(IX-16)
	LD	H,(IX-15)
	LD	(str_pt),HL
; 141.	        scroll_cnt = 0;
	LD	(scroll_cnt),A
; 142.	        goto test;
	JR	?0016
?0025:
; 143.	    }
; 144.	        scroll_cnt += step;//未支持负数
	LD	A,(scroll_cnt)
	ADD	A,(IX+2)
	LD	(scroll_cnt),A
; 145.	
; 146.	}
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
CountString:
; 147.	
; 148.	int CountString(char *str,char language,region_t *scroll)   //统计字数
; 149.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	0
	PUSH	IY
; 150.	    int n=0;
; 151.	    int m=0;
	LD	DE,0
	LD	IY,0
?0027:
; 152.	    while(*str!=0)
	LD	L,(IX+2)
	LD	H,(IX+3)
	XOR	A
	OR	(HL)
	JR	Z,?0026
?0028:
; 153.	    {
; 154.	     if((*str >= FirstSectionCode)&&(language!=1))
	LD	A,(HL)
	CP	161
	JR	C,?0030
	LD	B,(IX+4)
	DEC	B
	JR	Z,?0030
?0032:
?0031:
?0029:
; 155.	     {
; 156.	         if(m+16 > scroll->width)break;
	LD	HL,16
	CALL	LWRD ?0064
	JR	C,?0026
?0033:
?0034:
; 157.	         *str++;
	INC	(IX+2)
	JR	NZ,?0054
	INC	(IX+3)
?0054:
; 158.	         *str++;
	INC	(IX+2)
	JR	NZ,?0055
	INC	(IX+3)
?0055:
; 159.	         n++;
	INC	DE
; 160.	         m=m+16;
	LD	BC,16
	JR	?0057
; 161.	     }
; 162.	     else
?0030:
; 163.	     {
; 164.	        if(m+8>scroll->width)break;
	LD	HL,8
	CALL	LWRD ?0064
	JR	C,?0026
?0036:
?0037:
; 165.	        *str++;
	INC	(IX+2)
	JR	NZ,?0056
	INC	(IX+3)
?0056:
; 166.	         n++;
	INC	DE
; 167.	         m=m+8;
	LD	BC,8
?0057:
	ADD	IY,BC
?0035:
	JR	?0027
?0026:
; 168.	     }
; 169.	    }
; 170.	    return n;
	EX	DE,HL
; 171.	}
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0064:
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	L,(IX+10)
	LD	H,(IX+11)
	INC	HL
	INC	HL
	LD	L,(HL)
	LD	H,0
	JP	LWRD ?SS_CMP_L02
Count_Byte:
; 172.	
; 173.	BYTE Count_Byte(char *str,char language)   //统计字数 zxs added 2007.03.26
; 174.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
	LD	E,(IX+2)
	LD	D,(IX+3)
; 175.	    BYTE n=0;
; 176.	    BYTE m=0;
	LD	(IX-1),0
	LD	(IX-2),0
?0039:
; 177.	    while(*str!=0)
	LD	L,E
	LD	H,D
	XOR	A
	OR	(HL)
	JR	Z,?0038
?0040:
; 178.	    {
; 179.	     if((*str >= FirstSectionCode)&&(language!=1))
	LD	A,(HL)
	CP	161
	JR	C,?0042
	LD	B,(IX+4)
	DEC	B
	JR	Z,?0042
?0044:
?0043:
?0041:
; 180.	     {
; 181.	         if(m+16 > DISPLAYWIDTH)break;
	LD	C,(IX-2)
	LD	B,0
	LD	HL,16
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,128
	CALL	LWRD ?SS_CMP_L02
	JR	C,?0038
?0045:
?0046:
; 182.	         *str++;
	INC	DE
; 183.	         *str++;
	INC	DE
; 184.	         n++;
	INC	(IX-1)
; 185.	         m=m+16;
	LD	A,(IX-2)
	ADD	A,16
	JR	?0061
; 186.	     }
; 187.	     else
?0042:
; 188.	     {
; 189.	        if(m+8>DISPLAYWIDTH)break;
	LD	C,(IX-2)
	LD	B,0
	LD	HL,8
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,128
	CALL	LWRD ?SS_CMP_L02
	JR	C,?0038
?0048:
?0049:
; 190.	        *str++;
	INC	DE
; 191.	         n++;
	INC	(IX-1)
; 192.	         m=m+8;
	LD	A,(IX-2)
	ADD	A,8
?0061:
	LD	(IX-2),A
?0047:
	JR	?0039
?0038:
; 193.	     }
; 194.	    }
; 195.	    return n;
	LD	L,(IX-1)
; 196.	}  
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
; 197.	
	RSEG	UDATA0
region_scroll:
	DEFS	4
scroll_buf:
	DEFS	32
ScrollFlag:
	DEFS	1
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -