⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basal_reader_de.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 3 页
字号:
	NAME	basal_reader_de(17)
	RSEG	MO_BS_TXT(0)
	RSEG	UDATA0(0)
	PUBLIC	CheckLangID
	EXTERN	ClearScreen
	EXTERN	FS_FRead
	EXTERN	FS_FSeek
	EXTERN	PutS
	EXTERN	SetTextPos
	PUBLIC	ToPrevScreenPosition
	EXTERN	fileName
	EXTERN	g_reader_vars
	PUBLIC	lBakSeek
	PUBLIC	read_buff
	PUBLIC	read_text
	PUBLIC	view_page_down
	PUBLIC	view_page_up
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SL_DIV_L03
	EXTERN	?SL_MOD_L03
	EXTERN	?SL_CMP_L03
	EXTERN	?L_ADDASG_L03
	EXTERN	?L_SUBASG_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?MEMSET_L11
	RSEG	MO_BS_TXT
ToPrevScreenPosition:
; 1.	/*
; 2.	********************************************************************************
; 3.	*                       ACTOS
; 4.	*                 Reader basal module
; 5.	*                                                                         
; 6.	*                (c) Copyright 2002-2003, Actions Co,Ld.                       
; 7.	*                        All Right Reserved                               
; 8.	*
; 9.	* File   : basal_reader_de.c
; 10.	* By     : 
; 11.	* Version: 1> v1.00     first version     2006-4-13 15:49
; 12.	********************************************************************************
; 13.	********************************************************************************
; 14.	*/
; 15.	#pragma codeseg(MO_BS_TXT)  
; 16.	#include "actos.h" 
; 17.	#include "basal.h"
; 18.	#include "ap_reader.h"  
; 19.	#include "filesys.h"    
; 20.	#include  "TxtDec.h"   
; 21.	
; 22.	#include "ap_common.h"
; 23.	#include  "display.h"
; 24.	#include <Intrz80.h>
; 25.	#include "bookmark.h"
; 26.	#pragma memory=default
; 27.	extern char  fileName[50]; //存放书签头部信息的buffer
; 28.	long lBakSeek[SCR_ROW+1]; 
; 29.	#define CLEAR_WATCHDOG() output8(REG4E_RTC_WATCH_DOG, (input8(REG4E_RTC_WATCH_DOG) | 0x08))
; 30.	
; 31.	//////////////////////////////////////////////////
; 32.	//恢复前一屏在文件中的位置
; 33.	void ToPrevScreenPosition( STRUCT_VIEW_FILE *ViewFileStructPoint )
; 34.	{
	PUSH	BC
	PUSH	IX
	PUSH	DE
	POP	IX
; 35.	    // CurrentSeek指向当前屏的起始位置
; 36.	    ViewFileStructPoint->CurrentSeek = ViewFileStructPoint->PrevSeek;
	LD	HL,6
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	LD	(IX+10),L
	LD	(IX+11),H
	LD	(IX+12),C
	LD	(IX+13),B
; 37.	}
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
CheckLangID:
; 38.	
; 39.	//////////////////////////////////////////////////
; 40.	//检查是否为双字节字 返回TRUE表示双字节字,FALSE表示单字节字
; 41.	BOOL CheckLangID( byte LangID )
; 42.	{
	PUSH	BC
	PUSH	DE
; 43.	    
; 44.	    return ( LangID != LAN_ID_ENGLISH && LangID < 5 );
	LD	B,E
	DEC	B
	JR	Z,?0002
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	CP	5
	JR	NC,?0002
	LD	L,1
	JR	?0004
?0002:
	LD	L,0
?0004:
; 45.	}
	POP	AF
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
read_text:
; 46.	//////////////////////////////////////////////////
; 47.	//根据扇区号的值读数据到bufFile[],同时将之前的扇区数据保存头尾
; 48.	BOOL read_text(STRUCT_VIEW_FILE *ViewFileStructPoint, uint nFileSector )
; 49.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	AF
	PUSH	DE
	POP	IY
; 50.	    byte i;
; 51.	
; 52.	    if( nFileSector >= g_reader_vars.g_txt.SectorTotal )
	LD	DE,(g_reader_vars+65)
	LD	L,C
	LD	H,B
	AND	A
	SBC	HL,DE
	JR	C,?0006
?0005:
; 53.	        return FALSE;
	LD	L,0
	JP	LWRD ?0015
?0006:
; 54.	
; 55.	    if( (nFileSector != ViewFileStructPoint->BufSector)||(nFileSector==0) )
	LD	L,(IY+14)
	LD	H,(IY+15)
	AND	A
	SBC	HL,BC
	JR	NZ,?0009
	LD	A,C
	OR	B
	JR	NZ,?0008
?0009:
?0010:
?0007:
; 56.	    {
; 57.	        ViewFileStructPoint->BufSector = nFileSector;
	LD	(IY+14),C
	LD	(IY+15),B
; 58.	
; 59.	        for( i=0; i<(BUFF_ONE_ROW); i++ )
	LD	(IX-4),0
?0012:
	LD	A,(IX-4)
	CP	20
	JR	NC,?0011
?0013:
; 60.	        {
; 61.	            // 保留尾部数据到 bufPrev, 保留头部数据到 bufNext
; 62.	            ViewFileStructPoint->bufPrev[i] = ViewFileStructPoint->bufFile[ FILE_SECTOR-(BUFF_ONE_ROW)+i ];
	LD	C,A
	LD	B,0
	PUSH	IY
	POP	HL
	ADD	HL,BC
	LD	BC,531
	ADD	HL,BC
	LD	B,(HL)
	PUSH	BC
	LD	C,A
	LD	B,0
	PUSH	IY
	POP	HL
	ADD	HL,BC
	LD	C,19
	ADD	HL,BC
	POP	BC
	LD	(HL),B
; 63.	            ViewFileStructPoint->bufNext[i] = ViewFileStructPoint->bufFile[ i ];
	LD	C,A
	LD	B,0
	PUSH	IY
	POP	HL
	ADD	HL,BC
	LD	C,39
	ADD	HL,BC
	LD	B,(HL)
	PUSH	BC
	LD	C,A
	LD	B,0
	PUSH	IY
	POP	HL
	ADD	HL,BC
	LD	BC,551
	ADD	HL,BC
	POP	BC
	LD	(HL),B
	INC	(IX-4)
	JR	?0012
?0011:
; 64.	        }
; 65.	        // 读一个扇区到 ViewFileStructPoint->bufFile
; 66.	        CLEAR_WATCHDOG();   //清WATCH DOG
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 67.	        FS_FSeek( ViewFileStructPoint->BufSector, SEEK_SET, ViewFileStructPoint->FileHandle );
	LD	L,(IY+0)
	LD	H,(IY+1)
	PUSH	HL
	LD	C,0
	PUSH	BC
	LD	E,(IY+14)
	LD	D,(IY+15)
	LD	B,C
	CALL	LWRD FS_FSeek
	POP	HL
	POP	HL
; 68.	        FS_FRead( (byte*)ViewFileStructPoint->bufFile, 1, ViewFileStructPoint->FileHandle );
	LD	L,(IY+0)
	LD	H,(IY+1)
	PUSH	HL
	LD	C,1
	LD	HL,39
	PUSH	IY
	POP	DE
	ADD	HL,DE
	EX	DE,HL
	CALL	LWRD FS_FRead
	POP	HL
?0008:
; 69.	    }
; 70.	    return TRUE;
	LD	L,1
; 71.	}
?0015:
	LD	SP,IX
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
read_buff:
; 72.	
; 73.	//////////////////////////////////////////////////
; 74.	//根据给定的文件内地址读数据到bufPrev,bufFile和bufPrev中,并返回当前显示数据在buffer中的位置
; 75.	byte* read_buff(STRUCT_VIEW_FILE *ViewFileStructPoint, long OA_LongAddr, unsigned short ReadDataLength )
; 76.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	AF
	PUSH	AF
	PUSH	DE
	POP	IY
; 77.	    uint nSector, nOffset;
; 78.	
; 79.	    if( (OA_LongAddr<ViewFileStructPoint->FileLengthBytes) && (ReadDataLength<FILE_SECTOR) )
	INC	DE
	INC	DE
	EX	DE,HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	PUSH	BC
	PUSH	DE
	LD	C,(IX+12)
	LD	B,(IX+13)
	LD	L,(IX+10)
	LD	H,(IX+11)
	CALL	LWRD ?SL_CMP_L03
	JP	NC,?0031
	LD	BC,512
	LD	L,(IX+14)
	LD	H,(IX+15)
	AND	A
	SBC	HL,BC
	JP	NC,?0031
?0019:
?0018:
?0016:
; 80.	    {
; 81.	        nSector = OA_LongAddr / FILE_SECTOR;
	LD	L,C
	LD	H,C
	PUSH	HL
	PUSH	BC
	LD	C,(IX+12)
	LD	B,(IX+13)
	LD	L,(IX+10)
	LD	H,(IX+11)
	CALL	LWRD ?SL_DIV_L03
	LD	(IX-2),L
	LD	(IX-1),H
; 82.	        nOffset = OA_LongAddr % FILE_SECTOR;
	LD	HL,0
	PUSH	HL
	LD	H,2
	PUSH	HL
	LD	C,(IX+12)
	LD	B,(IX+13)
	LD	L,(IX+10)
	LD	H,(IX+11)
	CALL	LWRD ?SL_MOD_L03
	LD	(IX-4),L
	LD	(IX-3),H
; 83.	
; 84.	        
; 85.	        if( nOffset + ReadDataLength <= FILE_SECTOR )    //第一种情况:不超过一块
	LD	C,(IX+14)
	LD	B,(IX+15)
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,512
	AND	A
	SBC	HL,BC
	JR	C,?0021
?0020:
; 86.	        {
; 87.	            if( !read_text(ViewFileStructPoint, nSector ) )
	CALL	LWRD ?0189
	INC	L
	DEC	L
	JR	NZ,?0029
?0022:
; 88.	                return NULL;        // 失败
	JR	?0031
?0023:
; 89.	            return (byte*)ViewFileStructPoint->bufFile + nOffset;
; 90.	        }
?0021:
; 91.	        else if( nOffset + ReadDataLength <= FILE_SECTOR + (BUFF_ONE_ROW) ) //第二种情况:超过一块, 不超过FILE_SECTOR + BUFF_ONE_ROW  
	LD	L,(IX+14)
	LD	H,(IX+15)
	LD	C,(IX-4)
	LD	B,(IX-3)
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,532
	AND	A
	SBC	HL,BC
	JR	C,?0025
?0024:
; 92.	        {
; 93.	            if( !read_text(ViewFileStructPoint, nSector+1 ) )
	LD	C,(IX-2)
	LD	B,(IX-1)
	INC	BC
	CALL	LWRD ?0190
	INC	L
	DEC	L
	JR	Z,?0031
?0026:
; 94.	                return NULL;        // 失败
?0027:
; 95.	            if( !read_text(ViewFileStructPoint, nSector ) )    //通过两次读取,将下一扇区的头部数据保存到BufNext中
	CALL	LWRD ?0189
	INC	L
	DEC	L
	JR	Z,?0031
?0028:
; 96.	                return NULL;        // 失败
?0029:
; 97.	            return (byte*)ViewFileStructPoint->bufFile + nOffset;
	LD	HL,39
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	C,(IX-4)
	LD	B,(IX-3)
	JR	?0179
; 98.	        }
?0025:
; 99.	        else if( nOffset > FILE_SECTOR - (BUFF_ONE_ROW) )    //第三种情况:处理(nOffset + ReadDataLength)>(FILE_SECTOR +BUFF_ONE_ROW)的情况
	LD	C,(IX-4)
	LD	B,(IX-3)
	LD	HL,492
	AND	A
	SBC	HL,BC
	JR	NC,?0031
?0030:
; 100.	        {
; 101.	            if( !read_text(ViewFileStructPoint, nSector ) )
	CALL	LWRD ?0189
	INC	L
	DEC	L
	JR	Z,?0031
?0032:
; 102.	                return NULL;        // 失败
?0033:
; 103.	            if( !read_text(ViewFileStructPoint, nSector+1 ) )    //通过两次读取,将本扇区的尾部数据保存到BufPrev中
	LD	C,(IX-2)
	LD	B,(IX-1)
	INC	BC
	CALL	LWRD ?0190
	INC	L
	DEC	L
	JR	Z,?0031
?0034:
; 104.	                return NULL;        // 失败
?0035:
; 105.	            return (byte*)ViewFileStructPoint->bufFile-(FILE_SECTOR-nOffset);
	LD	HL,39
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	C,(IX-4)
	LD	B,(IX-3)
	ADD	HL,BC
	LD	BC,65024
?0179:
	ADD	HL,BC
; 106.	        }
	JR	?0036
?0031:
?0017:
; 107.	    }
; 108.	    return NULL;    // 失败
	LD	HL,0
; 109.	}
?0036:
	LD	SP,IX
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0189:
	LD	C,(IX-2)
	LD	B,(IX-1)
?0190:
	PUSH	IY
	POP	DE
	LD	A,BYTE3 read_text
	LD	HL,LWRD read_text
	JP	LWRD ?BANK_CALL_DIRECT_L08
view_page_down:
; 110.	
; 111.	
; 112.	//////////////////////////////////////////////////
; 113.	//向后翻阅
; 114.	// DealMode =0: 显示一屏并计算下一屏的起始位置;=1: 计算下一屏的起始位置;2 .只读取下一屏数据
; 115.	byte view_page_down(STRUCT_VIEW_FILE *ViewFileStructPoint, unsigned char DealMode,int BackGroundID )
; 116.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	LD	HL,65520
	ADD	HL,SP
	LD	SP,HL
; 117.	    long LeftFileLength;          // 文件剩余长度
; 118.	    long ReadFileLength;        // 已读取的文件长度
; 119.	    uint ReadLengthOneTime;    //读取一次数据的长度
; 120.	    byte *str;            //一次读取数据的首地址
; 121.	    uint RowHeadPosition;    //行首地址(在一次所读数据中的位置)
; 122.	    BOOL ReReadFlag;        //是否需要重新读取数据的标志
; 123.	    byte row, col;        //显示的行列号
; 124.	    byte CountWords;        //一行的显示字数
; 125.	
; 126.	
; 127.	    LeftFileLength = ViewFileStructPoint->FileLengthBytes - ViewFileStructPoint->CurrentSeek;
	LD	HL,10
	ADD	HL,DE
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	L,C
	LD	H,B
	PUSH	DE
	PUSH	HL
	LD	C,(IX-4)
	LD	B,(IX-3)
	INC	BC
	INC	BC
	LD	L,C
	LD	H,B
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	L,C
	LD	H,B
	AND	A
	POP	BC
	SBC	HL,BC
	EX	DE,HL
	POP	BC
	SBC	HL,BC
	LD	C,L
	LD	B,H
	EX	DE,HL
	LD	(IX-12),L
	LD	(IX-11),H
	LD	(IX-10),C
	LD	(IX-9),B
; 128.	    if( LeftFileLength <= 0 )
	PUSH	BC
	PUSH	HL
	LD	BC,0
	LD	L,C
	LD	H,B
	CALL	LWRD ?SL_CMP_L03
	JR	C,?0038
?0037:
; 129.	    {
; 130.	        ViewFileStructPoint->CurrentSeek =0;    
	LD	L,10
	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
?0038:
; 131.	    }
; 132.	
; 133.	    if( !DealMode )
	XOR	A
	OR	(IX-2)
	JR	NZ,?0040
?0039:
; 134.	        ClearScreen(NULL);
	LD	E,A
	LD	D,A
	CALL	LWRD ClearScreen
?0040:
; 135.	
; 136.	
; 137.	
; 138.	    ReReadFlag = TRUE;  // 读入数据
; 139.	    ReadFileLength = ViewFileStructPoint->CurrentSeek;
	LD	HL,10
	LD	C,(IX-4)
	LD	B,(IX-3)
	ADD	HL,BC
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -