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

📄 ui_directory_fun.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
字号:
	NAME	ui_directory_fun(17)
	RSEG	COM_CTRL(0)
	RSEG	CSTR(0)
	EXTERN	FS_CD
	PUBLIC	GetActiveDirFrom
	EXTERN	GetFileTotal
	PUBLIC	Getdirbuf
	PUBLIC	Initdirbuf
	PUBLIC	Setdirbuf
	EXTERN	ToDirEntry
	PUBLIC	count_dir_num
	EXTERN	dirbuf
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?C_LSH_L01
	EXTERN	?UC_DIV_L01
	EXTERN	?US_RSH_L02
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_CTRL
Initdirbuf:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        ap common lib, directory control file 
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.                             
; 7.	*             All Right Reserved                          
; 8.	*
; 9.	* File: ui_directory_fun.c
; 10.	* By  : jmzhang
; 11.	* Version: v1.00     first version     2005-9-22 19:35
; 12.	*******************************************************************************
; 13.	*/ 
; 14.	#pragma codeseg(COM_CTRL)
; 15.	#include "ap_common.h"
; 16.	#include "enhanced.h"
; 17.	#include "actos.h"
; 18.	#include "filesys.h"
; 19.	#include "directory.h"
; 20.	
; 21.	extern const char Ui_IgnoreExt[4];// = {"*  "};
; 22.	                                                           
; 23.	
; 24.	
; 25.	#pragma memory=dataseg(IDM_COM_FSL_D)
; 26.	extern char dirbuf[125];
; 27.	
; 28.	#pragma memory=default
; 29.	
; 30.	
; 31.	void Initdirbuf(void)
; 32.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
; 33.	    int i;
; 34.	        byte status; 
; 35.	        status = input8(0x05);
	IN	A,(5)
	LD	HL,0
	ADD	HL,SP
	LD	(HL),A
; 36.	        output8(0x05, 0xf6);    
	LD	A,246
	OUT	(5),A
; 37.	        
; 38.	    for(i=0;i<125;i++)
	LD	DE,0
?0003:
	LD	BC,32893
	LD	L,E
	LD	H,D
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0002
?0004:
; 39.	        dirbuf[i]=0;
	LD	HL,dirbuf
	ADD	HL,DE
	LD	(HL),0
	INC	DE
	JR	?0003
?0002:
; 40.	        
; 41.	        output8(0x05, status);            
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	OUT	(5),A
; 42.	}
	POP	HL
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
Setdirbuf:
; 43.	
; 44.	
; 45.	//********************************************************************************
; 46.	//* Description :用于建立快速查询表 
; 47.	//*        n 最大值为999   
; 48.	//** Arguments  :
; 49.	//*
; 50.	//* Returns     : 
; 51.	//*
; 52.	//* Notes       :  
; 53.	//*        
; 54.	//********************************************************************************   
; 55.	void Setdirbuf(WORD n)
; 56.	{
	PUSH	BC
	PUSH	IX
	PUSH	AF
	PUSH	AF
	PUSH	DE
	POP	IX
; 57.	    BYTE m,k;
; 58.	    byte status; 
; 59.	
; 60.	    if(n>999)
	LD	HL,999
	AND	A
	SBC	HL,DE
	JR	C,?0008
?0006:
?0007:
; 61.	        return;    
; 62.	    status = input8(0x05);
	IN	A,(5)
	LD	HL,1
	ADD	HL,SP
	LD	(HL),A
; 63.	    output8(0x05, 0xf6);    
	LD	A,246
	OUT	(5),A
; 64.	    
; 65.	    m=n/8;
	LD	B,3
	CALL	LWRD ?US_RSH_L02
; 66.	    k=n%8;
	PUSH	IX
	POP	HL
	LD	A,L
	AND	7
; 67.	    k=1<<k;
	LD	B,A
	LD	A,1
	CALL	LWRD ?C_LSH_L01
; 68.	    dirbuf[m]=dirbuf[m]|k;
	LD	C,E
	LD	B,0
	LD	HL,dirbuf
	ADD	HL,BC
	OR	(HL)
	LD	(HL),A
; 69.	    
; 70.	    output8(0x05, status);                
	LD	HL,1
	ADD	HL,SP
	LD	A,(HL)
	OUT	(5),A
; 71.	}
?0008:
	POP	HL
	POP	HL
	POP	IX
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
Getdirbuf:
; 72.	   
; 73.	//********************************************************************************
; 74.	//* Description :输入为目录在list表中的位置,输出目录序号DirNo, 
; 75.	//*        n 最大值为999   
; 76.	//** Arguments   :
; 77.	//*
; 78.	//* Returns     : 输出目录序号DirNo
; 79.	//*
; 80.	//* Notes       :  
; 81.	//*        
; 82.	//********************************************************************************   
; 83.	WORD Getdirbuf(WORD n)        
; 84.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 85.	    WORD h=0,k=0;
; 86.	    BYTE m,i,j;
; 87.	    BYTE needbreak=0; 
; 88.	    byte status; 
; 89.	
; 90.	    if(n>999)
	LD	IY,0
	XOR	A
	LD	(IX-10),A
	LD	(IX-9),A
	LD	(IX-5),A
	LD	HL,999
	SBC	HL,DE
	JR	NC,?0010
?0009:
; 91.	        return 0;    
	LD	L,A
	LD	H,A
	JP	LWRD ?0029
?0010:
; 92.	    status = input8(0x05);
	IN	A,(5)
	LD	(IX-4),A
; 93.	    output8(0x05, 0xf6);        
	LD	A,246
	OUT	(5),A
; 94.	    
; 95.	    for(i=0;i<125;i++)
	LD	(IX-8),0
?0012:
	LD	A,(IX-8)
	CP	125
	JR	NC,?0011
?0013:
; 96.	    {
; 97.	        k++;
	INC	(IX-10)
	JR	NZ,?0066
	INC	(IX-9)
?0066:
; 98.	        m=dirbuf[i];
	LD	C,A
	LD	B,0
	LD	HL,dirbuf
	ADD	HL,BC
	LD	B,(HL)
	LD	(IX-7),B
; 99.	        if((m&1)==1)h++;
	BIT	0,B
	JR	Z,?0016
?0015:
	INC	IY
?0016:
; 100.	        if(h==n)
	LD	L,(IX-2)
	LD	H,(IX-1)
	PUSH	IY
	POP	BC
	AND	A
	SBC	HL,BC
	JR	Z,?0011
?0017:
; 101.	        break;
?0018:
; 102.	        for(j=0;j<7;j++)
	LD	(IX-6),0
?0020:
	LD	A,(IX-6)
	CP	7
	JR	NC,?0019
?0021:
; 103.	        {
; 104.	            k++;
	INC	(IX-10)
	JR	NZ,?0067
	INC	(IX-9)
?0067:
; 105.	            m=m/2;
	LD	HL,3
	ADD	HL,SP
	LD	B,2
	LD	A,(HL)
	CALL	LWRD ?UC_DIV_L01
	LD	(HL),A
; 106.	            if((m&1)==1)h++;
	BIT	0,A
	JR	Z,?0024
?0023:
	INC	IY
?0024:
; 107.	            if(h==n)
	LD	L,(IX-2)
	LD	H,(IX-1)
	PUSH	IY
	POP	BC
	AND	A
	SBC	HL,BC
	JR	NZ,?0026
?0025:
; 108.	            {
; 109.	        needbreak=1;
	LD	(IX-5),1
; 110.	        break;
	JR	?0019
?0026:
	INC	(IX-6)
	JR	?0020
?0019:
; 111.	            }
; 112.	
; 113.	        }
; 114.	        if(needbreak)
	XOR	A
	OR	(IX-5)
	JR	NZ,?0011
?0027:
; 115.	            break;
?0028:
	INC	(IX-8)
	JR	?0012
?0011:
; 116.	    }
; 117.	    output8(0x05, status); 
	LD	A,(IX-4)
	OUT	(5),A
; 118.	    return k-1;                       
	LD	HL,65535
	LD	C,(IX-10)
	LD	B,(IX-9)
	ADD	HL,BC
; 119.	} 
?0029:
	LD	SP,IX
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
GetActiveDirFrom:
; 120.	
; 121.	//********************************************************************************
; 122.	//* Description :输入目录序号DirNo,输出为此目录在list表中的位置 
; 123.	//*        n 最大值为999   
; 124.	//** Arguments   :
; 125.	//*
; 126.	//* Returns     : 当前目录在文件/目录列表中的序号
; 127.	//*
; 128.	//* Notes       :  
; 129.	//*        
; 130.	//********************************************************************************
; 131.	WORD GetActiveDirFrom(WORD n)        
; 132.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 133.	    WORD h=0,k=0;
; 134.	    BYTE m,i,j;
; 135.	    BYTE needbreak=0; 
; 136.	    byte status; 
; 137.	
; 138.	    if(n>999)    
	XOR	A
	LD	(IX-10),A
	LD	(IX-9),A
	LD	IY,0
	LD	(IX-5),A
	LD	HL,999
	SBC	HL,DE
	JR	C,?0070
?0030:
; 139.	        return 0;
?0031:
; 140.	    status = input8(0x05);
	IN	A,(5)
	LD	(IX-4),A
; 141.	    output8(0x05, 0xf6);        
	LD	A,246
	OUT	(5),A
; 142.	    
; 143.	    if(n==0)
	LD	A,E
	OR	D
	JR	NZ,?0033
?0032:
; 144.	        return 0;
?0070:
	LD	HL,0
	JP	LWRD ?0052
?0033:
; 145.	    for(i=0;i<125;i++)
	LD	(IX-8),0
?0035:
	LD	A,(IX-8)
	CP	125
	JR	NC,?0034
?0036:
; 146.	    {
; 147.	        k++;
; 148.	        m=dirbuf[i];
	LD	C,A
	LD	B,0
	LD	HL,dirbuf
	ADD	HL,BC
	LD	B,(HL)
	LD	(IX-7),B
; 149.	        if((m&1)==1)h++;
	BIT	0,B
	INC	IY
	JR	Z,?0068
?0038:
	INC	(IX-10)
	JR	NZ,?0068
	INC	(IX-9)
?0068:
?0039:
; 150.	        if((k-1)==n)
	LD	HL,65535
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	C,(IX-2)
	LD	B,(IX-1)
	AND	A
	SBC	HL,BC
	JR	Z,?0034
?0040:
; 151.	        break;
?0041:
; 152.	        for(j=0;j<7;j++)
	LD	(IX-6),0
?0043:
	LD	A,(IX-6)
	CP	7
	JR	NC,?0042
?0044:
; 153.	        {
; 154.	            k++;
; 155.	            m=m/2;
	LD	HL,3
	ADD	HL,SP
	LD	B,2
	LD	A,(HL)
	CALL	LWRD ?UC_DIV_L01
	LD	(HL),A
; 156.	            if((m&1)==1)h++;
	BIT	0,A
	INC	IY
	JR	Z,?0069
?0046:
	INC	(IX-10)
	JR	NZ,?0069
	INC	(IX-9)
?0069:
?0047:
; 157.	            if((k-1)==n)
	LD	HL,65535
	PUSH	IY
	POP	BC
	ADD	HL,BC
	LD	C,(IX-2)
	LD	B,(IX-1)
	AND	A
	SBC	HL,BC
	JR	NZ,?0049
?0048:
; 158.	            {
; 159.	        needbreak=1;
	LD	(IX-5),1
; 160.	        break;
	JR	?0042
?0049:
	INC	(IX-6)
	JR	?0043
?0042:
; 161.	            }
; 162.	
; 163.	        }
; 164.	        if(needbreak)
	XOR	A
	OR	(IX-5)
	JR	NZ,?0034
?0050:
; 165.	            break;
?0051:
	INC	(IX-8)
	JR	?0035
?0034:
; 166.	    }
; 167.	    
; 168.	    output8(0x05, status); 
	LD	A,(IX-4)
	OUT	(5),A
; 169.	    return h;                       
	LD	L,(IX-10)
	LD	H,(IX-9)
; 170.	} 
?0052:
	JP	LWRD ?0029
count_dir_num:
; 171.	  
; 172.	/*
; 173.	********************************************************************************
; 174.	* Description : 当前目录下,有效的子目录的总数
; 175.	*
; 176.	* Arguments   :
; 177.	*
; 178.	* Returns     : 子目录总数
; 179.	*
; 180.	* Notes       :  
; 181.	*        
; 182.	********************************************************************************
; 183.	*/
; 184.	WORD count_dir_num(void)
; 185.	{ 
	PUSH	BC
	PUSH	DE
	PUSH	IY
	PUSH	IX
	LD	HL,65522
	ADD	HL,SP
	LD	SP,HL
; 186.	    WORD tmp,wtemp,total,direxist;
; 187.	    char strDir[12];    
; 188.	    tmp = 0; 
; 189.	    wtemp = 1;
	LD	IY,0
	LD	IX,1
?0054:
; 190.	    while(1) 
; 191.	    {
; 192.	        if (! ToDirEntry(strDir, wtemp))
	PUSH	IX
	POP	BC
	LD	HL,2
	ADD	HL,SP
	EX	DE,HL
	LD	A,BYTE3 ToDirEntry
	LD	HL,LWRD ToDirEntry
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JR	NZ,?0057
?0056:
; 193.	        {
; 194.	            return tmp;
	PUSH	IY
	POP	HL
; 195.	        }
	EX	DE,HL
	LD	HL,14
	ADD	HL,SP
	LD	SP,HL
	EX	DE,HL
	POP	IX
	POP	IY
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0057:
; 196.	        else
; 197.	        {
; 198.	            // 只检查文件夹是否有效
; 199.	            total = GetFileTotal(strDir, TRUE);
	LD	HL,0
	ADD	HL,SP
	PUSH	HL
	LD	C,1
	INC	HL
	INC	HL
	EX	DE,HL
	LD	A,BYTE3 GetFileTotal
	LD	HL,LWRD GetFileTotal
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	LD	C,L
	LD	B,H
	POP	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 200.	            FS_CD(strDir);
	LD	HL,2
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD FS_CD
; 201.	            if (ToDirEntry(strDir,1))
	LD	BC,1
	LD	HL,2
	ADD	HL,SP
	EX	DE,HL
	LD	A,BYTE3 ToDirEntry
	LD	HL,LWRD ToDirEntry
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JR	Z,?0059
?0058:
; 202.	            {
; 203.	                    direxist=1;
	LD	DE,1
; 204.	            }
; 205.	            else
	JR	?0060
?0059:
; 206.	            {
; 207.	                direxist=0;
	LD	DE,0
?0060:
; 208.	            }        
; 209.	            output8(0x4e,input8(0x4e)|0x8);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 210.	        
; 211.	            FS_CD("\\"); 
	PUSH	DE
	LD	DE,?0061
	CALL	LWRD FS_CD
	POP	DE
; 212.	        }
; 213.	        output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08); 
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 214.	        if((total != 0)||direxist)
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	INC	HL
	OR	(HL)
	JR	NZ,?0064
	LD	A,E
	OR	D
	JR	Z,?0063
?0064:
?0065:
?0062:
; 215.	            tmp++;
	INC	IY
?0063:
; 216.	
; 217.	        wtemp ++;
; 218.	     }
; 219.	}
	INC	IX
	JP	LWRD ?0054
	RSEG	CSTR
?0061:
	DEFB	92,0
	END

⌨️ 快捷键说明

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