📄 ui_slider.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Dec/106 16:59:00 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d90f\ap\common\ui_slider.c #
# List file = d:\case_i_d90f\ap\ap_amv\list\ui_slider.lst #
# Object file = d:\case_i_d90f\ap\ap_amv\obj\ui_slider.r01 #
# ASM file = d:\case_i_d90f\ap\ap_amv\list\ui_slider.s01 #
# Command line = -v0 -mb -OD:\case_i_d90f\ap\ap_amv\Obj\ -e -K -w #
# -gA -s9 -RCODE -r0 -DNAPDEBUG -DAMV_JPG_TXT #
# -LD:\case_i_d90f\ap\ap_amv\List\ -q -t8 #
# -AD:\case_i_d90f\ap\ap_amv\List\ #
# -ND:\case_i_d90f\ap\ap_amv\List\ -X #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# D:\CASE_I_D90F\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 ResShowMultiString
\ 0000 EXTERN ResShowPic
\ 0000 EXTERN SetPenColor
\ 0000 EXTERN SetTextOutMode
\ 0000 EXTERN ap_get_message
\ 0000 EXTERN ap_handle_hotkey
\ 0000 EXTERN file_name
\ 0000 EXTERN main_ResShowPic
\ 0000 PUBLIC slider_atoi4
\ 0000 EXTERN ui_auto_select
\ 0000 PUBLIC ui_slider
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?SS_DIV_L02
\ 0000 EXTERN ?SS_MOD_L02
\ 0000 EXTERN ?S_MUL_L02
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 EXTERN ?STRLEN_L11
\ 0000 RSEG COM_CTRL
\ 0000 slider_atoi4:
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 * $Id: ui_slider.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
16 //为了不用bank切换而使用 ResShowPic()
17 extern res_entry_t res_entry;
18 extern region_t res_region;
19
20
21 void slider_atoi4(char *str, int count)
22 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A C5 PUSH BC
\ 000B F5 PUSH AF
\ 000C F5 PUSH AF
\ 000D D5 PUSH DE
\ 000E FDE1 POP IY
23 int tmp, level;
24 if(count < 0)
\ 0010 CB78 BIT 7,B
\ 0012 2812 JR Z,?0003
\ 0014 ?0002:
25 {
26 *str = '-';
\ 0014 FD36002D LD (IY+0),45
27 count = 0 - count;
\ 0018 A7 AND A
\ 0019 210000 LD HL,0
\ 001C ED42 SBC HL,BC
\ 001E DD75FE LD (IX-2),L
\ 0021 DD74FF LD (IX-1),H
28 str++;
\ 0024 FD23 INC IY
\ 0026 ?0003:
29 }
30 if(count >= 1000)level = 4;
\ 0026 01E883 LD BC,33768
\ 0029 DD6EFE LD L,(IX-2)
\ 002C DD66FF LD H,(IX-1)
\ 002F 3E80 LD A,128
\ 0031 AC XOR H
\ 0032 67 LD H,A
\ 0033 ED42 SBC HL,BC
\ 0035 3806 JR C,?0005
\ 0037 ?0004:
\ 0037 DD36FC04 LD (IX-4),4
\ 003B 1830 JR ?0083
\ 003D ?0005:
31 else if(count >= 100) level = 3;
\ 003D 016480 LD BC,32868
\ 0040 DD6EFE LD L,(IX-2)
\ 0043 DD66FF LD H,(IX-1)
\ 0046 78 LD A,B
\ 0047 AC XOR H
\ 0048 67 LD H,A
\ 0049 ED42 SBC HL,BC
\ 004B 3806 JR C,?0008
\ 004D ?0007:
\ 004D DD36FC03 LD (IX-4),3
\ 0051 181A JR ?0083
\ 0053 ?0008:
32 else if(count >= 10) level = 2;
\ 0053 010A80 LD BC,32778
\ 0056 DD6EFE LD L,(IX-2)
\ 0059 DD66FF LD H,(IX-1)
\ 005C 78 LD A,B
\ 005D AC XOR H
\ 005E 67 LD H,A
\ 005F ED42 SBC HL,BC
\ 0061 3806 JR C,?0011
\ 0063 ?0010:
\ 0063 DD36FC02 LD (IX-4),2
\ 0067 1804 JR ?0083
\ 0069 ?0011:
33 else level = 1;
\ 0069 DD36FC01 LD (IX-4),1
\ 006D ?0083:
\ 006D DD36FD00 LD (IX-3),0
\ 0071 ?0012:
\ 0071 ?0009:
\ 0071 ?0006:
34 if(level >= 4)
\ 0071 010480 LD BC,32772
\ 0074 DD6EFC LD L,(IX-4)
\ 0077 DD66FD LD H,(IX-3)
\ 007A 78 LD A,B
\ 007B AC XOR H
\ 007C 67 LD H,A
\ 007D ED42 SBC HL,BC
\ 007F 3812 JR C,?0014
\ 0081 ?0013:
35 {
36 tmp = (count / 1000) % 10;
\ 0081 01E803 LD BC,1000
\ 0084 DD5EFE LD E,(IX-2)
\ 0087 DD56FF LD D,(IX-1)
\ 008A CD0000 CALL LWRD ?SS_DIV_L02
\ 008D 010A00 LD BC,10
\ 0090 CDF100 CALL LWRD ?0109
37 *str = tmp + '0';
38 str++;
\ 0093 ?0014:
39 }
40 if(level >= 3)
\ 0093 010380 LD BC,32771
\ 0096 DD6EFC LD L,(IX-4)
\ 0099 DD66FD LD H,(IX-3)
\ 009C 78 LD A,B
\ 009D AC XOR H
\ 009E 67 LD H,A
\ 009F ED42 SBC HL,BC
\ 00A1 3811 JR C,?0016
\ 00A3 ?0015:
41 {
42 tmp = (count / 100) % 10;
\ 00A3 016400 LD BC,100
\ 00A6 DD5EFE LD E,(IX-2)
\ 00A9 DD56FF LD D,(IX-1)
\ 00AC CD0000 CALL LWRD ?SS_DIV_L02
\ 00AF 0E0A LD C,10
\ 00B1 CDF100 CALL LWRD ?0109
43 *str = tmp + '0';
44 str++;
\ 00B4 ?0016:
45 }
46 if(level >= 2)
\ 00B4 010280 LD BC,32770
\ 00B7 DD6EFC LD L,(IX-4)
\ 00BA DD66FD LD H,(IX-3)
\ 00BD 78 LD A,B
\ 00BE AC XOR H
\ 00BF 67 LD H,A
\ 00C0 ED42 SBC HL,BC
\ 00C2 380F JR C,?0018
\ 00C4 ?0017:
47 {
48 tmp = (count / 10) % 10;
\ 00C4 010A00 LD BC,10
\ 00C7 DD5EFE LD E,(IX-2)
\ 00CA DD56FF LD D,(IX-1)
\ 00CD CD0000 CALL LWRD ?SS_DIV_L02
\ 00D0 CDF100 CALL LWRD ?0109
49 *str = tmp + '0';
50 str++;
\ 00D3 ?0018:
51 }
52 tmp = count % 10;
\ 00D3 010A00 LD BC,10
\ 00D6 DD5EFE LD E,(IX-2)
\ 00D9 DD56FF LD D,(IX-1)
\ 00DC CD0000 CALL LWRD ?SS_MOD_L02
53 *str = tmp + '0';
\ 00DF 7B LD A,E
\ 00E0 C630 ADD A,48
\ 00E2 FD7700 LD (IY+0),A
54 *(str + 1) = '\0';
\ 00E5 FD7001 LD (IY+1),B
55 }
\ 00E8 DDF9 LD SP,IX
\ 00EA DDE1 POP IX
\ 00EC FDE1 POP IY
\ 00EE C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 00F1 ?0109:
\ 00F1 CD0000 CALL LWRD ?SS_MOD_L02
\ 00F4 7B LD A,E
\ 00F5 C630 ADD A,48
\ 00F7 FD7700 LD (IY+0),A
\ 00FA FD23 INC IY
\ 00FC C9 RET
\ 00FD ui_slider:
56
57
58 /*
59 ********************************************************************************
60 * Description : 滑动杆控件
61 *
62 * Arguments : slider, 滑动杆结构
63 callback, 滑动杆的回调函数,=NULL 表示没有回调函数
64 *
65 * Returns : 结果消息, 或者0
66 *
67 * Notes : 控件本身没有重画功能, 因为控件不能重画背景
68 *
69 ********************************************************************************
70 */
71 int ui_slider(slider_t *slider, const void (*callback)(int res_id))
72 {
\ 00FD C5 PUSH BC
\ 00FE FDE5 PUSH IY
\ 0100 DDE5 PUSH IX
\ 0102 DD210000 LD IX,0
\ 0106 DD39 ADD IX,SP
\ 0108 21F4FF LD HL,65524
\ 010B 39 ADD HL,SP
\ 010C F9 LD SP,HL
\ 010D D5 PUSH DE
\ 010E FDE1 POP IY
73 int start, end; //x坐标
74 char buf[10]; //注意可能含符号 <<-0000>>
75 // char *p; //格式化buf时使用
76 BYTE StrLength;
77 char key;
78 BOOL need_draw=TRUE;
79 BOOL value_changed=TRUE; //值是否改变, 需要callback
80
81 const region_t num_region={44, 16, 40, 16}; //数字区域
\ 0110 210600 LD HL,6
\ 0113 39 ADD HL,SP
\ 0114 EB EX DE,HL
\ 0115 210000 LD HL,?0019
\ 0118 010400 LD BC,4
\ 011B EDB0 LDIR
82 WORD value; //to keep slider->value
83 BYTE hold_state=0; //按住状态,为了加快控件改变的速度
84 //0:normal; 1:holding up, 2:holding down
85
86 ASSERT(slider->value <= slider->max);
87 ASSERT(slider->value >= slider->min);
88 ASSERT(slider->step > 0);
89 SetTextOutMode(1);
\ 011D 1E01 LD E,1
\ 011F CD0000 CALL LWRD SetTextOutMode
90 SetPenColor(Color_WHITE_def);
\ 0122 11FFFF LD DE,65535
\ 0125 CD0000 CALL LWRD SetPenColor
\ 0128 DD36F701 LD (IX-9),1
\ 012C DD36F601 LD (IX-10),1
\ 0130 DD36F500 LD (IX-11),0
\ 0134 ?0021:
91 //main_ResShowPic(SSBCK,0,0);
92
93 //SetPenColor(Color_WHITE_def);
94 //SetTextOutMode(0);
95
96
97 while(1)
98 {
99 if(need_draw)
\ 0134 AF XOR A
\ 0135 DDB6F7 OR (IX-9)
\ 0138 CA7E02 JP Z,?0024
\ 013B ?0023:
100 {
101
102 // value = slider_pox_x_def + 2 +
103 // (slider_width_def-2) * (slider->value - slider->min) / (slider->max - slider->min);
104 value = slider_pox_x_def +
105 (slider_width_def-8) * (slider->value - slider->min) / (slider->max - slider->min);
\ 013B FD4E02 LD C,(IY+2)
\ 013E FD4603 LD B,(IY+3)
\ 0141 FD6E06 LD L,(IY+6)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -