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

📄 bookmark.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	PUSH	HL
	PUSH	HL
	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
?0036:
; 206.	    result=FS_FWrite(buf, 1, g_bookmark_handle);
	LD	HL,(g_bookmark_handle)
	PUSH	HL
	LD	C,1
	LD	DE,buf
	CALL	LWRD FS_FWrite
	POP	HL
	LD	(result),A
; 207.	    FS_FClose(g_bookmark_handle);
	LD	DE,(g_bookmark_handle)
	CALL	LWRD FS_FClose
; 208.	    return 0; // always good;
	LD	L,0
; 209.	}
	POP	IX
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
add_bookmark:
; 210.	
; 211.	
; 212.	/**
; 213.	 * Description: add_bookmark-向书签列表加入一新的书签;若书签标题为空,
; 214.	 *                则自动使用偏移位置作为标题
; 215.	 *
; 216.	 * @param(s)  : vf    - 结构的指针 
; 217.	 * @param(s)  : title - 书签标题
; 218.	 * @param(s)  : offset- 书签所在的绝对偏移位置
; 219.	 * @return(s) : 0-success; 1-failure 
; 220.	 */
; 221.	bool add_bookmark(STRUCT_VIEW_FILE *vf, UChar *title, UInt32 offset)
; 222.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	LD	HL,65518
	ADD	HL,SP
	LD	SP,HL
; 223.	      int i;   
; 224.	      UChar *tt;
; 225.	      UInt32 CurFileLen,LeftFileLen;
; 226.	      uint CurrentOffset,ReadLengthOneTime; 
; 227.	     
; 228.	      CurFileLen=vf->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	(IX-18),C
	LD	(IX-17),B
	LD	(IX-16),E
	LD	(IX-15),D
; 229.	
; 230.	       tt=fileName;       
	LD	(IX-20),LOW(fileName)
	LD	(IX-19),HIGH(fileName)
?0038:
; 231.	/////////////////////过滤回车换行 英文空格 中文空格  
; 232.	      while((tt[0]==0x20)||(tt[0]==0x0a)||(tt[0]==0x0d)||(tt[0]==0xa1))
	LD	L,(IX-20)
	LD	H,(IX-19)
	LD	A,(HL)
	CP	32
	JR	Z,?0040
	LD	A,(HL)
	CP	10
	JR	Z,?0040
	LD	A,(HL)
	CP	13
	JR	Z,?0040
	LD	A,(HL)
	CP	161
	JR	NZ,?0037
?0040:
?0041:
?0039:
; 233.	       {                
; 234.	        if(tt[0]==0xa1)
	LD	A,(HL)
	CP	161
	JR	NZ,?0043
?0042:
; 235.	        { 
; 236.	          if(tt[1]==0xa1)
	INC	HL
	LD	A,(HL)
	CP	161
	JR	NZ,?0037
?0044:
; 237.	          tt+=2;
	LD	HL,2
	ADD	HL,SP
	LD	A,(HL)
	ADD	A,2
	LD	(HL),A
	INC	HL
	LD	A,(HL)
	ADC	A,0
	LD	(HL),A
; 238.	          else
	JR	?0038
?0045:
; 239.	          break;
?0046:
; 240.	        }
; 241.	        else
?0043:
; 242.	        tt++;        
	INC	(IX-20)
	JR	NZ,?0038
	INC	(IX-19)
?0047:
	JR	?0038
?0037:
; 243.	      }   
; 244.	///////////////////////   
; 245.	      if ( 0xFFFFFFFF == bkmarks[0].offset )        // 加入的第一个书签
	LD	BC,(bkmarks+2)
	LD	HL,(bkmarks)
	LD	A,L
	AND	H
	AND	C
	AND	B
	INC	A
	JR	NZ,?0049
?0048:
; 246.	      {
; 247.	          bkmarks[0].offset = CurFileLen;
	LD	C,(IX-16)
	LD	B,(IX-15)
	LD	L,(IX-18)
	LD	H,(IX-17)
	LD	(bkmarks),HL
	LD	(bkmarks+2),BC
; 248.	          memcpy( bkmarks[0].title, tt, MAX_TITLE_LEN);
	LD	BC,12
	LD	DE,bkmarks+4
	LD	L,(IX-20)
	LD	H,(IX-19)
	LDIR
; 249.	      }
; 250.	      else                        // 已经有书签
	JP	LWRD ?0050
?0049:
; 251.	      {
; 252.	          // Cauz there is only 16 items in the file, we simply
; 253.	          // search from the beginning to decide where to insert 
; 254.	          i = 0;
	XOR	A
	LD	(IX-22),A
	LD	(IX-21),A
?0052:
; 255.	          while ( i < MAX_BKMARK_NUM )
	LD	BC,32784
	LD	L,(IX-22)
	LD	H,(IX-21)
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0051
?0053:
; 256.	          {
; 257.	              if( bkmarks[i].offset > CurFileLen )         //已到链表尾或在链表之前插入
	LD	L,(IX-22)
	LD	H,(IX-21)
	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
	AND	A
	LD	L,(IX-18)
	LD	H,(IX-17)
	POP	BC
	SBC	HL,BC
	LD	L,(IX-16)
	LD	H,(IX-15)
	POP	BC
	SBC	HL,BC
	JR	C,?0051
?0054:
; 258.	                  break;
?0055:
; 259.	              else if ( bkmarks[i].offset == CurFileLen )
	LD	L,(IX-22)
	LD	H,(IX-21)
	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)
	LD	L,C
	LD	H,B
	LD	C,(IX-18)
	LD	B,(IX-17)
	AND	A
	SBC	HL,BC
	JR	NZ,?0057
	EX	DE,HL
	LD	C,(IX-16)
	LD	B,(IX-15)
	SBC	HL,BC
	JP	Z,?0092
?0056:
; 260.	                  return 0;  // already there, keep it  
?0057:
; 261.	              
; 262.	              i++;                
	INC	(IX-22)
	JR	NZ,?0052
	INC	(IX-21)
	JR	?0052
?0051:
; 263.	          }     
; 264.	          /* now we get the point to insert */
; 265.	          if ( 0xFFFFFFFF == bkmarks[i].offset )        // 已经到链表尾
	LD	L,(IX-22)
	LD	H,(IX-21)
	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,?0059
?0058:
; 266.	          {
; 267.	              /* 加到链表末 */
; 268.	              bkmarks[i].offset = CurFileLen;
	LD	L,(IX-22)
	LD	H,(IX-21)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	JR	?0093
; 269.	              memcpy( bkmarks[i].title, tt, MAX_TITLE_LEN ); 
; 270.	              return 0;
; 271.	          }
?0059:
; 272.	          else if ( bkmarks[MAX_BKMARK_NUM-1].offset == 0xFFFFFFFF )
	LD	HL,bkmarks+240
	LD	A,(HL)
	INC	HL
	AND	(HL)
	INC	HL
	AND	(HL)
	INC	HL
	AND	(HL)
	INC	A
	JP	NZ,?0061
?0060:
; 273.	          {
; 274.	              /* 在链表中间插入 */
; 275.	              /* [1],[2],...[*],[*+1],[*+2],.... */
; 276.	              /*             |    |              */
; 277.	              /*           prev  cur             */
; 278.	              /*            [*],[×],[*+1]        */
; 279.	              /*                 |               */
; 280.	              /*              pre,cur          */
; 281.	              int j;
; 282.	              for ( j = MAX_BKMARK_NUM-1; j > i; j-- )
	LD	IY,15
?0063:
	PUSH	IY
	POP	BC
	LD	L,(IX-22)
	LD	H,(IX-21)
	OR	128
	SBC	HL,BC
	JP	PO,?0089
	XOR	H
?0089:
	JP	P,?0062
?0064:
; 283.	              {
; 284.	                  bkmarks[j].offset = bkmarks[j-1].offset;            //链表后移
	PUSH	IY
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks-16
	ADD	HL,BC
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	PUSH	HL
	PUSH	IY
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	DE,bkmarks
	ADD	HL,DE
	POP	DE
	LD	(HL),E
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 285.	                  memcpy( bkmarks[j].title, bkmarks[j-1].title, MAX_TITLE_LEN );
	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
	PUSH	IY
	POP	HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks-12
	ADD	HL,BC
	LD	BC,12
	LDIR
	DEC	IY
	JR	?0063
?0062:
; 286.	              }
; 287.	              bkmarks[i].offset = CurFileLen;
	LD	L,(IX-22)
	LD	H,(IX-21)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
?0093:
	ADD	HL,BC
	LD	C,(IX-16)
	LD	B,(IX-15)
	LD	E,(IX-18)
	LD	(HL),E
	LD	D,(IX-17)
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 288.	              memcpy( bkmarks[i].title, tt, MAX_TITLE_LEN );
	LD	BC,12
	LD	L,(IX-22)
	LD	H,(IX-21)
	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	L,(IX-20)
	LD	H,(IX-19)
	LDIR
; 289.	              return 0;
?0092:
	LD	L,0
; 290.	          }
	JR	?0066
?0061:
; 291.	          else
; 292.	          {
; 293.	              /* the bookmarks number reaches MAX_BKMARK_NUM */
; 294.	              /* give some warning messages :del some bkmark:*/
; 295.	              // FIXME::
; 296.	              ui_err_msg(EBOKMSG3,EBOKMSG3,g_comval.langid);
	LD	BC,(g_comval+12)
	LD	B,0
	PUSH	BC
	LD	BC,427
	LD	E,C
	LD	D,B
	LD	A,BYTE3 ui_err_msg
	LD	HL,LWRD ui_err_msg
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 297.	              return 1;
; 298.	          }
?0050:
; 299.	      }
; 300.	      
; 301.	    return 1;
	LD	L,1
; 302.	}
?0066:
	LD	SP,IX
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
del_bookmark_id:
; 303.	
; 304.	bool del_bookmark_id(UInt8 id)  //根据ID号来删除书签
; 305.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
; 306.	    byte i = id;
	LD	HL,0
	ADD	HL,SP
	PUSH	HL
	LD	B,E
	POP	HL
	LD	(HL),B
; 307.	    
; 308.	    if( i >= MAX_BKMARK_NUM )
	LD	A,B
	CP	16
	JR	C,?0068
?0067:
; 309.	      return 1;                     
	LD	L,1
	JR	?0073
?0068:
?0070:
; 310.	    for ( ; i < MAX_BKMARK_NUM-1; i++ )
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	CP	15
	JR	NC,?0069
?0071:
; 311.	      {
; 312.	             bkmarks[i].offset = bkmarks[i+1].offset;
	LD	L,A
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks+16
	ADD	HL,BC
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	PUSH	HL
	LD	L,A
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	DE,bkmarks
	ADD	HL,DE
	POP	DE
	LD	(HL),E
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 313.	             memcpy( bkmarks[i].title, bkmarks[i+1].title, MAX_TITLE_LEN );
	LD	BC,12
	LD	L,A
	LD	H,B
	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	L,A
	LD	H,B
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks+20
	ADD	HL,BC
	LD	BC,12
	LDIR
	LD	L,C
	LD	H,B
	ADD	HL,SP
	INC	(HL)
	JR	?0068
?0069:
; 314.	      }
; 315.	    
; 316.	    bkmarks[MAX_BKMARK_NUM-1].offset = 0xFFFFFFFF;
	LD	BC,65535
	LD	(bkmarks+240),BC
	LD	(bkmarks+242),BC
; 317.	    return 0;
	LD	L,0
; 318.	}
?0073:
	POP	AF
	POP	AF
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
get_num_bookmarks:
; 319.	
; 320.	/*
; 321.	 * 取书签数
; 322.	 */
; 323.	byte get_num_bookmarks()
; 324.	{
	PUSH	BC
	PUSH	DE
; 325.	    byte i = 0;
	LD	E,0
?0075:
; 326.	    while( bkmarks[i].offset != 0xFFFFFFFF && i < MAX_BKMARK_NUM )
	LD	L,E
	LD	H,0
	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,?0074
	LD	A,E
	CP	16
	JR	NC,?0074
?0078:
?0077:
?0076:
; 327.	        i++;
	INC	E
	JR	?0075
?0074:
; 328.	        
; 329.	    return i;
	LD	L,E
; 330.	}
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
get_bookmark:
; 331.	
; 332.	
; 333.	/*
; 334.	 * 取书签
; 335.	 */
; 336.	bkmark_node      
; 337.	get_bookmark(UInt8 id)
; 338.	{
	PUSH	BC
	PUSH	DE
; 339.	    //ASSERT( id >= MAX_BKMARK_NUM );   
; 340.	      return bkmarks[id];
	LD	L,C
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,bkmarks
	ADD	HL,BC
	LD	BC,16
	PUSH	DE
	LDIR
	POP	HL
; 341.	}
	POP	AF
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
initBuf:
; 342.	
; 343.	/* 输出书签列表 */
; 344.	/*
; 345.	void list_bookmarks()
; 346.	{
; 347.	    //while( 
; 348.	}
; 349.	*/
; 350.	/*
; 351.	bool gen_pop_list(pop_up_list_t *list,int headid)
; 352.	{
; 353.	    list->strid = 0;
; 354.	    list->total = 2;
; 355.	    list->active = g_reader_vars.playflag;
; 356.	    list->string_id = g_comval.langid;
; 357.	    list->headid = headid;                         
; 358.	    
; 359.	    return 0; // always good
; 360.	}
; 361.	*/
; 362.	void 
; 363.	initBuf(void)
; 364.	{
	PUSH	BC
	PUSH	DE
; 365.	 byte i=0; 
	LD	E,0
?0080:
; 366.	 for(;i<FILESIZE/NODELEN;i++)
	LD	A,E
	CP	32
	JR	NC,?0079
?0081:
; 367.	 {
; 368.	  buf[i*NODELEN]=0xff;  
	LD	L,E
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,buf
	ADD	HL,BC
	LD	(HL),255
; 369.	  buf[i*NODELEN+1]=0xff;
	LD	L,E
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,buf+1
	ADD	HL,BC
	LD	(HL),255
; 370.	  buf[i*NODELEN+2]=0xff;  
	LD	L,E
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,buf+2
	ADD	HL,BC
	LD	(HL),255
; 371.	  buf[i*NODELEN+3]=0xff;
	LD	L,E
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,buf+3
	ADD	HL,BC
	LD	(HL),255
	INC	E
; 372.	 }
; 373.	}
	JR	?0080
?0079:
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
; 374.	
; 375.	#pragma function = default
	RSEG	CSTR
?0020:
	DEFB	'BMK'
	DEFB	0
	RSEG	UDATA0
result:
	DEFS	1
g_bookmark_handle:
	DEFS	2
bkmarks:
	DEFS	256
	RSEG	BOOKMARK_D
buf:
	DEFS	512
	END

⌨️ 快捷键说明

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