📄 ui_directory_fun.lst
字号:
119 }
\ 0112 ?0029:
\ 0112 FDE1 POP IY
\ 0114 C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 0117 GetActiveDirFrom:
120
121 //********************************************************************************
122 //* Description :输入目录序号DirNo,输出为此目录在list表中的位置
123 //* n 最大值为999
124 //** Arguments :
125 //*
126 //* Returns : 当前目录在文件/目录列表中的序号
127 //*
128 //* Notes :
129 //*
130 //********************************************************************************
131 WORD GetActiveDirFrom(WORD n)
132 {
\ 0117 CD0000 CALL LWRD ?ENT_AUTO_DIRECT_L09
\ 011A FAFF DEFW -6
\ 011C FDE5 PUSH IY
133 WORD h=0,k=0;
134 BYTE m,i,j;
135 BYTE needbreak=0;
136 byte status;
137
138 if(n>999)
\ 011E FD210000 LD IY,0
\ 0122 110000 LD DE,0
\ 0125 DD36FD00 LD (IX-3),0
\ 0129 DD4E02 LD C,(IX+2)
\ 012C DD4603 LD B,(IX+3)
\ 012F 21E703 LD HL,999
\ 0132 A7 AND A
\ 0133 ED42 SBC HL,BC
\ 0135 380D JR C,?0066
\ 0137 ?0030:
139 return 0;
\ 0137 ?0031:
140 status = input8(0x05);
\ 0137 DB05 IN A,(5)
\ 0139 DD77FE LD (IX-2),A
141 output8(0x05, 0xf6);
\ 013C 3EF6 LD A,246
\ 013E D305 OUT (5),A
142
143 if(n==0)
\ 0140 79 LD A,C
\ 0141 B0 OR B
\ 0142 2005 JR NZ,?0033
\ 0144 ?0032:
144 return 0;
\ 0144 ?0066:
\ 0144 210000 LD HL,0
\ 0147 1873 JR ?0052
\ 0149 ?0033:
145 for(i=0;i<125;i++)
\ 0149 DD36FA00 LD (IX-6),0
\ 014D ?0035:
\ 014D DD7EFA LD A,(IX-6)
\ 0150 FE7D CP 125
\ 0152 3060 JR NC,?0034
\ 0154 ?0036:
146 {
147 k++;
\ 0154 13 INC DE
148 m=dirbuf[i];
\ 0155 4F LD C,A
\ 0156 0600 LD B,0
\ 0158 210000 LD HL,dirbuf
\ 015B 09 ADD HL,BC
\ 015C 46 LD B,(HL)
\ 015D DD70FB LD (IX-5),B
149 if((m&1)==1)h++;
\ 0160 CB40 BIT 0,B
\ 0162 2802 JR Z,?0039
\ 0164 ?0038:
\ 0164 FD23 INC IY
\ 0166 ?0039:
150 if((k-1)==n)
\ 0166 21FFFF LD HL,65535
\ 0169 19 ADD HL,DE
\ 016A DD4E02 LD C,(IX+2)
\ 016D DD4603 LD B,(IX+3)
\ 0170 A7 AND A
\ 0171 ED42 SBC HL,BC
\ 0173 283F JR Z,?0034
\ 0175 ?0040:
151 break;
\ 0175 ?0041:
152 for(j=0;j<7;j++)
\ 0175 DD36FC00 LD (IX-4),0
\ 0179 ?0043:
\ 0179 DD7EFC LD A,(IX-4)
\ 017C FE07 CP 7
\ 017E 3029 JR NC,?0042
\ 0180 ?0044:
153 {
154 k++;
\ 0180 13 INC DE
155 m=m/2;
\ 0181 210300 LD HL,3
\ 0184 39 ADD HL,SP
\ 0185 0602 LD B,2
\ 0187 7E LD A,(HL)
\ 0188 CD0000 CALL LWRD ?UC_DIV_L01
\ 018B 77 LD (HL),A
156 if((m&1)==1)h++;
\ 018C CB47 BIT 0,A
\ 018E 2802 JR Z,?0047
\ 0190 ?0046:
\ 0190 FD23 INC IY
\ 0192 ?0047:
157 if((k-1)==n)
\ 0192 21FFFF LD HL,65535
\ 0195 19 ADD HL,DE
\ 0196 DD4603 LD B,(IX+3)
\ 0199 A7 AND A
\ 019A ED42 SBC HL,BC
\ 019C 2006 JR NZ,?0049
\ 019E ?0048:
158 {
159 needbreak=1;
\ 019E DD36FD01 LD (IX-3),1
160 break;
\ 01A2 1805 JR ?0042
\ 01A4 ?0049:
\ 01A4 DD34FC INC (IX-4)
\ 01A7 18D0 JR ?0043
\ 01A9 ?0042:
161 }
162
163 }
164 if(needbreak)
\ 01A9 AF XOR A
\ 01AA DDB6FD OR (IX-3)
\ 01AD 2005 JR NZ,?0034
\ 01AF ?0050:
165 break;
\ 01AF ?0051:
\ 01AF DD34FA INC (IX-6)
\ 01B2 1899 JR ?0035
\ 01B4 ?0034:
166 }
167
168 output8(0x05, status);
\ 01B4 DD7EFE LD A,(IX-2)
\ 01B7 D305 OUT (5),A
169 return h;
\ 01B9 FDE5 PUSH IY
\ 01BB E1 POP HL
170 }
\ 01BC ?0052:
\ 01BC FDE1 POP IY
\ 01BE C30000 JP LWRD ?BANK_LEAVE_DIRECT_L08
\ 01C1 count_dir_num:
171
172 /*
173 ********************************************************************************
174 * Description : 当前目录下,有效的子目录的总数
175 *
176 * Arguments :
177 *
178 * Returns : 子目录总数
179 *
180 * Notes :
181 *
182 ********************************************************************************
183 */
184 WORD count_dir_num(void)
185 {
\ 01C1 C5 PUSH BC
\ 01C2 D5 PUSH DE
\ 01C3 FDE5 PUSH IY
\ 01C5 DDE5 PUSH IX
\ 01C7 21F2FF LD HL,65522
\ 01CA 39 ADD HL,SP
\ 01CB F9 LD SP,HL
186 WORD tmp,wtemp,total,direxist;
187 char strDir[12];
188 tmp = 0;
189 wtemp = 1;
\ 01CC DD210000 LD IX,0
\ 01D0 FD210100 LD IY,1
\ 01D4 ?0054:
190 while(1)
191 {
192 if (! ToDirEntry(strDir, wtemp))
\ 01D4 FDE5 PUSH IY
\ 01D6 C1 POP BC
\ 01D7 210200 LD HL,2
\ 01DA 39 ADD HL,SP
\ 01DB EB EX DE,HL
\ 01DC 3E00 LD A,BYTE3 ToDirEntry
\ 01DE 210000 LD HL,LWRD ToDirEntry
\ 01E1 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01E4 2C INC L
\ 01E5 2D DEC L
\ 01E6 2013 JR NZ,?0057
\ 01E8 ?0056:
193 {
194 return tmp;
\ 01E8 DDE5 PUSH IX
\ 01EA E1 POP HL
195 }
\ 01EB EB EX DE,HL
\ 01EC 210E00 LD HL,14
\ 01EF 39 ADD HL,SP
\ 01F0 F9 LD SP,HL
\ 01F1 EB EX DE,HL
\ 01F2 DDE1 POP IX
\ 01F4 FDE1 POP IY
\ 01F6 D1 POP DE
\ 01F7 C1 POP BC
\ 01F8 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 01FB ?0057:
196 else
197 {
198 // 只检查文件夹是否有效
199 total = GetFileTotal(strDir, TRUE);
\ 01FB 210000 LD HL,0
\ 01FE 39 ADD HL,SP
\ 01FF E5 PUSH HL
\ 0200 0E01 LD C,1
\ 0202 23 INC HL
\ 0203 23 INC HL
\ 0204 EB EX DE,HL
\ 0205 3E00 LD A,BYTE3 GetFileTotal
\ 0207 210000 LD HL,LWRD GetFileTotal
\ 020A CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 020D 4D LD C,L
\ 020E 44 LD B,H
\ 020F E1 POP HL
\ 0210 71 LD (HL),C
\ 0211 23 INC HL
\ 0212 70 LD (HL),B
200 FS_CD(strDir);
\ 0213 210200 LD HL,2
\ 0216 39 ADD HL,SP
\ 0217 EB EX DE,HL
\ 0218 CD0000 CALL LWRD FS_CD
201 if (ToDirEntry(strDir,1))
\ 021B 010100 LD BC,1
\ 021E 210200 LD HL,2
\ 0221 39 ADD HL,SP
\ 0222 EB EX DE,HL
\ 0223 3E00 LD A,BYTE3 ToDirEntry
\ 0225 210000 LD HL,LWRD ToDirEntry
\ 0228 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 022B 2C INC L
\ 022C 2D DEC L
\ 022D 2805 JR Z,?0059
\ 022F ?0058:
202 {
203 direxist=1;
\ 022F 110100 LD DE,1
204 }
205 else
\ 0232 1803 JR ?0060
\ 0234 ?0059:
206 {
207 direxist=0;
\ 0234 110000 LD DE,0
\ 0237 ?0060:
208 }
209 output8(0x4e,input8(0x4e)|0x8);
\ 0237 DB4E IN A,(78)
\ 0239 CBDF SET 3,A
\ 023B D34E OUT (78),A
210
211 FS_CD("\\");
\ 023D D5 PUSH DE
\ 023E 110000 LD DE,?0061
\ 0241 CD0000 CALL LWRD FS_CD
\ 0244 D1 POP DE
212 }
213 output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
\ 0245 DB4E IN A,(78)
\ 0247 CBDF SET 3,A
\ 0249 D34E OUT (78),A
214 if((total != 0)||direxist)
\ 024B 210000 LD HL,0
\ 024E 39 ADD HL,SP
\ 024F 7E LD A,(HL)
\ 0250 23 INC HL
\ 0251 B6 OR (HL)
\ 0252 2004 JR NZ,?0064
\ 0254 7B LD A,E
\ 0255 B2 OR D
\ 0256 2802 JR Z,?0063
\ 0258 ?0064:
\ 0258 ?0065:
\ 0258 ?0062:
215 tmp++;
\ 0258 DD23 INC IX
\ 025A ?0063:
216
217 wtemp ++;
218 }
219 }
\ 025A FD23 INC IY
\ 025C C3D401 JP LWRD ?0054
220
221
\ 0000 RSEG CSTR
\ 0000 ?0061:
\ 0000 5C00 DEFB 92,0
\ 0002 END
Errors: none
Warnings: none
Code size: 607
Constant size: 2
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -