📄 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]={ MENUBCK1,MENUBCK1,MENUBCK1,MENUBCK1,MENUBCK1,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
PUSH BC
PUSH DE
POP IX
; 37. int tmp;
; 38.
; 39. //清除旧的活动菜单项
; 40. tmp = old_active%MENU_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
; 41.
; 42. 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
; 43.
; 44. //显示新的活动菜单
; 45. tmp = active%MENU_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 IY
; 46. 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
; 47. ///-ResShowPic(MENURARR, menu_ptr_x_def, menu_pos_menu[tmp]);
; 48. //ResShowPic(DHTHK,122, menu_pos_menu[tmp]-2);
; 49. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
LD C,194
LD DE,39
CALL LWRD ?0063
POP AF
; 50. ResShowPic(DHTHK,194, menu_pos_menu[tmp]+6);
LD HL,menu_pos_menu
PUSH IY
POP BC
ADD HL,BC
LD A,(HL)
ADD A,6
LD E,A
PUSH DE
LD C,194
LD DE,40
CALL LWRD ?0063
POP AF
; 51.
; 52. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 53. ResShowMultiString(menu->title[active], menu->string_id, menu_str_x_def, menu_pos_menu[tmp]-3);
LD HL,menu_pos_menu
PUSH IY
POP BC
ADD HL,BC
LD A,(HL)
ADD A,253
LD E,A
PUSH DE
LD E,32
PUSH DE
LD C,(IX+9)
LD L,(IX+4)
LD H,(IX+5)
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
; 54. //重新显示旧的活动菜单
; 55. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 56.
; 57. tmp = old_active%MENU_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
; 58. ///-ResShowPic(MENUARR1+tmp, menu_ptr_x_def, menu_pos_menu[tmp]);
; 59. ResShowMultiString(menu->title[old_active], menu->string_id, menu_str_x_def, menu_pos_menu[tmp]-3);
LD HL,menu_pos_menu
ADD HL,DE
LD A,(HL)
ADD A,253
LD C,A
PUSH BC
LD C,32
PUSH BC
LD C,(IX+9)
LD L,(IX+4)
LD H,(IX+5)
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
; 60. }
POP HL
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0064:
LD C,9
LD DE,181
?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:
; 61. /*
; 62. ********************************************************************************
; 63. * Description : 一级菜单
; 64. *
; 65. * Arguments :
; 66. * menu, 结构体指针
; 67. * string_id, 语言
; 68.
; 69. * Returns :
; 70. * 0
; 71. * Notes :
; 72. *
; 73. ********************************************************************************
; 74. */
; 75. int ui_menu (function_menu_t *menu , const void (*callback)(int value))
; 76. {
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
; 77. int i,active,old_active;
; 78. char key;
; 79. BOOL need_draw=TRUE;
; 80. bool value_changed=FALSE;
; 81. int cur_group; //menu->active / MENU_NUM_ONE_PAGE
; 82. int n; //the item to show
; 83. // DC oldDC_sav;
; 84.
; 85. active = menu->active;
INC DE
INC DE
LD A,(DE)
LD (IX-14),A
INC DE
LD A,(DE)
LD (IX-13),A
; 86. // GetDCStatus(&oldDC_sav);
; 87. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 88. SetTextOutMode(1); //设字体透明
LD E,1
CALL LWRD SetTextOutMode
LD (IX-4),1
LD (IX-2),0
?0003:
; 89.
; 90. while(1)
; 91. {
; 92. if(need_draw)
XOR A
OR (IX-4)
JP Z,?0006
?0005:
; 93. {
; 94. output8(0x4e,input8(0x4e)|0x8); //zxs add
IN A,(78)
SET 3,A
OUT (78),A
; 95. ResShowPic(MENUTWO,0,0);
LD C,0
PUSH BC
LD DE,196
CALL LWRD ?0063
POP AF
; 96. //ResShowPic(DHT,126,0);
; 97. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
LD C,194
LD DE,39
CALL LWRD ?0063
POP AF
; 98. old_active=active;
; 99. 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
; 100. 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
; 101. SetPenColor(Color_WHITE_def);
CALL LWRD ?0065
; 102. //show icons & text
; 103. 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:
; 104. {
; 105. 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:
; 106. 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
LD A,(HL)
JR NZ,?0014
?0013:
; 107. {
; 108. {
; 109. ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_menu[i]-4);
ADD A,252
LD E,A
PUSH DE
CALL LWRD ?0064
POP AF
; 110. //ResShowPic(DHTHK,122, menu_pos_menu[i]-2);
; 111. 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -