📄 ui_directory.s01
字号:
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 + -