📄 ui_progress.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 12/Apr/106 09:56:16 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d35f\ap\common\ui_progress.c #
# List file = d:\case_i_d35f\ap\ap_main\list\ui_progress.lst #
# Object file = d:\case_i_d35f\ap\ap_main\release\obj\ui_progress.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_progress.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_progress(17)
\ 0000 RSEG COM_CTRL(0)
\ 0000 RSEG CONST(0)
\ 0000 EXTERN ClearScreen
\ 0000 EXTERN ResShowPic
\ 0000 EXTERN UpdateScreen
\ 0000 EXTERN ui_auto_update
\ 0000 PUBLIC ui_show_progress
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?SS_DIV_L02
\ 0000 EXTERN ?S_MUL_L02
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG COM_CTRL
\ 0000 ui_show_progress:
1 /*
2 *******************************************************************************
3 * ACTOS AP
4 * ap common lib, progress control 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 ********************************************************************************
17 * Description : 进度条控件
18 *
19 * Arguments : progress, 进度条结构
20 *
21 * Returns : 0
22 *
23 * Notes : 这个控件没有自己的消息循环
24 *
25 ********************************************************************************
26 */
27 int ui_show_progress(const progress_t *progress)
28 {
\ 0000 C5 PUSH BC
\ 0001 FDE5 PUSH IY
\ 0003 DDE5 PUSH IX
\ 0005 F5 PUSH AF
\ 0006 F5 PUSH AF
\ 0007 F5 PUSH AF
\ 0008 F5 PUSH AF
\ 0009 D5 PUSH DE
\ 000A FDE1 POP IY
29 int start, end;
30 // char buf[5]; //注意可能含符号
31 // char key;
32 const region_t region={0, 16, SCR_WIDTH, 16}; //控件所在区域
\ 000C 210200 LD HL,2
\ 000F 39 ADD HL,SP
\ 0010 EB EX DE,HL
\ 0011 210000 LD HL,?0002
\ 0014 010400 LD BC,4
\ 0017 EDB0 LDIR
33 BOOL need_draw=TRUE;
\ 0019 69 LD L,C
\ 001A 60 LD H,B
\ 001B 39 ADD HL,SP
\ 001C 3601 LD (HL),1
\ 001E ?0004:
34
35 ASSERT(progress->value <= progress->max);
36 ASSERT(progress->value >= progress->min);
37
38
39 while(1)
40 {
41 if(need_draw)
\ 001E 210000 LD HL,0
\ 0021 39 ADD HL,SP
\ 0022 AF XOR A
\ 0023 B6 OR (HL)
\ 0024 CABD00 JP Z,?0012
\ 0027 ?0006:
42 {
43 //clear screen
44 ClearScreen(®ion);
\ 0027 23 INC HL
\ 0028 23 INC HL
\ 0029 EB EX DE,HL
\ 002A CD0000 CALL LWRD ClearScreen
45
46 //show pic
47 ResShowPic(PBAR, POSITION_PROGRESSBAR, 16);
\ 002D 0E10 LD C,16
\ 002F C5 PUSH BC
\ 0030 0E0F LD C,15
\ 0032 110601 LD DE,262
\ 0035 3E00 LD A,BYTE3 ResShowPic
\ 0037 210000 LD HL,LWRD ResShowPic
\ 003A CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 003D F1 POP AF
48 start = POSITION_PROGRESSBAR + 1;
49 end = (POSITION_PROGRESSBAR -1) +
50 PROGRESS_BAR_WIDTH * (progress->value - progress->min)/ (progress->max - progress->min);
\ 003E 210600 LD HL,6
\ 0041 39 ADD HL,SP
\ 0042 E5 PUSH HL
\ 0043 FD4E00 LD C,(IY+0)
\ 0046 FD4601 LD B,(IY+1)
\ 0049 FD6E04 LD L,(IY+4)
\ 004C FD6605 LD H,(IY+5)
\ 004F A7 AND A
\ 0050 ED42 SBC HL,BC
\ 0052 4D LD C,L
\ 0053 44 LD B,H
\ 0054 116200 LD DE,98
\ 0057 CD0000 CALL LWRD ?S_MUL_L02
\ 005A FD4E00 LD C,(IY+0)
\ 005D FD4601 LD B,(IY+1)
\ 0060 FD6E02 LD L,(IY+2)
\ 0063 FD6603 LD H,(IY+3)
\ 0066 A7 AND A
\ 0067 ED42 SBC HL,BC
\ 0069 4D LD C,L
\ 006A 44 LD B,H
\ 006B CD0000 CALL LWRD ?SS_DIV_L02
\ 006E 210E00 LD HL,14
\ 0071 19 ADD HL,DE
\ 0072 4D LD C,L
\ 0073 44 LD B,H
\ 0074 E1 POP HL
\ 0075 71 LD (HL),C
\ 0076 23 INC HL
\ 0077 70 LD (HL),B
\ 0078 DD211000 LD IX,16
\ 007C ?0009:
51 ASSERT(end < SCR_WIDTH);
52 //分段显示背景
53 while(start+PROGRESS_BG_WIDTH <= end)
\ 007C 210400 LD HL,4
\ 007F DDE5 PUSH IX
\ 0081 C1 POP BC
\ 0082 09 ADD HL,BC
\ 0083 4D LD C,L
\ 0084 44 LD B,H
\ 0085 210600 LD HL,6
\ 0088 39 ADD HL,SP
\ 0089 56 LD D,(HL)
\ 008A 23 INC HL
\ 008B 66 LD H,(HL)
\ 008C 6A LD L,D
\ 008D F680 OR 128
\ 008F ED42 SBC HL,BC
\ 0091 E29500 JP PO,?0014
\ 0094 AC XOR H
\ 0095 ?0014:
\ 0095 FAB200 JP M,?0008
\ 0098 ?0010:
54 {
55 ResShowPic(PBKGRD, start, 16);
\ 0098 0E10 LD C,16
\ 009A C5 PUSH BC
\ 009B DDE5 PUSH IX
\ 009D E1 POP HL
\ 009E 4D LD C,L
\ 009F 114C00 LD DE,76
\ 00A2 3E00 LD A,BYTE3 ResShowPic
\ 00A4 210000 LD HL,LWRD ResShowPic
\ 00A7 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 00AA F1 POP AF
56 start += PROGRESS_BG_WIDTH;
\ 00AB 010400 LD BC,4
\ 00AE DD09 ADD IX,BC
\ 00B0 18CA JR ?0009
\ 00B2 ?0008:
57 }
58
59 #if 0
60 //show text
61 if(progress->value < 0)
62 {
63 buf[0] = '-';
64 itoa3(-(progress->value), buf+1);
65 }
66 else itoa3(progress->value, buf);
67 SetTextPos( (SCR_WIDTH - (BYTE)get_text_width(buf)) /2, 8);
68 PutS(buf, 255);
69 #endif
70
71 //check if auto_update
72 if(!ui_auto_update) UpdateScreen(NULL);
\ 00B2 3A0000 LD A,(ui_auto_update)
\ 00B5 B7 OR A
\ 00B6 2005 JR NZ,?0012
\ 00B8 ?0011:
\ 00B8 5F LD E,A
\ 00B9 57 LD D,A
\ 00BA CD0000 CALL LWRD UpdateScreen
\ 00BD ?0012:
73
74 need_draw = FALSE;
\ 00BD ?0007:
75 }//need_draw
76
77 #if 0
78 //handle message
79 key = ap_get_message();
80 switch( key)
81 {
82 case AP_KEY_MODE | AP_KEY_UP:
83 case AP_KEY_PLAY | AP_KEY_UP:
84 case AP_MSG_WAIT_TIMEOUT:
85 return 0; //exit
86 default:
87 key = ap_handle_hotkey(key);
88 if(key == RESULT_REDRAW) need_draw = TRUE;
89 else if(key != 0) return key;
90 }//switch()
91 #else
92 //direct return
93 return 0;
\ 00BD 210000 LD HL,0
94 #endif
95 }//while(1)
\ 00C0 F1 POP AF
\ 00C1 F1 POP AF
\ 00C2 F1 POP AF
\ 00C3 F1 POP AF
\ 00C4 DDE1 POP IX
\ 00C6 FDE1 POP IY
\ 00C8 C1 POP BC
\ 00C9 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
96 }
\ 00CC C31E00 JP LWRD ?0004
97
\ 0000 RSEG CONST
\ 0000 ?0002:
\ 0000 00 DEFB 0
\ 0001 10 DEFB 16
\ 0002 80 DEFB 128
\ 0003 10 DEFB 16
\ 0004 END
Errors: none
Warnings: none
Code size: 207
Constant size: 4
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -