📄 ui_directory_rec.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 27/Sep/107 17:31:25 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d913f\ap\common\ui_directory_rec.c #
# List file = d:\case_i_d913f\ap\ap_fmrecord\list\ui_directory_rec.lst#
# Object file = d:\case_i_d913f\ap\ap_fmrecord\obj\ui_directory_rec.r01#
# Command line = -v0 -mb -OD:\case_i_d913f\ap\ap_fmrecord\Obj\ -e #
# -K -w -gA -s9 -RCODE -r0 -DNAPDEBUG #
# -LD:\case_i_d913f\ap\ap_fmrecord\List\ -q -t8 -X #
# -Id:\sdk_i_913f\inc\ -Id:\case_i_d913f\inc\ #
# d:\case_i_d913f\AP\COMMON\ui_directory_rec.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME ui_directory_rec(17)
\ 0000 RSEG COM_CTRL(0)
\ 0000 RSEG CSTR(0)
\ 0000 EXTERN BankSwitch
\ 0000 EXTERN DecodeOnePage
\ 0000 EXTERN FS_CD
\ 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 fselExtNo
\ 0000 EXTERN fselFileNo
\ 0000 EXTERN fselGetLocation
\ 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 #pragma memory=dataseg(IDM_COM_FSL_D)
24 extern file_record OnePageRecord[row_count_def];
25 extern char dirbuf[125];
26 #pragma memory=default
27
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 F5 PUSH AF
\ 000D F5 PUSH AF
\ 000E F5 PUSH AF
50 char Strname[12], bakname[12];
51 char key;
52 BYTE iTag,i;
53 BYTE temp;
54 WORD top,bottom,old_active;
55 BYTE active;
56 BYTE DiskFlag;
57 BankSwitch((unsigned long)DecodeOnePage >> 16);
\ 000F 0600 LD B,0
\ 0011 1E00 LD E,BYTE3 DecodeOnePage
\ 0013 CD0000 CALL LWRD BankSwitch
58 iTag = fselSetLocationC(location);
\ 0016 DD5EFC LD E,(IX-4)
\ 0019 DD56FD LD D,(IX-3)
\ 001C 3E00 LD A,BYTE3 fselSetLocationC
\ 001E 210000 LD HL,LWRD fselSetLocationC
\ 0021 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
59
60 if (fselDirNo[0] == 0) //当前所选为根目录,重新初始化目录层次有关参数
\ 0024 3A0000 LD A,(fselDirNo)
\ 0027 B7 OR A
\ 0028 2021 JR NZ,?0003
\ 002A ?0002:
61 {
62 for(i=0; i<8; i++)
\ 002A DD70FA LD (IX-6),B
\ 002D ?0005:
\ 002D DD7EFA LD A,(IX-6)
\ 0030 FE08 CP 8
\ 0032 300B JR NC,?0004
\ 0034 ?0006:
63 fselDirNo[i] = 0;
\ 0034 4F LD C,A
\ 0035 210000 LD HL,fselDirNo
\ 0038 09 ADD HL,BC
\ 0039 70 LD (HL),B
\ 003A DD34FA INC (IX-6)
\ 003D 18EE JR ?0005
\ 003F ?0004:
64 FS_CD(":");
\ 003F 110000 LD DE,?0008
\ 0042 CD0000 CALL LWRD FS_CD
65 fselDirLayer = 0;
\ 0045 AF XOR A
\ 0046 320000 LD (fselDirLayer),A
66 }
67 else //进入当前目录名所指目录中
\ 0049 1837 JR ?0013
\ 004B ?0003:
68 {
69 if(fselDirNo[fselDirLayer])
\ 004B ED4B0000 LD BC,(fselDirLayer)
\ 004F 0600 LD B,0
\ 0051 210000 LD HL,fselDirNo
\ 0054 09 ADD HL,BC
\ 0055 7E LD A,(HL)
\ 0056 B7 OR A
\ 0057 2808 JR Z,?0011
\ 0059 ?0010:
70 fselDirLayer=fselDirLayer+1;
\ 0059 3A0000 LD A,(fselDirLayer)
\ 005C C601 ADD A,1
\ 005E 320000 LD (fselDirLayer),A
\ 0061 ?0011:
71 if(FS_CD(location->path))
\ 0061 210E00 LD HL,14
\ 0064 DD4EFC LD C,(IX-4)
\ 0067 DD46FD LD B,(IX-3)
\ 006A 09 ADD HL,BC
\ 006B EB EX DE,HL
\ 006C CD0000 CALL LWRD FS_CD
\ 006F B7 OR A
\ 0070 2810 JR Z,?0013
\ 0072 ?0012:
72 {
73 fselDirLayer=fselDirLayer+1;
\ 0072 3A0000 LD A,(fselDirLayer)
\ 0075 C601 ADD A,1
\ 0077 320000 LD (fselDirLayer),A
74 fselDirNo[fselDirLayer] = 0; //将当前目录号重新置为0(即目录首)
\ 007A 4F LD C,A
\ 007B 0600 LD B,0
\ 007D 210000 LD HL,fselDirNo
\ 0080 09 ADD HL,BC
\ 0081 70 LD (HL),B
\ 0082 ?0013:
\ 0082 ?0009:
75 }
76 }
77
78 init_dir_buf(); //计算目录总数
\ 0082 3E00 LD A,BYTE3 init_dir_buf
\ 0084 210000 LD HL,LWRD init_dir_buf
\ 0087 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
79 list_active=0;
\ 008A 210000 LD HL,0
\ 008D 220000 LD (list_active),HL
80 cur_group=0;
\ 0090 220000 LD (cur_group),HL
81
82 top=0; //顶的序号
83 bottom=top+GroupDefine-1; //底的序号
\ 0093 FD210500 LD IY,5
84 if(bottom>(list_total_num-1))
\ 0097 AF XOR A
\ 0098 DD77F6 LD (IX-10),A
\ 009B DD77F7 LD (IX-9),A
\ 009E 2B DEC HL
\ 009F ED4B0000 LD BC,(list_total_num)
\ 00A3 09 ADD HL,BC
\ 00A4 FDE5 PUSH IY
\ 00A6 C1 POP BC
\ 00A7 A7 AND A
\ 00A8 ED42 SBC HL,BC
\ 00AA 300B JR NC,?0015
\ 00AC ?0014:
85 bottom=list_total_num-1;
\ 00AC 21FFFF LD HL,65535
\ 00AF ED4B0000 LD BC,(list_total_num)
\ 00B3 09 ADD HL,BC
\ 00B4 E5 PUSH HL
\ 00B5 FDE1 POP IY
\ 00B7 ?0015:
86 if(location->disk=='H')
\ 00B7 DD6EFC LD L,(IX-4)
\ 00BA DD66FD LD H,(IX-3)
\ 00BD 7E LD A,(HL)
\ 00BE FE48 CP 72
\ 00C0 2006 JR NZ,?0017
\ 00C2 ?0016:
87 DiskFlag=1;
\ 00C2 DD36F801 LD (IX-8),1
88 else
\ 00C6 1804 JR ?0018
\ 00C8 ?0017:
89 DiskFlag=0;
\ 00C8 DD36F800 LD (IX-8),0
\ 00CC ?0018:
90 DecodeOnePage(top,bottom,type,string_id);
\ 00CC DD6E08 LD L,(IX+8)
\ 00CF E5 PUSH HL
\ 00D0 DD6EFE LD L,(IX-2)
\ 00D3 E5 PUSH HL
\ 00D4 CD2204 CALL LWRD ?0124
\ 00D7 E1 POP HL
\ 00D8 E1 POP HL
91 ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
\ 00D9 DD6EF8 LD L,(IX-8)
\ 00DC E5 PUSH HL
\ 00DD DD6E08 LD L,(IX+8)
\ 00E0 E5 PUSH HL
\ 00E1 3A0000 LD A,(list_active)
\ 00E4 4F LD C,A
\ 00E5 C5 PUSH BC
\ 00E6 4F LD C,A
\ 00E7 C5 PUSH BC
\ 00E8 CD3304 CALL LWRD ?0125
\ 00EB E1 POP HL
\ 00EC E1 POP HL
\ 00ED E1 POP HL
\ 00EE E1 POP HL
\ 00EF ?0020:
92
93 while(ap_get_message()!=0) {;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -