📄 ui_directory_scroll.s01
字号:
CALL LWRD ?0128
POP HL
POP HL
; 185. ScrollFlag = 0;
XOR A
LD (ScrollFlag),A
; 186. ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
LD L,(IX-22)
PUSH HL
LD L,(IX+8)
PUSH HL
LD HL,(list_active)
PUSH HL
?0116:
PUSH HL
CALL LWRD ?0126
POP HL
POP HL
POP HL
POP HL
?0050:
?0054:
; 187. }
; 188. while(ap_get_message() != 0);
CALL LWRD ap_get_message
OR A
JP Z,?0025
?0055:
; 189. break;
JR ?0050
?0053:
?0056:
; 190.
; 191. case AP_KEY_PLAY | AP_KEY_UP:
; 192. fselSetLocationC(location);
; 193. return RESULT_IGNORE;
; 194. break;
?0057:
; 195.
; 196. case AP_KEY_MODE | AP_KEY_LONG:
; 197. key = RESULT_NULL;
LD (IX-21),0
?0058:
; 198. LongTime:
; 199. output8(0x4e,input8(0x4e) | 0x08);
; 200. TransOneRecord(&temp_record,(OnePageRecord+list_active%GroupDefine));
CALL LWRD ?0131
; 201. fselDirLayer=temp_record.dirlayer; //目录层次 0--根目录
; 202. fselDirNo[fselDirLayer]=temp_record.dirno[fselDirLayer]; //目录序号
PUSH BC
LD B,0
LD HL,fselDirNo
ADD HL,BC
POP BC
LD (HL),B
; 203. fselFileNo=temp_record.fileno; //文件序号
LD HL,(temp_record+9)
LD (fselFileNo),HL
; 204. fselExtNo=temp_record.fselExtNo;
LD A,(temp_record+12)
LD (fselExtNo),A
; 205.
; 206. if(temp_record.name[0] == '\\') //当前所处子目录首,需要返回父目录
LD A,(temp_record+13)
CP 92
JR NZ,?0060
?0059:
; 207. {
; 208. if(fselDirLayer==0)
LD A,(fselDirLayer)
OR A
JR NZ,?0073
?0061:
; 209. fselDirNo[fselDirLayer] = 0;
JR ?0119
; 210. else
?0062:
; 211. fselDirLayer--;
?0063:
; 212. }
; 213. else //当前所处可能是子目录或文件,需要分别处理
?0060:
; 214. {
; 215. if(temp_record.filetype==TYPE_DIR)
LD A,(temp_record)
OR A
LD A,(fselDirLayer)
JR NZ,?0066
?0065:
; 216. {
; 217. if (fselDirLayer <= 7)
LD B,A
LD A,7
CP B
JR C,?0074
?0067:
; 218. {
; 219. if(fselEntCurrentDir(temp_record.name))
LD DE,temp_record+13
LD A,BYTE3 fselEntCurrentDir
LD HL,LWRD fselEntCurrentDir
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR Z,?0074
?0069:
; 220. fselDirLayer--;
JR ?0073
?0070:
?0068:
; 221. }
; 222. }
; 223. else
?0066:
; 224. {
; 225. if(fselDirLayer==0)
OR A
JR NZ,?0073
?0072:
; 226. fselDirNo[fselDirLayer] = 0;
?0119:
LD C,A
LD B,C
LD HL,fselDirNo
ADD HL,BC
LD (HL),B
; 227. else
JR ?0074
?0073:
; 228. fselDirLayer--;
LD HL,fselDirLayer
DEC (HL)
?0074:
?0071:
?0064:
; 229. }
; 230. }
; 231. fselGetLocation(location); //更新location
LD E,(IX-4)
LD D,(IX-3)
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 232. return key;
LD L,(IX-21)
LD H,0
; 233. case AP_KEY_MODE | AP_KEY_UP:
JP LWRD ?0110
?0075:
; 234. output8(0x4e,input8(0x4e) | 0x08);
; 235. TransOneRecord(&temp_record,(OnePageRecord+list_active%GroupDefine));
CALL LWRD ?0131
; 236. fselDirLayer=temp_record.dirlayer; //目录层次 0--根目录
; 237. fselDirNo[fselDirLayer]=temp_record.dirno[fselDirLayer]; //目录序号
PUSH BC
LD B,0
LD HL,fselDirNo
ADD HL,BC
POP BC
LD (HL),B
; 238. fselFileNo=temp_record.fileno; //文件序号
LD HL,(temp_record+9)
LD (fselFileNo),HL
; 239. fselExtNo=temp_record.fselExtNo;
LD A,(temp_record+12)
LD (fselExtNo),A
; 240.
; 241. if(temp_record.name[0] == '\\') //当前所处子目录首,需要返回父目录
LD A,(temp_record+13)
CP 92
JR NZ,?0077
?0076:
; 242. {
; 243. if (fselRetParentDir(Strname))
LD HL,8
ADD HL,SP
EX DE,HL
LD A,BYTE3 fselRetParentDir
LD HL,LWRD fselRetParentDir
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JP Z,?0092
?0078:
; 244. {
; 245. memcpy(temp_record.name,Strname, 11);
LD BC,11
LD DE,temp_record+13
LD HL,8
ADD HL,SP
LDIR
; 246.
; 247. init_dir_buf();
LD A,BYTE3 init_dir_buf
LD HL,LWRD init_dir_buf
CALL LWRD ?BANK_CALL_DIRECT_L08
; 248. list_active=GetActiveDirFrom(temp_record.dirno[fselDirLayer]);
LD HL,temp_record+1
LD BC,(fselDirLayer)
LD B,0
ADD HL,BC
LD E,(HL)
LD D,B
LD A,BYTE3 GetActiveDirFrom
LD HL,LWRD GetActiveDirFrom
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (list_active),HL
; 249. cur_group=list_active/GroupDefine;
LD C,6
CALL LWRD ?0130
; 250. top=(list_active/GroupDefine)*GroupDefine; ; //顶的序号
; 251. bottom=top+GroupDefine-1; //底的序号
; 252. if(bottom>(list_total_num-1))
LD HL,65535
LD BC,(list_total_num)
ADD HL,BC
PUSH IY
POP BC
AND A
SBC HL,BC
JR NC,?0092
?0080:
; 253. bottom=list_total_num-1;
JR ?0123
?0081:
; 254.
; 255. }
; 256. else
?0079:
?0082:
; 257. {
; 258. }
; 259. }
; 260. else //当前所处可能是子目录或文件,需要分别处理
?0077:
; 261. {
; 262. if(temp_record.filetype==TYPE_DIR)
LD A,(temp_record)
OR A
LD A,(fselDirLayer)
JR NZ,?0085
?0084:
; 263. {
; 264. if (fselDirLayer >= 7) //需实验看看是7还是8?
CP 7
JP NC,?0025
?0086:
; 265. {
; 266. break;
?0087:
; 267. }
; 268. if (fselDirNo[fselDirLayer] > 0)
LD C,A
LD B,0
LD HL,fselDirNo
ADD HL,BC
LD A,(HL)
OR A
JR Z,?0092
?0088:
; 269. {
; 270. fselEntCurrentDir(temp_record.name);
LD DE,temp_record+13
LD A,BYTE3 fselEntCurrentDir
LD HL,LWRD fselEntCurrentDir
CALL LWRD ?BANK_CALL_DIRECT_L08
; 271.
; 272. init_dir_buf();
LD A,BYTE3 init_dir_buf
LD HL,LWRD init_dir_buf
CALL LWRD ?BANK_CALL_DIRECT_L08
; 273. list_active=0;
LD L,B
LD H,B
LD (list_active),HL
; 274. cur_group=0;
LD (cur_group),HL
; 275. top=0; //顶的序号
; 276. bottom=top+GroupDefine-1; //底的序号
LD IY,5
; 277. if(bottom>(list_total_num-1))
XOR A
LD (IX-24),A
LD (IX-23),A
DEC HL
LD BC,(list_total_num)
ADD HL,BC
PUSH IY
POP BC
AND A
SBC HL,BC
JR NC,?0092
?0090:
; 278. bottom=list_total_num-1;
?0123:
LD HL,65535
LD BC,(list_total_num)
ADD HL,BC
PUSH HL
POP IY
?0091:
?0089:
; 279. }
; 280. }
; 281. else
JR ?0092
?0085:
; 282. {
; 283. if(fselDirLayer==0)
OR A
JR NZ,?0094
?0093:
; 284. fselDirNo[fselDirLayer] = 0;
LD C,A
LD B,C
LD HL,fselDirNo
ADD HL,BC
LD (HL),B
; 285. else
JR ?0095
?0094:
; 286. fselDirLayer--;
LD HL,fselDirLayer
DEC (HL)
?0095:
; 287.
; 288. fselGetLocation(location); //更新location
LD E,(IX-4)
LD D,(IX-3)
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 289. return RESULT_NULL;
JR ?0113
; 290. }
?0092:
?0083:
; 291. }
; 292. DecodeOnePage(top,bottom,type,string_id);
LD L,(IX+8)
PUSH HL
LD L,(IX-2)
PUSH HL
CALL LWRD ?0128
POP HL
POP HL
; 293. ScrollFlag = 0;
XOR A
LD (ScrollFlag),A
; 294. ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
JR ?0120
; 295. break;
?0096:
; 296.
; 297. case AP_MSG_WAIT_TIMEOUT:
; 298. count++;
INC (IX-19)
; 299. if(count%8==0)
LD A,(IX-19)
AND 7
JP NZ,?0025
?0097:
; 300. {
; 301. fselSetLocationC(location);
?0114:
LD E,(IX-4)
LD D,(IX-3)
LD A,BYTE3 fselSetLocationC
LD HL,LWRD fselSetLocationC
CALL LWRD ?BANK_CALL_DIRECT_L08
; 302. return RESULT_IGNORE;
LD HL,52
; 303. }
JR ?0110
?0098:
; 304. break;
?0099:
; 305.
; 306. case AP_MSG_SD_OUT:
; 307. //如在游览SD卡,但SD卡又被拔出,就返回拔出信号
; 308. if (location->disk == 'H')
LD L,(IX-4)
LD H,(IX-3)
LD A,(HL)
CP 72
JP NZ,?0025
?0100:
; 309. {
; 310. return RESULT_SD_OUT;
LD HL,54
; 311. }
JR ?0110
?0101:
; 312. break;
?0102:
; 313.
; 314. case AP_MSG_SD_IN:
; 315. break;
?0103:
; 316.
; 317. default:
; 318. key=ap_handle_hotkey(key);
CALL LWRD ap_handle_hotkey
LD (IX-21),A
; 319. if(key == RESULT_REDRAW)
CP 50
JR NZ,?0105
?0104:
; 320. {
; 321. return 0; //界面不能重画直接返回
?0113:
LD HL,0
; 322. }
?0110:
LD SP,IX
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0105:
; 323. else if(key != 0)
XOR A
OR (IX-21)
JP NZ,?0058
?0106:
; 324. {
; 325. goto LongTime;
?0107:
; 326. }
; 327. if(ScrollFlag)
LD A,(ScrollFlag)
OR A
JP Z,?0025
?0108:
; 328. ShowDirectory(top,bottom,list_active,list_active,string_id,DiskFlag);
?0120:
LD L,(IX-22)
PUSH HL
LD L,(IX+8)
PUSH HL
LD HL,(list_active)
PUSH HL
PUSH HL
CALL LWRD ?0126
POP HL
POP HL
POP HL
POP HL
?0109:
; 329. break;
?0027:
; 330. } //switch() end
; 331. }//while(1) end
; 332. }
JP LWRD ?0025
?0126:
PUSH IY
POP BC
LD E,(IX-24)
LD D,(IX-23)
LD A,BYTE3 ShowDirectory
LD HL,LWRD ShowDirectory
JP LWRD ?BANK_CALL_DIRECT_L08
?0128:
PUSH IY
POP BC
LD E,(IX-24)
LD D,(IX-23)
?0127:
LD A,BYTE3 DecodeOnePage
LD HL,LWRD DecodeOnePage
JP LWRD ?BANK_CALL_DIRECT_L08
?0129:
LD BC,(cur_group)
ADD HL,BC
LD (cur_group),HL
LD BC,6
LD DE,(list_active)
CALL LWRD ?US_DIV_L02
EX DE,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD (IX-24),L
LD (IX-23),H
LD BC,5
ADD HL,BC
PUSH HL
POP IY
LD HL,65535
LD BC,(list_total_num)
ADD HL,BC
PUSH IY
POP BC
AND A
SBC HL,BC
RET
?0130:
EX DE,HL
CALL LWRD ?US_DIV_L02
LD (cur_group),DE
EX DE,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD (IX-24),L
LD (IX-23),H
LD BC,5
ADD HL,BC
PUSH HL
POP IY
RET
?0131:
IN A,(78)
SET 3,A
OUT (78),A
LD BC,6
LD DE,(list_active)
CALL LWRD ?US_MOD_L02
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+11)
LD (fselDirLayer),A
LD HL,temp_record+1
LD C,A
LD B,0
ADD HL,BC
LD B,(HL)
RET
RSEG CSTR
?0011:
DEFB ':'
DEFB 0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -