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