ui_scroll.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 583 行
S01
583 行
NAME ui_scroll(17)
RSEG COM_SCROLL(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
EXTERN CharOutRect
EXTERN GetOutPutErr
EXTERN GetTextPos
PUBLIC HoriScroll
EXTERN PutS
PUBLIC Scroll
EXTERN SetAsciiFont
EXTERN SetBackgdColor
EXTERN SetTextPos
EXTERN TextOutRect
PUBLIC rTmp
EXTERN scroll_cnt
EXTERN str_pt
EXTERN strhead_pt
EXTERN ?CLZ80B_4_04_L00
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG COM_SCROLL
Scroll:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * wma player basal module implementation
; 5. *
; 6. * (c) Copyright Actions Co,Ld.
; 7. *
; 8. * $Id: ui_scroll.c,v 1.3 2004/12/30 09:22:32 ybfu Exp $
; 9. *******************************************************************************
; 10. */
; 11. /*
; 12. 这个函数的作用是在汇编程序外包一层 C ,这样汇编在C中用BANK方式CALL
; 13. */
; 14. #pragma codeseg(COM_SCROLL)
; 15. #include "actos.h"
; 16. #include "ap_common.h"
; 17.
; 18. ///-char *str_pt;//字符串当前指针
; 19. ///-char *strhead_pt;//字串首址记录
; 20. ///-BYTE scroll_cnt;
; 21.
; 22. char rTmp=0;
; 23.
; 24. //好像有八个点的误差在scroll开头
; 25.
; 26. void HoriScroll(signed char step,char language);
; 27.
; 28. /* (字符串首址,是否初始化true为要初始化) */
; 29. void Scroll( char * scrollstr, char language)
; 30. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65532
; 31. region_t tregion;
; 32.
; 33. tregion.x = scrollregionx_def;
LD (IX-4),48
; 34. tregion.y = scrollregiony_def;
LD (IX-3),45
; 35. tregion.width = scrollregionw_def;
LD (IX-2),128
; 36. tregion.height = scrollregionh_def;
LD (IX-1),16
; 37.
; 38. SetAsciiFont(FONT_TYPE_LARGE);
LD E,4
CALL LWRD SetAsciiFont
; 39. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
CALL LWRD SetBackgdColor
; 40.
; 41. TextOutRect(&tregion ,1);
LD C,1
LD HL,0
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 42. HoriScroll(1,language);
LD C,(IX+4)
LD E,1
LD A,BYTE3 HoriScroll
LD HL,LWRD HoriScroll
CALL LWRD ?BANK_CALL_DIRECT_L08
; 43. TextOutRect(&tregion ,0);
LD C,0
LD L,C
LD H,C
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 44.
; 45. ///-SetBackgdColor(Color_MENU_def);
; 46. SetAsciiFont(FONT_TYPE_DEFAULT);
LD E,4
CALL LWRD SetAsciiFont
; 47. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
HoriScroll:
; 48. /*
; 49. int ReadCode(char *tmpstrpt1,char language)
; 50. {
; 51. int code;
; 52.
; 53. if((language>4)||(language==1))
; 54. {//ASCII
; 55. code = *tmpstrpt1;
; 56. }
; 57. else if(language==3)
; 58. {//jap
; 59. if (*tmpstrpt1 >= 0x81)
; 60. {
; 61. code = *(int *)tmpstrpt1;
; 62. }
; 63. else
; 64. {//ASCII
; 65. code = *tmpstrpt1;
; 66. }
; 67. }
; 68. else if (*tmpstrpt1 >= FirstSectionCode)
; 69. {//汉字
; 70. code = *(int *)tmpstrpt1;
; 71. }
; 72. else
; 73. {//ASCII
; 74. code = *tmpstrpt1;
; 75. }
; 76. return code;
; 77. }
; 78. */
; 79.
; 80. //==========================================================
; 81. /*
; 82. 滚动屏幕
; 83. */
; 84. void HoriScroll(signed char step,char language)
; 85. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -8
PUSH IY
; 86. int code;
; 87. char *tmpstrpt,*tmpstrpt1;
; 88. region_t kregion;//余下部分区域
; 89.
; 90. if (*str_pt == '\0')
LD HL,(str_pt)
XOR A
OR (HL)
JR NZ,?0003
?0002:
; 91. {
; 92. scroll_cnt = 0;
LD (scroll_cnt),A
; 93. rTmp = 0;
LD (rTmp),A
; 94. str_pt = strhead_pt;
LD HL,(strhead_pt)
LD (str_pt),HL
?0003:
; 95. }
; 96.
; 97. tmpstrpt = str_pt;
LD (IX-4),L
LD (IX-3),H
; 98.
; 99. if((language>4)||(language==1))
LD A,4
CP C
JR C,?0015
LD B,C
DEC B
JR Z,?0015
?0006:
?0007:
?0004:
; 100. {//ASCII
; 101. ///code = *str_pt;
; 102. ///kregion.width = 8 - scroll_cnt;
; 103. goto L_ASCII_COMMON;
?0005:
; 104. }
; 105. else if(language==3)
LD A,(IX+4)
CP 3
LD A,(HL)
JR NZ,?0010
?0009:
; 106. {//jap
; 107. if (*str_pt >= 0x81)
CP 129
JR C,?0015
?0011:
; 108. {
; 109. ///code = *(int *)str_pt;
; 110. ///kregion.width = 16 - scroll_cnt;
; 111. ///tmpstrpt++;
; 112. goto L_2BYTE_COMMON;
JR ?0014
?0012:
; 113. }
; 114. else
; 115. {//ASCII
; 116. ///code = *str_pt;
; 117. ///kregion.width = 8 - scroll_cnt;
; 118. goto L_ASCII_COMMON;
?0010:
; 119. }
; 120. }
; 121. else if (*str_pt >= FirstSectionCode)
CP 161
JR C,?0015
?0014:
?0013:
; 122. {//汉字
; 123. L_2BYTE_COMMON:
; 124. code = *(int *)str_pt;
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
PUSH HL
POP IY
; 125. kregion.width = 16 - scroll_cnt;
LD A,(scroll_cnt)
LD B,A
LD A,16
SUB B
LD (IX-6),A
; 126. tmpstrpt++;
INC (IX-4)
JR NZ,?0016
INC (IX-3)
; 127. }
; 128. else
JR ?0016
?0015:
?0008:
; 129. {//ASCII
; 130. L_ASCII_COMMON:
; 131. code = *str_pt;
LD C,(HL)
LD B,0
PUSH BC
POP IY
; 132. kregion.width = 8 - scroll_cnt;
LD A,(scroll_cnt)
LD B,A
LD A,8
SUB B
LD (IX-6),A
?0016:
; 133. }
; 134.
; 135. tmpstrpt++;
INC (IX-4)
JR NZ,?0056
INC (IX-3)
?0056:
; 136.
; 137. kregion.x = scrollregionx_def;
LD (IX-8),48
; 138. kregion.y = scrollregiony_def;
LD (IX-7),45
; 139. kregion.height = scrollregionh_def;
LD (IX-5),16
; 140.
; 141. if(!CharOutRect(code, *(str_pt+1), &kregion, scroll_cnt))
LD C,B
PUSH BC
LD HL,4
ADD HL,SP
PUSH HL
LD HL,(str_pt)
CALL LWRD ?0061
POP HL
POP HL
OR A
JR NZ,?0018
?0017:
; 142. {
; 143. tmpstrpt+=rTmp;
LD BC,(rTmp)
LD B,A
LD HL,6
ADD HL,SP
LD A,(HL)
ADD A,C
LD (HL),A
INC HL
LD A,(HL)
ADC A,B
LD (HL),A
; 144. str_pt = tmpstrpt;
LD L,(IX-4)
LD H,A
LD (str_pt),HL
; 145. scroll_cnt = 0;
XOR A
LD (scroll_cnt),A
; 146. rTmp = 0;
LD (rTmp),A
; 147. }
; 148. else
JR ?0019
?0018:
; 149. {
; 150. rTmp = 0;
XOR A
LD (rTmp),A
; 151.
; 152. if(language == 14)
LD A,(IX+4)
CP 14
JR NZ,?0022
?0020:
?0023:
; 153. {
; 154. while(1)
; 155. {
; 156. code = *tmpstrpt;
LD L,(IX-4)
LD H,(IX-3)
LD C,(HL)
LD B,0
PUSH BC
POP IY
; 157. if(code == 0xd1 || (code >=0xd4 && code<0xdb) ||(code >=0xe7 && code<0xef))
LD A,209
XOR C
JR Z,?0032
LD BC,32980
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0030
LD BC,32987
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0032
?0030:
?0029:
LD BC,32999
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0022
LD BC,33007
PUSH IY
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0022
?0032:
?0031:
?0027:
?0028:
?0025:
; 158. {
; 159. CharOutRect(code, *(tmpstrpt+1), &kregion, scroll_cnt);
LD A,(scroll_cnt)
LD C,A
PUSH BC
LD HL,4
ADD HL,SP
PUSH HL
LD L,(IX-4)
LD H,(IX-3)
CALL LWRD ?0061
POP HL
POP HL
; 160. tmpstrpt++;
INC (IX-4)
JR NZ,?0057
INC (IX-3)
?0057:
; 161. rTmp++;
LD HL,rTmp
INC (HL)
; 162. }
; 163. else break;
JR ?0020
?0026:
?0033:
; 164. }
; 165. }
?0022:
?0021:
; 166.
; 167. scroll_cnt++;
LD HL,scroll_cnt
INC (HL)
?0019:
; 168. }
; 169.
; 170. SetTextPos(kregion.width+kregion.x, scrollregiony_def);
LD C,45
LD A,(IX-8)
ADD A,(IX-6)
LD E,A
CALL LWRD SetTextPos
; 171. tmpstrpt1 = PutS(tmpstrpt, -1);
LD C,255
LD E,(IX-4)
LD D,(IX-3)
CALL LWRD ?0062
; 172.
; 173. if (GetOutPutErr() == RESULT_PUTCHAR_X_ERR)
JR Z,?0037
?0034:
; 174. {//x超限
; 175.
; 176. goto L_X_ERR_COMMON;
?0035:
; 177. }
; 178. else
; 179. {
; 180. GetTextPos(&kregion.x, &kregion.y);
LD HL,2
ADD HL,SP
CALL LWRD ?0063
; 181. tmpstrpt1 = PutS(strhead_pt, -1);
LD C,255
LD DE,(strhead_pt)
CALL LWRD ?0062
; 182. if (GetOutPutErr() == RESULT_PUTCHAR_X_ERR)
JR NZ,?0038
?0037:
?0036:
; 183. {//x超限
; 184.
; 185. L_X_ERR_COMMON:
; 186.
; 187. GetTextPos(&kregion.x, &kregion.y);
LD HL,2
ADD HL,SP
CALL LWRD ?0063
; 188.
; 189. kregion.width = scrollregionw_def+scrollregionx_def - kregion.x;
LD A,176
SUB (IX-8)
LD (IX-6),A
; 190. kregion.height = scrollregionh_def;
LD (IX-5),16
; 191. //汉字和ASCII的不同处理
; 192.
; 193. ///code = ReadCode(tmpstrpt1,language);
; 194. //---------------------------------------
; 195. if((language>4)||(language==1))
LD A,4
CP (IX+4)
JR C,?0051
LD B,(IX+4)
DEC B
JR Z,?0051
?0041:
?0042:
?0039:
; 196. {//ASCII
; 197. code = *tmpstrpt1;
?0040:
; 198. }
; 199. else if(language==3)
LD A,(IX+4)
CP 3
LD L,(IX-2)
LD H,(IX-1)
LD A,(HL)
JR NZ,?0045
?0044:
; 200. {//jap
; 201. if (*tmpstrpt1 >= 0x81)
CP 129
JR C,?0059
?0046:
; 202. {
; 203. code = *(int *)tmpstrpt1;
JR ?0060
; 204. }
; 205. else
?0047:
; 206. {//ASCII
; 207. code = *tmpstrpt1;
?0048:
?0045:
; 208. }
; 209. }
; 210. else if (*tmpstrpt1 >= FirstSectionCode)
CP 161
JR C,?0051
?0050:
; 211. {//汉字
; 212. code = *(int *)tmpstrpt1;
?0060:
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
PUSH HL
POP IY
; 213. }
; 214. else
JR ?0052
?0051:
; 215. {//ASCII
; 216. code = *tmpstrpt1;
LD L,(IX-2)
LD H,(IX-1)
?0059:
LD C,(HL)
LD B,0
PUSH BC
POP IY
?0052:
?0049:
?0043:
; 217. }
; 218. //---------------------------------------
; 219.
; 220. //输出最后一个字
; 221. CharOutRect(code, *(tmpstrpt1+1), &kregion, 0);
LD C,0
PUSH BC
LD HL,4
ADD HL,SP
PUSH HL
LD L,(IX-2)
LD H,(IX-1)
CALL LWRD ?0061
POP HL
POP HL
?0038:
; 222.
; 223. }
; 224. }
; 225.
; 226. }
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0061:
INC HL
LD C,(HL)
LD B,0
PUSH IY
POP DE
JP LWRD CharOutRect
?0062:
CALL LWRD PutS
LD (IX-2),L
LD (IX-1),H
CALL LWRD GetOutPutErr
DEC A
RET
?0063:
LD BC,1
ADD HL,BC
LD C,L
LD B,H
DEC HL
EX DE,HL
JP LWRD GetTextPos
RSEG IDATA0
rTmp:
DEFS 1
RSEG CDATA0
DEFB 0
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?