📄 ui_director2.s01
字号:
?0028:
; 219.
; 220. ResShowPic(MFILE,13,file_pos[i-top]-1);
LD C,(IX+2)
LD B,A
LD H,B
LD L,(IX-9)
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
?0031:
; 223. {
; 224. {
; 225. ResShowPic(MDIR,10,file_pos[i-top]-4);
LD C,(IX+2)
LD B,A
LD H,B
LD L,(IX-9)
SBC HL,BC
LD BC,file_pos
ADD HL,BC
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
LD C,10
LD DE,91
?0079:
CALL LWRD ?0090
POP AF
?0032:
?0030:
; 226. }
; 227. }
; 228. SetTextPos(explorer_str_x_def, file_pos[i-top]-2);
LD C,(IX+2)
LD B,0
LD H,B
LD L,(IX-9)
AND A
SBC HL,BC
LD BC,file_pos
CALL LWRD ?0092
; 229. PutS(temp_record.longname,-1);
INC (IX-9)
; 230. }
; 231. }
JP LWRD ?0022
?0021:
?0017:
; 232. SetPenColor(oldDC_sav.PenColor);
LD C,(IX-6)
LD B,(IX-5)
LD E,(IX-8)
LD D,(IX-7)
CALL LWRD SetPenColor
; 233. SetBackgdColor(oldDC_sav.BackgdColor);
LD HL,6
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
CALL LWRD SetBackgdColor
; 234. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0088:
LD BC,0
LD DE,65535
JP LWRD SetPenColor
?0089:
CALL LWRD ?UC_MOD_L01
LD (IX-10),A
LD C,A
LD B,0
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
LD A,(temp_record)
DEC A
RET
?0091:
LD C,31
LD DE,50
?0090:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
?0092:
ADD HL,BC
LD A,(HL)
ADD A,254
LD C,A
LD E,32
CALL LWRD SetTextPos
LD C,255
LD DE,temp_record+25
CALL LWRD PutS
RET
?0093:
AND A
SBC HL,BC
LD C,L
LD B,H
LD DE,75
JP LWRD ?S_MUL_L02
init_dir_buf:
; 235.
; 236.
; 237. //********************************************************************************
; 238. //* Description :建立快速查询表,目录更新时需要重新调用此函数
; 239. //*
; 240. //** Arguments :
; 241. //*
; 242. //* Returns :
; 243. //*
; 244. //* Notes :
; 245. //*
; 246. //********************************************************************************
; 247. void init_dir_buf(void)
; 248. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -38
PUSH IY
; 249. WORD i, tmp, total;
; 250. char Backbuf[32];
; 251. BOOL direxist;
; 252.
; 253. Initdirbuf(); //清除目录检索表
LD A,BYTE3 Initdirbuf
LD HL,LWRD Initdirbuf
CALL LWRD ?BANK_CALL_DIRECT_L08
; 254. tmp = 1;
; 255.
; 256. FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
LD HL,0
PUSH HL
LD C,2
LD L,10
ADD HL,SP
EX DE,HL
CALL LWRD FS_Backup
POP HL
; 257. dir_total_num=count_dir_num();
LD A,BYTE3 count_dir_num
LD HL,LWRD count_dir_num
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (dir_total_num),HL
; 258. file_total_num=GetFileTotalCur(FALSE);
LD E,0
LD A,BYTE3 GetFileTotalCur
LD HL,LWRD GetFileTotalCur
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (file_total_num),HL
; 259. list_total_num=dir_total_num+file_total_num+1;
LD BC,(dir_total_num)
ADD HL,BC
INC HL
LD (list_total_num),HL
; 260. fselTotal=file_total_num;
LD HL,(file_total_num)
LD (fselTotal),HL
; 261.
; 262. for(i = 1; i <= dir_total_num; i++)
LD IY,1
LD (IX-38),1
LD (IX-37),0
?0034:
LD C,(IX-38)
LD B,(IX-37)
LD HL,(dir_total_num)
AND A
SBC HL,BC
JP C,?0033
?0035:
?0038:
; 263. {
; 264. while(1)
; 265. {
; 266. if(tmp == 1)
PUSH IY
POP HL
LD A,1
XOR L
OR H
JR NZ,?0041
?0040:
; 267. FS_Dir(file_name, Ui_IgnoreExt, FS_DIR_DIR);
LD C,129
PUSH BC
LD BC,Ui_IgnoreExt
LD DE,file_name
CALL LWRD FS_Dir
POP HL
?0041:
; 268. if(tmp > 1)
PUSH IY
POP BC
LD HL,1
AND A
SBC HL,BC
JR NC,?0043
?0042:
; 269. FS_Dir(file_name, Ui_IgnoreExt, FS_DIR_DIR_CONT);
LD C,1
PUSH BC
LD BC,Ui_IgnoreExt
LD DE,file_name
CALL LWRD FS_Dir
POP HL
?0043:
; 270. tmp++;
; 271. FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
LD HL,0
PUSH HL
LD C,2
LD L,10
ADD HL,SP
EX DE,HL
CALL LWRD FS_Backup
POP HL
; 272. total = GetFileTotal(file_name, TRUE);
LD C,1
LD DE,file_name
LD A,BYTE3 GetFileTotal
LD HL,LWRD GetFileTotal
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-36),L
LD (IX-35),H
; 273. FS_CD(file_name);
LD DE,file_name
CALL LWRD FS_CD
; 274. if (ToDirEntry(file_name,1))
LD BC,1
LD DE,file_name
LD A,BYTE3 ToDirEntry
LD HL,LWRD ToDirEntry
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
INC IY
JR Z,?0045
?0044:
; 275. {
; 276. direxist=1;
LD (IX-34),1
; 277. }
; 278. else
JR ?0046
?0045:
; 279. {
; 280. direxist=0;
LD (IX-34),L
?0046:
; 281. }
; 282. output8(0x4e,input8(0x4e)|0x8);
IN A,(78)
SET 3,A
OUT (78),A
; 283. FS_CD("\\");
LD DE,?0047
CALL LWRD FS_CD
; 284.
; 285. FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
LD HL,0
PUSH HL
LD C,2
LD L,10
ADD HL,SP
EX DE,HL
CALL LWRD FS_Restore
POP HL
; 286. output8(0x4e,input8(0x4e)|0x08); //清WATCH DOG
IN A,(78)
SET 3,A
OUT (78),A
; 287. if((total != 0)||(direxist))
LD A,(IX-36)
OR (IX-35)
JR NZ,?0037
OR (IX-34)
JP Z,?0035
?0050:
?0051:
?0048:
; 288. {
; 289. break;
?0049:
?0037:
; 290. }
; 291. }
; 292. Setdirbuf( tmp - 1 );
LD HL,65535
PUSH IY
POP BC
ADD HL,BC
EX DE,HL
LD A,BYTE3 Setdirbuf
LD HL,LWRD Setdirbuf
CALL LWRD ?BANK_CALL_DIRECT_L08
INC (IX-38)
JR NZ,?0080
INC (IX-37)
?0080:
JP LWRD ?0034
?0033:
; 293. }
; 294. FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
LD HL,0
PUSH HL
LD C,2
LD L,10
ADD HL,SP
EX DE,HL
CALL LWRD FS_Restore
POP HL
; 295. }
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
get_dir_name:
; 296.
; 297. /********************************************************************************
; 298. * Description : 获取第N个有效的目录
; 299. *
; 300. * Arguments :
; 301. *
; 302. * Returns :
; 303. *
; 304. * Notes :
; 305. *
; 306. ********************************************************************************
; 307. */
; 308. bool get_dir_name(char *file, WORD num)
; 309. {
PUSH IY
PUSH IX
PUSH BC
PUSH AF
PUSH DE
POP IX
; 310.
; 311. WORD m, tmp,total_file;
; 312. if(num>dir_total_num)
LD HL,(dir_total_num)
AND A
SBC HL,BC
JR NC,?0053
?0052:
; 313. return 0;
LD L,0
JP LWRD ?0065
?0053:
; 314. if(num == 0) //根目录或目录首
LD A,C
OR B
JR NZ,?0055
?0054:
; 315. {
; 316. if(fselDirLayer==0)
LD A,(fselDirLayer)
OR A
JR NZ,?0057
?0056:
; 317. {
; 318. file[0] = 'R';
LD (IX+0),82
; 319. file[1] = 'O';
LD (IX+1),79
; 320. file[2] = 'O';
LD (IX+2),79
; 321. file[3] = 'T';
LD (IX+3),84
; 322. file[4] = 0;
LD (IX+4),A
; 323. }
; 324. else
JR ?0058
?0057:
; 325. {
; 326. file[0] = '\\';
LD (IX+0),92
; 327. file[1] = 0;
LD (IX+1),0
?0058:
; 328. }
; 329. fselDirNo[fselDirLayer]=0;
LD BC,(fselDirLayer)
LD B,0
LD HL,fselDirNo
ADD HL,BC
LD (HL),B
; 330. return 1;
JR ?0061
; 331.
; 332. }
?0055:
; 333. else
; 334. {
; 335. tmp=0;
; 336. tmp = Getdirbuf(num);
LD E,C
LD D,B
LD A,BYTE3 Getdirbuf
LD HL,LWRD Getdirbuf
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
; 337.
; 338. fselDirNo[fselDirLayer]=tmp;
LD BC,(fselDirLayer)
LD B,0
LD HL,fselDirNo
ADD HL,BC
PUSH IY
POP BC
LD (HL),C
; 339.
; 340. if(tmp > 0)
PUSH IY
POP HL
LD A,L
OR H
JR Z,?0061
?0059:
; 341. {
; 342. FS_Dir(file, Ui_IgnoreExt, FS_DIR_DIR);
LD C,129
PUSH BC
LD BC,Ui_IgnoreExt
PUSH IX
POP DE
CALL LWRD FS_Dir
POP HL
; 343. for(m = 2; m <= tmp; m++)
LD HL,0
ADD HL,SP
LD (HL),2
INC HL
LD (HL),0
?0062:
DEC HL
LD C,(HL)
INC HL
LD B,(HL)
PUSH IY
POP HL
AND A
SBC HL,BC
JR C,?0061
?0063:
; 344. FS_Dir(file, Ui_IgnoreExt, FS_DIR_DIR_CONT);
LD C,1
PUSH BC
LD BC,Ui_IgnoreExt
PUSH IX
POP DE
CALL LWRD FS_Dir
POP HL
LD HL,0
ADD HL,SP
INC (HL)
INC HL
JR NZ,?0062
INC (HL)
; 345. }
JR ?0062
?0061:
?0060:
; 346. return 1;
LD L,1
; 347. }
?0065:
POP AF
POP AF
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
; 348. }
DecodeOnePage:
; 349.
; 350. /********************************************************************************
; 351. * Description : decode onepage file record .
; 352. *
; 353. * Arguments :
; 354. * top:first record
; 355. * bottom:last record
; 356. * type : show file kind
; 357. * string_id: language type
; 358. * Returns :
; 359. *
; 360. **type= DIRECTORY_MUSIC/DIRECTORY_VOICE/...
; 361. *
; 362. ********************************************************************************/
; 363. void DecodeOnePage(WORD top,WORD bottom,BYTE type, BYTE string_id)
; 364. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -50
PUSH IY
; 365. WORD i,NameNum,temp;
; 366. char Longnamebuf[50];
; 367. temp=fselTotal;
LD IY,(fselTotal)
; 368. fselTotal=GetFileTotalCur(FALSE);
LD E,0
LD A,BYTE3 GetFileTotalCur
LD HL,LWRD GetFileTotalCur
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (fselTotal),HL
; 369. for(i = top; i <= bottom; i++)
LD E,(IX+2)
LD D,(IX+3)
?0067:
LD L,(IX+4)
LD H,(IX+5)
AND A
SBC HL,DE
JR C,?0066
?0068:
; 370. {
; 371. if(i>dir_total_num) //文件
LD HL,(dir_total_num)
SBC HL,DE
PUSH DE
JR NC,?0071
?0070:
; 372. {
; 373. fselGetByNO(file_name, (i - dir_total_num ));
LD BC,(dir_total_num)
EX DE,HL
AND A
SBC HL,BC
LD C,L
LD B,H
LD DE,file_name
LD A,BYTE3 fselGetByNO
LD HL,LWRD fselGetByNO
CALL LWRD ?BANK_CALL_DIRECT_L08
POP DE
; 374. temp_record.filetype= TYPE_FILE;
LD A,1
JR ?0085
; 375. }
; 376. else //目录
?0071:
; 377. {
; 378. get_dir_name(file_name, i );
LD C,E
LD B,D
LD DE,file_name
LD A,BYTE3 get_dir_name
LD HL,LWRD get_dir_name
CALL LWRD ?BANK_CALL_DIRECT_L08
POP DE
; 379. temp_record.filetype= TYPE_DIR;
XOR A
?0085:
LD (temp_record),A
?0072:
; 380. }
; 381. GetLongNameAndSave(file_name,Longnamebuf,string_id); //保存长,短名字到 temp_record
PUSH DE
LD L,(IX+12)
PUSH HL
LD HL,6
ADD HL,SP
LD C,L
LD B,H
LD DE,file_name
LD A,BYTE3 GetLongNameAndSave
LD HL,LWRD GetLongNameAndSave
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
POP DE
; 382. SaveOtherPara(); //保存其他目录结构相关参数到 temp_record
LD A,BYTE3 SaveOtherPara
LD HL,LWRD SaveOtherPara
CALL LWRD ?BANK_CALL_DIRECT_L08
; 383.
; 384. TransOneRecord(OnePageRecord+i-top,&temp_record); //将temp_record的记录数据保存到idm中
PUSH DE
LD C,(IX+2)
LD B,(IX+3)
EX DE,HL
CALL LWRD ?0093
LD HL,OnePageRecord
ADD HL,DE
EX DE,HL
LD A,BYTE3 TransOneRecord
LD HL,LWRD TransOneRecord
LD BC,temp_record
CALL LWRD ?BANK_CALL_DIRECT_L08
POP DE
INC DE
JR ?0067
?0066:
; 385. }
; 386. fselTotal=temp;
LD (fselTotal),IY
; 387. }
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
RSEG CSTR
?0047:
DEFB 92,0
RSEG CONST
file_pos:
DEFB 'w'
DEFB 'b'
DEFB 'M'
DEFB '8'
DEFB '#'
DEFB 14
file_bck_pic:
DEFW 106
DEFW 105
DEFW 104
DEFW 103
DEFW 102
DEFW 101
RSEG DEC_COM_FSL_D
temp_record:
DEFS 75
dir_total_num:
DEFS 2
file_total_num:
DEFS 2
list_total_num:
DEFS 2
list_active:
DEFS 2
cur_group:
DEFS 2
RSEG IDM_COM_FSL_D
OnePageRecord:
DEFS 450
dirbuf:
DEFS 125
RSEG DEC_COM_FSL_R
Ui_IgnoreExt:
DEFB '* '
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -