📄 ui_directory2_scroll.s01
字号:
NAME ui_directory2_scroll(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)
EXTERN Count_Byte
PUBLIC DecodeOnePage
EXTERN FS_Backup
EXTERN FS_CD
EXTERN FS_Dir
EXTERN FS_GetName
EXTERN FS_Restore
EXTERN GetFileTotal
EXTERN GetFileTotalCur
PUBLIC GetLongNameAndSave
EXTERN Getdirbuf
EXTERN Initdirbuf
PUBLIC OnePageRecord
EXTERN PutS
EXTERN ResShowMultiString
EXTERN ResShowPic
PUBLIC SaveOtherPara
EXTERN ScrollFlag
EXTERN ScrollString
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
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
EXTERN menulist_bck_pic
EXTERN region_scroll
EXTERN scroll_buf
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
EXTERN ?STRLEN_L11
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. #define Color_BULE_Scroll_def 0x0000001f//深蓝
; 23.
; 24. extern const char menu_pos_list[];
; 25. extern const WORD menulist_bck_pic[];
; 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(WORD top,WORD bottom,WORD Old_active,WORD 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. #pragma memory=default
; 47.
; 48. extern char ScrollFlag; //滚动标志位
; 49. extern char scroll_buf[]; //滚屏buffer区
; 50. extern region_t region_scroll; //滚屏区域
; 51.
; 52. /********************************************************************************
; 53. * Description :GetLongNameAndSave和SaveOtherPara用于保存
; 54. * 读取记录的参数到全局的temp_record中
; 55. *
; 56. ** Arguments :
; 57. *
; 58. * Returns :
; 59. *
; 60. * Notes :
; 61. *
; 62. ********************************************************************************/
; 63. void GetLongNameAndSave(char *Namebuf,char *LongNamebuf,BYTE string_id)
; 64. {
PUSH IY
PUSH IX
PUSH AF
PUSH BC
POP IX
PUSH DE
POP IY
; 65. BYTE NameNum;
; 66. memcpy(LongNamebuf,Namebuf,11);
LD BC,11
PUSH IX
POP DE
PUSH IY
POP HL
LDIR
; 67. memcpy(temp_record.name,Namebuf,12);
LD C,12
LD DE,temp_record+13
PUSH IY
POP HL
LDIR
; 68. 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
; 69. if(NameNum!=0)
XOR A
OR (HL)
JR Z,?0003
?0002:
; 70. {
; 71. 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
; 72. memcpy(temp_record.longname,LongNamebuf,50); //get one usful record
LD BC,50
LD DE,temp_record+25
PUSH IX
POP HL
JR ?0087
; 73. }
; 74. else
?0003:
; 75. memcpy(temp_record.longname,Namebuf,12); //get one usful record
LD BC,12
LD DE,temp_record+25
PUSH IY
POP HL
?0087:
LDIR
?0004:
; 76. }
?0105:
POP HL
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
SaveOtherPara:
; 77.
; 78. /********************************************************************************
; 79. * Description :保存目录结构有关参数到全局结构temp_record中
; 80. *
; 81. ** Arguments :
; 82. *
; 83. * Returns :
; 84. *
; 85. * Notes :
; 86. *
; 87. ********************************************************************************/
; 88. void SaveOtherPara(void)
; 89. {
PUSH BC
PUSH DE
; 90. memcpy(temp_record.dirno,fselDirNo,8); //目录序号
LD BC,8
LD DE,temp_record+1
LD HL,fselDirNo
LDIR
; 91. temp_record.fileno=fselFileNo; //文件序号
LD HL,(fselFileNo)
LD (temp_record+9),HL
; 92. temp_record.fselExtNo=fselExtNo; //当前后缀名
LD A,(fselExtNo)
LD (temp_record+12),A
; 93. temp_record.dirlayer=fselDirLayer; //目录层次 0--根目录
LD A,(fselDirLayer)
LD (temp_record+11),A
; 94. }
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
TransOneRecord:
; 95.
; 96. /********************************************************************************
; 97. * Description :用于从idm读记录或写入记录到idm
; 98. *
; 99. ** Arguments :
; 100. *
; 101. * Returns :
; 102. *
; 103. * Notes :
; 104. *
; 105. ********************************************************************************/
; 106. void TransOneRecord(file_record *target,file_record *source_record)
; 107. {
PUSH IY
PUSH IX
PUSH AF
PUSH BC
POP IX
PUSH DE
POP IY
; 108. byte status;
; 109. status = input8(0x05);
IN A,(5)
LD HL,0
ADD HL,SP
LD (HL),A
; 110. output8(0x05, 0xf6);
LD A,246
OUT (5),A
; 111.
; 112. target->filetype=source_record->filetype; //文件类型 0-- 目录 1 文件
LD A,(BC)
EX DE,HL
LD (HL),A
; 113. memcpy(target->dirno,source_record->dirno,8); //目录序号
LD BC,8
PUSH IY
POP DE
INC DE
PUSH IX
POP HL
INC HL
LDIR
; 114. target->fileno=source_record->fileno; //文件序号
LD L,(IX+9)
LD (IY+9),L
LD H,(IX+10)
LD (IY+10),H
; 115. target->fselExtNo=source_record->fselExtNo; //当前后缀名
LD B,(IX+12)
LD (IY+12),B
; 116. target->dirlayer=source_record->dirlayer; //目录层次 0--根目录
LD B,(IX+11)
LD (IY+11),B
; 117. 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
; 118. 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
; 119.
; 120. output8(0x05, status);
LD L,C
LD H,B
ADD HL,SP
LD A,(HL)
OUT (5),A
; 121. }
JP LWRD ?0105
ShowDirectory:
; 122.
; 123.
; 124. /********************************************************************************
; 125. * Description : show the directory.
; 126. *
; 127. * Arguments :
; 128. * location: get thedisk type
; 129. * Invpath: the "\" or name
; 130. * Namebuf:the string you will display
; 131. * type : show file kind
; 132. * string_id: language type
; 133. * Returns :
; 134. * other: Successful
; 135. * 0: Fail, detail information in fselError
; 136. * Notes : only display the valid directory or file
; 137. *
; 138. ********************************************************************************/
; 139.
; 140. void ShowDirectory(WORD top,WORD bottom,WORD Old_active,WORD active,BYTE string_id,BYTE Disk)
; 141. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH DE
PUSH AF
PUSH AF
; 142. WORD i,tmp;
; 143. BYTE DisplayBytes;
; 144. region_scroll.x=explorer_str_x_def;
LD A,32
LD (region_scroll),A
; 145. region_scroll.width=160;
LD A,160
LD (region_scroll+2),A
; 146. region_scroll.height=16;
LD A,16
LD (region_scroll+3),A
; 147. if(ScrollFlag)
LD A,(ScrollFlag)
OR A
JR Z,?0006
?0005:
; 148. {
; 149. SetTextOutMode(0);
LD E,0
CALL LWRD SetTextOutMode
; 150. SetBackgdColor(Color_BULE_Scroll_def);
LD BC,0
LD DE,31
CALL LWRD SetBackgdColor
; 151. ScrollString(scroll_buf, FALSE,string_id,®ion_scroll);
LD HL,region_scroll
PUSH HL
LD L,(IX+12)
PUSH HL
LD C,0
CALL LWRD ?0106
POP HL
POP HL
; 152. SetTextOutMode(1);
LD E,1
CALL LWRD SetTextOutMode
; 153. }
; 154. else
JP LWRD ?0045
?0006:
; 155. {
; 156. SetTextOutMode(1);
LD E,1
CALL LWRD SetTextOutMode
; 157. SetPenColor(Color_WHITE_def);
LD BC,0
LD DE,65535
CALL LWRD SetPenColor
; 158. if(Old_active!=active)
LD L,(IX+10)
LD H,(IX+11)
LD C,(IX+8)
LD B,(IX+9)
AND A
SBC HL,BC
JP Z,?0009
?0008:
; 159. {
; 160.
; 161. //清除旧的活动菜单项
; 162. tmp = Old_active%row_count_def;
LD BC,6
LD E,(IX+8)
LD D,(IX+9)
CALL LWRD ?US_MOD_L02
LD (IX-8),E
LD (IX-7),D
; 163. ResShowPic(menulist_bck_pic[tmp], menu_bck_x_def, menu_pos_list[tmp]-4);
LD HL,menu_pos_list
ADD HL,DE
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
LD C,9
EX DE,HL
ADD HL,HL
LD DE,menulist_bck_pic
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
CALL LWRD ?0108
POP AF
; 164. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
CALL LWRD ?0109
POP AF
; 165. //重新显示旧的活动菜单
; 166. TransOneRecord(&temp_record,&OnePageRecord[tmp]); //将idm中记录数据读取到temp_record中
LD BC,75
LD E,(IX-8)
LD D,(IX-7)
CALL LWRD ?0110
; 167. if(temp_record.filetype==TYPE_FILE)
LD A,(temp_record)
DEC A
JR NZ,?0011
?0010:
; 168. ResShowPic(MFILE,13,menu_pos_list[tmp]-1);
LD HL,menu_pos_list
LD C,(IX-8)
LD B,(IX-7)
ADD HL,BC
LD A,(HL)
ADD A,255
LD C,A
PUSH BC
LD C,13
LD DE,198
JR ?0088
?0011:
; 169. else if(temp_record.filetype==TYPE_DIR)
LD A,(temp_record)
OR A
JR NZ,?0014
?0013:
; 170. {
; 171. ResShowPic(MDIR,10,menu_pos_list[tmp]-4);
LD HL,menu_pos_list
LD C,(IX-8)
LD B,(IX-7)
ADD HL,BC
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
LD C,10
LD DE,175
?0088:
CALL LWRD ?0108
POP AF
?0014:
?0012:
; 172. }
; 173. //SetPenColor(Color_WHITE_def);
; 174. SetTextPos(explorer_str_x_def, menu_pos_list[tmp]-2);
LD HL,menu_pos_list
LD C,(IX-8)
LD B,(IX-7)
CALL LWRD ?0111
; 175. DisplayBytes =Count_Byte(temp_record.longname,string_id);
; 176. PutS(temp_record.longname,DisplayBytes);
; 177.
; 178. //显示新的活动菜单
; 179. tmp = active%row_count_def;
LD BC,6
LD E,(IX+10)
LD D,(IX+11)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -