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

📄 ui_directory.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	ui_directory(17)
	RSEG	COM_CTRL(0)
	RSEG	CSTR(0)
	EXTERN	BankSwitch
	EXTERN	DecodeOnePage
	EXTERN	FS_CD
	EXTERN	GetActiveDirFrom
	EXTERN	OnePageRecord
	EXTERN	ShowDirectory
	EXTERN	TransOneRecord
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	ap_message_init
	EXTERN	cur_group
	EXTERN	fselDirLayer
	EXTERN	fselDirNo
	EXTERN	fselEntCurrentDir
	EXTERN	fselExtNo
	EXTERN	fselFileNo
	EXTERN	fselGetLocation
	EXTERN	fselRetParentDir
	EXTERN	fselSetLocationC
	EXTERN	init_dir_buf
	EXTERN	list_active
	EXTERN	list_total_num
	EXTERN	temp_record
	PUBLIC	ui_directory
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?US_DIV_L02
	EXTERN	?US_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?C_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	RSEG	COM_CTRL
ui_directory:
; 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.c
; 10.	* By  : jmzhang
; 11.	* Version: v1.00     first version     2005-9-22 19:35
; 12.	*******************************************************************************
; 13.	*/
; 14.	#pragma codeseg(COM_CTRL)
; 15.	
; 16.	#include "ap_common.h"
; 17.	#include "directory.h"
; 18.	#include "filesys.h"
; 19.	
; 20.	#pragma memory=dataseg(DEC_COM_FSL_D)
; 21.	extern file_record temp_record;
; 22.	extern WORD dir_total_num,file_total_num,list_total_num,list_active,cur_group;    //目录总数,文件总数和浏览项数,浏览活动项
; 23.	
; 24.	#pragma memory=dataseg(IDM_COM_FSL_D)
; 25.	extern file_record OnePageRecord[row_count_def];
; 26.	extern char dirbuf[125];
; 27.	#pragma memory=default
; 28.	
; 29.	extern void DecodeOnePage(WORD top,WORD bottom,BYTE type, BYTE string_id);
; 30.	extern void ShowDirectory(WORD top,WORD bottom,WORD Old_active,WORD active,BYTE string_id,BYTE Disk);
; 31.	extern void init_dir_buf(void);
; 32.	extern void TransOneRecord(file_record *target,file_record *source_record);
; 33.	extern WORD GetActiveDirFrom(WORD n);
; 34.	
; 35.	/********************************************************************************
; 36.	* Description : select the directory.
; 37.	*
; 38.	* Arguments  :
; 39.	*            location: get thedisk type
; 40.	*            type : show file kind
; 41.	*            string_id: language type
; 42.	* Returns     :
; 43.	*            other:    Successful
; 44.	*            0:    Fail, detail information in fselError
; 45.	* Notes       :  only select the valid directory
; 46.	*
; 47.	********************************************************************************/
; 48.	int ui_directory(file_location_t *location, BYTE type,BYTE string_id)
; 49.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	LD	HL,65516
	ADD	HL,SP
	LD	SP,HL
; 50.	    char Strname[12], bakname[12];
; 51.	    char key;
; 52.	    BYTE  iTag,i;
; 53.	    BYTE  temp,count;
; 54.	    WORD   top,bottom,old_active;
; 55.	    BYTE  active;
; 56.	    BYTE  DiskFlag;
; 57.	    if(location->disk=='H')
	LD	A,(DE)
	CP	72
	JR	NZ,?0003
?0002:
; 58.	       DiskFlag=1;
	LD	(IX-22),1
; 59.	    else
	JR	?0004
?0003:
; 60.	       DiskFlag=0;
	LD	(IX-22),0
?0004:
; 61.	    BankSwitch((unsigned long)DecodeOnePage >> 16);
	LD	B,0
	LD	E,BYTE3 DecodeOnePage
	CALL	LWRD BankSwitch
; 62.	    iTag = fselSetLocationC(location);
	LD	E,(IX-4)
	LD	D,(IX-3)
	LD	A,BYTE3 fselSetLocationC
	LD	HL,LWRD fselSetLocationC
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 63.	
; 64.	    count=0;
; 65.	    if (fselDirNo[0] == 0)    //当前所选为根目录,重新初始化目录层次有关参数
	LD	A,(fselDirNo)
	OR	A
	JR	NZ,?0006
?0005:
; 66.	    {
; 67.	        for(i=0; i<8; i++)
	LD	(IX-20),B
?0008:
	LD	A,(IX-20)
	CP	8
	JR	NC,?0007
?0009:
; 68.	            fselDirNo[i] = 0;
	LD	C,A
	LD	HL,fselDirNo
	ADD	HL,BC
	LD	(HL),B
	INC	(IX-20)
	JR	?0008
?0007:
; 69.	        FS_CD(":");
	LD	DE,?0011
	CALL	LWRD FS_CD
; 70.	        fselDirLayer = 0;
	XOR	A
	LD	(fselDirLayer),A
; 71.	    }
; 72.	    else            //进入当前目录名所指目录中
	JR	?0018
?0006:
; 73.	    {
; 74.	        if(fselDirLayer<7)
	LD	A,(fselDirLayer)
	CP	7
	JR	NC,?0018
?0013:
; 75.	        {
; 76.	            if(fselDirNo[fselDirLayer])
	LD	C,A
	LD	HL,fselDirNo
	ADD	HL,BC
	LD	A,(HL)
	OR	A
	JR	Z,?0016
?0015:
; 77.	                fselDirLayer=fselDirLayer+1;
	LD	A,C
	ADD	A,1
	LD	(fselDirLayer),A
?0016:
; 78.	            if(FS_CD(location->path))
	LD	HL,14
	LD	C,(IX-4)
	LD	B,(IX-3)
	ADD	HL,BC
	EX	DE,HL
	CALL	LWRD FS_CD
	OR	A
	JR	Z,?0018
?0017:
; 79.	            {
; 80.	                fselDirLayer=fselDirLayer+1;
	LD	A,(fselDirLayer)
	ADD	A,1
	LD	(fselDirLayer),A
; 81.	                fselDirNo[fselDirLayer] = 0;     //将当前目录号重新置为0(即目录首)
	LD	C,A
	LD	B,0
	LD	HL,fselDirNo
	ADD	HL,BC
	LD	(HL),B
?0018:
?0014:
?0012:
; 82.	            }
; 83.	        }
; 84.	    }
; 85.	
; 86.	    init_dir_buf();        //初始化目录查询表并计算有效目录总数和文件总数
	LD	A,BYTE3 init_dir_buf
	LD	HL,LWRD init_dir_buf
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 87.	    list_active=0;
	LD	HL,0
	LD	(list_active),HL
; 88.	    cur_group=0;
	LD	(cur_group),HL
; 89.	
; 90.	    top=0; //顶的序号
; 91.	    bottom=top+GroupDefine-1;                  //底的序号
	LD	IY,5
; 92.	    if(bottom>(list_total_num-1))
	XOR	A
	LD	(IX-24),A
	LD	(IX-23),A
	DEC	HL
	LD	BC,(list_total_num)
	ADD	HL,BC
	PUSH	IY
	POP	BC
	AND	A
	SBC	HL,BC
	JR	NC,?0020
?0019:
; 93.	        bottom=list_total_num-1;
	LD	HL,65535
	LD	BC,(list_total_num)
	ADD	HL,BC
	PUSH	HL
	POP	IY
?0020:
; 94.	
; 95.	    DecodeOnePage(top,bottom,type,string_id);
	LD	L,(IX+8)
	PUSH	HL
	LD	L,(IX-2)
	PUSH	HL
	PUSH	IY
	POP	BC
	LD	E,A
	LD	D,E
	CALL	LWRD ?0122
	POP	HL
	POP	HL
; 96.	    ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
	LD	L,(IX-22)
	PUSH	HL
	LD	L,(IX+8)
	PUSH	HL
	LD	HL,(list_active)
	PUSH	HL
	PUSH	HL
	CALL	LWRD ?0121
	POP	HL
	POP	HL
	POP	HL
	POP	HL
?0022:
; 97.	
; 98.	    while(ap_get_message()!=0) {;}
	CALL	LWRD ap_get_message
	OR	A
	JR	NZ,?0022
?0023:
?0021:
; 99.	
; 100.	    ap_message_init(NULL);
	LD	E,A
	LD	D,A
	LD	A,BYTE3 ap_message_init
	LD	HL,LWRD ap_message_init
	CALL	LWRD ?BANK_CALL_DIRECT_L08
?0025:
; 101.	
; 102.	    while(1)
; 103.	    {
; 104.	        //handle msg
; 105.	        key = ap_get_message();
	CALL	LWRD ap_get_message
; 106.	        switch(key)
	LD	E,A
	CALL	LWRD ?C_V_SWITCH_L06
	DEFW	10
	DEFB	5
	DEFB	6
	DEFB	30
	DEFB	33
	DEFB	48
	DEFB	55
	DEFB	56
	DEFB	69
	DEFB	70
	DEFB	144
	DEFW	?0101
	DEFW	?0057
	DEFW	?0028
	DEFW	?0042
	DEFW	?0025
	DEFW	?0097
	DEFW	?0075
	DEFW	?0096
	DEFW	?0096
	DEFW	?0028
	DEFW	?0042
?0028:
; 107.	        {
; 108.	
; 109.	            case AP_KEY_NEXT:
; 110.	            case AP_KEY_NEXT | AP_KEY_HOLD:
; 111.	                    if(list_active < list_total_num - 1)
	LD	HL,65535
	LD	BC,(list_total_num)
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,(list_active)
	AND	A
	SBC	HL,BC
	JR	NC,?0030
?0029:
; 112.	                    {
; 113.	                        list_active++;
	LD	HL,(list_active)
	INC	HL
	LD	(list_active),HL
; 114.	                        if(list_active/GroupDefine==cur_group)
	LD	BC,6
	EX	DE,HL
	CALL	LWRD ?US_DIV_L02
	LD	HL,(cur_group)
	AND	A
	SBC	HL,DE
	JR	NZ,?0032
?0031:
; 115.	                        {
; 116.	                                ShowDirectory(top,bottom,list_active-1,list_active,string_id,DiskFlag);       //zxs change
	LD	L,(IX-22)
	PUSH	HL
	LD	L,(IX+8)
	PUSH	HL
	LD	HL,(list_active)
	PUSH	HL
	LD	HL,65535
	LD	BC,(list_active)
	ADD	HL,BC
	JR	?0111
; 117.	                         }
; 118.	                            else
?0032:
; 119.	                            {
; 120.	                                    cur_group=cur_group+1;
	LD	HL,1
; 121.	
; 122.	                                    top=(list_active/GroupDefine)*GroupDefine; //顶的序号
	CALL	LWRD ?0124
; 123.	                                    bottom=top+GroupDefine-1;                  //底的序号
; 124.	                                    if(bottom>(list_total_num-1))
	JR	NC,?0038
?0034:
; 125.	                                        bottom=list_total_num-1;
	JR	?0119
?0035:
; 126.	
; 127.	                                    DecodeOnePage(top,bottom,type,string_id);
; 128.	                                    ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
?0033:
; 129.	                            }
; 130.	                    }
; 131.	                    else
?0030:
; 132.	                    {
; 133.	                            list_active = 0;
	LD	HL,0
	LD	(list_active),HL
; 134.	                            cur_group=0;
	LD	(cur_group),HL
; 135.	                            top=0; //顶的序号
; 136.	                            bottom=top+GroupDefine-1;                  //底的序号
	LD	IY,5
; 137.	                            if(bottom>(list_total_num-1))
	XOR	A
	LD	(IX-24),A
	LD	(IX-23),A
	DEC	HL
	INC	BC
	ADD	HL,BC
	PUSH	IY
	POP	BC
	AND	A
	SBC	HL,BC
	JR	NC,?0038
?0037:
; 138.	                                bottom=list_total_num-1;
?0119:
	LD	HL,65535
	LD	BC,(list_total_num)
	ADD	HL,BC
	PUSH	HL
	POP	IY
?0038:
; 139.	                            DecodeOnePage(top,bottom,type,string_id);
	LD	L,(IX+8)
	PUSH	HL
	LD	L,(IX-2)
	PUSH	HL
	CALL	LWRD ?0123
	POP	HL
	POP	HL
; 140.	                            ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
	LD	L,(IX-22)
	PUSH	HL
	LD	L,(IX+8)
	PUSH	HL
	LD	HL,(list_active)
	PUSH	HL
?0111:
	PUSH	HL
	CALL	LWRD ?0121
	POP	HL
	POP	HL
	POP	HL
	POP	HL
?0036:
?0040:
; 141.	                    }
; 142.	                while(ap_get_message() != 0);
	CALL	LWRD ap_get_message
	OR	A
	JP	Z,?0025
?0041:
; 143.	
; 144.	
; 145.	               break;
	JR	?0036
?0039:
?0042:
; 146.	
; 147.	            case AP_KEY_PREV:
; 148.	            case AP_KEY_PREV | AP_KEY_HOLD :
; 149.	                if(list_active >0)
	LD	HL,(list_active)
	LD	A,L
	OR	H
	JR	Z,?0044
?0043:
; 150.	                    {
; 151.	                        list_active--;
	DEC	HL
	LD	(list_active),HL
; 152.	                        if(list_active/GroupDefine==cur_group)
	LD	BC,6
	EX	DE,HL
	CALL	LWRD ?US_DIV_L02
	LD	HL,(cur_group)
	SBC	HL,DE
	JR	NZ,?0046
?0045:
; 153.	                        {
; 154.	                                ShowDirectory(top,bottom,list_active+1,list_active,string_id,DiskFlag);
	LD	L,(IX-22)
	PUSH	HL
	LD	L,(IX+8)
	PUSH	HL
	LD	HL,(list_active)
	PUSH	HL
	INC	HL
	JR	?0112
; 155.	                            }
; 156.	                            else
?0046:
; 157.	                            {
; 158.	                                    cur_group=cur_group-1;
	LD	HL,65535
; 159.	
; 160.	                                    top=(list_active/GroupDefine)*GroupDefine; //顶的序号
	CALL	LWRD ?0124
; 161.	                                    bottom=top+GroupDefine-1;                  //底的序号
; 162.	                                    if(bottom>(list_total_num-1))
	JR	NC,?0052
?0048:
; 163.	                                        bottom=list_total_num-1;
	JR	?0120
?0049:
; 164.	
; 165.	                                    DecodeOnePage(top,bottom,type,string_id);
; 166.	                                    ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
?0047:
; 167.	                            }
; 168.	                    }
; 169.	                    else
?0044:
; 170.	                    {
; 171.	                            list_active= list_total_num - 1;
	LD	HL,65535
	LD	BC,(list_total_num)
	ADD	HL,BC
	LD	(list_active),HL
; 172.	                            cur_group=(list_total_num - 1)/GroupDefine;
	LD	BC,6
	CALL	LWRD ?0125
; 173.	                            top=(list_active/GroupDefine)*GroupDefine; //顶的序号
; 174.	                            bottom=top+GroupDefine-1;                  //底的序号
; 175.	                            if(bottom>(list_total_num-1))
	LD	C,L
	LD	B,H
	LD	HL,(list_active)
	AND	A
	SBC	HL,BC
	JR	NC,?0052
?0051:
; 176.	                                bottom=list_total_num-1;
?0120:
	LD	HL,65535
	LD	BC,(list_total_num)
	ADD	HL,BC
	PUSH	HL
	POP	IY
?0052:
; 177.	                            DecodeOnePage(top,bottom,type,string_id);
	LD	L,(IX+8)
	PUSH	HL
	LD	L,(IX-2)

⌨️ 快捷键说明

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