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