📄 ui_menu.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 12/Apr/106 09:56:15 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d35f\ap\common\ui_menu.c #
# List file = d:\case_i_d35f\ap\ap_main\list\ui_menu.lst #
# Object file = d:\case_i_d35f\ap\ap_main\release\obj\ui_menu.r01 #
# Command line = -v0 -mb -OD:\case_i_d35f\ap\ap_main\release\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d35f\ap\ap_main\List\ -q -t8 -X #
# -Id:\sdk_i_35f\inc\ -Id:\case_i_d35f\inc\ #
# d:\case_i_d35f\AP\COMMON\ui_menu.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_menu(17)
\ 0000 RSEG COM_CTRL(0)
\ 0000 RSEG CONST(0)
\ 0000 EXTERN ClearScreen
\ 0000 EXTERN ResShowMultiString
\ 0000 EXTERN ResShowPic
\ 0000 EXTERN UpdateScreen
\ 0000 EXTERN ap_get_message
\ 0000 EXTERN ap_handle_hotkey
\ 0000 PUBLIC menu_pos
\ 0000 EXTERN ui_auto_select
\ 0000 EXTERN ui_auto_update
\ 0000 PUBLIC ui_function_menu
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?SS_DIV_L02
\ 0000 EXTERN ?SS_MOD_L02
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG COM_CTRL
\ 0000 ui_function_menu:
1 /*
2 *******************************************************************************
3 * ACTOS AP
4 * ap common lib, menu ui 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 /*注意-以下函数必须能访问到这些常量 */
16 const char menu_pos[5] = {POSITION_MENU1, POSITION_MENU2, POSITION_MENU3,
17 POSITION_MENU4, POSITION_MENU5};
18
19 /*
20 ********************************************************************************
21 * Description : 功能菜单控件
22 *
23 * Arguments : menu, 功能菜单结体
24 callback, 功能菜单的回调函数,=NULL 表示没有回调函数
25 *
26 * Returns : 结果消息, 或者0
27 *
28 * Notes :
29 *
30 ********************************************************************************
31 */
32 int ui_function_menu(function_menu_t *menu, const void (*callback)(int res_id))
33 {
\ 0000 C5 PUSH BC
\ 0001 FDE5 PUSH IY
\ 0003 DDE5 PUSH IX
\ 0005 DD210000 LD IX,0
\ 0009 DD39 ADD IX,SP
\ 000B 21F4FF LD HL,65524
\ 000E 39 ADD HL,SP
\ 000F F9 LD SP,HL
\ 0010 D5 PUSH DE
\ 0011 FDE1 POP IY
34 int i;
35 char key;
36 BOOL need_draw=TRUE;
37 BOOL value_changed=TRUE;
38 int max_group; // menu->total / 5
39 int cur_group; //menu->active / 5
40 int n; //the item to show
41
42 ASSERT(menu->active < menu->total);
43 ASSERT(menu->pic_active != NULL);
44 ASSERT(menu->pic_inactive != NULL);
45 ASSERT(menu->string != NULL);
46 ASSERT(menu->string_id < 3);
47
48 //total pages
49 max_group = menu->total / 5;
\ 0013 EB EX DE,HL
\ 0014 5E LD E,(HL)
\ 0015 23 INC HL
\ 0016 56 LD D,(HL)
\ 0017 010500 LD BC,5
\ 001A CD0000 CALL LWRD ?SS_DIV_L02
\ 001D DD73FA LD (IX-6),E
\ 0020 DD72FB LD (IX-5),D
50 if((menu->total % 5) == 0) max_group--;
\ 0023 DD36F501 LD (IX-11),1
\ 0027 DD36FE01 LD (IX-2),1
\ 002B FD5E00 LD E,(IY+0)
\ 002E FD5601 LD D,(IY+1)
\ 0031 CD0000 CALL LWRD ?SS_MOD_L02
\ 0034 7B LD A,E
\ 0035 B2 OR D
\ 0036 200D JR NZ,?0003
\ 0038 ?0002:
\ 0038 DD6EFA LD L,(IX-6)
\ 003B DD66FB LD H,(IX-5)
\ 003E 2B DEC HL
\ 003F DD75FA LD (IX-6),L
\ 0042 DD74FB LD (IX-5),H
\ 0045 ?0003:
\ 0045 ?0005:
51
52 while(1)
53 {
54 if(need_draw)
\ 0045 AF XOR A
\ 0046 DDB6F5 OR (IX-11)
\ 0049 CA7E01 JP Z,?0023
\ 004C ?0007:
55 {
56 //clear screen
57 ClearScreen(NULL);
\ 004C 110000 LD DE,0
\ 004F CD0000 CALL LWRD ClearScreen
58
59 #if 1
60 //what page?
61 cur_group = menu->active / 5;
\ 0052 FD5E02 LD E,(IY+2)
\ 0055 FD5603 LD D,(IY+3)
\ 0058 010500 LD BC,5
\ 005B CD0000 CALL LWRD ?SS_DIV_L02
\ 005E DD73F8 LD (IX-8),E
\ 0061 DD72F9 LD (IX-7),D
62 n = cur_group*5;
\ 0064 EB EX DE,HL
\ 0065 4D LD C,L
\ 0066 44 LD B,H
\ 0067 29 ADD HL,HL
\ 0068 29 ADD HL,HL
\ 0069 09 ADD HL,BC
\ 006A DD75FC LD (IX-4),L
\ 006D DD74FD LD (IX-3),H
63
64 //show icons & text
65 for(i=0; i<5; i++)
\ 0070 AF XOR A
\ 0071 DD77F6 LD (IX-10),A
\ 0074 DD77F7 LD (IX-9),A
\ 0077 ?0010:
\ 0077 010580 LD BC,32773
\ 007A DD6EF6 LD L,(IX-10)
\ 007D DD66F7 LD H,(IX-9)
\ 0080 78 LD A,B
\ 0081 AC XOR H
\ 0082 67 LD H,A
\ 0083 ED42 SBC HL,BC
\ 0085 3049 JR NC,?0009
\ 0087 ?0011:
66 {
67 if(n+i >= menu->total) break; //处理不足5个的情况
\ 0087 FD4E00 LD C,(IY+0)
\ 008A FD4601 LD B,(IY+1)
\ 008D DD6EF6 LD L,(IX-10)
\ 0090 DD66F7 LD H,(IX-9)
\ 0093 DD5EFC LD E,(IX-4)
\ 0096 DD56FD LD D,(IX-3)
\ 0099 19 ADD HL,DE
\ 009A F680 OR 128
\ 009C ED42 SBC HL,BC
\ 009E E2A200 JP PO,?0049
\ 00A1 AC XOR H
\ 00A2 ?0049:
\ 00A2 F2D000 JP P,?0009
\ 00A5 ?0013:
\ 00A5 ?0014:
68 ResShowPic(menu->pic_inactive[n+i], menu_pos[i], 0);
\ 00A5 0E00 LD C,0
\ 00A7 C5 PUSH BC
\ 00A8 210000 LD HL,menu_pos
\ 00AB DD4EF6 LD C,(IX-10)
\ 00AE DD46F7 LD B,(IX-9)
\ 00B1 09 ADD HL,BC
\ 00B2 4E LD C,(HL)
\ 00B3 FD6E04 LD L,(IY+4)
\ 00B6 FD6605 LD H,(IY+5)
\ 00B9 E5 PUSH HL
\ 00BA DD6EF6 LD L,(IX-10)
\ 00BD 60 LD H,B
\ 00BE 19 ADD HL,DE
\ 00BF 29 ADD HL,HL
\ 00C0 EB EX DE,HL
\ 00C1 E1 POP HL
\ 00C2 CD4602 CALL LWRD ?0061
\ 00C5 F1 POP AF
\ 00C6 DD34F6 INC (IX-10)
\ 00C9 20AC JR NZ,?0010
\ 00CB DD34F7 INC (IX-9)
\ 00CE 18A7 JR ?0010
\ 00D0 ?0009:
69 }
70 //show active, 2 pixels left
71 ResShowPic(menu->pic_active[menu->active], menu_pos[menu->active % 5]-2, 0);
\ 00D0 0E00 LD C,0
\ 00D2 C5 PUSH BC
\ 00D3 FD5E02 LD E,(IY+2)
\ 00D6 FD5603 LD D,(IY+3)
\ 00D9 010500 LD BC,5
\ 00DC CD0000 CALL LWRD ?SS_MOD_L02
\ 00DF 210000 LD HL,menu_pos
\ 00E2 19 ADD HL,DE
\ 00E3 7E LD A,(HL)
\ 00E4 C6FE ADD A,254
\ 00E6 4F LD C,A
\ 00E7 FD6E02 LD L,(IY+2)
\ 00EA FD6603 LD H,(IY+3)
\ 00ED 29 ADD HL,HL
\ 00EE FD5E06 LD E,(IY+6)
\ 00F1 FD5607 LD D,(IY+7)
\ 00F4 CD4602 CALL LWRD ?0061
\ 00F7 F1 POP AF
72
73 //check if show left arrows
74 if(cur_group > 0) ResShowPic(CARROWL, POSITION_MENUL, 0);
\ 00F8 DD4EF8 LD C,(IX-8)
\ 00FB DD46F9 LD B,(IX-7)
\ 00FE 210000 LD HL,0
\ 0101 F680 OR 128
\ 0103 ED42 SBC HL,BC
\ 0105 E20901 JP PO,?0051
\ 0108 AC XOR H
\ 0109 ?0051:
\ 0109 0E00 LD C,0
\ 010B C5 PUSH BC
\ 010C 0E02 LD C,2
\ 010E F21601 JP P,?0016
\ 0111 ?0015:
\ 0111 110C00 LD DE,12
\ 0114 1803 JR ?0056
\ 0116 ?0016:
75 else ResShowPic(CARROWN, POSITION_MENUL, 0);
\ 0116 110D00 LD DE,13
\ 0119 ?0056:
\ 0119 CD4A02 CALL LWRD ?0062
\ 011C F1 POP AF
\ 011D ?0017:
76
77 //check if show right arrows
78 if(cur_group < max_group) ResShowPic(CARROWR, POSITION_MENUR, 0);
\ 011D DD4EFA LD C,(IX-6)
\ 0120 DD46FB LD B,(IX-5)
\ 0123 DD6EF8 LD L,(IX-8)
\ 0126 DD66F9 LD H,(IX-7)
\ 0129 F680 OR 128
\ 012B ED42 SBC HL,BC
\ 012D E23101 JP PO,?0052
\ 0130 AC XOR H
\ 0131 ?0052:
\ 0131 0E00 LD C,0
\ 0133 C5 PUSH BC
\ 0134 0E73 LD C,115
\ 0136 F23E01 JP P,?0019
\ 0139 ?0018:
\ 0139 110E00 LD DE,14
\ 013C 1803 JR ?0057
\ 013E ?0019:
79 else ResShowPic(CARROWN, POSITION_MENUR, 0);
\ 013E 110D00 LD DE,13
\ 0141 ?0057:
\ 0141 CD4A02 CALL LWRD ?0062
\ 0144 F1 POP AF
\ 0145 ?0020:
80
81 #else
82 //show icons & text
83 if(menu->total <= 5) /* iiiii*/
84 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -