📄 ui_directory.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 25/Dec/106 16:58:54 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d90f\ap\common\ui_directory.c #
# List file = d:\case_i_d90f\ap\ap_amv\list\ui_directory.lst #
# Object file = d:\case_i_d90f\ap\ap_amv\obj\ui_directory.r01 #
# ASM file = d:\case_i_d90f\ap\ap_amv\list\ui_directory.s01 #
# Command line = -v0 -mb -OD:\case_i_d90f\ap\ap_amv\Obj\ -e -K -w #
# -gA -s9 -RCODE -r0 -DNAPDEBUG -DAMV_JPG_TXT #
# -LD:\case_i_d90f\ap\ap_amv\List\ -q -t8 #
# -AD:\case_i_d90f\ap\ap_amv\List\ #
# -ND:\case_i_d90f\ap\ap_amv\List\ -X #
# -Id:\sdk_i_90f\inc\ -Id:\case_i_d90f\inc\ #
# D:\CASE_I_D90F\AP\COMMON\ui_directory.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_directory(17)
\ 0000 RSEG COM_CTRL(0)
\ 0000 RSEG CSTR(0)
\ 0000 EXTERN BankSwitch
\ 0000 EXTERN DecodeOnePage
\ 0000 EXTERN FS_CD
\ 0000 EXTERN GetActiveDirFrom
\ 0000 EXTERN OnePageRecord
\ 0000 EXTERN ShowDirectory
\ 0000 EXTERN TransOneRecord
\ 0000 EXTERN ap_get_message
\ 0000 EXTERN ap_handle_hotkey
\ 0000 EXTERN ap_message_init
\ 0000 EXTERN cur_group
\ 0000 EXTERN fselDirLayer
\ 0000 EXTERN fselDirNo
\ 0000 EXTERN fselEntCurrentDir
\ 0000 EXTERN fselExtNo
\ 0000 EXTERN fselFileNo
\ 0000 EXTERN fselGetLocation
\ 0000 EXTERN fselRetParentDir
\ 0000 EXTERN fselSetLocationC
\ 0000 EXTERN init_dir_buf
\ 0000 EXTERN list_active
\ 0000 EXTERN list_total_num
\ 0000 EXTERN temp_record
\ 0000 PUBLIC ui_directory
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?US_DIV_L02
\ 0000 EXTERN ?US_MOD_L02
\ 0000 EXTERN ?S_MUL_L02
\ 0000 EXTERN ?C_V_SWITCH_L06
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG COM_CTRL
\ 0000 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(BYTE top,BYTE bottom,BYTE Old_active,BYTE 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 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A C5 PUSH BC
\ 000B D5 PUSH DE
\ 000C 21ECFF LD HL,65516
\ 000F 39 ADD HL,SP
\ 0010 F9 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')
\ 0011 1A LD A,(DE)
\ 0012 FE48 CP 72
\ 0014 2006 JR NZ,?0003
\ 0016 ?0002:
58 DiskFlag=1;
\ 0016 DD36EA01 LD (IX-22),1
59 else
\ 001A 1804 JR ?0004
\ 001C ?0003:
60 DiskFlag=0;
\ 001C DD36EA00 LD (IX-22),0
\ 0020 ?0004:
61 BankSwitch((unsigned long)DecodeOnePage >> 16);
\ 0020 0600 LD B,0
\ 0022 1E00 LD E,BYTE3 DecodeOnePage
\ 0024 CD0000 CALL LWRD BankSwitch
62 iTag = fselSetLocationC(location);
\ 0027 DD5EFC LD E,(IX-4)
\ 002A DD56FD LD D,(IX-3)
\ 002D 3E00 LD A,BYTE3 fselSetLocationC
\ 002F 210000 LD HL,LWRD fselSetLocationC
\ 0032 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
63
64 count=0;
65 if (fselDirNo[0] == 0) //当前所选为根目录,重新初始化目录层次有关参数
\ 0035 3A0000 LD A,(fselDirNo)
\ 0038 B7 OR A
\ 0039 2021 JR NZ,?0006
\ 003B ?0005:
66 {
67 for(i=0; i<8; i++)
\ 003B DD70EC LD (IX-20),B
\ 003E ?0008:
\ 003E DD7EEC LD A,(IX-20)
\ 0041 FE08 CP 8
\ 0043 300B JR NC,?0007
\ 0045 ?0009:
68 fselDirNo[i] = 0;
\ 0045 4F LD C,A
\ 0046 210000 LD HL,fselDirNo
\ 0049 09 ADD HL,BC
\ 004A 70 LD (HL),B
\ 004B DD34EC INC (IX-20)
\ 004E 18EE JR ?0008
\ 0050 ?0007:
69 FS_CD(":");
\ 0050 110000 LD DE,?0011
\ 0053 CD0000 CALL LWRD FS_CD
70 fselDirLayer = 0;
\ 0056 AF XOR A
\ 0057 320000 LD (fselDirLayer),A
71 }
72 else //进入当前目录名所指目录中
\ 005A 1837 JR ?0018
\ 005C ?0006:
73 {
74 if(fselDirLayer<7)
\ 005C 3A0000 LD A,(fselDirLayer)
\ 005F FE07 CP 7
\ 0061 3030 JR NC,?0018
\ 0063 ?0013:
75 {
76 if(fselDirNo[fselDirLayer])
\ 0063 4F LD C,A
\ 0064 210000 LD HL,fselDirNo
\ 0067 09 ADD HL,BC
\ 0068 7E LD A,(HL)
\ 0069 B7 OR A
\ 006A 2806 JR Z,?0016
\ 006C ?0015:
77 fselDirLayer=fselDirLayer+1;
\ 006C 79 LD A,C
\ 006D C601 ADD A,1
\ 006F 320000 LD (fselDirLayer),A
\ 0072 ?0016:
78 if(FS_CD(location->path))
\ 0072 210E00 LD HL,14
\ 0075 DD4EFC LD C,(IX-4)
\ 0078 DD46FD LD B,(IX-3)
\ 007B 09 ADD HL,BC
\ 007C EB EX DE,HL
\ 007D CD0000 CALL LWRD FS_CD
\ 0080 B7 OR A
\ 0081 2810 JR Z,?0018
\ 0083 ?0017:
79 {
80 fselDirLayer=fselDirLayer+1;
\ 0083 3A0000 LD A,(fselDirLayer)
\ 0086 C601 ADD A,1
\ 0088 320000 LD (fselDirLayer),A
81 fselDirNo[fselDirLayer] = 0; //将当前目录号重新置为0(即目录首)
\ 008B 4F LD C,A
\ 008C 0600 LD B,0
\ 008E 210000 LD HL,fselDirNo
\ 0091 09 ADD HL,BC
\ 0092 70 LD (HL),B
\ 0093 ?0018:
\ 0093 ?0014:
\ 0093 ?0012:
82 }
83 }
84 }
85
86 init_dir_buf(); //初始化目录查询表并计算有效目录总数和文件总数
\ 0093 3E00 LD A,BYTE3 init_dir_buf
\ 0095 210000 LD HL,LWRD init_dir_buf
\ 0098 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
87 list_active=0;
\ 009B 210000 LD HL,0
\ 009E 220000 LD (list_active),HL
88 cur_group=0;
\ 00A1 220000 LD (cur_group),HL
89
90 top=0; //顶的序号
91 bottom=top+GroupDefine-1; //底的序号
\ 00A4 FD210500 LD IY,5
92 if(bottom>(list_total_num-1))
\ 00A8 AF XOR A
\ 00A9 DD77E8 LD (IX-24),A
\ 00AC DD77E9 LD (IX-23),A
\ 00AF 2B DEC HL
\ 00B0 ED4B0000 LD BC,(list_total_num)
\ 00B4 09 ADD HL,BC
\ 00B5 FDE5 PUSH IY
\ 00B7 C1 POP BC
\ 00B8 A7 AND A
\ 00B9 ED42 SBC HL,BC
\ 00BB 300B JR NC,?0020
\ 00BD ?0019:
93 bottom=list_total_num-1;
\ 00BD 21FFFF LD HL,65535
\ 00C0 ED4B0000 LD BC,(list_total_num)
\ 00C4 09 ADD HL,BC
\ 00C5 E5 PUSH HL
\ 00C6 FDE1 POP IY
\ 00C8 ?0020:
94
95 DecodeOnePage(top,bottom,type,string_id);
\ 00C8 DD6E08 LD L,(IX+8)
\ 00CB E5 PUSH HL
\ 00CC DD6EFE LD L,(IX-2)
\ 00CF E5 PUSH HL
\ 00D0 FDE5 PUSH IY
\ 00D2 C1 POP BC
\ 00D3 5F LD E,A
\ 00D4 53 LD D,E
\ 00D5 CD2304 CALL LWRD ?0121
\ 00D8 E1 POP HL
\ 00D9 E1 POP HL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -