📄 ui_slider.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 12/Apr/106 09:56:17 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d35f\ap\common\ui_slider.c #
# List file = d:\case_i_d35f\ap\ap_main\list\ui_slider.lst #
# Object file = d:\case_i_d35f\ap\ap_main\release\obj\ui_slider.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_slider.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_slider(17)
\ 0000 RSEG COM_CTRL(0)
\ 0000 RSEG CONST(0)
\ 0000 EXTERN ClearScreen
\ 0000 EXTERN PutS
\ 0000 EXTERN PutSDImage
\ 0000 EXTERN SD_FRead
\ 0000 EXTERN SD_FSeek
\ 0000 EXTERN SetTextPos
\ 0000 EXTERN UpdateScreen
\ 0000 EXTERN ap_get_message
\ 0000 EXTERN ap_handle_hotkey
\ 0000 EXTERN get_text_width
\ 0000 EXTERN itoa1
\ 0000 EXTERN itoa2
\ 0000 EXTERN itoa3
\ 0000 EXTERN itoa4
\ 0000 EXTERN res_entry
\ 0000 EXTERN res_fp
\ 0000 EXTERN res_region
\ 0000 PUBLIC slider_ResShowPic
\ 0000 EXTERN ui_auto_select
\ 0000 EXTERN ui_auto_update
\ 0000 PUBLIC ui_slider
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?SS_DIV_L02
\ 0000 EXTERN ?S_MUL_L02
\ 0000 EXTERN ?L_LSH_L03
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG COM_CTRL
\ 0000 slider_ResShowPic:
1 /*
2 *******************************************************************************
3 * ACTOS AP
4 * ap common lib, slider 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 //为了不用bank切换而使用 ResShowPic()
16 extern res_entry_t res_entry;
17 extern region_t res_region;
18
19 //只有这个界面使用
20 int slider_ResShowPic(WORD id, uchar x, uchar y)
21 {
\ 0000 C5 PUSH BC
\ 0001 D5 PUSH DE
\ 0002 F5 PUSH AF
\ 0003 F5 PUSH AF
22 WORD buf[2]; //buffer for sd read
23
24 ASSERT(id <= UIID_MAX);
25
26 //读entry
27 SD_FSeek(res_fp, SEEK_SET, (long)id * sizeof(res_entry_t));
\ 0004 6B LD L,E
\ 0005 62 LD H,D
\ 0006 010000 LD BC,0
\ 0009 3E04 LD A,4
\ 000B CD0000 CALL LWRD ?L_LSH_L03
\ 000E C5 PUSH BC
\ 000F E5 PUSH HL
\ 0010 0E00 LD C,0
\ 0012 ED5B0000 LD DE,(res_fp)
\ 0016 CD0000 CALL LWRD SD_FSeek
\ 0019 E1 POP HL
\ 001A E1 POP HL
28 SD_FRead(res_fp, &res_entry, sizeof(res_entry_t));
\ 001B 211000 LD HL,16
\ 001E E5 PUSH HL
\ 001F 010000 LD BC,res_entry
\ 0022 ED5B0000 LD DE,(res_fp)
\ 0026 CD0000 CALL LWRD SD_FRead
\ 0029 F1 POP AF
29 if(res_entry.type != RES_TYPE_PIC) return 0;
\ 002A 3A0600 LD A,(res_entry+6)
\ 002D 3D DEC A
\ 002E 2805 JR Z,?0003
\ 0030 ?0002:
\ 0030 210000 LD HL,0
30 ASSERT(res_entry.length <= 512);
\ 0033 1869 JR ?0006
\ 0035 ?0003:
31
32 //读数据
33 SD_FSeek(res_fp, SEEK_SET, res_entry.offset);
\ 0035 2A0200 LD HL,(res_entry+2)
\ 0038 E5 PUSH HL
\ 0039 2A0000 LD HL,(res_entry)
\ 003C E5 PUSH HL
\ 003D 4F LD C,A
\ 003E ED5B0000 LD DE,(res_fp)
\ 0042 CD0000 CALL LWRD SD_FSeek
\ 0045 E1 POP HL
\ 0046 E1 POP HL
34 //SD_FRead(res_fp, &(res_region.width), 2);
35 //SD_FRead(res_fp, &(res_region.height), 2);
36 SD_FRead(res_fp, buf, sizeof(buf));
\ 0047 210400 LD HL,4
\ 004A E5 PUSH HL
\ 004B 2B DEC HL
\ 004C 2B DEC HL
\ 004D 39 ADD HL,SP
\ 004E 4D LD C,L
\ 004F 44 LD B,H
\ 0050 ED5B0000 LD DE,(res_fp)
\ 0054 CD0000 CALL LWRD SD_FRead
\ 0057 F1 POP AF
37 //ASSERT(buf[0] <= 128);
38 //ASSERT(buf[1] <= 32);
39 res_region.width = (char)buf[0];
\ 0058 210000 LD HL,0
\ 005B 39 ADD HL,SP
\ 005C 7E LD A,(HL)
\ 005D 320200 LD (res_region+2),A
40 res_region.height = (char)buf[1];
\ 0060 23 INC HL
\ 0061 23 INC HL
\ 0062 7E LD A,(HL)
\ 0063 320300 LD (res_region+3),A
41
42 //显示
43 res_region.x = x;
\ 0066 210600 LD HL,6
\ 0069 39 ADD HL,SP
\ 006A 7E LD A,(HL)
\ 006B 320000 LD (res_region),A
44 res_region.y = y;
\ 006E 210C00 LD HL,12
\ 0071 39 ADD HL,SP
\ 0072 7E LD A,(HL)
\ 0073 320100 LD (res_region+1),A
45 PutSDImage(&res_region, res_fp->rwpointer);
\ 0076 211400 LD HL,20
\ 0079 ED4B0000 LD BC,(res_fp)
\ 007D 09 ADD HL,BC
\ 007E 4E LD C,(HL)
\ 007F 23 INC HL
\ 0080 46 LD B,(HL)
\ 0081 23 INC HL
\ 0082 5E LD E,(HL)
\ 0083 23 INC HL
\ 0084 56 LD D,(HL)
\ 0085 D5 PUSH DE
\ 0086 C5 PUSH BC
\ 0087 110000 LD DE,res_region
\ 008A CD0000 CALL LWRD PutSDImage
\ 008D E1 POP HL
\ 008E E1 POP HL
46 if(ui_auto_update) UpdateScreen(&res_region);
\ 008F 3A0000 LD A,(ui_auto_update)
\ 0092 B7 OR A
\ 0093 2806 JR Z,?0005
\ 0095 ?0004:
\ 0095 110000 LD DE,res_region
\ 0098 CD0000 CALL LWRD UpdateScreen
\ 009B ?0005:
47 return 1;
\ 009B 210100 LD HL,1
48 }
\ 009E ?0006:
\ 009E F1 POP AF
\ 009F F1 POP AF
\ 00A0 F1 POP AF
\ 00A1 F1 POP AF
\ 00A2 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 00A5 ui_slider:
49
50 /*
51 ********************************************************************************
52 * Description : 滑动杆控件
53 *
54 * Arguments : slider, 滑动杆结构
55 callback, 滑动杆的回调函数,=NULL 表示没有回调函数
56 *
57 * Returns : 结果消息, 或者0
58 *
59 * Notes : 控件本身没有重画功能, 因为控件不能重画背景
60 *
61 ********************************************************************************
62 */
63 int ui_slider(slider_t *slider, const void (*callback)(int res_id))
64 {
\ 00A5 C5 PUSH BC
\ 00A6 FDE5 PUSH IY
\ 00A8 DDE5 PUSH IX
\ 00AA DD210000 LD IX,0
\ 00AE DD39 ADD IX,SP
\ 00B0 21E2FF LD HL,65506
\ 00B3 39 ADD HL,SP
\ 00B4 F9 LD SP,HL
\ 00B5 D5 PUSH DE
\ 00B6 FDE1 POP IY
65 int start, end; //x坐标
66 char buf[10]; //注意可能含符号 <<-0000>>
67 char *p; //格式化buf时使用
68 char key;
69 BOOL need_draw=TRUE;
70 BOOL value_changed=TRUE; //值是否改变, 需要callback
71 const region_t bar_region={0, 16, SCR_WIDTH, 16}; //控件所在区域
\ 00B8 210A00 LD HL,10
\ 00BB 39 ADD HL,SP
\ 00BC EB EX DE,HL
\ 00BD 210000 LD HL,?0007
\ 00C0 010400 LD BC,4
\ 00C3 EDB0 LDIR
72 const region_t num_region={44, 8, 40, 8}; //数字区域
\ 00C5 210600 LD HL,6
\ 00C8 39 ADD HL,SP
\ 00C9 EB EX DE,HL
\ 00CA 210400 LD HL,?0008
\ 00CD 0E04 LD C,4
\ 00CF EDB0 LDIR
73 WORD value; //to keep slider->value
74 BYTE hold_state=0; //按住状态,为了加快控件改变的速度
\ 00D1 DD36F501 LD (IX-11),1
\ 00D5 DD36F401 LD (IX-12),1
\ 00D9 DD70F3 LD (IX-13),B
\ 00DC ?0010:
75 //0:normal; 1:holding up, 2:holding down
76
77 ASSERT(slider->value <= slider->max);
78 ASSERT(slider->value >= slider->min);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -