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