📄 ui_dialog.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Dec/106 17:01:11 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d90f\ap\ap_music\ui_dialog.c #
# List file = d:\case_i_d90f\ap\ap_music\list\ui_dialog.lst #
# Object file = d:\case_i_d90f\ap\ap_music\obj\ui_dialog.r01 #
# ASM file = d:\case_i_d90f\ap\ap_music\list\ui_dialog.s01 #
# Command line = -v0 -mb -OD:\case_i_d90f\ap\ap_music\Obj\ -e -K -w #
# -gA -z9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d90f\ap\ap_music\List\ -q -t8 #
# -AD:\case_i_d90f\ap\ap_music\List\ #
# -ND:\case_i_d90f\ap\ap_music\List\ -X #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# d:\case_i_d90f\AP\AP_MUSIC\ui_dialog.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_dialog(17)
\ 0000 RSEG COM_CTRL(0)
\ 0000 EXTERN ClearScreen
\ 0000 EXTERN PutS
\ 0000 EXTERN ResShowMultiString
\ 0000 EXTERN ResShowPic
\ 0000 EXTERN SetTextPos
\ 0000 EXTERN UpdateScreen
\ 0000 EXTERN ap_get_message
\ 0000 EXTERN ap_handle_hotkey
\ 0000 EXTERN ui_auto_update
\ 0000 PUBLIC ui_dialog
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_LEAVE_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 EXTERN ?ENT_AUTO_DIRECT_L09
\ 0000 RSEG COM_CTRL
\ 0000 ui_dialog:
1 /*
2 *******************************************************************************
3 * ACTOS AP
4 * ap common lib, file/folder delete control file
5 *
6 * (c) Copyright, Actions Co,Ld.
7 * All Right Reserved
8 *
9 * $Id: ui_dialog.c,v 1.1.1.1 2006/05/22 03:24:01 selina Exp $
10 *******************************************************************************
11 */
12 #pragma codeseg(COM_CTRL)
13
14 #include "ap_music.h"
15
16 /*
17 //===================================================================
18 接口: int ui_dialog(dialog_t *dialog, int string_id)
19 input:
20 typedef struct
21 {
22 WORD HeadIcon;//头部图标的ID值
23 WORD HeadStr;//头部信息的ID值
24 char *string;//信息显示区的显示的字串首址
25 }dialog_t;
26
27 dialog_t dialog: 要显示的对话框的信息
28 int string_id: 显示用的语言
29
30 output:
31 return int: NULL: 选中了OK
32 RESULT_IGNORE: 时间到了未按确定,按了PLAY键,或选中了NO
33 其他非0的值: 当热键返回
34 //===================================================================
35 */
36
37 int ui_dialog(dialog_t *dialog,int string_id)
38 {
\ 0000 CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 0003 FCFF DEFW 65532
\ 0005 FDE5 PUSH IY
\ 0007 DD6E02 LD L,(IX+2)
\ 000A DD6603 LD H,(IX+3)
\ 000D E5 PUSH HL
\ 000E FDE1 POP IY
39 char key;
40 bool Selectflag = FALSE; //false(NO); true(YES)
41 bool need_draw = TRUE;
42
43 // SetAsciiFont(FONT_TYPE_LARGE); //ASCII码用大字体
44 ClearScreen(NULL);
\ 0010 110000 LD DE,0
\ 0013 CD0000 CALL LWRD ClearScreen
45 ui_auto_update = FALSE;
\ 0016 AF XOR A
\ 0017 320000 LD (ui_auto_update),A
46
47
48 //显示要求显示的信息
49 if (dialog->string != NULL)
\ 001A DD77FD LD (IX-3),A
\ 001D FD7E04 LD A,(IY+4)
\ 0020 FDB605 OR (IY+5)
\ 0023 2812 JR Z,?0003
\ 0025 ?0002:
50 {
51 SetTextPos(0, 16);
\ 0025 0E10 LD C,16
\ 0027 1E00 LD E,0
\ 0029 CD0000 CALL LWRD SetTextPos
52 PutS(dialog->string, -1);
\ 002C 0EFF LD C,255
\ 002E FD5E04 LD E,(IY+4)
\ 0031 FD5605 LD D,(IY+5)
\ 0034 CD0000 CALL LWRD PutS
\ 0037 ?0003:
53 }
54
55 //显示头部图标
56 if (dialog->HeadIcon != NULL)
\ 0037 FD7E00 LD A,(IY+0)
\ 003A FDB601 OR (IY+1)
\ 003D 280D JR Z,?0005
\ 003F ?0004:
57 {
58 ResShowPic(dialog->HeadIcon, 0, 0);
\ 003F 0E00 LD C,0
\ 0041 C5 PUSH BC
\ 0042 FD5E00 LD E,(IY+0)
\ 0045 FD5601 LD D,(IY+1)
\ 0048 CDE000 CALL LWRD ?0030
\ 004B F1 POP AF
\ 004C ?0005:
59 }
60
61 //显示头部的信息
62 if (dialog->HeadStr != NULL)
\ 004C FD7E02 LD A,(IY+2)
\ 004F FDB603 OR (IY+3)
\ 0052 2819 JR Z,?0007
\ 0054 ?0006:
63 {
64 ResShowMultiString(dialog->HeadStr, string_id, 16, 0);
\ 0054 0E00 LD C,0
\ 0056 C5 PUSH BC
\ 0057 0E10 LD C,16
\ 0059 C5 PUSH BC
\ 005A DD4E04 LD C,(IX+4)
\ 005D FD5E02 LD E,(IY+2)
\ 0060 FD5603 LD D,(IY+3)
\ 0063 3E00 LD A,BYTE3 ResShowMultiString
\ 0065 210000 LD HL,LWRD ResShowMultiString
\ 0068 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 006B F1 POP AF
\ 006C F1 POP AF
\ 006D ?0007:
65 }
66
67 //显示选择按钮(默认N0)
68 ResShowPic(DELNO,100,0);
\ 006D 0E00 LD C,0
\ 006F C5 PUSH BC
\ 0070 CDDB00 CALL LWRD ?0031
\ 0073 F1 POP AF
\ 0074 ?0009:
69
70 while(1)
71 {
72 UpdateScreen(NULL);
\ 0074 110000 LD DE,0
\ 0077 CD0000 CALL LWRD UpdateScreen
73 key = ap_get_message(); //获取消息
\ 007A CD0000 CALL LWRD ap_get_message
74
75 switch (key)
\ 007D 5F LD E,A
\ 007E CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 0081 0700 DEFW 7
\ 0083 05 DEFB 5
\ 0084 06 DEFB 6
\ 0085 1E DEFB 30
\ 0086 21 DEFB 33
\ 0087 30 DEFB 48
\ 0088 45 DEFB 69
\ 0089 46 DEFB 70
\ 008A C300 DEFW ?0021
\ 008C 9A00 DEFW ?0012
\ 008E 9A00 DEFW ?0012
\ 0090 BE00 DEFW ?0016
\ 0092 BE00 DEFW ?0016
\ 0094 BE00 DEFW ?0016
\ 0096 9A00 DEFW ?0012
\ 0098 9A00 DEFW ?0012
\ 009A ?0012:
76 {
77 case AP_KEY_NEXT: //YES和NO之间切换
78 case AP_KEY_PREV:
79 case AP_KEY_NEXT | AP_KEY_HOLD:
80 case AP_KEY_PREV | AP_KEY_HOLD:
81 if(Selectflag)
\ 009A AF XOR A
\ 009B DDB6FD OR (IX-3)
\ 009E 280D JR Z,?0014
\ 00A0 ?0013:
82 {
83 Selectflag = FALSE;
84 ResShowPic(DELNO,100,0);
\ 00A0 0E00 LD C,0
\ 00A2 C5 PUSH BC
\ 00A3 CDDB00 CALL LWRD ?0031
\ 00A6 F1 POP AF
\ 00A7 DD36FD00 LD (IX-3),0
85 }
86 else
\ 00AB 18C7 JR ?0009
\ 00AD ?0014:
87 {
88 Selectflag = TRUE;
89 ResShowPic(DELYES,100,0);
\ 00AD 4F LD C,A
\ 00AE C5 PUSH BC
\ 00AF 0E64 LD C,100
\ 00B1 110200 LD DE,2
\ 00B4 CDE000 CALL LWRD ?0030
\ 00B7 F1 POP AF
\ 00B8 DD36FD01 LD (IX-3),1
\ 00BC ?0015:
90 }
91 break;
\ 00BC 18B6 JR ?0009
\ 00BE ?0016:
92
93 case AP_KEY_MODE | AP_KEY_UP:
94 if(Selectflag)
\ 00BE ?0017:
95 {//YES时按下MODE键的处理
96 }
97 else
\ 00BE ?0018:
98 {
99 return RESULT_IGNORE;//NO时按下MODE键的处理
100 }
\ 00BE ?0019:
\ 00BE ?0020:
101
102 case AP_MSG_WAIT_TIMEOUT://8秒退出
103 case AP_KEY_PLAY | AP_KEY_UP:
104 return RESULT_IGNORE;
\ 00BE 213400 LD HL,52
105
106
107 default:
\ 00C1 1813 JR ?0027
\ 00C3 ?0021:
108 key=ap_handle_hotkey(key);//热键处理
\ 00C3 CD0000 CALL LWRD ap_handle_hotkey
\ 00C6 DD77FC LD (IX-4),A
109 if(key == RESULT_REDRAW)
\ 00C9 FE32 CP 50
\ 00CB 28A7 JR Z,?0009
\ 00CD ?0022:
110 {
111 need_draw=TRUE;
\ 00CD ?0023:
112 }
113 else if(key!=0)
\ 00CD AF XOR A
\ 00CE DDB6FC OR (IX-4)
\ 00D1 28A1 JR Z,?0009
\ 00D3 ?0025:
114 {
115 return key;
\ 00D3 6F LD L,A
\ 00D4 2600 LD H,0
116 }
\ 00D6 ?0027:
\ 00D6 FDE1 POP IY
\ 00D8 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 00DB ?0031:
\ 00DB 0E64 LD C,100
\ 00DD 110100 LD DE,1
\ 00E0 ?0030:
\ 00E0 3E00 LD A,BYTE3 ResShowPic
\ 00E2 210000 LD HL,LWRD ResShowPic
\ 00E5 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 00E8 ?0026:
\ 00E8 ?0024:
\ 00E8 ?0011:
117 }//switch(key)
118 }//while(1)
119 }
120
\ 00E8 END
Errors: none
Warnings: none
Code size: 232
Constant size: 0
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -