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