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

📄 bookmark.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	bookmark(17)
	RSEG	CODE_1(0)
	RSEG	CSTR(0)
	RSEG	UDATA0(0)
	RSEG	BOOKMARK_D(0)
	EXTERN	FS_FClose
	EXTERN	FS_FCreate
	EXTERN	FS_FOpen
	EXTERN	FS_FRead
	EXTERN	FS_FWrite
	EXTERN	FS_GetFileLen
	EXTERN	FS_GetUnalignedLen
	PUBLIC	add_bookmark
	PUBLIC	bkmarks
	PUBLIC	buf
	PUBLIC	close_bookmark
	PUBLIC	del_bookmark_id
	EXTERN	fileName
	PUBLIC	g_bookmark_handle
	EXTERN	g_comval
	EXTERN	g_reader_vars
	PUBLIC	get_bookmark
	PUBLIC	get_num_bookmarks
	PUBLIC	initBuf
	PUBLIC	init_bookmark
	PUBLIC	result
	EXTERN	ui_err_msg
	PUBLIC	whitespace
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?L_LSH_L03
	EXTERN	?UL_RSH_L03
	EXTERN	?L_ORASG_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?STRCPY_L11
	RSEG	CODE_1
whitespace:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                        e Document Reader
; 4.	*                (c) Copyright 2003-2004, ACTION Co,Ltd.
; 5.	*                        All Right Reserved
; 6.	*
; 7.	* File   : bookmark.c
; 8.	* By     : ruanyong
; 9.	* Version: v1.00     first version     2004-11-16 17:28
; 10.	********************************************************************************
; 11.	*/
; 12.	#pragma codeseg(CODE_1)
; 13.	#include <stdlib.h>
; 14.	#include <stdio.h>                                           
; 15.	#include <string.h>
; 16.	
; 17.	#include "ap_reader.h"
; 18.	#include "bookmark.h"
; 19.	#include "filesys.h" 
; 20.	#include "ui_res.h"    
; 21.	void initBuf(void);  
; 22.	bool result;
; 23.	UInt g_bookmark_handle;  
; 24.	bkmark_node bkmarks[MAX_BKMARK_NUM];  
; 25.	extern char  fileName[50];  //存放书签头部信息的buffer
; 26.	#pragma memory=dataseg(BOOKMARK_D)     
; 27.	UChar buf[FILESIZE];         
; 28.	#pragma memory=default 
; 29.	//#pragma codeseg(BOOKMARK_D)
; 30.	//UChar buf[FILESIZE];
; 31.	//#pragma memory=default
; 32.	/*
; 33.	 * 判断字符是否是空格意义符号
; 34.	 */
; 35.	int
; 36.	whitespace(char ch)
; 37.	{
; 38.	      switch (ch)
	LD	A,E
	CP	9
	JR	C,?0004
	CP	11
	JR	C,?0003
	CP	13
	JR	Z,?0003
	CP	32
	JR	NZ,?0004
?0003:
; 39.	      {
; 40.	          case ' ':
; 41.	          case '\t':
; 42.	          case '\n':
; 43.	          case '\r':
; 44.	            return 1;
	LD	HL,1
; 45.	          default:
	JR	?0005
?0004:
; 46.	            return 0;
	LD	HL,0
; 47.	      }
?0005:
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0002:
; 48.	}
strip_spaces:
; 49.	
; 50.	
; 51.	/*
; 52.	 * 删除一个字符串开头和串尾的空格,参数str被修改
; 53.	 * 空格符号包括' ','\n','\r','\t'。
; 54.	 */
; 55.	static char *
; 56.	strip_spaces(char *str)
; 57.	{
	PUSH	BC
	PUSH	DE
; 58.	/*
; 59.	      int   x;
; 60.	      
; 61.	      if (!str)
; 62.	        return NULL;
; 63.	      
; 64.	      x = 0;
; 65.	      while ( whitespace(str[x]) && (str[x] != '\0') )
; 66.	        x++;
; 67.	      
; 68.	      if (x != 0)                // 前移x个字符
; 69.	        memmove(str, str+x, strlen(str)-x+1);
; 70.	      
; 71.	      x = strlen(str)-1;
; 72.	      while (whitespace(str[x]) && (x != 0))
; 73.	        x--;
; 74.	      
; 75.	      str[x+1] = '\0';            // 截断后面的空字符
; 76.	*/      
; 77.	      return str;
	LD	L,E
	LD	H,D
; 78.	}
	POP	AF
	POP	BC
	RET
trim_string:
; 79.	
; 80.	
; 81.	/*
; 82.	 * 去掉不可打印的字符,并以空格替代,参数str被修改
; 83.	 */
; 84.	static char *
; 85.	trim_string(char *str)
; 86.	{
	PUSH	BC
	PUSH	DE
; 87.	  
; 88.	      return str;
	LD	L,E
	LD	H,D
; 89.	}
	POP	AF
	POP	BC
	RET
fileLength:
; 90.	
; 91.	static UInt32
; 92.	fileLength(UInt32 file)
; 93.	{
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 94.	      UInt32     LastPgSize = FS_GetUnalignedLen(file); //取最后一个PAGE的BYTE数 (只有一个扇区)              
	CALL	LWRD FS_GetUnalignedLen
	LD	A,H
	RLCA
	SBC	A,A
	LD	C,A
	LD	B,C
	LD	(IX-8),L
	LD	(IX-7),H
	LD	(IX-6),C
	LD	(IX-5),B
; 95.	      UInt32  PageNum    = FS_GetFileLen(file);
	LD	E,(IX-4)
	LD	D,(IX-3)
	CALL	LWRD FS_GetFileLen
; 96.	      return ( (PageNum-1 )* BUFSIZE + LastPgSize);   
	PUSH	BC
	PUSH	HL
	LD	HL,65535
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	HL,65535
	POP	BC
	ADC	HL,BC
	LD	C,L
	LD	B,H
	EX	DE,HL
	LD	A,9
	CALL	LWRD ?L_LSH_L03
	PUSH	BC
	PUSH	HL
	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
	EX	DE,HL
; 97.	} 
	LD	SP,IX
	POP	IX
	RET
hex2str:
; 98.	
; 99.	static char*  
; 100.	hex2str(char* b, UInt32 hex)
; 101.	{
	PUSH	BC
	PUSH	IX
	PUSH	AF
	PUSH	DE
	POP	IX
; 102.	        byte i = 0;
	LD	HL,0
	ADD	HL,SP
	LD	(HL),0
?0007:
; 103.	        
; 104.	        for ( ; i < sizeof(UInt32); i++ ) {
	LD	A,(HL)
	CP	4
	JR	NC,?0006
?0008:
; 105.	            b[i] = (hex>>i*8) & 0xFF;
	LD	C,A
	LD	B,0
	PUSH	IX
	POP	HL
	ADD	HL,BC
	PUSH	HL
	ADD	A,A
	ADD	A,A
	ADD	A,A
	LD	HL,10
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	CALL	LWRD ?UL_RSH_L03
	LD	B,L
	POP	HL
	LD	(HL),B
	LD	HL,0
	ADD	HL,SP
	INC	(HL)
	JR	?0007
?0006:
; 106.	        }
; 107.	        b[4] = 0;
	LD	(IX+4),0
; 108.	        
; 109.	        return b;
	PUSH	IX
	POP	HL
; 110.	}
	POP	AF
	POP	IX
	POP	BC
	RET
str2hex:
; 111.	
; 112.	static UInt32  
; 113.	str2hex(char *b)
; 114.	{
	PUSH	IX
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	DE
	POP	IX
; 115.	        UInt32 ret=0;
; 116.	        byte  i = 0;
	LD	HL,2
	ADD	HL,SP
	XOR	A
	LD	(HL),A
	INC	HL
	LD	(HL),A
	INC	HL
	LD	(HL),A
	INC	HL
	LD	(HL),A
	LD	L,A
	LD	H,A
	ADD	HL,SP
	LD	(HL),A
?0011:
; 117.	      
; 118.	        for ( ; i < 4; i++ ) 
	LD	A,(HL)
	CP	4
	LD	HL,2
	JR	NC,?0010
?0012:
; 119.	            ret = ret | ((UInt32)b[i]& 0x000000FF) << 8*i ;
	ADD	HL,SP
	PUSH	HL
	ADD	A,A
	ADD	A,A
	ADD	A,A
	DEC	HL
	DEC	HL
	LD	C,(HL)
	LD	B,0
	PUSH	IX
	POP	HL
	ADD	HL,BC
	LD	L,(HL)
	LD	C,B
	LD	H,C
	CALL	LWRD ?L_LSH_L03
	EX	DE,HL
	POP	HL
	CALL	LWRD ?L_ORASG_L03
	LD	HL,0
	ADD	HL,SP
	INC	(HL)
	JR	?0011
?0010:
; 120.	                
; 121.	        return ret;
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
; 122.	}
	POP	AF
	POP	AF
	POP	AF
	POP	IX
	RET
gen_bkfilename:
; 123.	
; 124.	static bool
; 125.	gen_bkfilename(char *str)
; 126.	{
	PUSH	DE
; 127.	/*        char *t = str;
; 128.	        t = strrchr(t,'.');
; 129.	        strcpy(t,".bmk");
; 130.	*/  
; 131.	        return 0;
	XOR	A
; 132.	}
	POP	HL
	RET
split_node:
; 133.	
; 134.	static void
; 135.	split_node( char* str,int i)
; 136.	{
	PUSH	IY
	PUSH	IX
	PUSH	DE
	POP	IX
	PUSH	BC
	POP	IY
; 137.	        bkmarks[i].offset = str2hex(str);
	LD	L,C
	LD	H,B
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
	ADD	HL,BC
	PUSH	HL
	CALL	LWRD str2hex
	EX	DE,HL
	POP	HL
	LD	(HL),E
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 138.	        memcpy( bkmarks[i].title, &str[4],sizeof(bkmarks[i].title) );
	PUSH	IY
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	EX	DE,HL
	LD	HL,bkmarks+4
	ADD	HL,DE
	EX	DE,HL
	LD	HL,4
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	BC,12
	LDIR
; 139.	}
	POP	IX
	POP	IY
	RET
init_bookmark:
; 140.	
; 141.	/**
; 142.	 * Description: init_bookmark初始化书签功能
; 143.	 *
; 144.	 * @return(s) : 0-success;1-failure 
; 145.	 */
; 146.	bool init_bookmark()
; 147.	{
	PUSH	BC
	PUSH	DE
	PUSH	IX
	LD	HL,65524
	ADD	HL,SP
	LD	SP,HL
; 148.	    int i; 
; 149.	   char bkfile[FILENMAELEN];
; 150.	    char *a = bkfile;
	PUSH	HL
	POP	IX
; 151.	    initBuf();
	LD	A,BYTE3 initBuf
	LD	HL,LWRD initBuf
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 152.	    for ( i = 0; i < MAX_BKMARK_NUM; i++ )
	LD	DE,0
?0015:
	LD	BC,32784
	LD	L,E
	LD	H,D
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0014
?0016:
; 153.	    { // FILL out
; 154.	        bkmarks[i].offset = 0xFFFFFFFF;
	LD	L,E
	LD	H,D
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
	ADD	HL,BC
	LD	B,255
	LD	(HL),B
	INC	HL
	LD	(HL),B
	INC	HL
	LD	(HL),B
	INC	HL
	LD	(HL),B
	INC	DE
	JR	?0015
?0014:
; 155.	    }
; 156.	    memcpy(bkfile, g_reader_vars.location.filename,8);
	LD	BC,8
	LD	L,B
	LD	H,B
	ADD	HL,SP
	EX	DE,HL
	LD	HL,g_reader_vars+32
	LDIR
; 157.	    if ( NULL != a ) 
	PUSH	IX
	POP	HL
	LD	A,L
	OR	H
	JR	Z,?0019
?0018:
; 158.	    {
; 159.	        strcpy(&bkfile[8],"BMK"); 
	LD	DE,?0020
	LD	L,C
	LD	H,B
	ADD	HL,SP
	LD	C,8
	ADD	HL,BC
	CALL	LWRD ?STRCPY_L11
; 160.	        bkfile[11]=0;    
	LD	HL,11
	ADD	HL,SP
	LD	(HL),B
; 161.	        g_bookmark_handle = FS_FOpen(bkfile,FS_OPEN_NORMAL);
	LD	C,B
	LD	L,C
	LD	H,B
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD FS_FOpen
	LD	(g_bookmark_handle),HL
; 162.	        if( NULL == g_bookmark_handle )
	LD	A,L
	OR	H
	JR	NZ,?0022
?0021:
; 163.	        { // 书签文件不存在,创建书签文件  
; 164.	            g_bookmark_handle = FS_FCreate(bkfile);
	LD	L,A
	LD	H,A
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD FS_FCreate
	LD	(g_bookmark_handle),HL
; 165.	            if( NULL == g_bookmark_handle ) 
	LD	A,L
	OR	H
	JR	NZ,?0025
?0023:
; 166.	            {// 错误处理
; 167.	                // FIXME: please change to create error
; 168.	                ui_err_msg(EBOKMSG5,EBOKMSG5,g_comval.langid);
	LD	BC,(g_comval+12)
	LD	B,A
	PUSH	BC
	LD	BC,429
	LD	DE,429
	LD	A,BYTE3 ui_err_msg
	LD	HL,LWRD ui_err_msg
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 169.	                return 1;
	JR	?0019
; 170.	            }
?0024:
; 171.	            return 0;
; 172.	        }  
?0022:
; 173.	        else
; 174.	        { // 书签文件已存在,初始化书签列表    
; 175.	
; 176.	            FS_FRead(buf, 1, g_bookmark_handle);          
	PUSH	HL
	LD	C,1
	LD	DE,buf
	CALL	LWRD FS_FRead
	POP	HL
; 177.	            for (i = 0; i <FILESIZE/(NODELEN*2); i++ )
	LD	DE,0
?0026:
	LD	BC,32784
	LD	L,E
	LD	H,D
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0025
?0027:
; 178.	            {
; 179.	                split_node(&buf[i*NODELEN],i);
	PUSH	DE
	PUSH	DE
	EX	DE,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,buf
	ADD	HL,BC
	EX	DE,HL
	POP	BC
	CALL	LWRD split_node
	POP	DE
	INC	DE
	JR	?0026
?0025:
; 180.	            }
; 181.	            return 0;
	LD	L,0
; 182.	        }
	JR	?0029
?0019:
; 183.	    }
; 184.	    
; 185.	    return 1;
	LD	L,1
; 186.	}
?0029:
	EX	DE,HL
	LD	HL,12
	ADD	HL,SP
	LD	SP,HL
	EX	DE,HL
	POP	IX
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
close_bookmark:
; 187.	        
; 188.	            
; 189.	/**
; 190.	 * Description: 关闭书签功能
; 191.	 *
; 192.	 * @return(s) : 0-success;1-failure 
; 193.	 */
; 194.	bool close_bookmark()
; 195.	{
	PUSH	BC
	PUSH	DE
	PUSH	IX
; 196.	    int i = 0;
	LD	IX,0
?0031:
; 197.	//    UChar buf[FILESIZE];
; 198.	    while (( 0xFFFFFFFF != bkmarks[i].offset)&&(i<MAX_BKMARK_NUM) )
	PUSH	IX
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
	ADD	HL,BC
	LD	A,(HL)
	INC	HL
	AND	(HL)
	INC	HL
	AND	(HL)
	INC	HL
	AND	(HL)
	INC	A
	JR	Z,?0030
	LD	BC,32784
	PUSH	IX
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0030
?0034:
?0033:
?0032:
; 199.	    {
; 200.	        hex2str( &buf[i*NODELEN], bkmarks[i].offset );
	PUSH	IX
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	PUSH	IX
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,buf
	ADD	HL,BC
	EX	DE,HL
	CALL	LWRD hex2str
	POP	AF
	POP	AF
; 201.	        memcpy( &buf[i*NODELEN+sizeof(UInt32)], bkmarks[i].title,sizeof(bkmarks[i].title));
	PUSH	IX
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	EX	DE,HL
	LD	HL,buf+4
	ADD	HL,DE
	EX	DE,HL
	PUSH	IX
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks+4
	ADD	HL,BC
	LD	BC,12
	LDIR
; 202.	        i++;
	INC	IX
	JR	?0031
?0030:
; 203.	    }
; 204.	    if( 0xFFFFFFFF == bkmarks[i].offset)     //删除一个书签后要将offset清为0xffffffff
	PUSH	IX
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
	ADD	HL,BC
	LD	A,(HL)
	INC	HL
	AND	(HL)
	INC	HL
	AND	(HL)
	INC	HL
	AND	(HL)
	INC	A
	JR	NZ,?0036
?0035:
; 205.	    hex2str(&buf[i*NODELEN],0xffffffff);     
	LD	HL,65535

⌨️ 快捷键说明

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