📄 basal_reader_de.s01
字号:
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (IX-8),L
LD (IX-7),H
LD (IX-6),C
LD (IX-5),B
; 140. RowHeadPosition = 0;
; 141. for( row=0; row<SCR_ROW; )
LD (IX-17),1
LD IY,0
LD (IX-19),0
?0042:
LD A,(IX-19)
CP 7
JP NC,?0041
?0043:
; 142. {
; 143. if( ReReadFlag )
XOR A
OR (IX-17)
JP Z,?0054
?0044:
; 144. {
; 145. ReReadFlag = FALSE;
; 146. ReadFileLength += RowHeadPosition; // 已读长度 + 显示长度
LD HL,12
ADD HL,SP
PUSH IY
POP DE
LD BC,0
CALL LWRD ?L_ADDASG_L03
; 147. LeftFileLength -= RowHeadPosition; // 剩余长度 - 显示长度
LD HL,8
ADD HL,SP
PUSH IY
POP DE
LD BC,0
CALL LWRD ?L_SUBASG_L03
; 148. RowHeadPosition = 0;
; 149.
; 150. if( LeftFileLength == 0 )
LD (IX-17),0
LD IY,0
LD A,E
OR D
OR C
OR B
JP Z,?0041
?0046:
; 151. break; // 读文件结束
?0047:
; 152. if( LeftFileLength > BUFF_ONE_ROW *2)
LD L,(IX-10)
LD H,(IX-9)
PUSH HL
LD L,(IX-12)
LD H,(IX-11)
PUSH HL
LD BC,0
LD HL,40
CALL LWRD ?SL_CMP_L03
JR NC,?0049
?0048:
; 153. ReadLengthOneTime = BUFF_ONE_ROW*2;
LD (IX-14),L
LD (IX-13),B
; 154. else
JR ?0050
?0049:
; 155. ReadLengthOneTime = LeftFileLength;
LD L,(IX-12)
LD H,(IX-11)
LD (IX-14),L
LD (IX-13),H
?0050:
; 156.
; 157. str = read_buff(ViewFileStructPoint, ReadFileLength, ReadLengthOneTime );
LD H,(IX-13)
PUSH HL
LD L,(IX-6)
LD H,(IX-5)
PUSH HL
LD L,(IX-8)
LD H,(IX-7)
PUSH HL
CALL LWRD ?0191
POP AF
POP AF
POP AF
LD (IX-16),L
LD (IX-15),H
; 158. if( str == NULL )
LD A,L
OR H
JR NZ,?0052
?0051:
; 159. return 0;
LD L,B
JP LWRD ?0092
?0052:
; 160.
; 161. if(row==0) //取当前屏第一行的数据作为书签的标题
XOR A
OR (IX-19)
JR NZ,?0054
?0053:
; 162. {
; 163. memcpy(fileName,str,sizeof(fileName)); //fileName--当前建立书签时的标题
LD C,50
LD DE,fileName
LDIR
?0054:
?0045:
?0056:
; 164. }
; 165. }
; 166.
; 167. for( ; RowHeadPosition<ReadLengthOneTime; RowHeadPosition++ )
LD C,(IX-14)
LD B,(IX-13)
PUSH IY
POP HL
AND A
SBC HL,BC
JR NC,?0055
?0057:
; 168. {
; 169. CLEAR_WATCHDOG(); //清WATCH DOG
IN A,(78)
SET 3,A
OUT (78),A
; 170. // 过滤 0x0d & 0x0a
; 171. if( str[RowHeadPosition]!=0x0d && str[RowHeadPosition]!=0x0a )
PUSH IY
POP HL
LD C,(IX-16)
LD B,(IX-15)
ADD HL,BC
LD A,(HL)
CP 13
JR Z,?0060
PUSH IY
POP HL
ADD HL,BC
LD A,(HL)
CP 10
JR NZ,?0055
?0062:
?0061:
?0059:
; 172. break;
?0060:
INC IY
JR ?0054
?0055:
; 173. }
; 174.
; 175. if( (RowHeadPosition==ReadLengthOneTime) || ((RowHeadPosition+SCR_COL>=ReadLengthOneTime) && (ReadLengthOneTime!=LeftFileLength)) )
LD L,(IX-14)
LD H,(IX-13)
PUSH IY
POP BC
AND A
SBC HL,BC
JR Z,?0181
LD HL,20
ADD HL,BC
LD C,(IX-14)
LD B,(IX-13)
AND A
SBC HL,BC
JR C,?0064
LD L,C
LD H,B
LD DE,0
LD C,(IX-12)
LD B,(IX-11)
SBC HL,BC
JR NZ,?0181
EX DE,HL
LD C,(IX-10)
LD B,(IX-9)
SBC HL,BC
JR Z,?0064
?0181:
?0068:
?0067:
?0065:
?0066:
?0063:
; 176. {
; 177. ReReadFlag = TRUE; // 需要重新读入数据(第一种情况是一次读取的数据已经显示完毕;
LD (IX-17),1
; 178. //第二种情况是一次读取的剩余数据不足显示一行)
; 179. }
; 180. else
JP LWRD ?0042
?0064:
; 181. {
; 182. // 计算显示一行的字数(包括汉字或英文字)
; 183. for( col=CountWords=0; (col<SCR_COL)&&(RowHeadPosition+col<ReadLengthOneTime); CountWords++ )
LD (IX-18),0
LD (IX-20),0
?0071:
LD A,(IX-20)
CP 20
JR NC,?0070
LD C,A
LD B,0
PUSH IY
POP HL
ADD HL,BC
LD C,(IX-14)
LD B,(IX-13)
AND A
SBC HL,BC
JR NC,?0070
?0074:
?0073:
?0072:
; 184. {
; 185. if( str[ RowHeadPosition+col ]==0x0d || str[ RowHeadPosition+col ]==0x0a ) //换行
LD C,A
LD B,0
PUSH IY
POP HL
ADD HL,BC
LD C,(IX-16)
LD B,(IX-15)
ADD HL,BC
LD A,(HL)
CP 13
JR Z,?0070
LD C,(IX-20)
LD B,0
PUSH IY
POP HL
ADD HL,BC
LD C,(IX-16)
LD B,(IX-15)
ADD HL,BC
LD A,(HL)
CP 10
JR Z,?0070
?0078:
?0079:
?0076:
; 186. break;
?0077:
; 187.
; 188. if( str[ RowHeadPosition+col ]<0x80 )
LD C,(IX-20)
LD B,0
PUSH IY
POP HL
ADD HL,BC
LD C,(IX-16)
LD B,(IX-15)
ADD HL,BC
LD A,(HL)
CP 128
JR NC,?0081
?0080:
; 189. col += 1;
INC (IX-20)
JR ?0085
?0081:
; 190. else if( col<SCR_COL-1 )
LD A,(IX-20)
CP 19
JR NC,?0070
?0083:
; 191. col += 2;
ADD A,2
LD (IX-20),A
; 192. else
?0084:
; 193. break;
?0085:
?0082:
INC (IX-18)
JR ?0071
?0070:
; 194. }
; 195.
; 196. if( !DealMode )
XOR A
OR (IX-2)
JR NZ,?0087
?0086:
; 197. { // 显示
; 198. if( !CheckLangID( ViewFileStructPoint->langid ) )
LD HL,18
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD E,(HL)
LD A,BYTE3 CheckLangID
LD HL,LWRD CheckLangID
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR NZ,?0089
?0088:
; 199. CountWords = col;
LD B,(IX-20)
LD (IX-18),B
?0089:
; 200. ///-SetTextPos(POSITION_TXT_START_POSX, (SCR_ROW-row)*16-9);
; 201. SetTextPos(POSITION_TXT_START_POSX, row*16+8);
LD A,(IX-19)
ADD A,A
ADD A,A
ADD A,A
ADD A,A
ADD A,8
LD C,A
LD E,6
CALL LWRD SetTextPos
; 202. PutS( &str[RowHeadPosition], CountWords );
LD C,(IX-18)
PUSH IY
POP HL
LD E,(IX-16)
LD D,(IX-15)
ADD HL,DE
EX DE,HL
CALL LWRD PutS
?0087:
; 203. }
; 204. RowHeadPosition += col;
LD C,(IX-20)
LD B,0
ADD IY,BC
; 205. row ++;
INC (IX-19)
?0069:
JP LWRD ?0042
?0041:
; 206. }
; 207. }
; 208.
; 209.
; 210. if(DealMode != 2)
LD B,(IX-2)
DEC B
DEC B
JR Z,?0091
?0090:
; 211. {
; 212. ViewFileStructPoint->PrevSeek = ViewFileStructPoint->CurrentSeek; //保留有效屏的位置
LD HL,10
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
PUSH BC
LD HL,6
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
POP BC
PUSH DE
LD (HL),C
LD D,B
POP BC
INC HL
LD (HL),D
INC HL
LD (HL),C
INC HL
LD (HL),B
; 213. ViewFileStructPoint->CurrentSeek = ReadFileLength + RowHeadPosition; // 计算下一页的起始地址
LD HL,10
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
PUSH HL
PUSH IY
POP DE
LD BC,0
PUSH BC
PUSH DE
LD L,(IX-8)
LD H,(IX-7)
POP BC
ADD HL,BC
EX DE,HL
LD L,(IX-6)
LD H,(IX-5)
POP BC
ADC HL,BC
LD C,L
LD B,H
POP HL
LD (HL),E
INC HL
LD (HL),D
INC HL
LD (HL),C
INC HL
LD (HL),B
?0091:
; 214. }
; 215.
; 216. return row;
LD L,(IX-19)
; 217.
; 218. }
?0092:
JP LWRD ?0015
?0191:
LD E,(IX-4)
LD D,(IX-3)
LD A,BYTE3 read_buff
LD HL,LWRD read_buff
JP LWRD ?BANK_CALL_DIRECT_L08
view_page_up:
; 219.
; 220. //////////////////////////////////////////////////
; 221. //向前翻阅
; 222. byte view_page_up(STRUCT_VIEW_FILE *ViewFileStructPoint , int BackGroundID)
; 223. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH DE
LD HL,65518
ADD HL,SP
LD SP,HL
; 224. //long lBakSeek[SCR_ROW+1];
; 225. long ReadFileLength; // 已读取的文件长度
; 226. uint ReadLengthOneTime; //读取一次数据的长度
; 227. uint RowHeadPosition; //行首地址(在一次所读数据中的位置)
; 228. uint ByteCount; //字符数累加
; 229. BOOL ReturnFlag; //换行标志
; 230. BOOL ReReadFlag; //重读标志
; 231. char FileHeadFlag=0;
; 232. byte row, col; //显示的行列号
; 233. byte chr;
; 234.
; 235. byte *str, *p;
; 236. //SetBackgdColor(Color_BLACK_def);
; 237. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 238.
; 239. if( ViewFileStructPoint->PrevSeek != 0 )
LD (IX-5),0
LD HL,6
LD E,(IX-4)
LD D,(IX-3)
ADD HL,DE
LD A,(HL)
INC HL
OR (HL)
INC HL
OR (HL)
INC HL
OR (HL)
JR Z,?0094
?0093:
; 240. {
; 241. ToPrevScreenPosition(ViewFileStructPoint);
LD A,BYTE3 ToPrevScreenPosition
LD HL,LWRD ToPrevScreenPosition
CALL LWRD ?BANK_CALL_DIRECT_L08
; 242. ViewFileStructPoint->PrevSeek = 0;
LD HL,6
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
XOR A
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
INC HL
LD (HL),A
?0094:
; 243. }
; 244. if( 0 == ViewFileStructPoint->CurrentSeek )
LD HL,10
LD C,(IX-4)
LD B,(IX-3)
ADD HL,BC
LD A,(HL)
INC HL
OR (HL)
INC HL
OR (HL)
INC HL
OR (HL)
JP Z,?0186
?0095:
; 245. return 0; // 不能向前翻页
?0096:
; 246.
; 247. // 计算向前翻页最接近的偏移(ReadFileLength)
; 248. ReturnFlag = FALSE; // 0x0D, 0x0A 标志
; 249. ByteCount = 0;
; 250. ReadLengthOneTime = 0 ;
; 251. ReadFileLength = ViewFileStructPoint->CurrentSeek;
LD HL,10
ADD HL,BC
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (IX-22),L
LD (IX-21),H
LD (IX-20),C
LD (IX-19),B
LD (IX-6),0
XOR A
LD (IX-16),A
LD (IX-15),A
LD IY,0
?0098:
; 252. while( ReadFileLength != 0 )
LD A,(IX-22)
OR (IX-21)
OR (IX-20)
OR (IX-19)
JP Z,?0097
?0099:
; 253. {
; 254. if( ReadLengthOneTime == 0 )
PUSH IY
POP HL
LD A,L
OR H
JR NZ,?0101
?0100:
; 255. {
; 256. if( ReadFileLength > BUFF_ONE_ROW *2)
LD L,(IX-20)
LD H,(IX-19)
PUSH HL
LD L,(IX-22)
LD H,(IX-21)
PUSH HL
LD C,A
LD B,A
LD HL,40
CALL LWRD ?SL_CMP_L03
JR NC,?0103
?0102:
; 257. ReadLengthOneTime = BUFF_ONE_ROW*2;
LD IY,40
; 258. else
JR ?0104
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -