📄 ui_scroll.lst
字号:
91 滚动屏幕
92 */
93 void HoriScroll(signed char step,char language)
94 {
\ 00CC CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 00CF F2FF DEFW -14
\ 00D1 FDE5 PUSH IY
95 int code;
96 char *tmpstrpt;
97 region_t tregion;
98 region_t sregion;
99 region_t kregion;//余下部分区域
100
101 tmpstrpt = str_pt;
\ 00D3 FD2A0000 LD IY,(str_pt)
102
103 //余下部分区域
104 // kregion.x = scrollregionx_def+scrollregionw_def-step;
105 kregion.x = scrollregionx_def+scrollregionw_def-step;
\ 00D7 3EB9 LD A,185
\ 00D9 DD9602 SUB (IX+2)
\ 00DC DD77F2 LD (IX-14),A
106 kregion.y = scrollregiony_def;
\ 00DF DD36F36E LD (IX-13),110
107 kregion.width = step;
\ 00E3 DD4602 LD B,(IX+2)
\ 00E6 DD70F4 LD (IX-12),B
108 kregion.height = scrollregionh_def;
\ 00E9 DD36F510 LD (IX-11),16
109
110 //设定移动的源,目标区域
111 sregion.x = scrollregionx_def+step;//暂时未考虑为负数的情况
\ 00ED 78 LD A,B
\ 00EE C62D ADD A,45
\ 00F0 DD77F6 LD (IX-10),A
112 tregion.x = scrollregionx_def;
\ 00F3 DD36FA2D LD (IX-6),45
113 tregion.y = sregion.y = scrollregiony_def;
\ 00F7 DD36F76E LD (IX-9),110
\ 00FB DD36FB6E LD (IX-5),110
114 sregion.width = scrollregionw_def-step;
\ 00FF 3E8C LD A,140
\ 0101 90 SUB B
\ 0102 DD77F8 LD (IX-8),A
115 sregion.height = scrollregionh_def;
\ 0105 DD36F910 LD (IX-7),16
116
117 //向左移step列
118 RegionCopy(&sregion, &tregion);
\ 0109 210A00 LD HL,10
\ 010C 39 ADD HL,SP
\ 010D 4D LD C,L
\ 010E 44 LD B,H
\ 010F 210600 LD HL,6
\ 0112 39 ADD HL,SP
\ 0113 EB EX DE,HL
\ 0114 CD0000 CALL LWRD RegionCopy
\ 0117 ?0016:
119
120
121
122 test:
123 if (*str_pt == '\0')
\ 0117 2A0000 LD HL,(str_pt)
\ 011A AF XOR A
\ 011B B6 OR (HL)
\ 011C 200A JR NZ,?0018
\ 011E ?0017:
124 {
125 tmpstrpt = str_pt = strhead_pt;
\ 011E 2A0200 LD HL,(strhead_pt)
\ 0121 220000 LD (str_pt),HL
\ 0124 FD2A0200 LD IY,(strhead_pt)
\ 0128 ?0018:
126 }
127
128 //汉字和ASCII的不同处理
129 if ((*str_pt >= FirstSectionCode)&&(language!=1))
\ 0128 7E LD A,(HL)
\ 0129 FEA1 CP 161
\ 012B 3813 JR C,?0020
\ 012D DD4604 LD B,(IX+4)
\ 0130 05 DEC B
\ 0131 280D JR Z,?0020
\ 0133 ?0022:
\ 0133 ?0021:
\ 0133 ?0019:
130 {//汉字
131 code = *(int *)str_pt;
\ 0133 46 LD B,(HL)
\ 0134 DD70FE LD (IX-2),B
\ 0137 23 INC HL
\ 0138 66 LD H,(HL)
\ 0139 DD74FF LD (IX-1),H
132 tmpstrpt++;
133 }
134 else
\ 013C FD23 INC IY
\ 013E 1809 JR ?0023
\ 0140 ?0020:
135 {//ASCII
136 code = *str_pt;
\ 0140 4E LD C,(HL)
\ 0141 DD71FE LD (IX-2),C
\ 0144 0600 LD B,0
\ 0146 DD70FF LD (IX-1),B
\ 0149 ?0023:
137 }
138 tmpstrpt++;
139
140 if (!CharOutRect(code, &kregion, scroll_cnt))
\ 0149 3A0400 LD A,(scroll_cnt)
\ 014C 4F LD C,A
\ 014D C5 PUSH BC
\ 014E 210400 LD HL,4
\ 0151 39 ADD HL,SP
\ 0152 4D LD C,L
\ 0153 44 LD B,H
\ 0154 DD5EFE LD E,(IX-2)
\ 0157 DD56FF LD D,(IX-1)
\ 015A CD0000 CALL LWRD CharOutRect
\ 015D E1 POP HL
\ 015E B7 OR A
\ 015F FD23 INC IY
\ 0161 2009 JR NZ,?0025
\ 0163 ?0024:
141 {
142 //strhead_pt = str_pt;
143 str_pt = tmpstrpt;
\ 0163 FD220000 LD (str_pt),IY
144 scroll_cnt = 0;
\ 0167 320400 LD (scroll_cnt),A
145 goto test;
\ 016A 18AB JR ?0016
\ 016C ?0025:
146 }
147 scroll_cnt += step;//未支持负数
\ 016C 3A0400 LD A,(scroll_cnt)
\ 016F DD8602 ADD A,(IX+2)
\ 0172 320400 LD (scroll_cnt),A
148
149 }
\ 0175 FDE1 POP IY
\ 0177 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 017A Count:
150
151 int Count(char *str,char language) //统计字数
152 {
\ 017A CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 017D 0000 DEFW 0
\ 017F FDE5 PUSH IY
153 int n=0;
154 int m=0;
\ 0181 110000 LD DE,0
\ 0184 FD210000 LD IY,0
\ 0188 ?0027:
155 while(*str!=0)
\ 0188 DD6E02 LD L,(IX+2)
\ 018B DD6603 LD H,(IX+3)
\ 018E AF XOR A
\ 018F B6 OR (HL)
\ 0190 2841 JR Z,?0026
\ 0192 ?0028:
156 {
157 if((*str >= FirstSectionCode)&&(language!=1))
\ 0192 7E LD A,(HL)
\ 0193 FEA1 CP 161
\ 0195 3824 JR C,?0030
\ 0197 DD4604 LD B,(IX+4)
\ 019A 05 DEC B
\ 019B 281E JR Z,?0030
\ 019D ?0032:
\ 019D ?0031:
\ 019D ?0029:
158 {
159 if(m+16>scrollregionw_def)break;
\ 019D 211000 LD HL,16
\ 01A0 CDD901 CALL LWRD ?0045
\ 01A3 382E JR C,?0026
\ 01A5 ?0033:
\ 01A5 ?0034:
160 *str++;
\ 01A5 DD3402 INC (IX+2)
\ 01A8 2003 JR NZ,?0038
\ 01AA DD3403 INC (IX+3)
\ 01AD ?0038:
161 *str++;
\ 01AD DD3402 INC (IX+2)
\ 01B0 2003 JR NZ,?0039
\ 01B2 DD3403 INC (IX+3)
\ 01B5 ?0039:
162 n++;
\ 01B5 13 INC DE
163 m=m+16;
\ 01B6 011000 LD BC,16
\ 01B9 1814 JR ?0041
164 }
165 else
\ 01BB ?0030:
166 {
167 if(m+8>scrollregionw_def)break;
\ 01BB 210800 LD HL,8
\ 01BE CDD901 CALL LWRD ?0045
\ 01C1 3810 JR C,?0026
\ 01C3 ?0036:
\ 01C3 ?0037:
168 *str++;
\ 01C3 DD3402 INC (IX+2)
\ 01C6 2003 JR NZ,?0040
\ 01C8 DD3403 INC (IX+3)
\ 01CB ?0040:
169 n++;
\ 01CB 13 INC DE
170 m=m+8;
\ 01CC 010800 LD BC,8
\ 01CF ?0041:
\ 01CF FD09 ADD IY,BC
\ 01D1 ?0035:
\ 01D1 18B5 JR ?0027
\ 01D3 ?0026:
171 }
172 }
173 return n;
\ 01D3 EB EX DE,HL
174 }
\ 01D4 FDE1 POP IY
\ 01D6 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 01D9 ?0045:
\ 01D9 FDE5 PUSH IY
\ 01DB C1 POP BC
\ 01DC 09 ADD HL,BC
\ 01DD 4D LD C,L
\ 01DE 44 LD B,H
\ 01DF 218C00 LD HL,140
\ 01E2 C30000 JP LWRD ?SS_CMP_L02
175
\ 0000 RSEG UDATA0
\ 0000 str_pt:
\ 0002 DEFS 2
\ 0002 strhead_pt:
\ 0004 DEFS 2
\ 0004 scroll_cnt:
\ 0005 DEFS 1
\ 0005 END
Errors: none
Warnings: none
Code size: 485
Constant size: 0
Static variable size: Data(5) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -