📄 ui_menu.s01
字号:
NAME ui_menu(17)
RSEG COM_CTRL(0)
RSEG CONST(0)
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetPenColor
EXTERN SetTextOutMode
EXTERN ap_get_message
EXTERN ap_handle_hotkey
PUBLIC menu_bck_pic
PUBLIC menu_pos_menu
PUBLIC show_active_menu
EXTERN ui_auto_select
PUBLIC ui_menu
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_menu:
; 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_menu.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12. #pragma codeseg(COM_CTRL)
; 13.
; 14. #include "ap_common.h"
; 15. #define MENU_NUM_ONE_PAGE 6
; 16.
; 17. extern comval_t g_comval;
; 18. const char menu_pos_menu[MENU_NUM_ONE_PAGE] = { POSITION_MENU6,POSITION_MENU5,
; 19. POSITION_MENU4,POSITION_MENU3,POSITION_MENU2,POSITION_MENU1};
; 20. const WORD menu_bck_pic[MENU_NUM_ONE_PAGE]={ MENUBCK6,MENUBCK5,MENUBCK4,MENUBCK3,MENUBCK2,MENUBCK1 };
; 21. /*
; 22. ********************************************************************************
; 23. * Description : 转换索引成字符串
; 24. *
; 25. * Arguments :
; 26. * grade, 索引字符串
; 27. * str, 转换后的字符串
; 28.
; 29. * Returns :
; 30. * 字符串的个数
; 31. * Notes :
; 32. *
; 33. ********************************************************************************
; 34. */
; 35. void show_active_menu(function_menu_t *menu,int old_active, int active)
; 36. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH AF
PUSH DE
POP IY
; 37.
; 38. int tmp;
; 39.
; 40. //清除旧的活动菜单项
; 41. tmp = old_active%MENU_NUM_ONE_PAGE;
LD BC,6
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_MOD_L02
; 42.
; 43. ResShowPic(menu_bck_pic[tmp], menu_bck_x_def, menu_pos_menu[tmp]-4);
LD HL,menu_pos_menu
ADD HL,DE
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
LD C,9
EX DE,HL
ADD HL,HL
LD DE,menu_bck_pic
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
CALL LWRD ?0063
POP AF
; 44.
; 45. //显示新的活动菜单
; 46. tmp = active%MENU_NUM_ONE_PAGE;
LD BC,6
LD E,(IX+8)
LD D,(IX+9)
CALL LWRD ?SS_MOD_L02
LD (IX-4),E
LD (IX-3),D
; 47. ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_menu[tmp]-4);
LD HL,menu_pos_menu
ADD HL,DE
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
CALL LWRD ?0064
POP AF
; 48. ResShowPic(MENURARR, menu_ptr_x_def, menu_pos_menu[tmp]);
LD HL,menu_pos_menu
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD E,(HL)
PUSH DE
LD C,10
LD DE,108
CALL LWRD ?0063
POP AF
; 49. //ResShowPic(DHTHK,122, menu_pos_menu[tmp]-2);
; 50. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
LD C,194
LD DE,45
CALL LWRD ?0063
POP AF
; 51. ResShowPic(DHTHK,194, menu_pos_menu[tmp]+6);
LD HL,menu_pos_menu
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD A,(HL)
ADD A,6
LD E,A
PUSH DE
LD C,194
LD DE,46
CALL LWRD ?0063
POP AF
; 52.
; 53. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 54. ResShowMultiString(menu->title[active], menu->string_id, menu_str_x_def, menu_pos_menu[tmp]-3);
LD HL,menu_pos_menu
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD A,(HL)
ADD A,253
LD E,A
PUSH DE
LD E,32
PUSH DE
LD C,(IY+9)
LD L,(IY+4)
LD H,(IY+5)
PUSH HL
LD L,(IX+8)
LD H,(IX+9)
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
; 55. //重新显示旧的活动菜单
; 56. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 57.
; 58. tmp = old_active%MENU_NUM_ONE_PAGE;
LD BC,6
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_MOD_L02
LD (IX-4),E
LD (IX-3),D
; 59. ResShowPic(MENUARR1+tmp, menu_ptr_x_def, menu_pos_menu[tmp]);
LD HL,menu_pos_menu
ADD HL,DE
LD C,(HL)
PUSH BC
LD C,10
LD HL,94
ADD HL,DE
EX DE,HL
CALL LWRD ?0063
POP AF
; 60. ResShowMultiString(menu->title[old_active], menu->string_id, menu_str_x_def, menu_pos_menu[tmp]-3);
LD HL,menu_pos_menu
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD A,(HL)
ADD A,253
LD C,A
PUSH BC
LD C,32
PUSH BC
LD C,(IY+9)
LD L,(IY+4)
LD H,(IY+5)
PUSH HL
LD L,(IX-2)
LD H,(IX-1)
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
; 61. }
LD SP,IX
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0064:
LD C,9
LD DE,100
?0063:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
?0065:
LD BC,0
LD DE,65535
JP LWRD SetPenColor
ui_menu:
; 62. /*
; 63. ********************************************************************************
; 64. * Description : 一级菜单
; 65. *
; 66. * Arguments :
; 67. * menu, 结构体指针
; 68. * string_id, 语言
; 69.
; 70. * Returns :
; 71. * 0
; 72. * Notes :
; 73. *
; 74. ********************************************************************************
; 75. */
; 76. int ui_menu (function_menu_t *menu , const void (*callback)(int value))
; 77. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65522
ADD HL,SP
LD SP,HL
PUSH DE
POP IY
; 78. int i,active,old_active;
; 79. char key;
; 80. BOOL need_draw=TRUE;
; 81. bool value_changed=FALSE;
; 82. int cur_group; //menu->active / MENU_NUM_ONE_PAGE
; 83. int n; //the item to show
; 84. // DC oldDC_sav;
; 85.
; 86. active = menu->active;
INC DE
INC DE
LD A,(DE)
LD (IX-14),A
INC DE
LD A,(DE)
LD (IX-13),A
; 87. // GetDCStatus(&oldDC_sav);
; 88. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 89. SetTextOutMode(1); //设字体透明
LD E,1
CALL LWRD SetTextOutMode
LD (IX-4),1
LD (IX-2),0
?0003:
; 90.
; 91. while(1)
; 92. {
; 93. if(need_draw)
XOR A
OR (IX-4)
JP Z,?0006
?0005:
; 94. {
; 95. output8(0x4e,input8(0x4e)|0x8); //zxs add
IN A,(78)
SET 3,A
OUT (78),A
; 96. ResShowPic(MENUTWO,0,0);
LD C,0
PUSH BC
LD DE,109
CALL LWRD ?0063
POP AF
; 97. //ResShowPic(DHT,126,0);
; 98. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
LD C,194
LD DE,45
CALL LWRD ?0063
POP AF
; 99. old_active=active;
; 100. cur_group = active / MENU_NUM_ONE_PAGE;
LD BC,6
LD E,(IX-14)
LD D,(IX-13)
CALL LWRD ?SS_DIV_L02
LD (IX-8),E
LD (IX-7),D
; 101. n = cur_group*MENU_NUM_ONE_PAGE;
EX DE,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD (IX-10),L
LD (IX-9),H
; 102. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 103. //show icons & text
; 104. for(i=0; i<MENU_NUM_ONE_PAGE; i++)
LD L,(IX-14)
LD H,(IX-13)
LD (IX-6),L
LD (IX-5),H
XOR A
LD (IX-12),A
LD (IX-11),A
?0008:
LD BC,32774
LD L,(IX-12)
LD H,(IX-11)
LD A,B
XOR H
LD H,A
SBC HL,BC
JP NC,?0007
?0009:
; 105. {
; 106. if(n+i >= menu->total) break; //处理不足MENU_NUM_ONE_PAGE个的情况
LD C,(IY+0)
LD B,(IY+1)
LD L,(IX-12)
LD H,(IX-11)
LD E,(IX-10)
LD D,(IX-9)
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0055
XOR H
?0055:
JP P,?0007
?0011:
?0012:
; 107. if(n+i==active)
LD L,(IX-12)
LD H,(IX-11)
LD C,E
LD B,D
ADD HL,BC
LD C,(IX-14)
LD B,(IX-13)
AND A
SBC HL,BC
LD HL,menu_pos_menu
LD C,(IX-12)
LD B,(IX-11)
ADD HL,BC
JR NZ,?0014
?0013:
; 108. {
; 109. {
; 110. ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_menu[i]-4);
LD A,(HL)
ADD A,252
LD E,A
PUSH DE
CALL LWRD ?0064
POP AF
; 111. //ResShowPic(DHTHK,122, menu_pos_menu[i]-2);
; 112. ResShowPic(DHTHK,194, menu_pos_menu[i]+6);
LD HL,menu_pos_menu
LD C,(IX-12)
LD B,(IX-11)
ADD HL,BC
LD A,(HL)
ADD A,6
LD E,A
PUSH DE
LD C,194
LD DE,46
CALL LWRD ?0063
POP AF
; 113. ResShowPic(MENURARR, menu_ptr_x_def, menu_pos_menu[i]);
LD HL,menu_pos_menu
LD C,(IX-12)
LD B,(IX-11)
ADD HL,BC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -