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

📄 ui_director2.s01

📁 MP3 整个 SDK
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	ui_director2(17)
	RSEG	DEC_COM_FSL_C(0)
	RSEG	CSTR(0)
	RSEG	CONST(0)
	RSEG	DEC_COM_FSL_D(0)
	RSEG	IDM_COM_FSL_D(0)
	RSEG	DEC_COM_FSL_R(0)
	PUBLIC	DecodeOnePage
	EXTERN	FS_Backup
	EXTERN	FS_CD
	EXTERN	FS_Dir
	EXTERN	FS_GetName
	EXTERN	FS_Restore
	EXTERN	GetDCStatus
	EXTERN	GetFileTotal
	EXTERN	GetFileTotalCur
	PUBLIC	GetLongNameAndSave
	EXTERN	Getdirbuf
	EXTERN	Initdirbuf
	PUBLIC	OnePageRecord
	EXTERN	PutS
	EXTERN	ResShowMultiString
	EXTERN	ResShowPic
	PUBLIC	SaveOtherPara
	EXTERN	SetBackgdColor
	EXTERN	SetPenColor
	EXTERN	SetTextOutMode
	EXTERN	SetTextPos
	EXTERN	Setdirbuf
	PUBLIC	ShowDirectory
	EXTERN	ToDirEntry
	PUBLIC	TransOneRecord
	PUBLIC	Ui_IgnoreExt
	EXTERN	count_dir_num
	PUBLIC	cur_group
	PUBLIC	dir_total_num
	PUBLIC	dirbuf
	PUBLIC	file_bck_pic
	EXTERN	file_name
	PUBLIC	file_pos
	PUBLIC	file_total_num
	EXTERN	fselDirLayer
	EXTERN	fselDirNo
	EXTERN	fselExtNo
	EXTERN	fselFileNo
	EXTERN	fselGetByNO
	EXTERN	fselTotal
	PUBLIC	get_dir_name
	PUBLIC	init_dir_buf
	PUBLIC	list_active
	PUBLIC	list_total_num
	PUBLIC	temp_record
	EXTERN	unitochar
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?UC_MOD_L01
	EXTERN	?S_MUL_L02
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	DEC_COM_FSL_C
GetLongNameAndSave:
; 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_director2.c
; 10.	* By  : jmzhang
; 11.	* Version: v1.00     first version     2005-9-22 19:35
; 12.	*******************************************************************************
; 13.	*/
; 14.	#pragma codeseg(DEC_COM_FSL_C)
; 15.	
; 16.	#include "ap_common.h"
; 17.	#include "enhanced.h"
; 18.	#include "actos.h"
; 19.	#include "filesys.h"
; 20.	#include "directory.h"
; 21.	
; 22.	
; 23.	 
; 24.	const char file_pos[6] = { POSITION_MENU6, POSITION_MENU5,POSITION_MENU4,POSITION_MENU3,POSITION_MENU2,POSITION_MENU1};    //zxs add
; 25.	const WORD file_bck_pic[6]={ MENUBCK6,MENUBCK5,MENUBCK4,MENUBCK3,MENUBCK2,MENUBCK1 };
; 26.	void GetLongNameAndSave(char *Namebuf,char *LongNamebuf,BYTE string_id);
; 27.	void SaveOtherPara(void);
; 28.	void TransOneRecord(file_record *target,file_record *source_record);
; 29.	void ShowDirectory(BYTE top,BYTE bottom,BYTE Old_active,BYTE active,BYTE string_id,BYTE Disk);
; 30.	
; 31.	extern WORD count_dir_num(void);
; 32.	extern void Initdirbuf(void);
; 33.	extern void Setdirbuf(WORD n);
; 34.	extern WORD Getdirbuf(WORD n);
; 35.	
; 36.	#pragma memory=dataseg(DEC_COM_FSL_D)   
; 37.	file_record temp_record;
; 38.	WORD dir_total_num,file_total_num,list_total_num,list_active,cur_group;    //目录总数,文件总数和浏览项数,浏览活动项
; 39.	
; 40.	#pragma memory=dataseg(IDM_COM_FSL_D)
; 41.	file_record OnePageRecord[row_count_def];
; 42.	char dirbuf[125];
; 43.	
; 44.	#pragma memory=constseg(DEC_COM_FSL_R)
; 45.	const char Ui_IgnoreExt[4] = {"*  "};
; 46.	
; 47.	
; 48.	
; 49.	#pragma memory=default
; 50.	
; 51.	/********************************************************************************
; 52.	* Description :GetLongNameAndSave和SaveOtherPara用于保存
; 53.	*        读取记录的参数到全局的temp_record中
; 54.	*
; 55.	** Arguments  :
; 56.	*
; 57.	* Returns     :
; 58.	*
; 59.	* Notes       :
; 60.	*
; 61.	********************************************************************************/
; 62.	void GetLongNameAndSave(char *Namebuf,char *LongNamebuf,BYTE string_id)
; 63.	{
	PUSH	IY
	PUSH	IX
	PUSH	AF
	PUSH	BC
	POP	IX
	PUSH	DE
	POP	IY
; 64.	        BYTE NameNum;
; 65.	        memcpy(LongNamebuf,Namebuf,11);
	LD	BC,11
	PUSH	IX
	POP	DE
	PUSH	IY
	POP	HL
	LDIR
; 66.	        memcpy(temp_record.name,Namebuf,12);
	LD	C,12
	LD	DE,temp_record+13
	PUSH	IY
	POP	HL
	LDIR
; 67.	        NameNum=FS_GetName(LongNamebuf,24);
	LD	C,24
	PUSH	IX
	POP	DE
	CALL	LWRD FS_GetName
	LD	HL,0
	ADD	HL,SP
	LD	(HL),A
; 68.	        if(NameNum!=0)
	XOR	A
	OR	(HL)
	JR	Z,?0003
?0002:
; 69.	        {
; 70.	            unitochar(LongNamebuf,NameNum*2+2,string_id);
	LD	HL,10
	ADD	HL,SP
	LD	C,(HL)
	PUSH	BC
	LD	L,A
	LD	H,0
	ADD	HL,HL
	LD	C,L
	LD	B,H
	INC	BC
	INC	BC
	PUSH	IX
	POP	DE
	LD	A,BYTE3 unitochar
	LD	HL,LWRD unitochar
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
; 71.	            memcpy(temp_record.longname,LongNamebuf,50);    //get one usful record
	LD	BC,50
	LD	DE,temp_record+25
	PUSH	IX
	POP	HL
	JR	?0074
; 72.	        }
; 73.	        else
?0003:
; 74.	            memcpy(temp_record.longname,Namebuf,12);    //get one usful record
	LD	BC,12
	LD	DE,temp_record+25
	PUSH	IY
	POP	HL
?0074:
	LDIR
?0004:
; 75.	}
?0087:
	POP	HL
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
SaveOtherPara:
; 76.	
; 77.	/********************************************************************************
; 78.	* Description :保存目录结构有关参数到全局结构temp_record中
; 79.	*
; 80.	** Arguments  :
; 81.	*
; 82.	* Returns     :
; 83.	*
; 84.	* Notes       :
; 85.	*
; 86.	********************************************************************************/
; 87.	void SaveOtherPara(void)
; 88.	{
	PUSH	BC
	PUSH	DE
; 89.	    memcpy(temp_record.dirno,fselDirNo,8);    //目录序号
	LD	BC,8
	LD	DE,temp_record+1
	LD	HL,fselDirNo
	LDIR
; 90.	    temp_record.fileno=fselFileNo;        //文件序号
	LD	HL,(fselFileNo)
	LD	(temp_record+9),HL
; 91.	    temp_record.fselExtNo=fselExtNo;    //当前后缀名
	LD	A,(fselExtNo)
	LD	(temp_record+12),A
; 92.	    temp_record.dirlayer=fselDirLayer;        //目录层次 0--根目录
	LD	A,(fselDirLayer)
	LD	(temp_record+11),A
; 93.	}
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
TransOneRecord:
; 94.	
; 95.	/********************************************************************************
; 96.	* Description :用于从idm读记录或写入记录到idm
; 97.	*
; 98.	** Arguments  :
; 99.	*
; 100.	* Returns     :
; 101.	*
; 102.	* Notes       :
; 103.	*
; 104.	********************************************************************************/
; 105.	void TransOneRecord(file_record *target,file_record *source_record)
; 106.	{
	PUSH	IY
	PUSH	IX
	PUSH	AF
	PUSH	BC
	POP	IX
	PUSH	DE
	POP	IY
; 107.	    byte status;
; 108.	    status = input8(0x05);
	IN	A,(5)
	LD	HL,0
	ADD	HL,SP
	LD	(HL),A
; 109.	    output8(0x05, 0xf6);
	LD	A,246
	OUT	(5),A
; 110.	
; 111.	    target->filetype=source_record->filetype;           //文件类型 0-- 目录  1  文件
	LD	A,(BC)
	EX	DE,HL
	LD	(HL),A
; 112.	    memcpy(target->dirno,source_record->dirno,8);    //目录序号
	LD	BC,8
	PUSH	IY
	POP	DE
	INC	DE
	PUSH	IX
	POP	HL
	INC	HL
	LDIR
; 113.	    target->fileno=source_record->fileno;        //文件序号
	LD	L,(IX+9)
	LD	(IY+9),L
	LD	H,(IX+10)
	LD	(IY+10),H
; 114.	    target->fselExtNo=source_record->fselExtNo;    //当前后缀名
	LD	B,(IX+12)
	LD	(IY+12),B
; 115.	    target->dirlayer=source_record->dirlayer;        //目录层次 0--根目录
	LD	B,(IX+11)
	LD	(IY+11),B
; 116.	    memcpy(target->name,source_record->name,12);
	LD	HL,13
	PUSH	IY
	POP	DE
	ADD	HL,DE
	EX	DE,HL
	LD	HL,13
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	BC,12
	LDIR
; 117.	    memcpy(target->longname,source_record->longname,50);
	LD	HL,25
	PUSH	IY
	POP	DE
	ADD	HL,DE
	EX	DE,HL
	LD	HL,25
	PUSH	IX
	POP	BC
	ADD	HL,BC
	LD	BC,50
	LDIR
; 118.	
; 119.	    output8(0x05, status);
	LD	L,C
	LD	H,B
	ADD	HL,SP
	LD	A,(HL)
	OUT	(5),A
; 120.	}
	JP	LWRD ?0087
ShowDirectory:
; 121.	
; 122.	
; 123.	/********************************************************************************
; 124.	* Description : show the directory.
; 125.	*
; 126.	* Arguments  :
; 127.	*            location: get thedisk type
; 128.	*            Invpath: the "\" or name
; 129.	*            Namebuf:the string you will display
; 130.	*            type : show file kind
; 131.	*            string_id: language type
; 132.	* Returns     :
; 133.	*            other:    Successful
; 134.	*            0:    Fail, detail information in fselError
; 135.	* Notes       :  only display the valid directory or file
; 136.	*
; 137.	********************************************************************************/
; 138.	
; 139.	 void ShowDirectory(BYTE top,BYTE bottom,BYTE Old_active,BYTE active,BYTE string_id,BYTE Disk)
; 140.	{
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	LD	HL,65526
	ADD	HL,SP
	LD	SP,HL
; 141.	    BYTE i,tmp;
; 142.	   // region_t region;
; 143.	    DC  oldDC_sav;
; 144.	    GetDCStatus(&oldDC_sav);
	INC	HL
	INC	HL
	EX	DE,HL
	CALL	LWRD GetDCStatus
; 145.	
; 146.	    SetTextOutMode(1);
	LD	E,1
	CALL	LWRD SetTextOutMode
; 147.	    SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0088
; 148.	    if(Old_active!=active)
	LD	A,(IX+6)
	CP	(IX+8)
	JP	Z,?0006
?0005:
; 149.	    {
; 150.	
; 151.	        //清除旧的活动菜单项
; 152.	        tmp = Old_active%row_count_def;
	LD	B,6
	CALL	LWRD ?UC_MOD_L01
	LD	(IX-14),A
; 153.	        ResShowPic(file_bck_pic[tmp], menu_bck_x_def, file_pos[tmp]-4);
	LD	C,A
	LD	B,0
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	LD	C,9
	LD	L,(IX-14)
	LD	H,B
	ADD	HL,HL
	LD	DE,file_bck_pic
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD ?0090
	POP	AF
; 154.	        //ResShowPic(DHT,126,0);
; 155.	        ResShowPic(DHT,194,8);
	LD	C,8
	PUSH	BC
	LD	C,194
	LD	DE,45
	CALL	LWRD ?0090
	POP	AF
; 156.	 
; 157.	        //显示新的活动菜单
; 158.	        tmp = active%row_count_def;
	LD	B,6
	LD	A,(IX+8)
	CALL	LWRD ?0089
; 159.	        TransOneRecord(&temp_record,&OnePageRecord[tmp]);    //将idm中记录数据读取到temp_record中
; 160.	        if(temp_record.filetype==TYPE_FILE)
	JR	NZ,?0008
?0007:
; 161.	            ResShowPic(MFILE,13,file_pos[tmp]-1);
	LD	C,(IX-14)
	LD	B,A
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,255
	LD	C,A
	PUSH	BC
	LD	C,13
	LD	DE,121
	JR	?0075
?0008:
; 162.	//        if(temp_record.filetype==TYPE_FILE)
; 163.	//        ResShowPic(MFILE, 0, (LCD_HEIGHT-16*(tmp+1)));
; 164.	        else if(temp_record.filetype==TYPE_DIR)
	LD	A,(temp_record)
	OR	A
	JR	NZ,?0011
?0010:
; 165.	        {
; 166.	            ResShowPic(MDIR,10,file_pos[tmp]-4);
	LD	C,(IX-14)
	LD	B,A
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	LD	C,10
	LD	DE,91
?0075:
	CALL	LWRD ?0090
	POP	AF
?0011:
?0009:
; 167.	        }
; 168.	
; 169.	        ResShowPic(FILEBCK,  explorer_str_x_def-1, file_pos[tmp]-4);
	LD	C,(IX-14)
	LD	B,0
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	CALL	LWRD ?0091
	POP	AF
; 170.	        //ResShowPic(DHTHK,122, file_pos[tmp]-2);
; 171.	        ResShowPic(DHTHK,194, file_pos[tmp]+5);
	LD	C,(IX-14)
	LD	B,0
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,5
	LD	C,A
	PUSH	BC
	LD	C,194
	LD	DE,46
	CALL	LWRD ?0090
	POP	AF
; 172.	
; 173.	        SetTextPos(explorer_str_x_def, file_pos[tmp]-2);
	CALL	LWRD ?0092
; 174.	        SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0088
; 175.	        PutS(temp_record.longname,-1);
	LD	C,255
	LD	DE,temp_record+25
	CALL	LWRD PutS
; 176.	 
; 177.	        //重新显示旧的活动菜单
; 178.	        tmp = Old_active%row_count_def;
	LD	B,6
	LD	A,(IX+6)
	CALL	LWRD ?0089
; 179.	        TransOneRecord(&temp_record,&OnePageRecord[tmp]);    //将idm中记录数据读取到temp_record中
; 180.	        if(temp_record.filetype==TYPE_FILE)
	JR	NZ,?0013
?0012:
; 181.	            ResShowPic(MFILE,13,file_pos[tmp]-1);
	LD	C,(IX-14)
	LD	B,A
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,255
	LD	C,A
	PUSH	BC
	LD	C,13
	LD	DE,121
	JR	?0076
?0013:
; 182.	        else if(temp_record.filetype==TYPE_DIR)
	LD	A,(temp_record)
	OR	A
	JR	NZ,?0016
?0015:
; 183.	        {
; 184.	            {
; 185.	                ResShowPic(MDIR,10,file_pos[tmp]-4);
	LD	C,(IX-14)
	LD	B,A
	LD	HL,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	LD	C,10
	LD	DE,91
?0076:
	CALL	LWRD ?0090
	POP	AF
?0016:
?0014:
; 186.	            }
; 187.	        }
; 188.	        SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0088
; 189.	        SetTextPos(explorer_str_x_def, file_pos[tmp]-2);
	CALL	LWRD ?0092
; 190.	        PutS(temp_record.longname,-1);   
	LD	C,255
	LD	DE,temp_record+25
	CALL	LWRD PutS
; 191.	    }
; 192.	
; 193.	    else    //if(Old_active==active)        //新旧活动项相同表示是新的一屏数据,需要全部刷新
	JP	LWRD ?0021
?0006:
; 194.	    {
; 195.	        //ClearScreen(NULL);
; 196.	        SetTextOutMode(1);
	LD	E,1
	CALL	LWRD SetTextOutMode
; 197.	        ResShowPic(MENUTWO,0,0);  
	LD	C,0
	PUSH	BC
	LD	DE,109
	CALL	LWRD ?0090
	POP	AF
; 198.	        if(!Disk)                  //主盘目录
	XOR	A
	OR	(IX+12)
	LD	C,148
	PUSH	BC
	LD	C,22
	PUSH	BC
	LD	C,(IX+10)
	JR	NZ,?0019
?0018:
; 199.	         ResShowMultiString( VSTOPM1,string_id, list_str_x_def, list_str_y_def);  
	LD	DE,300
	JR	?0077
; 200.	        else  
?0019:
; 201.	          ResShowMultiString( VSTOPM2,string_id, list_str_x_def, list_str_y_def); 
	LD	DE,301
?0077:
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
?0020:
; 202.	          
; 203.	        for(i=top;i<=bottom;i++)
	LD	B,(IX-4)
	LD	(IX-13),B
?0022:
	LD	A,(IX-2)
	CP	(IX-13)
	JP	C,?0021
?0023:
; 204.	        {
; 205.	            if(i==active)
	LD	A,(IX-13)
	CP	(IX+8)
	JR	NZ,?0026
?0025:
; 206.	            {
; 207.	                ResShowPic(FILEBCK,  explorer_str_x_def-1, file_pos[i-top]-4);
	LD	C,(IX-4)
	LD	B,0
	LD	H,B
	LD	L,A
	AND	A
	SBC	HL,BC
	LD	BC,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	CALL	LWRD ?0091
	POP	AF
; 208.	                //ResShowPic(DHTHK,122, file_pos[i-top]-2);
; 209.	                ResShowPic(DHTHK,194, file_pos[i-top]+5);
	LD	C,(IX-4)
	LD	B,0
	LD	H,B
	LD	L,(IX-13)
	AND	A
	SBC	HL,BC
	LD	BC,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,5
	LD	C,A
	PUSH	BC
	LD	C,194
	LD	DE,46
	CALL	LWRD ?0090
	POP	AF
; 210.	                SetPenColor(Color_WHITE_def);
; 211.	            }
; 212.	
; 213.	            else
?0026:
; 214.	                SetPenColor(Color_WHITE_def);
	CALL	LWRD ?0088
?0027:
; 215.	
; 216.	            output8(0x4e,input8(0x4e) | 0x08);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 217.	            TransOneRecord(&temp_record,&OnePageRecord[i-top]);    //将idm中记录数据读取到temp_record中
	LD	C,(IX-4)
	LD	B,0
	LD	H,B
	LD	L,(IX-13)
	AND	A
	SBC	HL,BC
	LD	C,L
	LD	B,H
	LD	DE,75
	CALL	LWRD ?S_MUL_L02
	LD	HL,OnePageRecord
	ADD	HL,DE
	LD	C,L
	LD	B,H
	LD	DE,temp_record
	LD	A,BYTE3 TransOneRecord
	LD	HL,LWRD TransOneRecord
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 218.	            if(temp_record.filetype==TYPE_FILE)
	LD	A,(temp_record)
	DEC	A
	JR	NZ,?0029
?0028:
; 219.	            
; 220.	                ResShowPic(MFILE,13,file_pos[i-top]-1);
	LD	C,(IX-4)
	LD	B,A
	LD	H,B
	LD	L,(IX-13)
	AND	A
	SBC	HL,BC
	LD	BC,file_pos
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,255
	LD	C,A
	PUSH	BC
	LD	C,13
	LD	DE,121
	JR	?0079
?0029:
; 221.	 
; 222.	            else if(temp_record.filetype==TYPE_DIR)
	LD	A,(temp_record)
	OR	A
	JR	NZ,?0032

⌨️ 快捷键说明

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