ui_pop_up_list.s01

来自「MP3 整个 SDK」· S01 代码 · 共 932 行 · 第 1/2 页

S01
932
字号
	NAME	ui_pop_up_list(17)
	RSEG	COM_CTRL(0)
	RSEG	CONST(0)
	EXTERN	GetDCStatus
	EXTERN	ResShowMultiString
	EXTERN	ResShowPic
	EXTERN	SetBackgdColor
	EXTERN	SetPenColor
	EXTERN	SetTextOutMode
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	PUBLIC	menu_pos_list
	PUBLIC	menulist_bck_pic
	PUBLIC	show_active_list1
	EXTERN	ui_auto_select
	PUBLIC	ui_popup_list
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SS_DIV_L02
	EXTERN	?SS_MOD_L02
	EXTERN	?C_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_CTRL
show_active_list1:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*           ap common lib file
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.
; 7.	*             All Right Reserved
; 8.	*
; 9.	*  $Id: ui_pop_up_list.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
; 10.	*******************************************************************************
; 11.	*/
; 12.	#include "ap_common.h"
; 13.	#include "common.h"
; 14.	
; 15.	#define LIST_NUM_ONE_PAGE    6
; 16.	const char menu_pos_list[LIST_NUM_ONE_PAGE] = { POSITION_MENU6,POSITION_MENU5,
; 17.	        POSITION_MENU4,POSITION_MENU3,POSITION_MENU2,POSITION_MENU1};
; 18.	const WORD menulist_bck_pic[LIST_NUM_ONE_PAGE]={ MENUBCK6,MENUBCK5,MENUBCK4,MENUBCK3,MENUBCK2,MENUBCK1 };
; 19.	#pragma codeseg(COM_CTRL)
; 20.	// 定义背景颜色
; 21.	
; 22.	void show_active_list1(pop_up_list_t *list,int old_active, int active)
; 23.	{
	PUSH	IY
	PUSH	IX
	PUSH	BC
	PUSH	DE
	POP	IY
; 24.	        int tmp;
; 25.	        //清除旧的活动菜单项
; 26.	        tmp = old_active%LIST_NUM_ONE_PAGE;
	LD	BC,6
	LD	L,B
	LD	H,B
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD ?SS_MOD_L02
; 27.	
; 28.	            ResShowPic(menulist_bck_pic[tmp], menu_ptr_x_def, menu_pos_list[tmp]-4);
	LD	HL,menu_pos_list
	ADD	HL,DE
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	LD	C,10
	EX	DE,HL
	ADD	HL,HL
	LD	DE,menulist_bck_pic
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD ?0069
	POP	AF
; 29.	
; 30.	        tmp = active%LIST_NUM_ONE_PAGE;
	LD	BC,6
	LD	HL,10
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD ?SS_MOD_L02
	PUSH	DE
	POP	IX
; 31.	        ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_list[tmp]-4);
	LD	HL,menu_pos_list
	ADD	HL,DE
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	CALL	LWRD ?0070
	POP	AF
; 32.	        ResShowPic(MENURARR, menu_ptr_x_def, menu_pos_list[tmp]);
	LD	HL,menu_pos_list
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	E,(HL)
	PUSH	DE
	LD	C,10
	LD	DE,108
	CALL	LWRD ?0069
	POP	AF
; 33.	        ResShowPic(DHT,194,8);
	LD	C,8
	PUSH	BC
	LD	C,194
	LD	DE,45
	CALL	LWRD ?0069
	POP	AF
; 34.	        ResShowPic(DHTHK,194, menu_pos_list[tmp]+6);
	LD	HL,menu_pos_list
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,6
	LD	E,A
	PUSH	DE
	LD	C,194
	LD	DE,46
	CALL	LWRD ?0069
	POP	AF
; 35.	
; 36.	        SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0071
; 37.	        ResShowMultiString(list->strid[active], list->string_id, menu_str_x_def, menu_pos_list[tmp]-3);
	LD	HL,menu_pos_list
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,253
	LD	E,A
	PUSH	DE
	LD	E,32
	PUSH	DE
	LD	C,(IY+8)
	LD	L,(IY+0)
	LD	H,(IY+1)
	PUSH	HL
	LD	HL,16
	ADD	HL,SP
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	ADD	HL,HL
	EX	DE,HL
	POP	HL
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
; 38.	
; 39.	        //重新显示旧的活动菜单
; 40.	        SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0071
; 41.	
; 42.	        tmp = old_active%LIST_NUM_ONE_PAGE;
	LD	BC,6
	LD	L,B
	LD	H,B
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD ?SS_MOD_L02
	PUSH	DE
	POP	IX
; 43.	        ResShowPic(MENUARR1+tmp, menu_ptr_x_def, menu_pos_list[tmp]);
	LD	HL,menu_pos_list
	ADD	HL,DE
	LD	C,(HL)
	PUSH	BC
	LD	C,10
	LD	HL,94
	ADD	HL,DE
	EX	DE,HL
	CALL	LWRD ?0069
	POP	AF
; 44.	        ResShowMultiString(list->strid[old_active], list->string_id, menu_str_x_def, menu_pos_list[tmp]-3);
	LD	HL,menu_pos_list
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,253
	LD	C,A
	PUSH	BC
	LD	C,32
	PUSH	BC
	LD	C,(IY+8)
	LD	L,(IY+0)
	LD	H,(IY+1)
	PUSH	HL
	LD	HL,6
	ADD	HL,SP
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	ADD	HL,HL
	EX	DE,HL
	POP	HL
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
; 45.	}
	POP	HL
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0070:
	LD	C,9
	LD	DE,100
?0069:
	LD	A,BYTE3 ResShowPic
	LD	HL,LWRD ResShowPic
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0071:
	LD	BC,0
	LD	DE,65535
	JP	LWRD SetPenColor
ui_popup_list:
; 46.	
; 47.	/*
; 48.	********************************************************************************
; 49.	* Description : 弹出式列表选择窗体
; 50.	*
; 51.	* Arguments   :
; 52.	*    list,  弹出式列表结构体指针
; 53.	*    list->string, 语言
; 54.	*
; 55.	* Returns     : key
; 56.	*
; 57.	* Notes       :
; 58.	*
; 59.	********************************************************************************
; 60.	*/
; 61.	int ui_popup_list(pop_up_list_t *list, const void (*callback)(int value))
; 62.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LD	HL,65512
	ADD	HL,SP
	LD	SP,HL
	PUSH	DE
	POP	IY
; 63.	    int i,active,old_active;
; 64.	    char key;
; 65.	    bool need_draw=FALSE;
; 66.	    bool need_drawall=TRUE;
; 67.	    bool value_changed=FALSE;
; 68.	    int max_group;    // list->total / 7
; 69.	    int cur_group;        //list->active / LIST_NUM_ONE_PAGE
; 70.	    int n;            //the item to show
; 71.	    DC  oldDC_sav;
; 72.	
; 73.	    active = list->active;
	LD	HL,4
	ADD	HL,DE
	LD	B,(HL)
	LD	(IX-24),B
	INC	HL
	LD	H,(HL)
	LD	(IX-23),H
; 74.	
; 75.	    if((list->total % LIST_NUM_ONE_PAGE) == 0) max_group--;
	LD	(IX-4),0
	LD	(IX-1),1
	LD	(IX-2),0
	INC	DE
	INC	DE
	EX	DE,HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	BC,6
	CALL	LWRD ?SS_MOD_L02
?0002:
?0003:
; 76.	    GetDCStatus(&oldDC_sav);
	LD	HL,4
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD GetDCStatus
; 77.	
; 78.	        SetTextOutMode(1);       //设字体透明
	LD	E,1
	CALL	LWRD SetTextOutMode
?0005:
; 79.	
; 80.	    while(1)
; 81.	    {
; 82.	        if(need_drawall)
	XOR	A
	OR	(IX-1)
	JR	Z,?0008
?0007:
; 83.	        {
; 84.	
; 85.	            need_drawall=FALSE;
; 86.	            need_draw=TRUE;
	LD	(IX-1),0
	LD	(IX-4),1
?0008:
; 87.	        }
; 88.	
; 89.	        if(need_draw)
	XOR	A
	OR	(IX-4)
	JP	Z,?0010
?0009:
; 90.	        {
; 91.	            old_active=active;
; 92.	            cur_group = active / LIST_NUM_ONE_PAGE;
	LD	BC,6
	LD	E,(IX-24)
	LD	D,(IX-23)
	CALL	LWRD ?SS_DIV_L02
	LD	(IX-10),E
	LD	(IX-9),D
; 93.	            n = cur_group*LIST_NUM_ONE_PAGE;
	EX	DE,HL
	ADD	HL,HL
	LD	C,L
	LD	B,H
	ADD	HL,HL
	ADD	HL,BC
	LD	(IX-12),L
	LD	(IX-11),H
; 94.	            ResShowPic(MENUTWO,0,0);
	LD	C,0
	PUSH	BC
	LD	DE,109
	CALL	LWRD ?0069
	POP	AF
; 95.	            ResShowPic(DHT,194,8);
	LD	C,8
	PUSH	BC
	LD	C,194
	LD	DE,45
	CALL	LWRD ?0069
	POP	AF
; 96.	            SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0071
; 97.	            ResShowMultiString(list->headid, list->string_id,
; 98.	            list_str_x_def, list_str_y_def);
	LD	C,148
	PUSH	BC
	LD	C,22
	PUSH	BC
	LD	C,(IY+8)
	LD	E,(IY+6)
	LD	D,(IY+7)
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
; 99.	
; 100.	            SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0071
; 101.	            if(callback != NULL)
	LD	L,(IX-24)
	LD	H,(IX-23)
	LD	(IX-8),L
	LD	(IX-7),H
	LD	A,(IX+10)
	OR	(IX+11)
	OR	(IX+12)
	JR	Z,?0012
?0011:
; 102.	            callback(active);         
	EX	DE,HL
	CALL	LWRD ?0073
?0012:
; 103.	             
; 104.	            for(i=0; i<LIST_NUM_ONE_PAGE; i++)
	XOR	A
	LD	(IX-22),A
	LD	(IX-21),A
?0014:
	LD	BC,32774
	LD	L,(IX-22)
	LD	H,(IX-21)
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JP	NC,?0013
?0015:
; 105.	            {
; 106.	                if(n+i >= list->total) break;    //处理不足LIST_NUM_ONE_PAGE个的情况
	LD	C,(IY+2)
	LD	B,(IY+3)
	LD	L,(IX-22)
	LD	H,(IX-21)
	LD	E,(IX-12)
	LD	D,(IX-11)
	ADD	HL,DE
	OR	128
	SBC	HL,BC
	JP	PO,?0061
	XOR	H
?0061:
	JP	P,?0013
?0017:
?0018:
; 107.	                if(n+i==active)
	LD	L,(IX-22)
	LD	H,(IX-21)
	LD	C,E
	LD	B,D
	ADD	HL,BC
	LD	C,(IX-24)
	LD	B,(IX-23)
	AND	A
	SBC	HL,BC
	LD	HL,menu_pos_list
	LD	C,(IX-22)
	LD	B,(IX-21)
	ADD	HL,BC
	JR	NZ,?0020
?0019:
; 108.	                {
; 109.	                    {
; 110.	                        ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_list[i]-4);
	LD	A,(HL)
	ADD	A,252
	LD	E,A
	PUSH	DE
	CALL	LWRD ?0070
	POP	AF
; 111.	                        ResShowPic(DHTHK,194, menu_pos_list[i]+6);
	LD	HL,menu_pos_list
	LD	C,(IX-22)
	LD	B,(IX-21)
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,6
	LD	E,A

⌨️ 快捷键说明

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