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

📄 ui_slider.s01

📁 5807收音机模块用于炬力平台
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	ui_slider(17)
	RSEG	COM_CTRL(0)
	RSEG	CONST(0)
	EXTERN	ClearScreen
	EXTERN	PutS
	EXTERN	PutSDImage
	EXTERN	SD_FRead
	EXTERN	SD_FSeek
	EXTERN	SetTextPos
	EXTERN	UpdateScreen
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	get_text_width
	EXTERN	itoa_1
	EXTERN	itoa_2
	EXTERN	itoa_3
	EXTERN	itoa_4
	EXTERN	res_entry
	EXTERN	res_fp
	EXTERN	res_region
	PUBLIC	slider_ResShowPic
	EXTERN	ui_auto_select
	EXTERN	ui_auto_update
	PUBLIC	ui_slider
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SS_DIV_L02
	EXTERN	?S_MUL_L02
	EXTERN	?L_LSH_L03
	EXTERN	?C_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_CTRL
slider_ResShowPic:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        ap common lib, slider control file 
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.                             
; 7.	*             All Right Reserved                          
; 8.	*
; 9.	*******************************************************************************
; 10.	*/ 
; 11.	#pragma codeseg(COM_CTRL)
; 12.	
; 13.	#include "ap_common.h"
; 14.	
; 15.	//为了不用bank切换而使用 ResShowPic()
; 16.	extern res_entry_t res_entry;
; 17.	extern region_t res_region;
; 18.	
; 19.	//只有这个界面使用
; 20.	int slider_ResShowPic(WORD id, uchar x, uchar y)
; 21.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
; 22.	    WORD buf[2];    //buffer for sd read
; 23.	
; 24.	    ASSERT(id <= UIID_MAX);
; 25.	    
; 26.	    //读entry
; 27.	    SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t));
	LD	L,E
	LD	H,D
	LD	BC,0
	LD	A,4
	CALL	LWRD ?L_LSH_L03
	PUSH	BC
	PUSH	HL
	LD	C,0
	LD	DE,(res_fp)
	CALL	LWRD SD_FSeek
	POP	HL
	POP	HL
; 28.	    SD_FRead(res_fp, &res_entry, sizeof(res_entry_t));
	LD	HL,16
	PUSH	HL
	LD	BC,res_entry
	LD	DE,(res_fp)
	CALL	LWRD SD_FRead
	POP	AF
; 29.	    if(res_entry.type != RES_TYPE_PIC) return 0;
	LD	A,(res_entry+6)
	DEC	A
	JR	Z,?0003
?0002:
	LD	HL,0
; 30.	    ASSERT(res_entry.length <= 512);
	JR	?0006
?0003:
; 31.	
; 32.	    //读数据
; 33.	    SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
	LD	HL,(res_entry+2)
	PUSH	HL
	LD	HL,(res_entry)
	PUSH	HL
	LD	C,A
	LD	DE,(res_fp)
	CALL	LWRD SD_FSeek
	POP	HL
	POP	HL
; 34.	    //SD_FRead(res_fp, &(res_region.width), 2);
; 35.	    //SD_FRead(res_fp, &(res_region.height), 2);
; 36.	    SD_FRead(res_fp, buf, sizeof(buf));
	LD	HL,4
	PUSH	HL
	DEC	HL
	DEC	HL
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	DE,(res_fp)
	CALL	LWRD SD_FRead
	POP	AF
; 37.	    //ASSERT(buf[0] <= 128);
; 38.	    //ASSERT(buf[1] <= 32);    
; 39.	    res_region.width = (char)buf[0];
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region+2),A
; 40.	    res_region.height = (char)buf[1];
	INC	HL
	INC	HL
	LD	A,(HL)
	LD	(res_region+3),A
; 41.	    
; 42.	    //显示
; 43.	    res_region.x = x;
	LD	HL,6
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region),A
; 44.	    res_region.y = y;
	LD	HL,12
	ADD	HL,SP
	LD	A,(HL)
	LD	(res_region+1),A
; 45.	    PutSDImage(&res_region, res_fp->rwpointer);
	LD	HL,20
	LD	BC,(res_fp)
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	LD	DE,res_region
	CALL	LWRD PutSDImage
	POP	HL
	POP	HL
; 46.	    if(ui_auto_update) UpdateScreen(&res_region);
	LD	A,(ui_auto_update)
	OR	A
	JR	Z,?0005
?0004:
	LD	DE,res_region
	CALL	LWRD UpdateScreen
?0005:
; 47.	    return 1;
	LD	HL,1
; 48.	}
?0006:
	POP	AF
	POP	AF
	POP	AF
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
ui_slider:
; 49.	
; 50.	/*
; 51.	********************************************************************************
; 52.	* Description : 滑动杆控件
; 53.	*
; 54.	* Arguments   : slider, 滑动杆结构
; 55.	        callback, 滑动杆的回调函数,=NULL 表示没有回调函数
; 56.	*
; 57.	* Returns     : 结果消息, 或者0
; 58.	*
; 59.	* Notes       : 控件本身没有重画功能, 因为控件不能重画背景
; 60.	*
; 61.	********************************************************************************
; 62.	*/
; 63.	int ui_slider(slider_t *slider, const void (*callback)(int res_id))
; 64.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LD	HL,65506
	ADD	HL,SP
	LD	SP,HL
	PUSH	DE
	POP	IY
; 65.	    int start, end;        //x坐标
; 66.	    char buf[10];    //注意可能含符号 <<-0000>>
; 67.	    char *p;    //格式化buf时使用
; 68.	    char key;
; 69.	    BOOL need_draw=TRUE;
; 70.	    BOOL value_changed=TRUE;    //值是否改变, 需要callback
; 71.	    const region_t bar_region={0, 16, SCR_WIDTH, 16};    //控件所在区域
	LD	HL,10
	ADD	HL,SP
	EX	DE,HL
	LD	HL,?0007
	LD	BC,4
	LDIR
; 72.	    const region_t num_region={44, 8, 40, 8};    //数字区域
	LD	HL,6
	ADD	HL,SP
	EX	DE,HL
	LD	HL,?0008
	LD	C,4
	LDIR
; 73.	    WORD value;    //to keep slider->value
; 74.	    BYTE hold_state=0;    //按住状态,为了加快控件改变的速度
	LD	(IX-12),1
	LD	(IX-13),1
?0010:
; 75.	                //0:normal; 1:holding up, 2:holding down
; 76.	        
; 77.	    ASSERT(slider->value <= slider->max);
; 78.	    ASSERT(slider->value >= slider->min);
; 79.	    ASSERT(slider->step > 0);
; 80.	
; 81.	    while(1)
; 82.	    {
; 83.	        if(need_draw)
	XOR	A
	OR	(IX-12)
	JP	Z,?0013
?0012:
; 84.	        {
; 85.	            //clear screen
; 86.	            ClearScreen(&bar_region);
	LD	HL,10
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD ClearScreen
; 87.	            
; 88.	            //show pic
; 89.	            slider_ResShowPic(SBAR, POSITION_SLIDERBAR, 16);
	LD	C,16
	PUSH	BC
	LD	C,15
	LD	DE,474
	LD	A,BYTE3 slider_ResShowPic
	LD	HL,LWRD slider_ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 90.	            start = POSITION_SLIDERBAR+1;
; 91.	            end = (POSITION_SLIDERBAR -1) + 
; 92.	                SLIDER_BAR_WIDTH * (slider->value - slider->min) / (slider->max - slider->min);
	LD	C,(IY+0)
	LD	B,(IY+1)
	LD	L,(IY+4)
	LD	H,(IY+5)
	AND	A
	SBC	HL,BC
	LD	C,L
	LD	B,H
	LD	DE,98
	CALL	LWRD ?S_MUL_L02
	LD	C,(IY+0)
	LD	B,(IY+1)
	LD	L,(IY+2)
	LD	H,(IY+3)
	AND	A
	SBC	HL,BC
	LD	C,L
	LD	B,H
	CALL	LWRD ?SS_DIV_L02
	LD	HL,14
	ADD	HL,DE
	LD	(IX-16),L
	LD	(IX-15),H
	LD	(IX-26),16
	LD	(IX-25),0
?0015:
; 93.	            ASSERT(end < SCR_WIDTH);
; 94.	            //分段显示背景
; 95.	            while(start+SLIDER_BG_WIDTH < end)
	LD	HL,4
	LD	C,(IX-26)
	LD	B,(IX-25)
	ADD	HL,BC
	LD	C,(IX-16)
	LD	B,(IX-15)
	OR	128
	SBC	HL,BC
	JP	PO,?0060
	XOR	H
?0060:
	LD	C,16
	PUSH	BC
	LD	C,(IX-26)
	JP	P,?0014
?0016:
; 96.	            {
; 97.	                slider_ResShowPic(SBKGRD, start, 16);
	LD	DE,475
	LD	A,BYTE3 slider_ResShowPic
	LD	HL,LWRD slider_ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 98.	                start += SLIDER_BG_WIDTH;
	LD	HL,4
	ADD	HL,SP
	LD	A,(HL)
	ADD	A,4
	LD	(HL),A
	JR	NC,?0015
	INC	HL
	INC	(HL)
	JR	?0015
?0014:
; 99.	            }
; 100.	            // 在背景的尽头处显示拖把
; 101.	            slider_ResShowPic(SSLIDER, start, 16);
	LD	DE,478
	LD	A,BYTE3 slider_ResShowPic
	LD	HL,LWRD slider_ResShowPic
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 102.	            
; 103.	            //format text <-xxxx>
; 104.	            p = buf;
	LD	HL,20
	ADD	HL,SP
; 105.	            *p++ = '<';
	LD	(HL),60
; 106.	            *p++ = '<';
	INC	HL
	INC	HL
	LD	(IX-30),L
	LD	(IX-29),H
	DEC	HL
	LD	(HL),60
; 107.	            if(slider->value < 0)
	BIT	7,(IY+5)
	JR	Z,?0018
?0017:
; 108.	            {
; 109.	                value = -(slider->value);
	LD	C,(IY+4)
	LD	B,(IY+5)
	AND	A
	LD	HL,0
	SBC	HL,BC
	LD	(IX-28),L
	LD	(IX-27),H
; 110.	                *p++ = '-';    //显示负数
	LD	L,(IX-30)
	LD	H,(IX-29)
	INC	HL
	LD	(IX-30),L
	LD	(IX-29),H
	DEC	HL
	LD	(HL),45
; 111.	            }
; 112.	            else
	JR	?0019
?0018:
; 113.	            {
; 114.	                value = slider->value;
	LD	L,(IY+4)
	LD	(IX-28),L
	LD	H,(IY+5)
	LD	(IX-27),H
?0019:
; 115.	            }
; 116.	            
; 117.	            if(value >= 1000)
	LD	BC,1000
	LD	L,(IX-28)
	LD	H,(IX-27)
	AND	A
	SBC	HL,BC
	JR	C,?0021
?0020:
; 118.	            {
; 119.	                itoa_4(value, p);
	LD	C,(IX-30)
	LD	B,(IX-29)
	LD	E,(IX-28)
	LD	D,(IX-27)
	LD	A,BYTE3 itoa_4
	LD	HL,LWRD itoa_4
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 120.	                p += 4;
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	ADD	A,4
	JR	?0070
	INC	HL
	JR	?0066
	ADC	A,0
	JR	?0072
	JR	?0062
?0021:
; 121.	            }
; 122.	            else if(value >= 100)
	LD	BC,100
	LD	L,(IX-28)
	LD	H,(IX-27)
	AND	A
	SBC	HL,BC
	JR	C,?0024
?0023:
; 123.	            {
; 124.	                itoa_3(value, p);
	LD	C,(IX-30)
	LD	B,(IX-29)
	LD	E,(IX-28)
	LD	D,(IX-27)
	LD	A,BYTE3 itoa_3
	LD	HL,LWRD itoa_3
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 125.	                p += 3;
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	ADD	A,3
	JR	?0070
	INC	HL

⌨️ 快捷键说明

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