📄 ui_director2.s01
字号:
NAME ui_director2(17)
RSEG DEC_COM_FSL_C(0)
RSEG CSTR(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 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
EXTERN file_name
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
EXTERN menu_pos_list
PUBLIC temp_record
EXTERN unitochar
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_MOD_L02
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. extern const char menu_pos_list[];
; 23. ///-extern const WORD menulist_bck_pic[];
; 24.
; 25. void GetLongNameAndSave(char *Namebuf,char *LongNamebuf,BYTE string_id);
; 26. void SaveOtherPara(void);
; 27. void TransOneRecord(file_record *target,file_record *source_record);
; 28. void ShowDirectory(WORD top,WORD bottom,WORD Old_active,WORD active,BYTE string_id,BYTE Disk);
; 29.
; 30. extern WORD count_dir_num(void);
; 31. extern void Initdirbuf(void);
; 32. extern void Setdirbuf(WORD n);
; 33. extern WORD Getdirbuf(WORD n);
; 34.
; 35. #pragma memory=dataseg(DEC_COM_FSL_D)
; 36. file_record temp_record;
; 37. WORD dir_total_num,file_total_num,list_total_num,list_active,cur_group; //目录总数,文件总数和浏览项数,浏览活动项
; 38.
; 39. #pragma memory=dataseg(IDM_COM_FSL_D)
; 40. file_record OnePageRecord[row_count_def];
; 41. char dirbuf[125];
; 42.
; 43. #pragma memory=constseg(DEC_COM_FSL_R)
; 44. const char Ui_IgnoreExt[4] = {"* "};
; 45. #pragma memory=default
; 46.
; 47. /********************************************************************************
; 48. * Description :GetLongNameAndSave和SaveOtherPara用于保存
; 49. * 读取记录的参数到全局的temp_record中
; 50. *
; 51. ** Arguments :
; 52. *
; 53. * Returns :
; 54. *
; 55. * Notes :
; 56. *
; 57. ********************************************************************************/
; 58. void GetLongNameAndSave(char *Namebuf,char *LongNamebuf,BYTE string_id)
; 59. {
PUSH IY
PUSH IX
PUSH AF
PUSH BC
POP IX
PUSH DE
POP IY
; 60. BYTE NameNum;
; 61. memcpy(LongNamebuf,Namebuf,11);
LD BC,11
PUSH IX
POP DE
PUSH IY
POP HL
LDIR
; 62. memcpy(temp_record.name,Namebuf,12);
LD C,12
LD DE,temp_record+13
PUSH IY
POP HL
LDIR
; 63. 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
; 64. if(NameNum!=0)
XOR A
OR (HL)
JR Z,?0003
?0002:
; 65. {
; 66. 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
; 67. memcpy(temp_record.longname,LongNamebuf,50); //get one usful record
LD BC,50
LD DE,temp_record+25
PUSH IX
POP HL
JR ?0074
; 68. }
; 69. else
?0003:
; 70. 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:
; 71. }
?0087:
POP HL
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
SaveOtherPara:
; 72.
; 73. /********************************************************************************
; 74. * Description :保存目录结构有关参数到全局结构temp_record中
; 75. *
; 76. ** Arguments :
; 77. *
; 78. * Returns :
; 79. *
; 80. * Notes :
; 81. *
; 82. ********************************************************************************/
; 83. void SaveOtherPara(void)
; 84. {
PUSH BC
PUSH DE
; 85. memcpy(temp_record.dirno,fselDirNo,8); //目录序号
LD BC,8
LD DE,temp_record+1
LD HL,fselDirNo
LDIR
; 86. temp_record.fileno=fselFileNo; //文件序号
LD HL,(fselFileNo)
LD (temp_record+9),HL
; 87. temp_record.fselExtNo=fselExtNo; //当前后缀名
LD A,(fselExtNo)
LD (temp_record+12),A
; 88. temp_record.dirlayer=fselDirLayer; //目录层次 0--根目录
LD A,(fselDirLayer)
LD (temp_record+11),A
; 89. }
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
TransOneRecord:
; 90.
; 91. /********************************************************************************
; 92. * Description :用于从idm读记录或写入记录到idm
; 93. *
; 94. ** Arguments :
; 95. *
; 96. * Returns :
; 97. *
; 98. * Notes :
; 99. *
; 100. ********************************************************************************/
; 101. void TransOneRecord(file_record *target,file_record *source_record)
; 102. {
PUSH IY
PUSH IX
PUSH AF
PUSH BC
POP IX
PUSH DE
POP IY
; 103. byte status;
; 104. status = input8(0x05);
IN A,(5)
LD HL,0
ADD HL,SP
LD (HL),A
; 105. output8(0x05, 0xf6);
LD A,246
OUT (5),A
; 106.
; 107. target->filetype=source_record->filetype; //文件类型 0-- 目录 1 文件
LD A,(BC)
EX DE,HL
LD (HL),A
; 108. memcpy(target->dirno,source_record->dirno,8); //目录序号
LD BC,8
PUSH IY
POP DE
INC DE
PUSH IX
POP HL
INC HL
LDIR
; 109. target->fileno=source_record->fileno; //文件序号
LD L,(IX+9)
LD (IY+9),L
LD H,(IX+10)
LD (IY+10),H
; 110. target->fselExtNo=source_record->fselExtNo; //当前后缀名
LD B,(IX+12)
LD (IY+12),B
; 111. target->dirlayer=source_record->dirlayer; //目录层次 0--根目录
LD B,(IX+11)
LD (IY+11),B
; 112. 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
; 113. 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
; 114.
; 115. output8(0x05, status);
LD L,C
LD H,B
ADD HL,SP
LD A,(HL)
OUT (5),A
; 116. }
JP LWRD ?0087
ShowDirectory:
; 117.
; 118.
; 119. /********************************************************************************
; 120. * Description : show the directory.
; 121. *
; 122. * Arguments :
; 123. * location: get thedisk type
; 124. * Invpath: the "\" or name
; 125. * Namebuf:the string you will display
; 126. * type : show file kind
; 127. * string_id: language type
; 128. * Returns :
; 129. * other: Successful
; 130. * 0: Fail, detail information in fselError
; 131. * Notes : only display the valid directory or file
; 132. *
; 133. ********************************************************************************/
; 134.
; 135. void ShowDirectory(WORD top,WORD bottom,WORD Old_active,WORD active,BYTE string_id,BYTE Disk)
; 136. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH DE
LD HL,65526
ADD HL,SP
LD SP,HL
; 137. WORD i,tmp;
; 138. // region_t region;
; 139. DC oldDC_sav;
; 140. GetDCStatus(&oldDC_sav);
INC HL
INC HL
EX DE,HL
CALL LWRD GetDCStatus
; 141.
; 142. ///-SetTextOutMode(1);
; 143. ///-SetPenColor(Color_BLACK_def);
; 144. if(Old_active!=active)
LD L,(IX+10)
LD H,(IX+11)
LD E,(IX+8)
LD D,(IX+9)
AND A
SBC HL,DE
JP Z,?0006
?0005:
; 145. {
; 146. //清除旧的活动菜单项
; 147. tmp = Old_active%row_count_def;
LD BC,6
CALL LWRD ?US_MOD_L02
; 148. ResShowPic(FILEBCK1, 12, menu_pos_list[tmp]-1);
LD HL,menu_pos_list
ADD HL,DE
LD A,(HL)
ADD A,255
LD C,A
PUSH BC
LD C,12
LD DE,45
CALL LWRD ?0089
POP AF
; 149.
; 150. //显示新的活动菜单
; 151. tmp = active%row_count_def;
LD BC,6
LD E,(IX+10)
LD D,(IX+11)
CALL LWRD ?0088
; 152. TransOneRecord(&temp_record,&OnePageRecord[tmp]); //将idm中记录数据读取到temp_record中
; 153. if(temp_record.filetype==TYPE_FILE)
JR NZ,?0008
?0007:
; 154. ResShowPic(MFILE,0,menu_pos_list[tmp]+2);
LD HL,menu_pos_list
LD C,(IX-14)
LD B,(IX-13)
ADD HL,BC
LD A,(HL)
ADD A,2
LD C,A
PUSH BC
LD C,0
LD DE,198
JR ?0075
?0008:
; 155. // if(temp_record.filetype==TYPE_FILE)
; 156. // ResShowPic(MFILE, 0, (LCD_HEIGHT-16*(tmp+1)));
; 157. else if(temp_record.filetype==TYPE_DIR)
LD A,(temp_record)
OR A
JR NZ,?0011
?0010:
; 158. {
; 159. ResShowPic(MDIR,0,menu_pos_list[tmp]);
LD HL,menu_pos_list
LD C,(IX-14)
LD B,(IX-13)
ADD HL,BC
LD C,(HL)
PUSH BC
LD C,A
LD DE,175
?0075:
CALL LWRD ?0089
POP AF
?0011:
?0009:
; 160. }
; 161.
; 162. ResShowPic(FILEBCK, 12, menu_pos_list[tmp]-1);
LD HL,menu_pos_list
LD C,(IX-14)
LD B,(IX-13)
ADD HL,BC
LD A,(HL)
ADD A,255
LD E,A
PUSH DE
CALL LWRD ?0090
POP AF
; 163.
; 164. SetTextPos(12, menu_pos_list[tmp]);
CALL LWRD ?0091
; 165. SetPenColor(Color_WHITE_def);
CALL LWRD ?0093
; 166. SetBackgdColor(0x00003358);
CALL LWRD SetBackgdColor
; 167. PutS(temp_record.longname,-1);
LD C,255
LD DE,temp_record+25
CALL LWRD PutS
; 168.
; 169. //重新显示旧的活动菜单
; 170. tmp = Old_active%row_count_def;
LD BC,6
LD E,(IX+8)
LD D,(IX+9)
CALL LWRD ?0088
; 171. TransOneRecord(&temp_record,&OnePageRecord[tmp]); //将idm中记录数据读取到temp_record中
; 172. if(temp_record.filetype==TYPE_FILE)
JR NZ,?0013
?0012:
; 173. ResShowPic(MFILE,0,menu_pos_list[tmp]+2);
LD HL,menu_pos_list
LD C,(IX-14)
LD B,(IX-13)
ADD HL,BC
LD A,(HL)
ADD A,2
LD C,A
PUSH BC
LD C,0
LD DE,198
JR ?0076
?0013:
; 174. else if(temp_record.filetype==TYPE_DIR)
LD A,(temp_record)
OR A
JR NZ,?0016
?0015:
; 175. {
; 176. ResShowPic(MDIR,0,menu_pos_list[tmp]);
LD HL,menu_pos_list
LD C,(IX-14)
LD B,(IX-13)
ADD HL,BC
LD C,(HL)
PUSH BC
LD C,A
LD DE,175
?0076:
CALL LWRD ?0089
POP AF
?0016:
?0014:
; 177. }
; 178. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
; 179. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
CALL LWRD SetBackgdColor
; 180. SetTextPos(12, menu_pos_list[tmp]);
CALL LWRD ?0091
; 181. PutS(temp_record.longname,-1);
LD C,255
LD DE,temp_record+25
CALL LWRD PutS
; 182. }
; 183. else //if(Old_active==active) //新旧活动项相同表示是新的一屏数据,需要全部刷新
JP LWRD ?0021
?0006:
; 184. {
; 185. //ClearScreen(NULL);
; 186. ///-SetTextOutMode(1);
; 187. SetBackgdColor(0x0000df1c);
LD C,L
LD B,H
LD DE,57116
CALL LWRD SetBackgdColor
; 188. ResShowPic(MENUTWO1,0,0);
LD C,0
PUSH BC
LD DE,196
CALL LWRD ?0089
POP AF
; 189. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
; 190. if(!Disk) //主盘目录
XOR A
OR (IX+14)
LD C,1
PUSH BC
LD C,255
PUSH BC
LD C,(IX+12)
JR NZ,?0019
?0018:
; 191. ResShowMultiString( VSTOPM1,string_id, 255, 1);
LD DE,633
JR ?0077
; 192. else
?0019:
; 193. ResShowMultiString( VSTOPM2,string_id, 255, 1);
LD DE,634
?0077:
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
?0020:
; 194. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
CALL LWRD SetBackgdColor
; 195. ///-SetTextOutMode(0);
; 196.
; 197. for(i=top;i<=bottom;i++)
LD L,(IX-4)
LD H,(IX-3)
PUSH HL
POP IY
?0022:
PUSH IY
POP BC
LD L,(IX-2)
LD H,(IX-1)
AND A
SBC HL,BC
JP C,?0021
?0023:
; 198. {
; 199. if(i==active)
LD L,(IX+10)
LD H,(IX+11)
SBC HL,BC
JR NZ,?0026
?0025:
; 200. {
; 201. ResShowPic(FILEBCK, 12, menu_pos_list[i-top]-1);
LD C,(IX-4)
LD B,(IX-3)
PUSH IY
POP HL
AND A
SBC HL,BC
LD BC,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,255
LD C,A
PUSH BC
CALL LWRD ?0090
POP AF
; 202. SetPenColor(Color_WHITE_def);
CALL LWRD ?0093
; 203. SetBackgdColor(0x00003358);
JR ?0078
; 204. }
; 205. else
?0026:
; 206. {
; 207. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
; 208. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
?0078:
CALL LWRD SetBackgdColor
?0027:
; 209. }
; 210.
; 211. output8(0x4e,input8(0x4e) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 212. TransOneRecord(&temp_record,&OnePageRecord[i-top]); //将idm中记录数据读取到temp_record中
LD C,(IX-4)
LD B,(IX-3)
PUSH IY
POP HL
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
; 213. if(temp_record.filetype==TYPE_FILE)
LD A,(temp_record)
DEC A
JR NZ,?0029
?0028:
; 214. ResShowPic(MFILE,0,menu_pos_list[i-top]+2);
LD C,(IX-4)
LD B,(IX-3)
PUSH IY
POP HL
AND A
SBC HL,BC
LD BC,menu_pos_list
ADD HL,BC
LD A,(HL)
ADD A,2
LD C,A
PUSH BC
LD C,0
LD DE,198
JR ?0079
?0029:
; 215. else if(temp_record.filetype==TYPE_DIR)
LD A,(temp_record)
OR A
JR NZ,?0032
?0031:
; 216. {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -